一、说说Nginx常见的负载均衡策略。
答案:
节点轮询(默认)
-
简介:每个请求按顺序分配到不同的后端服务器
-
场景:会造成可靠性低和负载分配不均衡,适合静态文件服务器
weight 权重配置
-
简介:weight和访问比率成正比,数字越大,分配得到的流量越高
-
场景:服务器性能差异大的情况使用
upstream lbs {
server 192.168.159.133:8080 weight=5;
server 192.168.159.133:8081 weight=10;
}
复制代码
ip_hash(固定分发)
-
简介:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器
-
场景:服务器业务分区、业务缓存、Session需要单点的情况
upstream lbs {
ip_hash;
server 192.168.159.133:8080;
server 192.168.159.133:8081;
}
复制代码
二、Spring IOC容器里面的Bean默认是单例还是多例
答案:
默认是单例的,具体的作用域是Scope属性决定
- singleton:单例, 默认值,调用getBean方法返回是同一个对象,实例会被缓存起来,效率比较高当一个bean被标识为singleton时候,spring的IOC容器中只会存在一个该bean
<!--<bean id="video" class="net.xdclass.sp.domain.Video" scope="singleton"> -->
<bean id="video" class="net.xdclass.sp.domain.Video" scope="prototype">
<property name="id" value="9"/>
<property name="title" value="Spring 5.X课程" />
</bean>
复制代码
- ototype: 多例,调用getBean方法创建不同的对象,会频繁的创建和销毁对象造成很大的开销
三、zabbix监控系统有俩种监控模式,分别是什么?并简要说明他们之间的区别,假如有上千台服务器,该采用哪种监控模式?
答案:
俩种模式分别是:主动模式(active) 与被动模式(agent)
区别:
-
被动模式(agent):zabbix默认采用被动模式。就是agent等待server采集数据
-
主动模式(active):主动模式就是agent主动向server发送自己采集到的数据
假如要监控上千台服务器采用“被动模式”
四、MySQL中的datetime和timestamp有什么区别
答案:
类型 | 占据字节 | 范围 | 时区问题 |
---|---|---|---|
datetime | 8 字节 | 1000-01-01 00:00:00到9999-12-31 23:59:59 | 存储与时区无关,不会发生改变 |
timestamp | 4 字节 | 1970-01-01 00:00:01 到2038-01-19 11:14:07 | 存储的是与时区有关,随数据库的时区而发生改变 |
五、Mybatis的一级、二级缓存使用场景和失效策略
答案:
Mybatis一级缓存
-
一级缓存的作用域是SQLSession,同一个SqlSession中执行相同的SQL查询(相同的SQL和参数),第一次会去查询数据库并写在缓存中,第二次会直接从缓存中取
-
基于PerpetualCache 的 HashMap本地缓存
-
默认开启一级缓存
-
失效策略:当执行SQL时候两次查询中间发生了增删改的操作,即insert、update、delete等操作commit后会清空该SQLSession缓存; 比如sqlsession关闭,或者清空等
Mybatis二级缓存
-
二级缓存是namespace级别的,多个SqlSession去操作同一个namespace下的Mapper的sql语句,多个SqlSession可以共用二级缓存,如果两个mapper的namespace相同,(即使是两个mapper,那么这两个mapper中执行sql查询到的数据也将存在相同的二级缓存区域中,但是最后是每个Mapper单独的名称空间)
-
基于PerpetualCache 的 HashMap本地缓存,可自定义存储源,如 Ehcache/Redis等
-
默认是没有开启二级缓存
-
操作流程:第一次调用某个namespace下的SQL去查询信息,查询到的信息会存放该mapper对应的二级缓存区域。 第二次调用同个namespace下的mapper映射文件中,相同的sql去查询信息,会去对应的二级缓存内取结果
-
失效策略:执行同个namespace下的mapepr映射文件中增删改sql,并执行了commit操作,会清空该二级缓存