Java牛客网社区项目——知识点&面试题
持续更新中(ง •̀_•́)ง
文章目录
- Java牛客网社区项目——知识点&面试题
-
- 请简要介绍一下你的项目?
- 什么是Spring框架?
- 对Spring IoC的理解
- 什么是DAO
- Spring中关于Bean的注解
- Spring MVC是什么,是怎样的工作流程
- DispatcherServlet处理流程?
- 拦截器的作用
- 什么是SSM框架?
- 怎么实现注册功能的?
- 什么是Interceptor,在项目的哪里使用到了Interceptor?
- 使用什么技术生成验证码?
- 如何检查登陆状态
- 如何实现敏感词过滤
- 什么是Ajax,应用在项目哪些地方?
- 什么是事务,事务的四大特性。
- 怎么利用Spring实现事务管理
- 是怎样实现统一捕获异常的?
- 是怎样实现统一记录日志的?
- 什么是Redis,Redis有哪些优点?
- Redis分布式集群架构
- 怎么往Spring框架中配置Redis,介绍常见的Redis操作
- 项目中Redis的作用
- 怎样存储的点赞/关注/缓存用户数据
- 什么是消息队列
- 消息队列作为信息传递的中间件,需要注意哪些问题?
- Java中的blockingqueue,可以提供线程间的消息队列
- 什么是Kafka,有哪些功能和应用场景?
- Kafka的基础架构
- Kafka的消息模型,以及常见术语
- 在项目哪里用到了Kafka?
- 什么是ElasticSearch,存储原理,功能,特点
- 项目中哪里使用到了ES,如何使用
- 项目中使用到了SpringSecurity在哪些地方?
- 怎样统计网站UA和DAU
- 什么是Quartz,特点,专业术语,项目应用
- 什么是Caffeine,如何缓存,项目应用
请简要介绍一下你的项目?
这个项目的整体结构来源于牛客网,主要使用了Springboot、Mybatis、MySQL、Redis、Kafka、等工具。主要实现了用户的注册、登录、发帖、点赞、系统通知、按热度排序、搜索等功能。另外引入了redis数据库来提升网站的整体性能,实现了用户凭证的存取、点赞关注的功能。基于 Kafka 实现了系统通知:当用户获得点赞、评论后得到通知。利用定时任务定期计算帖子的分数,并在页面上展现热帖排行榜。
什么是Spring框架?
有很多模块组成,利用这些模块可以方便开发工作。这些模块是:核心容器(spring core)/数据访问和集成(Spring JDBC)/Web(Spring Web/MVC)/AOP(Spring Aop)/消息模块/测试模块(Spring Test)等。
对Spring IoC的理解
IoC的意思是控制反转,是一种设计思想,把需要在程序中手动创建对象的控制权交给了Spring框架。IoC的载体是IoC容器,本质是一个工厂,数据结构上来看是一个Map,用来存放着各种对象。当我们创建一个对象时,只需要配置好配置文件/注解,而不用担心对象是怎么被创建出来的。
IoC的优点:降低耦合,对象被容器管理需要两份数据:你的对象定义 + 配置文件,对象间的关系体现在配置文件,不会直接产生耦合。
什么是DAO
data access object,存放数据库访问对象。
Spring中关于Bean的注解
四种常见Bean
@Controller @Repository @Service @Component一般来说Bean只会被容器初始化一次,@PostConstruct:初始化前调用 @PreDestroy:销毁之前
如何使用Bean
bean通过容器管理,不需要我们实例化,如果要使用某个bean,使用依赖注入 @Autowired
Spring MVC是什么,是怎样的工作流程
服务器分为表现层/业务层/数据层,其中Spring MVC是工作在表现层,作用是接收/解析用户发送的请求,调用对应的业务类,根据业务类返回的结果(ModelAndView),调用view进行视图渲染,并将渲染后的View返回给请求者。具体分为以下8步。
- 客户端(浏览器)发送请求给前端处理器(DispatcherServlet)(发送请求,响应结果);
- DispatcherServlet根据请求信息调用HandlerMapping,查找到对应的Handler;
- 查找到对应的Handler(也就是Controller)后,由HandlerAdapter适配器处理;
- HandlerAdapter根据Handler来调用真正的Controller;
- Controller进行业务处理,返回ModelAndView对象,Model是数据对象,View是逻辑上的View;
- ViewResolver根据逻辑view找到实际view;
- DispatcherServlet把Model传给view进行视图渲染,然后返回给请求者。
C - Controller:控制器。接受用户请求,调用 Model 处理,然后选择合适的View给客户。
M - Model:模型。业务处理模型,接受Controller的调遣,处理业务,处理数据。
V - View:视图。返回给客户看的结果。
DispatcherServlet处理流程?
DispatcherServlet 处理流程:
在整个 Spring MVC 框架中,DispatcherServlet 处于核心位置,它负责协调和组织不同组件完成请求处理并返回响应工作。DispatcherServlet 是 SpringMVC统一的入口,所有的请求都通过它。DispatcherServlet 是前端控制器,配置在web.xml文件中,Servlet依自已定义的具体规则拦截匹配的请求,分发到目标Controller来处理。 初始化 DispatcherServlet时,该框架在web应用程序WEB-INF目录中寻找一个名为[servlet-名称]-servlet.xml的文件,并在那里定义相关的Beans,重写在全局中定义的任何Beans。在看DispatcherServlet 类之前,我们先来看一下请求处理的大致流程:
- Tomcat 启动,对 DispatcherServlet 进行实例化,然后调用它的 init() 方法进行初始化,在这个初始化过程中完成了:对 web.xml 中初始化参数的加载;建立 WebApplicationContext(SpringMVC的IOC容器);进行组件的初始化;
- 客户端发出请求,由 Tomcat 接收到这个请求,如果匹配 DispatcherServlet 在 web.xml中配置的映射路径,Tomcat 就将请求转交给 DispatcherServlet 处理;
- DispatcherServlet 从容器中取出所有 HandlerMapping 实例(每个实例对应一个 HandlerMapping接口的实现类)并遍历,每个 HandlerMapping 会根据请求信息,通过自己实现类中的方式去找到处理该请求的 Handler(执行程序,如Controller中的方法),并且将这个 Handler 与一堆 HandlerInterceptor (拦截器)封装成一个 HandlerExecutionChain 对象,一旦有一个 HandlerMapping 可以找到 Handler则退出循环;
- DispatcherServlet 取出 HandlerAdapter 组件,根据已经找到的 Handler,再从所有HandlerAdapter 中找到可以处理该 Handler 的 HandlerAdapter 对