计算机类面试题目及答案.docx

上传人:b****5 文档编号:7884779 上传时间:2023-01-26 格式:DOCX 页数:4 大小:20.42KB
下载 相关 举报
计算机类面试题目及答案.docx_第1页
第1页 / 共4页
计算机类面试题目及答案.docx_第2页
第2页 / 共4页
计算机类面试题目及答案.docx_第3页
第3页 / 共4页
计算机类面试题目及答案.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机类面试题目及答案.docx

《计算机类面试题目及答案.docx》由会员分享,可在线阅读,更多相关《计算机类面试题目及答案.docx(4页珍藏版)》请在冰豆网上搜索。

计算机类面试题目及答案.docx

计算机类面试题目及答案

计算机类面试题目及答案

面试的形式有多种,有一个面试官对一个应聘者,也有多对一,一对多,多对多;无论面试的形式有多少,都是围绕考核应聘者的素质是否符合所招聘岗位的要求而展开的。

下面给大家带来2022计算机类面试题目及答案,希望能帮助到大家!

Java多线程面试题目1、什么是线程?

线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。

比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。

2、线程和进程有什么区别?

线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。

不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。

每个线程都拥有单独的栈内存用来存储本地数据。

3、如何在Java中实现线程?

两种方式:

java.lang.Thread类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread类或者直接调用Runnable接口来重写run()方法实现线程。

4、Java关键字volatile与synchronized作用与区别?

Volatile:

它所修饰的变量不保留拷贝,直接访问主内存中的。

在Java内存模型中,有mainmemory,每个线程也有自己的memory(例如寄存器)。

为了性能,一个线程会在自己的memory中保持要访问的变量的副本。

这样就会出现同一个变量在某个瞬间,在一个线程的memory中的值可能与另外一个线程memory中的值,或者mainmemory中的值不一致的情况。

一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。

synchronized:

当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。

另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。

二、然而,当一个线程访问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、你对线程优先级的理解是什么?

每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OSdependent)。

我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。

线程优先级是一个int变量(从1-10),1代表最低优先级,10代表最高优先级。

7、什么是死锁(Deadlock)?

如何分析和避免死锁?

死锁是指两个以上的线程永远阻塞的情况,这种情况产生至少需要两个以上的线程和两个以上的资源。

分析死锁,我们需要查看Java应用程序的线程转储。

我们需要找出那些状态为BLOCKED的线程和他们等待的资源。

每个资源都有一个唯一的id,用这个id我们可以找出哪些线程已经拥有了它的对象锁。

避免嵌套锁,只在需要的地方使用锁和避免无限期等待是避免死锁的通常办法。

8、什么是线程安全?

Vector是一个线程安全类吗?

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。

如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。

一个线程安全的计数器类的同一个实例对象在被多个线程使用的情况下也不会出现计算失误。

很显然你可以将集合类分成两组,线程安全和非线程安全的。

Vector是用同步方法来实现线程安全的,而和它相似的ArrayList不是线程安全的。

9、Java中如何停止一个线程?

Java提供了很丰富的API但没有为停止线程提供API。

JDK1.0本来有一些像stop(),suspend()和resume()的控制方法但是由于潜在的死锁威胁因此在后续的JDK版本中他们被弃用了,之后JavaAPI的设计者就没有提供一个兼容且线程安全的方法来停止一个线程。

当run()或者call()方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile布尔变量来退出run()方法的循环或者是取消任务来中断线程。

Kubernetes面试题及答案1、什么是Kubernetes?

Kubernetes是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。

作为Google的创意之作,它提供了出色的社区,并与所有云提供商合作。

因此,我们可以说Kubernetes不是一个容器化平台,而是一个多容器管理解决方案。

2、Kubernetes与Docker有什么关系?

众所周知,Docker提供容器的生命周期管理,Docker镜像构建运行时容器。

但是,由于这些单独的容器必须通信,因此使用Kubernetes。

因此,我们说Docker构建容器,这些容器通过Kubernetes相互通信。

因此,可以使用Kubernetes手动关联和编排在多个主机上运行的容器。

