《计算机类面试题目及答案精品.docx》由会员分享,可在线阅读,更多相关《计算机类面试题目及答案精品.docx(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、计算机类面试题目及答案Java多线程面试题目 1、什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以运用多线程对运算密集型任务提速。比如,假如一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。 2、线程和进程有什么区分? 线程是进程的子集,一个进程可以有许多线程,每条线程并行执行不同的任务。不同的进程运用不同的内存空间,而全部的线程共享一片相同的内存空间。每个线程都拥有单独的栈内存用来存储本地数据。 3、如何在Java中实现线程? 两种方式:java.lang.Thread 类的实例
2、就是一个线程但是它须要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者干脆调用Runnable接口来重写run()方法实现线程。 4、Java 关键字volatile 与 synchronized 作用与区分? Volatile: 它所修饰的变量不保留拷贝,干脆访问主内存中的。 在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样就会出现同一个变量在某个瞬间,在一个线程的memor
3、y中的值可能与另外一个线程memory中的值,或者main memory中的值不一样的状况。 一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。 synchronized: 当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必需等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个synchronize
4、d(this)同步代码块时,另一个线程仍旧可以访问该object中的非synchronized(this)同步代码块。 三、尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中全部其它synchronized(this)同步代码块的访问将被堵塞。 四、当一个线程访问object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象全部同步代码部分的访问都被短暂堵塞。 五、以上规则对其它对象锁同样适用。 5、有哪些不同的线程生命周期? 当我们在Java程序中
5、新建一个线程时,它的状态是New。当我们调用线程的start()方法时,状态被变更为Runnable。线程调度器会为Runnable线程池中的线程安排CPU时间并且讲它们的状态变更为Running。其他的线程状态还有Waiting,Blocked 和Dead。 6、你对线程优先级的理解是什么? 每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依靠于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。 我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个int变量(从1-10),1代表最低优先级,10代
6、表最高优先级。 7、什么是死锁(Deadlock)?如何分析和避开死锁? 死锁是指两个以上的线程恒久堵塞的状况,这种状况产生至少须要两个以上的线程和两个以上的资源。 分析死锁,我们须要查看Java应用程序的线程转储。我们须要找出那些状态为BLOCKED的线程和他们等待的资源。每个资源都有一个唯一的id,用这个id我们可以找出哪些线程已经拥有了它的对象锁。 避开嵌套锁,只在须要的地方运用锁和避开无限期等待是避开死锁的通常方法。 8、什么是线程平安?Vector是一个线程平安类吗? 假如你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。假如每次运行结果和单线程运行的结果是
7、一样的,而且其他的变量的值也和预期的是一样的,就是线程平安的。 一个线程平安的计数器类的同一个实例对象在被多个线程运用的状况下也不会出现计算失误。很明显你可以将集合类分成两组,线程平安和非线程平安的。Vector 是用同步方法来实现线程平安的, 而和它相像的ArrayList不是线程平安的。 9、Java中如何停止一个线程? Java供应了很丰富的API但没有为停止线程供应API。JDK 1.0原来有一些像stop(), suspend()和resume()的限制方法但是由于潜在的死锁威逼因此在后续的JDK版本中他们被弃用了,之后Java API的设计者就没有供应一个兼容且线程平安的方法来停止
8、一个线程。 当run()或者 call()方法执行完的时候线程会自动结束,假如要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。 Kubernetes面试题及答案 1、什么是Kubernetes? Kubernetes是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。作为Google的创意之作,它供应了精彩的社区,并与全部云供应商合作。因此,我们可以说Kubernetes不是一个容器化平台,而是一个多容器管理解决方案。 2、Kubernetes与Docker有什么关系? 众所周知,Docker供应容器的生命周期管理,Docke
9、r镜像构建运行时容器。但是,由于这些单独的容器必需通信,因此运用Kubernetes。因此,我们说Docker构建容器,这些容器通过Kubernetes相互通信。因此,可以运用Kubernetes手动关联和编排在多个主机上运行的容器。 3、什么是Container Orchestration? 考虑一个应用程序有5-6个微服务的场景。现在,这些微服务被放在单独的容器中,但假如没有容器编排就无法进行通信。因此,由于编排意味着全部乐器在音乐中和谐共处,所以类似的容器编排意味着各个容器中的全部服务协同工作以满意单个服务器的需求。 4、Kubernetes如何简化容器化部署? 由于典型应用程序将具有跨
10、多个主机运行的容器集群,因此全部这些容器都须要相互通信。因此,要做到这一点,你须要一些能够负载平衡,扩展和监控容器的东西。由于Kubernetes与云无关并且可以在任何公共/私有供应商上运行,因此必需是您简化容器化部署的选择。 5、您对Kubernetes的集群了解多少? Kubernetes背后的基础是我们可以实施所需的状态管理,我的意思是我们可以供应特定配置的集群服务,并且集群服务将在基础架构中运行并运行该配置。 因此,正如您所看到的,部署文件将具有供应给集群服务所需的全部配置。现在,部署文件将被供应给API,然后由集群服务确定如何在环境中支配这些pod,并确保正确运行的pod数量。 因此
11、,位于服务前面的API,工作节点和节点运行的Kubelet进程,共同构成了Kubernetes集群。 6、Kubernetes Architecture的不同组件有哪些? Kubernetes Architecture主要有两个组件 - 主节点和工作节点。如下图所示,master和worker节点中包含很多内置组件。主节点具有kube-controller-manager,kube-apiserver,kube-scheduler等。而工作节点具有在每个节点上运行的kubelet和kube-proxy。 7、您能否介绍一下Kubernetes中主节点的工作状况? Kubernetes mast
12、er限制容器存在的节点和节点内部。现在,这些单独的容器包含在容器内部和每个容器内部,您可以依据配置和要求拥有不同数量的容器。 因此,假如必需部署pod,则可以运用用户界面或吩咐行界面部署它们。然后,在节点上调度这些pod,并依据资源需求,将pod安排给这些节点。kube-apiserver确保在Kubernetes节点和主组件之间建立通信。 8、kube-apiserver和kube-scheduler的作用是什么? kube -apiserver遵循横向扩展架构,是主节点限制面板的前端。这将公开Kubernetes主节点组件的全部API,并负责在Kubernetes节点和Kubernetes
13、主组件之间建立通信。 kube-scheduler负责工作节点上工作负载的安排和管理。因此,它依据资源需求选择最合适的节点来运行未调度的pod,并跟踪资源利用率。它确保不在已满的节点上调度工作负载。 9、你对Kubernetes的负载均衡器有什么了解? 负载均衡器是暴露服务的最常见和标准方式之一。依据工作环境运用两种类型的负载均衡器,即内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并运用所需配置安排容器,而外部负载均衡器将流量从外部负载引导至后端容器。 10、Replica Set 和 Replication Controller之间有什么区分? Replica Set 和 Rep
14、lication Controller几乎完全相同。它们都确保在任何给定时间运行指定数量的pod副本。不同之处在于复制pod运用的选择器。Replica Set运用基于集合的选择器,而Replication Controller运用基于权限的选择器。 Equity-Based选择器:这种类型的选择器允许按标签键和值进行过滤。因此,在外行术语中,基于Equity的选择器将仅查找与标签具有完全相同短语的pod。 示例:假设您的标签键表示app = nginx,那么,运用此选择器,您只能查找标签应用程序等于nginx的那些pod。 Selector-Based选择器:此类型的选择器允许依据一组值过滤
15、键。因此,换句话说,基于Selector的选择器将查找已在集合中提及其标签的pod。 示例:假设您的标签键在(nginx,NPS,Apache)中显示应用程序。然后,运用此选择器,假如您的应用程序等于任何nginx,NPS或Apache,则选择器将其视为真实结果。 Tomcat面试题及答案 一、Tomcat 的缺省端口是多少,怎么修改? 1)找到 Tomcat 书目下的 conf 文件夹 2)进入 conf 文件夹里面找到 server.xml 文件 3)打开 server.xml 文件 4)在 server.xml 文件里面找到下列信息 <connector p= redirectPo
16、rt=8443 uriEncoding=utf-8/> port=8080改成你想要的端口 二、tomcat 有哪几种 Connector 运行模式(优化)? bio:传统的 Java I/O 操作,同步且堵塞 IO。maxThreads=”150”/Tomcat 运用线程来处理接收的每个恳求。这个值表示 Tomcat 可创建的最大的线程数。默认值 200。可以依据机器的时期性能和内存大小调整,一般可以在 400-500。最大可以在 800 左右。 minSpareThreads=”25”Tomcat 初始化时创建的线程数。默认值 4。假如当前没有空闲线程,且没有超过 maxThread
17、s,一次性创建的空闲线程数量。 Tomcat 初始化时创建的线程数量也由此值设置。maxSpareThreads=”75”一旦创建的线程超过这个值,Tomcat 就会关闭不再须要的 socket 线程。默认值 50。一旦创建的线程超过此数值,Tomcat 会关闭不再须要的线程。线程数可以大致上用 “同时在线人数每秒用户操作次数系统平均操作时间” 来计算。 acceptCount=”100”-指定当全部可以运用的处理恳求的线程数都被运用 时,可以放到处理队列中的恳求数,超过这个数的恳求将不予处理。默认值 10。假如当前可用线程数为 0,则将恳求放入处理队列中。这个值限定了恳求队列的大小,超过这个
18、数值的恳求将不予处理。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 模型
19、时接收线程的数目 aio(nio.2):JDK7 起先支持,异步非堵塞 IO。 apr:Tomcat 将以 JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来处理文件读取或网络传输操作,从而大大地 提高 Tomcat 对静态文件的处理性能。 三、Tomcat 有几种部署方式? 1)干脆把 Web 项目放在 webapps 下,Tomcat 会自动将其部署 2)在 server.xml 文件上配置节点,设置相关的属性即可 3)通过 Catalina 来进行配置:进入到 confCatalinalocalhost 文件下,创建一个xml 文件,该文件的名字就是站点的名字。 编写
20、XML 的方式来进行设置。 四、tomcat 容器是如何创建 servlet 类实例?用到了什么原理? 当容器启动时,会读取在 webapps 书目下全部的 web 应用中的 web.xml 文件,然后对 xml 文件进行解析,并读取 servlet 注册信息。然后,将每个应用中注册的 servlet 类都进行加载, 并通过反射的方式实例化。 (有时候也是在第一次恳求时实例化)在 servlet 注册时加上假如为正数,则在一起先就实例化,假如不写或为负数,则第一次恳求实例化。 五、tomcat 如何优化? 1、优化连接配置.这里以 tomcat7 的参数配置为例,须要修改 conf/serve
21、r.xml文件,修改连接数,关闭客户端 dns 查询。参数说明: URIEncoding=”UTF-8:使得 tomcat 可以解析含有中文名的文件的 url,真便利,不像 apache 里还有搞个 mod_encoding,还要手工编译maxSpareThreads : 假如空闲状态的线程数多于设置的数目,则将这些线程中止,削减这个池中的线程总数。 minSpareThreads : 最小备用线程数,tomcat 启动时的初始化的线程数。 enableLookups :这个功效和 Apache 中的 HostnameLookups 一样,设为关闭。 connectionTimeout : c
22、onnectionTimeout 为网络连接超时时间毫秒数。 maxThreads : maxThreads Tomcat 运用线程来处理接收的每个恳求。这个值表示 Tomcat 可创建的最大的线程数,即最大并发数。 acceptCount : acceptCount 是当线程数达到 maxThreads 后,后续恳求会被放入一个等待队列,这个 acceptCount 是这个队列的大小,假如这个队列也满了,就干脆 refuse connection maxProcessors 与 minProcessors : 在 Java 中线程是程序运行时的路径,是在一个程序中与其它限制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出 CPU 最大利用率的高效程序,使空闲时间保持最低,从而接受更多的恳求。 通常 Windows 是 1000 个左右,Linux 是 2000 个左右。 计算机类面试题目及答案