Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day05】——Java高级篇

2023-02-24 15:43:05 浏览数 (1)

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操作

数据库连接

0 人点赞