第一章 程序员简历
程序员简历应该这样写
本文除了教大家如何使用Markdown撰写程序员专属简历之外,还会推荐一些不错的撰写Markdown简历的软件或网站,以及如何优雅地将Markdown格式转换为PDF格式或其他格式。
建议您使用Markdown语法撰写简历,然后将Markdown格式转化为PDF格式再提交简历。
如果你对Markdown语法不是太了解,可以花半个小时快速浏览一下Markdown语法说明:。
简历为什么重要?
一份好的简历可以在整个申请和面试过程中起到很好的作用。写一份好的简历而不夸大自己的能力也是一项很棒的技能。为什么简历很重要?
让我们从采访开始
如果你是在网上申请的,你的简历肯定会被HR筛选,HR可能只会花10秒钟看一份简历,然后HR就会决定你是通过还是失败这个阶段。
如果你是内部人员推荐的,如果你的简历没有任何优势,即使推荐你的人很用心,也无能为力。另外,即使你通过了筛选,在之后的面试中,面试官也会根据你的简历判断你是否值得花大量时间去面试。
所以简历对于我们来说就像是一个门面,很大程度上决定了你是否能进入下一轮面试。
我发现大家都喜欢看面试经历,这可以理解,但是大多数面试经历并没有告诉你,很多问题都是在特定条件下才会问的。
我举个简单的例子:一般来说,面试官只会问简历上你会的东西(Java,数据结构,网络,算法等基础是大家必问的),比如你写你会redis,那么面试官多半会问你一些关于redis的问题。
比如:redis的常见数据类型、应用场景、为什么redis是单线程但是速度还是那么快、redis和memcached的区别、redis的内存淘汰机制等等。
所以,首先你要明确一点:不要把自己不知道的东西写在简历上。另外你还要考虑如何让自己的优势在简历中凸显出来,比如:你在某个项目中做了什么,解决了什么问题(只要有项目,就一定有需要解决的问题),你在某个项目中用到了什么技术,提升了整体的性能和并发量等等。
面试和工作是两码事,聪明的人会把面试官引向自己擅长的领域,而聪明的人会被面试官牵着鼻子走。虽然面试和工作是两码事,但如果你想拿到满意的offer,实力必须过硬。
以下是你需要知道的一些事情
1.大部分公司的HR都说我们不看重学历(骗你的!),但是如果你的学校不出众的话,很难在一堆简历中脱颖而出,除非你的简历上有特别的亮点,比如:某某大厂的实习经历、获得了某某大赛的奖等等。
2.大部分应届生找工作的硬伤是没有工作经验或实习经历,所以如果你是应届生就不要错过秋招和春招。一旦错过,你后面就极大可能会面临社招,这个时候没有工作经验的你可能就会面临各种碰壁,导致找不到一个好的工作
3.写在简历上的东西一定要慎重,这是面试官大量提问的地方;
4.将自己的项目经历完美的展示出来非常重要。
你必须知道的两条规则
STAR 原则(情境任务行动结果)
Situation: 事情是在什么情况下发生;
Task:: 你是如何明确你的任务的;
Action: 针对这样的情况分析,你采用了什么行动方式;
Result: 结果怎样,在这样的情况下你学习到了什么。
简单来说,STAR 规则是一种讲述自己故事的方法,或者说是一种条理清晰的论文模板。不管是什么,如果你合理熟练地运用这一规则,你就能轻松地向面试官描述事情的逻辑方式,并展示你对问题的分析和解释的清晰性、条理性和逻辑性。
FAB 规则(功能优势效益)
特征:它是什么?
Advantage: 比别人好在哪些地方;
Benefit: 如果雇佣你,招聘方会得到什么好处。
简单来说,这条规则主要是为了让面试官了解你的优势,以及录用你之后能为公司带来什么帮助。
项目经验怎么写?
简历上有一两个项目经历很正常,但真正能把自己的项目经历展示给面试官的人却不多。你可以考虑从以下几点来写自己的项目经历:

