杂谈 | 关于校招我想跟你说的话(下)

Evan Donn
Written by Evan Donn on
杂谈 | 关于校招我想跟你说的话(下)
  • 怎么做笔试?
  • 怎么准备真正的面试?
  • 怎么平衡学习和面试时间? 在上一篇我跟大家分享了一些面试过程中的前期准备,算得上是一些软技能相关的吧,虽然不是那么的重要,但是做好了也算能加分吧。 这篇文章再从短期策略长期策略两个角度来给大家介绍一下笔者是怎么准备笔试和面试的吧,说到底,还是得自己的硬实力搞上去。

怎么做笔试?

对于校招生甚至大多数社招的候选人来说,算法能力可以说是至关重要的一环了,但是罗马不是一天建成的,不要抱有侥幸心理,也不需要所有的算法都面面俱到

短期来看:如果你猛然发现你的算法能力比较缺乏,或者说你不知道以下一些概念和问题:

  1. 各基本数据结构的概念以及时间复杂度和空间复杂度,以及基本排序算法
  2. 链表的翻转、判断交叉链表有无环、链表翻转 k 个节点等链表的题目
  3. 经典的深度搜索、广度搜索、利用栈和队列去解决一些算法问题
  4. 每一种题目所想到的暴力解法能够手写出来

上面几个问题只是笔者随便说列举的几个点,倘若你对这个完全没有概念,你就需要打起精神来了,马上着手去准备算法,短期来看需要从各种类别的题目去入手,比如链表类的题目,当你做了很多之后你会发现核心的思想或许就那么几个,核心的代码就那么几行(比如说翻转一下啊、比如说用个临时变量暂存一下头结点啊)。然后到了某公司的笔试之前 ` 1 `天,去看一看往年的题目(这个真的很有帮助,有的公司的题型每一年基本是一样的,比如说第一题就是考数组,一点都不复杂,但是往往笔试的时候我们都会复杂化了许多问题,事后才晓得,多么的简单)

长期来看:你很幸运,你还有足够多的时间去做准备,你可以把这当成一个旅程,从自己感兴趣的算法题着手,慢慢建立信心,大概可以是:

  1. 手写八大基本排序
  2. 有序数组、链表的二分查找
  3. 树的遍历(递归和非递归版本)
  4. LeetCode top 100
  5. 然后按照各个类别去准备相应题目

每天积累一点点,不用像短期策略那样的仓促,你可以去深入了解排序算法的演进:为什么同是时间复杂度 nlogn的算法会有那么多?他们各个的应用场景和考虑是什么?快速排序在工业中是什么样的地位,各大语言(如 python)的排序算法采用的是什么样的排序算法?

不需要那么囫囵吞枣的去刷题,而是去了解每一种算法背后的历史和由来以及变种,或许你对编程会有新的认识。

总得来说,短期和长期准备各有各的策略,算法并不是什么很高深的东西,也并不是为了面试所以你才去看算法,而是懂得了算法之后,你会有自己新的理解,写代码的时候有下笔如有神的感觉

或许会有人说,看了就忘了,多年不做就忘了,其实这并不影响,因为你已经提炼了你的理解了,相信下一次你再重新拾起的时候,只需要静心花费少许的时间,你又可以在编程题面前叱咤风云了,就像王国维人生三境界一样,那时工作了的你,再看,或许又有新的理解了。


准备真正的面试

其实所谓知己知彼,百战不殆。首先自身能力要过关这是没得说的,但是这里也是有短期策略和长期策略,首先我先表明一下我个人的立场,从来都是奉行知其然,也要知其所以然。

短期来看:如果你是从来没有了解过那个领域的,你想在面试中有一定表现,那看面经或许是来得最直接的。比如说你之前对 MySQL 是一无所知的,但是你发现面试过程中数据库知识也是比较重要的一环,那你可以去看面经来快速学习快速获取知识,倘若你能铁下心来的话,选一本书快速看完,也是能取得不错的效果的。

长期来看:其实看面经只能帮你建立起你的知识索引,你真正的知识能力还是在你日常解决问题困难中体现的。每个面试官喜好不一样,笔者曾经就遇到一种情况是,有的面试官喜欢面经那种简单粗暴回答的,有的面试官喜欢你能有自己想法意见回答的。有的你回答得很冗长反而会觉得你啰嗦。其实这个跟面试的轮次以及你临场随机应变有关系。

比如说第一轮的面试官一般都是来探测你知识的广度以及浅浅的深度,有的叫做简历面,通过询问一些你简历上提到的东西来判断你的能力怎么样。所以这一面大概率你不应该回答得很详细,不应该像一个话痨在那里唠唠唠唠。但是倘若你发现你简单回答之后,面试官在那个问题上并没有停止而是继续追问,那你就要好好认真的把你对那个问题的理解和一些延伸跟面试官好好唠唠了。第二轮、第三轮面试就可以适当更多的跟面试官交谈,这一轮的面试官往往拥有更多的经验,更多的是考察你的潜力以及你性格等其他方面。所以其实这两轮面试如果你挂掉的话,其实并不能说明你不优秀,只能说明你不适合他的团队。

那么如何才能在面试过程中能够更面试官聊得来呢?这得益于你平时开发过程中的积累,倘若你遇到足够多的问题,并解决了,这就是你的谈资。

