3、 我做了哪些准备

专栏课:面试突击123+JVM专栏课+MYSQL专栏课+ROCKETMQ专栏课,上述专栏学透了开始背笔记。 应付面试基本没有任何问题

亿级流量课:里面的redis讲解让我在被问到redis集群运维以及选型相关问题的时候基本上没有任何问题

jdk源码分析然后就是架构课的jdk源码分析,看完之后真是佩服的不要不要的。真不是一般人能讲的了的。我现在回看我那些笔记,简直就是对jdk内容的透彻掌握了,面试无敌。

只要问到基本没有打不出来的,下面是老师245讲并发课程大纲部分截图:
image.pngd5e1dc814e208f98c7e71d44ec18d4a.jpg

计算机网络,netty这个学了之后网络层面基本没有任何问题了。

分布式锁,分布式事务,分布式全局id
这三大模块的视频一定要学,将会成为你简历中的一个亮点。因为公司实际却是有相关场景,所以面试的时候基本写了必问。

大型电商系统v1。0项目实战—专看设计模式
设计模式有实际结合自己业务用到了比如策略,模板,构造器,工厂,命令等等,面试被问到也基本没有问题。

4、 面试内容

我这里提供几家公司的面试问题
因为好几家公司的面试题。有很多。我不一一列举。这里只写几个比较常见的。

1、递归如何保证不进行太多的压栈操作? 什么是尾递归? 递归函数栈帧越来越多,如何进行递归优化? 编译器底层是怎么对递归优化的? 什么写法可以让递归的栈溢出基本上不可能。?
https://www.yuque.com/docs/share/9d2c0254-339f-4ec7-9d41-0a525db41ab6?# 《尾递归介绍》
2、netty怎么拆包? 假设让你在应用层去设计。如何设计一个协议包。? 如何在拆包的过程中去解析你的那个协议包? 没有回答很好https://www.yuque.com/docs/share/647a6046-8d08-45ff-8601-ee3265a1f6bd?# 《如何设计一个通讯协议》
3、A,B,C,D四个请求链条,如何记录这四个服务的一个链式调用的日志? 我回答了dubbo的invocation设置参数。以及拦截器 。但是他又问如何在不同jvm中取出这个日志。 ? 最后我又回答了拦截器拦截请求。然后存储这个到本地cache 又问你为什么不用threadLocl去处理呢? 讲下底层原理。以及注意事项
https://www.yuque.com/docs/share/b0fa01d7-c986-44f9-90d4-404850f9fc51?# 《ThreadLocal基础及项目中使用实战》
4、讲下transactional注解原理吧? 底层是操作的什么跟数据库进行互通的? 讲了下事物的原理。以及jdbc接口和hibernet框架实现
https://www.yuque.com/docs/share/f89eb26d-dd15-436b-8253-a01d143913fc?# 《spring事物的基本原理》
https://www.yuque.com/docs/share/6b75af4a-5f33-4717-9d72-6fe9098a4e5c?# 《基于hibernate和jdbc完成事务的开启》
5、redis获取的数据后面还要跑定时任务来进行计算? 那么定时任务用的什么东西做的? schedule这个注解用做定时任务多机情况怎么解决并发问题? 为什么要用redisson? 普通的redis锁不能满足你的场景吗?
这里可以看老师架构课中的分布式锁,基本将redisson的原理讲一下就没有什么大问题了。过程中可以讲一下zk锁。毕竟老师也讲了curator。 给面试官讲出来会觉得你了解的比较多
https://www.yuque.com/docs/share/91e9b9ad-2a40-4648-9256-92bd0abd5aa9?# 《redisson可重入锁(reentrant lock)》
image.pnga2c19be84d5b7c727ae04dfe27decde.jpg
https://www.yuque.com/docs/share/faed6566-ff8f-4bab-a172-3bf38dae260c?# 《zk可重入锁源码解析》
image.png4694fe2521c7f44284fcb7ec0b5882e.jpg
6、讲下synchronized底层原理讲一下。为什么concurrentHashmap1.8用synchronized 而1.7用reentrantLock呢? synchronzied锁优化有哪些?具体是jdk哪个版本做了什么优化。。。jdk1.8的synchronized对jdk1.7来说具体有哪些优化?
上面的问题问的很好。因为基本上你要讲明白,你得首先讲一下synchronized,然后讲下他的优化。还要讲一下concurrentHashmap。。以及1.7版本中的reentrantLock 所以要都跟他们讲清楚才能算完整理解了。下面是做的笔记。
https://www.yuque.com/docs/share/4aca7f04-2048-49a9-bcbd-db80803040b7?# 《synchronized详细介绍》
https://www.yuque.com/docs/share/b90afd4e-7c8b-4fbf-8b0c-2782319c66ff?# 《ConcurrentHashMap源码解析》
https://www.yuque.com/docs/share/426cbaff-e1d5-4de5-9116-37c790a0961e?# 《AQS是什么?基于ReentrantLock解密!》
image.png
7、讲一下volatile关键字
这个讲起来会讲的很深。你可以从mesi讲起。

先讲为什么引入高速缓存? 因为效率问题

再讲为什么引入MESI协议, 因为缓存一致性

再讲为什么引入写缓冲器和无效队列 ,因为串行化问题

