Java面试题
Posted zjpnotsleep
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面试题相关的知识,希望对你有一定的参考价值。
- 简述ArrayList、LinkedList区别
1) ArrayList是数组的数据结构,LinkedList是双向链表的数据结构.
2) ArrayList在访问数组的下标时效率比较高,在新增和删除时因为会对操作点之后的数据下标造成影响,所以效率比较低,
3) LinkedList因为是链表的结构,所以在访问下标时先判断当前下标大于或小于链表长度的二分之一,然后从前或后依次查找.效率比较低,,,LinkedList的元素是上一个指向下一个的,所以插入数据或删除数据可以直接增删,不会对其他元素造成影响,所以增删效率高.
- ConcurrentHashMap如何保证的并发性能
ConcurrentHashMap相当于一个加了锁的HashTable.但是与HashTable不同的是它的锁并不是加在整个table上的,HashMap的结构是 数组加链表加红黑树, 锁是在数组上分段
加的,所以在安全的情况下效率也很高.
- 缓存穿透、缓存雪崩的解决方案
(1).缓存穿透是由于客户端发送大量的请求去请求一个并不存在的数据,这样,并不会走缓存,所以大量请求全部指向到数据库,就会造成缓存击穿,
解决方案有两种:一种使用缓存空值,查询不存在的key的时候直接返回null值,并做缓存,下次直接从缓存中获取,坏处是会缓存大量无用的key.
另外一种是使用boolean过滤器,
(2).缓存雪崩是由于同一时间大量缓存失效,大量请求去请求数据库,数据库扛不住就会发生雪崩,
解决方案:使用缓存集群,提高可用性.或者做缓存持久化,尽快恢复缓存,或者设置缓存的随机失效时间.
- spring声明式事务失效场景举例
- @transactional添加在非public修饰的方法上
- @transactional的属性propagation设置错误,
- Rollbackfor可以指定能够触发回滚的异常类型,如果属性设置错误,则事务会失效.
- 数据库引擎不支持事务,
- 异常被catch了事务会失效.
- 在没有添加@transactional的方法A中调用的方法B.如果方法a被调用,则b的事务不会生效
- mysql表中性别字段是否应该建立索引,简述原因
如果性别字段的值即男,女或者0,1分布均匀则不应该建立索引,如果分布不均,查询数量较少的数据时,索引能提高效率.
- git merge rebase区别
Rebase是把当前分支放在最后面,
Merge会把分支和当前commit的合并在一起,形成一个新的commit提交.
- 简述eureka自我保护机制,实现了cap中的哪两项?
Eureka运行期间,如果心跳失败比例在15分钟内地狱85%,就会将当前实例注册信息保护起来,
实现了cap中的ap.即一致性,分区容错性
- mysql like搜索怎样才能走索引
Like搜索时只有 “%”不在第一位的时候才会走索引.
- 如何在遍历集合时安全的删除集合中的元素
使用Iterator迭代器遍历时调用iterator.remove();方法删除元素,不要调用list.remove
- 深拷贝和浅拷贝的区别,如何实现深拷贝
如果拷贝之后,被拷贝的对象发生变化,拷贝的也跟着发生了变化,就是浅拷贝,如果没有发生变化,就是深拷贝.
以上是关于Java面试题的主要内容,如果未能解决你的问题,请参考以下文章
2020年1-6月份Java面试题总结,20多类1100道面试题含答案解析