首页 > 编程语言 >Java面试随手记3

Java面试随手记3

时间:2024-09-13 16:23:22浏览次数:11  
标签:随手 索引 Spring SHOW 查询 面试 使用 Java 优化

一、面试题总结3

1、mysql中char和varchar的区别?

特性charvarchar
存储方式定长,长度不足时填充空格可变长,按实际长度存储
存储效率固定空间,浪费内存根据实际长度动态分配
性能较高,适合固定长度数据稍低,适合不定长度数据
适用场景固定长度的字符串不定长度的字符串
空格处理自动去除尾部空格保留所有空格
最大长度255 字符65,535 字节

2、优化sql的手段?(很多方式,八股文各有不同)

(1)使用索引

创建索引:为经常用于查询、排序、分组的列创建索引,以加快检索速度。常见的索引类型有 B-tree 索引、哈希索引等。
索引优化:选择合适的索引类型,并避免在频繁更新的列上创建索引,因为更新索引会增加额外开销。

(2) 优化查询语句

选择性列:只选择实际需要的列,避免使用 SELECT *,减少数据传输和处理开销
避免不必要的计算:在查询中避免对列进行计算操作,例如不要在 WHERE 子句中对列进行函数计算。

(3)优化表结构

数据类型选择:选择合适的数据类型,避免使用过大的数据类型,减少存储和处理开销。例如,使用 INT 替代 BIGINT,使用 VARCHAR(50) 替代 TEXT。
规范化和反规范化:根据需求对表进行规范化(减少数据冗余)和反规范化(提高查询性能),找到平衡点。

(4)4. 使用适当的 SQL 语句

JOIN 类型:使用合适的 JOIN 类型(INNER JOIN、LEFT JOIN、RIGHT JOIN)来提高性能,避免不必要的全表扫描。
子查询和联接:尽量避免使用复杂的子查询,优先考虑使用 JOIN 操作,有时可以提升性能

(5)避免不必要的操作

避免全表扫描:通过优化 WHERE 子句、使用索引等手段避免全表扫描,减少数据的读取量。
避免重复计算:避免在查询中进行重复的计算操作,可以将结果缓存到临时表中,减少重复计算开销。

(6)使用查询优化工具

EXPLAIN:使用 EXPLAIN 命令分析查询执行计划,查看查询的执行过程,并找出可能的瓶颈。
查询优化器:利用数据库提供的查询优化器建议,调整查询语句以获得更好的性能。

3、索引的优缺点

优点

(1)加快数据检索速度:
索引能够显著提高数据检索速度。通过索引,数据库可以快速定位到数据行,而不需要进行全表扫描,从而减少了查询的响应时间。
(2)提高查询效率
索引使得特定的查询操作,如 SELECT、JOIN、WHERE 子句中的条件查找等,效率更高。特别是对大表或复杂查询的性能影响更为显著。
(3)支持排序和分组:
索引可以加速排序操作(ORDER BY)和分组操作(GROUP BY),因为排序和分组的过程可以利用索引中的有序数据进行优化。
(4)加快连接操作:
在 JOIN 操作中,如果参与连接的列上有索引,可以显著提高连接查询的速度,因为索引加速了行的匹配过程。
(5)优化聚合函数:
对于 COUNT()、SUM() 等聚合函数,索引可以加速这些操作,特别是当聚合函数涉及到的列上有索引时。

缺点

(1)增加存储开销:
索引需要占用额外的存储空间。每个索引都会占用一定的磁盘空间,特别是对大表或多个索引的情况下,存储开销会显著增加。
(2)降低数据写入性能:
每当对表进行数据插入、更新或删除操作时,相关的索引也需要更新。这会增加写操作的开销,可能会导致数据写入性能下降。
(3)维护复杂性:
随着表的增长和索引的增加,索引的维护和管理变得更加复杂。索引的选择和设计需要根据具体的查询需求进行优化。
(4)影响查询计划:
不正确的索引选择或过多的索引可能会导致数据库优化器选择不佳的查询计划,从而影响查询性能。因此,需要合理设计和选择索引。
(5)可能导致性能下降:
在某些情况下,如果索引设计不合理或者过度使用索引,可能会导致性能下降。例如,对于频繁的全表扫描操作,索引可能没有实质性的性能提升效果。

4、怎么分析mysql语句

(1)使用 EXPLAIN:查看查询的执行计划,了解如何访问数据。

