原本开年过后是面试招聘旺季,金三银四一直是程序员跳槽的最佳时机,可是由于今年突发了疫情,金三银四变成了“金五银六”!

这几天有不少人加我微信好友,问我要一些面试题。我这里准备了大概 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 文档。截图如下:

JVM 面试题。

Java 数据结构面试题。

SpringBoot 和 SpringCloud 面试题。

更多的我就不截图了,需要的加我微信号:codedq(加过xmtxtt和xttblog的就不要重复加了),晚上我会统一发送的。

©著作权归作者所有:来自51CTO博客作者mob604756f06ed8的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Vue3 系统入门与项目实战
  2. 大数据基础系列之kafka知识点和优点
  3. 大数据基础系列之kafka011生产者缓存超时,幂等性和事务实现
  4. Kafka源码系列之分组消费的再平衡策略
  5. Kafka源码系列之kafka如何实现高性能读写的
  6. RocketMQ核心技术精讲与高并发抗压实战
  7. 5G时代必备 音视频WebRTC实时互动直播技术入门与实战
  8. 国内Top团队大牛带你玩转Android性能分析与优化
  9. 大数据和云计算技术周报(第27期)

随机推荐

  1. 约束数据库表,以便只有一行可以在列中具有
  2. sqlite developer过期解决办法
  3. python pandas库的应用(类比mysql语言)
  4. SQL Server 高可用性(一)AlwaysOn 技术
  5. 为什么我使用此Linq to Sql方法获得Inval
  6. PB中动态SQL处理BLOB的方式
  7. mysql-5.7.21-winx64.zip 下载安装(Win10)
  8. 网站速度慢及其解决方法
  9. 在Delete From语句中带有别名的表变量。
  10. SQL查出比经理薪水还高的员工信息: