Java常用组件面试题
网友:ja
文章列表
2024-03-21 15:51:43

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