实际遇到或者觉得重要的java面试题

  1. 空指针异常发生哪几种

字符串变量没有初始化

对象的值为空,但是没有判空,就拿来用了。

  1. Springboot统一异常处理(具体见:https://blog.csdn.net/qq_31293575/article/details/81354918)
  1. 首先定义一个globalexceptionhandler
  2. 然后定义过滤器拦截exception异常(统一捕获)
  1. 如何进行异常处理

1.如果异常在try/catch语句中,捕获到然后页面转发到友情提示界面,后台打一个log(模板引擎这种)。如果是前后分离,就是返回一个异常的状态码,前端自行提示错误,后台打一个log。(catch的是业务异常)

2.如果异常不在try/catch内,就是统一异常处理捕获了,然后转发到友情提示界面,后台打一个log

 

  1. 怎么写线程

创建线程:定义Thread子类、重新run方法、创建Thread子类对象、调用线程对象的start方法。

实现Runnable接口,实现run方法,用new thread.starter方法启动。

线程是操作系统进行运算调度的最小单位。

一个进程可以有很多线程,线程是操作系统进行资源调度的基本单位,线程是操作系统进行运算调度的最小单位。

  1. synchronized

当synchronized用来修饰静态方法或者类时,将会使得这个类的所有对象都是共享一把类锁,导致线程阻塞,所以这种写法一定要规避

无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁。

每个对象只有一个锁(lock)与之相关联,谁拿到这个锁谁就可以运行它所控制的那段代码。

实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。

  1. 单例模式实例、哪些设计模式

spring中容器管理bean就是单例模式

单例模式、工厂方法模式、抽象工厂模式。

  1. 集合:

List、map、set

list:有顺序、可以重复。

map:键值类型存储,。无顺序、键不能重复

set:无序、不能重复

  1. 定时任务
  1. quartz
  2. scheduling
  1. 线程池、连接池

连接池:创建和管理连接的缓冲池技术。

线程池:当并发的线程很多时,频繁的创建线程和销毁线程会浪费资源,需要重复利用线程,然后引入了线程池技术。

  1. 延迟加载

真正需要数据的时候,才真正执行数据加载操作。

mybatis中可以使用association实现延迟加载。

  1. 消息队列(activeMQ)

例子:在用户进行注册操作的时候,我们首先向数据库保存用户信息,成功后,把成功消息发送到队列中去,验证码系统会监听消息,一旦接收到消息,就会给该用户发送验证码。

如何防止重复发送消息:增加消息状态表,每次处理消息之前,都去状态表中查询一次,如果已经有相同的消息存在,那么就不处理,防止重复发送消息。

如果消息发送失败怎么办:activemq有两种订阅方式:点到点形式和发布订阅模式。

 

  1. 跨域

springboot中使用cors协议解决跨域问题。

添加配置类,进行全局的跨域配置。

  1. 显示日志最后指定行内容

tail –n 20 文件名

  1. 查看当前CPU运行情况

top/free

  1. 索引

为查询的字段建立索引,其实就是为该字段进行排序

应该给哪些字段建立索引:

  1. 经常需要搜索的字段添加索引,可以加快搜索速度。
  2. 为外键添加索引,加快连接速度。

不应该为哪些字段添加索引:

  1. 记录比较少的字段不应添加索引
  2. 对大量重复的字段不该添加索引

实际添加索引操作:

1.normal、unique、fulltext类型进行选取

  1. 回滚

具体操作是:spring默认是在抛出uncheck exception后进行回滚操作,捕获异常,返回错误信息。

  1. 数据库配置

驱动、连接字符串、用户名、密码。

  1. 常用注解

@controller:控制层组件

@service:业务层组件

@repository:数据访问层组件

@autowired:自动装配

@requestmapping:请求地址映射

  1. IoC:控制反转,理解:Ioc容器控制依赖对象(控制),再需要由容器向程序注入依赖对象(反转)。
  2. DI:依赖注入,理解:由容器将依赖关系注入到组件中去
  3. 使用多个配置文件:在application中写上spring.profiles.active=dev

application-dev.properties就可以是当前使用的配置文件。

  1. nginx:nginx反向代理为什么能够提升服务器性能:nginx会将请求和响应首先缓存主,再发送或者接受,这样后端就传递的是完整HTTP请求和响应,减轻了后端压力。
  2. webservice:跨语言和操作系统的远程调用技术
  3. zookeeper
  4. docker dubbo
  5. 储存过程、触发器

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_31293575/article/details/82188918