近期面试总结

最近两个月大大小小的面试已经不下十来场了,一共面了5.6个公司,大的有蚂蚁金服,小的有初创公司,也有做直播的等等,但是面试都是大同小异,因此来记录一下自己的不足之处以及需要加强的地方。

项目

个人的项目经验其实非常重要,很多面试官往往会从项目入手来考察个人的架构能力以及技术水平。例如会从你负责的模块、平时遇到的技术难点入手来考察你。很多同学可能会碰到和我一样的问题,就是工作上大多数时间负责的是业务模块,很多时候做的是增删改查怎么办。其实不管是业务系统还是中间件架构,我们要做的是多思考,在平时写代码的时候需要多思考那些部分可以优化和改进,并动手进行实践。平时也多看看别的代码,学习好的代码结构对面试或者是我们工作都有着好处。
项目模块也包括一些开源技术的了解和参与,在业余实践可以多看看开源框架,例如spring、dubbo、netty等等,可以学到很多知识。

并发模块

- 线程池
- 锁机制
- 线程安全

java 集合

- 基本上只会问hashMap的原理和应用(和currentHashMap的区别必考题。。。)
- 还会问一些hashMap的扩展,以及hashmap的注意点等等
- guava的不可变集合的优点以及实现

JVM

- 基本上只会问一下基本的内容,除非面试官对JVM这块非常熟悉。其他的只要看两遍《深入理解Java虚拟机》就可以应付面试(`当然个人认为学习所有的知识都不是仅仅为了应付面试,真正的大牛是学以致用`)
- JVM比较难的点是JVM调优(个人没有调优经验)
- 内存溢出以及CPU100%的时候的分析以及排查方法

redis 模块

redis 最常见的问题就是redis的基本结构,当然个人认为可以把这几个基本结构的内部实现原理了解是更好的。以及会涉及在那些场合使用了redis,其实也就是redis的应用场景和优点出发并结合自己的业务进行回答即可。
redis还会从如何实现分布式锁,redis是怎么实现持久化,redis遇到的问题等等出发。可以参考《redis开发与运维》这本书来学习redis相关的知识。

  • rpc(本人学习的是dubbo)
    • 暴露过程,引用过程,调用过程
    • rpc的组成模块和常见问题
    • SPI
    • Http

    • http机构
    • http响应头和请求头
    • http的缺点和优化点(安全,连接状态,效率等等出发)

      IO NIO Netty

    • 这三个是可以一起比较和学习的,循序渐进,三者的区别,以及Netty相比于NIO的优点等等

其他模块

- 序列化
- 设计模式
- 框架设计

目前个人的知识面广度在已经足以应付面试,但是在深度方面需要加强。很多知识知识来源于别人的博客和书本,看到了只是在脑子里过了一遍并没有仔细思考过为什么这个做,这样做的好处是什么。源码也是同理,为什么要这样设计,这样的设计的好处是什么等等。就像一个面试官所说的一样:“很多东西虽然了解,但还是需要知道为什么所以然。”

所以在后面的学习生涯中更要注重深度的加强,真正的把别人的知识化为自己的知识,并运用在自己的业务代码里。

坚持原创技术分享,您的支持将鼓励我继续创作!