面试题总结


  1. Java中,4种对象引用之间的区别
    • 强引用:只要引用关系还在,对象永远不会被回收
    • 软引用:非必须存活的对象,JVM会再内存溢出前对其进行回收
    • 弱引用:非必须存活的对象,不管内存是否够用,下次GC一定回收
    • 虚引用:必须和引用队列一起使用,等同于没有引用,对象被回收时会被通知。
  2. Java中保证线程安全的方式有哪些?
    • 使用同步关键字synchronized或Lock使线程互斥同步
    • 使用自旋CAS保证原子操作,实现共享变量的线程安全
    • 使用ThreadLocal实现多个线程之间的数据隔离
  3. 什么是CAS
    • CAS是Compare And Swap(比较并替换)的缩写,是Java并发实现原子操作的一种方式。
    • 将内存位置的数值与预期的数值进行比较,如果相等,则内存位置的值替换为新的值,如果不相等则什么也不做
  4. 线程和进程有什么区别
    • 进程是系统资源分配的最小单位,线程是程序执行的最小单位
    • 先有进程后有线程,进程有独立的地址空间,而线程必须依赖进程而存在
    • 进程之间不能共享资源,而线程共享所在进程的地址空间和其他资源。
  5. 异步和多线程的关系
    • 同步:是线程的的顺序执行,必须执行完一个再执行下一个,需要等待,协调运行
    • 异步:是让主线程不需要等待另一个线程的完成,也可以继续执行其他任务
    • 对比:异步和多线程并不是同等的关系,实现异步的方式有很多,多线程只是实现异步的一种方式。
  6. Spring中用到了哪些设计模式
    • 工厂模式:比如BeanFactory就是简单工厂模式的体现,用来创建对象的实例
    • 单例模式:比如说Spring中的Bean默认为单例模式
    • 装饰器模式:比如BeanWrapper,访问Bean的属性和方法
    • 策略模式:SimpleInstantiationStrategy,Bean的实例化策略。
    • 适配器模式:MVC模块中的HandlerAdapter
    • 代理模式:AOP模块的AopProxy,采用JDK动态代理和CGLIB字节码生成技术。
    • 模板方法模式:Restemplate、JdbcTemplate、用来解决代码重复的问题
    • 观察者模式:ApplicationLister,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知。
  7. 导致Spring事务失效的原因有哪些?
    • @Transcational事务注解添加再不是public修饰的方法上
    • 类没有被Spring托管,导致Spring无法实现代理
    • 抛出的异常被catch处理了,导致@Transcational无法回灌而失效
    • 调用同一个类中的方法,导致@Transcational失效
    • propagation事务传播配置错误?
    • rollbackFor参数设置错误?
    • 数据库配置了不支持事务的引擎,或者是数据库本身不支持事务
  8. Spring中几种依赖注入的方式
    • 通过构造器注入,这也是Spring官方推荐
    • 通过setter方法注入,这种方式日常研发中不太常见
    • 通过Field属性注入,比如用@Autowired、@Resource等注解注入
  9. 简述SpringMVC执行流程
    • 客户端发送请求到DispatcherServlet
    • DispatcherServlet从handlerMapping中获取对应的HandlerAdapter调用
    • 从HandlerAdapter中找到对应的handler,从而调用Controller执行业务逻辑
    • 执行完业务逻辑后,返回ModelAndView
    • 调用ViewResolver解析ModelAndView,返回View对象
    • DispatcherServlet执行view的渲染方法并填充数据,再返回给浏览器
  10. Spring中异步调用的三种方式
    • 再配置类上加上@EnableAsync来启用异步注解,然后在方法上加@Async标注异步方法
    • 使用Spring内置的线程池,比如ThreadPoolTaskExecutor 和SimpleAsyncTaskExecutor
    • 自定义线程池,实现AsyncConfigurer接口或者继承AsyncConfigureSupport类来自定义线程池
    • 注:异步方法所在类必须被Ioc容器管理,同级Seervice内直接调用异步方法无法实现异步
  11. SpringMVC中九大组件的理解
    • MultipartResolver:多文件上传组件,用于支持多文件上传
    • LocalResolver:多语言环境组件,用于支持国际化多语言切换
    • ThemeResolver:主题模板处理器,用于对页面多主题风格的处理
    • HandlerMapping:url映射处理器,主要保存url对应业务逻辑的关系
    • HandlerAdapter:业务逻辑适配器,主要功能是动态解析参数以及适配对应业务逻辑Handler
    • HandlerExceptionResolver:异常拦截器,主要用于拦截对不同异常的个性处理
    • RequestViedwNameTranslator:视图提取器,可以从Request中获取viewName
    • ViewResolver:视图转换器,相当于模板引擎
    • FlashMapManager:参数闪存管理器,用于对请求重定向后,参数不丢失支持
  12. Netty中提供了哪些线程模型

 

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/267205.html

(0)
上一篇 2022年6月14日
下一篇 2022年6月14日

相关推荐

发表回复

登录后才能评论