JVM
- jvm内存结构
- int i=1;i和1分别存储在哪个区域
- 了解垃圾回收器吗?CMS,G1,G1是用于年轻代还是老年代
多线程
- 了解synchronized关键字吗,如何使用,对象锁,类锁
- volatile关键字,怎么保证可见性的
- java内存模型,线程内存,主内存
- 除了synchronized和lock,怎么保证线程的安全性
- 如何唤醒sleep的线程
Spring
-
SpringMVC执行流程
- 浏览器发送请求,WEB 容器将该请求转交给 DispatcherServlet 处理
- DispatcherServlet 调用处理器映射器HandlerMapping,其根据用户的url请求查找匹配该url的Handler,即返回一个执行链HandlerExecutionChain(包括处理器和处理器拦截器)。
- DispatcherServlet再请求处理器适配器HandlerAdapter调用相应的Handler处理请求,返回 ModelAndView给DispatcherServlet
- DispatcherServlet将ModelAndView传给视图解析器ViewReslover解析,返回具体View
- DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
- DispatcherServlet将页面响应给用户
springmvc提供了不同的映射器HandlerMapping,实现不同的映射方式如:配置文件方式,实现接口方式,注解方式等。 springmvc通过HandlerAdapter使处理器解耦,处理(Handler不仅局限于控制器Controller这一种形式。目前Spring可以支持Servlet、HttpRequestHandler、ThrowawayController、Controller。 DispatcherServlet源码解读:zhuanlan.zhihu.com/p/22286839
设计模式
- 设计模式,spring的controller是哪种设计模式
- 适配器模式 : Spring AOP 的增强或通知(Advice)使用到了适配器模式、spring MVC 中也是用到了适配器模式适配Controller。
- 工厂设计模式 : Spring使用工厂模式通过 BeanFactory、ApplicationContext 创建 bean 对象。
- 代理设计模式 : Spring AOP 功能的实现。
- 单例设计模式 : Spring 中的 Bean 默认都是单例的。
- 模板方法模式 : Spring 中 jdbcTemplate、hibernateTemplate 等以 Template 结尾的对数据库操作的类,它们就使用到了模板模式。
- 装饰者设计模式
- 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
- JDK 中就有很多地方用到了装饰者模式,比如 InputStream家族,InputStream 类下有 FileInputStream (读取文件)、BufferedInputStream (增加缓存,使读取文件速度大大提升)等子类都在不修改InputStream 代码的情况下扩展了它的功能。
- 观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。 参考https://www.cnblogs.com/kyoner/p/10949246.html
HashMap
- HashMap的底层结构:数组+链表
- HashMap、ConcurrentHashMap、HashTable对key、value为null的处理
- HashMap:key为null时,调用putForNullKey方法处理,默认其hashCode为0,存储在table[0]位置。
- ConcurrentHashMap:value为null,校验时直接抛空指针,key为null,运行key.hashCode()时,会报空指针异常。
- HashTable:value为null,校验时直接抛空指针,key为null,运行key.hashCode()时,会报空指针异常。
redis
- redis是单线程还是多线程的?
redis基于内存的采用单进程单线程模型的KV数据库,由C语言实现,可以达到100000+的QPS(每秒内查询次数,连接数较少时)。为什么这么快?
- 完全基于内存
- 数据结构简单,操作简单
- 单线程,不需要切换上下文,无竞争
- 多路I/O复用:多个网络连接复用一个线程
- 为什么设计为单线程? 单线程已经很快了,单线程实现简单,但单线程无法发挥多核CPU的优势,可以通过单机多实例完善。 参考https://zhuanlan.zhihu.com/p/42272979
项目
- 上线项目的用户量
- 如何部署,有几台机器虚拟机,线程部署的机器,配置是怎么样的