再讲为什么引入内存屏障, 因为可见性和有序性问题,从而引出volatile关键字

上面几个讲完,基本就证明你对volatile很理解了。
https://www.yuque.com/docs/share/4b83a6b7-8d0b-42e2-9224-c3a5bc8aa2d6?# 《MESI缓存一致性协议》
image.png15508beacf30587b7407a399da2572f.jpg
8、类加载的机制是怎么样的一个流程? jvm内存分区有哪几块儿?
https://www.yuque.com/docs/share/4360e1c9-cc14-4c90-9c38-ee99effb55bf?# 《两道面试题,带你解析Java类加载机制》

https://www.yuque.com/docs/share/a6dd5897-d341-4beb-b838-0ffd3f0c03f0?# 《jvm整体运行的流程图详解(超详细)》
image.png
9、你能说一下你是怎么对你用到的中间件的一些选型吗? 讲了下rocketmq和kafka和rabbit的特性
这里rocketmq专栏就已经讲得很清楚了。直接按照专栏来就OK,然后再结合一下业务。
https://www.yuque.com/docs/share/ee69733a-13a4-4384-b38b-d77c1eb0ed8f?# 《消息队列技术选型Kafa,RabbitMQ与RocketMQ》
10、mysql优化的时候一般会考虑怎么优化呢?数据库主从是怎么同步的有了解吗?mysql什么情况下会丢数据?比如客户端已经拿到commit的响应了,什么情况下会发生这个丢数据的问题? 怎么避免这个情况呢?
将mysql专栏索引记得笔记讲出来基本没啥大问题。
https://www.yuque.com/docs/share/246649c8-f06d-4bed-aa4b-a41be122df73?# 《mysql索引》
https://www.yuque.com/docs/share/bb3bfe58-0c7b-4f60-a3e1-4c45fad08e9a?# 《执行一条sql语句经历了哪些过程》

image.png

5、 面试技巧

1、尽量线上面试, 这样才能有机会边电话,边翻笔记。哪怕翻到一个关键字,也能作为一个提示,去讲更多话。
a:如果有些公司不能线上,也可以跟猎头提要求,能不能一面二面先线上,等三面四面再去一下现场。
b:面试前可以问清楚这个公司考不考算法,如果不考采取投递简历。 如果自己准备了就不用这一步

2、话一定要多,提出一个问题之后尽量多讲一下话,讲的越细越好。这样才能拖时间。 因为一场面试最多45分钟到一个小时。讲的越多,对方提问的时间越少。 期间可以说明白,如果嫌自己说的太多可以随时打断。
3、讲的时候多结合业务来讲技术,解决的问题一定要阐述清楚,为什么要用到这个技术?什么场景用到的。解决的问题给公司带来了什么好处要讲清楚。
a:在公司最大的挑战以及为公司做的贡献一定要准备好说什么。 对业务的理解一定要准备好 对将来的发展方向一定要准备好,走技术还是管理,做业务开发还是基础架构。

说清楚简历一定要写自己完全掌握的东西, 有些公司比如阿里,基本每个面试官都会问你上面的问题。尤其看中你入职之后为公司做了哪些贡献。如果你每天只是crud的话。基本你就没什么希望了。

你要根据业务需求,采用了什么技术方案,为公司解决了什么问题,节省了多少人力成本或者外包成本。都讲清楚。人家自然对你刮目相看。

b:比如spring源码没看过就不要写。 dubbo没看过源码也不要写。 但是问到了能说出一些简单的大范围的话。 这个建议看老师的面试突击。基本应对一些大方向的问题。不成问题。
4、面试前的介绍一定要仔细锻炼
a:首先介绍自己的工作经历,几家公司,年限多长。离职原因(背调时如果不实会出问题,所以说实话就行)

b:然后介绍自己负责的业务模块有哪些。 过程中讲出的一些技术实现方式涉及的技术点一定要完全掌握才去说。

c:最后非常关键的点就是一定一定要讲清楚 “ 自己擅长的技能” 也就是简历中专业技能一栏中写的一些技术点。 从头到尾背下来。

这样面试官因为是最后听到的,所以会针对这个擅长的技能来问你。这样基本全程就是按照自己准备好的技术来应对提问了。时间最多一个小时。我相信你对一个技术掌握了之后是完全可以扯很久的。
6、总结看了那么多面经,最后你会发现,架构课里的东西没学到,简历上根本就不敢写。所以追究到底还是自己得踏踏实实的坚持学。

还有一个,你学的时候,可能有很多人不理解,甚至看不起你,不愿意搭理你。没有关系,你自己强大起来了,还怕别人不正眼看你吗。
如果你不把脑袋削尖了往前钻,谁来主动跟你打招呼。动力不足的时候,想想你的薪水能满足你的花销吗? 能养得起家庭吗?主动学起来,把压力转化为动力。学习之路,没有捷径。有的只是自己顶住压力,忍住寂寞, 拼命学习。
最后送各位儒猿群的小伙伴一句话以作共勉:“东方欲晓,莫道君行早,踏遍青山人未老,风景这边独好”。

最后的最后,感谢儒猿技术窝提供这么好的平台,认识这么多志同道合的朋友,感谢架构课让我成功跳槽大厂,祝愿大家都早日找到自己心仪的工作,一起加油学起来!