京东面经汇总(一)
1、List和Set的区别
list 中的对象可重复,有序。set中不允许重复,并且无序。
2、List常用的实现类
ArrayList,Linkedlist以及Vector
3、ArrayList和LinkedList的区别
ArrayList的数据结构是数组,由于数组的特点,所以查询以及更新速度快,但是添加以及删除速度慢,因为每次操作,目标位置后面的元素都要移动,而Linkedlist是链表结构,所以和arraylist刚好相反。添加,删除快,而查询慢。
4、Set常用的实现类
HashSet,LinkedHashSet,TreeSet
5、HashSet和LinkedHashSet的区别
LinkedHashSet直接继承HashSet。
6、int和Integer的区别
int是基本数据类型,Integer是int的封装类;
Integer变量必须在实例化后才能使用,默认值null,而int不需要,一个int变量4个字节,默认值为0
Integer是对象的引用,存储的是地址,而int直接存储数值
7、==和equals的区别
==比较的是两者是否指向同一地址(引用是否相同)
equals比较的是两者指向的地址的值是否相同(值是否相同)
8、final关键字
java中的关键字,可以修饰类,方法,成员变量,本地变量
一旦引用声明final,其引用将不能被改变,否则会报错
被final修饰的方法不能被重写
被final修饰的变量初始化后,其值不能被改变
9、接口和抽象类的区别
接口使用interface修饰,抽象类使用abstract修饰。
接口中只能有抽象方法,不能被实例化;
一个类只能继承一个抽象类,但是可以实现多个接口;
10、原子操作,CAS存在的问题,如何解决
原子操作:一个或多个操作在cpu执行过程中不被中断的特性;可以通过加锁和CAS保证原子性操作
CAS: 三个参数 一个当前内存值V,旧的预期值A,即将更新的值B,当且仅当AV相同得时候,将内存值V更改为B,返回true,否则返回false
存在的问题:ABA,AtomicStampedReference来解决ABA问题:这个类的compareAndSet方法作用是首先检查当前引用是否等于预期引用,并且当前标志是否等于预期标志,如果全部相等,则以原子方式将该引用和该标志的值设置为给定的更新值。
11、++和--操作是否为原子操作,为什么
不是,++先取出值,再+1或-1,最后存入值,具有多个步骤,所以不是原子操作;
12、Java的异常处理机制,Error和Exception的区别
两者都继承与Throwable;
Error代表无法预期的错误,不能通过程序本身来解决;
Exception代表可以捕捉的异常,可以通过程序解决;
13、IOException需要捕获吗?
输入输出异常,需要捕获吧!
14、synchronized和Lock的区别
synchronizd是java中的关键字,Lock是一个类,接口
synchronizd是悲观锁(独占锁),Lock是乐观锁;乐观锁就是每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。乐观锁实现的机制就是CAS操作
15、线程池:创建、核心参数、拒绝策略
创建线程池调用
Executors
中的对应方法,一共有四种类型:
newSingleThreadPool: 单线程线程池
newfixedThreadPool: 固定大小的线程池
newSheduledThreadPool:定期,可调度的线程池
newCacheThreadPool:可缓存的线性池
ThreadPoolExecutor是我们线程池核心类,参数有7个:
corePoolSize(线程池核心大小)、maximumPoolSize(最大线程池大小)、keepAliveTime(空闲线程存活时间)、Unit(销毁时间单位)、拒接策略等。
拒接策略有四种:
AbortPolicy:直接抛出异常(默认)
CallerRunsp0licy:如果线程池没有关闭,直接在线程池中执行新任务
DiscardPolicy:不出来新任务,直接丢弃
DiscardOldestPolicy:抛弃最老的任务
16、Spring依赖注入的方式
接口注入
Setter方法注入
构造方法注入
17、当前bean有没有都行,应该采用什么方式注入
接口注入?
18、Redis的数据类型,常用的Redis命令
String,Set,Zset,List,Hash
19、MyBatis中 # 和 的区别
使用#{xxx}引用参数的时候,Mybatis会把这个xxx参数认为是一个字符串,--'xxx'
使用${xxx}引用参数的时候, Mybatis会把这个xxx参数认为是一个值,--xxx
20、Mysql联合索引的最左匹配原则
只能从左到右顺序组合创建,联合索引的最左原则就是建立索引KEY union_index (a,b,c)时,等于建立了(a)、(a,b)、(a,b,c)三个索引,从形式上看就是索引向左侧聚集,所以叫做最左原则,因此最常用的条件应该放到联合索引的组左侧。