致力于打造一个专业的中小学教育学习网站

IT面试笔试题目及回答

时间:2021-12-26 16:26:40 admin

  求职面试时,面试官一般都会问你一些问题,也可能是通过问卷的形式提问,怎么回答才是最好的呢?这里给大家分享一些IT面试笔试题目及回答,希望对大家有所帮助。

  关于Tomcat的7道面试题

  一、tomcat有哪些Connector?

  Tomcat的Web服务器连接器支持两种协议:AJP和HTTP,它们均定义了以二进制格式在Web服务器和Tomcat之间进行数据传输,并提供相应的控制命令。

  AJP(Apache JServ Protocol)协议:目前正在使用的AJP协议的版本是通过JK和JK2连接器提供支持的AJP13,它基于二进制的格式在Web服务器和Tomcat之间传输数据,而此前的版本AJP10和AJP11则使用文本格式传输数据。

  HTTP协议:诚如其名称所表示,其是使用HTTP或HTTPS协议在Web服务器和Tomcat之间建立通信,此时,Tomcat就是一个完全功能的HTTP服务器,它需要监听在某端口上以接收来自于商前服务器的请求。

  二、tomcat的Valve的作用是什么?

  Valve类似于过滤器,它可以工作于Engine和Host/Context之间、Host和Context之间以及Context和Web应用程序的某资源之间。一个容器内可以建立多个Valve,而且Valve定义的次序也决定了它们生效的次序。

  三、Webserver和 Application Server的区别是什么?

  最大区别,WebServer 一般仅仅指Web(如servlet,jsp)的应用服务器,ApplicationServer不仅可以是Web,还可以是Ejb等其它的应用服务器。

  web server可以是application server的一部分,也可以是单独存在。

  四 、Tomcat的缺省端口是多少,怎么修改?

  1)找到Tomcat目录下的conf文件夹;

  2)进入conf文件夹里面找到server.xml文件;

  3)打开server.xml文件;

  4)在server.xml文件里面找到下列信息;

  port=“8080”改成你想要的端口

  五 、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)Tomcat中只有一个Server,一个Server可以有多个Service,一个Service可以有多个Connector和一个Container;

  (2) Server掌管着整个Tomcat的生死大权;

  (4)Service是对外提供服务的;

  (5)Connector用于接受请求并将请求封装成Request和Response来具体处理;

  (6)Container用于封装和管理Servlet,以及具体处理request请求;

  RabbitMQ面试题及答案

  1、RabbitMQ怎么避免消息丢失?

  ①消息持久化;

  ②ACK确认机制;

  ③设置集群镜像模式;

  ④消息补偿机制。

  2、要保证消息持久化成功的条件有哪些?

  ①声明队列必须设置持久化durable设置为 true。

  ②消息推送投递模式必须设置持久化,deliveryMode设置为2(持久)。

  ③消息已经到达持久化交换器。

  ④消息已经到达持久化队列。

  以上四个条件都满足才能保证消息持久化成功。

  3、RabbitMQ持久化有什么缺点?

  持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。可尽量使用ssd硬盘来缓解吞吐量的问题。

  4、RabbitMQ 有几种广播类型?

  三种广播模式:

  ①fanout:所有bind到此exchange的queue都可以接收消息(纯广播,绑定到RabbitMQ的接受者都能收到消息);

  ②direct:通过routingKey和exchange决定的那个唯一的queue可以接收消息;

  ③topic:所有符合routingKey(此时可以是一个表达式)的routingKey所bind的queue可以接收消息;

  5、RabbitMQ中vhost的作用是什么?

  vhost可以理解为虚拟broker ,即mini-RabbitMQ server。其内部均含有独立的 queue、exchange和binding等,但最最重要的是,其拥有独立的权限系统,可以做到 vhost 范围的用户控制。当然,从RabbitMQ的全局角度,vhost可以作为不同权限隔离的手段(一个典型的例子就是不同的应用可以跑在不同的vhost中)。

  Zookeeper面试题

  1、集群中为什么要有主节点?

  在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行leade选举。

  2、集群中有3台服务器,其中一个节点宕机,这个时候Zookeeper还可以使用吗?

  可以继续使用,单数服务器只要没超过一半的服务器宕机就可以继续使用。

  集群规则为2N+1台,N >0,即最少需要3台。

  3、说一下两阶段提交和三阶段提交的过程?分别有什么问题?

  (一)两阶段提交协议2PC

  1. 第一阶段(投票阶段):

  (1)协调者节点向所有参与者节点询问是否可以执行提交操作(vote),并开始等待各参与者节点的响应;

  (2)参与者节点执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志。

  (3)各参与者节点响应协调者节点发起的询问。如果参与者节点的事务操作实际执行成功,则它返回一个“同意”消息;如果参与者节点的事务操作实际执行失败,则它返回一个“中止”消息。

  2. 第二阶段(提交执行阶段):

  当协调者节点从所有参与者节点获得的相应消息都为“同意”时:

  (1)协调者节点向所有参与者节点发出“正式提交(commit)”的请求;

  (2)参与者节点正式完成操作,并释放在整个事务期间内占用的资源;

  (3)参与者节点向协调者节点发送“完成”消息;

  (4)协调者节点受到所有参与者节点反馈的“完成”消息后,完成事务。

  (二)两阶段提交存在的问题:

  1. 执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态;

  2. 参与者发生故障:协调者需要给每个参与者额外指定超时机制,超时后整个事务失败;

  3. 协调者发生故障:参与者会一直阻塞下去。需要额外的备机进行容错;

  4. 二阶段无法解决的问题:协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。

  (三)三阶段提交协议3PC

  与两阶段提交不同的是,三阶段提交有两个改动点:

  1. 引入超时机制。同时在协调者和参与者中都引入超时机制;

  2. 在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。

  也就是说,除了引入超时机制之外,3PC 把 2PC 的准备阶段再次一分为二,这样三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。

  1. CanCommit阶段

  3PC的CanCommit阶段其实和2PC的准备阶段很像。协调者向参与者发送commit请求,参与者如果可以提交就返回Yes响应,否则返回No响应。

  (1)事务询问:协调者向参与者发送CanCommit请求。询问是否可以执行事务提交操作。然后开始等待参与者的响应。

  (2)响应反馈:参与者接到CanCommit请求之后,正常情况下,如果其自身认为可以顺利执行事务,则返回Yes响应,并进入预备状态。否则反馈No。

  2. PreCommit阶段

  协调者根据参与者的反应情况来决定是否可以继续事务的PreCommit操作。根据响应情况,有以下两种可能:

  假如协调者从所有的参与者获得的反馈都是Yes响应,那么就会执行事务的预执行。

  (1)发送预提交请求:协调者向参与者发送PreCommit请求,并进入Prepared阶段。

  (2)事务预提交:参与者接收到PreCommit请求后,会执行事务操作,并将undo和redo信息记录到事务日志中。

  (3)响应反馈:如果参与者成功的执行了事务操作,则返回ACK响应,同时开始等待最终指令。

  假如有任何一个参与者向协调者发送了No响应,或者等待超时之后,协调者都没有接到参与者的响应,那么就执行事务的中断。

  (1)发送中断请求:协调者向所有参与者发送abort请求。

  (2)中断事务:参与者收到来自协调者的abort请求之后(或超时之后,仍未收到协调者的请求),执行事务的中断。

  3. doCommit阶段

  该阶段进行真正的事务提交,也可以分为以下两种情况。

  3.1 执行提交

  (1)发送提交请求:协调接收到参与者发送的ACK响应,那么他将从预提交状态进入到提交状态。并向所有参与者发送doCommit请求。

  (2)事务提交:参与者接收到doCommit请求之后,执行正式的事务提交。并在完成事务提交之后释放所有事务资源。

  (3)响应反馈:事务提交完之后,向协调者发送ACK响应。

  (4)完成事务:协调者接收到所有参与者的ACK响应之后,完成事务。

  3.2 中断事务

  协调者没有接收到参与者发送的ACK响应(可能是接受者发送的不是ACK响应,也可能响应超时),那么就会执行中断事务。

  (1)发送中断请求:协调者向所有参与者发送abort请求。

  (2)事务回滚:参与者接收到abort请求之后,利用其在阶段二记录的undo信息来执行事务的回滚操作,并在完成回滚之后释放所有的事务资源。

  (3)反馈结果:参与者完成事务回滚之后,向协调者发送ACK消息。

  (4)中断事务:协调者接收到参与者反馈的ACK消息之后,执行事务的中断。

  (四)三阶段提交的问题:

  网络分区可能会带来问题。需要四阶段解决:四阶段直接调用远程服务的数据状态,确定当前数据一致性的情况。

  4、Zookeeper宕机如何处理?

  Zookeeper本身也是集群,推荐配置不少于3个服务器。Zookeeper自身也要保证当一个节点宕机时,其他节点会继续提供服务。如果是一个Follower宕机,还有2台服务器提供访问,因为Zookeeper上的数据是有多个副本的,数据并不会丢失;如果是一个Leader宕机,Zookeeper会选举出新的Leader。

  Zookeeper集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在Zookeeper节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。所以:

  3个节点的cluster可以挂掉1个节点(leader可以得到2票> 1.5)

  2个节点的cluster就不能挂掉任何1个节点了(leader可以得到1票<= 1)

  5、说下四种类型的数据节点Znode?

  1. PERSISTENT:持久节点,除非手动删除,否则节点一直存在于Zookeeper上。

  2. EPHEMERAL:临时节点,临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与Zookeeper连接断开不一定会话失效),那么这个客户端创建的所有临时节点都会被移除。

  3. PERSISTENT_SEQUENTIAL:持久顺序节点,基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。

  4. EPHEMERAL_SEQUENTIAL:临时顺序节点,基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。

  6、Zookeeper和Dubbo的关系?

  Dubbo的将注册中心进行抽象,是得它可以外接不同的存储媒介给注册中心提供服务,有ZooKeeper,Memcached,Redis等。

  引入了ZooKeeper作为存储媒介,也就把ZooKeeper的特性引进来。首先是负载均衡,单注册中心的承载能力是有限的,在流量达到一定程度的时 候就需要分流,负载均衡就是为了分流而存在的,一个ZooKeeper群配合相应的Web应用就可以很容易达到负载均衡;

  资源同步,单单有负载均衡还不够,节点之间的数据和资源需要同步,ZooKeeper集群就天然具备有这样的功能;命名服务,将树状结构用于维护全局的服务地址列表,服务提供者在启动的时候,向ZooKeeper上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。其他特性还有Mast选举,分布式锁等。

  结尾:非常感谢大家阅读《IT面试笔试题目及回答》,更多精彩内容等着大家,欢迎持续关注学习大全网「Xuexidaquan.Com」,一起成长!

IT面试笔试题目及回答相关文章:

研发工程师面试笔试题目

国企面试笔试题目

最新IT面试笔试题目参考

2022IT面试笔试题目及参考答案

最新求职笔试题app

求职笔试题目汇总

【笔试题】推荐文章

【笔试题】图文精华

热门排行