疫情在家有些闲,发现自己的简历有1年半没更新过了,上一次面试还是1年半以前。想看看外面的行情也顺便摸一下自己的底,把自己的方向理清晰一些,就更新了自己的简历,公开出去了。公开的第二天收到了一些面试推荐。虽然在家,但是白天还是在远程办公,所以也没有面试很多,选了其中两家。一个是阿里CBU技术部-C2M-java方向岗位(终止第三轮技术面),还有一个是斗鱼java后台(拿到offer,考虑到时外包直接否掉了)。总结一下这次面试过程,以及自己的不足与后期的方向。
面试感受的话,阿里给我的面试总体感觉是非常舒服,专业,都是中午打电话预约下一轮面试时间,每一轮面试在1个小时到2个半小时之间。每一轮面试官问了什么问题,面试者回答结果都有记录。所以后面的面试官都会看到前面面试官问了哪些内容,面试者回答的情况,多轮面试技术都不会重叠,技术广度覆盖比较全.记录一下面试内容:
一面主要聊了2个半小时吧,聊了快两个小时,做题做了半个多小时
1.项目中对quartz的使用以及分布式调度任务的实现过程/方式。
2.redis相关。作为分布式锁实现原理,调用的哪个命令,以及项目中使用的业务场景。作为缓存使用场景,cluster模式是如何实现的;主从数据同步过程,持久化方式,数据过期处理方式,cluster模式下某实例节点挂了,客户端是否感知,是否有数据问题;一致性hash原理,一致性hash解决了具体什么样的问题。hashmap中扩容时rehash的过程。
3.mq相关。项目中rabbitMQ使用场景,交换机的几种类型。
4.dubbo相关。dubbo的组件有哪些,有没有用到限流以及如何使用,dubbo协议特点,NIO实现原理,dubbo协议与http协议(设置keepAlive时)的区别,网络模型聊一下
5.加解密相关。我用过哪些加密,签名算法,对称与非对称常用加密算法有哪些,RSA如何保证安全性。
聊完之后给我发了一个写算法题目的链接。1个小时内,3个题目选2个做。
1.JDK1.8)线程A打印a,线程B打印l,线程C打印i,三个线程交替打印,各打印102次,alialiali
2.小b有一个计数器,其计数规则如下:计数从1开始,每过1秒数字+1,第一次计数周期上限值为5,下一次计数周期上限值为上一次计数周期的两倍,每次计数到上限值,触发计数重置,即下一个计数重新从1开始,以下是前20秒计数器上显示的数字举例:,1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5,请实现一个方法,输入第n秒,返回计数器上这个时刻的数字
3.手写lru,实行put(),get()方法,不能使用LinkedHashMap
二面是技术主管面试的,差不多聊了2个小时。主要内容:
1.redis相关: 缓存穿透如何处理,缓存雪崩如何处理,缓存击穿如何处理。
2.mq相关:发生消息堆积如何处理。有没有使用过除了rabbitMQ其他的mq产品,他们各有哪些特点
3.java基础相关:内加载机制,双亲委派,内存模型,内存引用机制
4.虚拟机相关:是否用过虚拟机调优经验,虚拟机启动参数有哪些,如何打印线程堆栈信息,内存溢出,cpu过高问题一般查找问题过程
5.RPC相关:dubbo协议的序列化,我知道有哪些序列化,hession序列化与json序列化区别。
6.分布式事务:项目中有没有用过分布式事务,分布式事务目前主流几种解决方案
7.数据库:数据库分库分表的横向和纵向一般区别使用在哪些业务上。
8.项目相关:项目团队大小,担任的角色,成就,工作遇到的问题。
三面是该部门最大的boss面的,听二面面试官讲是最后一轮技术面了,1个多小时,主要内容:
1.虚拟机相关:垃圾回收机制,CMS垃圾回收过程,打印出java程序线程对账信息命令。
2.java线程基础相关:线程有哪几种状态,synchronized底层原理,与reentrantlock区别,concurrentHashMap实现原理
3.mysql相关:innodb有哪些特点,脏读,幻读是什么,写个分页查询sql,事务隔离级别,事务实现原理
4.RPC相关:有用到哪些RPC框架,.net里面WCF与dubbo区别
5.项目相关:个人项目经历,职业规划等
面试总结:这次面试没过,还是个人技术问题。前1年半都是搞得.net framework,后来搞了几个月的.net Core。转java这边只有1年多一点的时间。虽然思想,语法上差不多,但是java语言的功能的底层实现,以及相关框架实现源码都没有弄得很好,导致在三面时很多底层细节都回答不出来最后挂掉了。暂时先放一放对docker,k8s,elk相关学习,先投入到java基础,Spring,dubbo,netty基础源码上来。今年暂时就不继续面试了(公司裁掉我了除外。。。),不足的地方还是挺多的,先努力工作提升下自己,,等今年年底再去各大厂摸摸底。
个人总结:工作三年了,搞了2年多的.net,1年多的java,总感觉基础深度沉淀不够。2年前就注册了博客账号,一直都是逛园子,没有亲手写过博客。以后在学习过程中需要及时的总结,养成总结技术点的习惯,不然好多东西过了一段时间就忘了。今年开始也希望能着手深入研究某一个优秀的开源框架,提升自己之余看看能不能为开源社区开始做点贡献了。