春节将至,在这里先祝福读者朋友们,新春快乐。不知不觉2021年已经到来,我在现在这家公司也已经呆了两年多,工资太低,不跳槽都要被应届生倒挂,穷病犯了,于是我开始了面试之旅。这次面试比较多,不乏一些大厂,其中进入HR的有搜狐、爱奇艺、顺丰、好未来、小米、滴滴、美团和阿里。最后去了其中一家。接下来陆陆续续写几篇博文详细说下面试点,本篇文章作为总结开篇。
一、Java基础
现在出去基本不会问int占几个字节,接口和抽象类的区别这种问题了,会问到的基础包括,synchronized的使用、底层原理、优化和与ReentrantLock的不同,ReentrantLock的底层原理,然后就是AQS的原理,公平锁与非公平锁的区别和使用,再聊到自旋锁和乐观锁,CAS,以及Java在JUC包下CAS的使用。
然后是hashmap,现在很少问put和get的源码过程了,但还是需要看,博主也是遇到过的,然后问下是不是线程安全的,不安全在哪,接着就是ConcurrentHashMap,说下1.7和1.8的区别,线程安全的原理,有时候也会从这里开始聊synchronized、CAS和volatile等。
线程池,最好看下源码,我听说有让手写线程池的,虽然我没遇到过,然后就是最基本的几个参数和作用,线程池执行过程,面试官会具体给几个参数,然后问你此时线程池是如何执行的,这个时候一定要把面试官说的多少核心线程数之类的写在纸上,别太自信记忆力。有些会着重问下定时线程池的实现和阻塞队列等。
IO相关,这个知识点一点也不基础,可以说很多,但是很多面试官只会问问BIO/NIO/AIO区别之类的,如果深挖还是有很多的,能多看点就多看点,万一遇到不是那么水的面试官呢。
Java基础基本上要90%以上的正确率,基础不是和别的候选人拉开差距的地方,所以要尽量保证正确率。
二、JVM
常问的就是JVM的内存分区、内存模型、各个分区的功能、1.7.和1.8的区别,然后就是对象创建和垃圾回收,各种垃圾回收器和算法,垃圾回收有些面试官问的很浅,但实际上可以很深。然后就是JVM调优,以及内存溢出、内存泄漏和CPU飙升的问题和解决,别想着被就完了,面试官一般会让你结合实际问题说下,直接背答案会被面试官打断的,这是个加分项,有则加分,没有不扣分(我自己觉得是)。
三、mysql
博主只用过mysql,所以面试就问的它。主要有:隔离级别,赃读幻读不可重复读,b+树,索引结构,hash结构的优缺点,聚簇索引和非聚簇索引,索引下推(这个只有阿里问过)和覆盖索引,索引优化,分库分表及其中间件的选择使用和原理,如果可以的话,分库分表最好结合项目说下,然后就是分库分表后的分页查询,连表查询等问题的解决,还有就是后期扩容如何进行等。MVCC、间隙锁等,这个地方挺难得,只背答案只能得个基础分,有些会会给出具体的sql让你说,一定要听好面试官给出的隔离级别,如果没有,就要结合隔离界级别分开说明。
四、框架
首先就是Spring,现在回答问题不带上源码基本上都是错误答案,别问为什么,太内卷了。AOP和IOC说的时候就是背诵源码,然后就是spring事务的实现,动态代理等还会问一些spring提供的扩展点等,如果你项目有些springboot的话,自动装配原理基本跑不了了,答案就是背诵源码全文,别加自己的理解,背源码就行,有些还会顺便问下springboot和spring的区别,如何选择等。如果你写了springcloud,也会问一些相关的问题,但是这里基本还没有涉及到源码的地方,都是问一些区别之类的,比如,为什么dubbo基本选用netty进行TCP通信,而springcloud用http,这个问题能说很多,知道多少说多少,还有就是zk 和eureka的区别,接着就是cap理论和base理论。
然后是mybatis,这个回答下运行原理就行,稍微结合下源码说说,大差不差,很多面试官也记不住,就是那么一问,你说点别的他还听不懂呢。其他的我看有些面试题也会问#和$的区别啥的,虽然我没有遇到,但是还是要看下,找个培训机构的面试内参之类的看看就行。
五、三方中间件及其他
redis、zk、dubbo、netty、mq、分布式事务、微服务、分布式,知识点太多了,能看到的面试题都背就完了,面试碰运气,遇到不会的也不要慌,因知识点太多了,接下来会着重展开这些中间件写一些博文。
总结
太难、太卷、靠运气,这是博主本次面试的感悟。问的知识点比以前多了,也比以前深,变着花样问你,有时候还要看看你和面试官有没有缘分,最后工资还不一定给多少呢,但是抱怨归抱怨,毕竟是别人面试我们,平常心吧。面试完一定要总结,把不会的记下来,查一查,多次问到的,也记下来,做到脱口而出。多上网找点面试题,有些是培训机构的软文,但是上面的面试题却可以参考下,最后祝大家金三银四跳槽顺利。