荔枝 c++ 一面凉经之解答
原帖:https://www.nowcoder.com/feed/main/detail/5bab12927ed04646aab5c04a8299ef36
STL库熟悉吗?
STL 是“Standard Template Library”的缩写,中文译为“标准模板库”。STL 是 C++ 标准库的一部分,不用单独安装。C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。例如,vector 的底层为顺序表(数组),list 的底层为双向链表,deque 的底层为双端队列,set 的底层为红黑树,hash_set 的底层为哈希表。
通常认为,STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成,其中后面 4 部分是为前 2 部分服务的
如果用clear()清空vector,空间会改变吗?
清空数组,只会清空数组内的元素,不会改变数组的容量大小
熟悉override吗,重载和重写的关系。
- 重载(overload)函数名相同,参数列表不同(参数类型、参数顺序),不能用返回值区分。特点:(1)作用域相同;(2)函数名相同;(3)参数列表必须不同,但返回值无要求;特殊情况:若某一重载版本的函数前面有virtual关键字修饰,则表示它是虚函数,但它也是重载的一个版本。作用效果:编译器根据函数不同的参数列表,将函数与函数调用进行早绑定,重载与多态无关,与面向对象无关,它只是一种语言特性。
- 重写(override)派生类重定义基类的虚函数,既会覆盖基类的虚函数(多态)。特点:(1)作用域不同;(2)函数名、参数列表、返回值相同;(3)基类函数是virtual;特殊情况:若派生类重写函数是一个重载版本,那么基类的其他同名重载函数将在子类中隐藏。作用效果:父类指针和引用指向子类的实例时,通过父类指针或引用可以调用子类的函数,这就是C++的多态。
线程之间的通信方式,最高效的是哪种
线程间的通信方式包括互斥量、信号量、条件变量、读写锁:
- 互斥量:采用互斥对象机制,只有拥有互斥对象的线程才可以访问。因为互斥对象只有一个,所以可以保证公共资源不会被多个线程同时访问。
- 信号量:计数器,允许多个线程同时访问同一个资源。
- 条件变量:通过条件变量通知操作的方式来保持多线程同步。
- 读写锁:读写锁与互斥量类似。但互斥量要么是锁住状态,要么就是不加锁状态。读写锁一次只允许一个线程写,但允许一次多个线程读,这样效率就比互斥锁要高。
除了锁和安全序列,怎样使线程占用到互斥资源
同上
tcp和udp了解吗,有什么区别。
(1)TCP需要建立一对一稳定连接;UDP无连接
(2)TCP一对一;UDP可以一对一、一对多、多对多
(3)TCP可靠传输,序列号、确认应答、超时重传;UDP不保证可靠传输,尽最大努力交付
(4)TCP头部字节20字节;UDP8个字节
(5)TCP开销大;UDP灵活开销小
(6)TCP提供可靠的服务,适用于通讯质量要求高的场景;UDP传输效率高,适用于高速传输和实时性要求的场景。
怎么用tcp实现一个http的协议?
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
tcp + 请求/响应
以上答案均来自本人专栏:机器学习面试题汇总与解析(蒋豆芽面试题总结)
欢迎大家围观:https://blog.nowcoder.net/jiangwenbo
#软件开发2023笔面经#这个专栏专门用于为牛友解答面经,希望能帮助到大家。