两次面试的经历
由于想换一个新环境,也想能找到能覆盖我新学技术的真正的业务场景,毕竟虚拟机和云服务器的集群玩起来还是不过瘾,我在一个月前提了离职,然后分别于9月11号和9月14号参加两次面试。9月11号直接去的第一家公司,有笔试题都很基础,但是sql有关索引的部分可能不是最优的解决办法,但是我在纸上写了可能的几种更好的解决办法,但是不确定,因为一直在刷k8s和docker,反而像这种基本的数据库层面的东西没有太.
由于想换一个新环境,也想能找到能覆盖我新学技术的真正的业务场景,毕竟虚拟机和云服务器的集群玩起来还是不过瘾,我在一个月前提了离职,然后分别于9月11号和9月14号参加两次面试。
9月11号直接去的第一家公司,有笔试题都很基础,但是sql有关索引的部分可能不是最优的解决办法,但是我在纸上写了可能的几种更好的解决办法,但是不确定,因为一直在刷k8s和docker,反而像这种基本的数据库层面的东西没有太注意。然后第一面应该是个比我大不了几岁的哥们,问了些Java多线程、数据库脏读脏写以及JVM调优、如何最快定位线上的bug的问题,这部分回答的也还可以,但由于笔试索引答的不是很好,也问的比较多,有点招架不住,我甚至猜着去回答一个问题,后来想想不会其实直接说不会也没什么的,因为你一猜猜错了自然印象不好,猜对了面试官可能去引申问题导致你陷入更尴尬的境地!然后问我所学的新技术能解决哪些问题?我觉得这里我回答的还可以,我说是建立我日常的开发和了解公司也无需求以及结合开发的痛点引进的,比如之前我们负载均衡大多用nginx去挂上几个tomcat,实际上更新的时候并不方便,我用了17版本后的docker swarm可以做到一行命令实时滚动更新,如果能使用k8s还可以做health check,保证服务更有效的更新以及上线,还有一些devops和CI/CD的东西,这些我都在集群上自己跑过,回答的不是很完美但觉得也还不错。然后来了第二个面试官,这里提一点,因为很久没面过试了,让我做简单的自我介绍我还有点懵居然,语言组织的不是很好,连续性不强,当然基本情况还是表达清楚了,这个面试官没有问太多,就问我最近一个项目为什么要用ConcurrentHashMap+redis来做缓存,我当时以为 他会问我缓存命中、缓存穿透及雪崩的问题,但他说其实你们这里用缓存是浪费资源的,因为数据量并不大,完全可以用job或者定时程序去跑把结果落地到单表,做好索引的建立速度绝对够用,仔细一想确实是这样,技术没有最好的只有最合适的,然后聊了一会其它的,然后下午hr面试就谈了下期望薪资,公司文化和业务以及规则,然后夜晚直接发了offer,其实我还挺意外的,感觉表现的并不是很好,但是我想这次面试其实无论通没通过我都学到了很多东西,跑这一趟完全是值得的。
第二家公司面试是我离职当天也就是9月14号下午三点,这家公司9月13号有个电话面试,接近一个小时,问的问题都非常深和底层,比如ConcurrentHashMap如何扩容,synchronized关键字和lock的区别,说了区别还问底层如何实现的,os如何处理线程的切换,springboot的start的实现机理,如果让我设计一个数据库引擎,会从哪方面考虑?消息中间件的引用场景以及它的缺点,消息中间件如果出现消费者太快或者生产者太快会有什么情况?netty的模型以及它为什么适合高并发?redis为什么快以及几种技术方案的优缺点,如果让我重构一个项目为微服务我会怎么做?如何保证分布式数据的最终一致性?…等等一些列问题,我觉得问题难度很大,作为一个两年工作经验的我,即使空闲时间都用来钻研技术也觉得汗流浃背,但是会的我基本上都尽量说清楚,稍微知道一点的我会说不知道细节但可以试着回答一下,难度很大的我会直接说不知道,总体来说感觉还可以,虽然回答的很烂,但是感觉自己能回答很多问题并且和面试官能讨论,还是增强了自己的信心。后来9月14号下午去公司面试,昨天电话面试那个人不在这个区域,只是代电话面试,所以第一面的面试官是go和c语言的开发者,主要问了go的一些基本问题,Java和go的区别以及不同的使用场景,比如线程和协程的不同,go的网络模块好在哪?还有在使用docker的过程中出现了哪些问题,最后是云相关的东西,都是些大方向的问题,细节问的很少,这个面试官很和善,大部分时间都在讨论,也学到很多东西,最后应该来了个领导,应该是前面的技术面试都还可以他就问的比较少,看我穿的少在空调底下还很有人文关怀的让我和他换个位置,最后9月17号发了offer。
然后比较想去的是第二家公司,无论是业务场景、还是技术栈都感觉特别喜欢,当然第一个公司也很好,然后特别不好意思的拒绝了第一个公司的offer,感觉有点内疚,因为别人确实也花了时间和精力。
然后我总结一下,大概就是:
- 面试的时候自我介绍还是要提前演练的,毕竟每个面试官可能都让你说一次,说的简短、逻辑清晰且突出重点并不是容易的事;
- 其次平时看些和工作无关的知识有时候确实有用,比如问我如何保证分布式集群数据的最终一致性?其实我有点懵,我知道可以用redis锁来防止数据脏读脏写,但没在数据的最终一致性想过,因为很多框架已经帮我做了,然后我突然想到我当时学区块链的raft算法的二次提交来保证数据的最终一致性,然后照着这个思路说的,下来仔细查查原理还真的差不是很多;
- 第三我是偏软件方面的,我在介绍自己项目的时候,会从自己负责的模块的结构和为什么这么做讲!不是单纯的start法则,还要有自己的理解,而且你做的项目随着时间的递进你的角色也是越来越重要,面试官更希望听到一个缓缓向上进步的项目经历,如果能结合自己以往开发的痛点在新的项目中我又是怎么解决的应该不错;第四不会的一定不能去猜,理由前面说过了;
- 第四面试考的大多数是原理性的东西,看似在平常工作用的不多,实际上潜移默化能影响很多东西,所以这也是面试官爱问的原因,当然我们去学习底层原理的东西并不是完全为了去面试,而是这些东西对自己的职业生涯确实是有帮助的,可能不能肉眼所见;如果不去猜答案,那么你回答的都是自己会的就自信起来,当然也要注意和面试官的良性互动,他在说自己的见解或者分析我们的问题的时候要仔细听,配以眼神和少许的语言附和即可,等他讲完,再谈自己的东西,总之就是面试节奏也是很重要的东西。
杂乱的说了很多,当是一次自己面试的记录,也希望对面试的小伙伴有所启发。
更多推荐
所有评论(0)