1.Base类有test方法,Base的不同对象调用test方法,内部是怎样的呢?(我答的指向同一个预先分配好的地方)

2.有一个AnotherBase类(与Base无关系)里面也有一个test方法,用其强制转换Base的对象,再调用这个对象的test方法,请问调用的是哪个类的方法?
3.在方法func()后面加const意味着什么?
4.给一个六面骰子,如何做出一个1~10的等概率随机方法?
5.用过什么设计模式?

  • C 和 C++ 的区别
  • new 和 malloc的区别
  • 对虚函数的理解
  • 多线程的理解(多线程同步的途径)
  • 多进程(继承什么, 不继承什么)
  • 进程间通信
  • gdb的使用, 编译器的使用
  • MySQL 查询前 100 条数据, 以及如何分组
  • 常见的Linux的命令
  • TCP和UDP的区别
  • socket的流程
  • 五种IO模型
  • linux基本操作
    • 拷贝文件 、查看ip、vim的基本操作(查找字符串、替换字符串)、gdb的调试;
    • 查看硬盘大小等等操作
    • 总结需要详细的看看linux的基本操作命令等(这部分很尴尬都不会)
  • STL
    • vector与list的区别
      • 怎么查找倒数第二位数字;
      • 二者的区别;
    • map怎么插入数据 有几种方式
      • 每种方式的优缺点;
  • 多线程多进程
    • 线程间同步的方式 :我答了 信号量、互斥量;问我还有没有 我说我记得就这几个了
    • 然后问我进程间同步的方式 答了一个临界区 ;忘了信号量和互斥量和事件了;
    • 然后我自己抢答了 进程间通信的方式:说了之后然后问我几个问题
      • 怎么创建管道 pipe()
      • 怎么创建共享内存shmget();
        1.自我介绍
        2.用过linux系统吗,哪种linux系统,版本呢?
        3.linux基本命令。怎么查看IP;怎么给文件改名;怎么查看文件的权限;修改权限;怎么加执行权限;怎么查看当前系统的版本;怎么查看当前系统硬盘空间的总量与使用情况;怎么查看系统内存多少;怎么查看某个命令执行的时候需要链接哪些系统库;怎么给一个文件做一个软链接;说一下gdb;怎么把一个test.cpp编译成一个test.so;
        4.vector与list的区别
        5.怎么找某vector或者list的倒数第二个元素
        6.说一下map和set的区别
        7.红黑树的原理
        8.map怎么插入数据,有几种方式
        9.c++11在原来的版本上都加了哪些东西。
        10.智能指针,三种指针都介绍一下其特性,作用。
        11.进程怎么同步,线程怎么同步,要说全。
        12.tcp与udp的区别,udp怎么实现多对多通信,问的很细,包括tcp的各种机制。
        13.说一下快排
        14.QT的信号槽是什么原理。

        C++基础

        • 自我介绍
        • 平时有用C++写过项目吗?(这里没让我展开说项目)
        • 对C++的特性有什么了解
        • 对封装、继承、多态的具体理解
        • public/protected/private的区别
        • 说一下三种方式继承对基类的访问权限
        • 说说构造函数的执行顺序,析构函数呢
        • 说一下构造函数内部干了什么
        • 如何实现多态
        • 构造函数和析构函数可以调用虚函数吗,为什么
        • 析构函数一定要是虚函数吗,为什么
        • 怎么理解C++的面向对象和C的面向过程
        • 可以介绍一下new的实现原理吗
        • new和malloc的异同处
        • C++怎么为各种变量分配内存空间的
        • 引用了解吧,介绍一下
        • 拷贝构造函数内部做了什么,什么时候需要重写
        • 初始化列表了解吗(以为是那个C11特性,没敢说)
        • 平时用什么编程环境(Windows+MFC+Qt)
        • 用过Qt是吧,说一下信号和槽的机制,绑定的方式
        • 你觉得MFC和QT比各自有什么优缺点
        • MFC的消息机制和Qt消息机制的对比

        进程线程相关

        • 了解过线程吗,谈一下进程和线程的联系和区别吧
        • 对于共享的区域多个进程或线程一起访问会不会出问题,要怎么解决(同步和互斥)
        • 进程通信有哪几种方式,介绍一下

        网络(项目里有)

        • Socket的流程是什么样的(服务端和客户端两个)
        • 项目里用的什么协议(TCP)
        • TCP和UDP的区别,优缺点

        数据库

        • 你这项目的数据库自己设计的吗,简单介绍一下你的设计流程
        • 了解数据库范式吗,介绍一下
        • 用过索引是吧,说一下索引的优缺点,选取条件
        • 数据库里多对多关系怎么处理设计

        数据结构

        • 说说vector和list的不同,优缺点
        • 平衡二叉树了解吗,说说它的特点,时间复杂度(logN)
        • 说说二叉树的三种遍历(想让我写来着,没带纸笔,口述了算法思想和区别,递归和非递归)
        • 图了解吗,说一说它的遍历(广度和深度)

        回到C++

        • 说说宏定义和const的区别
        • 宏定义和内联函数的区别
        • 内联函数的作用,和普通函数有什么区别
        • C++有几种转换方法,简单介绍一下
        • 重载是什么,和重写有什么区别

