写点什么

如果当时这 15 道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-7-20

用户头像
极客good
关注
发布于: 刚刚

Spring Boot 是 Spring 框架的扩展,它消除了设置 Spring 应用程序所需的 XML 配置,更快、更高效。


以下是 Spring Boot 中的一些特点:


  • 嵌入 tomcat,而且不需要部署 tomcat;

  • 提供的 starter 来简化 maven 配置;

  • 创建 Spring Boot 项目时可以选择 Spring 应用;

  • 提供外部化配置;

  • 不需要配置 xml 了;

3、MVC 配置

Spring 需要定义调度程序 servlet,映射和其它支持配置。我们可以使用 web.xml 文件或 Initializer 类来完成此操作。


public class MyWebAppInitializer implements WebApplicationInitializer {


@Override


public void onStartup(ServletContext container) {


AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();


context.setConfigLocation("com.pingfangushi");


container.addListener(new ContextLoaderListener(context));


ServletRegistration.Dynamic dispatcher = container


.addServlet("dispatcher", new DispatcherServlet(context));


dispatcher.setLoadOnStartup(1);


dispatcher.addMapping("/");


}


}


还需要将 @EnableWebMvc 注释添加到 @Configuration 类,并定义一个视图解析器来解析从控制器返回的视图:


@EnableWebMvc


@Configuration


public class ClientWebConfig implements WebMvcConfigurer {


@Bean


public ViewResolver viewResolver() {


InternalResourceViewResolver bean


= new InternalResourceViewResolver();


bean.setViewClass(JstlView.class);


bean.setPrefix("/WEB-INF/view/");


bean.setSuffix(".jsp");


return bean;


}


}


和上述操作相比,Spring Boot 只需在 application 配置文件中配置间隔属性就能完成上述操作:


spring.mvc.view.prefix=/WEB-INF/jsp/


spring.mvc.view.suffix=.jsp

4、配置模板引擎 Thymeleaf

在 Spring 中,我们需要为视图解析器添加 thymeleaf-spring5 依赖项和一些配置:


@Configuration


@EnableWebMvc


public class MvcWebConfig implements WebMvcConfigurer {


@Autowired


private ApplicationContext applicationContext;


@Bean


public SpringResourceTemplateResolver templateResolver() {


SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();


templateResolver.setApplicationContext(applicationContext);


templateResolver.setPrefix("/WEB-INF/views/");


templateResolver.setSuffix(".html");


return templateResolver;


}


@Bean


public SpringTemplateEngine templateEngine() {


SpringTemplateEngine templateEngine = new SpringTemplateEngine();


templateEngine.setTemplateResolver(templateResolver());


templateEngine.setEnableSpringELCompiler(true);


return templateEngine;


}


@Override


public void configureViewResolvers(ViewResolverRegistry registry) {


ThymeleafViewResolver resolver = new ThymeleafViewResolver();


resolver.setTemplateEngine(templateEngine());


registry.viewResolver(resolver);


}


}


Spring Boot 直接添加 spring-boot-starter-thymeleaf 依赖就行了。

5、Spring Security 配置

Spring 需要依赖 spring-security-web 和 spring-security-config 模块。


接下来, 我们需要添加一个扩展 WebSecurityConfigurerAdapter 的类,并使用 @EnableWebSecurity 注解:


@Configuration


@EnableWebSecurity


public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {


@Autowired


public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {


auth.inMemoryAuthentication()


.withUser("admin")


.password(passwordEncoder()


.encode("password"))


.authorities("ROLE_ADMIN");


}


@Override


prote


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


cted void configure(HttpSecurity http) throws Exception {


http.authorizeRequests()


.anyRequest().authenticated()


.and()


.httpBasic();


}


@Bean


public PasswordEncoder passwordEncoder() {


return new BCryptPasswordEncoder();


}


}


Spring Boot 添加 spring-boot-starter-security 依赖就行了。


6、Spring 支持传统的 web.xml,SpringBoot 使用嵌入式容器来运行程序,Spring Boot 使用 main 方法来启动嵌入式 web 服务器,它还负责将 servlet、filter、ServletContextInitializer bean 从应用程序上下文绑定到嵌入式 servelet 容器。

7、打包和部署

Spring 和 Spring Boot 都支持 maven 和 Gradle 通用打包管理技术。


