专注Java教育14年 全国咨询/投诉热线:400-8080-105
动力节点LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 企业常见java中级工程师面试题

企业常见java中级工程师面试题

更新时间:2020-03-26 12:21:50 来源:动力节点 浏览2272次


  说一下分布式管理事务?


  简单的来说呢,分布式事务其实就是一次大的操作分成了好的小的操作,这些小的操作分别部署在不同的服务器上,而且属于不同的应用,分布式的事务其实就是保证这些小的事务要么都成功,要么都失败。


  分布式事务出现的场景比如在支付和在线下单都会出现,我了解的分布式事务管理解决方法就是二次提交,基于MQ的特性,MQ作为二次提交的中间节点,负责储存请求数据的,在失败的情况下可以进行多次尝试,还有可以基于MQ中的事务回滚操作,可以保证性能,又能保证业务一致性的方案。


  请你简单介绍一下SpringCloud组件分别是什么,并有什么用处?


  SpringCloud中有五个组件,分别是:


  服务发现——Eureka


  负载均衡——Ribbon


  断路器——Hystrix


  网关——Zuul


  配置——SpringCloudConfig


  Eureka是Netflix的一个子模块,也是核心的模块之一,Eureka是一个基于rest的服务,用于定位服务,服务注册等功能,有了这些功能,只需要使用服务的标识符,就可以访问到服务,而不需要调用服务的配置文件了,功能类似于dobbo中的zookerper。


  Ribbon主要提供负载均衡算法,它提供了一系列的配置项,比如连接超时,重试,重试算法等,他有一些实现策略:简单轮询负载均衡,加权响应时间,区域感知轮询,随机负载均衡。


  Hystrix可以防止个应用程序多次试图执行一个操作,就是很可能失败的操作,断路器模式也可以检测出故障是不是解决了,如果问题得到了解决,那么应用程序就可以尝试调用操作。


  Zuul网关类似于Nginx,反向代理,不过netflix自己增加了一些配合其他组件的特性。


  SpringCloudConfig


  这个是静态的,得配合SpringCloudBus实现动态的配置更新。


  为什么eureka可以实现高可用?


  在微服务的项目中,我们要考虑到发生故障的情况,所以也要对服务的注册中心也要进行高可用的部署,那么eureka就是通过多个实例进行互相注册,然后修改每个serviceUrl就可以,eurekaServer的高可用其实就是将自己作为服务去其他的注册中心注册自己,这样就可以形成一组互相注册的注册中心,就可以实现服务清单的互相同步,这样就达到了高可用的情况。


  Git合并分支的命令是什么?


  查看分支:gitbranch


  创建分支:gitbranch


  切换分支:gitcheckout


  创建+切换分支:gitcheckout-b


  合并某分支到当前分支:gitmerge


  删除分支:gitbranch-d


  HashMap和HashTable的区别?


  首先他们两个的底层都是基于数组+链表实现的,然后hashtable的key和value都不可以为空,他是线程安全的,他实现线程安全的方法是在修改数据时锁住整个hashtable,这样的话效率就会很低。


  Hashmap是线程非安全的,他可以存空值,我对他印象比较深的就是他的初始size是16,然后每次扩容都是以2的n次幂扩容的。


  负载均衡的策略有哪些?


  大约有很多种,但我了解的有轮询的方式和最小连接数,轮询就是很简单的实现,依次将请求发送给后端的服务器,有点就是实现简单,请求分配均匀,缺点也是在均匀,因为有的服务器性能好,可以承受更多的请求,但是他都是均匀分配的,所以也是有不合适的地方。最小连接数就是在后端服务器性能差异较大的话,可以优化lc的性能,高权值的服务可以承载更高的连接负载。


  线程池是什么?


  线程池就是java.util包下的有一个接口,用来创建线程池的,加入一个服务完成一项任务需要的时间是创建线程的时间,执行线程的时间,和销毁线程的时间,如果创建的时间和销毁的时间大于执行任务的时间,那我们就要采用线程池来提高服务器的性能了,线程池包括:线程池管理器(就是用来创建并管理线程的,也包括销毁,添加新任务)工作线程(线程池中的线程,在没有任务处于等待的情况下,可以循环的执行任务)任务接口(每个任务必须实现接口,供工作线程的调用),任务队列(用来存放没有处理的任务,提供一种缓冲的机制)线程池就是关注如何优化创建线程时间和销毁线程时间的。


  常见的线程池有单个的线程池,和固定数量的线程池,还有就是无数量限制的线程池。


  熔断是什么,用来处理什么问题的?


  熔断机制就是应对微服务雪崩效应的一种链路保护机制,就是当我们某个微服务忽然不可用或者响应时间过长的时候,就会进行服务降级,熔断该节点的服务调用,然后响应错误信息,等到检测这个应用响应正常的时候,再恢复这个链路。SpringCloud中的熔断是通过Hystrix实现的,它会监测服务的调用状况,


  当失败到达一定阈值的时候,就会启动熔断,熔断机制的注解就是加一个注解,@hystrixCommand。


  线程间的通信是什么,通信状态有几种?


  在一个进程中,线程一般都不是单独存在的,而是多个线程之间需要进行通信的。他们的体现就是,当一个线程传输数据给另一个线程,一个线程执行完特定的任务后转到另一个线程继续执行任务。线程通信的方法有perform,还有NSmachport:本地之间的通信,通过传递端口对象变量进行端口间的通信。他应该是通过代理模式来传递消息的。管道,命名管道,信号,消息队列,共享内存


  消息队列是干什么的,举一个实际应用场景?


  消息队列MQ就是一个保存消息的容器,另外它也是一个高性能的中间件。


  实际场景的话当我们用户注册后要初始化好多操作,比如调用邮箱服务发邮件,调用促销活动发优惠券,这时候我们就可以把监听服务交给MQ,当用户注册成功之后,就通知MQ让其他服务开始操作,确保能保证用户的性能。


企业常见java中级工程师面试题


  以上就是动力节点java培训机构的小编针对“企业常见java中级工程师面试题”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>