记录都是本人的理解,有错误会及时更正,保证原创。
1、Integer
自动类型的转换,底层调用valueof进行构造,Integer a=100;这种定义方式具有隐式类型转换,会从缓存中构建对应的对象。默认情况下
Integer a=100;
Intger b=100;
Integer c=1000;
Integer d=1000;
//a==b 返回true,c==d 返回false。原因是IntegerCache默认缓存的数据范围是-128~127
延伸:听说volatile经常考,所以AtomicInteger 是如何实现的呢?
2、BigDecimal 类型
注意点:BigDecimal并不保证数据精度不丢失,当构造中的传入指为String类型的时候可以保证精度,其他情况并不保证
3、数据库
的存储引擎有MyIsam、Innodb、Memory
MyIsam 支持表锁,不支持事务
Innodb支持事事务,支持行锁、间隙锁等,可以解决幻读问题(RR级别下通过next-keylock 解决幻读,RC级别不能解决幻读)
4、happens before
并发编程三大圣经:原子性、有序性、可见性
happens before解决原子的有序性问题,happens before 的语义是:如果A happens before B 则A的操作对B都是可见的。默认的happens before原则有如下:
程序顺序有序
管程有序性:解锁优先与加锁,
volatile :写操作 happens before 读操作
线程start 原则:外部线程 happens before start的线程
线程结束原则
finalize原则:对象的创建happens before finalize 操作
传递性原则:A happens B,B happens C 则A happens C
5、hash冲突的解决方法
这个题目可以回答的很复杂,考察知识的应用
- 通过链表(或者红黑树)解决冲突,参考实现有hashmap
- 通过开发地址法,具体对应到线性探测法,遇到冲突,往前移动,参考的实现有Thread中d的threadLocalMap
- 再hash法,这个暂时没想到源码级别的参考
- 建立公共溢出区,这个也没找到源码案例
======================================================
6、红黑树
啥是红黑树:红黑树性质有1)根节点为黑色 2)红色节点的子节点必须为黑色 3)任意一结点到每个叶子结点的路径都包含数量相同的黑结点
为啥红黑树:相比完全平衡二叉树,树性质的维护成本更小,不严格控制树的高度为1,但是树的高度维护在log(n)到2log(n)之间
Trie:字典树
这块说的是时候其实可以引申到skiplist,秀一下,只是当时面试的时候都蒙了,红黑树的几个性质说的都有点结巴,虽然蒙的是对的,但是给人一种不自信的感觉
7、ES数据同步机制
这个问题问的还是挺精细的,当时我回答的是必须primary shard必须等到所有replica shard同步完成后才后向客户端返回。
index.write.wait_for_active_shards :这个参数具体是设置写入时活跃的分片数量,如果活跃的分片树小于这个值,ES是拒绝写入操作的
8、ES的分片数量如何规划
- 单个分片存储存储索引数据的大小控制在20G左右;绝对不要超过50G , 否则性能很差,所以需要根据数据总量进行分片的划分。例如数据总量为1024G,则需要1024/20 ~ 52个分片,
- 一般会单独出对应的master 、client、data节点。master节点3个即可,client节点3个,剩余对应成数据节点
9、如何解决ES比较耗内存的问题
10、ES有哪些调优方案
针对项目中,对ES进行参数调优,优化的参数有index.store.preload,使用预加载机制,可以快速进行查询和聚合。
11、kafka的副本数量如何规划
12、kafka的TPS如何预估
20200731
=======================================================
13、JVM OOM的集中情况
- heap OOM :堆内存导致的内存溢出
- statck OOM :栈内存导致的内存溢出,一般出现栈可以动态扩展的情况下
- 本地方法区 OOM
- 方法区 OOM:class对象不足,这种情况一般是使用动态代理生产了太多了class文件导致
引申,需要将jvm 的内存空间、jmm模型、对象头、栈帧等搞清楚。记录下stackframe的数据
stackframe由以下及部分组成
- 操作数栈,模拟字节码执行的地方,距离iadd操作
- 局部变量表,slot槽数组(和redis那个slot同名),第一个时this指针(针对普通方法,静态方法没有这个this),局部变量
- 动态链接,
- 方法返回,
14、OOM 一定会导致进程退出吗?
//TODO 看情况,一般来说堆内存发生了OOM,当前线程会被清理,但是jvm进程不会退出,那何时会导致jvm进程退出呢?
15、Elasticsearch2 多type设计的坏处
20200820
知识点都忘完了
jdk1.7 1.8中hashmap的区别,插入的区别
redis slaveof 具体的执行流程,几个名称rdb、aof 。这块的知识点反而是很少的,容易得分,背下来最省事
数据库索引,索引下推与explain
AQS几个类的应用场景,原理理解还不行,还要掌握用法
很容易出现的一个问题就是:明明很简单的问题,自己之前记得很清楚的,面试的时候给忘记了,失去了一次宝贵的面试机会。一直以为自己的基础还是可以的,但是只是限于原理方面,一些专业名词忘记了,反而很减分。下一步,针对简历上面上写的东西,多看看场景应用,常见的面试题目,不能走马观花的看了。
数据库设计中explain字段统计一定是准确的吗?
20200827
各种消息中间件的对比
go slice的内部原理
dubo rpc框架原理
es 分页查询优化,项目中针对es 有哪些优化,索引分片如何选择
kafka 如何进行优化,
io多路复用在redis中的应用 、epoll 与poll区别
mysql是否存在master slave不一致的情况,如何解决
netty的原理:
jvm 参数优化: +AlwaysPreTouchon(虚拟内存分配相关的知识点) -Xms=31g -Xmx=31g ES设置垃圾回收器为CMS
算法题:手写lru 缓存的相关实现
总结:随意发挥,不会就不会,以聊天的角度去面试,这种面试给人的感觉是最好的,不会就直接说不会,联想到其他的应用就可以了
20200902
kafka的消费者分配流程?
如何确保kafka的可靠性
kafka优化配置有哪些
https 是否保证域名劫持问题、跨栈脚本攻击问题? 可以的,通过CA证书解决域名劫持问题,通过加密数据解决跨栈脚本攻击问题,注意,在一些极端情况下,如ca证书过期、非全栈https协议的情况下,任然有可能发生跨栈攻击问题
智力羞辱题:如何最快判断哪个药是有毒的,如何判断
20200907
如何保证应用的高可用?其实主要以下几种 standby standalone masterslave cluster,可以结合具体的中间件和应用来进行分析,智能dns(探活),nginx如何针对应用进行探活、容器探活、
限流算法: 令牌桶、漏桶、hystrix、google guava 限流(注重原理)、其他类似还有阿里的sentinl限流器
感觉高可用这一块考的还是比较多的,平常要多注意积累
20201012
spring的生命周期,beanfactory 与applicationContext的区别
spring的事务传播机制(事务嵌套),require 与requiredNew区别(可以具体到具体的mysql实现更好)
java锁升级机制,能否逆向,为什么
threadlocal实现原理,为何要用弱引用,改为强引用行不行,threadlocal如何解决冲突,使用thradlocal需要注意什么问题
oauth协议规范
mysql explain字段如何优化慢查询语句,
索引失效的集中情况,函数发生调用的时候会失效是在左边还是右边
AQS的原理
LRU算法,淘汰哪些数据(session缓存的功能)
hydrix限流器的使用及实现原理
总之一句话,三天重温以下,不然就忘记了