本篇内容主要从不同类型的面试者视角来聊一聊怎么来准备面试的事情,具体来说可以分为实习生、校招生、社招面试,在社招面试里面可以分为工作1-3年的,3-5年,5-10年,10以上的这么几个区间。
为什么要把这个单独拿出一个篇幅来写呢?主要来源于我在日常面试以及面试辅导学生的过程中发现了以下几个问题点:
当然,以上这几个不同阶段遇到的问题,我其实也都遇到过,大学时因为即将要找工作,然后觉得自己专业课学的一塌糊涂,没有任何可以拿得出手的东西,因而感觉**深度迷茫焦虑,**在工作2年左右的时候,面临第一次跳槽,又感觉自己这两年仿佛就是在机械式的每天修改bug、做点小需求,对技术成长没有任何的帮助,在面试前期总感觉信心不足,从而导致那段时间每天也很丧气,对工作也提不起动力,对学习也总是拖延,那在工作6年的时候,面临第一次找架构师&专家岗位的工作,又陷入了感觉自己深度和广度都不太行,平时工作好像更多还是做业务,处理各种业务类的编码问题,但是架构师&专家岗位需要对某几个技术深入的熟悉与掌握,那一刻,我再一次的感觉到内心比较晃,我不知道这些年我到底有没有沉淀下来自己的内核动力,可能工作中做的还不错,也能轻松的应对各种业务需求和人际关系,但是一旦到了即将换一个工作,要开始面试的时候,总感觉要从一个悬崖跳到另一个悬崖,中间有一个巨大的镂空,我无法逾越。
是的,看似现在具备一定的技术底气和内核还算稳定的我来说,当初在大学实习、毕业后找工作、工作1-3年,6年这三个阶段都遇到了比较挫折的经历,我一共经历了四家公司,在第三家公司的时候,我才开始有意识的培养自己对技术、对面试、对软技能方面的学习,所以,在面试第四家公司以及在前两年出去面试了几家公司之后(具体可阅读关于字节面试那篇),总体来说,没有大的内心焦虑,对自己也很有信心。
所以,我才会想着把过去的经验以及当年和两个线下机构合作对学员辅导的经验,能够有系统性的输出出来,希望能够帮助到一些人,打破现有的迷茫、焦虑的心态,为他们在找工作以及技术成长方面发挥一点点点点点的价值空间,这也是为什么我自己起了一个名字叫:「丁点大数据」的原因,我深知自己能力有限,无法像行业内大佬一样对趋势有很好的“预测”,职业生涯也没有达到K9、K10、某某大厂总经理的级别,反而自我感觉是一个比较愚拙的人,除了认认真真小步迭代自己之外,没有其它的声望可以值得拿出来给大家说的。
好了,稍微唠叨了几句,现在开始正文的内容,关于实习、校招、社招方面从我所看到的一些技法&心法上都有相关的解决方案,技法就是如何具体准备技术面试,要借助哪些工具来达到,心法就是如何减轻自己的焦虑、提升自信能力。
一、实习生面试,要抓住几个核心关键技能以及稳定心态
绝大部分公司对于实习生面试要求并不是很高,毕竟对于实习生来说,更多是解决部门内部因为人力短缺,希望将一些“琐碎”,编码复杂度较低的工作能够交由实习生来完成,那这时候主要是看面试者的机灵度、技术范儿、逻辑思考能力,面试官会看这个人是不是脑子比较机灵,这里的机灵和性格活波是完全不同的两个概念,这个机灵准确来说就是对于面试问题的理解能力,仔细思考一下,有两个实习生,一个对于需求理解能力很强,不需要讲的太多就可以把事情做完了,另一个需要反复讲、反复讲最后还不一定能够达到预期,那你觉得我会优先考虑那个?肯定是第一个,毕竟,从现实角度来说,能够快、稳、准的将事情做好才是第一优先级。(后面会提到关于第二种实习生的问题如何去解,毕竟大部分是属于后者。)
其次是技术范儿和逻辑思考能力,上面说到是对于”问题理解能力”,那么这两个可以说是对于问题解答能力,面对同一个问题10个人可能会有5,6种解决方案,那么在这些解决方案哪里必然要找一个应对当下问题的最优解,这里就考验谁能够准确的抓住问题OR需求点,然后给出自己的看法,这是一种问题解答能力。
在实习生或者在校招生初期半年左右,要勇于提出问题、给出假设性解决方案,因为这是一种实践的机会,而不是理论学习,能够多从实际出发,仔细思考事情的各种边界问题,将是你成长的养分,这些从某种意义上来说比实际的技术能力更重要。
那么,再说回来,针对于问题理解能力实在是无从着手的同学来说,应该如何取得成长的机会(注意:我这里说的是成长,而不是对应面试,这是两个完全不同概念)
上面所提到的都是对于场景、灵活性问题的处理,另外还有几个核心技能是需要必须掌握的,但是这些相比于上面开放性问题来说,会容易很多,具体来说就是「专业课」的能力。
很多面试官也知道实习生是没有实际的经验的,所以很多时候会问一些具体的技术问题,比如TCP协议三次握手、HTTP协议、数据库索引结构、操作系统常用命令等等。这些问题一方面靠日常积累,另一方面需要你花一些时间来突击准备,并且,基本都是有标准型答案的,通俗来说,就是看这个人的基础是不是比较扎实,所以,很多面试官在给实习生或者校招生写面试评价时都会带上基础是否扎实/牢固/较高等字眼,如果基础比较扎实的话,某种程度上来说,你是具备可塑性的,坦白来说,就是有一定的成长空间。如果基础不扎实的话,那可能培养起来麻烦一些。
二、校招生面试,基础知识和算法与数据结构很重要
校招面试是真正意义上从校园到职场的一个分界线,也就意味着从此告别了大学生涯,开启了“社会大学”的永久性学习和磨练的过程,不得不说,除非是极个别优秀的学生(这里刨除学校因素之外,我一直认为再差的学校也有优秀学生,再好的学校也有差生,所以不以学校因素来进行衡量,那是HR衡量的标准,再者,学校因素是改变不了,至少在面试这一刻学校是既定的)能够拿到比较不错的一线大厂的OFFER,大部分学生只能是在中厂、小厂、初创公司里面进行选择。
这里,暂且不说关于如何拿到大厂OFFER这些伪命题,而更多聚焦于如何准备进行校招生面试,以及,后面会针对校招生的OFFER选择给出一些小建议。
相信每个有意愿从事于技术研发方向的优秀学子都或多或少从各种自媒体平台了解多一些基本信息,比如面试经验(面经)、技术题库、内推信息等等内容,通过这些基本信息的了解之后,你是否有了大体的基本框架呢?比如你知道应该准备哪些技术栈?比如你知道要从哪些方面入手准备等等,如果这些你有清晰且明朗的规划,那么这篇内容就可以略过了,因为从校招生面试准备来说,重要在于不是广度和深度,而往往是基础性的内容扎实。
大部分的内容可以参考上面关于实习岗位面试内容,这里就不再一一赘述了,除了上面几点之外,希望以下几点对你有所帮助:
有一些技术点基本上是技术面试必问的,例如:分布式原理、分布式计算、分布式存储等基础概念性内容,这些内容不是靠临时抱佛脚就能够掌握的,因为它们之前其实具有一定的关联性,掌握了分布式基本原理之后,在学习计算、存储相关内容会更加轻松一些,比如一致性保障、选主机制、缓存机制等等它们大体都属于基础原理,但是延展到分布式计算和分布式存储之后,就可以在不同的领域进行解答相关问题。
这里拿缓存机制来说,在分布式原理中,缓存机制是非常重要的一块,其一:它可以有效提升数据读写性能,毕竟磁盘IO要比内存读写要高很多,其二:避免了跨网络的数据拉取传输,可以有效的降低数据库的压力,那在分布式计算中,Spark使用本地缓存机制可以将计算数据进行本地缓存存储,提高计算效率,在分布式存储HDFS中,也有缓存相关实现,首先数据会写入缓存中,然后达到一定大小之后,在批量的写入磁盘中,这里更多是提升了数据写入性能,当然,单一的缓存机制只是高性能的其中一点,分布式高性能系统架构设计背后,需要结合多个因素的技术点来综合考量,这也是分布式系统的魅力所在。
所以,这里建议广大学子,如果你是做大数据或者分布式/微服务方向研发的话,需要对分布式原理有一定程度的掌握,至少知道每个技术点的原理是什么样的,然后在计算、存储层能够延展到相关的应用点。
算法和数据结构无论是在那种技术面试中,都是重中之重,不区分实习、校招、社招,一线互联网公司基本都会上来做一两道算法题,无非是难易程度不同而已。
对于算法和数据结构方面真的没有什么奇招妙想来让你快速的掌握刷题方法,只能自己多刷一些题,多总结做题思路和规律,做的多了就有了一定的题感,心里也就多了一份底气和自信,我也从来不相信什么七日速成,往往越是速成的东西,越容易被遗忘或者淘汰,因为它只是在表面上让你看懂了题干内容,但是内核的东西你依旧是无法明白。
如果在大学时期,算法和数据结构方面还可以的同学,这点其实不用慌,我面试过很多校招生,有的同学就可以将一道算法题给出两三种不同的解法和思路,这种就属于底子比较扎实的人,如果在交流、沟通方面不是很差的话,基本上问题都不大,另外一种情况则相反,无法准确的做出一道算法题或者做题思路很生硬,没有考虑到时间复杂度和空间复杂度,直接采用暴力解法进行做题,那么这个其实就是平时做题比较少,算法和数据结构方面掌握不太牢固。
针对第二种情况的同学,我建议花费两三个月的时间来磨练一下基本功,按照每天一两道题(难易度根据自身情况来调整),然后每道题都总结一下做题思路以及变种解法,这里最难的在于半个月-一个月期间,可能会有一个瓶颈期,不要慌,你可以继续做一些中等难度或者Easy类型题,或者做一些自己比较擅长的题型,比如链表、数组等等,当你度过了瓶劲期之后,才会逐渐形成一些做题的题感。
基本上两三个月做200道左右的题目,问题是不大的,这里在重申一下,做题不是目的,能够真正掌握好这种题型、解法、思路才是真正的目的,面试的时候,极大概率不会有太多相同题型出现,多多少少都会有些题目的变种
很多校招生简历里面基本上都会写一两个项目,可能是学校实验室里做的,也可能是实习时候做的,也或许是自己网上学习照搬做的,这些都不重要,重要的在于你是否真的对所写的项目足够了解,如果仅仅做了就是做了,只能讲出一点大概流程,而无法深入到技术层面进行讲述的话,那么其实是比较危险的。
举个例子:去年有面试一个东北大学的两个学生,这两个学校很巧,简历上都写了相同的项目经验,是一个叫仓储系统传感器动态分析的项目,主要的功能就是仓储中采集各个仓位物品的状态,比如数量、重量、品类、是否冷冻、序号等等,具体就不展开说了,主要说说这两个同学的面试回答。
面试官问:请你说一下关于这个项目的基本介绍吧,包括技术实现方案和流程设计?
A同学:这个项目是我们校企合作的一个项目,当时是给外面一个物流公司做的,这个项目就是采集仓储中的各种物品数据,然后我们来分析展示一些这些物品的信息。技术方案的话,就是我们拿到采集器推送数据的样本,然后进行分析,存储到Mysql中。然后前端那边进行展示出来。
B同学:这个项目是去年我们实验室跟外部一个企业合作的一个项目,这个项目主要就是采集仓库中的货物信息,然后我们小组是负责数据计算分析和展示,在数据采集方面是合作企业方将采集的数据推送到Kafka中,然后我们实时消费过来,中间通过Flink来计算,然后将数据存储到Mysql中。在数据展示层我们使用的是SuperSet进行的展示,
当听到这两位同学不同的回答方式之后,我也大概能判断两人对技术以及项目真实的熟悉程度了,果不其然,当问到一些项目中技术问题时,A同学往往无法直接回答,而B同学则可以根据现状给出对应的技术解法。
例如:我问到那在这种流计算中,如果数据堆积了,会有什么影响吗? 对应的话应该使用什么技术手段来解决呢 ?
这里,我就不直接给出两位同学的答案了,正在看本节内容的同学,不妨问一下自己,是否能针对上面这种场景问题,来将场景拆分为具体问题,然后针对问题进行解决呢 ?
最后,回应一下,上面关于“大厂”OFFER选择的问题,上面提到大厂其实是一个伪命题,以前的BAT是大家公认的头部大厂,但是现在PDD、字节等当初不起眼的企业已经超越了当初所谓的“大厂”,有些同学就像进入如今的大厂,感觉大厂发展前景更好一些,技术氛围更浓厚一些,技术面更全面一些等等因素。这里并不是说大厂不好,而是在于,不建议大众同学在不清楚自己能力之前,就贸然撞南墙,最后芝麻和西瓜一个没有捡到。
那这里,首先要明确自己是否具备能够达到进入“大厂”的能力,如果有的话(可以根据上面提到一些核心条件来判断),恭喜你可以尝试了。
反之,大部分同学是不具备的,如果感觉能力欠佳、学历欠佳的话,建议你找一些中小企业,哪怕是初创型公司去尝试也未免不是一个好机会,这里从职业发展角度来说也是一种不错的选择,在古典老师的课程个体成长章节中有讲到一个观点,至今仍然受用,意思是说:
当大众都在挤破头冲向高层底层的时候,不妨回头看看,周边可能还有一些6,7层的小楼,如果你冲不上高层,不妨试试走向哪些6,7层小楼,尝试一下从1层到7层,甚至可能说,当你成功的走上小楼的7层之后,没准看到的风景会比更高更好一些。
好了,最后再说一点,机会永远都在,机会只留给有准备的人,关于自己的职业发展,要有自己的明确判断和认知。
如果你有更多想要交流的关于职业发展、技术面试、个人成长等问题,欢迎你扫描下面二维码联系我。
如果感觉内容对你有收获,感谢你能够将内容转发出去,也欢迎在评论区留言交流,针对问题我会一一回答。
**************************
***********************************
#大数据面试题##大数据和AI##技术面试##校招面试##实习生面试#