Java面试题

Posted zjpnotsleep

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java面试题相关的知识,希望对你有一定的参考价值。

  1. 简述ArrayList、LinkedList区别

1) ArrayList是数组的数据结构,LinkedList是双向链表的数据结构.

2) ArrayList在访问数组的下标时效率比较高,在新增和删除时因为会对操作点之后的数据下标造成影响,所以效率比较低,

3) LinkedList因为是链表的结构,所以在访问下标时先判断当前下标大于或小于链表长度的二分之一,然后从前或后依次查找.效率比较低,,,LinkedList的元素是上一个指向下一个的,所以插入数据或删除数据可以直接增删,不会对其他元素造成影响,所以增删效率高.

 

 

  1. ConcurrentHashMap如何保证的并发性能

ConcurrentHashMap相当于一个加了锁的HashTable.但是与HashTable不同的是它的锁并不是加在整个table上的,HashMap的结构是 数组加链表加红黑树, 锁是在数组上分段

加的,所以在安全的情况下效率也很高.

 

  1. 缓存穿透、缓存雪崩的解决方案

(1).缓存穿透是由于客户端发送大量的请求去请求一个并不存在的数据,这样,并不会走缓存,所以大量请求全部指向到数据库,就会造成缓存击穿,

解决方案有两种:一种使用缓存空值,查询不存在的key的时候直接返回null值,并做缓存,下次直接从缓存中获取,坏处是会缓存大量无用的key.

另外一种是使用boolean过滤器,

(2).缓存雪崩是由于同一时间大量缓存失效,大量请求去请求数据库,数据库扛不住就会发生雪崩,

解决方案:使用缓存集群,提高可用性.或者做缓存持久化,尽快恢复缓存,或者设置缓存的随机失效时间.

  1. spring声明式事务失效场景举例
  2. @transactional添加在非public修饰的方法上
  3. @transactional的属性propagation设置错误,
  4. Rollbackfor可以指定能够触发回滚的异常类型,如果属性设置错误,则事务会失效.
  5. 数据库引擎不支持事务,
  6. 异常被catch了事务会失效.
  7. 在没有添加@transactional的方法A中调用的方法B.如果方法a被调用,则b的事务不会生效

 

  1. mysql表中性别字段是否应该建立索引,简述原因

如果性别字段的值即男,女或者0,1分布均匀则不应该建立索引,如果分布不均,查询数量较少的数据时,索引能提高效率.

 

  1. git merge rebase区别

Rebase是把当前分支放在最后面,

Merge会把分支和当前commit的合并在一起,形成一个新的commit提交.

 

  1. 简述eureka自我保护机制,实现了cap中的哪两项?

Eureka运行期间,如果心跳失败比例在15分钟内地狱85%,就会将当前实例注册信息保护起来,

实现了cap中的ap.即一致性,分区容错性

 

 

  1. mysql like搜索怎样才能走索引

Like搜索时只有 “%”不在第一位的时候才会走索引.

 

 

  1. 如何在遍历集合时安全的删除集合中的元素

使用Iterator迭代器遍历时调用iterator.remove();方法删除元素,不要调用list.remove

 

 

  1. 深拷贝和浅拷贝的区别,如何实现深拷贝

如果拷贝之后,被拷贝的对象发生变化,拷贝的也跟着发生了变化,就是浅拷贝,如果没有发生变化,就是深拷贝.

以上是关于Java面试题的主要内容,如果未能解决你的问题,请参考以下文章

2020年1-6月份Java面试题总结,20多类1100道面试题含答案解析

Java面试题,Java面试题及答案,2021最新的,都整理好了

2020 年最新版 Java 面试题大全(文末附参考答案)

2020年最新版Java面试题大全(文末附参考答案)

java面试题

Java常用API面试题Java面试题