java基础总结(面试高频问题)六:java进程间,线程间通信方式,socket通信

1:进程间通信的方式:
(1)管道:管道是一种半双工的通信方式,数据只能单向流动,且只能在具有亲缘关系的进程间通信;
半双工:数据传输可以在一个信号载体的两个双向上传输,但是不能同时传输,某一时刻只能朝一个方向传输;
(2)命名管道:半双工的通讯方式,可以在非亲缘关系的进程间通信;
(3)信号:用于通知进程有某种事件发生;
(4)信号量:他是一个计数器,可以控制多个进程多共享资源的访问。常被作为锁来使用。防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为不同进程间或同一进程下不同线程间的同步手段;
(5)消息队列:消息队列是消息的链接表,被赋予写操作的进程可以向消息队列中添加消息,被赋予读操作的进程可以向消息队列中读取消息。消息队列克服了信号承载数据较少的缺陷;
(6)共享内存:使得多个进程访问同一块内存空间,效率高,速度快。往往配合其他通信机制,比如信号量来一起使用,达到进程间同步或互斥的效果;
(7)内存映射:内存映射允许任意多个进程间通信,每一个使用该机制的进程通过把一个共享文件映射到自己的进程地址空间来实现;
(8)socket:最常用的进程间通信方式,不同的是,它可以实现不同机器之间的进程间通信;

2:线程间通信方式:
(1)synchronized同步:
其原理就是保证线程的安全,当一个线程在访问主内存时,其他线程不能访问,等待他结束;
(2)wait/notify/notifyAll机制:
线程A和线程B之间,当线程B在工作时,线程A使用wait方法进入阻塞。直到线程B工作结束,线程B调用notify方法唤醒线程A进行工作;
(3)利用volatile:
volatile修饰的变量直接存在主内存当中,子线程对该对象的读写都直接写往主内存中,不需要再往工作内存中复制一份。因此,volatile保证了多个线程的可见性,即只要被修改,其他线程读取到的一定是最新值;
(4)PipedInputStream、PipedOutputStream:
利用流的形式来进行线程间的通信,因为java中流的传输是单向的,所以在两个线程中分别建立一个输入流一个输出流来完成通信;

3:Socket通信详解:
(1)两台计算机之间进行通讯需要三个条件:IP地址,通讯协议,端口号
(2)TCP/IP协议:TCP是传输控制协议,IP是互联网协议
(3)TCP/IP的五层模型:
应用层:HTTP、FTP、SMTP、Telnet等
传输层:TCP/IP
网络层:
数据链路层:
物理层:网线、双绞线、网卡等
(4)每台计算机的IP地址都不同,端口号范围是0—65536,其中0—1023为系统保留,用户不可使用;
(5) Socket原理机制:通信的两端都有Socket,数据在两个Socket间通过IO流进行传输;
(6)TCP协议(三次握手,四次挥手):
<1>TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低。
<2>Socket(TCP)通信的整体步骤
① 创建ServerSocket和Socket
② 打开连接到Socket的输入/输出流
③ 按照协议对Socket进行读/写操作
④ 关闭输入输出流、关闭Socket
分开描述:
服务器端:
① 创建ServerSocket对象,绑定监听端口
② 通过accept()方法监听客户端请求
③ 连接建立后,通过输入流读取客户端发送的请求信息
④ 通过输出流向客户端发送响应信息
⑤ 关闭相关资源
客户端:
① 创建Socket对象,指明需要连接的服务器的地址和端口号
② 连接建立后,通过输出流想服务器端发送请求信息
③ 通过输入流获取服务器响应的信息
④ 关闭响应资源

(7)UDP协议:
<1>UDP协议(用户数据报协议)是无连接的、不可靠的、无序的,速度快,进行数据传输时,首先将要传输的数据定义成数据报(Datagram),大小限制在64k,在数据报中指明数据要达到的Socket(主机地址和端口号),然后再将数据报发送出去;
DatagramPacket类:表示数据报包
DatagramSocket类:进行端到端通信的类
<2>
服务器端:
① 创建DatagramSocket,指定端口号
② 创建DatagramPacket
③ 接受客户端发送的数据信息
④ 读取数据
客户端:
① 定义发送信息
② 创建DatagramPacket,包含将要发送的信息
③ 创建DatagramSocket
④ 发送数据

(8)三次握手,四次挥手详解:
添加链接描述

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页