一、常见的问题
在准备校招的过程中,很多同学会有一些困惑,这些困惑具有一些普遍性。
常见的困惑如下:
- 为了在校招更占优势,是否应该在大学里写更多的论文呢?
- 为了在校招中更占优势,是否应该和大学老师多做一些项目呢?
- 在校期间没做过什么牛叉的项目怎么办?
- 是不是简历中项目写的越多越好?
- 为了在校招中更占优势,是否有必要去实习呢?
- 为什么面试官问的问题自己都会却没有通过面试呢?
- 为什么某些人复习很早,结果还没有复习开始较晚的同学拿的 Offer 更好呢?
- 为什么我感觉自己和某大学的一个朋友的水平差不多,为啥他拿到很多大厂 Offer 而我却不尽人意呢?
- 为什么都是一个学校的同学,有些同学进了大厂有些同学却没有拿到大厂 Offer 呢?
- 为什么某位同学都不怎么会 Java ,却轻松通过了某大厂的 Java 校招面试了呢?
- …
能够问出这些问题,很大程度上说明对校招的底层逻辑没有很清晰地认知。
二、底层逻辑
在我看来,校招最重要最核心的是考察你解决问题的能力,其次是学习能力、沟通合作的能力。
因为 Java 工程师的工作就是在解决业务和技术等问题;具备良好的学习能力能够在遇到新问题时快速找到解决方法,在遇到新技术时可以快速掌握和运用;同时,工作通常是以团队的形式开展,良好的沟通能力必不可少。
校招的要求都是围绕这些展开的。
围绕这个核心目标,校招面试中重点会看你读书的学校层次、你是否有大厂的实习经历、你在校期间是否在知名比赛中获得好的名次,在校期间是否有发表高级别的论文,你对技术原理的掌握程度等。
2.1 学校层次
通常来说,学校越好,拿到大公司 Offer 的概率越大。
很多大公司会有学校白名单,即使你通过内推的途径投简历,学校不在白名单里没有其他特长,很容易被直接刷掉。
所以,如果学校不是很好的话会少了很多大厂面试机会。
当年我们那一届参加某大厂的校招,有一位某名牌大学的同学在校期间都没有学习过 Java,对 Java 的了解非常基础,最后也是轻松通过了面试。
一般来说,能够考上名校的学生学习能力比较强,招聘进来可以快速掌握 Java 编程,快速理解并实现需求。
2.2 实习经历
如果在校期间条件允许,尽量能够抽些时间去相对大一些的公司去实习。
通过实习可以更清楚工作中会用到的技术栈,能够更清楚工作开发的流程等。
如果有大厂的实习经历,校招时会有很大的优势。一方面,在大厂实习过的同学更熟悉开发流程、熟悉工作中涉及的框架,能够相对更快速地上手项目。另外一方面,能够拿到大厂的实习 Offer 也算是一种背书。
此外,大家可以把实习面试当做校招的一种预演。准备实习面试能够比身边的很多朋友尽早准备面试的内容,积累更多面试经验。
2.3 获奖经历
获奖经历包括各种奖学金,还包括计算机比赛获奖,奖项不在于多,而在于含金量和名次。
如果你在校期间能够拿到国家奖学金、专业一等奖学金等,说明学习能力还是不错的,面试也会比没有的同学优势大一些。
如果你在校期间,拿过计算机相关的全球或者全国有些技术含量的比赛名次,比如数据挖掘比赛全国 TOP 10, ACM 金奖、银奖、铜奖,挑战杯全国一等奖等等,那么面试中会有很大的优势。
这些有含金量的证书侧面说明你的算法能力、编码能力等比较不错,也意味着解决问题的能力不错,在全国甚至全球来讲也算是比较优秀。
2.4 高水平论文
如果在校期间发表过很多高水平的论文,写在简历中也算是一个很大的优势。
通常来说,科研能力强的同学学习能力也更强。在未来的工作中遇到技术和业务难题时,也更容易想出创新性的解法。
有一位同学的编码能力很一般,研究生期间也没做过项目,但是科研能力很强,研究生期间在导师的指导下发表了比较高质量的 SCI 论文,凭借着这一优势,加上校招准备期间认真地复习,最后成功拿到某大厂 Offer。
2.5 专业基础 & 底层原理
大家真正投入到校招复习,当你看了很多面经你会发现一些共性,其中一项就是面试中会问一些专业基础。比如操作系统、数据结构、算法、计算机网络、软件工程等课程中常见的、重要的知识点。
常见问题如下:
- 线程和进程的区别?
- 什么叫死锁?如何解决死锁问题?什么叫活锁?
-
ArrayList
和 LinkedList
的区别是什么? -
HashMap
的初始容量,负载因子,如何解决哈希冲突,扩容机制等 - 手写《剑指offer》 或者 LeetCode 中的一些算法题
- 在浏览器地址栏输入 http://www.baidu.com 并访问,整个过程中发生了什么?
- HTTP 三次握手、四次挥手的细节是怎样的?
- HTTP 有哪些请求方法?
- 讲讲 TCP粘包和拆包
- 讲讲 TCP 和 UDP 的区别
- 讲讲 XXX 的原理是什么
- …
专业基础扎实的同学在工作中面临技术难题时,更容易从计算机基础课程中找到灵感,更快更好地解决问题。
比如当你真正理解 “计算机科学领域的任何问题都是可以通过新增一个间接的中间层来解决的” 这个思想后,你就会发现通过加分布式缓存是通过新增缓存层、通过空间换时间的方式来提高访问速度;MyCat 分库分表中间件是通过增加数据库代理层,来解决突破数据库单库瓶颈;分布式注册中心,通过提供中间层实现调用双方的解耦;分布式消息队列通过队列层来实现削峰、解耦的目标。最近比较火的 DDD,也是通过新增领域层实现业务的内聚,降低耦合的目标。
因此,如果你的专业基础足够扎实,在学习 JDK 源码、学习工作中常用的中间件,学习新出现的技术时,更容易认清技术背后的本质;当你遇到不容易解决的难题时,更容易采用类似的思想来解决工作中遇到的问题。
这也解释了为什么很多公司不愿意要培训机构出来的学员(尤其是非科班出身)的原因。
大厂从来不缺会使用某项技术的同学,更愿意招聘懂原理的同学,因为懂原理才更容易灵活运用。所以现在 Java 工程师校园招聘也喜欢问一些原理性的知识。而且现在 Java 校招也非常内卷,只有更好地掌握技术原理才能够拉开和别人的差距。
很多同学在学校里跟导师做了很多项目,但是对各种框架只停留在使用层面,没有深入到原理,面试中很容易被淘汰。
2.6 编码能力(源码 + 项目)
Java 工程师的核心能力之一就是编码能力。
如果你在校期间参与过一些企业级的项目(尤其是有一些高并发的经验)、参与过一些知名开源项目等,那么 Java 校招过程中就会有较大优势。
参与过企业级项目的同学已经掌握了工作中常用的技术,入职之后能够相对快速上手项目,培养起来也会容易一些。
参与知名开源项目的同学代码的可维护性、可拓展性通常更高,解决问题的能力,源码的阅读和运用能力更强。
很多同学会发现校招面试时面试官也会经常问一些设计模式相关的问题。这些问题也是在尝试了解你在写代码时是否有提高可维护性、可拓展性等思想的意识。
也有很多同学会发现校招过程中面试官也会经常问一些源码的问题,包括 JDK 源码、Spring 源码,甚至 guava 和 apache 的 commons 这类工具包的源码等。俗话说“熟读唐诗三百首,不会作诗也会吟”,读源码能够加深对一些知识点的理解,能够拓展解决问题的思路,能够学习良好的编码风格等。
校招中在线或者手写算法题,也是对编码能力的考察。
参与的项目不在于多,而在于精。在于你在项目中扮演着什么角色,你在项目中有多少思考,是否清楚项目的架构,面对项目中的难题你又是如何解决的,是否能够很好地和团队其他成员沟通,是否能够很好地推进项目的进度等。
之前有学弟在校期间参与了阿里巴巴某知名的开源项目并成为该开源项目的 MVP ,校招面试的公司几乎都通过了,最终去了某 BAT 大厂。
2.7 沟通表达能力
Java 工程师工作需要和产品沟通需求;需要给前端提供接口并和前端联调;需要将项目向测试同学提测;需要向主管寻求帮助,反馈进度;需要准备晋升答辩等。
实际开发企业级项目时,很多时候需要多个后端一起分工合作,因此良好的沟通能力很重要。
很多同学技术并不是特别突出,面试时语言缺乏条理,甚至逻辑混乱,很容易被淘汰。
三、总结
当你了解到校招求职的底层逻辑之后,文章开头的很多问题的答案就不言自明了。
为什么很多公司,尤其是大公司更愿意招一些校招的学生来培养,其中一个重要原因是通常来说校招的同学底子会好一些。
校招的核心还是挑选出学习能力强,沟通表达能力强的学生,能够在未来的工作中快速解决技术和业务问题,能够为公司创造更大的价值。
如果你是名校的学生;如果你在校期间获得了计算机相关的比较有含金量的比赛名次;如果你有大厂的实习经验;如果你在校期间发表过高水平的论文;如果你专业基础非常扎实;如果你源码读得很透;如果你参与过知名开源项目等。那么无形中,你在校招中就占了很大优势。
在某种程度上,面试官浏览过你的简历后,看到你简历中罗列的关键信息你的面试结果已经八九不离十了。
上面这些条件中有很多是短期内无法改变的条件,也有很多是可以改变的。校招求职的发力点就是这些能够在相对短期内突击出来的部分能力。
本文列举出在校招中非常核心的一些影响因素或能力要求。如果你并非名校,如果你没有拿得出手的项目,如果你没有牛叉的比赛获奖也没关系,因为很多同学也和你一样。
但如果你能尽早明确复习的重点,能够在获得面试机会时,自己的答案可以超过大多数同学,超出期待;你的表达能更加结构化,沟通非常顺畅;那么也会有更大的概率进入大厂,比身边的同学拿到更好的 Offer。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net