HashMap 面试:
1 HashMap的原理,内部数据结构?
底层使用哈希表(数组+链表),当链表过长会将链表转成红黑树O(logn)
时间复杂度内查找.
2 讲一讲Hashmap中的put方法过程?
a 对Key求Hash值,然后计算下标.
b 如果没有碰撞,直接放入桶中.
c 如果碰撞了,以链表的方式链接道后面
d 如果链表长度超过阀值(TREEIFY_THRESHOLD ==8 ),就把链表转成红黑树
e 如果节点已经存在就替换旧值
f 如果桶满了(容量*加载因子),就需要resize.
BIO到NIO到NETTY:
BIO 阻塞式IO
BIO 的阻塞描述的IO本身的行为; Server.accept()也是阻塞的.
以网络编程为模型,多个浏览器要进行连接的时候,
针对每一个浏览器的请求分配一个线程.
优化:线程操作的时期.
NETTY:
1 获取到ServerSocketChannel
2 绑定一个端口
3 创建Selector 创建线程
4 将ServerSocketChannel注册到Selector中,
Dubbo:
注册 : redis 和 zookeeper(有监听功能)
refister(String serviceName,String serveiceHost)
ZK上创建服务的节点为持久的节点
ZK上服务下面的ip地址为临时的节点
设计模式六大原则:
单例模式
工厂本身 一个模板类,在整个系统运行中,只允许产生一个实例(有且只有一个);
配置文件 Listener本身单例 日历Calender 、 IOC容器 、 配置信息Config
日历 饿汉式、懒汉式、注册登记式(枚举式)、反序列如何保证单例
解决问题 在恶劣环境下(程序健全性)
// 饿汉式: 有点:没有加任何锁、执行效率比较高,
缺点:在类加载的时候就初始化,不管用不用,都占内存
懒汉式: 默认不实例化,用的时候实例化,延迟加载.产生实例的过程
是动态的,必然放在方法中创建实例.