1、Redis 基础类型中的 String 底层实现是什么?
Redis 中的 String 是使用简单动态字符串(SDS)实现的。SDS 是一种可变长度的字符串实现,它可以动态地调整自己的大小,而不像 C 语言中的字符串一样需要预先分配固定大小的内存空间。
SDS 在 Redis 中的优点是:
空间预分配:SDS 内部的空间预分配策略避免了多次重分配的操作,从而减少了内存碎片;
二进制安全:SDS 内部没有以空字符(‘\0’)来表示字符串的结尾,这样可以避免字符串中含有空字符时出现截断的问题,使得 SDS 成为一个二进制安全的字符串类型;
支持缓存长度信息:SDS 内部存储了字符串的长度信息,这样可以避免每次需要获取字符串长度时都需要遍历整个字符串。
除此之外,SDS 在 Redis 中还支持了很多其他的功能,比如可以实现高效的字符串追加、高效的字符串查找和替换等。
2、Spring、SpringMVC、SpringBoot 三者之间是什么关系?
Spring 是一个非常流行的 Java 开源容器框架,提供了一种全面的编程和配置模型,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制反转(IOC),和面向切面(AOP),是一个分层的轻量级开源框架。
SpringMVC 是基于 Spring 框架的一个 MVC 框架,专注于 Web 应用程序的开发,它使用控制器(Controller)、模型(Model)和视图(View)的分离思想,用于替代servlet(处理请求,获取表单参数,表单校验等),SpringMVC是一个MVC的开源框架,springMVC相当于Struts2 + Spring。
Spring Boot 是基于 Spring 框架的快速开发框架,它提供了一种快速构建 Spring 应用程序的方式,延续了spring框架的核心思想IOC和AOP,Spring Boot简化了Spring应用的创建、运行、调试、部署等,使用开发者可以专注于Spring应用的开发,而无需过多关注XML的配置。
Springboot特性:
创建独立的spring应用。
内嵌Tomcat, JettyUndertow 不需要部署。
提供的“starters” poms来简化Maven配置。
尽可能自动配置spring应用。
绝对没有代码生成和XML配置要求。
三者之间的关系
Spring MVC < Spring < Springboot
3、意向锁是什么?有什么作用?它是表级锁还是行级锁?
意向锁(Intent Lock)是一种数据库锁机制,用于在行级锁的情况下,减少锁冲突带来的性能开销。
当一个事务需要锁定某个表的某个行时,它需要先获取到行级锁,这样其他的事务就不能同时修改这行数据。但是,如果有其他事务也需要锁定这个表,比如锁定整张表进行全表扫描等,这个时候就会出现意向锁。意向锁是表级锁,它只是表示一个意向,并不是真正的锁,表明这个事务打算给这个表上行级锁。意向锁只是表明事务的意向,从而帮助优化行级锁的申请。
意向锁包括两种:
意向共享锁(Intent Shared Lock,IS):表示一个事务打算在这个表的某些行上加共享锁(即多个事务可以同时读取这些行的数据,但是不能修改这些数据)。
意向排它锁(Intent Exclusive Lock,IX):表示一个事务打算在这个表的某些行上加排它锁(即只有这个事务可以读取和修改这些数据)。
意向锁的作用在于,当一个事务需要获取行级锁时,需要先判断这个表是否已经存在意向锁。如果有其他事务持有排它锁或者意向排它锁,那么这个事务就需要等待;如果没有排它锁或者意向排它锁,但是有其他事务持有共享锁或者意向共享锁,那么这个事务可以获取共享锁;如果既没有排它锁也没有共享锁,那么这个事务可以获取行级锁。