前言
由于疫情的原因,有不少企业倒闭了。导致今年的招聘岗位也不如往年那么多了,就没有选择裸辞,而是选择在51之后,提交辞职申请的同时开始进行面试。
感受
起初的面试我还是很自信的,毕竟技术栈这块我还掌握的挺多的。比如:Java,Scala,Python,React,前端和后端以及大数据都有涉及。而且初期也可能是为运气比较好,一般聊项目就花很长时间了,导致技术点上也没有特别深入的问题。
但是,后面的几轮高级工程师的面试,还是让我看清了不少。我的技术栈也没有我想象中的那么牢固。而且我在面试过程中发现一些经验以及我自身的短板。
经验
首先热场基本上都是以项目开始,很少有那种直接问技术点的,这个也根面试时间长短有关。比较短的话,是有可能一上来就问技术点的。对于项目这块,一定要精心准备,以技术亮点为核心,一环扣一环。比如我常用的有:多级缓存优化,分布式事务,ES优化,数据库优化。项目介绍这块一定不要出现卡壳,项目上对方肯定会问一些刁钻的问题,还有一些生产环境问题。针对这些,在准备过程中需要考虑周全,比如在环境这块,服务器的配置,集群规模,线上第三方应用的配置(ZK,Kafka)。
除此之外,一般还会有一些固定模式的问题,问题大致可以分为四个部分:操作系统,Java基础,分布式,数据库。
操作系统:
- Linux系统锁的底层原理
- 如何查看Java程序的TCP连接数量
- 将字符串写入文件
- 根据名词查询进程PID
- 正则表达式
Java基础:
- HashMap源码
- ConcurrentHashMap源码
- JUC下面常用的工具类
- 线程池参数
- JVM模型
- 垃圾收集算法
分布式:
- 分布式事务
- 注册中心高可用
- 限流熔断策略
- 通讯协议
- 分表分库
- ES选举流程
- Kafka选举流程
数据库:
- SQL优化
- 数据库性能调优
- 联合索引
- explain工具查看
- 数据库压测
总结
在操作系统和分布式上面还是有明显的短板的,目前的水平找到Java高级工程师职位的工作还是比较勉强的。未来还是需要更加系统的学习计算机基础以及Docker这部分的知识。并且需要有一定的生产环境的经验,使用番茄工作法增加学习时候的效率。