前言/适用范围
适用人群是中级工程师,对应薪资15 - 20k
面向面试学习方法
- 知识大爆炸的年代,尤其是gpt问世后,问题远比答案更重要,而一份完善的、以问题形式梳理出的知识体系,并配备详细的参考文章,价值更是难以估量的
- 有了自己以问题为模版的大纲,可以抽时间对着问题自己讲一遍(一定要说出来,不要默念),就像是在和面试官对线那样,相当于升级版的费曼学习法,简单实用,这样很容易发现自己理解薄弱的知识点,且在模拟回答问题时你的大脑也会自然而然的关联到其它问题,效率非常高,效果很好
- 除了看博客,问gpt外,亲自实验以及看源码也是获取知识及加深印象的关键点,当然,直接看源码会很吃力且效率很低,需要结合讲解源码的博客+debug源码,最后把自己的实验结论整理成博客or笔记,学习源码一定不要陷入细节的研究,一定要由表及里,而表层的学习一定要利用好博客 & gpt,只有精通表层了才有资格去细节研究
- 很久没有复习的知识,此时已经生疏了,不要上来就去读一遍,而是先从大脑中过一遍,想不起来的,或者想错的,就是之前没有掌握扎实的内容,尽快巩固一下
- 笔试题尤其是算法题,要学会分类,比如根据涉及到的数据类型划分,数组、链表,树,图…根据解题思想划分,比如动态规划、贪心算法、滑动窗口、双指针,每一种类型的题目间隔3-6个月挑选几个有代表性的练一练手,保证解题思路和刷题手感
常见笔试题
通常是easy或者medium中难度偏下的算法题、线程题相关的
线程题
- 手写一个单例模式
- 手写一个简化版的java定时任务
算法
算法题,只要把一类算法题刷明白,20k以内的工作算法题目应该都能顺利解决
1、排序算法相关的,比如最经典,难度比较低的几个,一定要做到滚瓜烂熟,
2、滑动窗口思想,比如
3、链表题目
java基础语法
1、this和super,概念、构造器中的用法、普通方法中的用法、静态方法中能否出现,抽象类中出现是指什么
2、面向对象三大特征
3、try-catch-finally,笔试题的形式考察,返回顺序、异常链、拦截器/aop异常捕获增强方法
4、java基础数据类型、Intger的拆箱与装箱
5、String不可变性、基本结构
7、静态:为何静态方法中不能出现非静态属性/方法
8、接口与抽象类的区别 本质关系与概念、构造方法
9、流概念、分类(方向、功能)、既然java中有自动GC的功能,那么为何在finlly块中还要再去手动close
10、泛型:
- 泛型的生效时机?泛型作用范围?为什么泛型不能用于静态的属性和方法?
- 什么是泛型擦除?既然已经泛型擦除了,那么如何保证取出
- 什么是泛型方法,使用泛型作为入参的是泛型方法吗?这与真正的泛型方法有什么不同呢?
- 上界 & 下界泛型通配符用处是什么?使用方面有什么限制?
- 从增强方法方法复用性角度来看,使用泛型和使用Object的区别是什么?
- 泛型方法应用案例
- 使用泛型的好处是什么?
java IO
- io的概念、分类方向、功能、类型
- 流的概念、三大特征,对比块
- 输入流与输出流、字节流与字符流、节点流和处理流与缓冲流
- 案例实操,程序读取文件、 程序写入文件、 程序实现文件复制
java集合
ArrayList和LinkedList简介和区别 底层、查询、顺序添加、插入、扩容(原理)、实际应用(增删改查扩容角度)
- 基础问题:hashmap数据结构、hash算法实现细节、插入算法、扩容装载因子(0.75平衡扩容和数据聚集)、扩容的触发机制、底层实现原理、
尾插法 => 头插法线程安全问题、红黑树的特点、树化条件、hash冲突定义 - HashMap的底层数组长度为何总是2的n次方?①插入算法(方便用计算)②扩容时用到③尽量保证结点均匀
- jdk8新特征?红黑树(解决查询效率,对比avl)、尾插 => 头插法、节点Entry => Node
- jdk8之前的线程安全问题
- 如何高效运算保证均匀性的?
- hashmap怎么解决哈希冲突的?hash冲突定义,链地址法(数据结构)+红黑树(树化)、插入算法(保证均匀)、扩容机制
- hashmap线程安全问题有哪些? jkd8数组节点被覆盖、jdk7扩容过程中线程问题(头插法 => 尾插法)
- 说一下什么是hashmap的快速失败机制?从hashmap迭代器底层数据结构实现原理角度说一下快速失败机制实现的意义是什么
LinkedHashMap
相比于HashMap有哪些能力的提升?
TreeMap
concurrentHashmap
hashMap是线程安全的吗?存在哪些线程安全问题,concurrentHashmap是如何保证线程安全的呢?
java线程
基础知识
Runnable是什么,Runnable是什么底层原理,重写Thread和实现Runnable这两种方法有什么区别?
Callable是什么?和Runnable的区别底层实现原理是什么?
FutureTask是什么?有什么缺陷吗?如何弥补这种缺陷?
wait和sleep区别是什么?你在开发中怎么使用的/在源码中有接触过吗?wait和notify为何这两个方法一定要在synchnorzied方法或代码块中执行呢?
你开发中遇到过线程死锁的情况吗?(分布式锁未使用lua的案例)
线程安全问题定义与起因(内存安全),常见的线程安全情况、i++、集合类hashmap、stringbuilder、局部变量为何线程安全
线程安全三要素与atomic原子类、volitate的关系
completeFuture
- 与 Future 有什么区别,什么是“非阻塞”操作
- 请解释 supplyAsync 和 runAsync 方法的不同之处
- 在使用 thenApply 和 thenCompose 时?CompletableFuture 如何实现多个任务并发执行?
- 请谈谈它底层的实现机制
sychronized
- sychnorized是什么?有哪些用法?
- sychnorized用于修饰普通方法/静态方法的区别是什么?sychnorized代码块参数中使用实例/this,和class类对象的区别是什么?什么场景下必须使用class类对象(至少说出两种,参考DCL实现代码)?
- sychnorized方法和sychnorized代码块的区别
- sychnorized用于修饰方法底层原理是什么?为什么Java中任意对象可以作为锁?notify/notifyAll/wait等方法为何存在于顶级对象Object中?
- sychnorized用于代码库底层原理是什么?
- 说一下synchronized等待与唤醒机制,synchronized的可重入性
- synchronized练习题
ThreadLocal与jvm
threadlocal基础
- ThreadLocal是什么?是如果实现这一功能的/它的底层是什么(附带说明它的set/get/remove)?,对于一个线程而言,它的threadLocals属性最多存储一个键值对是吗?
- ThreadLocal与Synchronized的区别
- ThreadLocal什么情况下会被使用?常见使用场景有哪些(技术框架与个人在业务开发中使用案例都要说一下)? 说一下ThreadLocal在事务实现方面的应用,ThreadLocal在保障Spring线程安全的应用
threadlocal进阶
- JAVA基础 - 强引用、弱引用、软引用、虚引用
- 为什么ThreadLocalMap的key要使用弱引用?使用了弱引用还会存在ThreadLocal还有内存泄漏的风险吗?如果没有使用线程池,会有内存泄漏风险吗?使用了静态threadLocal,弱引用还有意义吗?会有内存泄漏风险吗?如果没有使用弱引用,会是什么场景?
JMM
- JMM与JVM区别
- JMM内存模型,什么是线程工作内存与主内存的?
- 练习题?如果使得线程间数据修改能够互相感知?
- voliatile
- 一个map对象,作为局部变量会存在线程安全问题吗?
CAS
- i++是线程安全的吗?CAS如何解决i++安全问题的呢?
- Atomic类的的底层原理是什么?说一下Atomic类中的value属性是如何使用的?CAS的四大核心参数是什么?
- CAS的优缺点分别是什么/什么时候不适合使用CAS?为何CAS相比于synchronized性能会更好?ABA会造成哪些问题?如何解决?
线程池
- 什么是线程池?使用线程池有哪些优势?
- 说一下线程池七大核心参数,如何计算核心线程数的大小呢?线程池执行任务的流程是什么? 阻塞队列可以用默认构造参数吗/阻塞队列可以设置很大吗?阻塞队列大小可以是0吗?核心线程数大小可以为0吗?
- 什么时候回触发拒绝策略?拒绝策略都是有哪些?AbortPolicy用于重试的时候有哪些注意点?RunPolicy的优缺点是什么?可能会存在无论并发量多高都不会触发拒绝策略的场景吗?
- 核心线程数可以为0吗?如果核心线程数为0线程池要如何设计?适用与那种场景?
- 你在实际开发中是如何使用线程池的?(什么业务场景适合使用线程池)
- 线程池拒绝策略是CallerRunsPolicy,但当触发拒绝策略的时候,我的主线程已经执行完毕了怎么办?
- 如何保证服务重启的时候,线程池中正在执行的任务和排队队列中的任务不丢失?
分布式环境线程安全问题
- 概念是什么?为什么要引入分布式锁?
- 分为哪些类型?你项目中使用到的分布式锁的场景的哪些?(业务接口、mysql缓存击穿,对数据实时性要求比较高的mysql,redis双写一致性)?
- 它的实现原理是什么?可能存在什么问题?有哪些需要注意的地方?
线程 - 提升
java设计模式
工厂模式
- 简单工厂模式优点有缺点是是什么?如何改进的?
- 工厂模式优点有缺点是是什么?如何改进的?
- 抽象工厂模式是如何解决工厂模式缺点的?
- Spring中是如何应用工厂模式的?
单例模式
- 什么是单例模式?如何实现单例模式?单例模式分几种类型,区别是什么?
- 单例模式存在线程安全问题吗?如何解决单例模式的线程安全问题?直接使用sychnorized修饰方法会有什么问题吗?如何改进?
- 使用了double check后还会有什么风险吗?为什么?怎么办?
- 单例模式会被破解吗?
- 使用枚举完成单例模式有什么优势吗?此外还有单例模式还有哪些实现方式
单例模式适用于什么场景,有哪些应用案例?
策略模式
- 策略模式都有哪些模块,功能分别是什么?
- 策略管理器通常怎么实现?
- 策略模式使用流程是设么?你项目中如何使用策略模式
代理模式
- 静态代理模式的概念是什么?代理模式的结构是什么?有什么缺点吗?
单例模式
- 聚合、组合、继承
- 简单工厂、工厂方法、抽象工厂,各个模式的优点与缺点,实现细节层层推推进
- 代理模式,jdk动态代理源码分析
- 为被代理类Xxx创建XxxInvocationHandler
<T>
,其中该类中一个属性持有被代理类对象,并通过构造器赋值,重写invoke方法,该方法三个入参,分别是proxy,interfaces的class类型、invocationHandler,方法中通过入参的method.invoke去执行核心业务方法,而后在核心业务逻辑的四个位置,做增强处理,该方法其实本质是通过在类运行期间在编译期间生成字节码文件转为java类$
Proxy(继承自Proxy,同时实现被代理类的接口),该类(静态)属性是Method类型,在静态方法中通过反射获取被代理类中的全部放的method并赋值给属性,$
Proxyz中通过构造器入参将invocationHandler赋值到父类,$`Proxyz中会有被代理类中的同名方法,但方法内容清一色是通过this.invocationHandler.invoke(this,method,null),即去调用invocationHandler的代理方法
- 为被代理类Xxx创建XxxInvocationHandler
spring面试题
- 作用是什么?执行时机是什么?
- 使用@Bean标识的工厂方法会重复创建对象吗?底层原理是什么?
- 容器启动过程中对该注解的处理逻辑是什么?最终生成一个什么样的bean?cglib动态代理?实例化配置中的bean时的过程是什么?
- 执行时机
- 说一下该注解在容器启动过程中处理流程
- Spring为什么采用ASM读取字节码的方式解析类,而没有采用Class字节码解析?
- 概念总览,创建,属性填充/依赖注入,初始化,使用,销毁
- 创建的三种形式?如何推断构造器方法?工厂方法举例?
- 属性填充?@AutoWired,@Resource
- 初始化流程?
- 依赖注入分为哪几种类型?
- @AutoWired是的查找策略是什么?
- @AutoWired注入列表属性时,想控制列表顺序该如何实现呢?
- @Resource的注入策略是什么,与@AutoWired的区别
- 有多个实现的子类,是如何选择注入对象的? 我们可以通过@AutoWired中指定beanName来根据名字注入对象,这与@Quailifiers区别是啥
- 什么是循环依赖?如何解决?Spring
- 一二三级缓存的作用分别什么是什么?从缓存中取对象的策略是什么?它们是如何搭配解决循环依赖的呢?存入三级缓存的是什么东西?二级缓存可以忽略吗?
- 循环依赖不适用于什么场景?(构造注入,@Asyn),why?
Spring AOP
- 什么是AOP?应用场景?aop重要概念、切面、切入点,通知(五大通知方法),连接点,代理、目标对象、切点、植入
- 通知方法的执行顺序(分正常和异常情况下)
- 从aop源码角度说一下上述流程
- beanDefition是什么?通常是在哪里生成的?开发者如何去自定义修改它?
- BeanFactoryPostProcessor的执行时机,功能是什么?
- BeanPostProcessor的执行时机,功能是什么?
- InitializingBean执行实际?实际开发中的应用?策略模式的实现相关
- aware执行时机,功能是什么?应用距离
- 事务分为哪两种?声明式事务的
- 事务的传播机制,默认是哪个?重点说一下REQUIRE和REQUIRE_NEW, 对这种传播机制分析如下场景,事务方法a调用b①a中抛异常,b中不抛异常②a中抛不异常,b中抛异常
- 事务失效的情况,分别从AOP机制、多线程调用场景、Spring自身机制
- 从线程安全三要素角度去说一下Spring是否线程安全
- Spring又是如何解决线程安全的?(三个角度①涉及到共享资源②Spring事务关联③从容器中获取bean)
Spring中的单例和传统单例模式区别
Spring中的beanFactory是什么?启动类源码中的执行流程是什么?它的作用是什么/为何不直接把bean注入Spring呢?
MapperFactoryBean是什么?启动类源码中的执行流程是什么?有什么优势和劣势?如果弥补劣势的?
jvm
类加载相关
- 详细说一下类加载的过程,包括编译、加载、链接、初始化过程
- JVM虚拟机加载.class文件类信息到内存后生成了哪些内容?class对象是存储在哪的?类的元数据是什么?存储在哪?为何不存储在class对象所在的堆上呢?
- 静态变量赋初始值和赋值的时机是什么?
- 触发类加载的操作有哪些?其中哪些会触发初始化?哪些不会触发初始化?import一个类是不是意味着类加载器会加载这个类?如果我使用了一个类的class对象,那么这个类一定会被加载?调用类的静态属性一定会触发类的初始化吗?
- 说一下ClassNotFondException与ClassNoDefineError的区别,分别是发生在什么时期?区别是什么?举个开发中的实际场景?ClassNotFondException与ClassNoDefineError一定会同时出现吗?
- 关联问题: ASM读取.class文件和jvm字节码解析区别是什么
- 配置文件accessSecret2一定是test2吗?如果accessSecret2是静态属性呢?
@Value("${bos.accesskey2}") private Long accessSecret2 ="test2";
- static fianl一定只是在链接阶段赋值吗 (提示:注意区静态fianl的字面量/数值类型&变量的)
- 双亲委派机制是什么?为什么要这么设计?你的项目中有利用双亲委派机制的情况吗?
- 你知道有哪个场景破坏了双亲委派机制吗?
jvm内存模型
- 哪些结构是线程共享的?哪些是线程独享的?
- 虚拟机栈是什么?基本单位是什么?栈帧的基本组成是什么?每部分功能分别是什么?
- 方法区概念,功能,jdk8之后hotpot虚拟机把方法区的实现由永久代变成了元空间,区别是什么?方法区会出现OOM吗?什么情况下出现OOM
- 详细说下堆的结构,为何那么划分?
- 栈、堆、方法区的内存泄露与OOM概念、与它们的常见的情况
- 内存泄露定义?常见的内存泄露情况(5种)
- (笔试题)判断如下这些引用所执行的实例存储在什么地方
jvm模型和java内存模型的区别是什么?
java对象创建的过程
- 详细说一下java对象创建的过程
<inti>
方法的作用是什么?- new关键的作用的是什么
java对象的组成
由哪些部分组成?对象头主要有哪些部分组成、对象标记由哪些组成?填充数据是什么?如何计算?
GC篇
- GC的角度堆内存分为哪些区域?GC的整体流程?分带的意义是什么?什么情况下对象会直接分配到老年代?
- 这些区域的默认比例是什么?可以通过什么命令调整?按照什么规则调整?如何调整是最优解?
- 可达性发现算法的概念?GC ROOT都包括什么?被老年代某个实例所引用的对象会被垃圾回收吗?栈中的引用被回收,它所引用的对象会被垃圾回收吗?
- 常规情况创建从堆内存的角度分析下,对象创建的流程,如果是创建一个比总内存还大的大对象呢?GC的完整流程是什么?
- String通过+号拼接和通过StringBuilder拼接哪个好?还有优化空间吗?
- 清理年轻代和老年代的垃圾回收期分别都有哪些?
- 大体说一下CMS垃圾回收算法的流程?该算法的试用场景、优缺点是什么?CMS对老年代做回收,Remark阶段仅扫描老年代是否可行?
调优篇
调优命令
常用的jvm命令有哪些?(设置新生代、老年代大小,伊甸园占新生代比例,新生代占总内存比例)
- 当Survivor中的对象的年龄达到15的时候,将会触发一次 Promotion 晋升的操作
- 强引用、软引用、弱引用
- 线程安全与jvm内容
- 虚/非虚方法、动态连接、静态连接
- this和super,重载与重写、特殊情况private/final/abstract指代,静态上下文关系类主动/被动加载案例,java构造方法底层原理与this/super关系,子类构造器初始化
加载父类的流程,jvm底层原理、clinit和init的关系,java代码执行顺序
String与jvm
String的定义,String内存模型,解释String的不可变性,和final有关吗?为何要设置为final,如果不是final会出现什么问题?
kafka
- 项目中为何使用kafka
- 说一下基础架构topic,partition,leader,follow,productor,consumer,broker分别是什么?分区个数设置为多少个最好?分区过多与过少的坏处? 消费者线程与分区的关系是什么?消费者数目设置为多少最好?副本数量的规则、分区与副本关系
- 生产者是如何向kafka推送数据的?请求ack机制是什么?丢消息问题、消息重复问题/幂等性与事务机制,数据乱序,到底怎么样数据才是安全的 => 消息确认问题诞生的ISR机制
- 消费者服务器是如何从kafka拉去数据的?kafka如何确定消费者端已经成功消费?什么情况下会导致重复消费数据?什么情况下会导致丢数据?有哪些方法解决这些问题?
- kafka与zookeeper的关系,存储关系,服务器节点启动流程的关系、启动后如何生效?去zookeeper化如何进行的(消费者端偏移量)
- kafka底层存储文件机制
- 消费者pull/push
IO模型与Netty
ES
-
概念:基于 Lucene 的 Restful 的分布式实时全文搜索引擎,基于倒排索引,即每个字段都被索引并可被搜索,可以快速存储、搜索、分析海量的数据
-
基础架构
-
倒排索引
-
常用api总结下
-
text 和 keyword类型的区别
-
query 和 filte
-
r 的区别
-
es数据写入与读取流程
mysql
jdbc
jdbc是用来做什么的?
什么是sql注入?sql注入的原理是什么?如何解决sql注入?
mysql基础
group by,order by,limit,in,left join… 语法部分统一挪到索引部分讲解
count(*)/count(列明)/count(1)/count(0),区别,每个命令最适合的场景
详细介绍下四种常见连表的方式?左连接后的结果集是哪部分数据?如何只获取主表的结果集?在有外键约束的情况下通过外键连表查询呢?
分别讲一下mysql范式,第二三范式比较像,能说一下他们的区别吗?2NF和3NF的区别文章说的不够清楚,参考下面我发表的评论
char和varchar区别? 如何选择
varchar类型的字段,能插入字符型吗?能使用
partition by
基础语法题
跨多表的字段查询:三表连接查询/表连接查询+子查询集合 join A ON B where A.id = B.id
按xxx统计后以统计条件为:分组查询语句group by、结合having和count等聚合的关系
一个表内一个对象的某属性进行比较:单表拆分为连在一起的双表,需要对比的两字段被练成一行用于比较,通过两个子查询后通过where获取到连接表,连接表中有了这个
mybatis
批量插入相比于循环插入好处有哪些?
#{}和${}的区别是什么?
索引、性能调优相关
-
什么是索引?索引的好处与代价分别是什么
-
说一下索引B+树的结构?三层B+树能存储数据的上限是什么?可以使用avl树或者B树代替B+树吗?可以用hash代替B+树吗?B+树为何擅长范围查询?
-
主键的选择有哪些限制?为何不能过大?为何不能用随机数?为何要唯一性、非空性?
说一下外键索引、唯一性索引,外键索引一定会提高查询性能吗?
联合索引的好处是什么?如果没有联合索引是什么情况?缺字段导致索引失效、范围查询导致索引失效的原理是什么?联合索引对or语句有效吗?如果我们想对or语句创建索引要怎么做?
模糊查询为何导致索引失效,底层原理是什么?模糊查询一定会失效吗?如何解决失效问题?
说一下order by的原理,参考sql如下,order by索引失效的场景有哪些?如何针对此类sql创建高效索引?参考sql如下,说一下六种加索引的方法(无索引,只对name加索引,只对city加索引,对name和city加索引,对name,city以及select的字段加索引,对city和name字段加索引)
select city,name,age from t where city = '杭州' order by name limit 1000;
说一下group by的原理?group为何会导致文件内排序与临时表?,参考sql如下
select city ,count(*) as num from staff where age> 30 group by city;
说一下limit原理,为何不能非叶子快速定位呢?
文件内排序与使用临时表的定义是什么?什么情况下会出现这种呢?
适合创建索引的情况有哪些?不适合的有哪些?(11种适合,7种不适合)
还有其他索引失效的场景吗?列举一下,失效的原理是什么?你该如何解决这些索引失效问题?
- 联合索引,字段缺失、范围查询导致字段部分失效,对于OR条件失效
- 设计到group by/order by 索引顺序不正确也会导致索引失效
- 模糊查询导致索引失效
- 使用函数或计算导致索引失效
- 筛选条件字段与实际字段类型不一致
in和exists区别,范围查询
innodb和myisam的区别、锁 => 事务 =>外键=>行数统计、聚簇索引数据结构 =>存储结构=>存储文件 =>对主键的要求、全文索引
mysql锁
为何只有 InnoDB 引擎才能支持行锁,而myIsam不可以呢?是因为他们底层数据结构不同吗?
事务之间是存在互相影响的可能性吧?(结合mysql的四种隔离级别与)
mysql表锁与行锁的区别是什么?
读写锁的定义是什么?加了读锁的数据能被修改吗?加了写锁的数据能读吗?
常见的并发问题有哪些?分别对应mysql哪些隔离级别?这些隔离级别采取了什么措施去解决这些问题?
事务在读取记录的时候需要获取 S 锁吗?
平时用过 InnoDB 的表锁吗?行锁又细分为哪几种锁?
用表锁的时候,那表锁和行锁之间不是会冲突的吗?如果检测冲突的呢?
那间隙锁之间会不会冲突?
什么是插入意向锁?
锁定读与非锁定读
四种隔离级分别是如何实现的?(重点是说明可重复读)
RR级别是否已经解决了全部的并发问题(是否解决了幻读)?
innodb和myisam锁机制的区别?为何innodb能支持行锁的底层原理?使用行锁的注意点?
MVCC
- MVCC的概念,用来解决什么问题?
- 快照读和当前读区别
- 说一下MVCC相关的重要概念(事务版本号、版本链、隐藏字段、undo log),undo log是什么?有什么功能?增删改操作对undo log的影响是什么?
- ReadView的概念,trx_ids、low_limit_id、、up_limit_id、creator_trx_id分别是什么?如何确定一个读操作需要读取哪个版本的数据呢?
- ReadView适用于哪些隔离级别?创建ReadView的时机?可重复读和读已提交是如何利用MVCC来解决并发安全问题的
- MVCC能否解决了幻读问题呢
实际场景分析题
SELECT * FROM yes WHERE name = 'xx' FOR UPDATE;
插入语句为
insert into yes (name) values ('xx')
insert into yes (name) values ('aa')
那么如上的插入语句可以插入成功吗?使用行锁有什么注意点吗?(提示:分别要考虑name字段是带索引和不带索引的情况)
2、聚簇索引等值查询,表中查询命中与未命中的情况下,RC与RR隔离级别下的加锁情况, 参考sql如下
UPDATE book SET score = 9.2 WHERE ID = 10
RR级别下修改没有命中,不同的加锁场景分别是为了解决什么问题?
3、二级唯一索引等值查询,查询命中与未命中的情况下,RC与RR隔离级别下的加锁情况
UPDATE book SET score = 9.2 WHERE ISBN = 'N0008'
不同的加锁场景分别是为了解决什么问题?
4、 二级非唯一索引等值查询,查询命中与未命中的情况下,RC与RR隔离级别下的加锁情况
UPDATE book SET score = 9.2 WHERE Author = 'Tom'
5、 无索引,查询命中与未命中的情况下,RC与RR隔离级别下的加锁情况
- 二级非唯一索引等值查询,查询命中与未命中的情况下,RC与RR隔离级别下的加锁情况
6、插入数据时的加锁情况
mysql并发问题、事务隔离级别、锁
* 行锁原理:RC/RR级别用id主键列单列与范围操作?RC/RR级别用二级唯一索引列单列/范围操作?RC和RR用二级非唯一索引单列/范围操作?RC和RR用非索引单列/范围操作
* 表锁存在的意义/用法?行锁存在意义/有点?
* 间隙锁要解决什么问题?特点是什么?为何伴随死锁?如何解决死锁?插入意向锁要解决什么问题?
间隙锁类型划分:唯一索引的间隙锁和普通索引的间隙锁区别、普通索引又要划分尾插和随机位置插入的区别?
* 死锁
* 锁结构?
- mysql分表分库
- 垂直分库概念
- 垂直分表概念、案例、
- 水平分表概念、案例、方案
- 额外
- mysql和es区别:交互式条件查询 => mysql无法动态创建索引,模糊查询 => mysql不支持全模糊和左模糊、存储非关系型数据 => mysql只能支持关系型
疑问点:RR级别二级唯一索引,未命中,超出索引最大值范围n为何要在二级唯一索引 (n,+oo)加锁?
RR级别使用主键索引单行查询n位于主键值a到b未命中,为何在区间(0,a),(a,b)加间隙锁?
RR级别使用主键索引做范围查询,小于n的范围,mysql中大于n的临间值n2,为何会有(n,n2]的临建锁
mysql分库分表
分库分表的目的?如何分表分库?
分库会带来什么问题呢(分布式事务)?
分表的两种方式?
常见的分片算法有哪些
说一下相关核心概念
- 分⽚键
- 数据节点
- 逻辑表/真实表、物理表
Redis
数据结构与每种结构的用法
Redis事务
缓存击穿、缓存雪崩、缓存穿透
缓存击穿的概念,解决方案,解决方案中可能存在死锁?通过设置过期时间解决死锁注意点有哪些?增加过期时间可以完美解决死锁问题,但这会不会导致其它问题吗?
缓存穿透概念,解决方案
缓存穿透的概念, 解决方案
redis中setnx命令的底层原理是什么?有什么应用场景? 原生的setnx存在哪些问题?
热点key定义、如何发现(服务器代理层日志、设计预期、经验)
redis与mysql双写一致性问题
更新mysql数据时,你是选择删除缓存还是更新缓存?先删除缓存后修改数据和先修改数据再删除缓存有什么区别呢(答案看评论区)?先删除缓存后修改数据会存在较高的脏数据风险吧?如何解决这个风险呢?
redis实现分布式锁(同上)
布隆过滤器
底层实现原理是什么?有那些应用场景?布隆过滤器可以用于数据库索引优化,具体来说是如何操作的?可以删除已经插入的元素吗?如何扩容?
分布式微服务
- springboot和springcloud区别
- 利用springboot开发简便性、服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控
- 定义,多个服务多进程(1对1)
maven
九大生命周期
父项目遵守的规范
- properties + dependicesManagment、包括javaversion和projectversion,
- 继承springboot
- modules
各个标签的左右是什么?(dependincesManagment和dependinces)规范性的意义、不规范的代价
①版本号不统一,修改困难,不同版本号jar包api差异大,处理起来较为影响开发效率
②层级不明确:容易造成jar包重复、不好管理天然的jar包冲突,比如tomcat-embed和sevlet-api
6、网络模式
7、netty框架介绍
8 redis集群与,未送达分布式存储与部署
es/网站数据访问量
高并发写入excel如何做规范
实际开发
基本合法性校验、保障 ,自己处理过那些空指针异常,结合之前笔记做下完善,
接口入参,string、collection等集合方面的处理