目录
1 netty介绍
Netty 是一个 基于 NIO 的 client-server(客户端服务器)框架,使用它可以快速简单地开发网络应用程序,使用主从多线程模型,零拷贝
核心组件:EventLoopGroup EventLoop Channel ChannelHandler 和 ChannelPipeline
netty自带的编解码器LengthFieldBasedFrameDecoder
长连接,心跳机制
使用 Netty 提供的 CompositeByteBuf 类, 可以将多个ByteBuf 合并为一个逻辑上的 ByteBuf, 避免了各个 ByteBuf 之间的拷贝。
ByteBuf 支持 slice 操作, 因此可以将 ByteBuf 分解为多个共享同一个存储区域的 ByteBuf, 避免了内存的拷贝
2 高并发如何处理
高并发读:多级缓存(redis,内存缓存),mysql分库分表和读写分离
高并发写:消息队列异步写,分布式锁(redis),mysql悲观锁和乐观锁(读多写少)
池化:内存池,连接池,线程池
架构:lvs+Nginx,限流降级
3 Nginx高并发原理
master进程和worker进程
io多路复用
负载均衡:轮询,加权轮询,iphash
4 redis调优
避免使用大key
禁止使用全局扫描的命令
合理设置过期时间
list,hash数据结构合理设置大小
使用redis连接池:合理配置参数
使用pipeline
5 怎么解决服务器假死
进程存在,但是无法提供服务
0 检查机器情况,cpu,内存,磁盘
1 top查看cpu,是否有100%以上的占用,查看对应线程id,jstack查看对应线程栈
2 jstat 查看gc日志,gc各个步骤执行时间是否很长
3 jmap查看内存情况,是否有内存泄漏,dump日志分析
6 缓存穿透,击穿,雪崩
穿透:某个key在redis和数据库都不存在
解决:返回空数据,参数校验拦截,使用布隆过滤器
击穿:某个key过期时间到达,大量访问数据库
解决:定时任务续期过期时间
雪崩:很多key同时过期
解决:设置过期时间增加随机值
7 zk在kafka的作用
controller
config
admin
broker(ip和端口)和topic,分区的信息
消费者组(分区和消费offset)信息
broker选主
8 kafka消息不丢失
发送者回调方法判断发送成功还是失败,重试机制
消费者禁用自动提交offset,消费者处理完消息之后再提交offset
broker配置副本数量大于等于3,isr列表中副本数量大于等于2,禁止不同步(副本中消息远落后于原leader)的副本选为主节点
9 aqs有几个队列
clh队列和condition object的等待队列