2018面试总结
一、JAVA基础篇
1、String s = new String("abc");创建了几个对象?
答:两个,一个字符对象,一个字符对象引用对象;
2、打印结果
String s1 = "abcde";
String s2 = "abc";
String s3 = "de";
String s4 = new String("de");
String s5 = "abc"+"de";
System.out.println(s1==(s2+s3));
System.out.println(s1==(s2+s4));
System.out.println(s1==s5);
答:false、false、true (字符串常量存储在jvm常量池中。创建字符串时,先看常量池中是否已经存储,存在则直接使用,不创建新对象);
3、以下数据哪些相等 ==
Integer a=100;
Integer b=100;
Integer c=new Integer(100);
Integer d=1000;
Integer e=1000;
Integer f=new Integer(1000)
答:a==b true;
4、Exception 与 RuntimeException
答:
了解Exception类图。RuntimeException 集成 Exception ,公共父类Throwable。常见的RuntimeException;
Exception必须捕获它的checked exception,不然会一直传递下去RuntimeException 是运行时异常,编译期不强制checked,如果出现RuntimeException,那么一定是程序员的错误。
5、ArrayList、LinkedList和Vector的区别
答:ArrayList与Vector底层使用数组结构,区别在于线程安全方面:Vector线程安全,是同步的;扩容时Vector增长为原来的一倍,而ArrayList是原来的一半;
LinkedList使用链表结构,在插入和删除上较ArrayList快,但在查找较ArrayList慢;
6、HashMap和Hashtable的区别
答:线程安全方面:Hashtable线程安全,是同步的;HashMap运行key和value为空
7、hashCode()与equal()方法,相等问题;
答:hashCode相等,equal不一定相等;equal相等hashCode一定相等;
详细参考:https://blog.csdn.net/ren7753366/article/details/80757906
8、常用线程池;
答:https://blog.csdn.net/ren7753366/article/details/80758394
9、JAVA并发工具包java.util.concurrent理解,最好阅读源码,理解其实现原理;
参考:https://blog.csdn.net/defonds/article/details/44021605/
10、jvm内存模型及垃圾回收
未完待续。。。。。。
二、数据库篇(MYSQL)
1、mysql存储引擎,优缺点,使用场景
答:参考:https://blog.csdn.net/ren7753366/article/details/80761489
2、事务特性
答:
原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。
隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
3、并发问题
1)脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2)不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3)幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
4、事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read)(默认级别) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
5、索引类型,主键和唯一索引区别
答:普通索引:
唯一索引:与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
主键索引:一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引;
组合索引:指多个字段上创建的索引,使用组合索引时遵循最左前缀集合
全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较
6、索引的优缺点
答:
1)虽然索引大大提高了查询速度,同时却会降低更新表的速度,因为更新表时要保存索引文件;
2)占用磁盘空间,一般不严重,除创建了多种组合索引;重复字段组合索引会降低查找速度,因为有查找使用索引的过程;
7、InnoDB行级锁实现
答:InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁
8、未完待续。。。。。