日志框架
slf4j 日志门面 统一的接口
logback 日志框架 springboot自带的
使用 类上加上@slf4注解,打印信息log.info(“”,“”) 可以用{}占位符代替+
处理异常
1.自定义异常(状态码和信息)
2.全局aop处理异常 (controlleradvice+ExceptionHandler)
Java基础
抽象类和接口的区别:
- 抽象类可以有构造方法,接口中不能有构造方法。
- 接口中除了 static、final 变量,不能有其他变量,而抽象类中则不一定。
- 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。
- 接口方法默认修饰符是 public,抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!)。
- 一个类可以实现多个接口,但只能继承一个抽象类。
- 从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。
- 应用 抽象类能不能有方法体
== 与 equals的区别
- 如果两个引用类型变量使用==运算符,那么比较的是地址,它们分别指向的是否是同一地址的对象。结果一定是false,因为两个对象不可能存放在同一地址处。
- 要求是两个对象都不是能空值,与空值比较返回false。不能实现比较对象的值是否相同。所有对象都有equals方法,默认是Object类的equals,其结果与一样。如果希望比较对象的值相同,必须重写equals方法
为什么重写 equals 还要重写 hashcode?
维护hashCode方法的常规约定:值相同的对象必须有相同的hashCode。
如果重写了equals而未重写hashcode方法,可能就会出现两个没有关系的对象equals相同的(因为equal都是根据对象的特征进行重写的),但hashcode确实不相同的。
哪些集合是线程安全的
haspmap的原理
重定向和转发的区别
ArrayList 扩容机制分析
无参构造方法 默认容量是0 第一次扩展时10 以后每次扩展是1.5倍左右 10+10/2=15
数据库
oracle常用函数
Redis
1.Redis支持多种数据结构,包括字符串、哈希表、链表、集合、有序集合、位图、Hyperloglogs等。
redis项目里用的
redis面试题
五大value存储类型
序列化方式:
1.JDK
2.String
3.JSON
4.xml
常用的序列化方式
1.key的序列化和反序列化(String)
2.value的序列化和反序列化(Json)
技术的应用场景
Mysql
MySql执行计划(关键词 EXPLAIN)
EXPLAIN SELECT * FROM users WHERE id IN (SELECT userID FROMuser_address WHERE address = “湖南长沙麓谷”) ;
执行计划的各个显示内容。
id select_type table type(访问类型,SQL 查询优化中一个很重要的指标,结果值从好到坏依次是:system > const > eq_ref > ref > range > index > ALL) possible_keys key rows filtered Extra
explain 结果中的 type 字段,表示(广义)连接类型,它描述了找到所需数据使用的扫描方式;
system 最快:不进行磁盘 IO
const:PK 或者 unique 上的等值查询
eq_ref:PK 或者 unique 上的 join 查询,等值匹配,对于前表的每一行,后表只有一行命中
ref:非唯一索引,等值匹配,可能有多行命中
range:索引上的范围扫描,例如:between、in、>
index:索引上的全集扫描,例如:InnoDB 的 count
ALL 最慢:全表扫描
建立正确的索引,非常重要;
使用 explain 了解并优化执行计划,非常重要;
索引怎么用 数据量大不大 分库分表
慢查询
MySQL慢查询就是在日志中记录运行比较慢的SQL语句
myini文件中 主要是慢查询的定义时间(超过2秒就是慢查询),以及慢查询log日志记录
long_query_time=2 slow_query_log = on
分析慢查询日志
EXPLAIN
Spring
事务
Spring的事务管理机制实现的原理,就是通过这样一个动态代理对所有需要事务管理的Bean进行加载,并根据配置在invoke方法中对当前调用的 方法名进行判定,并在method.invoke方法前后为其加上合适的事务管理代码,这样就实现了Spring式的事务管理。Spring中的AOP实 现更为复杂和灵活,不过基本原理是一致的。
springboot扫描包的原理和顺序
springboot参数的校验
@Valid 通过给参数加一系列的参数进行校验 @NotNull(非空) @NotBlank(字符串非空) @NotEmpty(字符串不是0和集合不是0)
2.创建基类请求类,父类方法验证参数,子类去继承父类
常见面试题
1.Spring如何解决循环依赖的问题 https://my.oschina.net/zhangxufeng/blog/3096394
注解
Spring常用的注解
-
@Autowired
-
@Component
-
@Controller @RestController
-
@Service
-
@Repository @
-
@GetMapping @PostMapping 等价于@RequestMapping
-
@RequestParam @RequestBody
-
@Valid @NotNull(非空),@NotBlank(字符串非空),@NotEmpty(字符串不0和集合不0))
-
@CrossOrigin
-
读取配置信息 @value
-
@Import
-
@ConfigurationProperties @EnableConfigurationProperties @Configuration
-
@EnableScheduling(开启定时任务) @EnableAsync(开启多线程)
Mybatis常用的注解
-
@Mapper
-
@Select @Insert
Java常用的注解
- @PostConstruct
##hibernate常用的注解:
1.@Length(min=, max=) 验证字符串长度是否在给定的范围之内
微服务常用的注解:
- @FeignClient(value = “服务名”)
处理常见的 HTTP 请求类型
@ControllerAdvice
多线程并发编程
##Java中Volatile关键字详解
Java中Volatile关键字详解
aop和oop的区别
面向切面编程(aop)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。
在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用,例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码,公共的controller 实现createby等功能
设计模式
常见的设计模式:
-
工厂模式 :
1)简单工厂模式(静态工厂模式) 虽然某种程度不符合设计原则,但实际使用最多。
2)工厂方法模式 不修改已有类的前提下,通过增加新的工厂类实现扩展。
3)抽象工厂模式 不可以增加产品,可以增加产品族。
应用场景:
1)JDK中Calendar的getInstance方法(静态工厂模式);
2)JDBC中Connection对象的获取;
3)Hibernate中SessionFactory创建Session;
4)Spring中IOC容器创建管理bean对象;
5)XML解析时的DocumentBuilderFactory创建解析器对象;
6)反射中Class对象的newInstance()。
-
策略 观察者
spring主要用了哪几种设计模式
工厂设计模式
aop
3.aop
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1.面向切面编程提供声明式事务管理
2.spring支持用户自定义的切面
aop框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
编码习惯:
AOP ResultBean
###1.索引失效的7种情况
https://www.cnblogs.com/liehen2046/p/11052666.html
接口性能提升
1.使用@Async异步处理提高响应速度 https://blog.youkuaiyun.com/weixin_34186931/article/details/89564480
HTTP
http介绍
https://mp.weixin.qq.com/s/IArRC3Qf5MWq0uVGrsgzxw
加密方式:1.对称加密 2.非对称加密 3.混合加密 4.摘要
HTTP面试题汇总
- Get和Post区别
- HTTP与HTTPS区别
- HTTP通信过程
- 游览器输入一个地址。到页面展示中间经历了哪些步骤?
- cookies机制和session机制的区别:
- HTTP请求报文与响应报文格式
- 一次完整的HTTP请求所经历的7个步骤
- HTTP优化方案
- HTTP优点缺点
- URI和URL的区别
- 如何判断是否为http
- HTTP 1.1引入分块传输编码提供了以下几点好处
- 长连接与短连接的区别,以及应用场景
- 常见web攻击
- 站内跳转和外部重定向有何区别
- HTTP的keep-alive是干什么的?
- 关于Http 2.0 你知道多少?
- 讲讲304缓存的原理
- HTTP与RPC异同
- 从传输协议来说
maven
指令
1.maven上传snapshot指令
mvn -X deploy:deploy-file -DgroupId=permission-api -DartifactId=permission-api -Dversion=1.0-SNAPSHOT -Dpackaging=jar -Dfile=C:\Users\11398\Desktop\permission-api-1.0-SNAPSHOT.jar -Durl=http://47.105.181.65:23004/nexus/content/repositories/snapshots/ -DrepositoryId=Snapshots
maven打包
1.非springboot项目
https://blog.youkuaiyun.com/branwel/article/details/102528659
异常处理
1.建立统一返回类,定义错误码,定义成功和异常的返回格式
2.建立统一异常处理类继承RuntimeException,自定义业务异常
3.service层统一抛出异常,controller层统一返回异常信息
最近在做什么项目 简单说说
单元测试
docker
引入swagger不需要引入swagger静态页面和相关css,js
前端怎么写 浏览器的请求内容 postman测试内容 后台怎么写
@requestbody application/json 前端json postman json
@requestparam 一般用于简单参数!,二维数组这种不好用 form-data、x-www-form-urlencoded 前端用qs 浏览器中 formdata
功能模块
短信发送实现方式
单发短信
1.校验调用系统是否在sms中注册
2.单发短信 ( 腾讯云单发短信) 调的腾讯云的SDK
3.记录入库
4.保存发送日志
群发相同短信内容
1.校验调用系统是否在sms中注册
2.群发短信 ( 腾讯云发短信) 调的腾讯云的SDK
3.遍历记录入库
4.保存发送日志
设置可见/不可见字段:
- 语法:
alter table 表名 modify (字段 [ invisible | visible ]);-- 可见:visible , 不可见:invisible
注意:只有在Oracle12c后的版本才有。可在创建表,设置类型的时候,加上可见/不可以设置。
如果设置不可见状态的列,在执行"desc 表名"和"select * from 表名"语句时是看不见设置的列,可以查看"user_tab_columns"表,查看某表的所有列(包括已设置不可见列)。以及在执行操作语句也会忽略被设置不可见列,如"insert into A表 values (值1,值2……)"被设置不可见列是无法插入数据。
复制对象 --huttols 的方法。
RUN_YEAR 因库中时间是0点00分00秒 所以开始时间是 如库中时间是2021-1-1 那开始时间就是2020-12-31 23:59:59