1.自我介绍
2.讲一下C new和malloc的区别

3.malloc内存分配机制是怎么样的,在哪里分配内存,最大可以申请多大的内存(三连击😂)

4.讲一下new运算符的原理(底层使用了operator new(),最终调用了malloc),new运算符重载用过吗,怎么写重载函数,重载的定义

5.memset函数的作用,有哪些参数

6.linux系统应用程序的内存空间是怎么分配的(内核空间和进程空间),一般进程空间多大,内核空间多大,进程空间分布是什么样的,堆区最大空间是多少

7.c   模板机制了解吗,讲一下原理,类模板和函数模板在定义时有什么区别

8.开始问数据结构,你了解二叉树吗,讲一下原理,平衡二叉树的原理讲一下,二叉树的遍历方式,二叉树的最大节点数,二叉树插入删除的时间复杂度,二叉树插入的时间复杂度与树的节点数和树深度的关系,二叉树的优点(二叉树这部分问了10几分钟😂)

9.数组和链表的区别讲一下,它们的应用场景

10.c 继承机制讲一下,虚继承了解吗,说一下原理

11.虚函数机制,一个类有虚函数,有成员变量,求所占的内存大小(这里一开始我没有考虑内存对齐,就直接按虚指针和成员变量的大小说,后面面试官提醒了一下才改过来)

12.看到简历上写了网络编程这块,就问了一下tcp和udp的区别,它们的应用场景(面试官拿王者荣耀来举例子,问像王者荣耀这样的游戏,服务器与客户端通信应该用什么机制),怎么实现服务器高并发,多连接

13. socket编程,问了connect函数和accept函数的作用和参数,epoll的原理大概讲一下

一面:
自我介绍,项目介绍,
项目职责,
linux基本命令,
嵌入式开发,
多态的实现,
容器介绍,
数据结构,
手写代码,使用指针逆转字符串
对技术支持的理解,
指针和引用的区别,
指针与数组的区别,
static,
sizeof和strlen区别,
对出差的理解,
工作地点等等,
有什么想问的。

二面:
自我介绍,
项目介绍,
多态在项目中的作用,
static,
手写代码,使用指针在字符串A中查找B

 

 