3、什么是ContainerOrchestration?

考虑一个应用程序有5-6个微服务的场景。

现在,这些微服务被放在单独的容器中,但如果没有容器编排就无法进行通信。

因此,由于编排意味着所有乐器在音乐中和谐共处,所以类似的容器编排意味着各个容器中的所有服务协同工作以满足单个服务器的需求。

4、Kubernetes如何简化容器化部署?

由于典型应用程序将具有跨多个主机运行的容器集群,因此所有这些容器都需要相互通信。

因此,要做到这一点,你需要一些能够负载平衡,扩展和监控容器的东西。

由于Kubernetes与云无关并且可以在任何公共/私有提供商上运行,因此必须是您简化容器化部署的选择。

5、您对Kubernetes的集群了解多少?

Kubernetes背后的基础是我们可以实施所需的状态管理,我的意思是我们可以提供特定配置的集群服务,并且集群服务将在基础架构中运行并运行该配置。

因此,正如您所看到的,部署文件将具有提供给集群服务所需的所有配置。

现在,部署文件将被提供给API,然后由集群服务决定如何在环境中安排这些pod,并确保正确运行的pod数量。

因此,位于服务前面的API,工作节点和节点运行的Kubelet进程,共同构成了Kubernetes集群。

6、KubernetesArchitecture的不同组件有哪些?

KubernetesArchitecture主要有两个组件-主节点和工作节点。

如下图所示,master和worker节点中包含许多内置组件。

主节点具有kube-controller-manager,kube-apiserver,kube-scheduler等。

而工作节点具有在每个节点上运行的kubelet和kube-proxy。

7、您能否介绍一下Kubernetes中主节点的工作情况?

Kubernetesmaster控制容器存在的节点和节点内部。

现在,这些单独的容器包含在容器内部和每个容器内部,您可以根据配置和要求拥有不同数量的容器。

因此,如果必须部署pod,则可以使用用户界面或命令行界面部署它们。

然后,在节点上调度这些pod,并根据资源需求,将pod分配给这些节点。

kube-apiserver确保在Kubernetes节点和主组件之间建立通信。

8、kube-apiserver和kube-scheduler的作用是什么?

kube-apiserver遵循横向扩展架构,是主节点控制面板的前端。

这将公开Kubernetes主节点组件的所有API,并负责在Kubernetes节点和Kubernetes主组件之间建立通信。

kube-scheduler负责工作节点上工作负载的分配和管理。

因此,它根据资源需求选择最合适的节点来运行未调度的pod,并跟踪资源利用率。

它确保不在已满的节点上调度工作负载。

9、你对Kubernetes的负载均衡器有什么了解?

负载均衡器是暴露服务的最常见和标准方式之一。

根据工作环境使用两种类型的负载均衡器,即内部负载均衡器或外部负载均衡器。

内部负载均衡器自动平衡负载并使用所需配置分配容器,而外部负载均衡器将流量从外部负载引导至后端容器。

10、ReplicaSet和ReplicationController之间有什么区别?

ReplicaSet和ReplicationController几乎完全相同。

它们都确保在任何给定时间运行指定数量的pod副本。

不同之处在于复制pod使用的选择器。

ReplicaSet使用基于集合的选择器,而ReplicationController使用基于权限的选择器。

Equity-Based选择器:

这种类型的选择器允许按标签键和值进行过滤。

因此,在外行术语中,基于Equity的选择器将仅查找与标签具有完全相同短语的pod。

示例:

假设您的标签键表示app=nginx,那么,使用此选择器,您只能查找标签应用程序等于nginx的那些pod。

Selector-Based选择器:

此类型的选择器允许根据一组值过滤键。

因此,换句话说,基于Selector的选择器将查找已在集合中提及其标签的pod。

示例:

假设您的标签键在(nginx,NPS,Apache)中显示应用程序。

然后,使用此选择器,如果您的应用程序等于任何nginx,NPS或Apache,则选择器将其视为真实结果。

Tomcat面试题及答案一、Tomcat的缺省端口是多少,怎么修改?

