腾讯客户端开发(投的后端开发。。)记录
一面(3.9)
- 讲讲了解到c++11新特性。
- std::string缺陷(不了解)。
- 智能指针与原生指针开销一样吗?(答智能指针是一个类,有默认的拷贝、构造函数等,shared_ptr还多了一个引用计数),说这是基于类层面的,让我基于对象回答。不是很了解再次询问,说单看10000个智能指针和原生指针开销一样吗?有点懵了说一样。
- 浮点数存储方式。
- MD5,Base64。
- http1.0/1 2 3做了哪些优化。
- utf8 utf16区别(不知道), c++用的哪个。
- cookie。
- 服务器项目实现了哪些功能,get\post两者语义上有啥区别,如何保证安全性。你的服务器如何保证安全(答参考https)。
- https如何保证安全(tsl握手),追问如何握手(凭记忆瞎掰了一下。)。
- sql注入,危害, 如何解决。
- 市面上出现了很多信息泄露的安全问题如何解决(好像是这个意思)。不知道。
- \r 和 \n有什么区别。
- 讲讲虚函数如何实现动态分发?每个类都有虚函数表吗?
- 关注现代c++吗?哪些?一开始就学的c++11吗?平时怎么学习?如何积累技术实力?突然有了灵感会怎么做?除了博客?
- 算法:
- 点分十进制转无符号整型。没发现面试官留的坑(样例给了192.0.0.1 127.0.0.1,但是输出相近,证明输入是逆须的。。虽然题面是正序的,没发现,后面经提示才写出)。
- 小q第一天可以挖11个比特币,后面每天减少一个。但是可以选择当天不挖休息,第二天就又能挖11个。问N天最多挖多少个。(状态转移方程没推出来,干巴巴的想了半天)。
- 腾讯的面试确实和网上说的一样很让人舒适,即使是我这个菜鸡,代码没写出来也没嘲讽我哈哈哈,不过就是有点寄了,估计没得二面了哈哈。
二面(3.16)
没想到代码没撕出来也进了二面,二面全程只问项目,被杀爆了。
主要针对我的两个项目来问,一个是cs144,一个是烂大街的webserver。
- 问了一些项目相关的东西,然后问我底层数据会经过多少次拷贝,如何证明拷贝多少次是正确的。因为项目是自带性能测试的,说用的都是别人现成的工具,问我自己如何去定位。后面又说咋优化,我就说了下用gprof打印函数损耗。
- 后面又问了第二个烂大街的项目的线程池的东西,问线程在请求到来之前在做什么,回不做什么,阻塞。我一直没理解他的意思,他问我pthread_create的函数指针传的什么,如何把c++的类啥的传给这样一个c风格的指针。我说参数是函数指针,要传一个函数啥啥的,其实我一直没理解他的意思,而且我确实这部分看的不够细致。其实面试官想问的就是这个函数接受的实参是什么,就这个问题说了好久,中途我理解的越跑越偏,后面面试官就说你创建线程的时候传的什么参数,恰好我每次看这里都没注意,总是看大致的流程,实际并没有完全理解线程池的运作方式。其实就是写了一个静态函数,让每一个线程创建时传入这个静态函数,和this,这个静态函数去调用run函数,每个线程都死循环争抢🔒,面试管想问的就是这个地方,一个很简单的东西但是我不知道,面试官后面直接叫我打开代码看人家怎么实现的,说为啥你答不出来就几行代码,因为你没有自己实地写过,只是看了别人的开源项目感觉懂了,u1s1确实。后面接着又问了项目其他的,让定位代码某一行,后面又不让看代码了。还问了我为啥要修改人家的定时器,作用啥的,但是只是提了一下。中途问如何唤醒,我跟他说了信号量的机制,面试官说你觉得我不知道这个吗哈哈。
- 面了一个小时多点,总的感觉面试官水平很高,问的比较细节,每次像敷衍过去都被逮住哈哈,而且全程语气都很好,没有凶人,可能文字打出来有点凶。只能说确实如他所说,没有摸透,还是得自己写写才行。