面试中的盲点(blind point for interview)

359 阅读7分钟

记录都是本人的理解,有错误会及时更正,保证原创。

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限流器的使用及实现原理

总之一句话,三天重温以下,不然就忘记了