面试题day6
作者:互联网
招银网络
-
自我介绍
-
实习项目的具体情况
-
ES的具体操作
-
Redis的常用数据结构
-
如何对用户画像标签做缓存
-
ArrayList、Linkedlist
底层 数组 双向链表
不同步 线程不安全
数组扩容
-
HashMap、HashTable
是否线程安全
效率 空值
链表散列+红黑树
-
SpringCloud的具体组件
-
项目中网关的具体实现及作用
-
线程、线程池的理解
程序执行任务最小单位
管理线程的池化技术 降低资源消耗 提高响应效率
-
JVM内存模型、垃圾收集算法、判断是否可回收
堆 直接内存 方法区 本地方法栈 虚拟机栈 程序计数器
分代 复制 压缩 清除
引用计数法 可达行算法
静态变量 常量 本地方法栈 虚拟机栈
类加载 对象创建
-
手撕:实现String的equals()
对比地址 对比是否为子类 对比数组长度 对比每个字符串
-
性能优化(SQL、并发)
sql语句
-
慢SQL优化
explain
-
水平分库分表场景
-
IO密集型优化
线程池优化参数
-
和技术经理方案不同如何应对
-
团队开发最重要的是什么
-
敏捷开发的理解
美团
-
最长连续子序列
-
GC算法、垃圾收集器、CMS
parnew+cms g1
parallel+parallelold
-
对象头、markword
存储锁标志位 锁消息
同一线程再次进入 偏向锁 线程id
不同线程竞争 轻量级锁 lockrecord双向绑定
cas10+ 重量级锁 互斥量指针
-
类加载器、准备和初始化在干什么
此时是为类变量(静态变量或者静态代码块)分配内存并进行初始化的阶段。这些变量都是分配在方法区的,而不是在堆中。并且这里的初始化指的是数据类型的零值,对于基本数据类型就是0,对于引用类型则是 null。
在准备阶段被初始化为零值的那些变量会在初始化阶段赋值为在代码中定义的值。
-
集合类的顶级接口
Collection Map
-
HashMap原理、扩容
(n-1)^hash
-
HashSet、Hashtable
基于hashmap
-
ReentrantLock、AQS
类似mesa模型
state flfo队列 condition队列
-
synchronized的改进
管程 1.7用偏向锁 轻量级锁优化
-
wait-notify、线程的状态
wait()方法是Object 类的方法,它的作用是使当前执行wait()方法的线程等待,在wait()所在的代码行处暂停执行,并释放锁,直到接到通知或中断。
notify()方法用来通知那些可能等待该锁的其他线程,如果有多个线程等待,则按照执行wait方法的顺序发出一次性通知,使得等待排在第一顺序的线程获得锁。
出生 死亡 运行 等待 超时等待 阻塞
-
引擎、索引、undo log、bin log、redo log
myisam innodb
b+树
是否支持行级锁
是否支持事务
是否支持外键
索引底层
mvcc基于undolog
-
隔离级别、幻读
ru rc rr s
读时插入删除提交事务
RC隔离级别中:
- 多次快照读使用不同一致性视图,出现幻读;
- 当前读(只有Record lock)时,读最新版本,会阻塞删除操作,当不阻塞插入,与多次快照读一样出现幻读;
RR隔离级别中:
- 快照读中:可避免部分幻读,但两次快照读中间有更新语句(包含其它事务提交的插入数据-在第一次快照读后开启并提交),第二次快照读则出现幻读;RR+快照读例子
- 当前读中:默认使用next-lock实现的行锁,不会导致幻读;
-
慢查询
-
spring aop的实现机制?动态代理的实现机制?
-
Redis用来干什么?多大规模?
美团
-
场景题:一个时间段、年龄 > 50 怎么建立索引
-
索引下推是什么?
索引过滤数据
-
覆盖索引是什么?
索引查询即可拿到结果,无需回表
-
JVM:yong GC 的发生时间?发生频繁,发生时间长的原因和解决方案?
新生代堆满
配置过小,代码问题
jmap堆 jstack线程
-
CMS的过程?怎么标记垃圾的?三色标记法?G1的区别?
初始标记 并发标记 重新标记 并发清除
初始标记 重新标记
三色标记最大的好处是可以异步执行,白色,灰色,黑色
-
CMS什么时候会STW?为什么要STW?
初始标记为什么需要STW?
因为初始标记标记的是GC Root,而GC Root容易变动,比如栈帧中的本地变量表。所以需要STW。
重新标记为什么需要STW?
因为在重新标记之前是并发标记,在并发标记的期间会出现漏标和多标的对象,所以为了修正这部分对象,需要在重新标记期间STW。 -
手写多线程生产者消费者
阻塞队列实现、信号量实现
-
项目中最大的难点?有多少张表?有哪些表?有哪些服务?
-
kafka用来干什么?
-
Redis用来干什么?过期时间怎么设置?
-
遍历二叉树
-
删除所有重复的节点
-
Spring aop的原理?
-
jdk 和 cglib的区别?
-
DDD,DDD有了解吗?
麦吉太文
-
介绍一下项目功能,只说了功能,没有延伸
-
问个人优势是什么?希望以后在公司干什么方向的?(答:后端)
-
你的项目是 springboot做的为什么用springboot?
-
aop ioc介绍一下?
-
用过mybatis吗?
-
说几种熟悉的设计模式?
单例模式 工厂模式 代理模式
-
讲一下事务
acid 原子性 一致性 隔离性 持久性
-
讲一下Mysql索引(说了innodb myisam区别)
b+树
锁 事务 外键 mvcc 聚簇索引
-
你的项目里用索引了吗?
-
你的项目里存了多少数据?如果让你存1亿条数据你怎么办?
分库分表
-
分库分表会遇到什么问题?怎么解决?
分布式id问题 用redis,雪花算法解决
-
如果你发现查询很慢怎么办?(答:explain)
-
常见数据结构有什么?
Arraylist
Linkedlist
Hashmap
-
实现接口,继承抽象类区别?
-
单继承多实现
-
抽象类可以有成员变量,而接口中只可有常量final
-
抽象类可有有成员方法用(public、protected和default),而接口中只有抽象方法(public)
-
抽象类可以有构造器,而接口不能有构造器
-
-
数组链表区别
底层实现
插入删除复杂度
适合场景
内存大小
-
说说jvm?(说了内存区域和垃圾回收)
堆 直接内存 本地方法栈 虚拟机栈 方法区 程序计数器
加载 连接(验证准备解析) 初始化 使用 回收
-
看过源码吗?String源码知道吗?
String类是final char[]数组实现的,注意这个是java8的时候,java9变成了byte[]
-
因为上一个问题,面试官问我知道java9的时候有什么变化吗?
java9改了String 类的实现(byte)
-
平时用jdk哪个版本?
-
在浏览器中输⼊url地址 ->>会发生什么过程?
缓存 dns ip tcp https
-
反问:一共几轮面试? 一共两轮
标签:面试题,快照,标记,day6,索引,STW,线程,幻读 来源: https://www.cnblogs.com/faetbwac/p/16470895.html