说一下分布式管理事务?
简单的来说呢,分布式事务其实就是一次大的操作分成了好的小的操作,这些小的操作分别部署在不同的服务器上,而且属于不同的应用,分布式的事务其实就是保证这些小的事务要么都成功,要么都失败。
分布式事务出现的场景比如在支付和在线下单都会出现,我了解的分布式事务管理解决方法就是二次提交,基于MQ的特性,MQ作为二次提交的中间节点,负责储存请求数据的,在失败的情况下可以进行多次尝试,还有可以基于MQ中的事务回滚操作,可以保证性能,又能保证业务一致性的方案。
请你简单介绍一下SpringCloud组件分别是什么,并有什么用处?
SpringCloud中有五个组件,分别是:
服务发现——Eureka
负载均衡——Ribbon
断路器——Hystrix
网关——Zuul
配置——SpringCloud Config
Eureka是Netflix的一个子模块,也是核心的模块之一,Eureka是一个基于rest的服务,用于定位服务,服务注册等功能,有了这些功能,只需要使用服务的标识符,就可以访问到服务,而不需要调用服务的配置文件了,功能类似于dobbo中的zookerper。
Ribbon主要提供负载均衡算法,它提供了一系列的配置项,比如连接超时,重试,重试算法等,他有一些实现策略:简单轮询负载均衡,加权响应时间,区域感知轮询,随机负载均衡。
Hystrix可以防止个应用程序多次试图执行一个操作,就是很可能失败的操作,断路器模式也可以检测出故障是不是解决了,如果问题得到了解决,那么应用程序就可以尝试调用操作。
Zuul网关类似于Nginx,反向代理,不过netflix自己增加了一些配合其他组件的特性。
Spring Cloud Config
这个是静态的,得配合SpringCloudBus实现动态的配置更新。
为什么eureka可以实现高可用?
在微服务的项目中,我们要考虑到发生故障的情况,所以也要对服务的注册中心也要进行高可用的部署,那么eureka就是通过多个实例进行互相注册,然后修改每个serviceUrl就可以,eurekaServer的高可用其实就是将自己作为服务去其他的注册中心注册自己,这样就可以形成一组互相注册的注册中心,就可以实现服务清单的互相同步,这样就达到了高可用的情况。
Git合并分支的命令是什么?
查看分支:git branch
创建分支:git branch
切换分支:git checkout
创建+切换分支:git checkout -b
合并某分支到当前分支:git merge
删除分支:git branch -d
HashMap和HashTable 的区别?
首先他们两个的底层都是基于数组+链表实现的,然后hashtable的key和value都不可以为空,他是线程安全的,他实现线程安全的方法是在修改数据时锁住整个hashtable,这样的话效率就会很低。
Hashmap是线程非安全的,他可以存空值,我对他印象比较深的就是他的初始size是16,然后每次扩容都是以2的n次幂扩容的。
负载均衡的策略有哪些?
大约有很多种,但我了解的有轮询的方式和最小连接数,轮询就是很简单的实现,依次将请求发送给后端的服务器,有点就是实现简单,请求分配均匀,缺点也是在均匀,因为有的服务器性能好,可以承受更多的请求,但是他都是均匀分配的,所以也是有不合适的地方。最小连接数就是在后端服务器性能差异较大的话,可以优化lc的性能,高权值的服务可以承载更高的连接负载。
线程池是什么?
线程池就是java.util包下的有一个接口,用来创建线程池的,加入一个服务完成一项任务需要的时间是创建线程的时间,执行线程的时间,和销毁线程的时间,如果创建的时间和销毁的时间大于执行任务的时间,那我们就要采用线程池来提高服务器的性能了,线程池包括:线程池管理器(就是用来创建并管理线程的,也包括销毁,添加新任务)工作线程(线程池中的线程,在没有任务处于等待的情况下,可以循环的执行任务) 任务接口(每个任务必须实现接口,供工作线程的调用),任务队列(用来存放没有处理的任务,提供一种缓冲的机制) 线程池就是关注如何优化创建线程时间和销毁线程时间的。
常见的线程池有单个的线程池,和固定数量的线程池,还有就是无数量限制的线程池。
熔断是什么,用来处理什么问题的?
熔断机制就是应对微服务雪崩效应的一种链路保护机制,就是当我们某个微服务忽然不可用或者响应时间过长的时候,就会进行服务降级,熔断该节点的服务调用,然后响应错误信息,等到检测这个应用响应正常的时候,再恢复这个链路。SpringCloud中的熔断是通过Hystrix实现的,它会监测服务的调用状况,
当失败到达一定阈值的时候,就会启动熔断,熔断机制的注解就是加一个注解,@hystrixCommand。
线程间的通信是什么,通信状态有几种?
在一个进程中,线程一般都不是单独存在的,而是多个线程之间需要进行通信的。他们的体现就是,当一个线程传输数据给另一个线程,一个线程执行完特定的任务后转到另一个线程继续执行任务。线程通信的方法有perform,还有NSmachport:本地之间的通信,通过传递端口对象变量进行端口间的通信。他应该是通过代理模式来传递消息的。管道,命名管道,信号,消息队列,共享内存
以上就是动力节点Java培训机构小编介绍的“Java中级程序员常见面试题”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
相关推荐
最新最全java面试题及答案(初级到高级)
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习