摘要: HashMap源码解析 5.1、对于HashMap需要掌握以下几点 Map的创建:HashMap() 往Map中添加键值对:即put(Object key, Object value)方法 获取Map中的单个对象:即get(Object key)方法 删除Map中的对象:即remove(Object 阅读全文
posted @ 2022-05-21 19:23 hanease 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 一、对于ArrayList需要掌握的七点内容 ArrayList的创建:即构造器 往ArrayList中添加对象:即add(E)方法 获取ArrayList中的单个对象:即get(int index)方法 删除ArrayList中的对象:即remove(E)方法 遍历ArrayList中的对象:即i 阅读全文
posted @ 2022-05-21 19:17 hanease 阅读(61) 评论(0) 推荐(0) 编辑
摘要: 1、常见的两种缓存 本地缓存:不需要序列化,速度快,缓存的数量与大小受限于本机内存 分布式缓存:需要序列化,速度相较于本地缓存较慢,但是理论上缓存的数量与大小无限(因为缓存机器可以不断扩展) 2、本地缓存 Google guava cache:当下最好用的本地缓存 Ehcache:spring默认集 阅读全文
posted @ 2022-05-21 15:53 hanease 阅读(607) 评论(0) 推荐(0) 编辑
摘要: 13.1 dubbo服务降级源码解析 从 9.1 客户端发起请求源码 的客户端请求总体流程图中,截取部分如下: //代理发出请求 proxy0.sayHello(String paramString) -->InvokerInvocationHandler.invoke(Object proxy, 阅读全文
posted @ 2022-05-21 15:40 hanease 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 第十章 dubbo线程模型 一 netty的线程模型 在netty中存在两种线程:boss线程和worker线程。 1 boss线程 作用: accept客户端的连接; 将接收到的连接注册到一个worker线程上 个数: 通常情况下,服务端每绑定一个端口,开启一个boss线程 2 worker线程 阅读全文
posted @ 2022-05-21 15:39 hanease 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 9.1 客户端发起请求源码 来看一下客户端请求代码: 1 DemoService demoService = (DemoService) context.getBean("demoService"); // 获取远程服务代理 2 String hello = demoService.sayHello 阅读全文
posted @ 2022-05-21 15:36 hanease 阅读(51) 评论(0) 推荐(0) 编辑
摘要: 7.6 服务远程暴露 - 注册服务到zookeeper 为了安全:服务启动的ip全部使用10.10.10.10 远程服务的暴露总体步骤: 将ref封装为invoker 将invoker转换为exporter 启动netty 注册服务到zookeeper 订阅 返回新的exporter实例 在7.4 阅读全文
posted @ 2022-05-21 15:28 hanease 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 6.1 如何在spring中自定义xml标签 dubbo自定义了很多xml标签,例如<dubbo:application>,那么这些自定义标签是怎么与spring结合起来的呢?我们先看一个简单的例子。 一 编写模型类 1 package com.hulk.testdubbo.model; 2 3 p 阅读全文
posted @ 2022-05-21 15:22 hanease 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 重要的网址: dubbo的github:https://github.com/alibaba/dubbo dubbo官网:http://dubbo.io/ dubbo使用者手册:https://dubbo.gitbooks.io/dubbo-user-book/ dubbo管理者手册:https:/ 阅读全文
posted @ 2022-05-21 15:09 hanease 阅读(105) 评论(0) 推荐(0) 编辑
摘要: Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。它具备以下特性 : 服务发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。健康检查:健康 阅读全文
posted @ 2022-05-21 14:23 hanease 阅读(2853) 评论(0) 推荐(0) 编辑
摘要: 1、Executors与ThreadPoolExecutor ThreadPoolExecutor 可以灵活的自定义的创建线程池,可定制性很高 想创建好一个合适的线程池比较难 使用稍微麻烦一些 实际中很少使用 Executors 可以创建4种线程池,这四种线程池基本上已经包含了所有需求,将来根据业务 阅读全文
posted @ 2022-05-21 11:04 hanease 阅读(31) 评论(0) 推荐(0) 编辑
摘要: ThreadPoolExecutor使用 + 工作机理 + 生命周期 1、最基础的线程池ThreadPoolExecutor 使用方式: 1 /** 2 * ThreadPoolExecutor测试类 3 * 注意: 4 * 1、ThreadPoolExecutor是一个线程池 5 * 2、多个任务 阅读全文
posted @ 2022-05-21 10:59 hanease 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 1、原子类 可以实现一些原子操作 基于CAS 下面就以AtomicInteger为例。 2、AtomicInteger 在没有AtomicInteger之前,对于一个Integer的线程安全操作,是需要使用同步锁来实现的,当然现在也可以通过ReentrantLock来实现,但是最好最方便的实现方式是 阅读全文
posted @ 2022-05-21 10:53 hanease 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 最常用的方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final ReentrantLock lock = new ReentrantLock(); lock.lock();//获取锁 阅读全文
posted @ 2022-05-21 10:43 hanease 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 1、对于CopyOnWriteArraySet需要掌握以下几点 创建:CopyOnWriteArraySet() 添加元素:即add(E)方法 删除对象:即remove(E)方法 遍历所有对象:即iterator(),在实际中更常用的是增强型的for循环去做遍历 注: CopyOnWriteArra 阅读全文
posted @ 2022-05-21 10:29 hanease 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 1、什么是CopyOnWrite容器 CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对Copy 阅读全文
posted @ 2022-05-21 10:23 hanease 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 1、对于ConcurrentHashMap需要掌握以下几点 Map的创建:ConcurrentHashMap() 往Map中添加键值对:即put(Object key, Object value)方法 获取Map中的单个对象:即get(Object key)方法 删除Map中的对象:即remove( 阅读全文
posted @ 2022-05-21 10:17 hanease 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 一、java集合框架概述 java集合可分为Collection和Map两种体系,其中: 1、Collection接口:单列数据,定义了存取一组对象的方法的集合; List:元素有序、可重复的集合 Set:元素无序,不可重复的集合 2、Map接口:双列数据,保存具有映射关系“key-value对”的 阅读全文
posted @ 2022-05-21 10:01 hanease 阅读(1171) 评论(0) 推荐(0) 编辑