2.C++11新特性有哪些?
3.智能指针怎么用?智能指针出现循环引用怎么解决?
4.avl树和红黑树区别?
5.三种多路复用io的区别?
6.MySQL数据库的事务ACID,隔离级别?
7.多进程和多线程同步机制?
8.TCP拥塞控制?
9.会哪些设计模式?工厂模式和简单工厂方法有什么区别?
10.手写代码:文本中查找给定的单词,返回单词出现的次数。
二面:
1.项目中用到了哪些技术?
2.TCP可靠性怎么保证的?TCP的滑动窗口影响了什么性能?TCP的粘包怎么解决?TCP为什么要有time_wait状态?
3.智能指针怎么用?
4.static的作用?
5.inline的作用?
6.C++空类有哪些成员函数?参考effective C++,一共四个。
7.进程间通信方式?
8.A,B两个进程如何实现只有一个进程运行,另一个进程退出?
9.两个线程,一个线程打印A,一个线程打印B,如何实现两个线程按顺序打印出ABABAB…?
面试官:手写定义一个空类。
我:默认构造函数,拷贝构造函数,赋值运算符,析构函数(手写。。赋值运算符忘了写返回值,尴尬。。)
面试官:还有吗?
我:没了
面试官:拷贝构造函数的参数(const A&),const可以省略吗?
我:最好不要省略吧,毕竟只是拷贝,不用改动。。
面试官:你见过哪种情况省略的?提示你,标准库里面的,。
我:。。。。。
面试官:&可以省略吗?
我:不可以,因为会不断调用拷贝构造函数巴拉巴拉。。。。。
面试官:A a;A  b = a; A c,c = a;分别调用什么函数?
我:默认构造函数,拷贝构造函数,赋值符。。
面试官:A *p = new A 和 A a;有啥区别?
我:(刚开始没反应过来,说了一个是指针一个是直接声明一个对象,后来小哥提醒后)第一个在堆开辟内存,一个在栈上。new的话先开辟空间后调用构造函数。
面试官:p在哪?
我:栈,然后指向堆上的一块内存。
面试官:说说堆和栈吧。。
我:堆手动,栈自动吧啦吧啦吧啦。。。。
面试官:那你画一下堆和栈在内存中的样子?
我:(方)我只知道堆朝着地址增长的方向生长,栈朝着地址减小的方向增长,不怎么会画。。。。
面试官:栈上为什么是系统自动进行内存分配和释放呢??
我:(方)。。。。。(后来想想是不是想让我说栈的地址存在寄存器中,各种压栈出栈指令都是机器指令???)
面试官:一个源程序到可执行文件的过程:
我:预处理,编译,优化,汇编,连接,
面试官:预处理做些什么
我:三种吧啦吧啦吧啦。。。。
面试官:预处理头文件的时候做了些什么事?
我:(回答比较模糊,就说了把头文件包含进代码中。。。)
面试官:编译生成什么?
我:.s文件(尴尬,没说汇编代码)
面试官:链接做了什么?
我:(又是一顿模糊回答)。
剩下的都是网络的问题,我直说还没复习网络,小哥让画了网络模型,然后举例应用层协议。tcp与udp区别,拥塞控制,浏览器中输入网址发生了什么?基本只答出了皮毛。
最后,小哥让写了简答的一个代码,统计一个句子中有哪些不同的单词。刚开始用了map<string,int>,后来小哥让优化,说不用统计次数的,我说直接set好了。
一面:
语言基础:
1.delete是如何知道要释放的内存的大小的。
2.try和catch用的多吗?
3.说以一下STL。
blabla……各自的扩容方式说一下(就讲了讲vector和hash_map的)
4.c++11了解多少。
blabla……大概说了6-7条吧。然后又问到atomic。
网络部分:
1.粘包如何解决?
2.针对TCP三次握手的缺点可能有什么危害?
blabla……我说了SYN攻击,半连接队列…
Linux:
1.编译器除了gcc,g++还了解什么?
2.编译选项常用的说说。
3.coredump用过没?
4.gbd如何解决多线程死锁问题。(不会)
项目简单介绍一下。
你还有什么比较擅长的讲一些。
一面问了很多多线程的知识,这方面有待加强。

