原本开年过后是面试招聘旺季,金三银四一直是程序员跳槽的最佳时机,可是由于今年突发了疫情,金三银四变成了“金五银六”!
这几天有不少人加我微信好友,问我要一些面试题。我这里准备了大概 500 道左右的面试题,覆盖面非常的广,今天免费分享给大家!
我先给大家简单列举几道吧!
Kafka 高性能的原因?
参考答案:
A,Broker NIO异步消息处理,实现了IO线程与业务线程分离;
B,磁盘顺序写;
C, 零拷贝(跳过用户缓冲区的拷贝,建立一个磁盘空间和内存的直接映射,数据不再复制到用户态缓冲区);
D,分区/分段(每次文件操作都是对一个小文件的操作,非常轻便,同时也增加了并行处理能力);
F,批量发送 (可以指定缓存的消息达到某个量的时候就发出去,或者缓存了固定的时间后就发送出去,大大减少服务端的I/O次数)
E,数据压缩
幂等的处理方式?
参考答案:
1、查询与删除操作是天然幂等
2、唯一索引,防止新增脏数据
3、token机制,防止页面重复提交
4、悲观锁 for update
5、乐观锁(通过版本号/时间戳实现, 通过条件限制where avai_amount-#subAmount# >= 0)
6、分布式锁
7、状态机幂等(如果状态机已经处于下一个状态,这时候来了一个上一个状态的变更,理论上是不能够变更的,这样的话,保证了有限状态机的幂等。)
8、select + insert(并发不高的后台系统,或者一些任务JOB,为了支持幂等,支持重复执行)
RabbitMQ 消息堆积怎么处理?
参考答案:
- 增加消费者的处理能力(例如优化代码),或减少发布频率
- 单纯升级硬件不是办法,只能起到一时的作用
- 考虑使用队列最大长度限制,RabbitMQ 3.1支持
- 给消息设置年龄,超时就丢弃
- 默认情况下,rabbitmq消费者为单线程串行消费,设置并发消费两个关键属性concurrentConsumers和prefetchCount,concurrentConsumers设置的是对每个listener在初始化的时候设置的并发消费者的个数,prefetchCount是每次一次性从broker里面取的待消费的消息的个数
- 建立新的queue,消费者同时订阅新旧queue
- 生产者端缓存数据,在mq被消费完后再发送到mq
- 打破发送循环条件,设置合适的qos值,当qos值被用光,而新的ack没有被mq接收时,就可以跳出发送循环,去接收新的消息;消费者主动block接收进程,消费者感受到接收消息过快时主动block,利用block和unblock方法调节接收速率,当接收线程被block时,跳出发送循环。
- 新建一个topic,partition是原来的10倍;然后写一个临时的分发数据的consumer程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的10倍数量的queue;接着临时征用10倍的机器来部署consumer,每一批consumer消费一个临时queue的数据;等快速消费完积压数据之后,得恢复原先部署架构,重新用原先的consumer机器来消费消息;
负载均衡算法?
参考答案:
常见 6 种负载均衡算法:轮询,随机,源地址哈希,加权轮询,加权随机,最小连接数。
nginx 5 种负载均衡算法:轮询,weight,ip_hash,fair(响应时间),url_hash
dubbo 负载均衡算法:随机,轮询,最少活跃调用数,一致性 Hash。
JVM YGC 和 FGC 发生的具体场景?
参考答案:
正在处理的实现事务功能,下次自动回滚。
队列实现持久化储存,下次启动自动载入。
添加标志位,未处理 0,处理中 1,已处理 2。每次启动的时候,把所有状态为 1 的,置为 0。
关键性的应用就给电脑配个 UPS。
YGC :对新生代堆进行gc。频率比较高,因为大部分对象的存活寿命较短,在新生代里被回收。性能耗费较小。
FGC :全堆范围的gc。默认堆空间使用到达80%(可调整)的时候会触发fgc。以我们生产环境为例,一般比较少会触发fgc,有时10天或一周左右会有一次。
YGC发生场景:edn空间不足。
FGC发生场景:old空间不足,perm空间不足,调用方法System.gc() ,ygc时的悲观策略, dump live的内存信息时(jmap –dump:live)。
一个线程池正在处理服务如果忽然断电该怎么办?
参考答案:
队列实现持久化储存,下次启动自动载入。
但是实际需要看情况,大体思路是这样。
添加标志位,未处理 0,处理中 1,已处理 2。每次启动的时候,把所有状态为 1 的,置为 0。或者定时器处理。
关键性的应用就给电脑配个 UPS。
更多的面试题我就不列举了,太多了。没法一一的列出来,我准备了几个 PDF 文档。截图如下:
更多的我就不截图了,需要的加我微信号:codedq(加过xmtxtt和xttblog的就不要重复加了),晚上我会统一发送的。
: » 准备了 500 道阿里面试题,据说能刷掉90%的人!
原创文章,作者:端木书台,如若转载,请注明出处:https://blog.ytso.com/252197.html