一面:一个小时50分钟。电话面
1、先给40分钟手撕代码,两题。
(1)字符串排序,数字 > 小写字母 > 大写字母
(2)二叉树中序遍历
2、map和unordered_map的区别,查找的事件复杂度
3、智能指针详细介绍。
4、std::move()函数讲一下,用处。除了了用在智能指针,还有用在其他地方吗?这里不太清楚。
5、拷贝构造函数介绍。什么是默认拷贝构造函数?深拷贝,浅拷贝介绍。默认拷贝构造函数是深还是浅?怎么禁用拷贝构造函数?
6、介绍static关键字。
7、函数形参用 const & 来修饰,有什么好处?const禁止修改,引用不进行值复制,减少复制,提高效率。引用传递,str不能被修改,而且也不会调用拷贝构造函数。
8、讲一下红黑树特性。相比于平衡二叉树的优势。红黑树维护平衡的开销复杂度是多少?最多转多少次?这个不会。
9、讲一下哈希表的结构。哈希冲突解决方法。怎么减少哈希冲突?增大数组长度,选取合适的哈希函数
10、对多进程,多线程的理解。
一个服务端程序:一个进程有10个线程;10个进程分别单线程。讲讲二者的各自优点。10个进程分别单线程的优点不太会,他让我从可靠性和拓展性方面考虑
11、讲一下线程池。设置线程池有多少个线程,从哪些方面考虑?CPU个数;并发请求的数量。
12、自旋锁和互斥锁
13、乐观锁和悲观锁
14、linux指令:如何监听进程占用的内存top,ps;查看磁盘的命令du,df,这两个分别要看什么?看端口号被占用用哪个?netstat
15、radis和mysql的不同。
16、数据库事务。acid,隔离级别,各自的问题。mysql中怎么具体开启一个事务,提交事务的具体语句。
17、索引的优缺点。
18、简单介绍你的一个项目。
19、两道智力题:
(1)两根一样的木头,烧完1小时,怎么选出一段15分钟的时间。
(2)一次朋友聚会,一群人两两握手,不重复,共握手55次,问有多少个人。
一面感觉还挺好的。
二面:70分钟
1、自我介绍。
你的研究方向偏安全,为什么报腾讯广告的后台开发?
最近做的那个项目介绍。
2、C++熟悉程度给自己打几分?
3、智能指针,share_ptr和unique_ptr的区别?
unique_ptr的独占式怎么实现?让你来实现你怎么做?
回答加互斥锁,不对。给指针类加一个static对象,不对。单例模式,不对。
4、share_ptr引用计数有没有什么问题?循环引用
怎么解决这个问题?用weak_ptr。
如果share_ptr和weak_ptr指向同一个对象,在share_ptr的引用计数变为0时对象被析构了,weak_ptr指向了一个未定义区域,此时怎么处理?不太会
5、share_ptr做函数形参,引用计数会增加吗?传值会增加
6、函数内定义了一个share_ptr对象,但是函数内抛出异常了没有回来继续执行,会造成内存泄漏吗?怎么处理?不太会
7、std::move()的作用。说了之后就问为什么要用右值引用?为什么要把左值引用转成右值引用,有什么好处?是不是一定能带来这个好处?寄存器存不下一个大字符串,此时右值引用还有作用吗?
8、多线程怎么同步?互斥量和信号量的区别?
n个线程同时读,需要进行同步保证线程安全吗?一个线程写,多个线程读,需要确保线程信息安全吗?
加了写锁,所有读线程等待是吗?对。拿有没有办法去优化这种情况?
回答减小封锁粒度,类似数据库表的行锁和表锁。
粒度再小,总归还是要等待的,怎么优化? 对数据保留副本,上锁了的话,就在副本写入,然后等两个事务完成的时候进行合并。
合并的时候还是要加锁要等待,怎么优化?在并发量小的时候比如深夜进行合并。
还有没有其他的优化方法?在他的引导下,最后回答:
(1)给数据A弄一个备份B,读线程读原来的A,写线程写备份B
(2)所有写线程结束了之后,读线程读B。此时将B复制到A来更新A。
(3)等B更新完了,读线程又来读A,写线程写B
9、项目设计题:
微博用户有自己的信息,有自己的历史微博,用户间有关注关系。设计一个关系型数据库表,怎么设计?说了一下自己的设计。
每个用户进入微博首页,要显示他关注的所有用户的最近100条微博,怎么做?怎么优化?每个用户维护一个堆数据结构,保存他关注的用户发的微博。5亿个用户,其他参数自己假设,估算内存开销?大概需要5000G内存。假设采用500服务器,用户ID来了怎么去查?需要一个分配流量的服务器进行负载均衡。
用户发了一个新微博,要更新关注了他的人对应的堆,你这样子做在你设计的数据库表里查数据开销大,怎么优化?
如果有大V,关注他的人特别多,这样子维护堆开销大,怎么优化?
下午面完,晚上看官网状态变灰了
诡异的现象:
一面过了后,我在腾讯官网的状态一直是初试,今天二面挂了变灰了之后还是灰色的“初试”二字;
前天因为出差,给腾讯打了一个电话说我当天在出差希望二面推迟,那边hr说,在系统里查不到我预约了二面,系统里流程还在一面面试官那里,说帮我问一下一面面试官;
一面二面都是电话面,没有用腾讯或者牛客的视频功能,一面那40分钟代码题是在一个叫collabedit的网站做的,写代码那40分钟,面试官还挂电话了,让我在系统写好了在系统里艾特他。
全部评论
(0) 回帖