2020面试小记

写在即将入职之际,算是对这一次的换工作的一次总结吧。从去年年底下定决心换工作开始准备到现在,也过去了将近半年的时间了,最后斩获了自己比较满意的offer。与之前的几次换工作经历相比,这一次大致做了如下准备。
面试前 1.日常刷题
之前工作算是非典型的互联网工作,每天会在闲暇之余会在leetcode或者lintcode刷刷题,一开始刷题是为了开拓开拓思路,同时加强算法的掌握度。刷题时大概用过两种方式,第一种是按照某一类型进行从简单到难的专项加强,当然做到有些Medium难度和Hard难度的时候,会出现找不到突破点的挫败感,这时候不妨先休息一下,换换脑子刷一些水题,提升兴趣度和成就感;然后再回过头来从新思考之前没做出来的题,如果还没有想到解法,这时候就推荐参考一下大神们的解题思路,但是不要就抄一下AC就完事了,要看明白怎么解,去思考为什么,知道了思路再尝试自己去编码实现。

不过说实话,难的问题感觉和天赋还是有关系的,到现在还是听到动态规划就望而却步
2.基础知识
这里可能要分为两部分,一部分是计算机相关的基础知识,一部分是常用语言相关的基础知识。
计算机相关的基础知识 像是数据结构和算法相关的可以再刷题中不断强化,比如说链表,数组,hash表等数据结构,是可以通过在刷题中,进一步掌握和熟练使用的;再就是一些网络相关的知识,比如说基本的TCP三次握手,四次挥手了解流程的同时,可以带入到日常的工作中,比如说四次挥手,每次求情间client和server的状态,未来在线上出现问题时,可以根据相关知识来判断问题可能出现的地方。
语言相关 之前是做java开发的,就只能根据相关的知识点进行准备,万变不离其宗吧。语言的特性,能解决的问题;常用框架和中间件的用法和原理,和对于平时工作中出现问题的分析和总结吧;再就是JVM。然后根据自身的情况进行着重的学习和查缺补漏。当然每次面试完进行复盘也是一个很好的查缺补漏的方式。
大体上觉得可以分为如下几个模块:
1.java基础类库的源码实现
2.工作中常用的框架和中间件的使用和原理
3.多线程并发实现方法

2020面试小记
文章图片
java并发编程.jpg
4.JVM相关知识和调优思考

2020面试小记
文章图片
JVM内存结构.jpg
5.分布式相关问题—缓存和锁
2020面试小记
文章图片
缓存.jpg
2020面试小记
文章图片
分布式.jpg
比如说我自身对于Spring的掌握就是一直停留在能用的基础上,对于其原理没有什么研究,这个在这次找工作的过程中其实吃了不少亏。到现在也没闹明白
3.设计相关
功能设计和架构设计其实是建立在基础之上的东西,是把你工具箱中的东西进行整合和拔高的东西。但是说实话功能设计勉强算及格,但是架构层面的规划和设计,这方面的能力应该是未来一段时间需要着重去思考和提升的能力。从面试的角度来说比较常考察的点一方面是选型的问题,怎么在功能相似或相近的框架和中间件中选择最适合自己场景的; 一方面就是功能开发中设计的能力,怎么做到单一职责原则,开闭原则,里氏替换原则等等,这里推荐大家可以看看领域驱动设计,然后在自身现在的项目区思考,如何在当前工作中去实践和改造。
阿里技术专家详解DDD系列一
阿里技术专家详解DDD系列二
4.其他
这里主要可能是一些基本的准备,比如说简历的书写(我也是渣渣,这里就不说了),自我介绍的准备,离职原因的表达等等;
还有就是觉得面试后的复盘也很重要,是很好的查缺补漏的方式。
面试心态 说到心态这件事,我本身就是一个心理素质不好的人,尤其是在面试一些自己很想去的公司的时候,往往会过于紧张,导致发挥失常。记得之前有一次面试过程中,面试官让介绍一下session和cookie,当时太紧张全程语无伦次,脑子里想的cookie说出来的却是session,面试结果可想而知。说实话面试心态的改变,主要来自去年开始进行面试官的工作,起初面试别人也会很紧张,但是在慢慢地面试过程中,对于面试有了新的理解。在现在的我看来,面试是面试官和面试者的一次技术探讨,面试过程中面试官其实是一个挖掘面试者的知识储备和思维能力的过程,而面试者则是在沟通过程中展示自己的技术能力和思考同时发现自身不足的过程;而最后的结果其实是一个相互匹配的结果。有这种观点以后,作为面试者在面试时的紧张情绪得到了很大的缓解。
面试问题记录 下面只是记录了现在还能记得起来的几个面试问题
1.https流程
2.限流处理
3.dubbo拓展传输协议
4.tcp三次握手和四次挥手
5.in not in exist索引
6.分布式一致性算法
7.spring循环依赖解决
8.线程池监控
总结 准备换工作可以说是一个很好的对阶段性的知识进行总结和回顾的驱动因素,当然这不是我们唯一进步的驱动因素。技术是一个逐步积累的东西,不能指望一步登天,那相当于痴人说梦;在平时的工作中,应该从完成基本工作这个点为基础,思考怎么提升工作效能,提升代码质量,便于功能拓展,来更好的完成未来的工作,达到提升自我技术的诉求;对于设计要善于思考,首先对于跌倒过的坑,下次不能再跌倒,对于未来也要有一些前瞻性的思考,对于未来起量的情况下,怎么处理更方便的切换等等;后又一点是最近对于未来工作需要用到的技术和语言的学习时感受到的,在自己时间允许的情况下对于其他技术和语言进行学习,可以很好的拓宽思路,比如Node.js中的异步事件处理。
过年期间在家看了《奈非文化手册》,里边有几点觉得很是认同,首先公司当前需要的员工是当前能力可以和公司当前情况可以匹配的员工; 同时对于面试这件事情,除了换工作也是对于自己在市场中价值的一次考验,让你能知道自己当前大概的市场价值是什么情况,同时也是一个了解当前大家使用的技术栈的方法(当然这里不是鼓励大家经常跳槽,稳定性很重要)。
【2020面试小记】最后最后推荐大家多读读书,不光是技术书籍,别的方面的书籍也可以都有涉猎,对于思考会很有帮助。

    推荐阅读