1.1 面试官谈面试
初级程序员考算法和数据结构,高级程序员考技能和经验;
应聘者应该准备好的问题问面试官;
不要着急写代码,写完需要检查;
“写”程序才是程序员;
1.2 面试三种形式
1.2.1 电话面试
只能通过语言进行交流,要求平时对于知识有复述的能力和练习;
电话面试中出现英文时,应该及时询问不懂的单词或者句子,不能曲解;
1.2.2 在线面试
在线面试考的不仅是编程能力,还有编程习惯;
不要急于打开编辑器写代码,应该给出编程的思路描述,然后尝试编写,最后单元测试;
报错没有问题,打开调试环境,设置断点,单步跟踪,分析调用栈。(我是故意写错,让你看看我是如何调试的)
1.2.3 现场面试
穿得干净;及时补充能量;状态积极;
1.3 面试三个环节
简历询问-》技术面试-》应聘者提问
1.3.1 简历询问
又叫行为面试,一般会针对简历进行提问,或者自我介绍;
其中涉及到了项目经验,学习历程,技术优势是面试官比较关注的地方;
1.3.1.1 项目经验
STAR(Situation Task Action Result)形式描述自己做过的项目;
S: 一句话介绍背景
T:负责某个项目,那就需要准备框架设计,核心算法,团队合作的问题;
参与某个项目,需要准备完成任务程度,实践方式,收获的问题;
A:系统设计:说框架;开发:说平台,技术,难点;测试:测试手段,脚本;
R:用数字说明,可以编,但是要合理,开发功能的说按时完成了多少个功能模块;优化的说性能提高了多少个百分点;维护的说修改了几个BUG;
如果上边描述不清楚,面试官会追问遗漏的点,也会问到的其他问题:
1)遇到最大的问题,以及如何解决的;2)在这个项目中有什么成长;3)协作中发生冲突如何解决;
1.3.1.2 技术优势
区分“了解”“熟悉”“精通”的区别,依次对应“入门”“做过项目,查文档可以写”“随便问”
1.3.1.3 为啥选择我们、为啥跳槽
首先是后边这个问题,避免“老板烂,队友是猪,加班多,工资少”,比较合适的是,我对以前的工作没有多少兴趣,认为我在这个岗位没啥发展,个人判断“xx”公司的业务在未来会有不错的发展。
1.3.2 技术面试
面试的主要内容,考察五个方面的东西:基础知识,高质量代码,分析问题的思路,优化算法的能力,学习沟通的潜力;不断的讨论问题是很好的解决方案;
1.3.2.1 基础知识
编程语言的基本语言特性要非常清晰,如果这门语言是公司标明要用的,那必须非常清晰;
数据结构中链表,栈,队列,哈希表,树以及他们的基础操作是经常考察的;
算法中肯定是查找和排序了,常见的算法,如快排,二分,归并这些必须非常熟悉;
1.3.2.2 高质量的代码
注释;完成功能;边界;效率;(写代码 的顺序也应如此)
例1 把字符串转换成整数
int StrToInt(char* string){int iRtr = 0;while(*string !=0){iRtr =iRtr*10 +*string-'0';++string}return iRtr;}
注释:函数功能注释,输入输出;函数边界注释,边界处理;函数错误(溢出)注释,错误处理;
完成功能:iRtr = iRtr*10+*string-'0'
1.3.2.3 清晰的思路
难免遇到不会的题目,这时候就要有清晰的解决问题的思路:
1)简单化;2)实例化;3)图文形象化
1.3.2.4 优化效率
首先知道如何计算程序的效率,然后采用下边的顺序优化原有的解决方案:
1)更合适的数据结构进行存储;2)更合适的算法
1.3.2.5 综合能力
这是程序员的软实力,比如学习能力,沟通表达能力,团队协作能力;当然这些方面的考察依次会转化为以下的问题“从XX问题中得到了什么”“介绍一下自己”“你对XX冲突的看法”;
当然综合能力还包括其他的拓展能力,比如建模能力,发散思维能力等,这些都是对special offer提出的要求。
1.3.3 提问
应该问“与招聘职位和他们正在做的项目相关的技术问题”
1.4 总结【付超】
看书写笔记是一个好习惯, 我也一直保留这样的习惯,能够让我深入的理解书中讲到的内容,另外为以后温习学到的点留下机会。原来都会写到onenote中,现在分享出来,也是有一点分享的意思。
简述很好,但是不太适合程序员写技术博客,尝试过在别的平台写东西,但是总没有写东西的欲望。解决方案如下:
文字部分依旧使用简述发布,代码部分会给出代码的链接,ideone.com是个不错的平台,我会把代码发布到那边去实践。
另外,《剑指offer》这本书中提到的背景知识我会同时发布在这个专题里,多数是转发来的优秀资源,用于迅速的了解背景知识。
祝好