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, 来管理被访问的数据结构 , 这样只需 要一个锁 )  

 



  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言的数据结构面经主要包括C语言基础、操作系统、计算机网络、数据结构与算法、设计模式等内容。 在C语言的面经中,C++的增强特性也是常见的一部分,比如引用、类与对象、模板、智能指针等,还有STL模板库等。这些特性使得C++的使用更加便捷和安全。 此外,C++11引入了一些新特性,比如std::enable_if和SFINAE。SFINAE是Substitution failure is not an error的缩写,意思是匹配失败不是错误。简单来说,当调用模板函数时,编译器会根据传入参数推导最合适的模板函数,在这个推导过程中,如果某些模板函数的推导结果是编译无法通过的,只要有一个可以正确推导出来的模板函数,那些推导结果可能引发编译错误的模板函数并不会导致整个编译错误。 在面试中,还会涉及到指向数据成员的指针。C++中可以使用指向类成员函数的指针来调用函数,也可以使用指向类数据成员的指针来访问数据成员。 多线程也是面试中常见的一个话题,关于多线程的问题,需要考虑线程安全性。在C++中,需要采取一些措施来保证线程安全,比如使用互斥锁、条件变量等。 综上所述,C语言的数据结构面经主要围绕C语言基础、操作系统、计算机网络、数据结构与算法、设计模式等内容展开,并且会涉及到C++的一些增强特性,以及指向数据成员的指针和多线程的相关知识。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++开发工程师面经总结](https://blog.csdn.net/Arcofcosmos/article/details/127156504)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [2020秋招_C++基础、数据结构基础面经记录](https://blog.csdn.net/XindaBlack/article/details/107120742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值