1、String、StringBuilder、StringBuffer的区别:
1.操作数量较少的字符串用String,不可修改的字符串;
2.在单线程且操作大量字符串用StringBuilder,速度快,但线程不安全,可修改;
3.在多线程且操作大量字符串用StringButter,线程安全,可修改。
2、Switch case中能使用long、short、byte吗?
可以的,但不能使用String。
3、List、Map、Set的区别
list:1.可以允许重复的对象
2.可以插入多个null元素
3.是一个有序的容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序
4.常用的实现类有 ArrayList、LinkedList和Vector。ArrayList最流行,它提供了使用索引的随意访问,而LinkedList则对于经常需要从List中添加或删除元素的场合更为适合
Set: 1.不允许重复对象
2.无序容器,你无法保证每个元素的存储顺序,TreeSet通过Comparator 或者 Comparable 维护了一个排序顺序。
3.只允许插入一个null元素
4.Set接口最流行的几个实现类是 HashSet、LinkedHashSet和TreeSet。最流行的是基于HashMap实现的HashSet。TreeSet还实现了SortedSet接口,因此TreeSet是一个根据其compare()和compareTo()的定义进行排序的有序容器。
4、Mysql中UnionUnion all的区别?
union去重,排序;union all不去重,无序。
5、经典JVM中,堆栈和线程的关系
6、ArrayList和Linkedlist的区别
ArrayList:底层采用动态数组的方式,查询快增删慢
LinkedList:底层采用双向链表,增删快查询慢
7、set和list的区别
set:集合,继承Collection,无序并且元素不允许重复,检查元素效率低下,删除和插入的效率高,插入和删除不会引起元素的位置变化
List:列表,继承Collection,有序且允许元素重复,和数组类似,List可以动态增长,查找元素的效率较高,插入元素和删除元素效率低,因为会引起其他元素位置发生变化
8、死锁的相关知识
定义:死锁是指多个进程在运行过程中竞争资源时造成的一种僵局,如果没有外界干涉将无法继续运行。原因:竞争资源。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。 进程间推进顺序非法:进程在运行过程中,请求和释放资源的顺序不当,也同样会产生进程死锁。必要条件:互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一进程所占用。请求和保持条件:当进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源在未使用完之前,不能剥夺,只能在使用完时由自己释放。环路等待条件:在发生死锁时,必然存在一个进程--资源的环形链。预防死锁方法:1、资源一次性分配:一次性分配所有资源,这样就不会再有请求了:(破坏请求条件)2、 只要有一个资源得不到分配,也不给这个进程分配其他的资源:(破坏请保持条件)3、可剥夺资源:即当某进程获得了部分资源,但得不到其它资源,则释放已占有的资源(破坏不可剥夺条件)4、资源有序分配法:系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反(破坏环路等待条件)
9、多线程的创建
继承Thread类和实现Runnable接口
10、MySQL查询第二页的五条数据
select * from userInfo LIMIT 2,5;
11、多态的必要条件
有继承、有重写、父类的引用指向子类的对象
12、堆栈多线程的关系
13、线程安全的单例模式
/**
* 第一种饿汉式
*/
private static SingleTon instance = new SingleTon();
private SingleTon(){}
public static SingleTon getInstance(){
return instance;
}
/**
* 第二种懒汉式
*/
private static SingleTon instance;
private SingleTon(){}
public static synchronized SingleTon getInstance(){
if (instance == null){
instance=new SingleTon();
}
return instance;
}
14、怎么判断索引
使用explain关键字
15、redis的应用
前端传递请求给后台,查询数据时首先查询redis中是否存在,如果没有再查询数据库,查询到数据之后将数据存到redis中,下次查询时将可以直接查询redis中的数据。
16、@data
Data注解是lombok提供的,可以为类提供get和set方法, 还有 equals()、hashCode()、toString() 、isXxx()等方法
17、for updte
如果遇到存在高并发并且对于数据的准确性很有要求的场景,是需要了解和使用for update的。比如涉及到金钱、库存等。一般这些操作都是很长一串并且是开启事务的。如果库存刚开始读的时候是1,而立马另一个进程进行了update将库存更新为0了,而事务还没有结束,会将错的数据一直执行下去,就会有问题。所以需要for upate 进行数据加锁防止高并发时候数据出错。
使用方法:select * from table where xxx for update.
注意:for update 仅适用于InnoDB,并且必须开启事务,在begin与commit之间才生效。
18、mybatis中的$和#
1、在 MyBatis 中提供了两种方式读取参数的内容到SQL语句中,分别是:
(1)#{参数名} :实体类对象或则 Map 集合读取内容
(2)${参数名} :实体类对象或则 Map 集合读取内容
2、两者的区别:
(1)#{} : 采用预编译方式,可以防止 SQL 注入
(2)${}: 采用直接赋值方式,无法阻止 SQL 注入攻击