1)找到Tomcat目录下的conf文件夹2)进入conf文件夹里面找到server.xml文件3)打开server.xml文件4)在server.xml文件里面找到下列信息connectorp=redirectPort=8443uriEncoding=utf-8/>port=8080改成你想要的端口二、tomcat有哪几种Connector运行模式(优化)?

bio:

传统的JavaI/O操作,同步且阻塞IO。

maxThreads=”150”//Tomcat使用线程来处理接收的每个请求。

这个值表示Tomcat可创建的最大的线程数。

默认值200。

可以根据机器的时期性能和内存大小调整,一般可以在400-500。

最大可以在800左右。

minSpareThreads=”25”—Tomcat初始化时创建的线程数。

默认值4。

如果当前没有空闲线程,且没有超过maxThreads,一次性创建的空闲线程数量。

Tomcat初始化时创建的线程数量也由此值设置。

maxSpareThreads=”75”–一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

默认值50。

一旦创建的线程超过此数值,Tomcat会关闭不再需要的线程。

线程数可以大致上用“同时在线人数每秒用户操作次数系统平均操作时间”来计算。

acceptCount=”100”—-指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。

默认值10。

如果当前可用线程数为0,则将请求放入处理队列中。

这个值限定了请求队列的大小,超过这个数值的请求将不予处理。

connectionTimeout=”20000”–网络连接超时,默认值20000,单位:

毫秒。

设置为0表示永不超时,这样设置有隐患的。

通常可设置为30000毫秒。

nio:

JDK1.4开始支持,同步阻塞或同步非阻塞IO。

指定使用NIO模型来接受HTTP请求protocol=”org.apache.coyote.http11.Http11NioProtocol”指定使用NIO模型来接受HTTP请求。

默认是BlockingIO,配置为protocol=”HTTP/1.1”acceptorThreadCount=”2”使用NIO模型时接收线程的数目aio(nio.2):

JDK7开始支持,异步非阻塞IO。

apr:

Tomcat将以JNI的形式调用ApacheHTTP服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地提高Tomcat对静态文件的处理性能。

三、Tomcat有几种部署方式?

1)直接把Web项目放在webapps下,Tomcat会自动将其部署2)在server.xml文件上配置节点,设置相关的属性即可3)通过Catalina来进行配置:

进入到conf\Catalina\localhost文件下,创建一个xml文件,该文件的名字就是站点的名字。

编写XML的方式来进行设置。

四、tomcat容器是如何创建servlet类实例?

用到了什么原理?

当容器启动时,会读取在webapps目录下所有的web应用中的web.xml文件,然后对xml文件进行解析,并读取servlet注册信息。

然后,将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化。

(有时候也是在第一次请求时实例化)在servlet注册时加上如果为正数,则在一开始就实例化,如果不写或为负数,则第一次请求实例化。

五、tomcat如何优化?

1、优化连接配置.这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,修改连接数,关闭客户端dns查询。

参数解释:

URIEncoding=”UTF-8″:

使得tomcat可以解析含有中文名的文件的url,真方便,不像apache里还有搞个mod_encoding,还要手工编译maxSpareThreads:

如果空闲状态的线程数多于设置的数目,则将这些线程中止,减少这个池中的线程总数。

minSpareThreads:

最小备用线程数,tomcat启动时的初始化的线程数。

enableLookups:

这个功效和Apache中的HostnameLookups一样,设为关闭。

connectionTimeout:

connectionTimeout为网络连接超时时间毫秒数。

maxThreads:

maxThreadsTomcat使用线程来处理接收的每个请求。

这个值表示Tomcat可创建的最大的线程数,即最大并发数。

acceptCount:

acceptCount是当线程数达到maxThreads后,后续请求会被放入一个等待队列,这个acceptCount是这个队列的大小,如果这个队列也满了,就直接refuseconnectionmaxProcessors与minProcessors:

在Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。

它们共享相同的地址空间。

多线程帮助程序员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。

通常Windows是1000个左右,Linux是2000个左右。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1