计算机考研408核心科目常见问题解析
计算机考研408考试涵盖了四门核心科目:数据结构、计算机组成原理、操作系统和计算机网络。这些科目是计算机科学与技术的基石,对于考生来说既是重点也是难点。本文将围绕这些科目的常见问题展开解析,帮助考生更好地理解和掌握相关知识点,为备考提供有价值的参考。
数据结构:为什么链表比数组更灵活?
链表和数组是数据结构中的两种基本存储方式,它们各有优劣。链表之所以比数组更灵活,主要体现在插入和删除操作上。数组的插入和删除操作需要移动大量元素,尤其是在数组开头或中间操作时,时间复杂度会达到O(n),而链表只需要改变前后节点的指针,时间复杂度为O(1)。链表在内存分配上更加灵活,不会像数组那样受限于连续内存空间,不会出现碎片化问题。链表还可以动态扩展大小,而数组的大小在创建时就已经固定。当然,链表也有缺点,比如随机访问速度较慢,因为需要从头节点开始遍历才能找到指定位置。但总体来说,链表的灵活性在需要频繁插入和删除操作的场景中更具优势。
操作系统:进程与线程有什么本质区别?
进程和线程是操作系统中两个重要的概念,它们既有联系又有本质区别。从资源拥有角度来看,进程是资源分配的基本单位,拥有独立的内存空间和系统资源,而线程是CPU调度的基本单位,不拥有资源,而是共享所属进程的资源。从切换开销来看,进程切换需要保存和恢复更多的状态信息,开销较大,而线程切换只需要保存少量寄存器状态,开销较小。再次,从并发性来看,多进程可以实现真正意义上的并行运行,而多线程在单核CPU上只是时间片轮转的并发表现。进程间通信需要通过操作系统内核,效率较低,而线程间通信可以直接访问共享内存,效率较高。当然,进程也有优势,比如隔离性好,一个进程崩溃不会影响其他进程,而线程共享资源,一个线程出错可能导致整个进程崩溃。因此,在选择进程还是线程时,需要根据应用场景权衡资源占用、并发需求、隔离性要求等因素。
计算机网络:TCP三次握手为什么不能两次?
TCP三次握手之所以不能两次,主要是为了解决"已建立连接但未收到确认"的问题。假设采用两次握手,客户端发送SYN请求连接,服务器响应SYN+ACK,此时如果服务器响应在网络中丢失,客户端会认为连接已建立并开始发送数据,而服务器端一直等待客户端的确认,导致连接建立失败且资源浪费。三次握手可以确保双方都确认了连接状态。具体过程是:第一步,客户端发送SYN请求连接,服务器收到后进入SYN_RCVD状态;第二步,服务器响应SYN+ACK,进入SYN_RCVD+ESTABLISHED状态;第三步,客户端收到确认后发送ACK,服务器收到后进入ESTABLISHED状态,连接建立成功。这样即使第二步的响应丢失,客户端会在超时后重发SYN,服务器会再次响应,确保连接最终建立。另外,三次握手还有一个作用是防止历史连接的SYN包干扰新连接,因为服务器会为每个连接分配不同的初始序列号。虽然三次握手比两次握手多一次通信,但能确保连接建立的可靠性,这是TCP协议设计的重要考量。