1、先做个自我介绍
2、你本科参加过那些比赛印象最深的是哪一个,担任的角色,做了哪些工作
3、看你简历上项目就写了现在的毕设,你做过其他的项目吗?
4、说说对c++面向对象的理解?封装继承多态的存在是为了什么、有什么优点吗?
5、说说多态实现原理
6、纯虚函数的作用、为什么要有纯虚函数(他又问,虚函数也可以重定义呀,纯虚函数出现到底是为了什么,他又讲到java的接口)
7、C++类型转换方式有哪些?分别说说。dynatic_cast失败会怎么样?什么时候返回空,什么时候抛出异常
8、空类。编译器会为之生成什么成员?(中间还讨论到:我说默认构造函数只有在编译器需要的时候才会产生。
他问我你什么意思默认函数就是编译器会自动生成的啊?)【难道默认构造函数不是只有编译器需要时才产生吗,哼】
9、说说对虚析构函数的理解?什么时候要把析构函数声明为virtual
10、平常用什么容器?说说常用的容器。vector的底层实现、扩容原理、size、capacity、resize、reserve四个函数
11、map底层实现、unordered_map底层实现?哪个写(插入、删除)快?
各个容器迭代器失效的情况。
12、程序运行出错,抛出异常,怎么调试?用过什么调试工具?gdb调试?(程序运行出错,会生成一个什么call(音译)文件???
面试官说的什么call(音译)文件是什么?)
13、知道什么智能指针?说说shared_ptr实现原理、线程安全不?
14、说说你理解的进程、线程?进程的内存分布?孤儿进程?
15、怎么理解物理内存、逻辑内存?如果中国每个人都有e-mail,把所有人e-mail都存到内存中,存得下吗?(13亿人,每人20字节,估算共多少内存)
16、多线程
17、数组与链表
18、给一个无序数组,求排好序后得每个元素在有序序列中的下标,要求原数组元素顺序不变?
给一个有序数组,从中拿出一个子序列(无序),求其排好序后在原数组的下标
19、一条记录有十个字段,一个文件***十亿条记录,要求把每个字段放到一个文件中,怎么办?

1、照例自我介绍;
2、项目;
3、做项目途中遇到的困难;
4、值传递和地址传递;
5、指针和引用;
6、const int *p和int * const p的区别;
7、C里内存的五个分区,着重讲一下堆和栈的区别(趁势又讲了一波为啥值传递swap函数传不成功,因为在栈区,结束会销毁);
8、C语言局部变量在堆区还是栈;
9、C++中类里static成员变量与普通的成员变量有什么不同;
10、静态函数呢?
11、静态函数访问普通成员变量和静态成员变量/普通成员函数访问普通成员变量和静态成员变量;(我自己这块也是糊的,就被绕晕了)
12、知道STL吗?讲一下STL里的list;
13、TCP跟UDP(区别,TCP的三次握手,为啥要三次没问,但是我抢答了)

1、定义一个链表;
2、在他给定的链表内实现删除某个指定值的节点(一紧张就直接背剑指上的写法了,写完小哥哥说我并没有定义要被删除的节点,定义的是要被删除的值,然后请大家注意各种边界条件啊!被小哥哥批评不考虑整个链表只有一个指针的情况)
3、定义一个二叉树;
4、二叉树的前序遍历;(写代码的规范性啊,缩进没注意也被批评了)
5、二叉树的深度优先遍历;
6、两个栈实现一个队列;
7、找1000个数里最大的K个数(惨兮兮的用最大最小堆在做,写了一半小哥说你直接用map不就完了,我说没成想能用STL的函数)
Q:sizeof和strlen的区别?
A:你们都懂得
Q:一个int大概多大?
A:32位4个字节,64位8个字节
Q:int在内存中字节排布?
A:小端序
Q:虚函数指针什么时候会出现?
A:在有虚函数的时候~
Q:static的作用?
A:都懂得,这里不展开了
Q:多个进程同时监听一个UDP端口会怎么样?
A:不懂……
Q:你可以了解一下这方面。进程的内存结构?
A:内核、栈、动态链接库、堆、静态区、代码段、保留区
Q:静态变量和全局变量在哪个区?
A:静态区……
Q:++i和i++的区别?
A:++i效率比较高。
Q:虚基类和普通基类的区别?
A:菱形继承问题
Q:空类的大小?
A:1byte
Q:为啥?
A:不懂…
Q:引用和指针的区别?
A:都是用指针实现的。
Q:进程间通信?
A:socket, 管道,消息队列,共享内存
Q:TCP三次握手?
A:讲了讲(忘了讲状态转移)

 

  • new/delete和malloc/free的区别
  • vector的结构?vector拷贝时发生什么
  • 一个数组,只有一个数字出现奇数次,其余数字出现偶数次,如何得到这个数字?如果出现奇数次的数字有2个呢?
  • 给定一个ip地址,编码使得ip和32位整数呈双射关系
  • 50个红球50个蓝球,放到2个袋子里,从两个袋子各取1个球,让2个都是红球的概率最大,怎么放
  • 进程和线程的区别
  • 学过操作系统吗?学过网络吗?没有
  • 时间复杂度为O(nlogn)的排序算法有哪些?简述快速排序的过程
  • C++内存分布
  • 重载和重写的区别
  • Linux下删除同一文件夹下所有满足条件的文件
  • 1个32位无符号整数,计算二进制格式下有多少个1,不通过循环怎么做
  • cmake和makefile的区别
  • 简述cmake到可执行文件的过程
  • 进程和线程的区别
  • git pull和git fetch的区别
  • 学过操作系统吗?学过网络吗?没有
  • 用数据结构模拟浏览器前进后退的操作
  • 2g物理内存,new一个3g的数组时发生什么?
  • 平衡二叉树的特性,红黑树的特性,判断是否为平衡二叉树
  • 虚函数和纯虚函数
  • 智能指针如何实现
  • 进程和线程的区别,多线程和多进程的优缺点

