大厂虐我千百遍 我待大厂如初见
每一次去大厂面试都被虐地很惨,但收获还是很多的,分享出来,希望对你们很有帮助!!!
笔试
电话铃声响起,拿起电话,简单问了下有木有时间,然后说加微信沟通,简单问了下业务,然后出了一道笔试题,笔试题很有特色,只有一张图片,如下:
简单介绍下题目吧:就是用三个线程打印出图片中的效果,(注:C++没有协程,python/go有,面的是C++,所以用c++实现的);要求:25分钟运行出来并给出源码
下面是我的代码,用了C++11的特性,供大家参考:
#include <iostream> #include <thread> #include <condition_variable> std::mutex mtx; std::condition_variable cv; int ready = 0; static int point_num = 1; void PrintString_1() { std::unique_lock<std::mutex> lk(mtx); int cnt = 0; while(cnt<10) { while(ready != 0) cv.wait(lk); std::cout<<"1"; ready = 1; cnt++; cv.notify_all(); } } void PrintString_2() { std::unique_lock<std::mutex> lk(mtx); int cnt = 0; while(cnt<10) { while(ready != 1) cv.wait(lk); std::cout<<"2"; ready = 2; cnt++; cv.notify_all(); } } void PrintString_3() { std::unique_lock<std::mutex> lk(mtx); int cnt = 0; while(cnt<10) { while(ready != 2) cv.wait(lk); std::cout<<"1"; for(int i=0;i<point_num;i++) { std::cout<<"."; } ready = 0; cnt++; point_num++; cv.notify_all(); } } int main() { std::thread t1(PrintString_1); std::thread t2(PrintString_2); std::thread t3(PrintString_3); t1.join(); t2.join(); t3.join(); std::cout<<std::endl; return 0; }
编译:g++ -o thread thread.cpp -lpthread -std=c++11,运行结果跟图片中类似
总结
这类题也比较常见,主要考擦对线程同步的条件变量和互斥量这种架构的理解;其实,线程池也是用的这种架构。
电话面试
笔试源码发给了面试官,大约10分钟之后才开始电话面试,以为笔试就凉了,这么长时间都没回复,电话面试长达62分钟,问了超级多...,各种方便都问了
C++基础知识
1、面试题用到C++11的特性,说下c++11的特性吧?
2、提到了数量不定的模板参数,说说怎么实现的?
3、说下左值和右值
4、说下构造函数
5、问了const和static
6、有哪些智能指针?怎么实现的?
7、类型转换有哪些?
...
还有很多就不一一列举了
进程和线程
1、mmap是啥?
2、IPC有哪些?
3、线程同步?
...
网络编程
1、说下TCP的三次握手和四次挥手
2、怎么查看某个端口被监听了(PS:不知道脑袋抽筋了说用PS,面试嗯?,马上发现不对,是netstat)
3、TIME_WAIT状态?大量TIME_WAIT的原因?
4、怎么实现一个长连接的TCP服务器?
5、GET和POST的区别?
5、curl访问一个http服务器,都经过了什么?
6、select和epoll的区别
7、epoll的触发模式
...
Redis
1、说下常见的数据类型
2、说下哨兵模式
3、分布式锁
...
Kafka
1、怎么进行分区的?
...
Mysql
1、delete、drop、truncate的区别?
...
总结
经过了长达62分钟的电话面试,还是凉凉了,怎么知道凉凉?因为最后结束的时候,面试官没有说:接下来的流程,下一轮面试或者通知HR。就知道凉了,如果通过了,流程就会往下走,什么回去等结果?99%都是没戏。举个例子,去相亲,看中对方了,你会说:你回去等通知吧?我考虑下我们合不合适? 相中的话,恨不得裤子都脱了,还等个屁!!!
凉凉的主要两点原因:1、基础关键点没回答上来 2、有些回答的不全面,面试官总是想听到更多答案
大量TIME_WAIT