Java 面试

1、ArrayList和LinkedList的区别

2、@Autowired和@Resource的主要区别

3、集合

4、mysql索引失效的几种情况

 

1、ArrayList和LinkedList的区别

ArrayList:

 底层数据结构:

  ArrayList基于数组实现,元素在内存中连续存储,支持随机访问(时间复杂度为o(1));

  LinkedList基于双向链表实现,节点离散存储并通过指针关联,不支持随机访问(时间复杂度为O(n));

 随机访问:

  ArrayList通过索引直接访问元素;

  LinkedList需遍历链表,效率较低;

 插入、删除:

  ArrayList在末尾插入/删除效率较高(时间复杂度O(1)),中间插入/删除需移动后续元素,(时间复杂度O(n));

  LinkedList在任意位置插入/删除仅需修改节点指针引用,效率较高(时间复杂度O(1)),但需遍历链表定位节点。 ‌

 扩容机制:arrayList默认容量不足时自动扩容为原容量的1.5倍,LinkedList无需扩容

  • ‌优先选择ArrayList‌:当需要频繁随机访问元素或尾部操作较多时(如排行榜、购物车等)。 ‌
  • ‌优先选择LinkedList‌:当需要频繁在中间或首尾插入/删除元素时。 ‌

 

2、@Autowired和@Resource的主要区别

  1-- @Autowired是spring框架,@Resource是Java标准注解;

  2-- @Autowired优先于按照类型(bytype)匹配,然后名称匹配(byname),冲突时需显式指定@qualifier;

   @Resource优先于按照名称(byname)进行匹配,然后按照类型(bytype)进行匹配;

  3-- @Autowired支持构造方法注入、属性注入、setter方法注入、方法参数注入

            @Resource仅支持属性方法与setter方法注入,使用构造方法注入会报错。

3、集合

  1.collection

    list(有序集合,可以包含重复元素,允许插入null元素) : arrayList(动态数组)、linkedList(双向链表)

    set (无序集合,不包含重复元素):hashSet(不保证元素的顺序)、linkedHashSet(保持元素的插入顺序)

  2、map(用于存储键值对)

    hashMap(允许使用空值和空键)、LinkedHashMap(维护插入顺序或者访问顺序)

4、mysql索引失效的几种情况

  ---1 索引列参与了计算:查询条件中对索引列进行了数学运算、函数操作或者其他非索引列的操作

  ---2 索引列使用了函数

  ---3 隐式类型转换  :比较列类型和比较值类型不匹配时,mysql会进行类型转换

  ---4 使用通配符like

  ---5 or条件中的列没有被索引:使用or连接多个条件时,如果每个条件中的列都没有被索引,那么整个查询都没有被索引

  ---6 复合索引的不正确使用:如果查询条件没有从索引的最左列开始,那么mysql可能不会使用该复合索引

posted @ 2025-10-13 22:55  krt-wanyi  阅读(5)  评论(0)    收藏  举报