1、jvm虚拟机:
2、mysql事务
3、复杂sql
4、数据量
5、kafka
6、集合源码 map
7、有序map
8、锁
9、项目描述
10、java8新特性
11、线程池
12、有序map LinkedHashMap
13、动态代理
14、对象类型的判断?
A:instanceof
15、Q:自定义注解 详见:https://www.cnblogs.com/dalaoyang/p/8657030.html
A:创建自定义注解与编写接口很相似,除了它的接口关键字前有个@符号。
@Target是java的元注解(即修饰注解的注解),这里的@Target({METHOD,TYPE})指可以修饰方法、描述类、接口(包括注解类型) 或enum声明。
@Retention是java中的运行时注解,可以划分为三类
1.RetentionPolicy.RUNTIME:注解不仅会被保存到class文件里,在jvm加载class文件之后仍然不会消失。
2.RetentionPolicy.CLASS:注解会被保留到class文件里,但jvm加载class文件时被遗弃,默认的生命周期如此。
3.RetentionPolicy.SOURCE:注解只会保留在源文件中,当java文件变异成class文件shi
@Inherited:允许子类继承父类的注解
@Documented:注解表明制作javadoc时,是否将注解信息加入文档。(添加时表示制作javadoc时将注解会加入其中)
自定义注解
@Documented @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Annotations {
long time() default -1;
}
16、Q:线程池 核心 最大线程数 达到核心之后如何创建 队列
A:https://www.cnblogs.com/waytobestcoder/p/5323130.html
17、Q:mysql数据库 隔离级别是多少
https://www.cnblogs.com/aiseek/p/8175849.html
1.READ UNCIMMITTED(未提交读)
总结:这就是事务还没提交,而别的事务可以看到他其中修改的数据的后果,也就是脏读。
2.READ COMMITTED(提交读)
总结:这就是小华的事务执行到一半,而小明看不到他执行的操作,所以看到的是旧数据,也就是无效的数据
3.REPEATABLE READ(可重复读)
总结:虽然读取同一条数据可以保证一致性,但是却不能保证没有插入新的数据
4.SERIALIZABLE(可串行化)
18、合理创建索引 索引类型
Mysql目前主要有以下几种索引类型:普通索引、唯一索引、全文索引(FULLTEXT)、 单列索引、多列索引、组合索引
19、Q:查看sql有没有执行索引
A:possible_keys
A在select窗口中,执行以下语句:
set profiling =1; -- 打开profile分析工具
show variables like '%profil%'; -- 查看是否生效
show processlist; -- 查看进程
use cmc; -- 选择数据库
show PROFILE all; -- 全部分析的类型
show index from t_log_account; ##查看某个表的索引
show index from t_car_copy; ##查看某个表的索引
-- 使用explain命令查看query语句的性能:
EXPLAIN select * from t_car_copy ; ##查看执行计划中的sql性能
EXPLAIN select * from t_car_copy where org_id = '3';
EXPLAIN select * from t_car_copy where 1=1 and org_id = '3';
20、Q:redis 默认端口号
A:6379
21、redis过期策略、过期数据(底层) 详见:https://blog.csdn.net/weixin_34292959/article/details/86364108
Redis三种Key过期策略
被动(惰性)删除、主动删除、maxmemory
22、Q:mybaties一级 二级缓存区别
A:一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的。
A:二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。
23、开发mybaties插件技术
24、springboot启动流程
25、Q:分布式锁实现方式
A:基于数据库实现分布式锁;
基于缓存(Redis等)实现分布式锁;
基于Zookeeper实现分布式锁;
26、接口,抽象类
抽象类:
1) 抽象方法,只有行为的概念,没有具体的行为实现。 使用:abstract 关键字修饰,并且没有方法体。
2) 包含抽象方法的类,就一定是抽象类。 使用: abstract 关键字修饰,包含抽象方法。 3) 抽象类不能直接创建实例。可以定义引用变量。
4) 抽象类只能被继承,一个具体类继承一个抽象类,必须实 现所有抽象方法。
5) 抽象方法和抽象类非常适合作为系统的分析和设计的工具。
接口:
1 接口:全部的方法都是抽象方法,全部的属性都是常量。 接口用来表示纯抽象概念,没有任何具体的方法和属性。
2 不能实例化,可以定义变量。
3 接口变量可以引用具体实现类的实例。
4 接口只能被实现(继承),一个具体类实现接口,必须使用全部的 抽象方法。
5 接口之间可以继承。
6 一个具体类可以实现多个接口,实现多继承现象,表示:
7 接口中的属性,默认是常量 public static final
8 接中的方法一定是:public abstract
9 实现一个接口,使用关键字implements, 实现实际上是 一种继承关系。接口和实现类是父子类型的关系
27、多态
多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。
28、arrayList底层AX_ARRAY_SIZE强转
29、arrayList和hasmap默认大小
10、16
30、SimDateFormat线程安全吗
不安全
31、spring aop原理
它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。
32、spring事务几种5
spring事务:
什么是事务:
事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败.
事务特性(4种):
原子性 (atomicity):强调事务的不可分割.
一致性 (consistency):事务的执行的前后数据的完整性保持一致.
隔离性 (isolation):一个事务执行的过程中,不应该受到其他事务的干扰
持久性(durability) :事务一旦结束,数据就持久到数据库
如果不考虑隔离性引发安全性问题:
脏读 :一个事务读到了另一个事务的未提交的数据
不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.
虚幻读 :一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.解决读问题:
设置事务隔离级别(5种)
DEFAULT 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别.
未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生
已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生
可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生.
串行化的 (serializable) :避免以上所有读问题.
Mysql 默认:可重复读
Oracle 默认:读已提交
33、spring ioc以及实现方式
34、mysql统计空列count 1 * 吗 单引号:在进行count()统计某列的记录数的时候,如果采用的NULL值,会别系统自动忽略掉,但是空值是会进行统计到其中的。
Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为NULL则不计数,而非NULL则会计数。比如我们看代码1所示,在Count中指定NULL(优化器不允许显式指定NULL,因此需要赋值给变量才能指定)。
35、左连接会走索引吗
不会
当你使用左连接的时候,数据库是从左到右按顺序全表扫描执行连接。
而内连接优化器会使用索引,使得查询速度提高
36、Java8垃圾回收机制
https://www.jianshu.com/p/db1d9235cc3b
标记-清除算法、复制算法、标记-整理、
37、描述秒杀系统设计,不用redis,高并发怎么处理
38、mysql行锁
https://blog.csdn.net/luzhensmart/article/details/81675527
39、单点登录设计
40、权限设计
41、离职原因
42、jvm内存模型、堆栈
43、集合、hasmap
44、线程池,参数
https://www.cnblogs.com/syp172654682/p/9383335.html
45、spring mvc注解
https://www.cnblogs.com/leskang/p/5445698.html
46、服务之间如何调用
47、es
48、redis
49、kafka多发、漏发
50、商品秒杀
51、spring cloud组件
52、支付
53、git命令
54、分布式事务
56、redis基本数据类型
57、springboot启动类注解
58、mybaties # $区别 mybatis动态order by使用$
59、线程什么周期
新建(New)、就绪(Runnable)、运
行(Running)、阻塞(Blocked)和死亡(Dead)五种状态
60、运行时和非运行时异常