1. ArrayList和LinkedList的区别是

    首先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的。
    由于底层数据结构不同,他们所使用的场景也不同,ArrayList更适合随机查找,LinkedList更适合删除和添加、查询。添加、删除的时间复杂度不同。
    如果对数据有比较多的随机访问时,ArrayList效率比较高, 因为LinkedList要移动指针,而ArrayList是基于索引(index)的数据结构,可以直接映射到。
    如果有更多的插入、删除数据时,较少的随机访问时LinkedList效率比较高,因为ArrayList要移动数据。
    LinkedList比ArrayList开销更大,因为LinkedList的节点除了存储数据,还需要存储引用。
    不过ArrayList的插入、删除操作也不一定比LinkedList慢,如果在List靠近末尾的地方插入,那么ArrayList移动较少的数据, 而LinkedList则需要一直查找到列表尾部, 反而 耗费较多的时间,这时ArrayList就比LinkedList要快

  2. HashMap原理

    HaseMap是以键值对存储数据的集合容器,是非线程安全的
    HaseMap底层数据结构:jdk1.8引进了红黑树之后,用数组+(链表,红黑树),jdk1.8之前是用数组+链表的方式实现。
    HaseMap数组的默认初始长度是16,key和value是可以为null;
    2.1 为什么要改成“数组+链表+红黑树”
    为了提升在hash冲突严重时(链表过长)的查找性能,使用链表查找性能是O(n),而使用红黑树是O(logn)
    数组+链表是为了解决hash冲突 的问题
    扰动函数的话就是HaseMap的hash方法。使用hash方法就是扰动函数是为了防止一些实现比较差的hashCode() 方法,也就是说使用扰动函数之后可以减少碰撞。

  3. List和Set,Map的区别

    List一索引来存取元素,有序的,元素是允许重复的,可以插入多个null;
    Set不能存放重复元素,无序的,只允许一个null;
    Map保存键值对映射,映射关系可以一对一,多对一
    List 有基于数组、链表实现两种方式
    Set、 Map容器有基于哈希存储和红黑树两种方式实现
    Set 基于Map实现,Set里的元素值就是Map的值

    1. HaseMap 和 HaseTable 的区别
      HaseMap是非线程安全的, Hasetable是线程安全的;Hasetable内部的方法基本都基本都经过synchronized修饰。(如果你要保证线程安全的话就使用ConcurrentHaseMap吧!)
      因为线程安全的问题,HashMap要比Hasetable效率高一点。另外,HashTable基本被淘汰,不要在代码使用它。
      HaseMap中,null可以作为键,键只有一个,可以有一个或多个键所对应的值为null。HaseTable中put进的键值只有一个null;或直接抛出异常
      1.8以后的HaseMap解决哈希冲突时有较大的变化,链表长度大于8时,将链表转化为红黑树,以减少搜索时间。HaseTable时没有的
  4. 创建线程的四种方式

    1. 1.继承Thread类<br /> 2. 实现Runnable接口<br /> 3.实现Callable接口<br /> 4.Executors工具类创建线程池
  5. {}和${}的区别

    1. #{}:是预编译处理,会把sql中的#{}替换?,调用PreoaredStatement的set方法赋值<br /> ${}:是字符串替换,用于标签属性值和sql内部,属于静态文本替换。把${}替换为变量的值。 使用#{}可以防止sql注入,提高系统的安全性
  6. 当实体类的属性名和表中的字段名不一致如何处理

    通过在查询的sql语句中定义字段名的别名,让字段名的别名跟实体类属性名一致。
    通过类映射字段名和实体类属性名的一一对应的关系

  7. 模糊查询like专门编写

    1. Java代码中添加sql通配符<br /> sql语句中拼接通配符(会引起sql注入问题)
  8. 谈谈你对MyBatis的理解?

    是一个可以自定义sql,存储过程和高级映射的持久层框架,内部是封装了JDBC,只需要关注下SQL语句本身。程序员直接编写原生态sql,可以严格控制sql执行,灵活度高
    优点:基于sql语句编程,相当灵活。与JDBC的话减少了50%的代码量。很好的与各种数据库兼容,能够与Spring很好的集成。
    缺点:尤其是字段多,关联表多时,对开发人员编写SQL语句功底有一定的要求。

  9. Redis常见的数据结构

    1. String:字符串,最基础的数据类型。<br /> List:列表。<br /> Hash:哈希对象<br /> Set:集合<br /> Sorted Set:有序集合,Set的基础上加了个分值
  10. Redis在项目中使用的场景

    1. 缓存,分布式锁,消息队列
  11. Redis应用场景

  12. 热点数据加速查询(主要场景),如热点商品、热点信息等访问量较高的数据
  13. 即时信息查询,如公交到站信息、在线人数信息等
  14. 时效性信息控制,如验证码控制、投票控制等
  15. 分布式数据共享,如分布式集群架构中的session分离消息队列

  16. Mysql的ACID

    原子性:要么同时成功,要么同时失败
    一致性:事务前后的数据的完整性必须保持一致
    隔离性: 不能呗其他事务的操作数据所干扰,多个并发事务之间要相互隔离
    持久性: 事务一旦提交,不可逆

  17. 什么是索引?

    1. 索引是帮组MySQL高效获取数据的数据结构(有效)。
  18. mysql的索引?

    BTREE索引: 最常见的索引类型,大部分索引都支持B树索引。
    HASH索引:只有Memory引擎支持,使用场景简单。
    R-tree(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要 地理空间数据类型,通常使用较少。
    Full-text(全文索引):全文索引也是MyISAM的一个特殊索引类型,用于全文索引

  19. Spring是什么?

    1. 是一个轻量级Java开发框架,目的是为了解决企业应用开发的业务逻辑和其他各层的耦合问题。
  20. Spring用到哪些设计模式

    工厂模式:简单工厂模式的体现,用来创建对象的实例
    单例模式:采用单例模式,减少了对象的创建,从而减少了内存的消耗

  21. Spring常用注解

    1. @Controller控制层组件 @Service业务层组件
  22. Spring的Aop和ioc

    Aop:面向切面编程,将那些与业务无关,但对多个对象产生影响的公共行为和逻辑,分装为一个可重用的模块。 减少系统中重复代码,降低了模块间点的耦合度,提高需要的可维护性,可用于权限的认证、日志、 事务处理等
    IOC控制反转,是指创建对象的控制权转移,相当于把创建对象的主动权交给Spring,由容器的根据配置文件去创建实例和管理各个实例之间的依赖关系,使对象与对象之间松散耦合,也利于功能服用

  23. 依赖注入的方式有几种?

    1. 构造器注入<br /> setter方法注入<br /> 接口注入<br />