编写shell脚本  查看一个文件,大小大于10M就删除,否则打印内容   不会,谢谢
core dump,出现段错误的原因
哈希表 如何实现 冲突解决
hash table用什么实现,最差插入时间复杂度
函数值传递一个百万个元素的vector会怎么样?为什么?
c 内存分布?

一个二维地图,每个格子有不同分数,求机器人从左下到右上的最大分数的路径。

求一个数组逆序对
三次握手四次挥手的状态字,为什么3次,为什么4次
求最大连续子数组
一次完整的http链接过程,应用层到数据链路层,越详细越好
http https区别
设计模式的了解,单例模式

成员函数的前后const
算法 最短路径

虚拟内存和物理内存的区别
进程线程区别?
谈谈项目中的多线程和线程池?
3、linux下如何快速将文件每行倒序输出?shell或者编程都行,说了下python和c++实现方法,结果人考的是tac命令
4、手撕代码-输出字符串中最长的回文子串长度?写完了不会优化
5、TCP-UDP区别?
描述四次挥手过程,以及timewait、closewait?
timewait过程如果出现过多拥塞或者网络不稳定导致很多非正常数据该如何解决?
linux下如何查看特定端口有多少tcp连接?
6、手撕sql查询排序?
如何通过索引优化该sql?
谈谈Innodb中b+树?myisam和Innodb中b树有什么区别?
7、了解数据结构?图如何表示?图广度遍历用什么结构?
1、char (*p) [] 、char *p[]、char (*p)()的区别?
2、熟悉设计模式?手写下单例模式?
3、手撕代码int atoi(char *str)?
4、谈谈web上访问网址的过程?
说说DNS如何找到ip和port的?若本地和局域网查找不到,如何向上层查找(DNS服务迭代查询和递归查询的流程)?
谈到socket通信,说说握手过程,为何三次握手?
谈到get、post了,get和post的原理和区别?
直到http和http2区别?
熟悉https,https中加密实在哪一过程进行了?
说说ssl加密原理?
5、说说select、poll、epoll区别?
6、熟悉句柄么?程序执行后句柄如何处理,如何修改可打开句柄数量?
7、数组存中在一个大于n/2次的数,如何以最优方法查找它?
8、用栈实现队列,用队列实现栈?
9、如何设计一个高并发的分布式服务器?
10、64匹马、8赛道,知识多少轮比赛找出速度最快的4匹马?(在提示下优化到12次,最优解为10或者11次)

1. 1G内存,4G url,求重复的url
2. 手写二分
3. Linux命令,find,grep,ps,netstat…
4. Python的tuple
5. C 与Cpp的区别
6. const/define
7. C语言内存布局

1.死锁是怎么产生的
2.有没有写过多线程?
3.调度算法有哪些?
4.三次握手四次挥手画图解释一下
5.UDP和TCP区别
6.HTTP和HTTPS介绍一下,区别是什么?
7.HTTPS的安全性是怎么实现的?
8.HTTP有哪几种操作?

