朋友实习面试问题
开篇:我只是一个程序小白,只能通过自己目前理解程度和网上查的来写,写到的点很浅,希望大佬们可以指点
1.聊聊spring
我的理解:
spring是一个大杂烩(全家桶),里面包含很多框架
用一句话说:
Spring是一个轻量级的控制反转依赖注入(IOC)和面向切面(AOP)的容器(框架)。
2.聊聊springboot
springboot是spring开源组织下的子项目
定义:springboot是为了简化程序代码开发过程中大量的配置而开发出来的一个框架。
springboot的优点:
1.容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
2.开箱即用,远离繁琐的配置。
3.提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
4.没有代码生成,也不需要XML配置。
5.避免大量的 Maven 导入和各种版本冲突。
springboot的常用注解:
springboot的核心注解是:@SpringBootApplication,他包含了以下三个注解:
@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。
@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。
@ComponentScan:Spring组件扫描
springboot如何解决跨域问题
后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。
如何实现 Spring Boot 应用程序的安全性?
为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展WebSecurityConfigurerAdapter 并覆盖其方法。
运行 Spring Boot 有哪几种方式?
1)打包用命令或者放到容器中运行
2)用 Maven/ Gradle 插件运行
3)直接执行 main 方法运行
如何使用 Spring Boot 实现分页和排序?
使用 Spring Boot 实现分页非常简单。使用 Spring Data-JPA 可以实现将可分页的传递给存储库方法。
3.聊聊springcloud
定义:Spring Cloud是一系列框架的有序集合。利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发
springcloud包含的组件:
1.注册中心
2.熔断器
3.网关
4.负载中心
5.配置中心
4.聊聊springmvc
MVC是Model(模型),View(视图),Controller(控制器)的简写,是一种软件设计规范。
MVC主要作用是降低了视图与业务逻辑间的双向耦合。
MVC是一种架构模式。
Controller:控制器
取得表单数据
调用业务逻辑
转向指定的页面
Model:模型
业务逻辑
保存数据的状态
View:视图
显示页面
Spring MVC的特点:
轻量级,简单易学
高效 , 基于请求响应的MVC框架
与Spring兼容性好,无缝结合
约定优于配置
功能强大:RESTful、数据验证、格式化、本地化、主题等
简洁灵活
springmvc常用的注解:
1.@Controller
2.@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
3.@Resource和@Autowired
@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
1、共同点
两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。
2、不同点
(1)@Autowired
@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
4.@PathVariable
将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数
5.@CookieValue
作用:用来获取Cookie中的值;
参数: value:参数名称 required:是否必须 defaultValue:默认值
6.@RequestParam
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上
7.@ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
8.@ModelAttribute
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
9.@SessionAttributes
@SessionAttributes即将值放到session作用域中,写在class上面。
@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(value 属性值),
还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值)
springmvc的执行流程
1.用户从客户端发出请求到DispatcherServlet
2.DispatcherServlet查询一个或多个HandlerMapping(处理器映射器)
3.找到接收请求的controller
4.DispatcherServlet把请求发送给controller
5.controller调用业务逻辑层处理后 ,返回给ModelAndView
6.DispatcherServlet查询一个或多个ViewResoler(视频解析器),找到ModelAndView指定的视图
7.视图负责将结果返回给客户端
转发和重定向的区别
转发:
1.转发不会改变浏览器的地址栏
2.转发共享同一个request
3.转发只能在同一个web应用中使用
重定向:
1.重定向会改变浏览器的地址栏
2.重定向不共享request
3.可以重定向到任意URL
5.什么是正向代理和反向代理
正向代理:
用户想访问一个国外网站,可是不能直接访问,于是,用户创建一个代理服务器,通过代理服务器访问网站
正向代理的结果是:保护了用户
正向代理隐藏了用户,用户的请求被代理服务器接收代替,到了服务器,服务器并不知道用户是谁
反向代理:
用户发送请求到服务器(其实是发送到代理服务器,单用户不知道)
代理服务器把请求发送给真正的服务器
真正的服务器返回响应给代理服务器
代理服务器把响应数据返回给用户
反向代理的结果:保护了服务器
反向代理作用:用户请求过多,服务器会有一个处理的极限。所以使用反向代理服务器接受请求,再用均衡负载将请求分布给多个真实的服务器。既能提高效率还有一定的安全性。
用途:如果不采用代理,用户的IP、端口号直接暴露在Internet(尽管地址转换NAT),外部主机依然可以根据IP、端口号来开采主机安全漏洞,所以在企业网,一般都是采用代理服务器访问互联网。
6.创建线程的三个方式
1.继承Thread类
2.实现runnable接口
JDK1.5之前是上面两种方法,JDK1.5之后加上下面两种方法
3.实现callable和Future接口
4.线程池
7.Mybatis是什么
定义:
Mybatis是一款持久层框架,半自动化的ORM框架
作用:
避免了所有JDBC代码和手动设置参数获取结果集
为什么需要持久层框架?
内存断电后数据会消失,但有一些对象是无论如何都不能丢失的,比如银行账号等
Mybatis的优点:
1.简单易学
2.灵活,sql写在XML里,便于统一优化和管理
3.解除sql与程序的耦合,提高可维护性
今天收集就这些,面试完继续补充