后端实习面试题

1.有没有用过分页?

Mybatis-PageHelper

2.如果你想实现分页这个功能,需要前端传递哪些参数?后端给前端返回哪些数据?

前端传递以下参数给后端:

  1. pageNum: 当前页码,表示要查询的是第几页的数据。
  2. pageSize: 每页显示的数据条数,确定每页显示的数据量。
  3. 其他查询条件: 可选参数,如筛选条件、排序方式等,根据具体需求而定。

后端会根据这些参数进行数据查询,并返回以下数据给前端:

  1. 当前页的数据: 包含当前页的数据列表。
  2. 总数据量: 所有符合查询条件的数据总量。
  3. 总页数: 根据总数据量和每页显示的数据条数计算得出的总页数。
  4. 其他元数据: 如是否有上一页、下一页,当前页起始数据的序号等,用于前端展示和分页控制。

3.char和varchar两者之间有什么区别(存储空间)char定义的255空间里面不管填什么都是255,而varchar定义的255空间是根据字符串的数量来变化的

  1. CHAR: CHAR是固定长度的字符类型,当定义一个CHAR类型的字段时,需要指定该字段的固定长度。如果存储的字符长度小于定义的长度,则会在末尾填充空格,使其达到定义的长度。由于是固定长度,所以CHAR类型在存储时会浪费一定的存储空间。
  2. VARCHAR: VARCHAR是可变长度的字符类型,它可以存储可变长度的字符串,只会使用实际需要的存储空间加上一个字节来记录字符串的长度。

4.sql查询效率过慢,有什么优化的方案?

  1. 索引优化: 确保查询涉及的列都有合适的索引。通过使用索引,可以加快数据检索速度。但要注意不要过度索引,因为索引也会增加写操作的成本。
  2. 查询语句优化: 确保查询语句写得高效,避免不必要的子查询、联合查询或者笛卡尔积等操作。合理使用WHERE、ORDER BY、GROUP BY等子句,并尽量减少返回的列数。
  3. 数据库结构优化: 如果可能的话,考虑优化数据库表的结构,包括合理设计表的字段、范式化设计、拆分大表等,以提升查询效率。
  4. 缓存技术: 对于频繁查询但不经常更新的数据,可以考虑使用缓存技术,如Redis等,将查询结果缓存起来,减少数据库的压力。
  5. 分页查询优化: 当查询大量数据时,使用分页查询并合理设置分页大小,以减少单次查询的数据量。
  6. 硬件优化: 在一定程度上,可以通过提升硬件性能,如增加内存、使用SSD等,来提升数据库的整体性能。

5.springboot有哪几种读取配置的方式,读取yml文件里面定义的东西

  1. 使用 @Value 注解: 在需要读取配置的地方,可以使用 @Value 注解注入配置项的值。
  2. 使用 @ConfigurationProperties 注解: 可以通过 @ConfigurationProperties 注解将配置文件中的属性映射到 Java Bean 中,然后在需要使用的地方注入该 Bean。
  3. 使用 Environment 对象: 可以通过 Environment 对象直接获取配置项的值,例如 environment.getProperty("property.key")
  4. 使用 @PropertySource 注解: 可以在 Spring Boot 应用的主配置类上使用 @PropertySource 注解指定外部属性文件的位置,然后通过 @Value 注解或者 Environment 对象来读取属性值。

6.springboot有哪些常用的注解,启动类上面用什么注解?

  1. @SpringBootApplication: 这是一个复合注解,包括了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan。通常用于启动类上,标识该类是Spring Boot应用的入口类。
  2. @Controller: 用于标识控制器类。
  3. @RestController: 组合了@Controller@ResponseBody,用于标识RESTful风格的控制器类。
  4. @Service: 用于标识服务类。
  5. @Repository: 用于标识数据访问层(DAO)类。
  6. @Component: 泛指组件,可以标识任何被Spring容器管理的类。
  7. @Autowired: 自动装配,用于在需要时自动注入依赖。
  8. @Value: 用于从配置文件中读取属性值。
  9. @Configuration: 用于定义配置类,可结合@Bean注解使用。
  10. @RequestMapping: 用于映射HTTP请求到处理方法上。

7.mybatis如何将sql的执行结果封造成对象进行返回的 (resultMap)

  1. 映射文件(Mapper XML): 在映射文件中,通过 SQL 语句查询数据库,并在 <resultMap> 中定义了查询结果与实体类的映射关系,指定了每个列如何映射到实体类的属性上。
  2. 实体类(POJO): 实体类是用于封装查询结果的对象,在查询结果与实体类的映射关系被确定后,MyBatis 将查询结果按照映射关系封装到对应的实体类对象中。

8.==和equals有什么区别

使用 == 比较的是它们在内存中的地址,而使用 equals() 比较的是它们的内容是否相同。

9.final关键词在java中有什么作用?(修饰类,方法,变量)

  1. 修饰类: 使用 final 修饰的类称为最终类,不能被继承,即该类不能有子类。这样做的目的通常是为了安全性或者设计上的考虑,确保类的行为不会被修改或继承。

  2. 修饰方法: 使用 final 修饰的方法称为最终方法,不能被子类重写(覆盖)。这样可以确保某个方法的行为不会被子类改变。

  3. 修饰变量: 使用 final 修饰的变量称为常量,一旦赋值后不可再修改。对于基本数据类型,其数值不能改变;对于引用类型,其引用不能指向其他对象,但对象本身的内容可以修改。

10.java有哪些容器?(collections)

  1. List(列表): 允许重复元素,并且保持插入顺序。常见的实现类有 ArrayListLinkedListVector
  2. Set(集合): 不允许重复元素,通常没有特定的顺序。常见的实现类有 HashSetTreeSetLinkedHashSet
  3. Map(映射): 存储键值对,每个键最多对应一个值。常见的实现类有 HashMapTreeMapLinkedHashMap
  4. Queue(队列): 按照特定顺序存储元素,并且可以在队列的一端插入元素,在另一端移除元素。常见的实现类有 LinkedListPriorityQueue
  5. Stack(栈): 先进后出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。常见的实现类有 Stack

11.数组转list,list转数组的方法

  1. 数组转列表:Arrays.asList(array)
// 使用 Arrays 类的 asList() 方法
String[] array = {"a", "b", "c"};
List<String> list = Arrays.asList(array);
  1. 列表转数组: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 通常在用户关闭浏览器或超过一定时间未活动时过期。
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值