计算机网络:
从OSI 七层模型,到各个层的各类协议。
主要讲述:传输控制协议 TCP/IP 协议,以及用户数据报 UDP 协议(区别)
最重要的仍是 TCP 的创建和终止 (理解创建和终止过程)。加分点:三次握手弄成两次握手行不?为何?四次挥手,弄成三次挥手行不?为何?为了解决什么问题,才不能增长一步或减小一步?
针对流量控制提出滑动窗口机制 :解决一方发的太快另外一方来不及接收的问题。
针对网络上拥塞的问题提出 TCP 拥塞控制机制:其中包括慢启动、拥塞避免、快速重传和快速恢复。
C++基础:
最重要的是继承,以及多态(相同的命令执行不一样的动做)的实现机制。在这里边有虚函数表的知识。
虚函数表:若是类里边有虚函数,虚函数表示属于类的,那么这个类的对象会有一个指针的成员变量,这个指针指向的是一个虚函数表,虚函数表里放的是虚函数的函数指针,若是一个类继承另外一个类,其替换的知识虚函数表里的函数指针(重写的那个虚函数的函数指针)。
为何在有继承的状况下,父类的析构函数必定要设置成虚函数,若是不是虚函数会出现什么问题?这个问题是关于实现多态时,析构指针所指内存时的内存泄露问题。
malloc/free 和 new/delete 的类似之处以及不一样之处。前者是 C 语言里的库函数,后者是 C++ 的运算符()这是本质的区别,若是理解的到位,告诉面试官若是交叉使用会出现什么状况。从这个基础上说起 C++ 的内存分配:栈、堆、全局(静态)存储区、常量存储区。着重注意在堆存储区动态申请指针的时候,记住不用的时候析构掉(给面试官一种有严谨编程习惯的感受)。
针对数据结构的各类排序算法,分析其最好的时间复杂度,最坏的时间复杂度。有没有额外空间复杂度(最好的时候是多少,最坏的时候是多少),拿快速排序为例:因为快速排序是递归的,因此必定要借助一个递归栈来保存每一步递归调用的信息(这就是额外的空间复杂度)。快排最坏的状况就是进入下次递归的两部分一部分太大,而另外一部分过小,若是这种不对称性发生在每一步的递归调用上,那么快排的时间复杂度为 O(n^2)。最好的状况是每次递归的两部分为上一次的一半,这是时间复杂度最小 O(nlogn) 。若是理解比较透彻的话,能够告诉面试官怎么找到快排的的枢轴元素,来让进入下次递归调用的两部分长度类似。在这种基础上再分析一下其余排序算法的时间复杂度(最坏,最好的状况)。面试官就以为你数据结构的功底会很强。
针对的简单的排序算法要求会写代码,查找算法比较简单,最须要注意的是二分查找,这能够联系到树形结构,也就是二分查找树,在此基础上想到 AVL树(平衡二叉排序树)。由于 AVL树的的高度越低,查找的效率就越高。
数据结构的链表操做好好看看,引用与指针的区别等。
针对STL里的容器,本身若是看的话,看看其怎么实现就好了。好比 vector 的内存是怎么分配的,拿 inset()操做来讲,若是 vector 里边元素不满,那么直接插入,若是满了,就另申请一段空间(每每是之前的两倍),以后把以前内存的元素拷贝到新申请的内存空间里边,以后执行插入操做,最后把原来的内存空间析构掉。针对 deque 是怎样利用中央控制器 map 来实现一个内存连续的一个假象? stack 和 queue 是在 deque 的基础上实现的,只是调用了其底层的函数,关于关联式容器,若是投测试稍微看看就行,但若是找开发的职位,关联式容器是必需要看的,而且知道其实现底层红黑树,它是怎样的一种数据结构,怎么完成查找、插入、删除的操做。注意一下 hash-table , 由于在理想的状况下能作到在O(1)的时间内,实现查找、插入、删除操做,但须要注意的是怎么注意碰撞(也就是有冲突的状况),几种方法本身看一下——线性探测、二次探测、什么链式法。hash-set和hashmap,最少会使用。
操做系统:
知道一点进程通讯的方式有哪些、进程与线程的区别、线程优先级调用策略、页面置换策略就好了。
开放性问题(HR)
您是如何考虑解决在以往工做中遇到的具备挑战性的难题的?请列举一项难题,说明当时的背景、您的具体行动和最后的结果?
准备一到两个合适的问题问面试官(每每是技术面)。最好是问关注技术层面的东西。
这篇文章只是写给实验室找测试开发职位的几个小伙伴儿,但我自己是后台开发职位,针对于后台开发职位须要掌握的知识要比以上多的多,对于一些细节的把握以及只是线条的理解要深入,而且本身要会运用。
技巧就是本身准备几条知识线,一旦问到这个知识线上的任何一个地方,均可以和面试官扯很久的那种,这样面试官问的问题就少了,本身暴露的问题就少了。