查看原文
其他

真实!找大厂实习应该达到什么样的水平

脚本之家 2022-04-23

The following article is from ConeZhang Author Cone

 关注脚本之家”,与百万开发者在一起
本文经ConeZhang(id:gh_13e9ccf3241b)授权转载

如若转载请联系原公众号

有很多小伙伴私聊问我说,现在大二想找大厂实习,应该达到什么样的编程水平才能有可能,今天也在这里聊一聊我的看法。

下面主要分为两个视角来聊聊这个事情,分别是学生视角和公司视角

首先,我们站在公司视角看看这个问题。

公司视角

大公司为什么会招你来实习

有没有想过,你在大学那1、2年学习的spring也好,flask也好,刷的算法题也好,做的web前端页面也好,做的app开发也好,熟悉的mysql使用也罢,这些经历对于一个大公司来讲,其实相当于0或者趋近于0,为什么这么说呢?

因为你的这些技能大多数都是在应用阶段,大厂对于一款成熟的产品来讲,是不敢轻易让一个大二学生的代码带到线上的,至少上线之前会经过层层review。因为你还没有搞透原理啊,而且大多数学生时期所做的一些开发,能够直接对口到工作上的非常少,当然少数除外,比如我来抖音的第二天就干了个需求还上线了。

那既然自身拥有的技能几乎没有用,大厂还愿意花300/400块钱一天请你来实习呢?

你进来的时候没有技能,大公司是可以接受的,因为他们相信在他们的培养和新人landing之下,以你的能力能够达到他们想要的水平,也就是能够达到打仗的基本水平,所以招你进来并不会看你当前拥有了多少技能,有多熟练写select语句、多熟练调css样式!

既然不看你的这些应用技能,那看什么呢?这个问题,我们留到学生视角去讲,这个得结合学生视角的现状来说,下面我们正式回答下开头提出的为什么找你来实习这个问题:

在实习生新人landing完成之后能够打仗的背景下,原因有下。

第一:有些紧急业务团队需求非常紧急,实习生也能够landing完成之后上岗上线。

第二:大公司有自身的人才发展战略,需要这些源源不断的学生来实现,也就是愿意“培养”大学生,公司存在竞争对手比如BAT巨头互为对手,他们就会在校招生层面有抢人,这就是为什么今天腾讯白菜价能够达到40W的原因,对于一个公司的发展来讲,人才是第一重要的,宁可早点把你招过来熟悉公司,也不愿意给其他公司抢了去。

第三:300/400块钱一天,假如你实习毕业之后愿意留在这家公司,那么这家公司就省去了非常多的培养成本,这也是他们愿意的。

这三个点回答了上面那个问题,为什么要招你去实习就算你啥也会,至少我见过校招生连SQL都不太会写的同学也进了BAT这类大厂。

那么讲完大公司为什么招你去实习,我们来看看小公司为什么愿意招你去实习。

小公司为什么会招你来实习

小公司,体量小,一般给实习生开的工资也只有150-200/天,那他们为什么愿意呢?从我本身的实习的经历来看,小公司招人的原因也可能就只有:业务发展招不到合适的社招人员,先来几个会这个技术栈的同学顶住 这个了。因为本身小公司不需要很多的技术人员,招实习生来还需要成本,所以必然是业务需要了。

小公司招聘要求也一般要求你那些会的技能,能够马上用上最好,再不行熟悉1-2个星期能顶也可以。所以小公司基本上是基于这种原因去招人了,如果你只会算法,那我觉得你面试通不过或者很难通过。

当然,体量很小的公司也一般不招实习生。

上面就是从公司视角谈了谈这个问题,下面来进入学生视角。

学生视角

首先,我们来看看公司视角留下的那个问题:既然大公司不看你当前拥有的技能,那它看什么呢?

大公司招实习生看什么?

先举几个例子,假如你是leader会不会让其面试通过,一位在ACM竞赛区域赛拿到冠军的同学来面试了,面试的时候算法题都是秒解,而且还提供优化思路,但是计算机体系的基础知识,比如操作系统回答的不够好。这样的情况,你大概率会给通过,还有一位同学在大学前两年独立完成了操作系统内核的实现,并将其学习经验以及代码开源在github,获得几千甚至上万star,但是在面试的时候,做算法需要给出提示情况下才能写出来。这样的情况,你大概率也会给通过。上面提到的两位同学都有在自己不足的地方被面试官问到,但是最终还是会给通过,甚至会给高评价。为什么呢?因为他们已经通过已有成就证明了自己在计算机学习上是完全没有问题的,所以给他时间在计算机其他知识上学习也完全没有问题。

从上面两个例子,我们可以总结下来:其实大厂招实习生,就是看能力,上面提到的只是学习能力,那还有沟通能力等等方面。一直相信两句话:

①表达不清楚,只可能是自己没有完全掌握;

②自信源于自身实力;

所以当你对某个点掌握理解很深刻,那么其实是不会存在面试沟通不良的情况。

那么如何证明自身是有能力的呢?

这个问题会牵扯到为什么985高校的学生在面试的时候通过率高?这是因为,他在高考的时候已经证明过自己的学习能力了,在同等条件下,当然,很难出现同等条件,我们就当无限接近的情况吧。公司会优先选择985的同学,不要觉得这不公平,假如你是老板或者leader也会这么干。

回到如何证明自身能力,其实无非就那么几种:

  1. 参加一些有名的竞赛并拿到很好的名次,比如ACM、挑战杯等等
  2. 深入研究计算机领域里的知识,做一些能够体现能力的lab,比如微内核、编译器等等
  3. 连续获得国家奖学金等高难度奖学金,证明在学业方面的能力,比如成绩每科接近满分。
  4. .....诸如此类高难度的东西

所以,这也就是为什么我在计算机人应该如何度过大学四年一文提到的,需要专注一件事,并且要有成绩,比如大一做算法题参加比赛等等。

下面来看看怎么样才算达到了大厂实习的水平

达到什么样的水平就可以开始面试

这是我们本文的中心,前面都是做一些铺垫和了解,这个问题其实比较虚,那些网上教你c++学到什么程度就可以找工作了前端到什么地步就能找到工作,其实太虚了,水平这个东西本身就是不可具体的一个概念,你说你的水平高,那怎么样才算高?是利用设计模式能够重构改善现有代码,还是算法题做到能够秒解,或者是能够有架构思维架构整个系统呢?水平二字,本身不具备可具体性、可量化性,所以这里来跟你聊聊,进入大厂实习我所需要具备的能力。

这个能力,我用一个词概括就是:深度。何为深度?深度就是你需要掌握的不仅仅是教科书式的知识而是挖掘原理,举个简单例子:你可能掌握了C++ 的sort函数用法,了解到它是排序函数而且高效,那么现在要你手写实现一个C++的sort,如果能写出来,这就是深度。深度,顾明思议,不应该局限于应用层面的熟练,而应该注重于理论与原理的挖掘,这也就是我为什么会说:你所写的那些页面和SQL语句在大公司面试的时候一无是处。

那么如何具备深度,这里我会建议你先打开格局,假如你无法参加ACM校队,但是你可以参加leetcode周赛啊,你也可以参加蓝桥杯等等,蓝桥杯全国一等奖含金量也不低,假如你无法理解一个网络包是如何在网络中传递的,你不妨从操作系统入手,两台计算机如何建立联系出发,从全局层面打开格局,从而不死磕某个知识点,大学第一年如果能刷完无数道的算法题,肯定会遇到形形色色的问题,这会很好的锻炼到你解决问题的能力,如果你是在校大学生,强烈建议认真阅读计算机人应该如何度过大学四年那篇文章。所以深度这个词,应该是你按照正确的路线学习并且深挖下去,形成一套自己解决问题的方法论,而不是看着人工智能技术火了,我去搞搞深度学习,大前端火了,我去学学RN、Flutter,微服务很牛,我去用用Dubbo。市面上的新技术层出不穷,我们应该深几度,慢几步,而不是一味的追求新技术的应用,讲到这里,想你也应该突然感悟了,重点在于深度

那么放下你手头那些低级别的应用层面的东西,去拥抱原本属于CSer的基础原理吧,这样你在面试的时候,和面试官对吹cs,他会被你的基础知识深度能力而震撼,最后给你评价:强烈建议录取。笔者当初在面试的时候,和面试官从前端的redux状态机扯到编译原理的有限自动机,后面又扯到一个播放器的状态控制等与状态转移有关的知识,双非末流本科成功拿下sp及以上offer。编译原理的基础掌握之后,对于前端也好,后端也罢,都是可以以不变,应万变。

又是谁说的编译原理在面试的时候只会问编译过程呢?多掌握一点原理,思维就能在应用层面发散,格局就能缓缓打开,如果你觉得不可思议,那么还有一个例子:缓存,你肯定了解多级缓存,那这个概念从哪里过来的呢?学过操作系统的同学可能知道CPU有多级缓存,那我们后端架构的多级缓存是不是思路相同的呢?我们组有同学在做编译系统,他也利用了多级缓存的思路,这就比较好理解了。编程思路是不变的,唯一变化的是应用场景。

最后给如我一般的双非同学一点点建议:简历关很重要,我们的简历很难通过,所以大学这几年,一定要往简历上镶金,参加重要比赛也好,成绩拔尖也好,原理研究透彻也好,开源项目也好,深度技术博客也好,这都是金,你往简历上镶就好了。加油!!

总结

不要被所谓好玩的应用所迷惑了双眼!一名优秀的CSer,从来都是会好好探究原理,从而以不变应万变,这样,进入大厂实习,本科甚至专科以上的同学都有机会,只要你踏踏实实探究原理,深入挖掘,形成自身的亮点。

最后送给阅读完的你一句话:“既然选择了计算机,便只顾秃头到底。”

  推荐阅读:

卧槽!9000G??

Rust程序员一觉醒来都懵了:审核团队集体辞职,发生甚么事了?

救救大龄码农!45岁程序员在国务院网站求助总理,精通Java却找不到工作

如何成为一名糟糕的程序员?

现在的程序员除了会偷偷养生,还会……


每日打卡赢积分兑换书籍入口

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存