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 虽然是一款功能比较