平安面试小节
Posted juncaoit
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平安面试小节相关的知识,希望对你有一定的参考价值。
面试的基础不怎么好,然后整理一下吧。
1.大纲
arraylist和linkedlist的区别
set怎么保证唯一性
hashtable与hashmap的区别
hashmap的结构
异常怎么处理的
2.arraylist和linkedlist的区别
底层是基于动态数组,根据下表随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。例如最坏的情况是删除第一个数组元素,则需要将第2至第n个数组元素各向前移动一位。而之所以称为动态数组,是因为Arraylist在数组元素超过其容量大,Arraylist可以进行扩容(针对JDK1.8 数组扩容后的容量是扩容前的1.5倍),Arraylist源码中最大的数组容量是Integer.MAX_VALUE-8,对于空出的8位
可以看到,只要ArrayList的当前容足够大,add()操作向数组的尾部的效率非常高的,当向数组指定位置添加yi据时,会进行大量的数组移动复制操作。而数组复制时,最终将调用System.arraycopy()方法,因此add()操作的效率还是相当高的。尽管这样当向指定位置添加数据时也还是比Linkedlist慢,后者添加数据只需要改变指针指向即可。Arraylist删除数组也需要移动数组,效率较慢。
Linkedlist基于链表的动态数组,数据添加删除效率高,只需要改变指针指向即可,但是访问数据的平均效率低,需要对链表进行遍历。
1、对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
2.在内存中,arraylist是连续的,linkedList不不连续的。
3.set怎么保证唯一性
set保存的就一个value,如果每次进行add时都将新值与原来所有值进行比较,将是一个大大的性能浪费,举例,set中有1000个值了,如果新增一个,那这个值是否要与前1000个进行equals比较呢,相同进行过滤,没有相同则进行加入,这太慢了。
set用到了哈希方法,先进行取hashcode,在将得到的值插入到指定算出来的地址上,如果下次有相同值对应这个地址,则进行equals比较,相同则过滤,不同则通过解决冲突算法,将该值存入起来。
4.hashtable与hashmap的区别
1.它们所继承的类不一样。
根据JDK6的文档,HashTable是同步的,也就是说,它是线程安全的。从接口的实现中我们就可以看到,Hashtable是实现了Serializable;
HashMap也同样实现了Serializable,但是根据文档所述,HashMap这个类其实是不同步的,也就是说,HashMap是线程不安全的。如果要使用HashMap进行多线程的开发,那么需要手动添加外同步。(可以使用 Collections.synchronizedMap(new HashMap())获取一个线程安全的Map)。
3.HashTable不允许null作为key和value,而HashMap允许null作为key和value。
在HashMap中,只能有一条记录使用null作为key(这不是废话嘛 - -!!),但是可以有任意条value为null的记录。意思是,当使用get(key)方法取数据的时候,如果没有,这个key,或者key对应的值为空,那么get(key)返回null。
现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。造成这样的原因一方面是因为Hashtable是线程安全的,效率比较低。也可能是Hashtable开始设计的时候没有遵循驼峰命名法
5.hashmap的结构
哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。
6.异常怎么处理的
-
逻辑异常,这类异常用于描述业务无法按照预期的情况处理下去,属于用户制造的意外。
-
代码错误,这类异常用于描述开发的代码错误,例如NPE,ILLARG,都属于程序员制造的BUG。
-
专有异常,多用于特定业务场景,用于描述指定作业出现意外情况无法预先处理。
7.如何排查问题
本地断点
服务器上日志
linux对日志的操作:
A:查找到日志
1.按照文件名查找
(1)find / -name httpd.conf #在根目录下查找文件httpd.conf,表示在整个硬盘查找
(2)find /etc -name httpd.conf #在/etc目录下文件httpd.conf
(3)find /etc -name ‘*srm*‘ #使用通配符*(0或者任意多个)。表示在/etc目录下查找文件名中含有字符串‘srm’的文件
(4)find . -name ‘srm*‘ #表示当前目录下查找文件名开头是字符串‘srm’的文件
B:根据 关键词 查看日志 并返回关键词所在行:
方法一:cat 路径/文件名 | grep 关键词
demo:
cat test.log | grep "http" # 返回test.log中包含http的所有行
C:sed -n ‘5,10p’ filename 这样你就可以只查看文件的第5行到第10行。
D:最好的方式:
单个文件可以使用vi或vim编辑器打开日志文件,使用编辑器里的查找功能。在查看模式下,符号/后面跟关键字向下查找,符号?后面跟关键字向上查找,按n查找下一个,按N查找上一个。
多个文件可以使用grep命令,比如 grep ERROR /var/log/messages*。会把匹配到ERROR这个关键字的行和所在的日志文件直接输出到屏幕。
还可以使用cat命令后面使用grep过滤等方法,不如上面两个实用。上面两个较常用。
8.linux中的查找错误
看问题7即可。
9.数据库传播机制
事务的传播机制定义在TransactionDefinition接口中,我们也可以通过枚举类Propagation类调用,下面我也附上两个类的源码供参考。
REQUIRED(默认):支持使用当前事务,如果当前事务不存在,创建一个新事务。
SUPPORTS:支持使用当前事务,如果当前事务不存在,则不使用事务。
MANDATORY:中文翻译为强制,支持使用当前事务,如果当前事务不存在,则抛出Exception。 mandatory
REQUIRES_NEW:创建一个新事务,如果当前事务不存在,把当前事务挂起。
NOT_SUPPORTED:无事务执行,如果当前事务不存在,把当前事务挂起。
NEVER:无事务执行,如果当前有事务则抛出Exception。
NESTED:嵌套事务,如果当前事务存在,那么在嵌套的事务中执行。如果当前事务不存在,则表现跟REQUIRED一样。 nested
10.数据库的四大特性
* 原子性(Atomicity) :强调的事务的不可分割.
* 一致性(Consistency) :强调的事务的执行前后,数据库的的完整性保持一致.
* 隔离性(Isolation) :强调的事务的并发的访问,一个事务的执行,不应该受到另一个事务的打扰.
* 持久性(Durability) :强调的事务结束之后,数据就永久的保存的数据库中.
11.隔离级别
以上是关于平安面试小节的主要内容,如果未能解决你的问题,请参考以下文章