【计算机面试整理1】学习中可能没学到的知识点

守护线程是什么?

Java提供了两种线程:守护线程与用户线程。守护线程是在程序运行过程中在后台进行的线程,它的任务是为其他线程提供服务和支持。当所有的非守护线程结束运行时,虚拟机会自动退出。与之相对的是用户线程, 用户线程的结束并不会导致程序的终止。在Java中,通过设置线程的setDaemon(true)方法将线程设置为守护线程。守护线程通常用来执行一些辅助性的任务,比如垃圾回收、内存管理等。

python和c++的区别

语言类型‌:Python是一种基于解释器的语言,会逐行读取代码,将Python编译为字节码,由大型C程序解释;C++是一种编译语言,完整的源代码将直接编译为机器代码,由CPU直接执行。

‌内存管理‌:Python使用自动垃圾收集器进行内存管理,无需程序员手动管理;而C++中,程序员必须自己进行内存管理。

‌应用范围‌:Python是一种通用编程语言,支持多种编程范式,包括面向对象编程、程序编程以及函数编程;C++主要用于系统/应用软件、游戏开发、嵌入式系统等对性能要求较高的领域。

‌执行速度‌:由于C++是编译型语言,代码直接转换为机器码,因此运行速度通常比Python快。‌

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)区别

深拷贝(Deep Copy)
    深拷贝会复制对象的所有属性,包括基本类型和引用类型的属性,以及引用类型的属性指向的对象,以确保新对象与原始对象完全独立。
    在深拷贝中,引用类型的属性会被递归地复制,即复制引用类型的属性指向的对象,而不是简单地复制引用。
    深拷贝创建的对象与原始对象之间没有任何关联,修改一个对象不会影响另一个对象。

浅拷贝(Shallow Copy)
    浅拷贝只复制对象的基本属性,而不复制引用类型的属性指向的对象,即只复制引用而不复制引用指向的对象。
    在浅拷贝中,新对象与原始对象共享引用类型的属性指向的对象,即它们指向同一个对象。
    修改新对象或原始对象的共享引用类型属性指向的对象的属性值,会影响到另一个对象。

三次握手和四次挥手

三次握手

原文链接
SYN:同步,发起请求(0/1)
ACK(ack确认号字段):确认,收到消息(1/x+1/y+1)
seq:初始化序列号(x/x+1)
状态:
SYN_SECT
SYN_RCVD
ESTABLISHED
【计算机面试整理1】学习中可能没学到的知识点_第1张图片

四次挥手

【计算机面试整理1】学习中可能没学到的知识点_第2张图片

为什么挥手需要四次?

这个问题可以换一种问法,也就是:中间两个步骤为什么不能合并呢?只要服务器收到客户端的FIN报文后,同时发送ACK报文和FIN报文不就可以三次挥手断开连接吗?

答案是通常情况下不行,因为ACK和FIN的触发时机是不一样的。我们要搞清楚一件事:服务器在收到FIN报文后可以立即发送ACK报文,表明我服务器收到了你的报文;但是服务器想发送FIN报文就需要等到处理完接收缓冲区的数据后才可以。所以挥手需要四次。

2.2为什么要等待2MSL?(为什么会存在一个TIME_WAIT状态?)

报文段最大生存时间MSL(Maximum SegmentLifetime),它是任何报文段被丢弃前在网络内的最长时间,超过这个时间报文将被丢弃。等待2MSL是为了确保服务器收到了最后一段ACK报文。

如何确保服务器收到了最后一段ACK报文?

如果服务器没有收到最后一段ACK报文,就会触发超时重传:服务器会再次发送FIN ACK报文。那么在2MSL的时间内,客户端会再次收到FIN报文,客户端就知道刚刚发送的ACK丢失,需要再次发送。

如果服务器收到了最后一段ACK报文,客户端在2MSL的时间内就不会收到任何报文,客户端就知道刚刚发送的ACK报文没有丢失,不需要再次发送,可以安心进入CLOSED状态了。

SSL协商过程

经常使用的是RSA算法。
非对称加密:也叫公钥加密

你可能感兴趣的:(学习,python,java)