Q:TCP三次握手和断开的完整过程
A:(答案网上很多)最后答了一下客户端处于TIME_WAIT状态要等2个MSL才会close
Q:为什么要等2个MSL
A:(答案网上找)
Q:输入www.baidu.com在浏览器的完整过程,越详细越好
A:(网上也有)
Q:说一下cache吧
A:LRU那种?
Q:是的。
A:因为java里面有一个数据结构linkedhashmap这个是很符合LRU的,然后按这个的源码说了一下,主要是hash+链表。
Q:这个怎么实现同步和互斥,怎么样去加锁
A:然后说了一下锁的相关知识,balabala
Q:c++里面的同步和互斥怎么实现的
A:mutex,条件变量之类的说了一下,消费者生产者之类的举了个例子
Q:c++里面的常量怎么定义
A:const和constexpr(这个面试官可能没见过,然后解释了一下)
Q:我主要想说宏
A:这个不算常量,在编译器就已经被全局替换。然后说了一下宏的某些缺点,我一般不会用,balabala
Q:c++的智能指针说一下,区别
A:balabala
Q:c++怎么实现一个函数先于main函数运行
A:用static,balabala
Q:c++的static的变量的初始化顺序怎么样的
A:声明顺序就是初始化顺序
Q:如果一个类里面呢?
A:这里我答错了,我以为是初始化列表的顺序。。。。。。。。(第一次答错)
Q:两个文件,两个static变量a和b,怎么让某个变量先于另外一个初始化呢?
A:通过头文件的声明顺序
Q:其他用户不知道头文件的声明顺序怎么确定呢?
A:不知道。。。。(第二次没答出来)
Q:来一条设计题。百度搜索的智能提示怎么实现,输入两个字,出来一些热搜
A:字典树+堆吧,然后balabala(第三次。。。感觉面试官不是很满意我的答案)
Q: STL说一下
A:balabala

  1. 自我介绍
  2. C++拷贝构造函数为什么传引用
  3. 如何返回值一个类的构造和拷贝构造
  4. 如果声明为私有的,那么是编译时错误还是运行时错误
  5. vector越界访问下标
  6. map越界访问下标
  7. 如何删除map中的奇数节点
  8. 指针和引用的区别
  9. C++中内存泄漏问题
  10. new和malloc的区别
  11. TCP断开连接过程,timewait解释
  12. HTTP中状态码 302(详细问) 403 400
  13. 连续子数组最大和问题
  14. 实习负责的模块是什么?遇到了什么问题和挑战?
  15. C++多态,虚标指针在什么时候初始化
  16. STL库的容器底层实现
  17. 红黑树的插入效率,为什么相对平衡的红黑树比绝对平衡的AVL适用广
  18. B树和B+树的区别,B+树应用在哪?
  19. 哈希表的哈希冲突,解决哈希冲突的几种方法
  20. 进程间通信方式,每个都讲一下
  21. 网编程讲一下。
  22. select和epoll,epoll底层实现,数据的拷贝方式。
  23. 求一个数开根号(二分)
  24. 讲一下timewait状态,没有timewait有什么问题
  25. 滑动窗口和拥塞窗口
  26. 慢启动和快重传
  27. 实现一个功能,能检测内存泄漏问题,通过一个指令输出整个进程中哪一行哪个函数申请了多少内存,按照顺序排列出来,还有总的内存数
  28. 虚基类
  29. 纯虚函数
  30. 虚函数
  31. 虚函数表内存分布
  32. 虚函数中虚基类和派生类的关系
  33. 显示转换
  34. 问了三个算法题 讲讲思路
  35. 学过网络和操作系统吗
  36. 三次握手,四次挥手 握手为什么是两次
  37. 讲一讲拥塞机制 和流量机制
  38. http https抓包工具原理
  39. IP地址分为几类?简单说一下分类
  40. 进程通信有哪些方式
  41. 进程同步的方法
  42. 知道互斥锁吗?

    他用什么来保证共享数据的安全性?

    这个我说信号量,他说如果用信号量来解决,现在出现一个状况,两段进程都被标记为可以访问该共享数据,但我们的共享单元只能支撑一个进程访问。这时候怎么办?

    我说用唯一标识符去处理。生成唯一标识符,这样就不会出现这种情况。

    他说不对。让我回去好好看看。

    回去查了一下,是原子操作。。

    1. 为什么继承时基类的析构一般声明为虚函数?
    2. 虚函数与纯虚函数的区别在于
    3. 为什么构造函数不能够使虚函数

    4.TCP端口扫描方式

    5.TIME_WAIT、CLOSE_WAIT

    6.守护进程

    7.迭代器的++it和it++哪个好

  43. 讲讲快速排序的思想。

    我 balabala

  44. 讲讲归并排序的思想。

    我 balabala

  45. 如果给你 一亿个数字,找出最大的前 20 个。(TOP K 问题)
  46. 如果我只要第二十个怎么优化。
  47. 如果给你一个文件,文件里有上亿个无序字符串,设计一个算法把上亿个字符串进行排序。接着把这个有序的字符串输入到一个新的文件当中。(内存有限制)
  48. 让我讲讲我理解的线程。
  49. 多线程对公共资源同时访问。(线程安全,同步互斥)
  50. 问我了解没了解过递归锁。
  51. C++ 11 有没有了解,讲讲。
  52. 讲讲虚函数、纯虚函数。
  53. 你懂 java 吗? (楼主是真的不懂。面试官也就没深问。)
  54. 一个函数返回值为 bool 类型。但是返回 true 与 false 的概率不是百分之五十对百分之五十。要求利用这个函数设计一个新函数,使得新函数的返回值的概率为 50%。

 

