【面经分享】京东
线程池核心参数
7 个参数。
coreSize
maxSize
阻塞队列
时间
时间
线程工厂
拒绝策略
核心参数的话,有 coreSize、阻塞队列、拒绝策略。
JVM 组成
内存上划分:
线程私有:Java 虚拟机栈,本地方法栈、Tlab、程序计数器
共享:堆,方法区,直接内存
增加 堆、栈 空间命令?
指定堆的最小内存-Xms,如-Xms2G</font
指定堆的最大内存-Xmx,如-Xmx5G
指定栈的内存大小-Xss ,如-Xss256k
MyBatis $、# 区别?
$ (字符串替换),直接替换 SQL 中的参数。
(占位符),预处理 SQL 中的参数。 自动为参数 加上 单引号,防止 SQL 注入。
使用 # 如何方式 SQL 注入?
使用 # 时,MyBatis 会自动为参数添加单引号, 并 防止 SQL 注入攻击。
SELECT * FROM users WHERE id = #{userId}
,当传入参数值为 1 OR 1=1
时:
- 使用 # 时,结果就是 SELECT * FROM users WHERE id = ‘1 OR 1 = 1’
- 使用 $ 时,结果就是 SELECT * FROM users WHERE id = 1 OR 1 = 1
MySQL 索引? B+ 树原理?
MySQL 索引有: B+ 树,Hash 索引,倒排索引。
Hash 索引是 Memory 中的索引,Innodb 默认会有自适应的 Hash 索引。
B+ 树特点:叶子节点,存放具体的数据。 非叶子节点,存放 索引。
由于 非叶子节点 只存放索引,所以 B+ 树最多 3 ~ 4 层。
查找时,二分查找到是哪个页,再在页上进行二分查找,找到是哪个槽。
定位到槽之后,遍历这个槽。
B+ 树 为什么比 B 树高效?
B+ 树 非叶子节点只存放 索引,一个节点存放很多索引,所以 B+ 树的层高是比较少的。
B 树 非叶子节点 存放 索引 + 数据,一个节点存放的索引少,层数高。
层数少自然就高效了。