Java基础、中级、高级、架构面试资料

准备了 500 道阿里面试题,据说能刷掉90%的人!

JAVA herman 1707浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog2,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领
腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云

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

这几天有不少人加我微信好友,问我要一些面试题。我这里准备了大概 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 面试题
数据结构面试题
SpringBoot 和 SpringCloud 面试题

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

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » 准备了 500 道阿里面试题,据说能刷掉90%的人!