面经的疑难杂症
1.介绍一下虚拟地址,虚拟地址是怎么映射到物理地址的?
虚拟地址是指在采用虚拟存储管理的操作系统中,进程访问内存时所使用的地址。每个进程都有独立的虚拟地址空间,虚拟地址通过操作系统和硬件(如MMU,内存管理单元)映射到实际的物理内存地址。这样可以实现内存保护、空间隔离和更高效的内存管理,同时也方便了进程的内存扩展和迁移。
2.Linux用的是页式还是段式还是段页式?
Linux主要采用的是页式管理,即通过分页机制进行内存管理。虽然在硬件层面(如x86架构)支持段页式管理,但Linux实际中只使用最基本的段机制来划分用户空间和内核空间,内存的分配和管理主要依赖于分页(页表)实现。
3.TCP第一次握手后发送方的状态是什么?
TCP三次握手过程中,第一次握手后(即发送方发送SYN报文并等待对方确认时),发送方的状态是SYN_SENT(同步已发送)状态。
4.网络连接下,把网线断开,会变成什么状态?
在网络连接过程中,如果把网线断开,操作系统通常会检测到链路断开,网络接口会变为断开(down)状态,TCP连接则可能进入超时重传,最终会因为无法收到对方响应而进入CLOSED(关闭)状态。
5.TCP的Keepalive
TCP的Keepalive(保活)是一种机制,用于检测长时间空闲的TCP连接是否仍然可用。它通过在连接空闲一段时间后,周期性地发送探测报文,如果对方没有响应,经过多次重试后会认为连接已断开,从而释放资源。Keepalive常用于防止死连接和及时发现网络异常。
6.什么时候会内存泄漏
内存泄漏通常发生在程序动态分配了内存(如使用
malloc
、new
等)后,未能及时释放(如未调用free
、delete
),导致这部分内存无法被再次使用和回收。当指向这块内存的指针丢失或被覆盖,但内存还未释放时,就会产生内存泄漏。常见于长时间运行的程序或服务中,可能导致系统内存耗尽。