一面:
自我介绍,项目介绍,
项目职责,
linux基本命令,
嵌入式开发,
多态的实现,
容器介绍,
数据结构,
手写代码,使用指针逆转字符串
对技术支持的理解,
指针和引用的区别,
指针与数组的区别,
static,
sizeof和strlen区别,
对出差的理解,
工作地点等等,
有什么想问的。
二面:
自我介绍,
项目介绍,
多态在项目中的作用,
static,
手写代码,使用指针在字符串A中查找B
2.C++11新特性有哪些?
3.智能指针怎么用?智能指针出现循环引用怎么解决?
4.avl树和红黑树区别?
5.三种多路复用io的区别?
6.MySQL数据库的事务ACID,隔离级别?
7.多进程和多线程同步机制?
8.TCP拥塞控制?
9.会哪些设计模式?工厂模式和简单工厂方法有什么区别?
10.手写代码:文本中查找给定的单词,返回单词出现的次数。
二面:
1.项目中用到了哪些技术?
2.TCP可靠性怎么保证的?TCP的滑动窗口影响了什么性能?TCP的粘包怎么解决?TCP为什么要有time_wait状态?
3.智能指针怎么用?
4.static的作用?
5.inline的作用?
6.C++空类有哪些成员函数?参考effective C++,一共四个。
7.进程间通信方式?
8.A,B两个进程如何实现只有一个进程运行,另一个进程退出?
9.两个线程,一个线程打印A,一个线程打印B,如何实现两个线程按顺序打印出ABABAB…?
面试官:手写定义一个空类。
我:默认构造函数,拷贝构造函数,赋值运算符,析构函数(手写。。赋值运算符忘了写返回值,尴尬。。)
面试官:还有吗?
我:没了
面试官:拷贝构造函数的参数(const A&),const可以省略吗?
我:最好不要省略吧,毕竟只是拷贝,不用改动。。
面试官:你见过哪种情况省略的?提示你,标准库里面的,。
我:。。。。。
面试官:&可以省略吗?
我:不可以,因为会不断调用拷贝构造函数巴拉巴拉。。。。。
面试官:A a;A b = a; A c,c = a;分别调用什么函数?
我:默认构造函数,拷贝构造函数,赋值符。。
面试官:A *p = new A 和 A a;有啥区别?
我:(刚开始没反应过来,说了一个是指针一个是直接声明一个对象,后来小哥提醒后)第一个在堆开辟内存,一个在栈上。new的话先开辟空间后调用构造函数。
面试官:p在哪?
我:栈,然后指向堆上的一块内存。
面试官:说说堆和栈吧。。
我:堆手动,栈自动吧啦吧啦吧啦。。。。
面试官:那你画一下堆和栈在内存中的样子?
我:(方)我只知道堆朝着地址增长的方向生长,栈朝着地址减小的方向增长,不怎么会画。。。。
面试官:栈上为什么是系统自动进行内存分配和释放呢??
我:(方)。。。。。(后来想想是不是想让我说栈的地址存在寄存器中,各种压栈出栈指令都是机器指令???)
面试官:一个源程序到可执行文件的过程:
我:预处理,编译,优化,汇编,连接,
面试官:预处理做些什么
我:三种吧啦吧啦吧啦。。。。
面试官:预处理头文件的时候做了些什么事?
我:(回答比较模糊,就说了把头文件包含进代码中。。。)
面试官:编译生成什么?
我:.s文件(尴尬,没说汇编代码)
面试官:链接做了什么?
我:(又是一顿模糊回答)。
剩下的都是网络的问题,我直说还没复习网络,小哥让画了网络模型,然后举例应用层协议。tcp与udp区别,拥塞控制,浏览器中输入网址发生了什么?基本只答出了皮毛。
最后,小哥让写了简答的一个代码,统计一个句子中有哪些不同的单词。刚开始用了map<string,int>,后来小哥让优化,说不用统计次数的,我说直接set好了。
一面:
语言基础:
1.delete是如何知道要释放的内存的大小的。
2.try和catch用的多吗?
3.说以一下STL。
blabla……各自的扩容方式说一下(就讲了讲vector和hash_map的)
4.c++11了解多少。
blabla……大概说了6-7条吧。然后又问到atomic。
网络部分:
1.粘包如何解决?
2.针对TCP三次握手的缺点可能有什么危害?
blabla……我说了SYN攻击,半连接队列…
Linux:
1.编译器除了gcc,g++还了解什么?
2.编译选项常用的说说。
3.coredump用过没?
4.gbd如何解决多线程死锁问题。(不会)
项目简单介绍一下。
你还有什么比较擅长的讲一些。
一面问了很多多线程的知识,这方面有待加强。