java面经-2018-4

在这个时间段面了挺多家公司的,也收获了很多经验,对于自己的知识盲区有所了解,可以查漏补缺。

java基础方面,经常问到的东西,凭记忆写出来,因为这些知识点都是从网上学习的,所以会有些雷同的地方,请见谅~

1. HashMap的相关知识,

  HashMap整体实现是一个动态数组,每一个数组数据的位置起初都是一个链表的存储结构,当链表长度超过一定值时,会把链表变更为红黑树以改善查询性能。每个数组位置都有对应的一个索引值,这个值是通过放进来的entry对象的key值的hash值再进行一次hash之后得到的。默认的负载因子上限是0.75,当实际值超出时,会对HashMap进行扩容,每次扩容为上次容量的两倍。

  再者,HashMap是非线程安全的,想要使用线程安全的类可以使用ConcurrentHashMap,使用的锁机制是分段锁,每个锁只锁住其中的部分数据而非所有数据,这样做的好处是在进行读写操作时,不同区域的数据可以并发进行,提升性能。

2. ArrayList和LinkedList的区别,

  ArrayList是动态数组,LinkedList是链表,

  轮查询,动态数组比链表快,因为数组查询是直接定位到要查询的位置,而链表需要从头往后遍历,直到查到对应的索引。这就是数组的优势(在内存中占据连续的内存空间,所以查询快)

  轮修改,各有优劣。数组索引快,但是修改慢,因为需要对数据进行批量移动操作。而链表是索引慢,但是修改快,因为只需要修改其中有关联关系的数据即可,不需要批量移动数据。

3. 多线程

  多线程的实现方式有3种,thread,runnable,callable

扫描二维码关注公众号,回复: 96801 查看本文章

  线程池的选择,根据业务场景,主要有两种,一种是io密集型,一种是cpu密集型。如果是io密集型业务,代表着io的压力比较大,应该把并发的压力分担一些到cpu上面,就应该选择多核并行的线程池。

4. 简述下http请求到达tomcat之后,tomcat怎么处理的

5. zookeeper宕机之后dubbo节点会做出什么反应

  首先,如果宕机的zookeeper数量不到一半,那么zookeeper集群还可以选举出一个leader出来继续工作,但是如果zookeeper超过一半宕机了,那么无法选举出一个leader出来,所有的zookeeper都是处于looking状态,那么集群就无法发现新的服务,现有服务是没问题的。dubbo的每个节点都会根据自己的本地缓存数据去读取对应的服务提供者的地址,然后直接去调用需要的服务

6. 为什么要使用dubbo分布式,dubbo内部实现原理

7. zookeeper的选举算法

8. spring的理解

9. springMVC的工作原理

10. mybatis怎么防止sql注入攻击,#和$的区别

11. 数据库事务的几个特性

12. aop和ioc的实现原理

13. 垃圾回收算法

14. linux下查找日志的命令

15. 数据库视图的作用

16. 怎么解决高并发下的数据不一致问题

17. 数据库存储过程写过哪些

18. 简述数据库的左外连接

19. 写一个工厂设计模式的例子

20. 写一个单例设计模式的例子

21. 简述下java有哪些代理,区别

22. 接口和抽象类的区别

23. 多态是怎么体现的

24. jdk8有哪些新特性

25. 数据库优化技巧

26. 数据库的备份和读写分离

27. java的封装特性,解释一下

28. servlet的工作原理

29. 

猜你喜欢

转载自www.cnblogs.com/zhangxz135/p/8977644.html