成都-华迪公司-Java实习面试
springboot常用注解
@SpringBootApplication这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。
@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan
这三个注解的作用分别是:
1、@Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类
2、@EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
3、@ComponentScan: 扫描被@Component (@Service,@Controller)注解的bean,注解默认会扫描该类所在的包下所有的类。
Spring Bean 相关:@Autowired、@Component、@Repository、@Service、 @Controller
@RestController、@Scope
四种常见的 Spring Bean 的作用域:
1. singleton : 唯一 bean 实例,Spring 中的 bean 默认都是单例的。
2. prototype : 每次请求都会创建一个新的 bean 实例。
3. request : 每一次HTTP请求都会产生一个新的bean,该 bean 仅在当前 HTTP request 内有效。
4. session : 每一次 HTTP 请求都会产生一个新的 bean,该 bean 仅在当前 HTTP session 内有效。
springboot的生命周期
整体上可以分为SpringApplication初始化阶段【SpringApplication构造阶段、SpringApplication配置阶段】、SpringApplication运行阶段【SpringApplication准备阶段、ApplicationContext启动阶段、ApplicationContext启动后阶段】、SpringApplication结束阶段、SpringBoot应用退出四个阶段。
servlet的生命周期
Servlet生命周期可被定义为从创建直到毁灭的整个过程。
三个步骤即:初始化------>处理请求------>销毁
创建Servlet对象后---------->初始化(调用 init () 方法)--------->处理/响应客户端的请求(调用 service() 方法)--------->销毁(调用 destroy() 方法,最后由 JVM 的垃圾回收器进行垃圾回收)
sql的调优
1. 索引优化:(列索引)通过在表的列上创建索引,可以大大减少数据查询时的扫描量,从而提高查询性能。需要注意的是,不是所有的列都适合创建索引,索引的创建也需要考虑到查询频率、数据更新频率等因素。
2. SQL语句优化:优化SQL语句可以从多个方面入手,如减少查询字段、减少子查询、合理使用连接语句等。
3. 数据库服务器参数优化:调整数据库服务器的参数可以对SQL语句的性能产生影响。比如,调整数据库服务器的缓存大小、最大连接数、并发连接数等,都可以对SQL语句的性能产生影响。
4. 数据库结构优化:数据库结构的优化也可以对SQL语句的性能产生影响。比如,优化表的结构、调整表之间的关系等
数据库索引在什么时候会失效
💻查询条件中带有null判断:select * from table where name is null
建议给name设置默认值为0,确保表中num列没有null值,然后这样查询:
select * from table where name = 0
💻模糊查询like在左侧使用%
例:select * from table where name like '%索引失效' 👉(注意,在右侧使用%是不会失效的)
💻查询条件中使用函数
例:select * from table where ABS(number) = 1
💻如果查询条件中的字段类型为字符串,查询条件要加引号,否则索引失效
💻查询条件中带有 !=
💻查询条件中对字段进行了计算
例:select * from table where number + 1 >10
redis集群的几种方式 三种:三种集群方式:主从复制,哨兵模式,Cluster集群。
Redis集群与主从存在的区别:
简而言之,Redis集群与主从模式最大的不同是它们有不同的读写特性。Redis集群将数据分布存储在多个节点上,支持多节点读写,而Redis主从有一个主节点和多个从节点,只允许主节点进行读写操作,主节点的数据会被同步到从节点,并提供给从节点读取。
下面来看看Redis集群和主从之间的区别:
1、架构不同:Redis集群采用分布式存储模式,它将数据存储在一个或多个节点上,支持读写分离,多节点存储,可横向扩展;而 Redis主从模式仅有一个主节点,多个从节点,数据由主节点同步到从节点上,只有主节点才能提供读写服务。
2、完整性不同:Redis集群的数据结构有完整的容错机制,在一条记录被多个节点复制存储之后,即便一个节点出现故障,也不会影响数据的完整性,可以在另外一个节点上查询该记录;而Redis主从模式仅有一个主节点,一旦主节点出现故障,从节点无法获取最新的数据。
3、可用性不同:Redis集群支持多节点读写,支持多节点容错,支持热切换;主从模式则仅有一个主节点可以写数据,一旦主节点出现故障,所有的读写操作都将被阻塞。
4、性能不同:Redis集群支持分布式、容错、横向扩展等特性,不仅可以提高系统的读写性能,而且可以更好地利用服务器资源;而Redis主从模式仅有一个主节点可以提供读写服务,读写性能受到单台服务器硬件性能的限制。
redis主从架构和哨兵的区别
Redis主从复制:当用户往Master端写入数据时,通过Redis Sync机制将数据文件发送至Slave,Slave也会执行相同的操作确保数据一致。同时slave上还可以开启二级slave,三级slave从库。 Redis主从配置非常简单,只需要在Redis从库配置中指定slaveof ip port 即可,IP表示指定主库的ip,port表示redis监听端口
Redis哨兵模式:redis主从虽然解决了单点导致的数据丢失问题,但是还是没有解决无缝的故障转移:在主库宕机后,从库无法自动切换为主库,需要手工去切换,在这一瞬间会对后端数据库造成极大的负载,可能直接导致后端数据库宕机。
哨兵模式是在主从模式的基础上添加了故障检测和自动故障转移的功能。在哨兵模式中,一个或多个哨兵进程监视Redis节点的运行状况。如果主节点发生故障,哨兵会检测到这一情况并自动将其中一个从节点提升为新的主节点。这个过程是自动的,所以不需要人为干预。哨兵模式提高了Redis集群的可靠性,确保即使主节点发生故障,Redis服务也能够继续运行。
redis与mysql数据库的区别
1、从类型上来说,mysql是关系型数据库,redis是缓存数据库。
2、mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。redis用于存储使用较为频繁的数据到缓存中,读取速度快。
3、mysql和redis因为需求的不同,一般都是配合使用。
mysql和redis的数据库类型,mysql是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
介绍redis数据库
Redis 是基于键值对的非关系型数据库。
Redis 拥有string、hash、list、set、zset等多种数据结构, redis具有惊人的读写性能, 其优秀的持久化机制是它在断电和机械故障时也不会发生数据丢失, 可以用于热点数据存放,
String:底层实现: SDS(Simple Dynamic String) - 动态字符串
List:底层实现: ZIPList| LinkedList(双向链表)
Hash:底层实现: ZIPList | HashTable HashTable - 哈希表:① 数组 + 链表 ②数组+红黑树(树化方便查找)
Set:底层实现: INTSet | HashTable
Zset:底层实现: ZIPList| SKIPList
1. ZIPList - 压缩列表: 由连续内存块组成且用于存储小型有序集合或哈希集合的数据结构。优点: 节省空间
2. INTSet - 整数集合: 可变长度的整型数组 - 基于整数数组来实现,并且具备长度可变、有序等特征
3. SKIPList:一种有序的数据结构,通过在每个节点维护多个指针,从而达到快速访问的目的。
springcloud与ssm的区别
微服务架构:Spring Cloud是用于构建分布式系统和微服务架构的框架,它提供了众多的功能和组件,如服务注册与发现、负载均衡、断路器、配置管理等,使得构建和管理分布式系统变得更加容易。SSM框架则更适用于传统的单体应用程序开发。
开发效率:Spring Boot是一个快速构建Java应用程序的框架,它通过自动化配置和约定优于配置的原则,简化了项目的配置和部署过程,提高了开发效率。而在SSM框架中,需要手动配置和管理许多细节。
弹性和可伸缩性:Spring Cloud提供了一些弹性和可伸缩性的机制,如服务注册与发现、负载均衡和断路器等,可以帮助应对高负载和故障恢复的需求。SSM框架在这方面没有直接的支持,需要开发人员自行实现。
Spring Boot和Spring Cloud提供了更现代化和弹性的开发框架,适用于构建复杂的分布式系统和微服务架构。而SSM框架则更适合传统的单体应用程序开发。
会不会算法
spring几种注入?
三种方式是:构造器注入、setter方法注入、接口注入。
Spring创建JavaBean的三种方式:xml解析-底层是Bean工厂+反射机制、 注解、 以及构造函数
nginx反向代理
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器。
Nginx的应用场景:
1. http 服务器。Nginx 是一个Web服务器可以独立提供 http 服务。可以作为静态网页服务器。
2. 虚拟主机。可以实现在一台服务器虚拟出多个网站。例如个人网站使用的虚拟主机。
3. 反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用 nginx 做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。