前言
作为一名普通本科出身的 Android 程序员,我的学校也不过就是一个普通的二本院校。我的学弟学妹们大多也是如此,都是普通二本背景。然而,与过去不同的是,现在的社会环境越来越浮躁,这种氛围让人难以沉下心来认真做事,反而容易陷入对学历的焦虑和对未来的不自信中。
我收到了许多来自学弟学妹的私信,内容千篇一律,核心无非是对自己学历的自卑、对即将离开校园的不安,以及面试被拒后的失落。常见的问题包括:
- 面试挂了,大厂到底更看重学历还是技术?
- 双非学历在求职中有什么需要注意的地方吗?
- 简历有什么技巧可以优化吗?
今天在这里统一回复这些问题,并结合实际经验给出建议。
来自面试官的观点
我们组最近在招聘应届生,恰好几位面试官比较熟悉,我在平时聊天的空档就这个话题询问了他们的看法。
一位朋友的原话大致如下:
现在互联网公司的节奏很快,招进来的人如果能立刻干活、立刻产出是最好的,尤其是中小型公司。如果面试官面对两个人,一个学历低但能力强,另一个学历高但能力弱,99% 的情况下都会选择能力强的。
当然,学历高的同学在简历筛选阶段通过率会稍微高一些。
不过,学历这个因素进入社会越久,对个人的影响就越弱。
也就是说,学历对找工作的影响主要集中在毕业后的两三年内,越往后影响越小。对于开发岗位而言,学历的作用远远不如技术发挥的作用大。
当然,情况也分不同。 这是来自另一位面试官同事的看法:
面试到底更看重学历还是技术,要看从事的具体岗位。
如果是算法、人工智能等岗位,一般情况下会比较看重学历,因为这类岗位偏学术型,研究生能写出算法相关的论文比本科生更有优势。
如果是前端开发、后端开发,有个本科学历通常就可以过了互联网大厂的门槛,因为这类岗位注重的是实际的技术能力。
这取决于大家的职业目标。如果目标职业对学历有较高要求,可以考虑考研提升。基本上来说,普通本科学历是满足绝大多数岗位要求的。只要过了简历关,剩下的就要靠自己掌握的技术来争取了。
身边的优秀校友案例
其实我们学校进入大厂的同学也不少。不久前,我的一位普通二本背景的学弟拿到了京东的 offer。
他找我咨询实习期相关的事情,并分享了他的经历。他说在参加面试时,候选人很多都是 985、211 院校的学生,压力不小,最后能够过五关斩六将拿下 offer 实属不易。
下面是在我的邀请下,他分享的一些自己的学习方法。
如何拿下大厂 Offer?
根据学弟的分享,他之所以能拿下京东的 offer,主要靠的是扎实的计算机编程基础能力、手写代码的能力,另外就是在校期间比较活跃,参加过几个含金量比较高的编程竞赛,拿了还算不错的名次。其中裸写代码的能力是非常关键的。
对于校招生来说,大厂面试官面试的时候更看重你的学习能力、潜力和技术的扎实程度。如果还不会,得赶紧动起来,抓住毕业前的时间,去弥补、去锻炼、去学习。
职场技能、实战经验你都可以没有,招聘方也不会苛求你这些。但是至少你应该掌握大学课业范围中的专业内容,尤其是和求职方向相关的部分,这都是基础。或许你当初考完试就还给老师了,现在捡起来也不迟。
(一)多看质量高的书籍
在大学期间,买了很多书,泡了很长时间的图书馆,看了很多技术书。后来发现,看书并不在于多,而在于经典和质量。宁缺毋滥,只推荐好的书。
计算机思维:
- CS50,哈佛公开课《计算机科学导论》,B 站就有资源。
C 语言:
移动开发搞音视频开发要用到 C 语言,而且这是一个非常吃香的方向。
- 《C 和指针》
- 《高质量 C 编程指南》
- 《C 专家编程》和《C 陷阱与缺陷》有时间可以看
- 《C 程序设计语言》
提升:
- 算法:《大话数据结构》、《算法(第四版)》、《算法导论》(一般人可能都会被劝退,不过可以看下学习 C++)
- 学习 C++:《C++ primer》、《STL 源码解析》、《Effective C++》、《深度探索 C++ 对象模型》。看完上面四本,C++ 算入门了,接下来靠自己去进阶。
- 网络:《计算机网络 - 自顶向下》、《TCP/IP 详解 - 卷一》
- 操作系统:《现代操作系统》、学堂在线网站–清华操作系统课程。如果想自己试着写写 mini 操作系统,强烈推荐《操作系统真象还原》。
- 计算机系统:《深入理解计算机系统》、《程序员自我修养》(别被名字迷惑了,这本书真正该叫《编译链接与运行》)、《设计数据密集型应用》
Java 系:
- 《Java 核心技术》
- 《effective java》
- 《深入理解 Java 虚拟机》
- 《Java 并发编程实战》
(二)打造一个自己的知识体系
所谓'知识体系',指的就是把大量却不同知识点,系统、有序、指向性明确地组合成某种类型的知识架构。通过这个知识架构,我们可以更好地理解某些问题,解决某些问题。
一般都需要经历以下六步:
- 确定领域范围
- 收集核心概念
- 建立关联关系
- 实践验证理论
- 持续迭代更新
- 输出总结沉淀
这里推荐一份参考的知识体系框架:
- 底层基础: 移动开发架构师筑基必备技能,包含基础知识整合。
- Android 高级 UI 与 Framework 源码: 高级 UI 晋升 + Framework 内核解析 + Android 组件内核 + 数据持久化。
- 360°全方面性能调优: 设计思想与代码质量优化 + 程序性能优化 + 开发效率优化。
- 解读开源框架设计思想: 热修复设计 + 插件化框架解读 + 组件化框架设计 + 图片加载框架 + 网络访问框架设计 + RXJava 响应式编程框架设计 + IOC 架构设计 + Android 架构组件 Jetpack。
- NDK 模块开发: NDK 基础知识体系 + 底层图片处理 + 音视频开发。
- 微信小程序: 小程序介绍 + UI 开发 + API 操作 + 微信对接。
- Flutter 进阶: 跨平台开发技术。
大佬一直都在充实并丰满自己的这个知识体系,并把自己的总结整理成为了学习笔记。
(三)面试准备
1. 简历方面
简历的优化是非常重要的,特别是像我这样的双非院校,在校期间也没什么拿得出手的大项目,老实说,简历上面非常尴尬,很可能连面试通知电话都收不到。
有一个多年大厂招人经验的朋友跟我说:大厂招人,一般不会不要求应聘者全能,但是必须在某一项有专精技术。
所以,这里建议大家简历的第一页上半页,或者前三行,务必表明自己的技术栈。描述时,可以针对自己的技术能力进行一些适当的展示,但是切记不可瞎吹,也不可吹过头,不然,你的面试问题难度也会提升,同时,你的人品也会遭受质疑。
下面的这是一个比较好的简历模板结构:
- 个人信息: 姓名、联系方式、GitHub/博客链接(如有)。
- 教育背景: 学校、专业、学历、GPA(如高可写)。
- 专业技能: 列出掌握的语言、框架、工具,按熟练度排序。
- 项目经历: 使用 STAR 法则(情境、任务、行动、结果)描述。
- 荣誉奖项: 竞赛获奖、奖学金等。
在写简历的时候要有侧重点,面试官的时间是很紧张的,没空看废话,对你的流水账日记不感兴趣。个人经历的描述尽量往工作和岗位相关的方向靠拢,少提不相关的内容干扰他们提炼重点信息。
项目短板的,告诉大家一个技巧,尽量挑选项目中自己熟悉的领域以及项目的亮点,要突出自己的贡献,是添加了哪些功能,还是优化了那些性能指数,最后再说说受益怎么样,例如这个功能被多少人使用,例如性能提升了多少倍。(最好按照岗位的要求,向上靠一靠)
切记不要'优化'过度,谨慎使用'精通'两字,拿不准的绝对不要写在简历上,不然你就是在给自己挖坑。(面试会根据你简历上写得技术从浅再到深入原理的提问。)
2. 知识技术方面
下面的分析适用于所有公司。市场上的公司一般可以分成两种:大公司和小公司。小公司注重实践能力,大公司看中综合能力。
小公司面试会比较集中安卓开发这一块,关注的点主要是有没有类似的项目经验、有没有遇到过他们差不多的问题。所以,面试准备中,除了基本的一些知识点还需要关注一些安卓开发实际中经常遇到的一些问题,诸如图片缓存,常见的开源框架等等。
大公司面试比较在意你的综合能力还有基础知识。下面是一些比较重要的知识点。
(1)进入大厂需要掌握的知识点
- 数据结构与算法
- Java
- 安卓
- 计算机网络
- 操作系统
- ……
A 数据结构和算法(重中之重)
数据结构和算法非常重要!尤其是在字节跳动公司(美团,百度,爱奇艺也是一样的)。这个知识点是考验一个程序员技术水平最快的方法,尤其是对我们这些毕业不久的学生。
数据结构与算法这个知识点的准备需要的时间比较长,要尽早准备,多刷一些 leetcode 或是其他类似的题。我个人的算法能力一开始也很差,但是经过我自己安排的算法专项训练,效果还是十分显著的。
下面是数据结构和算法的面试核心知识点,大家可以参考学习,逐个击破:
- 栈与队列:先进先出、后进先出
- 线性链表:单链表、双向链表
- 查找:顺序查找、二分查找
- 排序:交换类、插入类、选择类
- 树、二叉树、图:深度优先(DFS)、广度优先(BFS)
- 递归
- 分治
- 滑窗
- 三大牛逼算法:回溯、贪心、动态规划(DP)
这里直接给大家分享一份算法速刷宝典吧。下面是一个简单的 Java 实现示例,用于检测链表中是否有环:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
public class Solution {
public boolean hasCycle(ListNode head) {
if (head == null || head.next == null) {
return false;
}
ListNode slow = head;
ListNode fast = head.next;
while (slow != fast) {
if (fast == null || fast.next == null) {
return false;
}
slow = slow.next;
fast = fast.next.next;
}
return true;
}
}
B 技术知识 [重要知识点整理(高频面试真题)]
以上的问题都是精心整理过的,每个问题都是一篇长文,大家一定要好好理清楚,因为面试官都喜欢深挖和追问,大家在某一块知识点必须有深入研究,能够回答面试官 4 到 5 个追加问题。
最后
希望每一位求职者都能找到心仪的工作,收获满意的 offer!加油!