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

return (singletonObject != NULL_OBJECT ? singletonObject : null);

}

4、代理模式

Spring的AOP中,使用的Advice(通知)来增强被代理类的功能。Spring实现AOP功能的原理就是代理模式(① JDK动态代理,② CGLIB字节码生成技术代理。)对类进行方法级别的切面增强。

5、装饰器模式

装饰器模式:动态的给一个对象添加一些额外的功能。

Spring的ApplicationContext中配置所有的DataSource。这些DataSource可能是不同的数据库,然后SessionFactory根据用户的每次请求,将DataSource设置成不同的数据源,以达到切换数据源的目的。

在Spring中有两种表现:

一种是类名中含有Wrapper,另一种是类名中含有Decorator。

6、观察者模式

定义对象间的一对多的关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。

Spring中观察者模式一般用在listener的实现。

7、策略模式

策略模式是行为性模式,调用不同的方法,适应行为的变化 ,强调父类的调用子类的特性 。

getHandler是HandlerMapping接口中的唯一方法,用于根据请求找到匹配的处理器。

8、模板方法模式

Spring JdbcTemplate的query方法总体结构是一个模板方法+回调函数,query方法中调用的execute()是一个模板方法,而预期的回调doInStatement(Statement state)方法也是一个模板方法。

![](https://img-blog.csdnimg.cn/20200721161033268.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdG

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

k,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1b3J1aV9qYXZh,size_16,color_FFFFFF,t_70)

六、简单介绍一下Spring Boot


1、Spring是什么

Spring框架为开发Java应用程序提供了全面的基础架构支持。它包含一些很好的功能,如依赖注入和开箱即用的模块,如Spring JDBC、Spring MVC、Spring Security、Spring AOP、Spring ORM、Spring Test。这些模块缩短应用程序的开发时间,提高了应用开发的效率。

2、Spring Boot是什么

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

protected 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文件中定义启动类的名称;

org.springframework.boot

spring-boot-maven-plugin

org.spring.springboot.Application

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的实现类的修改,这样的编写方式比较好,至于其中的实现原理,让我细细到来。我们想看看如何去应用,实现原理慢慢的说!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值