ArrayList和LinkedList的区别是
首先,他们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层是基于链表实现的。
由于底层数据结构不同,他们所使用的场景也不同,ArrayList更适合随机查找,LinkedList更适合删除和添加、查询。添加、删除的时间复杂度不同。
如果对数据有比较多的随机访问时,ArrayList效率比较高, 因为LinkedList要移动指针,而ArrayList是基于索引(index)的数据结构,可以直接映射到。
如果有更多的插入、删除数据时,较少的随机访问时LinkedList效率比较高,因为ArrayList要移动数据。
LinkedList比ArrayList开销更大,因为LinkedList的节点除了存储数据,还需要存储引用。
不过ArrayList的插入、删除操作也不一定比LinkedList慢,如果在List靠近末尾的地方插入,那么ArrayList移动较少的数据, 而LinkedList则需要一直查找到列表尾部, 反而 耗费较多的时间,这时ArrayList就比LinkedList要快HashMap原理
HaseMap是以键值对存储数据的集合容器,是非线程安全的
HaseMap底层数据结构:jdk1.8引进了红黑树之后,用数组+(链表,红黑树),jdk1.8之前是用数组+链表的方式实现。
HaseMap数组的默认初始长度是16,key和value是可以为null;
2.1 为什么要改成“数组+链表+红黑树”
为了提升在hash冲突严重时(链表过长)的查找性能,使用链表查找性能是O(n),而使用红黑树是O(logn)
数组+链表是为了解决hash冲突 的问题
扰动函数的话就是HaseMap的hash方法。使用hash方法就是扰动函数是为了防止一些实现比较差的hashCode() 方法,也就是说使用扰动函数之后可以减少碰撞。List和Set,Map的区别
List一索引来存取元素,有序的,元素是允许重复的,可以插入多个null;
Set不能存放重复元素,无序的,只允许一个null;
Map保存键值对映射,映射关系可以一对一,多对一
List 有基于数组、链表实现两种方式
Set、 Map容器有基于哈希存储和红黑树两种方式实现
Set 基于Map实现,Set里的元素值就是Map的值- HaseMap 和 HaseTable 的区别
HaseMap是非线程安全的, Hasetable是线程安全的;Hasetable内部的方法基本都基本都经过synchronized修饰。(如果你要保证线程安全的话就使用ConcurrentHaseMap吧!)
因为线程安全的问题,HashMap要比Hasetable效率高一点。另外,HashTable基本被淘汰,不要在代码使用它。
HaseMap中,null可以作为键,键只有一个,可以有一个或多个键所对应的值为null。HaseTable中put进的键值只有一个null;或直接抛出异常
1.8以后的HaseMap解决哈希冲突时有较大的变化,链表长度大于8时,将链表转化为红黑树,以减少搜索时间。HaseTable时没有的
- HaseMap 和 HaseTable 的区别
创建线程的四种方式
1.继承Thread类<br /> 2. 实现Runnable接口<br /> 3.实现Callable接口<br /> 4.Executors工具类创建线程池
{}和${}的区别
#{}:是预编译处理,会把sql中的#{}替换?,调用PreoaredStatement的set方法赋值<br /> ${}:是字符串替换,用于标签属性值和sql内部,属于静态文本替换。把${}替换为变量的值。 使用#{}可以防止sql注入,提高系统的安全性
当实体类的属性名和表中的字段名不一致如何处理
通过在查询的sql语句中定义字段名的别名,让字段名的别名跟实体类属性名一致。
通过类映射字段名和实体类属性名的一一对应的关系模糊查询like专门编写
在Java代码中添加sql通配符<br /> 在sql语句中拼接通配符(会引起sql注入问题)
谈谈你对MyBatis的理解?
是一个可以自定义sql,存储过程和高级映射的持久层框架,内部是封装了JDBC,只需要关注下SQL语句本身。程序员直接编写原生态sql,可以严格控制sql执行,灵活度高
优点:基于sql语句编程,相当灵活。与JDBC的话减少了50%的代码量。很好的与各种数据库兼容,能够与Spring很好的集成。
缺点:尤其是字段多,关联表多时,对开发人员编写SQL语句功底有一定的要求。Redis常见的数据结构
String:字符串,最基础的数据类型。<br /> List:列表。<br /> Hash:哈希对象<br /> Set:集合<br /> Sorted Set:有序集合,Set的基础上加了个分值
Redis在项目中使用的场景
缓存,分布式锁,消息队列
Redis应用场景
- 热点数据加速查询(主要场景),如热点商品、热点信息等访问量较高的数据
- 即时信息查询,如公交到站信息、在线人数信息等
- 时效性信息控制,如验证码控制、投票控制等
分布式数据共享,如分布式集群架构中的session分离消息队列
Mysql的ACID
原子性:要么同时成功,要么同时失败
一致性:事务前后的数据的完整性必须保持一致
隔离性: 不能呗其他事务的操作数据所干扰,多个并发事务之间要相互隔离
持久性: 事务一旦提交,不可逆什么是索引?
索引是帮组MySQL高效获取数据的数据结构(有效)。
mysql的索引?
BTREE索引: 最常见的索引类型,大部分索引都支持B树索引。
HASH索引:只有Memory引擎支持,使用场景简单。
R-tree(空间索引):空间索引是MyISAM引擎的一个特殊索引类型,主要 地理空间数据类型,通常使用较少。
Full-text(全文索引):全文索引也是MyISAM的一个特殊索引类型,用于全文索引Spring是什么?
是一个轻量级Java开发框架,目的是为了解决企业应用开发的业务逻辑和其他各层的耦合问题。
Spring用到哪些设计模式
工厂模式:简单工厂模式的体现,用来创建对象的实例
单例模式:采用单例模式,减少了对象的创建,从而减少了内存的消耗Spring常用注解
@Controller控制层组件 @Service业务层组件
Spring的Aop和ioc
Aop:面向切面编程,将那些与业务无关,但对多个对象产生影响的公共行为和逻辑,分装为一个可重用的模块。 减少系统中重复代码,降低了模块间点的耦合度,提高需要的可维护性,可用于权限的认证、日志、 事务处理等
IOC控制反转,是指创建对象的控制权转移,相当于把创建对象的主动权交给Spring,由容器的根据配置文件去创建实例和管理各个实例之间的依赖关系,使对象与对象之间松散耦合,也利于功能服用
依赖注入的方式有几种?
构造器注入<br /> setter方法注入<br /> 接口注入<br />