百度云java社招三面面经
项目部分就不具体说了。问了怎么排查问题,都遇到哪些难题什么的。
1、redis分布式锁如何保证原子性?
可以了解下这个命令:set key value [EX seconds] [PX milliseconds] [NX|XX]
2、用过ThreadLocal吗?简单说一下?
ThreadLocal采用的是以空间换时间的方式,为每个线程提供一份变量副本。每一个线程都可以独立的改变自己的副本。具体例子可以自己去网上找。
3、Java8之后的ConcurrentHashMap, 舍弃分段锁
通过 JDK 的源码和官方文档看来, 他们认为的弃用分段锁的原因由以下几点:
加入多个分段锁浪费内存空间。
生产环境中, map 在放入时竞争同一个锁的概率非常小,分段锁反而会造成更新等操作的长时间等待。
为了提高 GC 的效率。
4、介绍下cms收集器
CMS收集器是老年代收集器,可以配合新生代的Serial和ParNew收集器一起使用。使用的是标记清除算法,容易产生内存碎片。
4个步骤: 1.初始标记--》并发标记--》重新标记--》并发清除 (初始标记、重新标记)仍需STW。但初始标记仅仅只标记了一下GC Roots能直接关联到的对象,速度很快。
而重新标记则是修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,虽然一般比初始标记阶段稍长,但要远小于并发标记时间。
5、redis缓存与数据库一致性问题?
一致性问题主要出现在数据更新的时候,通常在更新时采取删除缓存而不是更新缓存。
具体一点?先淘汰缓存,再写数据库。因为如果先写数据库可能出现如果有读请求发生,可能导致旧数据入缓存,引发数据不一致。
6、dubbo有哪几种负载均衡策略?
1.RandomLoadBalance:按权重随机调用,这种方式是dubbo默认的负载均衡策略
2.RoundRobinLoadBalance:轮询,按公约后的权重设置轮询比率
3.LeastActiveLoadBalance:最少活跃次数
4.ConsistentHashLoadBalance:一致性hash
5.自定义负载均衡策略
7、介绍下一致性hash?
先说下普通hash有机器宕机或者新加机器的后果。然后
介绍一致性hash。
hash值是个整数非负数值,所有的hash值形成一个闭圆环
对集群的的节点的某个属性求hash值,放到环上
数据key求hash值,也放到环上。
数据的hash值按顺时针找到离它最近的节点,放在该节点上。
8、介绍下mysql的回表和覆盖索引?
回表简单来说就是数据库根据索引(非主键)找到了指定记录所在行后,还需要根据主键再次到数据库里获取数据。
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。
9、说下模板方法模式?
所谓模版方式模式:把不变的行为搬到超类,去除子类中重复的代码来体现他的优势;当不变的和可变的行为在子类实现中混合在一起的时候,
不变的行为就会在子类中重复实现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就可以帮助子类摆脱重复不变行为的纠缠。#百度##社招##Java工程师##面经#
1、redis分布式锁如何保证原子性?
可以了解下这个命令:set key value [EX seconds] [PX milliseconds] [NX|XX]
2、用过ThreadLocal吗?简单说一下?
ThreadLocal采用的是以空间换时间的方式,为每个线程提供一份变量副本。每一个线程都可以独立的改变自己的副本。具体例子可以自己去网上找。
3、Java8之后的ConcurrentHashMap, 舍弃分段锁
通过 JDK 的源码和官方文档看来, 他们认为的弃用分段锁的原因由以下几点:
加入多个分段锁浪费内存空间。
生产环境中, map 在放入时竞争同一个锁的概率非常小,分段锁反而会造成更新等操作的长时间等待。
为了提高 GC 的效率。
4、介绍下cms收集器
CMS收集器是老年代收集器,可以配合新生代的Serial和ParNew收集器一起使用。使用的是标记清除算法,容易产生内存碎片。
4个步骤: 1.初始标记--》并发标记--》重新标记--》并发清除 (初始标记、重新标记)仍需STW。但初始标记仅仅只标记了一下GC Roots能直接关联到的对象,速度很快。
而重新标记则是修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录,虽然一般比初始标记阶段稍长,但要远小于并发标记时间。
5、redis缓存与数据库一致性问题?
一致性问题主要出现在数据更新的时候,通常在更新时采取删除缓存而不是更新缓存。
具体一点?先淘汰缓存,再写数据库。因为如果先写数据库可能出现如果有读请求发生,可能导致旧数据入缓存,引发数据不一致。
6、dubbo有哪几种负载均衡策略?
1.RandomLoadBalance:按权重随机调用,这种方式是dubbo默认的负载均衡策略
2.RoundRobinLoadBalance:轮询,按公约后的权重设置轮询比率
3.LeastActiveLoadBalance:最少活跃次数
4.ConsistentHashLoadBalance:一致性hash
5.自定义负载均衡策略
7、介绍下一致性hash?
先说下普通hash有机器宕机或者新加机器的后果。然后
介绍一致性hash。
hash值是个整数非负数值,所有的hash值形成一个闭圆环
对集群的的节点的某个属性求hash值,放到环上
数据key求hash值,也放到环上。
数据的hash值按顺时针找到离它最近的节点,放在该节点上。
8、介绍下mysql的回表和覆盖索引?
回表简单来说就是数据库根据索引(非主键)找到了指定记录所在行后,还需要根据主键再次到数据库里获取数据。
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为‘覆盖索引’。即只需扫描索引而无须回表。
9、说下模板方法模式?
所谓模版方式模式:把不变的行为搬到超类,去除子类中重复的代码来体现他的优势;当不变的和可变的行为在子类实现中混合在一起的时候,
不变的行为就会在子类中重复实现,我们通过模板方法模式把这些行为搬移到单一的地方,这样就可以帮助子类摆脱重复不变行为的纠缠。#百度##社招##Java工程师##面经#