1、Zookeeper 中都有哪些服务器角色?
Leader
Leader服务器是整个ZooKeeper集群工作机制中的核心,其主要工作有以下两个。
1)事务请求的唯一调度和处理者,保证集群事务处理的顺序性。
2)集群内部各服务器的调度者。
Follower
从角色名字上可以看出,Follower服务器是ZooKeeper集群状态的跟随者,其主要工作有以下三个。
1)处理客户端的非事务请求,转发事务请求给Leader服务器。
2)参与事务请求Proposal的投票。
3)参与Leader选举投票。
Observer
Zookeeper3.3.0版本以后引入的一个全新的服务器角色,在不影响集群事务处理能力的基础上提升集群的非事务处理能力从字面意思看,该服务器充当了一个观察者的角色—其观察ZooKeeper集群的最新状态变化并将这些状态变更同步过来。
1)Observer服务器在工作原理上和Follower基本是一致的,对于非事务请求,都可以进行独立的处理,而对于事务请求,则会转发给Leader服务器进行处理。
2)对比Follower唯一的区别是Observer不参与任何形式的投票,包括事务请求Proposal的投票和Leader选举投票。简单地讲,Observer服务器只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。另外,Observer的请求处理链路和Follower服务器也非常相近。
2、RabbitMQ 有几种广播类型?
direct(默认方式):最基础最简单的模式,发送方把消息发送给订阅方,如果有多个订阅者,默认采取轮询的方式进行消息发送。
headers:与direct类似,只是性能很差,此类型几乎用不到。
fanout:分发模式,把消费分发给所有订阅者。
topic:匹配订阅模式,使用正则匹配到消息队列,能匹配到的都能接收到。
3、Java 中 i++ 和 ++i 有什么区别?
概念区别
i++表示先引用i变量的数值然后再对i进行加1的操作,而++i是先对i变量进行加1的操作,然后再引用i变量的数值。
表达式形式区别
i++将“++”放在变量的后面,++i将“++”放在变量的前面。
预算优先级区别
i++中的“++”运算符的优先级比++i中“++”运算符的优先级高。
int i = 1,j = 1,h = 1;
j = i++;
System.out.println(j);
i = 1;
h = ++i;
System.out.println(h);
执行j = i++,先将i变量的值1赋值给j,此时j=1,i才等于2;执行h = ++i,会先将i变量的值1加1变成2,然后赋值给h,此时h的值为2。
4、什么是网络层?
网络层的任务就是选择合适的网间路由和交换结点,确保计算机通信的数据及时传送。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报 ,简称数据报。
互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Intert Prococol)和许多路由选择协议,因此互联网的网络层也叫做网际层或IP层。
发送端在层与层之间传输数据时,每经过一层时会被打上一个该层所属的首部信息。反之,接收端在层与层之间传输数据时,每经过一层时会把对应的首部信息去除。
5、JSP 模版引擎如何解析 ${} 表达式?
目前开发中已经很少使用JSP模版引擎,JSP虽然是一款功能比较强大的模板引擎,并被广大开发者熟悉,但它前后端耦合比较高。
其次是JSP页面的效率没有HTML高,因为JSP是同步加载。而且JSP需要Tomcat应用服务器部署,