java自己得一些面试总结
这是我这几年面了无数家 经常问到的一些面试题,也是自己的一些总结吧
里面没有mysql mysql的一些可以看我另外一篇博客
消息中间件 activemq rabbitmq
https://blog.youkuaiyun.com/Dome_/article/details/84990563
解耦 异步 削峰
如果mq 挂掉 整个系统 瘫痪
怎么判断消息有没有重复消费,消息是否接收到
要是 BCD 三个系统那里,BD 两个系统写库成功了,
结果 C 系统写库失败了,咋整?你这数据就不一致了
activemq 有较低的几率丢失数据
rabbitmq 性能好 延时低
消息重复消费 https://blog.youkuaiyun.com/qq_37606901/article/details/88250920
消息的可靠性 https://blog.youkuaiyun.com/qq_20499001/article/details/88691253
rocketmq
消息的有序性
订单ID hash 取模 保证发送到同一个队列里面
在producer 保证消息有序 ack 返回成功 发送下一条 通过订单ID 保证发送到同一队列上面
消息去重
客户端 发送消息 成功到达 服务端 但服务端没返回 ack 客户端自动重试 服务端就多条重复消息
consumer 通过messageId 或者 幂等性接口设计
消息堆积
扩大 rocketmq的队列数量 扩大 消费者数量
定时消息
rocketmq的可靠性
如果rocketmq没有落盘就挂了 重试 3次 如果重试都失败 记录到mysql 表里面 写一个定时任务去定时处理失败的
rocktmq 消费者消费消息失败 重试 重试 16次 进入 死时队列 手动去处理
事务消息
半消息机制
泛型的好处 消除了强制类型转换,增加了性能
https://blog.youkuaiyun.com/xuebaobao130526/article/details/81302409
arrylist linkedlist hashmap
servlet 生命周期
被创建:执行init方法,只执行一次
1.1Servlet什么时候被创建?
–默认情况下,第一次被访问时,Servlet被创建,然后执行init方法;
–可以配置执行Servlet的创建时机;
2.提供服务:执行service方法,执行多次
3.被销毁:当Servlet服务器正常关闭时,执行destroy方法,只执行一次
事务的隔离级别 传播行为 required not_supported
垃圾回收机制
https://blog.youkuaiyun.com/weixin_39067991/article/details/81045201
线程池 的参数
object 有哪些方法
https://blog.youkuaiyun.com/qq_40574571/article/details/94204633
equals hashcode
https://baijiahao.baidu.com/s?id=1620197502415557866&wfr=spider&for=pc
mysql 主从复制原理 怎么解决延迟
乐观锁和悲观锁 cas算法
AQS(RetreenLock,是一个队列)
sync(不公平和公平)
分布式锁 分布式事务
nginx 集群 redis 集群
ConcurrentHashMap
https://blog.youkuaiyun.com/qq_35190492/article/details/103589011
redis
缓存雪崩(设置随机失效时间)
缓存穿透(设置null缓存,布隆过滤器)
缓存击穿(设置热点永远不过期)
redis 为什么那么快?
1.redis 完全基于内存
2.数据结构简单,对数据操作简单
3.采用单线程 避免上下文切换 用户态和内核态
4.采用多路I/O复用模型,非阻塞IO
redis 挂掉怎么办(持久化)
1.RDB 周期
2.AOF 日志
哨兵集群 sentinal(必须3个实列,如果是2个,一个master挂掉
,那么就没有slave去做故障转移)
哨兵组件功能
集群监控:负责监控 Redis master 和 slave 进程是否正常工作。
消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。
redis 主从之间得数据怎么同步得
你启动一台slave 的时候,他会发送一个psync命令给master ,
如果是这个slave第一次连接到master,他会触发一个全量复制。
master就会启动一个线程,生成RDB快照,还会把新的写请求都缓存在内存中,
RDB文件生成后,master会将这个RDB发送给slave的,
slave拿到之后做的第一件事情就是写进本地的磁盘,然后加载进内存,
然后master会把内存里面缓存的那些新命名都发给slave
redis 主从同步网络断开或者服务器挂掉怎么办
传输过程中有什么网络问题啥的,会自动重连的,并且连接之后会把缺少的数据补上的
redis 得基本数据结构
1.string 共享token,存储一些缓存
2.hash 存储一些对象
3.list 可以做分页
4.set 分布式去重
5.sorted set 微博热点排行榜
redis 双写一致性
1.通过降低并发串行化处理
2.查询不管,更新数据库得时候删除缓存
redis memecached区别
1.redis 支持复杂得数据结构
2.redis 支持原生得集群cluster
3.redis 再存储100k以下数据性能好 memecached存储100k以上数据
redis 线程模型
Redis 内部使用文件事件处理器 file event handler,
这个文件事件处理器是单线程的,
所以 Redis 才叫做单线程的模型。
它采用 IO 多路复用机制同时监听多个 Socket,
根据 Socket 上的事件来选择对应的事件处理器进行处理。
文件事件处理器的结构包含 4 个部分:
多个 Socket
IO 多路复用程序
文件事件分派器
事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
多个 Socket 可能会并发产生不同的操作,
每个操作对应不同的文件事件,
但是 IO 多路复用程序会监听多个 Socket,
会将 Socket 产生的事件放入队列中排队,
事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。
本文汇总了作者多年面试经验总结的Java面试题,涵盖消息中间件、数据库、线程池、垃圾回收机制等核心知识点,深入解析RocketMQ、Redis、数据库主从复制原理,以及常见面试陷阱。
9008

被折叠的 条评论
为什么被折叠?



