京东春招实习部分面经
一、STL
(1)、STL中list的底层实现原理是什么
(2)、list中删除一个元素的操作过程
(3)、STL中常用的包含key、value形式的容器有哪些
二、C++基础
(1)const的常用方式
(2)指针和引用的区别
(3)share_ptr智能指针的实现原理
三、计网
(1)TCP和UDP的区别
(2)TCP传输数据包到对端会不会出现乱序的情况,如何保证数据包顺序正确。
(3)UDP如何实现可靠传输
四、操作系统
(1)在多线程情况下,使用智能指针,如何保证智能指针的计数不会出现混乱(互斥锁)
五、网络编程
(1)select、epoll的区别
(2)epoll底层的实现原理,如何保证大部分情况下效率优于select
(3) 什么情况下epoll效率会比select\poll低
六、数据结构和算法
(1)设计一个数据结构实现LRU cache,(没手撕),讲解思路(unordered_map+list)
一、STL
1、map的底层实现原理是什么?查找的时间复杂度?
2、unordered_map的底层实现原理是什么?查找的时间复杂度?
3、vector的底层实现原理是,扩容大小,如何实现扩容操作
4、allocator了解吗(不了解)
5、sizeof(string)大小
二、C++基础
1、虚表的工作原理介绍一下
2、Class Base{虚函数};//定义一个类,里面定义virtual虚函数,然后用这个类定义两个对象:
Base a;
Base b;
请问两个对象是各自都有一个虚表,还是共用一个虚表。
楼主回答:共用一个虚表。
考官:为什么?(虚函数表是针对类的,一个类的所有对象的虚函数表都一样。)
3、虚函数表指针通常存储在类对象的哪个位置?为什么
4、定义一个空类,字节大小是多少?
楼主回答:1字节。
考官:为什么空类还要1字节?(考官回答曰:空类占位,空类同样实例化)
5、往空类里面随便加一个函数,比如void函数,输出hello ,该类字节大小是多少?例如:
class Base {
void f() { cout << "hello" << endl; }
};
楼主回答:1字节。
考官:为什么加了一个函数还是1字节?
考官问:这个函数具体存在进程PCB 的哪个段的位置?
6、往空类里面随便加一个虚函数,32位系统,
class Base {
virtual void f() { cout << "hello" << endl; }
};
Base A;
考官问:sizeof(A)为多大?如果为64位系统,又是多大?
楼主回答:4字节。8字节
考官问:这个内存大小具体是谁的大小呢(虚指针大小)。
7、动态链接库和静态链接库的链接时机,预处理、编译还是其他阶段?
8、如果动态链接库A,动态链接库B,里面都有一个名为function的函数,函数名相同,函数具体定义内容不同,程序链接阶段,怎么才能确定链接哪个函数。
三、计网
1、数据从应用层 到 传输层 到 IP层 到 链路层,每一层涉及的具体的操作有哪些?
2、TCP UDP IP首部多大
3、TCP拥塞控制介绍流程
4、TCP的数据包丢包怎么处理。在项目中怎么程序实现的
5、常用的端口有哪些
6、服务器方,如果两个进程同时占用80端口,客户端的HTTP报文怎么处理?会报错吗?
四、操作系统
(1)父进程如何fork一个子进程的,具体过程
(2)父进程如何fork一个子进程,父进程内部的代码段、数据需要在拷贝一份给子进程吗?如果不拷贝的话,共用的话,内核如何保证他们不会出问题?
(3)系统调用的最小单元是什么?
(4)线程相对于进程,独占了什么?
(5)进程通信方式
五、网络编程
(1)文件描述符怎么注册的,什么形式进行存储的?
(2)介绍一下epoll的操作流程?三个函数里面的形参
(3)select文件描述符限制是多少?epoll呢?
(4)epoll底层实现的主要的数据结构有哪些
(5)项目中有没有出现线程池中的线程,出现工作线程很忙的状态,不能及时处理每一个套接字带来的数据?
(6)口述线程池的设计过程
六:项目问题。
(1)GPU和CPU怎么交互的,瓶颈在哪?GPU计算的流程是怎么样的?
(2)项目中 的优化过程?
七、数据结构和算法
(1)手撕快排
#京东##实习##C++工程师##面经#