昨天试了两次牛客AI面试的c++开发岗,在这里记录一下主要问题。每场大约有10-15分钟,每场存在四个问题,第一个是闲聊,最后一个是手动编程。
一、TCP、IP、HTTP分别属于网络结构哪一层
网络层 | 主要协议 |
---|---|
应用层 | DNS、HTTP、HTTPS、DHCP |
传输层 | TCP、UDP |
网络层 | IP、RIP、ICMP |
数据链路层 | ATM,FDDI |
物理层 | Rj45,802.3 |
在TCP/IP模型中,ARP协议属于IP层;在OSI模型中,ARP协议属于链路层。
二、c++面向对象的三大特性
**封装:**封装可以隐藏实现细节,使得代码模块化;封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。在面向对象编程上可理解为:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。其继承的过程,就是从一般到特殊的过程。
通过继承创建的新类称为“子类”或“派生类”。被继承的类称为“基类”、“父类”或“超类”。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
三、使用智能指针还会存在内存泄漏吗?
智能指针 shared_ptr unique_ptr weak_ptr
两个对象都通过一个shared_ptr指向对方会造成循环引用,引起计数失效,造成内存泄露。
四、请你谈谈共享内存相关的api
共享内存是IPC的一种高效方式,速度很快。 shmget 创建共享内存,shmat 关联共享内存,shmdt 解除关联共享内存
五、两道编程
1、输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。原题
2、从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。原题