Zookeeper单机模式&伪集群模式&集群模式
Zookeeper 单机模式 & 伪集群模式 & 集群模式 ZooKeeper特点 顺序一致性:以zxid来保证事务的顺序性。 原子性:以zab保证原子操作,要么成功,要么失败。 单一视图:客户获取到的数据始终是一致的。 可靠:以版本实现”写入校验”,保证了数据写入的正确性。 ZooKeeper是一个分布式的、开源的分布式应用程序协调服务,可以在分布 式环境中实现应用配置管理、统一命名服务、状态同步服务等功能。 ZooKeeper是一种为分布式应用所设计的高可用、高性能的开源协调服务,它提供了一项基本服务:分布式锁 服务。由于ZooKeeper开源的特性,在其分布式锁实现的基础上,又被摸索出了其它的功用,譬如:配置维 护、组服务、分布式消息队列等等。 ZooKeeper维护了一个类似文件系统的数据结构,其内部每个子目录都被 称作znode(目录节点),与文件系统一样,我们可以自由的增删改查znode。ZooKeeper集群适合搭建在奇数 台机器上。只要集群中半数以上主机处于存活,那么服务就是可用的。 ZooKeeper在配置文件中并没有指定 ma ...
annotation
@Autowired 注解AutowiredAnnotationBeanPostProcessor在处理依赖注入时,从bean工厂中去获取,首先是根据字段的类型去找符合条件的bean,若得到的bean有多个,则找出有@Primary注解修饰的bean,若都没有,则退化成@Resource注解的功能,即根据字段名去寻找bean,若都没有,则会抛出找到多个bean的异常。可以定位到org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.AutowiredFieldElement#inject方法细看注入逻辑。 总结:@Autowired注解 是现根据 byType自动注入寻找符合的bean,如果没有就使用byName去寻找对象,与@resource的注解功能一样,如果没找到 则抛出异常(?) @Autowired是先按照类型去挑选候选的bean,然后根据qualifier在这些候选的bean中去挑选要注入的bean。 @Resource注解根据byName 根据字段名进行查找注解,但 ...
dubbo
Dubbodubbo是一个轻量级的服务之前通过RPC(一种远程调用)协议通信的分布式服务框架 RPC协议(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务 dubbo 架构节点角色说明: 序列化 在pojo里面引用Serializable接口实现序列化 把java对象转换成二进制流叫做序列化,相反把二进制流转换成java对象为反序列化 常见的序列化转换格式 json->java对象 xml->java对象 二进制->java对象(Serialzable) 序列化的作用就是为了不同jvm之间共享实例对象的一种解决方案 由java提供此机制,效率之高 dubbo高级属性负载均衡 作用是用于分配客户端的请求,进而防止服务提供者的负载过高,导致宕机 @Service(weight=100),设置服务器的权重,值越大则处理越多 @Reference(loadbalance = “random”),设置负载均衡策略 random 随机选一台 RoundRobin 按照权重 LeastActive 选择请求排队数量 ...
JAVA 多线程2
线程的状态 新建 new 线程对象 就绪状态 调用线程对象的start()方法 阻塞状态 获取不到锁对象 等待状态 调用锁对象wait();方法 计时等待 调用Thread的sleep方法 退出状态 线程中的所有代码执行完毕 线程池概念 一个用于存储线程对象的容器。传统的编程,需要通过线程执行任务的时候,都是临时创建线程对象,使用完毕线程自动会处于退出状态。比较浪费时间和资源。线程池的基本思想就是将创建的线程对象存入一个容器中,需要使用线程时候从容器中获取,使用完毕之后将线程归还到容器,可以让线程对象得到复用 步骤: 创建池子 将需要执行的任务提交给线程池 关闭线程池 创建默认线程池 创建线程池,返回一个操作线程池的对象 ExecutorsService service = Executors.newCachedThreadPool(); 通过ExecutorsService提交需要执行的任务 service.submit(Runnable runnable);service.submit(Callable callable); 示例: ExecutorSer ...
JAVA 多线程1
方式1,继承Thread类 定义一类继承Thread,并重写run方法 public class MyThread extends Thread{ @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("线程开启了"+i); } }} 创建线程对象,并调用start方法开启线程 public static void main(String[] args) { MyThread t1 = new MyThread(); MyThread t2 = new MyThread(); t1.start(); t2.start();} 方式2,实现Runnable接口 定义一类实现Runnable,并重写run方法 public class MyRunnable implements Ru ...
JAVA 字符流&&Properties集合
字符流 【重点】 字节流的体系结构 字符输入流 Reader |-InputStreamReader 转换流 |-FileReader 基本流 |-BufferedReader 缓冲流 字符输出流 Writer |-OutputStreamWriter 转换流 |-FileWriter 基本流 |-BufferedWriter 缓冲流 编码表 什么是编码表 是一张现实中的文字符号等(字符)与计算机能识别的二进制(字节)之间对应表 现实中的 计算机能识别的 a 01100001 我 ...
JAVA File类&& IO流-字节流
File类 【掌握】 什么是File类 File类表示文件和目录(文件夹),在表示的时候不能只告诉程序文件或者目录的名称, 应该要告诉程序文件或者目录的路径 构造方法 告诉程序你要操作的文件/文件夹在哪里 File(String pathname) File(String parent, String child) File(File parent, String child) * 构造方法中路径的特点: 1、可以是存在的路径也可以是不存在的 2、可以是文件路径也可以是文件夹路径 3、可以是相对路径也可以是绝对路径 路径的问题 绝对路径:以盘符开始的路径(完整的路径) 相对路径:不以盘符开始的路径(简化/省略路径) 当前路径相对的是项目根路径,以项目根路径为参照物 不是所有的绝对路径都可以省略写成相对路径的,只有这个 ...
JAVA Map&&Stream流
Map 【重点】 什么是Map Map 将键映射到值的对象。 Map不能包含重复的键; 每个键可以映射最多到一个值。 Map是一个双列集合,存储的每一个元素都是由两列组成, 第一列我们称之为键,第二列称之为值,把这种由键和值组成的每一个元素称之为键值对。 <K,V>是泛型,K变量用于规定键存储的数据类型,V变量用于规定值存储的数据类型 键和值的数据类型可以相同也可以不同。 K:Key V:Value Map的特点 1、Map不能包含重复的键 如果键重复,则值覆盖 2、Map的值可以重复 3、Map的键和值是一一对应的 通过一个键只能找到唯一对应的值 Map的体系结构 Map |-HashMap |-TreeMap Map的常用方法 基本方法 V put( ...
JAVA HashSet
HashSet 【重点】 哈希值 因为hashCode方法是可以重写的,所以: 同一个对象的哈希值一定相同 不同对象的哈希值一般不同,但也有可能相同 哈希值不同的绝对不是同一个对象 哈希值相同的可能是同一个对象,也可能不是同一个对象 HashSet底层不存储重复元素(元素唯一)的原理 hashCode方法和equals方法 首先通过hashCode方法计算哈希值,计算元素在底层数组中存储的位置,如果该位置上没有元素(null), 直接存储了,如果该位置上有元素,则需要通过equals做进一步的比较,如果结果为true,则说明是同一个对象 则不存储,如果结果为false,则存储。
JAVA泛型与数据结构
泛型 【了解】 什么是泛型 JDK5.0的新特性(增强for、自动拆装箱、泛型) 泛型是一种未知的(x)广泛的类型,可以表示任意的引用类型,你想让它是什么类型就可以是什么类型。 E -> String E -> Integer * 泛型中传递的数据类型只能是引用数据类型 泛型的好处 是编译时期的类型检查的安全机制 泛型只在编译时期有效,编译之后泛型就没有了(泛型的擦除) 1、可以将可能出现的问题提前解决 运行时期可能会有类型转换异常 提前到了编译时期 2、省去了强转的麻烦,简化代码块 以后我们在使用集合的时候都需要加上泛型 自定义泛型类 格式 public class 类名<泛型变量> { } 泛型变量:一般习惯上使用英文大写 可以一 ...