简历是一个提供信息、展示自己的平台。对于刚毕业、没有什么工作经验的人来说,简历一般控制在一页为宜,如果是PhD,需要适当列举一些相关的文章发表信息,那么简历可以扩展至两页。这里就给一个示例,它在一页纸的长度中精炼地描述了求职者的教育背景、实习经历、技能和专业背景,如图1-1所示。
![creenshot 2014-03-01 09.53.20.png](https://box.kancloud.cn/9b88ff348ef082bce544c3f9404b5e60_1024x1330.png)
图1-1 一页纸的简历
简历的第一要务是让对方能够认识并联系上你,所以名字、邮件、电话、地址等基本信息缺一不可。特别的,对于在美国本地求职的人而言,邮编很重要,因为网上的申请系统往往会根据邮编将申请者按地域划分。对于很多公司而言,他们会优先考虑本地的申请者。所以当你申请的公司在当地有总部/分部时,务必写上本地的邮编。
这里有个小技巧,由于绝大部分科技公司都在加州,特别是北加州硅谷附近,所以如果有朋友在加州的话不妨写朋友的地址。这样做的确可以提高被选中面试的几率,甚至有些小公司可能会跳过一轮电话面试直接邀请你去公司面试。现在绝大部分面试过程都是通过电话或邮件确定,除了最后给你发Offer,招聘的中间部分都不会给你提供地址寄送任何文件。如果公司决定给你Offer,你也完全有机会和HR确认/更新你的实际地址。这样做的缺点是,可能去公司面试的时候你需要自己安排机票住宿,如果真到了这一步,权且就当花钱买个机会了。
基本信息之外,对于刚毕业的学生而言最重要的信息包括学校、专业和学位。学习成绩对于大部分公司而言只是加分项,如果GPA低于3.3,可以考虑不包括成绩。当然,如果GPA是你的亮点之一,那也完全可以包含此信息。在这方面,Oracle是出了名的名校控,如果你高GPA、名校出身,基本上半只脚已经踏入了Oracle。相对而言,其他公司并没有这样的要求。此外,对学生而言可以列举一些在校学过的相关课程。只需要列举课程名即可,内容数量以5项左右为宜,课程名尽量选择大家熟知的,比如算法、数据结构、操作系统等,如果是研究生课程,可以加上“高级(advanced)”关键字。
简历中另一个十分关键的内容是之前做过的项目描述,包括工作经历、实习经历或者课程项目经历,这些部分的目的在于展示你具有相关经验,具有较强的技术实力,能够加入团队一起完成一个复杂的项目。这里,我们主要介绍如何选择合适的项目,在描述技巧部分,会进一步介绍如何描述使得你的项目更有趣。就项目内容而言,你需要优先选择和职位描述相关的项目,相关性包括:需要相似的知识,需要使用相同的软件或开发环境,需要类似的编程语言或编程模式,需要实现类似的功能等等。这些项目最能体现你的价值,使得你从一堆申请者中脱颖而出。如果没有相似的经历,那么你可以列举一些比较复杂的项目,突出你的综合能力。这些可以包括:毕业设计、课程的学期作业、网上参与合作的开源项目等。列举的目的主要是突出你的技术水准优秀,具有与他人合作的能力。就项目种类而言,你需要优先选择业界的工作实习经历,只要它们和你所求职位的描述大体在同一个行业即可。毕竟,有实际的工作经验可以传达下列信息:你对业界有一定的了解,熟悉业界的开发模式和开发周期,能够适应公司的工作环境。
简历的最后部分可以用来列举你的技能,包括熟悉的编程语言、开发环境、技术强项等。这部分的目的在于让HR能够从简历库中匹配到你的信息。通常,每个职位都有一些技术要求,HR会通过查询关键字,从简历库中选择匹配程度高的简历。这部分可以大大增加简历被匹配上的可能性。列举的原则是,并不需要特别熟悉,只要实际用过就可以在此列举。注意,如果你有幸被安排了面试,一定要回到这个部分,确保你所列举的部分至少都能回答一些基本的问题,千万不要给人做假的感觉。往往,HR并不一定了解你项目部分的描述是否与职位要求一致,因此,你这部分所列举的技能需要尽量用业界标准的语言,列举名词即可。
- 内容提要
- 作者简介
- 前言
- 我的故事,你的故事
- 现状
- 目的
- 特色
- 第1章 简历、面试和Offer
- 1.1 简历
- 1.1.1 格式
- 1.1.2 内容安排
- 1.1.3 描述技巧
- 1.2 面试
- 1.2.1 HR
- 1.2.2 技术面试官
- 1.2.3 老板
- 1.3 Offer
- 1.4 常见问题
- 1.5 工具箱
- 第2章 数组和字符串
- 2.1 知识要点
- 2.1.1 数组
- 2.1.2 哈希表
- 2.1.3 String
- 2.2 模式识别
- 2.2.1 使用哈希表
- 2.2.2 利用哈希表实现动态规划的思想
- 2.2.3 String相关问题的处理技巧
- 2.3 工具箱
- 第3章 链表
- 3.1 知识要点
- 3.2 模式识别
- 3.2.1 链表的基本操作
- 3.2.2 哑节点
- 3.2.3 Runner和Chaser
- 3.2.4 遍历并处理节点
- 3.2.5 交换节点的问题
- 3.2.6 同时操作两个链表
- 3.2.7 倒序处理
- 3.3 工具箱
- 第4章 栈和队列
- 4.1 知识要点
- 4.1.1 栈
- 4.1.2 队列
- 4.2 模式识别
- 4.2.1 通过栈实现特殊顺序的读取
- 4.2.2 “Save for later”问题
- 4.2.3 用栈解决自上而下结构的问题
- 4.3 工具箱
- 第5章 树和图
- 5.1 知识要点
- 5.1.1 树
- 5.1.2 字典树
- 5.1.3 堆与优先队列
- 5.1.4 图
- 5.1.5 图的遍历
- 5.1.6 单源最短路径问题
- 5.1.7 任意两点之间的最短距离
- 5.2 模式识别
- 5.2.1 利用分而治之(D&C)策略判断树、图的性质
- 5.2.3 树和其他数据结构的相互转换
- 5.2.4 寻找特定节点
- 5.2.5 图的访问
- 5.3 工具箱
- 第6章 位操作
- 6.1 知识要点
- 6.2 模式识别
- 6.2.1 基本的位操作
- 6.2.2 位掩码
- 6.3 工具箱
- 第7章 面向对象的设计
- 7.1 知识要点
- 7.1.1 设计题解答要领
- 7.1.2 模拟面试
- 7.1.3 抽象、面向对象和解耦(Decoupling)
- 7.1.4 继承/组合/参数化类型
- 7.1.5 设计模式
- 7.2 模式识别
- 7.3 工具箱
- 第8章 递归和动态规划
- 8.1 知识要点
- 8.1.1 构建从子问题到最终目标的方法
- 8.1.2 递归的空间与时间成本
- 8.1.3 自底向上与自顶向下
- 8.1.4 算法策略
- 8.2 模式识别
- 8.2.1 用动态规划(自底向上)解决收敛结构问题
- 8.2.2 最长子序列类型的问题
- 8.2.3 用Memorization(自顶向下)解决收敛结构问题
- 8.2.4 用回溯法(自上而下)解决发散结构问题
- 8.2.5 用D&C策略解决独立子问题
- 第9章 排序和搜索
- 9.1 知识要点
- 9.1.1 常见的内排序算法
- 9.1.2 常见的外排序算法
- 9.1.3 快速选择算法
- 9.1.4 二分查找
- 9.2 模式识别
- 9.2.1 动态数据结构的维护
- 9.2.2 对于有序/部分有序容器的搜索,用二分查找
- 9.2.3 数据范围有限、离散的排序问题
- 9.2.4 Scalability & Memory Limits 问题
- 9.3 工具箱
- 第10章 测试
- 10.1 知识要点
- 10.1.1 测试现实世界的物体、软件或函数
- 10.1.2 故障排除
- 10.2 模式识别
- 10.3 工具箱
- 第11章 网络
- 11.1 知识要点
- 11.1.1 网络分层
- 11.1.2 路由
- 11.1.3 常用网络统计指标
- 11.1.4 TCP vs. UDP
- 11.2 模式识别
- 11.3 工具箱
- 第12章 计算机底层知识
- 12.1 知识要点
- 12.1.1 进程vs.线程
- 12.1.2 上下文切换
- 12.1.3 系统调用
- 12.1.4 Semaphore/Mutex
- 12.1.5 死锁
- 12.1.6 生产者消费者
- 12.1.7 进程间通信
- 12.1.8 逻辑地址/物理地址/虚拟内存
- 12.1.9 文件系统
- 12.1.10 实时vs.分时操作系统
- 12.1.11 编译器
- 版权信息
- 看完了