小米C++面经

℡╲_俬逩灬. 提交于 2019-12-02 00:32:13

1、include " " 和<> 区别

include< file >编译程序会标准函数库中找文件

include”file” 编译程序会当前目录中找文件

include语句一般用来包含标准头文件(例如stdio.h或stdlib.h),因为这些头文件极少被修改,并且它们总是存放在编译程序的标准包含文件目录下。#include“file”语句一般用来包含非标准头文件,因为这些头文件一般存放在当前目录下,你可以经常修改它们,并且要求编译程序总是使用这些头文件的最新版本。

https://blog.csdn.net/weixin_36571185/article/details/78240931

2、static,static局部变量?生命周期?static关键字(全局,局部,成员变量,成员函数)

3、extern  externC

4、inline

5、堆和 栈区别

6、new malloc 区别

7、进程线程区别

8、进程间通信

9、一道手撕算法题  平衡数

好像是一个整数   前半部分的数字相加和后半部分的数字相加 是与一样的 比如 1 2 2 1  这种

10、析构函数为什么要用virtual修饰?

11、多态 说了静态多态和动态多态,虚函数表和虚函数指针)

12、谈一下智能指针?

13、不想让别的对象访问本类,应该怎么做?然后自己怎么访问的?(答:将构造函数设置成private,然后将定义一个static 函数用来访问私有的构造函数)

14、基类、派生类调用构造函数、析构函数的顺序,以及一些访问权限问题。

15、熟悉的数据结构吗?然后写一个二叉树的后序遍历,递归,非递归。

16、给一个数组,输出最长的连续数字子串。(一直优化)

17、协程了解过么?

 协程是更轻量级的线程。用于解决线程间切换和进程间切换的通病(对内核开销过大),协程各个状态(阻塞、运行)的切换是由程序控制,而不是内核控制,减少了开销。

功能特点:通过应用层程序,记录上下文栈区,实现在程序执行过程中的跳跃执行。由此可以选择不阻塞的部分执行提升运行效率。

18、写代码,链表的插入与删除的题目

https://www.nowcoder.com/discuss/256913?type=post&order=time&pos=&page=1

19、Cpp和C区别,各自的特点

20、C可以做应用程序吗(菜鸡竟然回答的不知道。。。答案是肯定的。。。)

21、知道回调函数吗

22、单例模式有用到过吗

23、C 中为什么要加STL,它的特点,优点

24、经常用到的字符串的函数,标准的

25、你知道可重入函数吗,怎么实现的可重入,你知道static关键字吗,它和可重入有什么关系

26、volotile关键字你知道吗

27、结构体大小计算你知道吗

28、项目中有用到过多线程吗,多线程是自己写的吗,多线程相关的调用接口有哪些

29、定义一个数组A[10],不允许定义其他变量,通过指针方式取出第一个元素(感觉有坑,应该是想问数组名和指针的区别?)

30、二级指针有了解过吗,二级指针存储的内容

31、讲一讲常见的数据结构

32、队列有用到吗(对vector比较熟,,,那你讲一下吧)

33、你上学的过程中有学到数据结构这门课吗?知道图吗?

34、说一下单链表反转的思路

35、树的遍历方式有那些

36、怎么计算二叉树的深度

37、操作系统有学过吗,你知道生产者消费者模型吗?

38、你知道TCB吗?

39、说一下死锁,怎么避免死锁(不知道。。。)

40、你知道同步互斥吗

41、进程间通信了解吗

42、给你出一个编程题,算阶乘

43、驱动代码你有了解过是吗(没有!)

44、你有没有觉得计算机相关的书籍里哪些比较重要,有看过哪些书说一下

45、Python用过哪些比较多的模块/包

46、讲一下python里面的字典

47、期望工作地点

48、说一下同步异步

49、多线程怎么保证数据安全,除了加锁还知道那些

50、项目遇到困难怎么解决

51、Linux用户态内核态有了解过吗

52、对小米的了解

53、C++特性

54、有几种锁

55、操作系统堆和栈什么区别

56、排序算法知道哪些,介绍一下 时间复杂度

57、为什么要加锁

58、C++,多线程

https://www.nowcoder.com/discuss/244500?type=post&order=time&pos=&page=1

59、进程通信,线程同步(说了同步和通信方式后说了生产者消费者)

60、哈夫曼压缩(举了一个例子)

61、介绍二叉树(讲了二叉树,AVL树)

62、Linux的gcc(四个过程以及每一步的指令)

63、QT的信号槽(connect函数)

64、为什么有malloc还要有new(往它们的区别上答)

65、单例模式

66、三次握手和四次分手

67、栈逆序递归

68、手撕循环队列

69、linux检测内存使用情况;

70、linux查看系统的常用命令

71、socket服务端建立过程

72、红黑树插入、红黑树的用途(红黑树没怎么看,旋转那一块没答上来);

73、两道编程:二叉树镜像、集合的所有子集;

74、堆排

75、统计逆序对个数

剑指offer上利用归并的思想将原序列分成前后两个序列,分别统计两个序列中的逆序对个数,再统计两个序列中的逆序对个数,然后再合并继续的思路;我把思想说了之后面试官就让我手写代码,写好之后他看下了应该是对的。

76、STL中的空间配置器,问了为什么自由链表中的是8byte的倍数?

    • 问了那个刚开始那道题: 如何在一个队列中记录当前队列的最大值,这个跟那个栈的最小值有点相识,不过这个难一些,我用那个栈的思想说下我的解决思路,然后面试说你确定嚒?我说我看下,然后自己发现了问题,就把自己发现的问题跟面试官讲了下,然后讲了我那个解决方法的思想就是那个栈的最小值演变而来的;之后面试官提示我pop、push、getmax这三个方法都是O(n*lg(n))的时间复杂度,我说用堆嚒?他说堆插入的时间复杂度比较长,我思考了下说做不出来。
    • 最后问了那个逆序对个数的时间复杂度,让我手推公式,我也没推出来,然后面试官在我面前手推了一把

 

 

 

 

 

https://www.nowcoder.com/discuss/52218?type=post&order=time&pos=&page=2

https://www.nowcoder.com/discuss/52132?type=post&order=time&pos=&page=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!