输出字段解释
id:查询的标识符,表示查询的顺序。
select_type:查询类型(如 SIMPLE、PRIMARY、UNION)。
table:正在访问的表名。
type:连接类型(如 ALL、index、range、ref、eq_ref),表示访问表的方式。
possible_keys:可能用于查询的索引。
key:实际使用的索引。
key_len:使用的索引的长度。
ref:显示哪个列或常量与索引匹配。
rows:扫描的行数。
Extra:额外信息(如 Using where、Using index、Using filesort)。

(2)使用 SHOW PROFILE:分析查询的执行时间和性能。

SHOW PROFILE 命令可以帮助你查看查询的执行时间和各种操作的时间分布。

启用查询分析

SET profiling = 1;

执行查询

SELECT * FROM employees WHERE department_id = 5;

查看查询分析结果

SHOW PROFILES;

SHOW PROFILE FOR QUERY query_id;

其中,query_id 是 SHOW PROFILES 输出中对应的查询 ID。

(3)使用 ANALYZE TABLE 和 OPTIMIZE TABLE:更新统计信息和优化表结构。

ANALYZE TABLE 命令可以更新表的统计信息,帮助优化查询计划。
OPTIMIZE TABLE 命令可以优化表的存储,提高性能,并重新组织表的存储结构。

(4)监控状态和配置:使用 SHOW STATUS 和 SHOW VARIABLES 查看数据库运行状态。

SHOW STATUS 显示服务器的状态信息,帮助你了解数据库的运行情况。
SHOW VARIABLES 显示 MySQL 配置变量,可以帮助你了解当前的配置。

(5)慢查询日志:找出慢查询,针对性地进行优化。

5、sql问题主要考察的就是分组,分组后排序,以及连接查询

6、Spring中写一个接口,这个接口有两个实现类,在controller层中注入时,怎么区分注入的是第一个service还是第二个?

(1)使用@Autowired注解实现时需要和@Qualifier结合使用,通过使用@Qualifier注解指定要使用哪个实现类。
(2)使用@Resource 注解,并通过 name 属性指定具体的实现类名称。
(3)使用 @Primary 注解,@Primary 表示当有多个候选者时,优先选择这个实现类

7、简单说下对spring的理解?

(1). 依赖注入(DI)和控制反转(IoC)

依赖注入(DI):Spring 的核心特性之一,它通过将对象的依赖关系交给容器管理,从而实现松耦合。开发者只需声明依赖,Spring 容器会负责将所需的依赖注入到对象中。
控制反转(IoC):IoC 容器负责创建、配置和管理对象的生命周期和依赖关系。开发者不再直接控制对象的创建和管理,而是将这些职责交给 Spring 容器。

(2). 面向切面编程(AOP)

Spring 提供了对面向切面编程的支持,使得开发者可以将横切关注点(如日志、安全性、事务管理等)从业务逻辑中分离出来。这样可以提高代码的模块化和可维护性。

(3). 事务管理

Spring 提供了统一的事务管理接口,可以支持编程式和声明式事务管理。无论使用哪种持久化技术(如 JDBC、JPA、Hibernate),Spring 都可以提供一致的事务处理方式。

(4). MVC 框架

Spring MVC 是 Spring 的一个模块,提供了用于构建 Web 应用程序的模型-视图-控制器(MVC)架构。它允许开发者通过控制器处理用户请求,模型负责业务逻辑,视图负责呈现结果。

(5). 数据访问

Spring 提供了对各种数据访问技术的支持,包括 JDBC、ORM(如 Hibernate、JPA)等。它简化了数据访问操作,提供了事务管理、异常处理等功能,减少了样板代码。

(6). 模块化

Spring 框架是模块化的,包含多个子模块,允许开发者根据需要选择合适的模块进行集成。常见的子模块包括:
Spring Core Container:提供 IoC 和 DI 功能。
Spring AOP:支持面向切面编程。
Spring Data Access/Integration:简化数据访问。
Spring Web:支持 Web 应用开发。
Spring Security:提供安全性功能。
Spring Test:支持测试功能。

(7). 灵活性和扩展性

Spring 设计非常灵活,可以与各种技术栈集成,例如:
Web 框架:如 Spring Boot、Spring WebFlux。
持久化框架:如 Hibernate、MyBatis、JPA。
消息中间件:如 RabbitMQ、Kafka。

总结

