Java面试Day7

1. Java 访问修饰符 public、private、protected,以及无修饰符(默认)的区别

来自:码不矫情

2. 线程间有哪些通信方式?拓展进程间通信

来自:林风

线程间通信方式

互斥锁提供了以排他方式防止数据结构被并发修改的方法。

信号量 和互斥锁的区别在于:互斥锁只允许一个线程进入临界区,信号量允许多个线程同时进入临界区 互斥锁使用对同一个资源的互斥的方式达到线程同步的目的,信号量可以同步多个资源以达到线程同步。PV操作

读写锁允许多个线程同时读共享数据,而对写操作是互斥的。

条件变量可以以原子的方式阻塞进程,直到某个特定条件为真为止。对条件的测试是在互斥锁的保护下进行的。条件变量始终与互斥锁一起使用。

自旋锁与互斥量类似,也是只有解锁和加锁两种状态,它与互斥量的区别在于,它不会阻塞线程。

信号机制(Signal) 类似进程间的信号处理,主要用于处理异常状况,用特定的码代指信息。

进程间的通信方式

管道

管道是一种单向的数据传输方式,实现线程间的通信需要两个管道。

管道这种通信方式的缺点就是通信效率低,好处就是实现简单。

消息队列

为了解决管道通信效率低,可以使用消息队列。

消息队列这种通信方式就是有一个生产者,一个消费者,运送数据的效率取决于消息队列的容量。

消息队列的缺点就是,不适合传输较大的数据。 另外传输数据要进行内核态与用户态之间的拷贝,效率比较低。

共享内存

为了解决内核态与用户态之间数据拷贝带来的开销,可以使用共享内存

共享内存就是通过指针的指向改变来完成数据的访问。

优点就在于可以省去拷贝开销,但是随之而来的问题就是对共享资源互斥访问需要控制,不然会带来安全性问题。

信号量

为了解决对共享资源访问的同步、互斥问题,可以使用信号量。

信号量其实就是一个整型计数器,用来记录资源的数量,通过PV操作来实现进程间的同步、互斥流程。

信号

对于异常情况下的工作模式,就需要用「信号」的方式来通知进程。

信号跟信号量虽然名字相似度很高,但两者用途完全不一样。信号是通过固定的信号标志来传达信息。

Socket

前面涉及到的都是同一台主机间通信方式,还有不同主机间的通信,那就要用到Socket.

创建Socket的系统调用:

int socket(int domain, int type, int protocal)

domain 参数用来指定协议族 type 参数用来指定通信特性 protocal 参数原本是用来指定通信协议的,但现在基本废弃。

线程间通信与进程间通信的区别

线程是轻量级的进程 系统进行资源调度的基本单位是进程,但是因为进程上下文切换开销太大,所以有了线程,节省开销。 线程本身也是共享进程的内存,上下文切换方便。

安全性 线程间通信的安全性相对较低,需要采用同步机制来保证共享变量的正确性; 而进程间通信的安全性相对较高,进程之间相互隔离,不会对对方的内存进行非法操作。

3. 什么是分布式?为什么需要分布式?

来自:编程导航官方

分布式是指在多台计算机上协同工作的系统,这些计算机通过网络连接在一起,共同完成一个任务。

分布式系统能够有效地解决单台计算机处理能力不足、系统容易宕机、数据存储容量有限等问题,同时能够提高系统的可靠性、可用性和性能,适用于数据量较大、并发量高、访问频繁的场景。此外,分布式系统还可以通过横向扩展的方式提高系统的性能和可靠性,同时降低单点故障的风险,提高了系统的可伸缩性,方便进行升级和维护。

在分布式系统中,由于数据和计算任务被分布在多台计算机上,不同计算机之间需要进行通信和协调,因此需要解决分布式一致性、负载均衡、故障恢复、数据共享和安全等问题,同时需要考虑数据的一致性和可靠性。因此,分布式系统的设计和实现比单机系统更加复杂和困难,需要考虑到多个因素的综合影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值