- 空指针异常发生哪几种
字符串变量没有初始化
对象的值为空,但是没有判空,就拿来用了。
- Springboot统一异常处理(具体见:https://blog.csdn.net/qq_31293575/article/details/81354918)
- 首先定义一个globalexceptionhandler
- 然后定义过滤器拦截exception异常(统一捕获)
- 如何进行异常处理
1.如果异常在try/catch语句中,捕获到然后页面转发到友情提示界面,后台打一个log(模板引擎这种)。如果是前后分离,就是返回一个异常的状态码,前端自行提示错误,后台打一个log。(catch的是业务异常)
2.如果异常不在try/catch内,就是统一异常处理捕获了,然后转发到友情提示界面,后台打一个log
- 怎么写线程
创建线程:定义Thread子类、重新run方法、创建Thread子类对象、调用线程对象的start方法。
实现Runnable接口,实现run方法,用new thread.starter方法启动。
线程是操作系统进行运算调度的最小单位。
一个进程可以有很多线程,线程是操作系统进行资源调度的基本单位,线程是操作系统进行运算调度的最小单位。
- synchronized
当synchronized用来修饰静态方法或者类时,将会使得这个类的所有对象都是共享一把类锁,导致线程阻塞,所以这种写法一定要规避
无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。
每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。
实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
- 单例模式实例、哪些设计模式
spring中容器管理bean就是单例模式
单例模式、工厂方法模式、抽象工厂模式。
- 集合:
List、map、set
list:有顺序、可以重复。
map:键值类型存储,。无顺序、键不能重复
set:无序、不能重复
- 定时任务
- quartz
- scheduling
- 线程池、连接池
连接池:创建和管理连接的缓冲池技术。
线程池:当并发的线程很多时,频繁的创建线程和销毁线程会浪费资源,需要重复利用线程,然后引入了线程池技术。
- 延迟加载
真正需要数据的时候,才真正执行数据加载操作。
mybatis中可以使用association实现延迟加载。
- 消息队列(activeMQ)
例子:在用户进行注册操作的时候,我们首先向数据库保存用户信息,成功后,把成功消息发送到队列中去,验证码系统会监听消息,一旦接收到消息,就会给该用户发送验证码。
如何防止重复发送消息:增加消息状态表,每次处理消息之前,都去状态表中查询一次,如果已经有相同的消息存在,那么就不处理,防止重复发送消息。
如果消息发送失败怎么办:activemq有两种订阅方式:点到点形式和发布订阅模式。
- 跨域
springboot中使用cors协议解决跨域问题。
添加配置类,进行全局的跨域配置。
- 显示日志最后指定行内容
tail –n 20 文件名
- 查看当前CPU运行情况
top/free
- 索引
为查询的字段建立索引,其实就是为该字段进行排序
应该给哪些字段建立索引:
- 经常需要搜索的字段添加索引,可以加快搜索速度。
- 为外键添加索引,加快连接速度。
不应该为哪些字段添加索引:
- 记录比较少的字段不应添加索引
- 对大量重复的字段不该添加索引
实际添加索引操作:
1.normal、unique、fulltext类型进行选取
- 回滚
具体操作是:spring默认是在抛出uncheck exception后进行回滚操作,捕获异常,返回错误信息。
- 数据库配置
驱动、连接字符串、用户名、密码。
- 常用注解
@controller:控制层组件
@service:业务层组件
@repository:数据访问层组件
@autowired:自动装配
@requestmapping:请求地址映射
- IoC:控制反转,理解:Ioc容器控制依赖对象(控制),再需要由容器向程序注入依赖对象(反转)。
- DI:依赖注入,理解:由容器将依赖关系注入到组件中去
- 使用多个配置文件:在application中写上spring.profiles.active=dev
application-dev.properties就可以是当前使用的配置文件。
- nginx:nginx反向代理为什么能够提升服务器性能:nginx会将请求和响应首先缓存主,再发送或者接受,这样后端就传递的是完整HTTP请求和响应,减轻了后端压力。
- webservice:跨语言和操作系统的远程调用技术
- zookeeper
- docker dubbo
- 储存过程、触发器