剑指offer刷题——面试心得

1. 行为面试环节

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

2. 技术面试环节

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

扎实的基础知识:编程语言,数据结构和算法。链表,树,栈,队列和哈希表等。
1. 大公司倾向于链表和二叉树相关的问题:链表的插入和删除;二叉树的各种遍历方法的循环和递归
2. 大部分公司都会考察查找,
3. bat等高科技公司比较注重动态规划和贪婪算法

高质量的代码
1. 边界条件,特殊输入等测试案例
清晰的思路
1. 枚举法
2. 复杂问题简单化(分治法和动态规划)

优化效率的能力
1. 寻找时间消耗或者空间消耗上可以优化的地方
2. 牺牲小小空间换取大的时间优化-文波那契数列
3. 递归法O(2^n),
4. 归纳法O(n)(f(1)+f(2)->f(3), f(2)+f(3)->f(4)),…, f(n-2)+f(n-1) = f(n)
5.
沟通能力和迁移学习能力

3. 应聘者提问

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

4.代码

/*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; 
}

5.原文

https://blog.csdn.net/u014534469/article/details/79588068

猜你喜欢

转载自blog.csdn.net/linghugoolge/article/details/81198494