Spring常用注解
JVM的内存结构
- 堆(Heap):线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。
- 方法区(Method Area):线程共享。存储类信息、常量、静态变量、即时编译器编译后的代码。
- 方法栈(JVM Stack):线程私有。存储局部变量表、操作栈、动态链接、方法出口,对象指针。
- 本地方法栈(Native Method Stack):线程私有。为虚拟机使用到的Native 方法服务。如Java使用c或者c++编写的接口服务时,代码在此区运行。
- 程序计数器(Program Counter Register):线程私有。有些文章也翻译成PC寄存器(PC Register),同一个东西。它可以看作是当前线程所执行的字节码的行号指示器。指向下一条要执行的指令。
JVM的4种垃圾回收算法
1.标记清除2.复制算法3.标记整理****4.分代收集算法
redis中的数据结构
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(无序集合)及zset(有序集合)。
Spring常用注解
1、给容器中注入组件
(1)包扫描+组件标注注解
@Component:泛指各种组件
@Controller:控制层
@Service:业务层
@Repository:数据访问层
(2)@Bean
导入第三方包里面的注解
(3)@Import
@Import(要导入到容器中的组件);
(4)使用spring提供的FactoryBean(工厂Bean)
2、注入bean的注解
@Autowired:由bean提供
- @Autowired可以作用在变量、setter方法、构造函数上;
- 有个属性为required,可以配置为false;
@Inject: @Inject用法和@Autowired一样。
@Resource:@Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的
@Primary
让spring进行自动装配的时候,默认使用首选的bean
3、@JsonIgnore
(1)作用
在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
4、初始化和销毁方法
(1)通过@Bean(initMethod=”init”,destoryMethod=”destory”)方法
5、Java配置类相关注解
@Configuration
声明当前类为配置类;
@Bean
注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式;
@ComponentScan
用于对Component进行扫描;
6、切面(AOP)相关注解
@Aspect 声明一个切面
7、@Bean的属性支持
@Scope设置类型包括:
设置Spring容器如何新建Bean实例(方法上,得有@Bean)
① Singleton
(单例,一个Spring容器中只有一个bean实例,默认模式),
② Protetype
(每次调用新建一个bean),
③ Request
(web项目中,给每个http request新建一个bean),
④ Session
(web项目中,给每个http session新建一个bean),
8、@Value注解
(1)支持如下方式的注入:
- 注入普通字符
- 注入操作系统属性
- 注入表达式结果
- 注入其它bean属性
- 注入文件资源
- 注入网站资源
- 注入配置文件
(2)@Value三种情况的用法。
- ${}是去找外部配置的参数,将值赋过来
- #{}是SpEL表达式,去寻找对应变量的内容
- #{}直接写字符串就是将字符串的值注入进去
10、异步相关
@Async
在实际执行的bean方法使用该注解来声明其是一个异步任务(方法上或类上所有的方法都将异步,需要@EnableAsync开启异步任务)
11、定时任务相关
@Scheduled
来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持)
12、Enable***注解说明
@EnableWebMvc:开启web MVC的配置支持;
@EnableConfigurationProperties:开启对@ConfigurationProperties注解配置Bean的支持;
@EnableJpaRepositories:开启对SpringData JPA Repository的支持;
@EnableTransactionManagement:开启注解式事务的支持;
Spring Boot的启动流程
1.创建并初始化一个springapplication对象
1.1初始化流程
将传入的配置类赋值给primarysources属性
a.推断web应用类型
b.设置引导初始化器、初始化器、监听器;从spring.factories中获取bootstrapregistryinitializer对象、applicationcontextinitializer对象、applicationlistener对象
c.推断主应用程序类,调用当前线程的调用栈判断main在哪一类
1.2.调用该对象的run方法,启动springboot项目
1.创建并启动一个计时器,记录耗时
2.创建引导启动容器,在spring容器创建之前,缓存对象
3.设置headless属性,设置后jvm不会创建图形资源
4.获取一个运行监听器,发布一个应用开始
5.创建应用参数对象
6.加载环境变量和配置信息,打印环境变量加载成功
7.打印启动界面
8.根据应用类型创建spring容器
9.将环境变量给spring容器,关闭引导启动
10.加载所有自动配置类,创建bean对象和启动webserver
11.spring启动后处理
12.计算耗时,打印已经启动
13.调用applicationrunner和commandlinerunner接口实现的run方法
14.异常处理
HTTP 与 HTTPS 有哪些区别?
HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
HTTP 的端口号是 80,HTTPS 的端口号是 443。
HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
网络怎么分层
osi:物理层、链路层、网络层、传输层(tcp\udp)、会话层、表示层、应用层(http\https)
RocketMQ和RabbitMQ的特点
RabbitMQ、Kafka和RocketMQ是三种不同特点的开源消息队列系统,各自适用于不同的场景。
RabbitMQ适用于需要可靠消息传递和灵活消息模型的场景,例如金融系统的支付、订单处理等
RocketMQ适用于高性能、高可用性的消息传递场景,具有丰富的消息过滤和分布式事务特性。例如实时数据分析、电商秒杀等