1面

1面面试官问得比较简单
1.const
2.static
3.写一个memcpy
装一下 讲了字典树和跳表
讲一些具体实现

2面

1.手写memcpy.
2.进程间通信
3.在TCP报文的画出三次握手的全过程。
4.一道智力题:100层楼,有两个玻璃球,有唯一一层,从该楼层及以下楼层扔下玻璃球不会碎,从该楼层以上扔玻璃球会碎,请用用两个玻璃球找出该层(最小的时间复杂度)。

后面就问tcp udp
线程进程
最后问了一个算法
象棋中马从A到B最短走几步
答bfs
问可否优化
想不出就说还是bfs 不过先建表算出来放表里存着直接查

 

一面:
0)自我介绍?
1)如何用数组实现链表的功能?(数组中存放一个结构体,一个表示数据,另外一个表示其下一个节点在数组中的index,以便于快速插入删除)

2)linux下有哪些信号?
3)https中的pipeline?多个相同请求的时候一次返回
4)函数指针的作用?
5)如何实现一个非定长的结构体? -长度为0的数组(a[0])

6)strcpy实现方法及其缺点,strncpy?
7)野指针?

8)linux io和标准io区别?

9)http网址访问过程,get post区别?
一面大概只记得这么多内容了,大约30-40分钟的样子,有两种面试官,一种调出笔试题让讲算法和错题的,另外一种直接怼基础的,总体上不太难。
二面:
0)简单自我介绍?

1)讲熟悉的项目,讲讲项目难点?
谈谈io复用,select?
谈谈项目共享内存实现方法?
2)linux 下编译调试方法,如何调试内存泄露问题?
3) 给几百万个网址,如何高效找出特定网址是否在其中?(布隆过滤器)
布隆过滤器优缺点,如何解决其缺点?
4)给一容量较大非法单词词典,如何判断某输入中是否有非法单词?

建立字典树–实现一次遍历就可做出判断
1、画堆排序过程,复杂度分析。
2、画平衡二叉树建立过程。
3、画红黑树构造过程。(这个不会了。。。)
4、虚析构作用。
5、什么叫重载,继承,隐藏。
6、什么函数不能声明为virtual。
7、extern C的作用。
8、讲一下快排。
9、算法题,O(n)内旋转字符串。
10、算法题,文件中有大量数字,排序并保存到结果文件中。
11、memcpy的实现。
12、TCP快重传。(记成快恢复了。。。)
1.sizeof 各种基本类型 结构体 类2.继承和多态

3.栈在实际编程的时候有哪些应用场景

4.广搜用什么数据结构

5.浮点数判断是否相等

6.手写代码 字符串反转 有时间和空间复杂度限制

7.手写代码 字符串循环移位 面试官让优化复杂度 没想出来(要用到上一题的字符串反转)

8.统计一篇英文文章出现频率最高的十个单词

9.new和malloc

10.智力题 4刀把一个圆柱形蛋糕切16块

11.实现strcpy,要考虑内存重叠和特殊情况处理

 

Q:象棋中马从一个位置跳到另一个位置的最少步数
A:手写BFS

