流程
行为面试
准备:自我介绍和项目经验。简历里出现的内容要做好准备能描述清楚。
项目经验:STAR (situation, task, action and result)
XX 是服务于 XX 的系统。我负责开发 XX 功能。我使用 XX 进行开发。一共开发了 X 个功能。
可能的问题:
- 项目遇到的最大问题?如何解决?
- 和其他成员有什么冲突?如何解决?
- 为什么跳槽?
技术面试
- 数据结构和算法
- 专业技能:例如 JS,React
要点:
- 大胆提问,切忌答非所问;
- 问清边界,考虑特殊情况;
- 测试驱动开发;
- 在大脑里跑通代码再提交;
- 计算算法的复杂度。
面对复杂问题:
- 画图:抽象问题形象化;
- 举例:抽象问题具体化;
- 分解:复杂问题简单化。
应聘者提问
准备一些问题,根据面试官面试过程介绍的信息提问。
可以问项目和团队等方面的问题。
通用:
- 您觉得就我这次面试有哪些方面可以提高?
一面:
- 项目主要用到的技术栈是什么?
- 项目开发流程是什么样的?
二面:
- 团队正在尝试哪些新技术?
- 团队有什么技术项目?
三面:
- 公司倡导的价值观是什么?具有哪些品质的员工在公司算好员工?
- 团队规模有多大?
- 我应聘的这个职位目前最大的挑战是什么?
- 公司目前盈利怎么样?
四面:
- 工作制度是什么?
- 福利待遇怎么样?
- 每年有几次晋升机会?比例怎么样?
高质量代码
代码规范性
注意书写、布局和命名。
代码完整性
- 功能测试
- 边界测试
- 负面测试:测试可能的错误输入
错误处理:
- 返回值
- 全局变量
- 异常
代码鲁棒性
鲁棒性指程序能判断输入是否合乎规范要求,对不合要求的输入予合理地处理。
防御性编程:预见可能出现问题的地方,并为可能出现的问题制定处理方式(如检查文件名、路径、对象是否为空等)。
解决面试题的思路
先讲清楚思路和设计再开始写代码。
- 画图
- 举例
- 分解:分治法,将大问题分解成各个小问题解决
优化时间和空间效率
空间换时间对于嵌入式的开发要慎重考虑,因为嵌入式系统的内存很有限。
面试中的各项能力
沟通能力
- 对于不清楚的知识点要勇敢承认,不要不懂装懂
- 英语面试:可以花更多时间练习听力,做到能听懂问题,发音不标准对方也一般能听懂
学习能力
- 面试遇到不明白的地方多提问
- 对于没有描述清楚的题目,面试者通过提问来弄明白题目的要求也是面试的一环
知识迁移能力
抽象建模能力
发散思维能力
经验
一面
60min
- 专业技能(前端知识):30min
- 算法:20min
- 提问:10min
算法几乎没有时间去推倒重写,所以需要一开始思路就清晰。不要紧张,先想好边界条件的判断再写代码。