c++方向17年面经


首先感谢下牛客上之前帮助过我的学长学姐,我也为下一届提供一点经验
面过挺多互联网公司,最后拿到百度,头条,乐视, 当当  
本科学的硬件,研究生学了一年软件知识,C/C++方向,主要学习内容牛客上有很多帖子, 我不用重复了,   我当时也是翻过大多数面经贴,帮助了我很多

我一般挂在笔试   ,或者最后一轮技术面
我只是上点面试干货(有些公司面试给忘了):

乐视一面   :

1. C++ 看过哪些书

2. 找到倒数第二个节点

3. 一个指针指向的内容经常变化 , 如何防止编译器去优化它

4. Static 的作用

答:1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)

       static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏.

2.static的第二个作用是保持变量内容的持久。(static变量中的记忆功能和全局生存期)

3.static的第三个作用是默认初始化为0(static变量)

4.static的第四个作用:C++中的类成员声明static(有些地方与以上作用重叠)

在类中声明static变量或者函数时,初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员,这样就出现以下作用:

(1)类的静态成员函数属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。      

(2)不能将静态成员函数定义为虚函数。      

(3)由于静态成员声明于类中,操作于其外,所以对其取地址操作,就多少有些特殊 ,变量地址是指向其数据类型的指针 ,函数地址类型是一个“nonmember函数指针”。

(4)由于静态成员函数没有this指针,所以就差不多等同于nonmember函数,结果就 产生了一个意想不到的好处:成为一个callback函数,使得我们得以将C++和C-based X W indow系统结合,同时也成功的应用于线程函数身上。 (这条没遇见过)  

(5)static并没有增加程序的时空开销,相反她还缩短了子类对父类静态成员的访问 时间,节省了子类的内存空间。      

(6)静态数据成员在<定义或说明>时前面加关键字static。      

(7)静态数据成员是静态存储的,所以必须对它进行初始化 (程序员手动初始化,否则编译时一般不会报错,但是在Link时会报错误)     

(8)静态成员初始化与一般数据成员初始化不同:

初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆;
初始化时不加该成员的访问权限控制符private,public等;        
初始化时使用作用域运算符来标明它所属类;
           所以我们得出静态数据成员初始化的格式:
<数据类型><类名>::<静态数据成员名>=<值>

(9)为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响。这里有一点需要注意:我们说静态成员为父类和子类共享,但我们有重复定义了静态成员,这会不会引起错误呢?不会,我们的编译器采用了一种绝妙的手法:name-mangling 用以生成唯一的标志


乐视二面 :                                                                       

1. 服务器 A  10 个文件 , 在服务器 B 写一个脚本 , 传输这 10 个文件 , 并合并到一个文   件上

2. 项目相关

 

一点资讯一面 :

1. 写一个字符串转浮点型 .

2. 项目相关 .

一点资讯二面 (  ):

1. 线程和进程的区别以及理解 , 哪一个更好写 , 哪一个通信成本更低

2. 中序非递归遍历二叉树写代码 , 后序非递归遍历二叉树 , 的两个栈的实现

3. select 的描述符一次使用之后 , 下一次还会继续在描述符集里面吗 .

4. epoll 的两种触发方式 , 以及哪一种效率更高 ,

5. accept 的非阻塞返回链接的套接字 , 怎么知道此套接字准备好了 .

6. 项目相关

 

百度一面 :

1. 求序列的最大乘积子序列

2. 有大量的 URL 去重 ( 布隆过滤器 )

3. 写一个不能被继承的类

百度二面 :

1. 说一下这个项目干了什么事 ...

2. 网络分几层 , 每层存在的意义 , 为什么需要这一层 , 不要它会出现什么问题

3. 多线程和多进程的区别

4. TCP 三次握手 ( 如果两次怎么办 ), 四次挥手

5. 服务器重启的时候可能启动不了 , 是为什么 ( 考点 : 此时 fd 正在和客户释放链接 ,  于关闭的套接字 2 分钟内不能使用 , 存在启动不了的问题 , 解决办法 , 设置一个 socket 选项 / 具体忘了 )

6. 网络编程的客户端和服务器的套接字结构 . 以及 accept() 返回的什么 , 以及如何使 服务器并发处理数据 ( 多线程 , 多进程 ,epoll/select)

7. Epoll/select 的区别

8. fork 的返回值是什么

9. 数据库了解吗 ,mysql 引擎 ,redis 的操作

10. 会哪些数据结构 , 我说得栈 , 队列 ,  ,  , 哈希表 , 跳跃表 .

11. 栈和队列的区别

