面经 Soul

一面考官是架构师

Q:从项目入手,先问了自己负责的项目如何架构。然后问了分布式集群高可用一致性等概念。

A:主要是部署和架构设计上的一些原则思路要清楚。

Q:数据库索引原理

A:使用字典存储高频字段的值作为键值,快速定位数据行,避免全表扫描

Q:索引的实现用B+树的一些好处

A:B+树是B树的一种衍生,相比B树,把链表相连的方式把数据全部下沉到叶子节点,避免跨层查找,这样一来,因为节点的值有序,这样可以方便范围查询,不仅仅是值查询;不过B树的M值也不能太大,内存会吃不消,数据库中的索引一般是在磁盘上,数据量大的情况可能无法一次装入内存,B+ 树的设计可以允许数据分批加载,;

Q:和Hash索引的对比呢

A:Hash索引在值查询的效率明细更快,是O(1),但是对于范围查询并不是最优解;

Q:红黑树了解么,应用在哪儿?

A:为了针对有序树可能出现退化,导致高度过高的情况,而设计的一种特别的平衡树,TreeSet和Hashmap中有会用到。

Q:分表如何分?

A:参考Hashmap,根据业务来确定键值,比如userid:将用户id键值做个hash值取模,模是多少,就分了多少张表;

Q:Sql调优原则?

A:能索引就索引,避免索引失效,避免全表扫描。索引失效:1.有or必全有索引;2.复合索引未用左列字段;3.like以%开头;4.需要类型转换;5.where中索引列有运算;6.where中索引列使用了函数;7.如果mysql觉得全表扫描更快时(数据少);

Q:8/16的服务器上JVM GC处理器的选择?

A:方然是G1,也是基于分代收集思想,但是分代不再是物理层面,而是逻辑层面了,更灵活;

Q:线程池设置,和使用策略

A:1.核心线程 2.最大线程数 3.非核心线程存活时间 4.存活时间单位 5.阻塞队列 6.拒绝策略。

线程数设置这个需要根据具体任务和机器性能来综合考虑,通过不断的性能测试,分析出最佳线程数量。一般来讲:

1.CPU密集型:cpu利用率较高,设置线程数量和cpu核心数一样即可。使cpu得到充分利用。

2.IO密集型:IO密集型,主要进行长时间的IO操作,cpu利用率不如cpu密集型高,一般设置线程数为CPU两倍。

拒绝策略

默认是抛出异常,这样可以感知并进一步处理。核心业务支持熔断时可以这么做。

要么就是抛弃,去头或者去尾

要么就是谁提交的谁执行,一般是main


二面

画一下经手项目的架构图?

Redis的数据结构?

Redis的用法?

跳表知道么?

MQ用过几种?

什么场景下必须用RocketMQ

AQS知道么?

Mysql如何解决可重复度的?

Jvm优化场景?

Mysql索引如何保证生效?怎么调试?

算法题:双蛋掉落问题(很难的题)

你可能感兴趣的:(面经 Soul)