1.对项目整体设计的一个感受
2.在这个项目中你负责了什么、做了什么、担任了什么角色
3.从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
4.另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。
专业技能怎么写?
先问自己能做什么,再看你感兴趣的公司需要什么。一般HR可能不太懂技术,所以筛选简历的时候可能会重点看你专业技能的关键词。
对于公司需要而你不会的技能,你可以花几天时间学习一下,然后在简历上写上你会这个技能。比如你可以这样写(以下部分摘录自我的简历,你可以根据自己的情况做一些修改完善):
计算机网络、数据结构、算法、操作系统等课内基础知识:掌握
Java 基础知识:掌握
JVM 虚拟机(Java内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM内存管理):掌握
高并发、高可用、高性能系统开发:掌握
Struts2、Spring、Hibernate、Ajax、Mybatis、JQuery :掌握
SSH 整合、SSM 整合、 SOA 架构:掌握
Dubbo: 掌握
Zookeeper: 掌握
常见消息队列: 掌握
Linux:掌握
MySQL常见优化手段:掌握
[Spring Boot](http://www.blog2019.net/tag/Spring+Boot?tagId=212) +Spring Cloud +Docker:了解
Hadoop 生态相关技术中的 HDFS、Storm、MapReduce、Hive、Hbase :了解
Python 基础、一些常见第三方库比如OpenCV、wxpy、wordcloud、matplotlib:熟悉
排版注意事项
1.尽量简洁,不要太花里胡哨;
2.一些技术名词不要弄错了大小写比如MySQL不要写成mysql,Java不要写成java。这个在我看来还是比较忌讳的,所以一定要注意这个细节;
3.中文和数字英文之间加上空格的话看起来会舒服一点;
其他一些建议
1.尽量避免主观表述,少一点语义模糊的形容词,尽量要简洁明了,逻辑结构清晰。
2.如果自己有博客或者个人技术栈点的话,写上去会为你加分很多。
3.如果自己的Github比较活跃的话,写上去也会为你加分很多。
4.注意简历真实性,一定不要写自己不会的东西,或者带有欺骗性的内容
5.项目经历建议以时间倒序排序,另外项目经历不在于多,而在于有亮点。
6.如果内容过多的话,不需要非把内容压缩到一页,保持排版干净整洁就可以了。
7.简历最后最好能加上:“感谢您花时间阅读我的简历,期待能有机会和您共事。”这句话,显的你会很有礼貌。
推荐的工具/网站
冷熊简历(MarkDown在线简历工具,可在线预览、编辑和生成PDF):http://cv.ftqq.com/
Typora+Java程序员简历模板
第 2 章:新手程序员该如何准备面试?
不管是校园招聘还是社招,各种面试、笔试都是不可避免的,那么如何去准备这些事情就显得尤为重要。
笔试和面试都有规则可循。我所说的“规则”是指你可以提前为技术面试做好准备。
我不太喜欢临考前死记硬背题目的做法,强烈反对!我觉得这种方法非常极端,而且在经验不多的面试官面前完全没用。
建议大家一步一个脚印,稳步前行。
1 如何获取大厂面试机会?
2 面试前的准备
2.1 准备自己的自我介绍
2.2 关于着装
2.3 随身带上自己的成绩单和简历
2.4 如果需要笔试就提前刷一些笔试题
2.5 花时间一些逻辑题
2.6 准备好自己的项目介绍
2.7 提前准备技术面试
2.7 面试之前做好定向复习
3 面试之后复盘
1 如何获得大公司的面试机会?
在讲如何获得大公司面试机会之前,我先给大家简单了解一下校园招聘中非常常见的两个概念——春招和秋招。
1.招聘人数 :秋招多于春招 ;
2.招聘时间 : 秋招一般7月左右开始,大概一直持续到10月底。但是大厂(如BAT)都会早开始早结束,所以一定要把握好时间。春招最佳时间为3月,次佳时间为4月,进入5月基本就不会再有春招了(金三银四)。
3.应聘难度 :秋招略大于春招;
4.招聘公司: 秋招数量多,而春招数量较少,一般为秋招的补充。
综上所述,总体来看,秋季招聘的价值明显高于春季招聘。
下面我会讲一些我知道的方法,但这也应该涵盖了大部分获得面试机会的方法。
1.关注大厂官网,随时投递简历(走流程的网申);
2.线下参加宣讲会,直接投递简历;
3.找到师兄师姐/认识的人,帮忙内推(能够让你避开网申简历筛选,笔试筛选,还是挺不错的,不过也还是需要你的简历够棒);
4.博客发文被看中/Github优秀开源项目作者,大厂内部人员邀请你面试;
5.求职类网站投递简历(不是太推荐,适合海投);
除了这些方法以外,我还碰到过这样的经历:一些大公司的某些部门可能暂时招的人不够,而如果你的亲戚或者朋友恰好在这家公司,而你又恰好在寻觅offer,那么基本上就都有面试的机会,而且这种面试的难度好像普遍比其他正式面试要低很多。
2. 面试前的准备
2.1 准备自己的自我介绍
从HR面试,技术面试到高管面试/部门经理面试,面试官一般都会先要求你做自我介绍,所以准备好自我介绍真的很重要。
网上一般建议准备两份自我介绍,一份是给HR的,主要突出你的经历,简单提一下你拥有的编程技能;另一份是给技术面试官的,主要谈你拥有的技术细节,项目经验,简单提一下这些经历。

这里我分享一下我自己的一个简单的自我介绍模板:
面试官你好!我叫XXX,大学期间主要利用课外时间学习XXX,在校期间参与开发过XXX系统,另外在自己的学习过程中也编写过XXX系统等多个系统。
除了学习,我喜欢通过博客分享自己学到的东西。我现在是某个社区的认证作者,写过一些非常好的文章。另外,我还获得过某个奖项。我的 Github 上的某个开源项目有多少颗星?
2.2 关于服装
穿西装、打领带、穿皮鞋?NO!NO!NO!这是互联网公司的面试,不是走红毯,所以只要穿得简洁大方就行,不用太正式。
2.3 携带成绩单和简历
有些公司会要求你在面试前提交成绩单和简历作为参考。
2.4 如果需要笔试,提前练习一些笔试题目
如果你有很多空闲时间,可以练习一下笔试题(牛客网上有很多)。但不要只练习面试题而不写代码,因为程序员不只是为了考试而存在的。
2.5 花些时间解决一些逻辑问题
在面试过程中,我发现有些公司有逻辑笔试环节,并且都把逻辑笔试成绩作为很重要的参考。
2.6 准备自己的项目介绍
如果你有项目,技术面试的第一步一般是让你介绍一下你的项目,你可以考虑以下几个方面:
1.对项目整体设计的一个感受(面试官可能会让你画系统的架构图)
2.在这个项目中你负责了什么、做了什么、担任了什么角色
3.从这个项目中你学会了那些东西,使用到了那些技术,学会了那些新技术的使用
4.另外项目描述中,最好可以体现自己的综合素质,比如你是如何协调项目组成员协同开发的或者在遇到某一个棘手的问题的时候你是如何解决的又或者说你在这个项目用了什么技术实现了什么功能比如:用redis做缓存提高访问速度和并发量、使用消息队列削峰和降流等等。
2.7 提前准备技术面试
搞清楚面试中自己可能涉及到哪些知识点,哪些知识点是重点。面试中哪些问题会被频繁问到,如何回答。(强烈不建议死记硬背,第一,死记硬背能记住多少?能记住多久?第二,死记硬背很难坚持学习!)
2.7 面试前做有针对性的复习
所谓针对性复习,就是针对你要面试的公司进行有针对性的复习,比如在面试之前可以先上网搜索一下,看看你要面试的公司有没有面试经验。
比如我在面试 ThoughtWorks 的前几天,就在网上找到了一些关于 ThoughtWorks 技术方面的文章,然后了解到 ThoughtWorks 的技术方面会要求我们在之前的工作基础上增加一两个功能,于是我就提前一天重构了之前做的程序。
然后到了技术部分,我就简单改了几行代码,写了个测试,如果不是提前准备的话,20分钟内有很大概率无法完成这个任务。
3. 面试后回顾
失败了,不要气馁;通过了,也不要欣喜若狂。面试和工作其实是两码事,很多面试失败的人,工作能力可能比你强,反之亦然。我个人觉得,面试也像是一次全新的旅程,失败与胜利都是常有的事。所以,劝大家不要因为面试失败而气馁,失去斗志。不要因为通过了面试就沾沾自喜,更好的未来在等着你,继续努力吧!
第三章 2020春招你最困惑的十个问题
(1)Android发展的前景如何?
通过智联招聘、拉勾网、Boss直聘、前程无忧等发布的移动互联网招聘岗位需求发现,移动招聘数量有所减少,但中高端职位数量有所增加,说明行业更加成熟和规范。
竞争虽然激烈,但产品质量和留存更重要。我们已经进入技术赋能商业的时代。大前端是跨平台的,移动开发者的未来更有可能是跨端的。产品、运营、数据分析、后端多一点技能更好。
(2)我是非重点大学/三本院校/大专的,有机会进大公司吗?
我也是非985、非211的,结合我自己的经历和一些朋友的经历,我觉得我来回答这个问题最好。首先我觉得学校歧视很正常,真的太正常了。要抱怨的话,只能抱怨自己没考上名校。

不过,也不要总是说自己学校不好,或者以此作为进不了大公司的借口。学历只是筛选简历的众多标准之一。如果你足够优秀,简历内容丰富,你也可以和名校的学生一较高下。
企业HR肯定更青睐学历高的人,毕竟985、211高校优秀人才的比例比普通学校高很多,HR团队肯定会优先从这些学校选择。这就像是相亲,你是愿意在众多优秀的人中选择一个优秀的人,还是在众多普通人中选择一个优秀的人?
非重点本科,甚至二本、三本,甚至专科的学生也有很多进入大公司,但比例比名牌大学要低得多。
从大公司招聘结果来看,高学历人才占了绝大多数,那些成功进入BAT、美团、京东、网易等大公司的非重点本科,甚至是二三线,甚至是大专学历的学生,往往有着丰富的项目经验,或者在ACM等一些高质量竞赛中取得过不错的成绩。
一些学历并不突出但能力优秀的面试者能够进入大公司,并不是说学历不重要,而是学历的弱项可以通过其他优势来弥补。
所以,如果你的学历不够好,又想进大公司的话,我建议你这样做:
尽量在面试前最好有一个可以拿的出手的项目;
有实习条件的话,尽早出去实习,实习经历也会是你的简历的一个亮点(有能力在大厂实习最佳!);
参加一些含金量比较高的比赛,拿不拿得到名次没关系,重在锻炼。
(3)非计算机专业的学生能学好Android吗?能进大公司吗?
当然!没有经过专业训练的程序员还有很多,很大一部分原因是互联网行业的工资比较高。我们学校外面的培训班90%都是针对没有经过专业训练的学生,我觉得他们中的很多人都做得很好。
另外,我有个朋友大学是学机械专业的,大一就开始自学Android,学的非常好,在我看来比他班上大部分学计算机专业的同学都厉害,参考(2)的答案。就算你不是专业的程序员,如果想进大公司,用其他方面的优势来弥补也行。
我觉得我们不应该因为专业而给自己设限,给自己贴标签。说实话,很多主修专业的学生可能不如你。你觉得主修专业的学生会认真听课吗?他们课后还是几乎全靠自学!但是,如果你不是主修专业,如果你想学好,你注定要为你的专业放弃一些学习时间,这是可以理解的。
建议非专业学生首先打好计算机基础知识:
①计算机网络、
②操作系统、
③数据机构与算法,我个人觉得这3个对你最重要。
这些东西就像是内功一样,对于你将来长远的发展非常有用,当然如果你想进大公司,肯定会被问到这些知识。
另外,“你一定要学好数据结构和算法!你一定要学好数据结构和算法!你一定要学好数据结构和算法!”,重要的事情说三遍。
(4)学习Android需要学什么?
掌握架构师筑基必备技能
掌握Android框架体系架构
学会360°全方位性能调优
通过设计思想解读开源框架
学习NDK模块开发
通过实战炼成移动架构师
学会开发微信小程序
掌握hybrid开发与Flutter
(5)没有实习经历找工作会特别困难吗?
没有实习经验没关系,只要有令人印象深刻的项目或者比赛经验,还是有可能拿到大公司的offer的。我找工作的时候,没有任何实习经验,也没有比赛经验,全程靠着项目经验过关。
如果你没有实习经历,也没有任何出色的项目或者大赛经历,我想你在简历阶段就会被拒绝,除非你有其他特别的亮点。
(6)我应该如何准备Android面试?
面试问题
Android基础知识
Activity
Service
Broadcast
Receiver
ContentProvider
Intent
Fragment
Java面试题
Java基础
Java中的设计模式
Android 高级
Android性能优化
Android屏幕适配
AIDL
Android中的事件处理
Android中的动画
ContentObserver
内容观察者作用及特点
项目框架的使用
自我介绍
开发中都使用过哪些框架、平台
都使用过哪些自定义控件
项目的流程
项目中常见的问题
即时通讯是是怎么做的
常见框架分析
Flutter相关面试题全解析
Dart部份
Flutter 部份
腾讯、阿里、百度、美团、[字节跳动](http://www.blog2019.net/tag/%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8?tagId=252)、京东等)Android高频面试真题集锦
(7)准备面试简历时应该注意什么?
以下是一些面试准备的小贴士及面试注意事项:
简历
简历的重要性不言而喻,如何写好简历是一门技术活。当然,如果你有很好的背景(学校或者公司),那么无论你怎么写,基本都不会被拒。作为普通人,我们还是需要努力的。以我的简历为例,它有以下几个部分: