java开发面试题

目录

1. netty介绍

2 高并发如何处理

3 Nginx高并发原理

4 redis调优

5 怎么解决服务器假死

6 缓存穿透,击穿,雪崩

7 zk在kafka的作用

8 kafka消息不丢失

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的等待队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值