依赖注入和控制反转:简化对象的创建和依赖管理,支持松耦合设计。
面向切面编程:将横切关注点与业务逻辑分离,提高代码的模块化。
事务管理:提供统一的事务处理机制。
MVC 框架:支持构建 Web 应用程序。
数据访问:简化数据库操作和异常处理。
模块化:提供灵活的模块选择和集成能力。
灵活性和扩展性:支持与多种技术栈的集成。

标签:随手,索引,Spring,SHOW,查询,面试,使用,Java,优化
From: https://blog.csdn.net/qq_46279834/article/details/142208615

相关文章

  • Java
    在Java中变量需要初始化,不然系统会报错,在Java中生成随机数,需要运用random这个工具,也是需要办含头文件,()里面是需要生成随机数的范围 Java输入一个数需要到scanner这个工具,需要包含头文件,需要输入什么类型,就在next后面加上类型名字就可以了,读取完后需要关闭这个文件  在Jav......
  • 学习高校课程-软件设计模式-OOP 和 UML 类图 OOP 与 Java(lec1)
    Lecture1:OOPandUMLClassDiagramsOOPwithJavaOOP和UML类图OOP与JavaObject-OrientedProgramming面向对象编程ClassHierarchies类层次结构Superclassandsubclass超类和子类PillarsofObject-OrientedProgramming面向对象编程的支柱Abstraction–M......
  • 面试-JS Web API - 存储
    cookieHTML5存储(localStorage和sessionStorage)cookiecookie本身用于浏览器和server通讯的,被借用到本地存储来。可以用document.cookie来修改。同一个变量会覆盖,不同变量会追加。localStorage和sessionStorage//保存数据到localStoragelocalStorage.getItem('a......
  • java中cloneable接口的作用是什么
    在Java中,Cloneable接口是一个标记接口,它没有任何方法。它的存在是为了告诉编译器,该类可以被克隆(复制)。通过实现Cloneable接口,表示该类的实例可以通过调用clone()方法进行复制。clone()方法是Object类中的一个protected方法,它用于创建并返回一个与原始对象相同的副本。需要注意的......
  • 游戏客户端中的网络通信:使用Java实现实时数据交换| 网络通信|Java|游戏客户端
    在现代游戏开发中,Java作为一种强大的编程语言,广泛应用于游戏客户端的开发。Java的跨平台特性、丰富的类库以及强大的社区支持使其成为开发高性能、可维护的游戏客户端的理想选择。从简单的2D游戏到复杂的3D游戏,Java能够提供稳健的解决方案来应对各种挑战。本篇文章将深入探讨如何利......
  • 基于JAVA办公自动化系统的计算机毕设
    摘  要极光办公自动化系统是针对南开创元信息技术有限公司开发的,专门用于企业内部员工信息交流的软件,其开发过程主要包括前端应用程序的开发和后端数据库的建立两个方面。对于前者要求应用程序功能完备操作简单,对于后者要求建立起数据一致性、完整性和安全性好的数据库。本论......
  • 面试004
    1、自动化测试框架具体如何实现介绍整体技术名词:框架使用到了pytest、allure、jsonpath等技术实现框架搭建框架底层执行逻辑:根据执行选项读取测试用例信息Pytest插件用于读取测试用例信息并根据需要动态生成测试用例。最终按照编写的测试用例流程模板,执行用例具体执行......
  • Java【异常处理】
    机制概述JVM用方法调用栈来跟踪一系列方法的调用过程,位于栈顶的是正在执行的方法,当一个方法抛出异常时,根据代码处理异常。异常常见类型 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这些异常在编译时强制要求程序员处理。运行时异常: 这些异常在编译时不强......
  • java父类、子类构造函数调用过程
    java父类、子类构造函数调用过程由此看出java类初始化时构造函数调用顺序:初始化对象的存储空间为零或null值;按顺序分别调用父类成员变量和实例成员变量的初始化表达式;调用父类构造函数;(如果实用super()方法指定具体的某个父类构造函数则使用指定的那个父类构造函数)按顺序分别......
  • Java21的虚拟线程来了
    1、什么是平台线程?平台线程是作为操作系统(OS)线程的薄包装器实现的。平台线程在其底层OS线程上运行Java代码,并且平台线程在其整个生命周期内捕获其OS线程。因此,可用的平台线程数量受限于OS线程的数量。平台线程通常具有较大的线程堆栈和由操作系统维护的其他资源。它们......