前言

大厂的、小厂的大概也经历了七八场面试了,还没有Offer,难受。

字节二面挂了,超级难受,写篇面经平复一下心情,春招真是折煞人呀。

大厂的面试官比较喜欢顺着问,面试又是有时间的,他能问的问题是有限的,所以去引导一下面试官去问你什么会处于比较主动的位置。

项目部分

  1. 挑一个项目讲讲
  2. 项目的架构是什么样子的
  3. 项目中的难点,怎么解决的
  4. 怎么解决项目中存在的安全问题(这个问题一般就是针对比较长提到的一些Web安全的攻击手段,比如说XSS、SQL注入、CSRF、DDoS是怎么应对的)

目前项目方面的面试问题还没有问的我特别深入的,大致就上面四个问题。

Java部分

  1. 说一下HashMap内部的实现(注意红黑树是Java8引入的,以及一些默认值,还有put的整个过程)
  2. HashMap是线程安全的吗?(这个时候你肯定需要讲讲ConcurrentHashMap)
  3. volatile关键字、什么是指令重排(这个问题水非常深,一定要认真对待)
  4. Java反射,你在什么地方用过反射(如果你没有实际用过,可以举例Spring管理bean的方式,还有设计模式里面的工厂方法等等,设计模式里面处处都是多态和反射)
  5. == 和 equals 的区别(虽然很基础,但是被问过两次了)
  6. int 和 Integer 的区别,为什么要有包装类?(这个京东一面的面试官还问了一个比较深入的,就是 Integer a = 128, b = 128; 是否相等,127呢?)
  7. Java8的新特性(通常面试官会先问你常用的JDK版本,再问这个版本的新特性。说些你用过的就可以了,一般我就说 Lambda表达式和函数式接口、方法引用、类库更新的Streams()来操作集合、新的Date/Time API、支持了Base64编码。这也是一个水很深的问题,我觉得还是不要提到你被追问答不上来的内容比较好)
  8. 接口和抽象类的区别,final 可以修饰抽象类吗
  9. Spring里面使用AOP(一般我回答就点一下AOP是怎样的思想,什么场景使用,Spring里面的一个切面类的那些关键注解)
  10. Java里面怎么给线程上锁(第一次被我这个问题的时候答的不是很好,因为我的第一反应是线程上啥锁,线程不是去竞争锁吗?现在想想应该就是问我synchronizd关键字、Lock类,锁从乐观锁到悲观锁的升级过程巴拉巴拉)
  11. 什么是悲观锁和乐观锁
  12. 你的项目里面用多线程拿来干嘛?(我一般都说维护一个线程池,用线程工厂拿到线程去执行一些异步任务)

大概是我的简历里面没写jvm,所以这么多面试下来几乎都没有问我jvm的,连java内存模型和gc都没有。

我虽然在简历里面写了Spring Cloud,自我介绍的时候也说了Spring Cloud,讲项目的时候也提到近期在做服务化重构,但是只有一个面试官问了我一个断路器,其它所有面试官都是只字未提。

MySQL、Redis

如果你的简历里面写了Redis,那么Redis基本是必问的了,几乎所有面试官问的都是你的项目中的哪里用了Redis,或者说用Redis来做什么了

  1. 项目中的哪里用了Redis,用Redis来做什么了(一般我就回答缓存用户session和菜单权限、缓存部分一致性要求不高的数据、缓存一些静态数据、对一些写操作非常频繁的业务单独做缓存,比如点赞业务。当然如果你的项目Redis是集群的,你可以讲讲哨兵模式,用Redis来做分布式锁了,可以讲讲怎么实现的,Redisson这种。而我自己所做过的项目其实并没有一个明确的缓存层,缓存真要操作起来一致性维护没有一整套流程和机制还是很麻烦的)
  2. Redis要查询出大量缓存数据怎么操作(京东一面问的,面试官说是超纲题)
  3. MySQL的四种事务级别(虽然是个基础问题,但这个问题有很多可以说其实,比如在讲可重复读的时候,你可以提到 InnoDB的MVCC,间隙锁解决幻读等等)
  4. 说说MySQL的索引(索引类型、怎么设计、利弊)
  5. 线上出现加载慢的情况,怎么定位数据库层面的问题?(我自己回答的时候说大部分情况我都可以直接找到SQL,因为代码都是我写的。当然正经回答你还要带上MySQL的慢查询日志开启,需要点一下那几个参数)

计算机基础部分

一般最多的问的是计算机网络和操作系统,只有字节二面的时候我自己跳火坑,面试官问到了我指令周期这类计组范围内的知识,问到这里时候我又回忆起了我考研的痛苦,真是双重痛苦面具。

  1. TCP和UDP的区别
  2. TCP拥塞控制和流量控制的区别
  3. 说说https,以及服务端与客户端协商key的过程
  4. 为什么要用https,为什么一定要协商key,直接用公钥私钥的方式传输数据不行吗?(字节二面问我的,大概是这个意思,我回答的时候没有完全答到点上)
  5. 解释一下什么是DNS,它的执行过程
  6. 进程和线程的区别(字节二面:为什么进程的上下文切换比线程要大呢?)
  7. 什么是TCP粘包(需要指出TCP面向字节流的特点,对比UDP的保留报文边界,Nagle算法,还有粘包是针对应用层接收方处理TCP报文来说的)

后记

暂时印象比较深的和问的比较多的就这些,后面有了再补充。