12. 平衡二叉树是什么 , 它的查找复杂是多少 , 怎么插入 , 旋转以及平衡二叉树和跳跃 表相比的优劣 ,

13. 跳跃表的实现原理

14. 解决哈希冲突的办法

15. 解释一下多态 , 并写一个多态的例子 , 说明在一个类中的默认函数有哪些 , 以及复制构造函数和赋值函数 operate=() 的区别 , 以及什么时候用到 .

A a(b)  A a=b 都是复制构造函数 /A a=b 是用 operate=

16. 平时如何学习一个新技术

百度三面

1. 写一个 char* strcpy(char *s,int n) 函数 ,[ 考点 : 注意判断有效输入和 malloc 返回空 ]

2. 用数据说明 ,python 路由任务有什么优势

3. 论文中用到了什么算法 , 迪加斯科单源最短路径 , 详细讲讲此算法的核心思想

4. 在文件中每行都有时间戳 , 计算每秒输入了多少行 ( 当时说了 python 字典的方法和 grep ..|wc -l)

5. 讲一下项目中的服务器的后台架构 , 负载均衡使用的什么 (nginx), 以及我负责的模 

6. 项目中最有成就的一件事

7. 平时喜欢干啥 , 能来实习吗 , 巴拉巴拉巴拉

 

美团一面 :

1. linux  TOP 命令

2. 改变文件权限的命令 chmod, 以及 chmod 755 代表的意义

3.   写一个小程序   ,   输入一个奇数   ,     5,   输出一个菱形矩阵如   :
                                                *

           ***

          *****

           ***

            *

4. 一个村子 , 生孩子 , 直到生一个女孩才停止 , 问生出的男女比例

5. 进程和线程的区别

6. 进程间通信方式 , 以及它们什么时候使用

7. 线程的几种状态 , 以及画一个状态转换图 ,

8. linux 中如何打开一个文件 , 如何处理一个正在动态增长的文件

9. 造成死锁的条件 , 以及如何解决死锁问题

10. TCP3 次握手 , 为什么是 3  , 哪些协议简历在 TCP 上的

11. TCP 协议如何进行拥塞控制

12. inode  block

13. 找到数组第一个出现一次的值 ( 剑指 offer)

 

美团二面 :

1. 项目架构以及项目设计 , 是否有可以改进的地方

美团三面(卒):

                   1. 十进制 IP 地址转整形

                   2.   智力题
      3.设计一个拍卖系统服务器

华为一面 :

1. 软件路由器的程序架构

2. C/C++ 基础知识 , 如构造函数不能是虚函数 ,sendmes  postmes 分别是阻塞和非阻  ,

3.   实习项目后台服务器架构


华为二面(应该是在备胎池):
    1.写一下中序遍历
    2.指针数组,数组指针,函数指针等一系列指针问题

今日头条一面   :

1. 一个 python 相关的程序问输出 :

def fun(a=[]):
    a.append(1)
    print a

if __name__ == '__main__':
    fun([])
    fun([])
    fun([])
    fun()
    fun()
    fun()

2. 写一个程序 , 有两个有序数组 A,B, 找到第 k 大的数 ( 最后想到复杂度 lgn 的算法 )

3. 熟悉数据库吗 , 回答只是会用 , 以及知道 redis 的底层数据结构

4. 爬虫使用到什么程度 ( 只会抓取静态网页 ....)

今日头条二面 :

1. 说一下实习项目 , 巴拉巴拉巴拉

2. 写一个程序 , 给定一个数组 , 有正数负数 , 找到 X+Y+Z=0 的这样的组合 , 一个就 OK(  到了复杂度 O(n^2)+ 辅助空间 O(n)  , 以及复杂度 O(n^2*lgn)  ), 然后手写                      O(n^2*lgn) 的算法

今日头条三面 :

1. 写一个程序 , 找到一个数组中所有数的最靠近它的第一个大于它的数 ,  2,9,3,5,2 输出 0,9,9,5( 提示了很久 , 很久 , 很久才想到 O(n) 的方法 )

2. 设计一个系统 , 一个下拉动作可以拉出所关心的最近的 10 条信息 .( 核心是为每个 用户创建一个链表存储数据 )

3.  1 亿个被关注的主题 , 并发量 1000,5 亿用户接收 , 会存在什么问题 .( 如果对每个 用户的数据存储结构上锁 , 会有 5 亿个锁 , 太浪费资源 , 而并发量只有 1000, 所以 只用维护一个数据结构 , 如数组 , 长度 1000, 来管理被访问的数据结构 , 这样只需 要一个锁 )  

 




你可能感兴趣的:(互联网面试)