剑指offer刷题心得(面试篇)

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

1. 行为面试环节

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

2. 技术面试环节

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

  1. 扎实的基础知识:编程语言,数据结构和算法。链表,树,栈,队列和哈希表等。
    a.大公司倾向于链表和二叉树相关的问题:链表的插入和删除;二叉树的各种遍历方法的循环和递归
    b.大部分公司都会考察查找, 归并排序和快速排序
    c.bat等高科技公司比较注重动态规划和贪婪算法
  2. 高质量的代码
    a.边界条件,特殊输入等测试案例
  3. 清晰的思路
    a.枚举法
    b.图例法
    c.复杂问题简单化(分治法和动态规划)
  4. 优化效率的能力
    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)
  5. .沟通能力和迁移学习能力

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 == 1return 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;
}

你可能感兴趣的:(剑指offer刷题心得(面试篇))