目录
一.计算机网络?
1.TCP的三次握手四次挥手
三次握手
四次挥手(详细说明)
TCP和UDP的区别
为什么TCP连接的时候是3次?2次不可以吗?
为什么TCP连接的时候是3次,关闭的时候却是4次?
2.HTTP 与 HTTPS?
什么是HTTP
HTTP 与 HTTPS的区别
3.GET和POST
4.TCP/IP协议
5.四层协议,五层协议和七层协议的关系
二.操作系统?
1.死锁
什么是死锁?
死锁产生有哪些条件?
对于死锁,主要有4种解决策略
2.进程和线程
什么是进程?
?什么是线程???????
进程与线程有什么区别?
进程调度的几种方式
3.分时系统和实时系统
分时系统
实时系统
分时系统和实时系统的区别
4.多线程
概念
多线程模型
多线程和多进程的区别
3.JAVA基础
1.Java注解
2.线程池
3.类对象
4.面向对象和面向过程的区别
5.线程安全和线程非安全
6.线程安全手段
1) 互斥同步
2) 非阻塞同步
3)?无同步方案
7.Jni
8.Java内存模型
9.set和map的区别
概述:
集合 与 字典 的区别:
Set:
Map:
一.计算机网络?
1.TCP的三次握手四次挥手
????????TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务端保存的一份关于对方的信息,如ip地址、端口号等。
????????TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。
????????一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连接通常分为三个阶段:连接、数据传输、退出(关闭)。
????????通过三次握手建立一个链接,通过四次挥手来关闭一个连接。当一个连接被建立或被终止时,交换的报文段只包含TCP头部,而没有数据。
三次握手
????????三次握手的本质是确认通信双方收发数据的能力
????????首先,我让信使运输一份信件给对方,对方收到了,那么他就知道了我的发件能力和他的收件能力是可以的。
????????于是他给我回信,我若收到了,我便知我的发件能力和他的收件能力是可以的,并且他的发件能力和我的收件能力是可以。
????????然而此时他还不知道他的发件能力和我的收件能力到底可不可以,于是我最后回馈一次,他若收到了,他便清楚了他的发件能力和我的收件能力是可以的。
四次挥手(详细说明)
四次挥手的目的是关闭一个连接
????????第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
????????第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
????????第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
????????第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。
TCP和UDP的区别
| TCP | UDP | 是否连接 | 面向连接 | 面向非连接 | 传输可靠性 | 可靠? | 不可靠 | 应用场合 | 传输少量数据 | 传输大量数据 | 速度 | 慢 | 快 |
为什么TCP连接的时候是3次?2次不可以吗?
假设有A和B两端要进行通信, 1, 第一次:首先A发送一个(SYN)到B,意思是A要和B建立连接进行通信;
如果是只有一次握手的话,这样肯定是不行的,A压根都不知道B是不是收到了这个请求。
2, 第二次:B收到A要建立连接的请求之后,发送一个确认(SYN+ACK)给A,意思是收到A的消息了,B这里也是通的,表示可以建立连接;
如果只有两次通信的话,这时候B不确定A是否收到了确认消息,有可能这个确认消息由于某些原因丢了。
3, 第三次:A如果收到了B的确认消息之后,再发出一个确认(ACK)消息,意思是告诉B,这边是通的,然后A和B就可以建立连接相互通信了;
这个时候经过了三次握手,A和B双方确认了两边都是通的,可以相互通信了,已经可以建立一个可靠的连接,并且可以相互发送数据。
4, 第四次:这个时候已经不需要B再发送一个确认消息了,两边已经通过前三次建立了一个可靠的连接,如果再发送第四次确认消息的话,就浪费资源了。
如果第二个报文段B发出的(SYN+ACK)分别发送的话,也是可以理解为四次,但是被优化了,一起发送了。
为什么TCP连接的时候是3次,关闭的时候却是4次?
????????因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。
- 本质的原因是tcp是全双公的,要实现可靠的连接关闭,A发出结束报文FIN,收到B确认后A知道自己没有数据需要发送了,B知道A不再发送数据了,自己也不会接收数据了,但是此时A还是可以接收数据,B也可以发送数据;当B发出FIN报文的时候此时两边才会真正的断开连接,读写分开。
2.HTTP 与 HTTPS?
什么是HTTP
????????HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
HTTP 与 HTTPS的区别
????????1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
? ? ? ? 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl/tls加密传输协议。
? ? ? ? 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
? ? ? ? 4、http的连接很简单,是无状态的;HTTPS协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
3.GET和POST
????????浏览器和服务器的交互是通过HTTP协议执行的,而GET和POST是HTTP协议中的两种方法。
????????HTTP全称为Hyper Text Transfer Protocol,中文翻译为超文本传输协议,目的是保证浏览器与服务器之间的通信。HTTP的工作方式是客户端与服务器之间的请求-应答协议。
????????HTTP协议中定义了浏览器和服务器进行交互的不同方法,基本方法有4种,分别是GET,POST,PUT,DELETE。这四种方法可以理解为,对服务器资源的查,改,增,删。
- GET:从服务器上获取数据,也就是所谓的查,仅仅是获取服务器资源,不进行修改。
- POST:向服务器提交数据,这就涉及到了数据的更新,也就是更改服务器的数据。
- PUT:英文含义是放置,也就是向服务器新添加数据,就是所谓的增。
- DELETE:从字面意思也能看出,这种方式就是删除服务器数据的过程。
GET和POST区别
- Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。 但是这种做法也不时绝对的,大部分人的做法也是按照上面的说法来的,但是也可以在get请求加上 request body,给 post请求带上 URL 参数。
- Get请求提交的url中的数据最多只能是2048字节,这个限制是浏览器或者服务器给添加的,http协议并没有对url长度进行限制,目的是为了保证服务器和浏览器能够正常运行,防止有人恶意发送请求。Post请求则没有大小限制。
- Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
- Get执行效率却比Post方法好。Get是form提交的默认方法。
- GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据); 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
4.TCP/IP协议
????????TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP?和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。
5.四层协议,五层协议和七层协议的关系
- TCP/IP是一个四层的体系结构,主要包括:应用层、运输层、网际层和网络接口层。
- 五层协议的体系结构主要包括:应用层、运输层、网络层,数据链路层和物理层。
- OSI七层协议模型主要包括是:应用层(Application)、表示层(Presentation)、会话层(Session)、运输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)。
注:五层协议的体系结构只是为了介绍网络原理而设计的,实际应用还是 TCP/IP 四层体系结构。
卧槽!牛皮了,头一次见有大佬把TCP/IP三次握手四次挥手解释的这么明白 - 知乎原文:https://blog.csdn.net/ThinkWo...计算机网络体系结构在计算机网络的基本概念中,分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多,在学习时要多思考。这些概念对后面的学习很有帮助。 网络…https://zhuanlan.zhihu.com/p/141396896
二.操作系统?
1.死锁
什么是死锁?
????????在两个或多个并发进程中,如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么该进程集合就产生了死锁。
死锁产生有哪些条件?
????????死锁产生的根本原因是多个进程竞争资源时,进程的推进顺序出现不正确。互斥:每个资源要么已经分配给了一个进程,要么就是可用的。 ????????占有和等待:已经得到了某个资源的进程可以再请求新的资源。 ????????不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。 ????????环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。
对于死锁,主要有4种解决策略
????????鸵鸟策略、死锁预防、死锁避免、死锁检测和恢复
2.进程和线程
什么是进程?
????????指在系统中正在运行的一个应用程序;程序一旦运行就是进程;进程——资源分配的最小单位。
?什么是线程???????
????????系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元执行流。线程——程序执行的最小单位。
进程与线程有什么区别?
????????1.进程要分配一大部分的内存,而线程只需要分配一部分栈就可以了. ? ? ? ? 2.一个程序至少有一个进程,一个进程至少有一个线程. ????????3.进程是资源分配的最小单位,线程是程序执行的最小单位。 ????????4.一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行.
进程调度的几种方式
一、先来先服务和短作业(进程)优先调度算法
二、高优先权优先调度算法
1.优先权调度算法的类型
????????1) 非抢占式优先权算法
????????2) 抢占式优先权调度算法
2.高响应比优先调度算法
3.分时系统和实时系统
分时系统
????????分时系统是指在一个系统中多个用户分时地使用同一台计算机;
实时系统
????????实时系统是指计算机及时响应外部事件地请求并在规定时限内完成对该事件地处理,控制所有实时外设和实时任务协调一致地运行。
分时系统和实时系统的区别
????????(1)分时系统的目标是提供一种通用性很强的系统,有较强的交互能力;而实时系统则大都是具有特殊用途的专用系统,交互能力略差。
????????(2)分时系统对响应时间虽有要求,但一般来说,响应时间由人所能承受的等待时间来确定;而实时系统对响应时间要求很高,一般由控制系统或信息处理磁头所能接受的延迟时间来决定。
4.多线程
概念
? ? ? ?多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。 ????????·最简单的比喻多线程就像火车的每一节车厢,而进程则是火车。车厢离开火车是无法跑动的,同理火车也不可能只有一节车厢。多线程的出现就是为了提高效率。同时它的出现也带来了一些问题。????????
多线程模型
????????多线程模型有三种
????????多对多关系线程模型是任意数量N的用户线程到相等或者小于N的内核线程的多路复用。 下图显示了多对多线程模型,其中6个用户级线程与6个内核级线程进行多路复用。在此模型中,开发人员可以根据需要创建任意数量的用户线程,并且相应的内核线程可以在多处理器计算机上并行运行。此模型提供了并发的最佳准确性,当线程执行阻塞系统调用时,内核可以调度另一个线程来执行。
????????多对一模型将许多用户级线程映射到一个内核级线程。线程管理由在用户空间由线程库中完成。当线程进行阻塞系统调用时,整个进程将被阻止。 一次只有一个线程可以访问内核,因此多个线程无法在多处理器上并行运行。 如果用户级线程库在操作系统中以系统不支持它们的方式实现的,则内核线程使用多对一关系模式。
????????用户级线程与内核级线程之间存在一对一的关系。与多对一模型相比,此模型提供更多并发性。 当线程进行阻塞系统调用时,它还允许另一个线程运行。 它支持多个线程在微处理器上并行执行。 该模型的缺点是创建用户线程时需要相应的内核线程。 OS / 2,Windows NT和Windows 2000使用一对一的关系模型。
多线程和多进程的区别
????????多进程中占用内存多,切换复杂,CPU利用率低;多线程中占用内存少,切换简单,CPU利用率高。多进程中编程简单,调试简单;多线程中编程复杂,调试复杂。多进程中进程间不会相互影响;多线程中一个线程挂掉将导致整个进程挂掉。???????
3.JAVA基础
1.Java注解
Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。
- @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
- @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
- @SuppressWarnings - 指示编译器去忽略注解中声明的警告。
作用在其他注解的注解(或者说 元注解)是:
- @Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
- @Documented - 标记这些注解是否包含在用户文档中。
- @Target - 标记这个注解应该是哪种 Java 成员。
- @Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)
从 Java 7 开始,额外添加了 3 个注解:
- @SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
- @FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
- @Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。
2.线程池
Java通过Executors提供四种线程池,分别为
- newSingleThreadExecutor?创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
- newFixedThreadPool??创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
- newScheduledThreadPool?创建一个可定期或者延时执行任务的定长线程池,支持定时及周期性任务执行。?
- newCachedThreadPool?创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。?
3.类对象
????????类与对象时整个面向对象中最基础的组成单元。
????????类:是抽象的概念集合,表示的是一个共性的产物,类之中定义的是属性和行为(方法); 对象:对象是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。
????????类是对象的模板,对象是类的实例。类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类不能直接使用,对象是可以直接使用的。
4.面向对象和面向过程的区别
????????面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++,而由C++产生了Java这门面向对象的编程语言。
????????但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,所以,面向对象的开发更像是一个具备标准的开发模式。
????????在面向对象定义之中,也规定了一些基本的特征: (1)封装:保护内部的操作不被破坏; (2)继承:在原本的基础之上继续进行扩充; (3)多态:在一个指定的范围之内进行概念的转换。
5.线程安全和线程非安全
????????线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
????????线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
6.线程安全手段
1) 互斥同步
互斥同步(Mutual Exclusion & Synchroniztion)是最常见的一种并发正确性保障手段。
2) 非阻塞同步
3)?无同步方案
7.Jni
????????Java Native Interface(JNI,Java本地接口)是Java语言的本地编程接口。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能,如下:
????????1)标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的(只能由其他语言编写)。
????????2)你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的。
????????3)程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们。
????????4)为了应用的安全性,会将一些复杂的逻辑和算法通过本地代码(C或C++)来实现,本地代码比字节码难以破解。
8.Java内存模型
????????第一,JVM分为五个区域:虚拟机栈、本地方法栈、方法区、堆、程序计数器。
????????第二,JVM五个区中虚拟机栈、本地方法栈、程序计数器为线程私有,方法区和堆为线程共享区。
????????第三,JVM不同区域的占用内存大小不同,一般情况下堆最大,程序计数器较小。那么最大的区域放Java中最多的“对象”了。
9.set和map的区别
概述:
- Set 和 Map 主要的应用场景在于 数据重组 和 数据储存。
- Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构。
集合 与 字典 的区别:
- 共同点:集合、字典 可以储存不重复的值
- 不同点:集合 是以 [value, value]的形式储存元素,字典 是以 [key, value] 的形式储存
Set:
- 成员唯一、无序且不重复。
- [value, value],键值与键名是一致的(或者说只有键值,没有键名)。
- 可以遍历,方法有:add、delete、has。
Map:
- 本质上是键值对的集合,类似集合。
- 可以遍历,方法很多可以跟各种数据格式转换。
|