攻克编程面试准备——7个成功步骤
1. 准备你的作品集
面试官最喜欢看到的就是你编码技能的实际成果。当他们看到你的开发者作品集时:
- 他们知道你对构建和解决问题充满热情
- 他们看到你掌握技艺的证据
- 他们欣赏你将事情坚持到底的纪律性
提示: 提交简历时附上作品集。设计师都这样做——工程师也应该如此:这会让你脱颖而出。
完成更多副业项目,你更有可能学会有效编码并找到工作:
- 构建移动应用或Web项目,并准备好展示源代码
- 提供GitHub用户名,让面试官查看你的项目和协作方式
- 参加黑客马拉松,这是简历和面试中的亮点
- 为开源项目做贡献,展示团队协作和代码审查能力
2. 进入他们的领域
带着不可动摇的信心参加编程面试:
- 研究目标公司:查看"关于我们"页面了解历史、自我形象和价值观
- 关注社交媒体:了解公司的信息传递和沟通风格
- 阅读最新文章:掌握公司动态和当前业务
- 在LinkedIn上找到面试官:了解背景信息以便更好连接
- 认识公司团队:联系同部门人员,面试时已经认识所有人
- 联系最近面试者:获取面试过程提示和可能的问题类型
3. 像赢家一样思考
- 可视化成功:在脑海中排练面试过程
- 无所畏惧的态度:保持冷静自信,不过分看重结果
- 专注于可控因素:不要浪费精力在无法控制的事情上
- 坚持终有回报:即使经验有限,坚持努力最终会成功
4. 掌握编程面试问题
良好回答技术问题是获得工作机会的关键部分。
学习如何解决问题
不要仅仅记忆问题,目标是更高层次的理解。能够分解和分析从未见过的问题,识别模式,然后逐步向面试官解释解决过程。
简单的问题解决流程
- 完整阅读问题两次
- 用3组样本数据手动解决问题
- 优化手动步骤
- 将手动步骤写成注释或伪代码
- 用真实代码替换注释或伪代码
- 优化真实代码
准备数据结构和算法问题
数据结构
- 数组:编程中最常见的数据结构,面试中经常涉及反转、排序和搜索元素等问题
- 字符串:本质上是字符数组,数组解决技巧同样适用
- 链表:递归数据结构,需要良好的递归知识
- 栈和队列:线性数据结构,访问限制不同
- 图:非线性数据结构,表示网络架构和关系
- 树:分层存储数据,二叉树是最流行的树结构
- 映射:存储键值对的抽象数据类型
- 堆:完全二叉树结构
算法
- 深度优先搜索(DFS):从根节点开始尽可能深入搜索
- 广度优先搜索(BFS):先检查兄弟节点再检查子节点
- 二分搜索:在排序数组中查找目标值的高效算法
- 排序算法:将列表元素按顺序排列
- 动态规划:优化重复工作问题的技术,需要最优子结构和重叠子问题
- 回溯算法:尝试所有可能组合寻找正确解
- 分治算法:递归分解问题直到可以直接解决
如何练习编码问题
- 制定计划:给自己3个月专注学习时间,每天2-3小时解决2-3个编码问题
- 大声和在纸上/白板上练习:模拟真实面试环境,可视化解决方案
- 选择编码面试准备平台:如AlgoExpert等平台提供结构化学习和内置编译器
5. 提升软技能
提升开发者软技能,为行为面试部分做准备。
留下好印象的3个技巧
- 用实例回答关于之前项目的问题
- 了解公司,定制化解释为什么想要这个职位
- 提出有趣问题展示兴趣和热情
准备行为答案
使用CAT框架回答行为问题:
- 环境(Circumstance)
- 行动(Actions)
- 收获(Takeaway)
“介绍一下你自己"问题
使用NFL方法:
- 现在(Now):当前工作内容
- 过去(Former):之前的工作或项目经验
- 未来(Later):在这个机会中想要实现的目标
他们寻找的行为特质
4P原则:问题解决能力、对公司热情、对技术热情、个人表现力
具体包括:
- 问题解决能力
- 团队合作
- 礼仪举止
- 时间管理
- 身体语言
- 沟通能力
- 处理未知情况
如何提升软技能
- 经常练习社交技能
- 与新的人交谈,赢得他们的好感
- 寻找公开演讲机会
- 与朋友、其他程序员和高级软件工程师进行模拟面试练习
6. 进行模拟面试
尽可能模拟真实编程面试环境,模拟面试是最好的准备方式。
在线平台选择:
- Pramp:与同类职位求职者配对进行免费模拟面试
- 付费平台:与真正的FAANG高级软件工程师进行模拟面试
7. 准备谈判
如果遵循了所有学习路线步骤,那么你最大化了获得offer的机会。
正确谈判可以显著提高软件工程工作的起薪:
- 谈判有回报,加薪基于当前薪水的百分比
- 将整体薪酬提高10%可能让你在加薪方面领先2-3年
谈判技巧:
- 不要首先提出数字
- 不要透露当前或过去薪资
- 提出还价
- 谨慎降低期望,尽量让对方提高
- 所有待遇部分都可谈判
- 不要害怕花时间考虑