行为面试=》技术面试=》应聘者提问

1. 行为面试环节

*
项目经验是重中之重,简历撰写参考STAR模型:即Situation(简短的项目背景),Task(完成的任务),Action(为完成任务做了哪些工作,怎么做的),Result(自己的贡献)。
* 准确描述对技能的定位:了解,熟悉,精通。
* .回答为什么跳槽。一定要往积极方面去回答,如个人技术瓶颈,想寻找一份更有挑战的工作。
2. 技术面试环节

基础知识扎实全面,包括编程语言,数据结构,算法等等;
能写出正确的,完整的,鲁棒的高质量代码;
能思路清晰地分析,解决复杂问题;
能从时间,空间复杂度两个方面优化算法效率;
具备优秀的沟通能力,学习能力,发散思维能力等

* 扎实的基础知识:编程语言,数据结构和算法。链表,树,栈,队列和哈希表等。
a.大公司倾向于链表和二叉树相关的问题:链表的插入和删除;二叉树的各种遍历方法的循环和递归
b.大部分公司都会考察查找, 归并排序和快速排序
c.bat等高科技公司比较注重动态规划和贪婪算法
* 高质量的代码
a.边界条件,特殊输入等测试案例
* 清晰的思路
a.枚举法
b.图例法
c.复杂问题简单化(分治法和动态规划)
* 优化效率的能力
a.寻找时间消耗或者空间消耗上可以优化的地方
b.牺牲小小空间换取大的时间优化-文波那契数列
*递归法O(2^n),
*归纳法O(n)(f(1)+f(2)->f(3), f(2)+f(3)->f(4)),…, f(n-2)+f(n-1) = f(n)
* .沟通能力和迁移学习能力
3. 应聘者提问

有针对的准备,预备三四个有技术含量的问题

实例展示
/*Good Practice 1*/ int StrToInt(char* string) { int sign = 1; __int64 number;
//declare as longlong int type //protect against null point if(NULL == string) {
printf("Null pointer exception!"); return 0; } //consider sign of number,
taking first non-digit character if(*string == '+') { sign = 1; ++string; } if(*
string == '-') { sign = -1; ++string; } //Return directly if starts from zero if
(*string == '0') { printf("Result is:0."); return 0; } //stop on encountering
ending character while(*string != '\0') { //skip space and tab character if(*
string == ' ' || *string == '\t') { ++string; } //core computation algorithm
number =10*number + sign*(*string-'0'); //deal with int type overflow if( (sign
>0 && number > INT_MAX) || (sign < 0 && number < INT_MIN) ) { printf("The input
numbers are overflow!"); break; } ++string; }; return number; } /*Good Practice
2*/ ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { //check input
if(NULL == pListHead) { return NULL; } //check input if(k == 0 || K == 1) {
return pListHead; } ListNode* pKthTracker = pListHead; ListNode* pTrailer =
pListHead;for(unsigned int inx = 0; inx < k-1; ++inx) { //always check pointer
if(NULL == pTrailer) return NULL; pTrailer = pTrailer->next; } while
(pTrailer->next !=NULL) { pKthTracker = pKthTracker->next; pTrailer =
pTrailer->next; }return pKthTracker; } /*Good Practice 3 - Recursive method
f(n) = f(n-1) + f(n-2) */ //Recursive formula int SolvePhi(int n) { //stop
condition if(n == 1) { return 1; } if(n == 2) { return 2; } //Recursive formula
return RecursiveSolvePhi(n-1) + RecursiveSolvePhi(n-2); } //Dynamic programming
int SolvePhi(int n) { if(n == 1)return 1; if( n == 2) return 1; int fn_1 = 2;
int fn_2 = 1; int fn = 0; for(int inx = 3; inx < n; ++inx) { fn = fn_1 + fn_2;
fn_2 = fn_1; fn_1 = fn; } return fn; }