比如说 maven 包冲突这个问题,倘若你用 maven 开发过有一定复杂度或做说工作量的项目,你大概率会遇到。如果你只是背过面经,那你或许就只会说,用XX命令或者XX插件查看冲突的包,然后手动解决。你当时是怎么解决的?有没有尝试去获取更多的解决方案,为什么最终会选用了那一个解决方案,有没有别的一些思考?这就是让人觉得不一样的。

再比如说一个例子在笔者面试一家电商公司的时候谈到了分库分表,但其实我也只是理论水平,很明显就没有办法和面试官达成一种灵魂上的共鸣。但是在另外一次的面试中,谈到了使用Redissetnx+ expire来实现分布式缓存功能,这样直接用是不能保证原子性的,但要怎么做才能保证原子性呢?当时我就 balala 了一种在 java 层面比较繁琐的方式来实现原子性。但是面试官很 nice 的笑着说,你可以回去查一下Redis本身是有什么机制或者说新的解决方案去解决这个问题。开发人员所遇到的相同坑,往往总是能引起共鸣的,只有当我们真的有过切身体会并自己有自己的思考之后,你就会能跟面试官有交流了。

最后再说一说如何知己知彼,百战不殆。这是一个通用的策略,短期来看就是快速适应面试节奏锻炼表达能力,长期来看就是多跟别人分享交流自己的技术心得。那就是找到队友,进行模拟面试

当我跟我的小伙伴相互问过一些常见的问题之后,你就会发现,至少对同一个问题,每个人的回答思路都是不一样的,比如说简单介绍一下 HashMap这么一个问到烂的问题。如果你能跟别人模拟面试,你就能发现原来这个还有你那么多不知道的历史,甚至有一个小伙伴把论文论证结果都跟我说了,我真的觉得惊奇,或许论文结果并不能帮助我们写出更好的代码,但是那种求知探索的精神真的是让人钦佩。

所以我可以说一下我的感受,那就是作为一个像我这种水平面试官,其实候选人 balala 说些什么我根本很难听进去,特别是那种一问一答很尴尬的那种,也就是说你在面试过程中说的 80% 的话,真正能完全吸收或者说 get 到你意思的面试官 要么是常年在一线面试的面试官并且有记录有反思,早就对各种各样的回答烂熟于心了的人,要么就是你和他拥有这相同的经历,你们说话就好像一个人一样,那么的契合。否则的话,整个面试过程中,面试官听你讲话,就好像一个没有感情的机器一样在记录,在裂缝中找优点以及缺点一样。所以我得出来的结论就是,在你的实力能胜任那份工作的前提下,大部分面试还是要看你所遇到的面试官水平以及你们的共同性有多大,越大你通过的几率就越高。这也是为什么那么多觉得自己很厉害却没有得到自己理想成绩,而那些看似愚钝的却有很好的结果的原因吧。

所以我给大家长期策略的建议就是,遇到的每一个困难,都去看看别的解决方案,然后使用那一个符合你自己场景的方案。因为世界上 99%你所遇到的问题,都有人遇到过,即使不是完全相同,但也高度相似,学会搜索,学会找到那个能给你 eureka momentnet的人,也是一种能力。


平衡面试与学习时间

这可以说是大部分人都难以处理好的问题,因为都是第一次面试,都没有体验过,或者说我们都挺在乎我们的结果的。

我询问过我身边的大部分好朋友,在找工作的时候,以下的状况可以说是正常得不能再正常了

  1. 莫名其妙的不想吃饭以及深夜睡不着,但是决定结束找工作之后就好了
  2. 笔试后废半天,面试后废半天,评测后废半天,投简历后废半天
  3. 收到下一面通知后激动半天,收到拒信后颓半天,hr 挂了之后怀疑人生
  4. 看到身边的人拿到 offer 之后更紧张的感觉

所以其实这一部分基本上是无解的,倘若让我再来一次这个过程,或者说以后工作若干年之后重新再找工作,我还是会面临相同的困境和问题,因为这是一个人正常的表现,我们应该去接纳我们自己身上的一切情绪和变化,有的人能处理的很好,有的人就像我一样很难应对,处理不好的只能在平时多努力,坚持长期主义,然后在关键时刻就可以宽容自己,该放松就放松,该接纳就接纳~

以我目前的能力,我没有办法给到更加科学的建议,因为我知道,真的很难去处理这种情况,笔试之后大脑的抽空感,接二连三的快笔试节奏,让我们很难去静下心来学习新的知识。每一次面试之后那种兴奋与失落以及舌干唇燥的感觉,不是说应对就能应对的。

但是或许像斯多葛一样:

  • 总是设想最坏的情形,假设一切都已被命运夺走
  • 控制能控制的,无法控制的要放手
  • 对抗命运对未来的安排,但接受已成现实的过去与现在,仿佛他就是宿命
  • 克己
  • 反思

不断记录、不断反馈小幅修正,在下个战场(秋招、社招)上厮杀拼搏。

希望所有付出努力的人儿都能收获你们应得的果实吧。


后话

下一篇文章或许是一个系列的文章了,当我看到那些一个个跟我相似年纪或者比我年长的人走过他们普通的人生,看着他们一篇篇博文,就好像看到了自己以后的人生轨迹,总是内心感慨万千,或许我会把他博客所写的经历和人生写成一篇篇文章吧。

如果你跟我也有相同的想法或者感慨,不妨可以跟我一起交流分享下你所看到的互联网下坚持以日记的形式公开分享总结他们的人生总结

或许你本身就是一个长期记录自己生活的人,想跟我分享你的人生见闻,也可以跟我联系。

follow me

Rating:

Comments

comments powered by Disqus