Java面试题整理_P2

本文整理了Java分布式面试中的重点问题,包括SpringBoot的核心注解、配置文件解析、集成Mybatis,以及SpringBoot、Spring、SpringMVC的区别。还涉及Maven、Linux、JDK1.8、Dubbo、Redis、数据库连接池和数据一致性等知识点,旨在帮助开发者全面了解Java后端开发的关键技能。
摘要由CSDN通过智能技术生成

Java分布式模拟面试题库-V1.0

1、SpringBoot核心注解?(其中有包含哪些注解分别有什么作用?)

核心启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含了以下 3 个注解:

@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描。

整理其它注解:

@Controller:用于定义控制器类,在spring项目中由控制器负责将用户发来的URL请求转发到对应的服务接口(service层),一般这个注解在类中,通常方法需要配合注解@RequestMapping。

@RestController:用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。

@ResponseBody:获取json数据,加上@Responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。注意要添加Jackson或者Gson的依赖。

@RequestMapping:提供路由信息,负责URL到Controller中的具体函数的映射。

@Configuration:相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。

@Import:用来导入其他配置类。

@ImportResource:用来加载xml配置文件。

@Autowired:自动导入依赖的bean

@Service:一般用于修饰service层的组件

@Repository:使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

@Component:普通组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Bean:用@Bean标注方法等价于XML中配置的bean。放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理,bean的id就是方法名。

@Value:注入application.properties配置的属性的值。

@Inject:等价于默认的@Autowired,只是没有required属性;

@AutoWired:自动导入依赖的bean。byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。当加上(required=false)时,就算找不到bean也不报错。

@Qualifier:当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用。@Qualifier限定描述符除了能根据名字进行注入,但能进行更细粒度的控制如何选择候选者

@Resource没有括号内内容的话,默认byName。与@Autowired干类似的事。

等等。。。。

2、SpringBoot核心配置文件有几种格式,优先级是?

配置文件格式和同目录下优先级

SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。
properties配置优先级 > yml配置优先级
注意@PropertySource注解不支持加载yaml文件,支持properties文件。

配置文件目录

SpringBoot配置文件可以放置在多种路径下,不同路径下的配置优先级有所不同。
可放置目录(优先级从高到低)

file:./config/ (当前项目路径config目录下);
file:./ (当前项目路径下);
classpath:/config/ (类路径config目录下);
classpath:/ (类路径config下).
优先级由高到底,高优先级的配置会覆盖低优先级的配置;
SpringBoot会从这四个位置全部加载配置文件并互补配置;

3、SpringBoot配置文件application.properties,你都配置过哪些内容?

server.port=xxx
可以指定springboot内嵌容器启动的端口,默认使用tomcat容器时在8080端口

spring.profiles.active=xxxx
可以指明要使用的配置文件,一般应用于多环境配置分离,如生产环境(production),开发环境(development),测试环境(test)等,可以自定义,如开发环境配置文件为application-dev.properties,则spring.profiles.active=dev,在启动时会加载application-dev.properties配置文件。

集成Mybatis(引入maven:mybatis-spring-boot-starter )
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/edocdb
spring.datasource.username=root
spring.datasource.password=xxxx
spring数据源的配置,使用jdbcTemplate进行数据库操作(使用jdbcTempate,会自动提示导入spring-boot-starter-jdbc等依赖)\
适用xml映射文件配置
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locaitons=classpath:mybatis/mappings/*.xml

# mybatis
mybatis.configuration.map-underscore-to-camel-case=true

Redis配置(引入spring-boot-starter-data-redis自动集成)
#spring.redis.url=
#上面url形式等同下面
spring.redis.host=localhost
spring.redis.port=6379

Dubbo配置
# 提供服务名称
dubbo.application.name=xxx-provider
# 注册中心地址
dubbo.registry.address=127.0.0.1:2181
# 注册中心协议
dubbo.registry.protocol=zookeeper
# 通信端口,可以单独指定接口,一般都是20880,如果设置为-1,代表自动查找接口,从20880开始,依次递增
dubbo.protocol.port=-1
# 指定扫描包路径
dubbo.scan.base-packages=com.kgc

文件上传配置

#默认true
#spring.http.mutipart.enabled=true
#上传中转文件位置,
#spring.http.multipart.location=
#最大上传文件大小,默认1MB
spring.http.multipart.max-file-size=5MB
#最大请求大小,默认10MB
spring.http.multipart.max-request-size=20MB

等等,自主增加

4、SpringBoot从配置文件中获取自定义值的常用方式?区别是?

有两种方式,@CofigurationProperties是批量获取的,@Value是单个获取的

二者对比:

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL(#{11*2}) 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装(map) 支持 不支持
松散绑定语法:比如有个属性是lastName的驼峰命名,可以支持last-name或者last_name进行绑定

JSR303数据校验,注释掉@value注解,然后放开@ConfigurationProperties,给person实体增加注解@Validated,然后给name属性增加注解@Email,代表校验实体输入值,必
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值