Q:一次可以上一层台阶,也可以上两层台阶,到第N层有多少种走法
A:F[N]=F[N-1]+F[N-2]

Q:一分钟内经过公交车的概率为p,求三分钟内有公交车经过的概率
A:P=1-(1-p)^3

Q:strcpy和memcpy的区别
A:复制的内容不同,strcpy无需指定长度,遇到’\0’为止

Q:那strncpy呢?
A:我没用过

Q:你怎么判断两个struct相等?
A:我会选择重载==运算符,逐一比较成员变量是否相等

Q:那能不能用内存比较memcmp来判断呢?
A:不能,涉及字节对齐,可能有内存间隙,这里的值是随机的

Q:进程间的通信有哪些方式?
A:管道、有名管道、(信号、信号量、)共享内存、消息队列、socket

Q:epoll和select/poll的区别
A:epoll是实现I/O多路复用的一种方法,有水平触发(level trigger,LT,默认)和边缘触发(edge trigger,ET)两种工作模式,区别在于两种模式的返回就绪状态的时间不同。水平触发和select/poll的方式一样

  • 水平触发
    • 读:缓冲内容不为空返回读就绪
    • 写:缓冲区还不满返回写就绪
  • 边缘触发
    • 读:
      • 缓冲区由不可读变为可读
      • 新数据到达,缓冲区中待读数据变多时
    • 写:
      • 当缓冲区由不可写变为可写
      • 当有旧数据被发送走,即缓冲区中的内容变少的时候

epoll之所以高效,是因为epoll将用户关心的文件描述符放到内核里的一个事件表中,而不是像select/poll每次调用都需要重复传入文件描述符集或事件集。比如当一个事件发生(比如说读事件),epoll无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入就绪队列的描述符集合就行了。

Q:在TCP连接中,服务端的socket要做哪些?
A:socket->bind->listen->accept->send/recv

Q:堆和栈的区别?
A:堆是一颗二叉树、栈是一个单向进出的线性结构

Q:堆排序和快排的区别?
A:快排的思想是分治,每次选择当前范围的第一个数作为标杆,然后再将这个范围的所有比它小的数放到他左边,大的放到他右边,由这个标杆的现在位置划分出两个范围,分别对这两个范围的数再重复这样的*作,直到范围大小为1
堆排序则是在建堆的时候保证堆顶最小,然后每次取堆顶

下面应该是面试官自己出的一些题目

Q:XML是什么结构?
A:树

Q:用过正则表达式吗?写一个32位IP地址的正则
A:用过,忘记了不好意思

Q:进程和线程的区别?
A:这个没背,只回答上了几句话

 

 

1、第一个问题,怎样统计一篇英文文章中出现频率最高的10个单词,用什么数据结构和算法实现,因为是第一个问题,很紧张,答得有点语无伦次,面试小哥倒是忍了,跟我说不用说这么细,说个主要思路就可以了。

2、为找出一个字符串中第一次出现的指定字符,怎么优化算法。一脸懵逼,甚至想出了两端遍历的方式,然后小哥提醒我是第一次出现的。。。然后我就随口胡诌了一个。

3、结构体的比较问题,之前也有老哥说过。

4、根据主要用的编译环境,我是windows,他问了debug和release的区别,我就说一个会忽视ass断言一个不会(太激动还把断言说成了警告。。。)。然后又追问另一个问题,我都忘记是啥了。。。

5、main函数有没有返回值,分别针对什么情况。这个比较简单没啥好说的,然后他直接追问,那么如果出现异常,怎么捕获,然后我就懵逼了。。。

6、下一个问题更懵逼,问C++写的动态链接库能不能直接给C用,为什么。。。我就说,您既然这么问了,那肯定不能,但我也不知道为什么,因为平时使用的时候C++可以支持90%的C操作,然后就没有然后了。

7、问我有没有学过计算机网络,我说学院没开,做项目的时候用过,所以自学了一部分,然后面试官很贴心的问了个基础的问题,TCP的三次握手。这个应该都有准备过,然后又问了一下几次握手中,两端的状态转换,以及为什么两次握手不行。

8、最后问了一个关于C中宏定义的问题,前面老哥们有说过。