读书心得

本书源码下载

初级程序员偏向考察算法和数据结构,高级程序猿关注专业技能和项目经验

 

行为面试 -> 技术面试 -> 应聘者提问  P5

行为面试:项目经验介绍(简短项目背景->自己完成任务->为了完成任务做了什么,怎么做->自己的贡献)

技术面试:链表和二叉树,二分查找,归并排序,快速排序;程序的鲁棒性、效率优化

应聘者提问:

 

面试需要的基础知识  P20

C++

面向对象特性,构造函数,析构函数,动态绑定,常用设计模式

内存管理

程序性能,多线程,程序安全

 

sizeof类  P22

sizeof空类 = 1    本来应该是0,但是要求在内存中占有一定空间(编译器决定),VS空类占1字节的空间

添加构造或析构函数  不变,添加构造或析构函数知道函数地址即可,与实例无关

添加虚函数  类型的实例中添加指向虚函数表的指针大小

 

复制构造函数的参数必须是本类型的引用变量  P24

 

面试官都期待熟练写出二分查找代码  P63

注意要处理key不在数组中的情况

//二分查找
#include <iostream>
using namespace std;

//递归
int BinarySearch(int *array, int start, int end, int key)
{
    if (start > end)    //一定要加,若key没找到返回-1
        return -1;
    int mid = (start + end) / 2;
    if (key == array[mid])
        return mid;
    else if (key > array[mid])
        return BinarySearch(array, mid + 1, end, key);
    else
        return BinarySearch(array, start, mid - 1, key);
}

//循环
int BinarySearch2(int *array, int arrSize, int key)
{
    if (array == NULL || arrSize <= 0)
        return -1;
    int start = 0;
    int end = arrSize - 1;
    int mid = 0;

    while (start <= end)    //一定要有等号
    {
        mid = (start + end) / 2;
        if (key == array[mid])
            return mid;
        else if (key > array[mid])
            start = mid + 1;
        else
            end = mid - 1;
    }
    return -1;    //一定要加,若key没找到返回-1
}

int main()
{
    int a[10];
    for (int i = 0; i < 10; i++)
        a[i] = i;
    cout << BinarySearch(a, 0, 9, 2) << endl;
    cout << BinarySearch2(a, 10, 2) << endl;

    system("pause");
    return 0;
}

 

快速排序是考察重点  P63

 

递归的实现要比循环简单的多,如果没有要求经可能多采用递归

递归是函数调用自身,而函数调用有时间和空间的消耗:每一次函数调用,都需要在内存栈中分配空间以保存参数,返回地址及临时变量,而从栈里雅茹数据和弹出数据都需要时间

 

代码规范性  P86

最好使用完整的英文单词组合命名变量和函数

错误处理方法:返回值;全局变量;异常

判断小数误差切记不能用 == ,因为计算机内表示小数时(包括float和double型小数)都有误差。判断两个小数是否相等,只能判断它们之差的绝对值是否在一个很小的范围内

 

编码前讲自己的思路是一个考察指标,举例子画图

 

C/C++程序猿要养成采用引用(或指针)传递复杂类型参数的习惯。如果采用值传递的方式,从形参到实参会产生一次复制操作。这样的复制是多余的操作,应该避免  P162

 

二分查找的partition函数可以用来寻找n个数中第k大的数字,这点常被用到,见面试题29、30

 

应聘者会被问一些需求不明确的问题,解决这些问题需要应聘者和面试官沟通

 

考察应聘者学习能力:一是询问应聘者最近再看什么书或者在做什么项目、从中学到哪些新技术;二是抛出一个新概念,看能否较短时间内理解这个新概念并解决相关问题

 

常见解题技巧:

数组从后向前复制,能减少移动次数,提高效率

快排的partition可以用于查找数组中第K大的数字

看到排序序列一定要想到二分查找

位运算一个技巧:把一个整数减去1后再和原来的数做与运算,得到的结果相当于把整数的二进制表示中最右边一个1变为0。很多二进制的问题都可以用这个思路解决。

一个指针解决不了要有两个指针的意识,要么一个起点(两个指针速度不一样),要么一前一后

全排列问题 swap fun swap

 

posted on 2016-06-29 11:13  已停更  阅读(291)  评论(0编辑  收藏  举报