2024年3月29日发(作者:系统软件主要包括)
计算机类面试题目及答案
Java多线程面试题目
1、什么是线程?
线程是操作系统可以进展运算调度的最小单位,它被包含
在进程之中,是进程中的实际运作单位。程序员可以通过它进
展多处理器编程,你可以使用多线程对运算密集型任务提速。
比方,假如一个线程完成一个任务要100毫秒,那么用十个线
程完成改任务只需10毫秒。
2、线程和进程有什么区别?
线程是进程的子集,一个进程可以有很多线程,每条线程
并行执行不同的任务。不同的进程使用不同的内存空间,而所
有的线程共享一片一样的内存空间。每个线程都拥有单独的栈
内存用来存储本地数据。
3、如何在Java中实现线程?
两种方式:
类的实例就是一个线程但是它需要调用
le接口来执行,由于线程类本身就是调用
的Runnable接口所以你可以继承
第 1 页 共 14 页
类或者直接调用Runnable接口来重写run方法实现线
程。
4、Java 关键字volatile 与 synchronized 作用与区别?
Volatile:
它所修饰的变量不保存拷贝,直接访问主内存中的。
在Java内存模型中,有main memory,每个线程也有自
己的memory
(例如存放器)。为了性能,一个线程会在自己的memory
中保持要访问的变量的副本。这样就会出现同一个变量在某个
瞬间,在一个线程的memory中的值可能与另外一个线程
memory中的值,或者main
memory中的值不一致的情况。 一个变量声明为
volatile,就意味着这个变量是随时会被其他线程修改的,因
此不能将它cache在线程memory中。
synchronized:
当它用来修饰一个方法或者一个代码块的时候,可以保证
在同一时刻最多只有一个线程执行该段代码。
一、当两个并发线程访问同一个对象object中的这个
synchronized(this)同步代码块时,一个时间内只能有一个线
程得到执行。另一个线程必须等待当前线程执行完这个代码块
以后才能执行该代码块。
第 2 页 共 14 页
二、然而,当一个线程访问object的一个
synchronized(this)同步代码块时,另一个线程仍然可以访问
该object中的非synchronized(this)同步代码块。
三、尤其关键的是,当一个线程访问object的一个
synchronized(this)同步代码块时,其他线程对object中所
有其它synchronized(this)同步代码块的访问将被阻塞。
四、当一个线程访问object的一个synchronized(this)
同步代码块时,它就获得了这个object的对象锁。结果,其
它线程对该object对象所有同步代码局部的访问都被暂时阻
塞。
五、以上规那么对其它对象锁同样适用。
5、有哪些不同的线程生命周期?
当我们在Java程序中新建一个线程时,它的状态是
New。当我们调用线程的start方法时,状态被改变为
Runnable。线程调度器会为Runnable线程池中的线程分配
CPU时间并且讲它们的状态改变为Running。其他的线程状态
还有Waiting,Blocked
和Dead。
6、你对线程优先级的理解是什么?
第 3 页 共 14 页
每一个线程都是有优先级的,一般来说,高优先级的线程
在运行时会具有优先权,但这依赖于线程调度的实现,这个实
现是和操作系统相关的(OS
dependent)。
我们可以定义线程的优先级,但是这并不能保证高优先级
的线程会在低优先级的线程前执行。线程优先级是一个int变
量(从1-10),1代表最低优先级,10代表最高优先级。
7、什么是死锁(Deadlock)?如何分析^p 和防止死锁?
死锁是指两个以上的线程永远阻塞的情况,这种情况产生
至少需要两个以上的线程和两个以上的资。
分析^p 死锁,我们需要查看Java应用程序的线程转
储。我们需要找出那些状态为BLOCKED的线程和他们等待的
资。每个资都有一个唯一的id,用这个id我们可以找出哪些
线程已经拥有了它的对象锁。
防止嵌套锁,只在需要的地方使用锁和防止无限期等待是
防止死锁的通常方法。
8、什么是线程平安?Vector是一个线程平安类吗?
假如你的代码所在的进程中有多个线程在同时运行,而这
些线程可能会同时运行这段代码。假如每次运行结果和单线程
运行的结果是一样的,而且其他的变量的值也和预期的是一样
的,就是线程平安的。
第 4 页 共 14 页
一个线程平安的计数器类的同一个实例对象在被多个线程
使用的情况下也不会出现计算失误。很显然你可以将集合类分
成两组,线程平安和非线程平安的。Vector
是用同步方法来实现线程平安的, 而和它相似的
ArrayList不是线程平安的。
9、Java中如何停顿一个线程?
Java提供了很丰富的API但没有为停顿线程提供API。
JDK 1.0本来有一些像stop,
suspend和resume的控制方法但是由于潜在的死锁威胁
因此在后续的JDK版本中他们被弃用了,之后Java
API的设计者就没有提供一个兼容且线程平安的方法来停
顿一个线程。
当run或者 call方法执行完的时候线程会自动完毕,假
如要手动完毕一个线程,你可以用volatile
布尔变量来退出run方法的循环或者是取消任务来中断线
程。
Kuberes面试题及答案
1、什么是Kuberes?
Kuberes是一个开容器管理工具,负责容器部署,容器扩
缩容以及负载平衡。作为Google的创意之作,它提供了出色
第 5 页 共 14 页
的社区,并与所有云提供商合作。因此,我们可以说Kuberes
不是一个容器化平台,而是一个多容器管理解决方案。
2、Kuberes与Docker有什么关系?
众所周知,Docker提供容器的生命周期管理,Docker镜
像构建运行时容器。但是,由于这些单独的容器必须通信,因
此使用Kuberes。因此,我们说Docker构建容器,这些容器
通过Kuberes互相通信。因此,可以使用Kuberes手动关联和
编排在多个主机上运行的容器。
3、什么是Container Orchestration?
考虑一个应用程序有5-6个微效劳的场景。如今,这些微
效劳被放在单独的容器中,但假如没有容器编排就无法进展通
信。因此,由于编排意味着所有乐器在音乐中和谐共处,所以
类似的容器编排意味着各个容器中的所有效劳协同工作以满足
单个效劳器的需求。
4、Kuberes如何简化容器化部署?
由于典型应用程序将具有跨多个主机运行的容器集群,因
此所有这些容器都需要互相通信。因此,要做到这一点,你需
要一些可以负载平衡,扩展和监控容器的东西。由于Kuberes
与云无关并且可以在任何公共/私有提供商上运行,因此必须
是您简化容器化部署的选择。
5、您对Kuberes的集群理解多少?
第 6 页 共 14 页
Kuberes背后的根底是我们可以施行所需的状态管理,我
的意思是我们可以提供特定配置的集群效劳,并且集群效劳将
在根底架构中运行并运行该配置。
因此,正如您所看到的,部署文件将具有提供应集群效劳
所需的所有配置。如今,部署文件将被提供应API,然后由集
群效劳决定如何在环境中安排这些pod,并确保正确运行的
pod数量。
因此,位于效劳前面的API,工作节点和节点运行的
Kubelet进程,共同构成了Kuberes集群。
6、Kuberes Architecture的不同组件有哪些?
Kuberes Architecture主要有两个组件 -
主节点和工作节点。如以下图所示,master和worker节
点中包含许多内置组件。主节点具有kube-controller-
manager,kube-apirver,kube-scheduler等。而工作节点
具有在每个节点上运行的kubelet和kube-proxy。
7、您能否介绍一下Kuberes中主节点的工作情况?
Kuberes
master控制容器存在的节点和节点内部。如今,这些单
独的容器包含在容器内部和每个容器内部,您可以根据配置和
要求拥有不同数量的容器。
第 7 页 共 14 页
本文发布于:2024-03-29 06:16:48,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1711664209176137.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:计算机类面试题目及答案.doc
本文 PDF 下载地址:计算机类面试题目及答案.pdf
留言与评论(共有 0 条评论) |