Controller和RestController的区别
共同点
都是用来表示某个类是否可以接收HTTP请求
不同点
@Controller:标识一个Spring类是SpringMVC controller处理器
@RestController:@RestController是@Controller和@ResponseBody的结合体 两个注
解结合起来的作用
@Controller类的方法可以直接通过返回String跳转到jsp、ftl、html等模板页面 在方法上加
@ResponseBody注解 也可以返回实体类对象
说说怎么保证线程安全
导致对象线程不安全的原因 主要有三个
1.原子性: 一个或者多个操作在CPU执行过程中被中断
2.可见性:一个线程共享变量的修改 导致另一个线程不能立即看到
3.有序性:程序执行的顺序没有按照代码的先后顺序执行
有序性:
主要理解Java平台的两种编译器 静态编译器javac 动态编译器jit 静态编译器就是将.java文件编译
器.class文件 JVM加载后就可以直接执行了 而动态编译器就是将.class文件编译成机器码 再由
JVM执行 那么有时候 动态编译器为了程序的整体性能 回对指令进行重排序 但是这又会导致 指定
的内存访问顺序 和 实际的执行顺序不一致
1.针对原子性
1)JDK提供的Atomic类 通过CAS来保证原子性
2)Java还提供了各种锁机制 比如synchronized关键字 比如一个线程对资源进行读写操作的时
候 其他线程不可以对整个资源进行操作
2.针对可见性
1)使用synchronized关键字加锁来解决
2)Java提供volatile关键字 比synchronized性能更优 同样保证修改之后 对其他线程可见
volatile一般用于对变量的写操作 它不依赖于当前值的场景中
3.针对有序性
1)使用synchronized关键字定义同步代码块或同步方法
2)通过Lock接口来保证有序性
请说说你对反射的了解
1.(从定义的角度)反射就是在程序运行期间动态获取对象的属性和方法的功能叫反射
2.(从功能角度)在程序运行期间 对任意一个类(除了枚举)能够直他的方法和属性 对于任意一个
对象 能够直到他的方法和属性
3.(从用法的角度)获取class对象的三种方式:getClass(); xx.class;Class.forName("xx)
4.(从优点及缺点的角度回答)优点:运行期间能够动态的获取类 提高代码的灵活性 缺点:性
能上相比较直接通过类或对象获取方法和属性 要慢的多
5.(从应用场景的角度回答)例如模型Spring框架、模拟Spring加载XML配置文件、JDBC操作
数据库连接