1.请你简单介绍一下SpringCloud组件分别是什么,并有什么用处?
SpringCloud中有五个组件,分别是:
服务发现——Eureka
负载均衡——Ribbon
断路器——Hystrix
网关——Zuul
配置——SpringCloud Config
Eureka是 Netflix的一个子模块,也是核心的模块之一,Eureka是一个基于rest的服务,用于定位服务,服务注册等功能,有了这些功能,只需要使用服务的标识符,就可以访问到服务,而不需要调用服务的配置文件了,功能类似于dobbo中的zookerper。
Ribbon主要提供负载均衡算法,它提供了一系列的配置项,比如连接超时,重试,重试算法等,他有一些实现策略:简单轮询负载均衡,加权响应时间,区域感知轮询,随机负载均衡。
Hystrix 可以防止应用程序多次试图执行一个操作,就是很可能失败的操作,断路器模式也可以检测出故障是否解决了,如果问题得到了解决,那么应用程序就可以尝试调用操作。
网关——Zuul ,类似于Nginx,反向代理,不过Netflix自己增加了一些配合其他组件的特性
配置——Config,配置中心,将配置文件集中管理,为各子服务模块提供配置调度
2.list和map的相互转化
①list转化为map
Iterator<User> iterator = list.iterator();迭代list
while (iterator.hasNext()) {
User u = iterator.next();
map.put(u.getId(), u);
}
②map转化为list
//1、根据map.keySet();
Set<Integer> keySet = map.keySet();
for (Integer integer : keySet) {
User u = map.get(integer);
System.out.println(u);
}
//2、推荐 使用
for(Entry<Integer, User> entry: map.entrySet()) {
System.out.println(entry.getKey()+" -"+entry.getValue());
}
3.java中会存在内存泄漏吗,请简单说明
存在。虽然Java有垃圾回收器,但是依然存在内存泄漏
首先,什么是内存泄漏?
内存泄漏的定义:对象不再被应用程序使用,但是垃圾回收器却不能移除它们,因为它们正在被引用。
为什么会发生内存泄漏?
对象A引用了对象B。A的生命周期(t1-t4)要比B的生命周期(t2-t3)要长很多。当B不再用于应用中时,A仍然保持有对它的引用,在这种方式下,垃圾回收器就不能将B从内存中移除。这将可能导致出现内存溢出的问题。如果A对更多的对象做同样的事情,那么内存中将会有很多无法回收的对象,这将极度消耗内存空间。
如何组织内存泄漏?
(1)注意集合类,例如HashMap,ArrayList,等等。因为他们是内存泄漏经常发生的地方。当它们被声明为静态时,它们的生命周期就同应用程序的生命周期一般长。
(2)注意事件监听器和回调,如果一个监听器已经注册,但是当这个类不再被使用时却未被注销,就会发生内存泄漏。
4.锁机制有什么用?简述悲观锁和乐观锁
在数据库的锁机制中介绍过,数据库管理系统中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性
乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段