相关问题可能也提及在【IDEA 介绍 + 配置 + 插件汇总】文中:
https://blog.csdn.net/weixin_42915286/article/details/83069223
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.1.RELEASE)
面试
——————————————————————————
Bean
<bean id="name" class="com.xxxx.xxx.xxx" scope="singleton">
<property name="id" value=""></property>
...
提问:Spring Bean的作用域之间有什么区别?
Spring中,可以在<bean>
元素的scope
属性中设置bean的作用域,以决定这个bean是单实例还是多实例;
默认情况下,Spring只为每个在IoC容器里生命的bean创建唯一一个实例,整个IoC容器范围内都能共享该实例:所有后续getBean()
调用和bean饮用都将返回这个唯一的bean实例。该作用域被称为singleton
,它是所有bean的默认作用域;
- singleton:在SpringIoC容器中仅存在一个Bean实例
- prototype:每次调用
getBean()
时都会返回一个新的实例; - request:每次HTTP请求都会创建一个新的Bean,该作用域仅适用于WebApplicationContext环境;
- session:同一个HTTP Session共享一个Bean,不同的HTTP Session使用不同的Bean,该作用域仅适用于WebApplicationContext环境;
https://www.bilibili.com/video/av37602130/?p=8
提问:简单介绍Spring支持的常用数据库事务传播属性和事物隔离级别?
事物的传播行为:
事物的传播行为,一个方法运行在了一个开启了的事物的方法中时,当前方法是使用原来的事物还是开启一个新的事物;
事物的属性:
- 1.
propagation
:用来设置事物的传播行为;
事物的传播行为,一个方法运行在了一个开启了的事物的方法中时,当前方法是使用原来的事物还是开启一个新的事物;
Propagation.REQUIRED
:默认值,使用原来的事物;
Propagation.REQUIRED_NEW
:将原来的事物刮起,开启一个新的事物; - 2.
isolation
:用来设置事物的隔离程度;
Isolation.REPEATABLE_READ
:可重复读,MySQL默认的隔离级别;
Isolation.REPEATABLE_COMITTED
:读已提交,Oracle默认的隔离级别,开发时通常使用的隔离级别;
提问:Spring中的Bean是线程安全的吗?
Spring本身未提供Bean线程安全策略;
线程安全要从原型和单例分别说明:
原型Bean:每创建一个新对象,即线程间不存在Bean共享,自然不会有线程安全问题;
单例Bean:若单例Bean是个无状态Bean,就是线程中的操作不会对Bean成员执行查询以外的操作,那么这个单例Bean是线程安全的;
对有状态的Vean,Spring提供的Bean,一般提供了ThreadLocal去解决线程安全问题;
——————————————————————————
——————————————————————————
——————————————————————————
——————————————————————————
——————————————————————————
——————————————————————————
日常操作问题
1.Terminal中结束Spring程序
control+C
——————————————————————————
2.application.properties与application.yml之间的区别?
在线转换:http://www.toyaml.com/index.html
实质上两者是差不多的,区别在于结构。
官方给的很多demo,都是用yml文件配置的;yml文件的好处:天然的树状结构一目了然,
注意点:
- 1.原有的key,例如spring.jpa.properties.hibernate.dialect,按“.”分割,都变成树状的配置;
- 2.冒号后面若有值,一定要跟一个空格!!!
- 3.把原有的application.properties删掉。然后一定要执行一下 maven -X clean install
- 详细说明在https://blog.csdn.net/weixin_42915286/article/details/83069223 页面搜索 如何新建application.yml文件再替换application.properties?
区别如下:
application.properties
application.yml
——————————————————————————
3.热部署HOT SWAPPING:用spring-boot-devtools提供的开发者工具实现
热部署指:每次修改项目不用重新启动项目,Spring自动更新。
(另外还有修改服务器配置、使用springloaded jar包、使用收费插件Jrebel实现热部署,详见https://www.cnblogs.com/jcook/p/6910238.html)
- 1.在POM里输入devtools依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
- 2.添加配置文件:配置文件中显示指定,默认值也是true,但是防止其他地方修改了默认值,所以,建议添加这个配置信息。
spring.devtools.restart.enabled=true
spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.exclude=WEB-INF/**
- 3.此方法是基于类加载机制来实现热加载的,因此你修改完成代码后必须重新编译当前代码,才能触发热部署,Eclipse默认就支持了自动编译,而在Intellij IDEA中默认是关闭了自动编译的,要按照如下3、4步设置开启:
(1).IDEA开启项目自动编译,进入设置,Build,Execut, Deployment -> Compiler 勾选中左侧的Build Project automatically
(2).command + shift + a搜索命令:registry -> 勾选compiler.automake.allow.when.app.running
我自己用以上方法操作后可以生效,只是反应速度比较迟缓。
参考博客:
2.https://blog.csdn.net/qq_29648651/article/details/78503853 https://blog.csdn.net/testcs_dn/article/details/78959700
3.https://www.cnblogs.com/jcook/p/6910238.html
——————————————————————————
- 提问:如何让IDEA可自动生成
serialVersionUID
?
Java 类进行序列化也两个主要目的,分别为:
1.把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
2.在网络上传送对象的字节序列。
而某个Java类 implements Serializable后,需要添加参数serialVersionUID的语句;
serialVersionUID
是一个非常重要的字段,因 Java 的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。
在进行反序列化时,JVM 会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。
一般来说,定义serialVersionUID的方式有两种,分别为:
1.采用默认的1L
,具体为private static final long serialVersionUID = 1L;
2.根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,例如private static final long serialVersionUID = XXXL;
这里讲的是如何让IDE生成64位的Long哈希字段;
步骤1:安装插件GenerateSerialVersionUID
,成功后重启IDE
步骤二:Inspections - Serializable class without 'serialVersionUID'
,设置为Warining
步骤三:实体类名中一旦implements了Serializable,类名就会报错,提示自动生成serialVersionUID
步骤四:随机生成serialVersionUID
;
比如:private static final long serialVersionUID = 3450342483181838030L;
——————————————————————————
- 提问:如何解压JAR包?压缩成JAR包?
解压缩:
$jar xvf 文件名.jar
创建指定文件名JAR包(若存在同名则会覆盖):
$jar cf 文件名.jar 文件名
创建指定文件名JAR包,且显示打包过程:
$jar cvf 文件名.jar 文件名
https://blog.csdn.net/zilaike/article/details/82147178