1.有没有用过分页?
Mybatis-PageHelper
2.如果你想实现分页这个功能,需要前端传递哪些参数?后端给前端返回哪些数据?
前端传递以下参数给后端:
- pageNum: 当前页码,表示要查询的是第几页的数据。
- pageSize: 每页显示的数据条数,确定每页显示的数据量。
- 其他查询条件: 可选参数,如筛选条件、排序方式等,根据具体需求而定。
后端会根据这些参数进行数据查询,并返回以下数据给前端:
- 当前页的数据: 包含当前页的数据列表。
- 总数据量: 所有符合查询条件的数据总量。
- 总页数: 根据总数据量和每页显示的数据条数计算得出的总页数。
- 其他元数据: 如是否有上一页、下一页,当前页起始数据的序号等,用于前端展示和分页控制。
3.char和varchar两者之间有什么区别(存储空间)char定义的255空间里面不管填什么都是255,而varchar定义的255空间是根据字符串的数量来变化的
- CHAR: CHAR是固定长度的字符类型,当定义一个CHAR类型的字段时,需要指定该字段的固定长度。如果存储的字符长度小于定义的长度,则会在末尾填充空格,使其达到定义的长度。由于是固定长度,所以CHAR类型在存储时会浪费一定的存储空间。
- VARCHAR: VARCHAR是可变长度的字符类型,它可以存储可变长度的字符串,只会使用实际需要的存储空间加上一个字节来记录字符串的长度。
4.sql查询效率过慢,有什么优化的方案?
- 索引优化: 确保查询涉及的列都有合适的索引。通过使用索引,可以加快数据检索速度。但要注意不要过度索引,因为索引也会增加写操作的成本。
- 查询语句优化: 确保查询语句写得高效,避免不必要的子查询、联合查询或者笛卡尔积等操作。合理使用WHERE、ORDER BY、GROUP BY等子句,并尽量减少返回的列数。
- 数据库结构优化: 如果可能的话,考虑优化数据库表的结构,包括合理设计表的字段、范式化设计、拆分大表等,以提升查询效率。
- 缓存技术: 对于频繁查询但不经常更新的数据,可以考虑使用缓存技术,如Redis等,将查询结果缓存起来,减少数据库的压力。
- 分页查询优化: 当查询大量数据时,使用分页查询并合理设置分页大小,以减少单次查询的数据量。
- 硬件优化: 在一定程度上,可以通过提升硬件性能,如增加内存、使用SSD等,来提升数据库的整体性能。
5.springboot有哪几种读取配置的方式,读取yml文件里面定义的东西
- 使用
@Value
注解: 在需要读取配置的地方,可以使用@Value
注解注入配置项的值。 - 使用
@ConfigurationProperties
注解: 可以通过@ConfigurationProperties
注解将配置文件中的属性映射到 Java Bean 中,然后在需要使用的地方注入该 Bean。 - 使用
Environment
对象: 可以通过Environment
对象直接获取配置项的值,例如environment.getProperty("property.key")
。 - 使用
@PropertySource
注解: 可以在 Spring Boot 应用的主配置类上使用@PropertySource
注解指定外部属性文件的位置,然后通过@Value
注解或者Environment
对象来读取属性值。
6.springboot有哪些常用的注解,启动类上面用什么注解?
- @SpringBootApplication: 这是一个复合注解,包括了
@SpringBootConfiguration
、@EnableAutoConfiguration
和@ComponentScan
。通常用于启动类上,标识该类是Spring Boot应用的入口类。 - @Controller: 用于标识控制器类。
- @RestController: 组合了
@Controller
和@ResponseBody
,用于标识RESTful风格的控制器类。 - @Service: 用于标识服务类。
- @Repository: 用于标识数据访问层(DAO)类。
- @Component: 泛指组件,可以标识任何被Spring容器管理的类。
- @Autowired: 自动装配,用于在需要时自动注入依赖。
- @Value: 用于从配置文件中读取属性值。
- @Configuration: 用于定义配置类,可结合@Bean注解使用。
- @RequestMapping: 用于映射HTTP请求到处理方法上。
7.mybatis如何将sql的执行结果封造成对象进行返回的 (resultMap)
- 映射文件(Mapper XML): 在映射文件中,通过 SQL 语句查询数据库,并在
<resultMap>
中定义了查询结果与实体类的映射关系,指定了每个列如何映射到实体类的属性上。 - 实体类(POJO): 实体类是用于封装查询结果的对象,在查询结果与实体类的映射关系被确定后,MyBatis 将查询结果按照映射关系封装到对应的实体类对象中。
8.==和equals有什么区别
使用 ==
比较的是它们在内存中的地址,而使用 equals()
比较的是它们的内容是否相同。
9.final关键词在java中有什么作用?(修饰类,方法,变量)
-
修饰类: 使用
final
修饰的类称为最终类,不能被继承,即该类不能有子类。这样做的目的通常是为了安全性或者设计上的考虑,确保类的行为不会被修改或继承。 -
修饰方法: 使用
final
修饰的方法称为最终方法,不能被子类重写(覆盖)。这样可以确保某个方法的行为不会被子类改变。 -
修饰变量: 使用
final
修饰的变量称为常量,一旦赋值后不可再修改。对于基本数据类型,其数值不能改变;对于引用类型,其引用不能指向其他对象,但对象本身的内容可以修改。
10.java有哪些容器?(collections)
- List(列表): 允许重复元素,并且保持插入顺序。常见的实现类有
ArrayList
、LinkedList
、Vector
。 - Set(集合): 不允许重复元素,通常没有特定的顺序。常见的实现类有
HashSet
、TreeSet
、LinkedHashSet
。 - Map(映射): 存储键值对,每个键最多对应一个值。常见的实现类有
HashMap
、TreeMap
、LinkedHashMap
。 - Queue(队列): 按照特定顺序存储元素,并且可以在队列的一端插入元素,在另一端移除元素。常见的实现类有
LinkedList
、PriorityQueue
。 - Stack(栈): 先进后出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。常见的实现类有
Stack
。
11.数组转list,list转数组的方法
- 数组转列表:Arrays.asList(array)
// 使用 Arrays 类的 asList() 方法
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
- 列表转数组:list.toArray(new String[0])
// 使用 List 的 toArray() 方法
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String[] array = list.toArray(new String[0]); // 传入一个空数组作为参数
12.cookie和session有什么区别?
Cookie:
- Cookie 是由服务器发送到客户端并存储在客户端的小型文本文件。
- 客户端的每次请求都会携带相应的 Cookie 数据。
- 可以设置 Cookie 的过期时间,使其在一定时间后失效。
- 主要用于在客户端存储少量的用户信息,如用户的偏好设置、身份验证令牌等。
- Cookie 存储在客户端,因此不适合存储敏感信息,容易被篡改。
Session:
- Session 是在服务器端保存的一种数据结构,用于跟踪用户的状态。
- 每个用户访问服务器时,服务器都会为其创建一个唯一的会话标识符(session ID),并将其存储在服务器端。
- 会话数据存储在服务器端,可以存储较大量的用户信息,并且相对安全。
- 通常使用 Cookie 或 URL 重写将会话标识符发送到客户端,以便在后续的请求中识别用户。
- 会话在用户关闭浏览器或超过一定时间未活动时会过期。
区别:
- 存储位置:Cookie 存储在客户端,Session 存储在服务器端。
- 安全性:Session 相对更安全,因为会话数据存储在服务器端,而 Cookie 存储在客户端并容易被篡改。
- 存储容量:Cookie 存储容量较小,Session 存储容量较大。
- 生命周期:Cookie 可以设置过期时间,而 Session 通常在用户关闭浏览器或超过一定时间未活动时过期。