> 文章列表 > Java常用组件面试题

Java常用组件面试题

Java常用组件面试题

文章目录

      • HTTP通信协议
      • Kafka消息队列
      • Linux操作系统
      • Mybatis框架
      • SpringCloud框架

HTTP通信协议

  • https通信过程
    https协议是指对通过http协议传输数据的进行加密和解密。当客户端发送https请求时,服务端会返回数字证书给客户端,客户端验证通过后会生成随机数,返回给服务端,服务端使用随机数对数据进行加密,返回加密后的数据给客户端,客户端拿到数据后使用随机数进行解密
  • 状态码
    2开头的表示请求被成功处理;3开头的表示请求被重定向;4开头的表示客户端错误;5开头的表示服务器内部错误

Kafka消息队列

  • 重复消费
    消费者consumer维护了一个offset,并且向服务器周期性提交offset,之后就从offset处开始消费,但是提交是有时间间隔,如果在这个时间内退出进程了,或者取消订阅就会导致offset没有提交,下次消费时就会从上次的offset处开始,而不是从本地未提交的offset处开始,导致重复消费。对消费的消息添加标识,标记当前的消息已经被消费过,就不会再重复消费;关闭自动提交,消费完成后手动提交

Linux操作系统

  • 硬链接和软链接的区别
  • 修改用户权限的指令chmod
  • 改变用户所属的组的指令
  • 查看日志的指令

Mybatis框架

  • sql的执行过程
    springboot整合了mybatis框架之后,会在启动时解析映射的xml文件,同时为接口创建代理对象。在执行sql时会从Configuration中根据接口的类路径字符串获取MappedStatement即sql语句标签,然后对方法上的注解进行处理,在注解value属性名和实参之间建立映射关系。之后再创建执行器,为执行器安装拦截器插件,然后执行sql。首先尝试从全局缓存中获取,再从会话级的缓存中获取,如果没有获取到则到数据库执行sql进行查询,最后提交事务,关闭sql会话。
  • #与$
    • mybatis处理"${}“时是通过StringBuilder的append()方法处理的,进行字符串拼接的,会存在sql侵入的风险,比如"select * from ${table}”,如果传参是"duty_a",则sql变成"select * from duty_a";处理"#“时是用”?“替换”#{}",然后调用PreparedStatement中的带有类型的set方法将参数值写到sql中,“select * from ‘duty_a’”,不会有sql侵入的风险。
    • 如果sql带有"${}“则是动态sql,会在运行的时候解析,影响效率;”#{}“会进行预编译,在运行之前就用”?"替换

SpringCloud框架

  • nacos与erueka的区别
    1. nacos可以在界面手动下线微服务,而eureka只显示微服务状态
    2. nacos集成了配置中心,eureka没有
    3. nacos可以根据配置在cp和ap之间进行切换,eureka就是ap
  • eureka心跳机制
    客户端在定时任务中将实例的服务名,id,状态发送给服务端,服务端根据服务名和id获取服务的实例信息,然后更新实例状态,并且在集群中同步,由此也能看出erueka是ap高可用框架。
  • gateway的作用
    路由请求、鉴权、负载均衡、灰度发布(微服务实例存在时进行上线)