默安科技实习一二面之解答
原帖:https://www.nowcoder.com/discuss/462735131938172928
为什么在 C++ 中需要在析构函数上加上 virtual 关键字?
C++默认析构函数不是虚函数,因为申明虚函数会创建虚函数表,占用一定内存,当不存在继承的关系时,析构函数不需要申明为虚函数。
若存在继承关系时,析构函数必须申明为虚函数,这样父类指针指向子类对象,释放基类指针时才会调用子类的析构函数释放资源,否则内存泄漏。
CPU怎么切换?
1、IO等待切换.
2、时间轮询切换,也就是如果没有IO等待的情况下,就会有时间轮询切换,不让CPU一直处理一个任务
缺页中断?
- 缺页异常:malloc和mmap函数在分配内存时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常,引发缺页中断。
- 缺页中断:缺页异常后将产生一个缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。
docker的常用命令
docker images
docker ps
docker run
docker exec
docker pull
docker logs
k8s网络?
提问不明确
iptables
在Linux中,规则表(Table)是用于组织和管理iptables规则的逻辑结构。iptables规则表是基于Netfilter框架实现的,通过规则表可以方便地管理和操作iptables规则。
iptables规则表可以分为四种类型:
- Filter表:Filter表是最常用的规则表
- NAT表:NAT表用于实现网络地址转换(Network Address Translation)。
- Mangle表:Mangle表用于修改数据包的特定字段,如TTL、TOS、IP ID等。
- Raw表:Raw表用于控制数据包是否被连接跟踪系统跟踪。
TCP Wait_Time
提问不明确
排序算法复杂度
二分查找的时间复杂度logn
C++ virtural 作用
修饰虚函数
虚函数的实现
C++实现虚函数的原理是虚函数表+虚表指针。
当一个类里存在虚函数时,编译器会为类创建一个虚函数表,虚函数表是一个数组,数组的元素存放的是类中虚函数的地址。
同时为每个类的对象添加一个隐藏成员,该隐藏成员保存了指向该虚函数表的指针。该隐藏成员占据该对象的内存布局的最前端。
所以虚函数表只有一份,而有多少个对象,就对应多少个虚函数表指针。
动态绑定
虚函数在运行期间动态绑定,即父类指针和引用指向子类的实例时,通过父类指针或引用可以调用子类的函数
TCP三次/四次
三次握手:
- Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,等待Server确认。
- Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置1,ack=J+1,随机产生一个值seq=K,并将该数据包发给Client以确认连接请求。
- Client收到确认后,检测ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server。完成三次握手,随后Client与Server之间可以开始传输数据了。
四次挥手:
- 数据传输结束后,Client的应用进程发出连接释放报文段FIN,并停止发送数据,此时Client依然可以接收Server发送来的数据。
- Server接收到FIN后,发送一个ACK给Client,确认序号为收到的序号+1。
- 当Server没有数据要发送时,Server发送一个FIN报文,等待Client的确认。
- Client收到Server的FIN报文后,给Server发送一个ACK报文,确认序列号为收到的序号+1。此时Client进入TIME_WAIT状态,等待2MSL(MSL:报文段最大生存时间),然后关闭连接。
为什么要等2MSL
这是为了保证客户端发送的最后一个ACK报文段能够到达服务器。如果客户端不等待2MSL,这个ACK报文段可能丢失,因而使得处在LAST-ACK状态的服务器收不到ACK报文段的确认,导致服务器无法正常关闭。而如果客户端等待2MSL,服务器就会超时重传FIN报文段,而客户端就能在2MSL时间内收到这个重传的FIN-ACK报文段。接着客户端重传一个确认,重新启动2MSL计时器。当服务器收到最后一个ACK后就可以正常关闭了。
2MSL的意义是,经过2MSL后,所有的报文都会消失,不会影响下一次连接。最后客户端和服务器端都能正常进入到CLOSED状态。
ping命令
ping用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。
icmp处于那一层
网络层
查看进程的命令
ps -ef
查看IP的命令
ifconfig
ip addr show
Linux文件夹权限是啥
举例:文件的权限字符为 -rwxrwxrwx 时,这里总共会有10个字符,第一个字符表示文件类型,如文件(-
表示),文件夹(d
表示),链接文件(l
表示),块设备(b
表示),字符设备(c
表示),后面9个字符按照三个一组分。其中,我们可以使用数字来代表各个权限。
各权限的分数对照如下:
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,
例如当权限为: [-rwxrwx---] ,则分数是:
owner = rwx = 4+2+1 = 7
group = rwx = 4+2+1 = 7
others= --- = 0+0+0 = 0
所以我们设定权限的变更时,该文件的权限数字就是770!
以上答案均来自本人专栏:校招面试考点全解析——C++软件与嵌入式篇(蒋豆芽的秋招打怪之旅)
欢迎大家围观:https://blog.nowcoder.net/jiangwenbo
#软件开发2023笔面经#这个专栏专门用于为牛友解答面经,希望能帮助到大家。