您的位置:首页 > 其它

读书心得

2016-06-29 11:13 190 查看
本书源码下载

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

行为面试 -> 技术面试 -> 应聘者提问  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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: