12 2020 档案

摘要:架构问题 1.Dubbo的架构设计 service服务层:用户编写的服务接口和服务实现类。是与实际业务逻辑相关的。 config配置层:对外的配置接口,封装配置文件中的配置信息,以 ServiceConfig, ReferenceConfig 为中心,分别表示服务提供者和消费者的配置。 proxy服 阅读全文
posted @ 2020-12-31 10:28 lippon 阅读(264) 评论(0) 推荐(0)
摘要:1.框架设计 Dubbo的整体框架入下图所示。 其中各层的说明如下: service服务层:用户编写的服务接口和服务实现类。这是框架中,唯一用户可见的。 config配置层:对外的配置接口,封装配置文件中的配置信息,以 ServiceConfig, ReferenceConfig 为中心,分别表示服 阅读全文
posted @ 2020-12-30 21:36 lippon 阅读(151) 评论(0) 推荐(0)
摘要:注册中心宕机 现象:当注册中心发生宕机,消费者还是能够消费dubbo暴露的服务。 原因: 监控中心掉线不会影响使用,只是丢失部分采样数据。 数据库宕机之后,注册中心仍能通过缓存提供服务列表查询,但是不能注册新的服务。 注册中心对等集群,任意一台掉了,还是能够自动切换到另一台上。 注册中心都挂了,服务 阅读全文
posted @ 2020-12-30 21:35 lippon 阅读(109) 评论(0) 推荐(0)
摘要:ThreadLocal简介 ThreadLocal是为了在多线程下,实现对于一个变量访问的安全性。不同于加锁的可见性方式,ThreadLocal提供给每个线程有一个自己的变量,和其他线程互不干扰,所以,变量也是不共享的,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程不安全问题。 阅读全文
posted @ 2020-12-29 10:52 lippon 阅读(109) 评论(0) 推荐(0)
摘要:配置项的分类 服务发现:表示该配置项用于服务的注册与发现,目的是让消费方找到提供方。 服务治理:表示该配置项用于治理服务间的关系,或为开发测试提供便利条件。 性能调优:表示该配置项用于调优性能,不同的选项对性能会产生影响。 所有配置最终都将转换为 URL 表示,并由服务提供方生成,经注册中心传递给消 阅读全文
posted @ 2020-12-28 10:50 lippon 阅读(111) 评论(0) 推荐(0)
摘要:什么是动态代理 为了实现代理模式,在不破坏面向对象的开闭原则上,进行功能的组合。代理模式:某一个对象提供一个代理或者占位符,并由代理对象控制原对象的访问。静态代理就是需要给每个接口实现一个代理类。 动态代理是代理类的对象自动生成。 所以,代理类不同于其他的普通类,其字节码不存在于.class文件中, 阅读全文
posted @ 2020-12-27 14:09 lippon 阅读(235) 评论(0) 推荐(0)
摘要:反射的概念 反射(Reflection)是Java在运行时(Run time)可以访问,检测和修改它本身状态或行为的一种能力,它允许运行中的Java程序获取自身的信息,并且可以操作类或对象的内部属性。 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象 阅读全文
posted @ 2020-12-26 15:19 lippon 阅读(251) 评论(0) 推荐(0)
摘要:系统环境以及使用版本: Windows 10 maven 3.6.3 zookeeper 3.6.2 dubbo 2.6.6 1.开启zookeeper zookeeper下载 选择一个稳定的版本下载。 然后任选一个链接,通过浏览器下载压缩包。 解压之后,在目录下添加data和log两个空文件夹。 阅读全文
posted @ 2020-12-24 10:28 lippon 阅读(291) 评论(0) 推荐(0)
摘要:1.为什么不直接使用语言中的字典映射来缓存而是用Redis? 当然如果只是将少量数据保存作为缓存并且没有持久化的需求,那么完全可以用Map做缓存。 Redis相较于语言的映射的优势: Redis 可以用几十 G 内存来做缓存,Map 不行,一般 JVM 也就分几个 G 数据就够大了。 Redis 的 阅读全文
posted @ 2020-12-22 10:31 lippon 阅读(103) 评论(0) 推荐(0)
摘要:慢查询日志 Redis的慢查询日志用来记录执行时间超过给点时长的命令请求,用户可以通过这个功能生产的日志来监视和优化查询速度。 服务器配置有两个慢查询日志相关的选项: slowlog-log-slower-than:规定执行时间超过多少微妙的命令会被记录到日志上。 slowlog-max-len:执 阅读全文
posted @ 2020-12-22 09:19 lippon 阅读(129) 评论(0) 推荐(0)
摘要:Redis也提供事务机制来满足ACID性质。 事务的实现 事务的整个过程会经历三个阶段: 事务开始 MULTI命令标志着事务的开始。 命令入队 如果客户端发送的是EXEC DISCARD WATCH MULTI四个命令,那么就会立即执行,其他的命令只会放入事务队列中等待执行。 事务执行 当服务器接收 阅读全文
posted @ 2020-12-21 10:51 lippon 阅读(127) 评论(0) 推荐(0)
摘要:主从复制 通过SLAVEOF命令,可以让两台服务器确认主从关系。以后的过程中,slave会与master保持数据一致性。 主从复制功能实现 Redis的复制功能分为同步和命令传播两个操作: 同步是将master的数据全部拷贝到slave上。 命令传播是已经完成了同步,在之后master被修改了,将修 阅读全文
posted @ 2020-12-21 09:26 lippon 阅读(154) 评论(0) 推荐(0)
摘要:给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 leetcode 解题思路:利用单调栈的思想,新添加的从末尾添加,弹出比它大的栈顶元素,这样就能保证有序,且字典序最大。不同的是,必须保证原有字母还存在一个,所 阅读全文
posted @ 2020-12-20 21:16 lippon 阅读(1199) 评论(0) 推荐(0)
摘要:一维的区间合并计算问题种类很多,但是都是一个套路,起点排序,在这里做一个汇总。 合并无序区间 给出一个区间的集合,请合并所有重叠的区间。 leetcode 解题思路:先根据起点进行排序,再遍历数组,然后用一个指针获取当前区间: 如果遇到交集,就合并区间,将指针指向合并过的区间; 如果没有交集,那么就 阅读全文
posted @ 2020-12-19 14:50 lippon 阅读(260) 评论(0) 推荐(0)
摘要:数据库 数据库结构实现 Redis的数据库都保存在服务器中,一个服务器默认有16个数据库。 Redis服务器和数据库关系如图所示,其中dbnum就是指当前数据库的数量,db是一个数据库的数组。 每个客户端加粗样式都会指向一个数据库,可以通过select指令改变表当前使用的数据库。 每个数据库结构中都 阅读全文
posted @ 2020-12-19 10:10 lippon 阅读(306) 评论(0) 推荐(0)
摘要:求最少跳跃次数 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 leetcode DP 解题思路: 利用一个数组,表示到达每个位置最少跳跃次数。 遍历数组,然后对每个位置可以跳到的范围内的位 阅读全文
posted @ 2020-12-18 16:39 lippon 阅读(361) 评论(0) 推荐(0)
摘要:Redis中的数据结构 简单动态字符串 链表 字典 跳跃表 整数集合 压缩列表 对象 1.简单动态字符串 Redis底层是用C语言实现的,所以,在很多数据结构上可以直接使用C语言中已经存在的数据结构和库函数。 Redis的字符串数据结构并没有直接使用C语言的字符数组,而是用了一个结构体,名为简单动态 阅读全文
posted @ 2020-12-17 21:52 lippon 阅读(108) 评论(0) 推荐(0)
摘要:IO的分类 按照流的流向分,可以分为输⼊流和输出流; 按照操作单元划分,可以划分为字节流和字符流; 按照流的⻆⾊划分为节点流和处理流。 Java IO类很多,主要是由以下四个抽象基类派生出来的: InputStream/Reader: 所有的输⼊流的基类,前者是字节输⼊流,后者是字符输⼊流。 Out 阅读全文
posted @ 2020-12-15 21:31 lippon 阅读(170) 评论(0) 推荐(0)
摘要:简介 CharArrayReader 是字符数组的输入流,它和我们之前讲的ByteArrayInputStream十分类似,顾名思义,区别在于一个用于字符数组,一个用于字节数组,在Java中字符是16位,而字节是8位的。 CharArrayReader 继承于Reader,操作的数据是以字符为单位。 阅读全文
posted @ 2020-12-14 09:47 lippon 阅读(133) 评论(0) 推荐(0)
摘要:简介 石子游戏其实就是多人博弈,如何求最优结果。它存在很多变种,比如不同的取石方式,不同的计算输赢的方式,在这里做一个汇总。 1.只能从两端取,取的数量为得分 亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。 游戏以谁手中的石子最多来决出胜负。石子的总数 阅读全文
posted @ 2020-12-13 14:58 lippon 阅读(1063) 评论(0) 推荐(0)
摘要:简介 PrintStream继承于FilterOutputStream,而FilterOutputStream用于封装其他的输出流。 PrintStream用于给其他的输出流封装了一层打印的功能,它内部重载了很多数据类型,这样可以方便打印不同类型的数据。 实际的输出工作,还是调用了被封装的输出流的打 阅读全文
posted @ 2020-12-12 10:30 lippon 阅读(200) 评论(0) 推荐(0)
摘要:简介 PipedOutputStream和PipedInputStream主要用于线程之间的通信 。二者必须配合使用,也就是一段写入,另一端接收。本质上也是一个中间缓存区,讲数据缓存在PipedInputStream的数组当中,等待PipedOutputStream的读取。 PipedInputSt 阅读全文
posted @ 2020-12-11 10:42 lippon 阅读(396) 评论(0) 推荐(0)
摘要:简介 ByteArrayInputStream 是字节数组输入流,它继承于InputStream。 它的内部数据存储结构就是字节数组。 ByteArrayOutputStream是字节数组输出流,它继承于OutputStream。 它的内部数据存储结构也是字节数组。 源码分析 InputStream 阅读全文
posted @ 2020-12-10 09:46 lippon 阅读(217) 评论(0) 推荐(0)
摘要:简介 TreeSet就是一个集合,里面不能有重复的元素,但是元素是有序的。 TreeSet其实就是调用了TreeMap实现的,所以,它也不是线程安全的。可以实现自然排序或者根据传入的Comparator进行排序。 TreeSet通过iterator()返回的迭代器是fail-fast的。 TreeS 阅读全文
posted @ 2020-12-09 10:20 lippon 阅读(138) 评论(0) 推荐(0)
摘要:简介 HashSet就是一个集合,里面不能有重复的元素,元素也是无序的。 HashSet其实就是调用了HashMap实现的,所以,它也不是线程安全的。 HashSet通过iterator()返回的迭代器是fail-fast的。 源码分析 由于HashSet的源码很短也很容易理解,这里就不再选取分析了 阅读全文
posted @ 2020-12-09 09:42 lippon 阅读(147) 评论(0) 推荐(0)
摘要:简介 WeakHashMap 继承于AbstractMap,实现了Map接口。 和HashMap一样,WeakHashMap 也是一个散列表,它存储的内容也是键值对(key-value)映射,而且键和值都可以是null。 不一样的是,JDK1.8开始,HashMap中引入了红黑树,节点名从entry 阅读全文
posted @ 2020-12-08 10:43 lippon 阅读(152) 评论(0) 推荐(0)
摘要:简介 TreeMap 是一个有序的key-value集合,它的内部是通过红黑树实现的。 TreeMap 继承于AbstractMap,所以它是一个Map,即一个key-value集合。 TreeMap 实现了NavigableMap接口,说明它支持一系列的导航方法。比如返回有序的key集合。 Tre 阅读全文
posted @ 2020-12-07 19:52 lippon 阅读(150) 评论(0) 推荐(0)
摘要:简介 定义: 确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。 单例类拥有一个私有构造函数,确保用户无法通过 new 来直接实例化它。类中包含一个静态私有成员变量与静态公有的工厂方法,该方法负责检验实例的存在性,如果不存在久实例化自己,然后存储在静态成员变量中,确保只有一个实例类被创 阅读全文
posted @ 2020-12-07 08:33 lippon 阅读(85) 评论(0) 推荐(0)
摘要:统计所有小于非负整数 n 的质数的数量。 解题思路: 首先想到的是暴力枚举,但是会超时。采用埃氏筛选发,所谓素数,就是由质数的积够成的,所以,当得到一个质数,就可以标记后面所有由它的乘积而形成的素数。利用一个表标表示当前数是或否为素数。首先从低到高枚举所有数,然后如果是质数答案就加一,并标记于其关联 阅读全文
posted @ 2020-12-03 15:13 lippon 阅读(258) 评论(0) 推荐(0)
摘要:目录 简介源码分析父类接口字段内部类1.链表节点结构2.树根结构3.树节点结构 方法1.构造方法2.基本并发方法3.初始化表数组的操作4.修改添加元素5.统计元素数量6.扩容7.获取元素 总结源码总结1.扩容2.树化3.计数 简介 ConcurrentHashMap 是一个线程安全的散列表,存储的内 阅读全文
posted @ 2020-12-03 11:36 lippon 阅读(168) 评论(0) 推荐(0)
摘要:简介 HashMap 是一个散列表,存储的内容是键值对映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 存储的键值对是无序的。 源码分析 public class HashMap<K,V> exte 阅读全文
posted @ 2020-12-02 11:32 lippon 阅读(152) 评论(0) 推荐(0)
摘要:简介 Vector 是矢量队列,它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。 和ArrayList不同,Vector中的操作是线程安全的。 源码分析 public class Vector<E> extend 阅读全文
posted @ 2020-12-01 10:12 lippon 阅读(123) 评论(0) 推荐(0)