Spring Boot 相对 Spring 的一些优点:


  • 提供嵌入式容器支持;

  • 使用命令 java -jar 独立运行 jar;

  • 部署时可以灵活指定配置文件;


七、Spring Boot 和 Spring MVC 有什么区别?




Spring 框架有很多衍生产品,例如 Spring Boot、Spring MVC、Spring Security 等等,但是他们的基础都是 Spring 的 IOC 和 AOP。


IOC 提供了依赖注入的容器,AOP 提供了面向切面编程,然后在这两者的基础上实现了其它延伸产品的高级功能。


Spring MVC 是一种松耦合的方式开发 web 应用的框架。


通过 Dispatcher Servlet, ModelAndView?和?View Resolver,开发 web 应用变得很容易。解决的问题领域是网站应用程序或者服务开发--url 路由、session、模板引擎、静态 web 资源等等。


Spring Boot 实现了自动配置,降低了项目搭建的复杂度。


Spring Boot 主要为了解决 Spring 框架需要大量配置太麻烦的问题。同时集成了很多第三方库(例如 JDBC、Redis 等),Spring Boot 中的第三方库基本都是零配置的开箱即用。


对于我们来说,换成 Spring Boot 之后,项目初始化方法变了,配置文件变了,不需要安装 tomcat 了,maven 打包 jar 就能直接部署运行了,但你最核心的业务逻辑实现与业务流程实现没有任何变化。


八、RPC 是什么




[RPC 服务和 HTTP 服务对比](


)


九、websocket 应用的是哪个协议




WebSocket 是一个允许 Web 应用程序(通常指浏览器)与服务器进行双向通信的协议。HTML5 的 WebSocket API 主要是为浏览器端提供了一个基于 TCP 协议实现全双工通信的方法。


WebSocket 优势: 浏览器和服务器只需要要做一个握手的动作,在建立连接之后,双方可以在任意时刻,相互推送信息。同时,服务器与客户端之间交换的头信息很小。


十、项目中到的消息中间件




[【Spring Boot 7】RabbitMQ 详解](


)


有些东西不是你写了,你就会了,以后写博客,切记滥竽充数!


十一、spring boot 工程的部署




1、在 pom 文件中定义启动类的名称;


<build>


<plugins>


<plugin>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-maven-plugin</artifactId>


<configuration>


<mainClass>org.spring.springboot.Application</mainClass>


</configuration>


</plugin>


</plugins>


</build>


2、定义 Spring Boot 启动类;


@SpringBootApplication


@MapperScan("org.spring.springboot.dao")


public class Application extends SpringBootServletInitializer{


public static void main(String[] args) {


// 程序启动入口


// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件


SpringApplication.run(Application.class,args);


}


@Override//为了打包 springboot 项目


protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {


return builder.sources(this.getClass());


}


}


主要就是继承 SpringBootServletInitializer 和重写 configure 方法;


3、然后到项目的 pom 平级的目录下面,使用 mvn clean package 命令打包成 jar;


4、然后再到 target 的目录下面执行 java -jar xxx.jar;


十二、Spring Boot 如何访问不同的数据库





1、单数据源的场景(一般的 Web 项目工程这样配置进行处理,就已经比较能够满足我们的业务需求)


多数据源多 SessionFactory 这样的场景,估计作为刚刚开始想象想处理在使用框架的情况下处理业务,配置多个 SessionFactory,然后在 Dao 层中对于特定的请求,通过特定的 SessionFactory 即可处理实现这样的业务需求,不过这样的处理带来了很多的不便之处,所有很多情况下我们宁愿直接使用封装的 JDBC 编程,或者使用 Mybatis 处理这样的业务场景


2、使用 AbstractRoutingDataSource 的实现类,进行灵活的切换,可以通过 AOP 或者手动编程设置当前的 DataSource,不用修改我们编写的对于继承 HibernateSupportDao 的实现类的修改,这样的编写方式比较好,至于其中的实现原理,让我细细到来。我们想看看如何去应用,实现原理慢慢的说!


3、编写 AbstractRoutingDataSource 的实现类,HandlerDataSource 就是提供给我们动态选择数据源的数据的信息,我们这里编写一个根据当前线程来选择数据源,然后通过 AOP 拦截特定的注解,设置当前的数据源信息,也可以手动的设置当前的数据源,在编程的类中。


十三、程序设计?




这是一个值得思考一生的话题!

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
如果当时这15道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-7-20