- 博客(32)
- 收藏
- 关注
原创 单例模式的实现
Singleton 单例,表示仅仅被实例化一次的类。将构造器私有化是实现 Singleton 的最常见方法,将类的构造器私有化,在类的内部实例化一个对象,将对象的域公开发布出去,从而保证了对象的全局唯一性。基于此,实现单例模式的几种方式如下:一、类加载时就进行唯一实例的初始化,即所谓饿汉式此种情况由于对象在加载类时即被初始化,因此可以使用以下两种方式将对象暴露给类外① 静态 final 域 Singleton.INSTANCE 是公有的public class Singleton { pub
2021-10-14 18:36:30
181
原创 zookeeper session和 watch
ZooKeeper Sessions本文主要内容为 zookeeper 官方文档的翻译ZooKeeper客户端使用某种语言创建一个 handle 来建立与ZooKeeper服务的会话。 一旦创建, handle 处于 CONNECTING 状态,客户端库尝试连接到组成 ZooKeeper 服务的其中一个服务器,此时 handle 切换到 CONNECTED 状态。 在正常操作期间, handle 将处于这两种状态之一。 如果发生不可恢复的错误,例如会话过期或身份验证失败,或者如果应用程序显式关闭 ha
2021-09-14 14:46:12
315
原创 Rocketmq 基本概念和核心组件
一、基本概念1. 消息模型RocketMQ 采取了发布订阅模式作为消息模型,由消息生产者、代理服务器、消息消费者三方构成了消息模型2. 消息概念:消息即消息系统所传输信息的物理载体,是生产和消费数据的最小单位。属性:在 RocketMQ 中,消息具有以下属性topic:每个消息都属于一个主题,通过订阅发布模式在生产者和消费者之间传递。ID:每个消息都具有的唯一的 Message ID。key:业务标识 key。tag:消息标签,用于同一主题下区分不同类型的消息。RocketMQ 提
2021-08-17 23:04:38
249
原创 CAP理论
分布式系统在设计与处理时,往往会考虑可用性与数据一致性的问题,因此引入了 CAP 理论分析分布式系统设计定义维基百科:Consistency : Every read receives the most recent write or an errorAvailability : Every request receives a (non-error) response, without the guarantee that it contains the most recent write
2021-08-10 16:00:42
84
原创 try-with-resources 优先于 try-finally
try-with-resources 优先于 try-finally根据传统,try-finally 块是确保关闭资源的一个有效方法,但是当多个资源时,就可能造成代码的混乱。而且某个 finally 块中也可能抛出异常,就会使得之前抛出的异常信息被覆盖。public static void copy(String src, String dst) throws IOException { InputStream in = new FileInputStream(src); try {
2021-08-01 23:56:03
185
原创 避免使用终结方法和清除方法
避免使用终结方法和清除方法使用终结方法的缺点首先应该清楚的是,终结方法(finalize())不等同于 C++ 中等析构方法。这类方法不能保证其会被及时执行,甚至不能保证会被执行,因此,不应该依赖终结方法或者清除方法来更新重要的持久状态。终结方法内部如果产生了未被捕获的异常,则终结方法也会异常终止,而且,不会打印异常警告。使用终结方法会产生非常严重的性能损失。主要是因为终结方法阻止了有效的垃圾回收。终结方法也存在安全问题。可以通过反序列化的对象抛出异常,使得恶意子类的终结方法中构造了一部分的对象
2021-08-01 23:55:03
119
原创 消除过期的对象引用
消除过期的对象引用在手工管理内存的语言中(如“C++”),当对象使用之后,需要手动释放其所占有的内存,例如 C++ 中的析构函数。但 Java 具有垃圾回收器,降低了内存管理的难度,但仍会出现内存泄漏的风险。如:public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; publi
2021-08-01 23:53:35
122
原创 避免创建不必要的对象
避免创建不必要的对象如果对象是不可变的,那么它就始终可以被重用。反面例子String s = new String("bikini");该语句每次被执行时,都会创建一个新的 String 实例,但是这些创建对象的动作是不必要的。传递给 String 构造器的参数本身就是一个 String 实例,功能方面等同于构造器创建的所有对象。应该改进为String s = "bikini";对于同时提供了静态工厂方法和构造器的不可变类,通常优先使用静态工厂方法而不是构造器方法,以避免创建不必要的对象。
2021-08-01 23:52:47
137
原创 优先考虑依赖注入来引入资源
优先考虑依赖注入来引入资源有许多类会依赖一个或多个底层的资源。即这个类可能会依赖其他的类的实例。最好的采取做法是,当创建一个新的实例时,就将该实例所依赖的资源传入到构造器中。这就是依赖注入的一种形式。public class SpellChecker { private final Lexicon dictionary; public SpellChecker(Lexicon dictionary) { this.dictionary = Objects.re
2021-08-01 23:51:38
243
原创 私有构造方法的作用
使用私有构造器或者枚举类型强化 Singleton 属性Singleton 单例,表示仅仅被实例化一次的类。将构造器私有化是实现 Singleton 的常见方法如public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis () {} public void leaveTheBuilding() { }}此时,静态 final
2021-08-01 23:50:12
478
原创 logback快速启动
logback 是由 log4j 的作者创建的一个全新的日志框架。致力于比其他的日志框架速度更快,占用空间更小,提供更多新的特性。
2021-07-22 22:14:20
215
原创 ZooKeeper快速启动
本文档帮助快速启动使用ZooKeeper。包含单个ZooKeeper服务器的简单安装说明、一些验证它是否运行的命令,以及一个简单的编程示例、更复杂的部署启动的,例如运行复制部署和优化事务日志。
2021-07-02 18:43:30
623
2
原创 ZooKeeper 简介
ZooKeeper 简介本文为笔者学习 ZooKeeper 笔记,主要内容来自于 ZooKeeper 官网文档的翻译。一、定位ZooKeeper 是面向分布式应用的高性能协调服务。它以接口形式提供了命名、配置管理、同步和组服务等功能。可以使用它来实现共识(consensus)、组管理 group management、领导选举( leader election)和存在协议(presence protocols)。二、特点简单(Simple):ZooKeeper允许分布式进程通过共享的分级命名空
2021-06-28 20:02:34
416
2
原创 力扣35周双周赛5505所有排列中的最大和
有一个整数数组 nums ,和一个查询数组 requests ,其中 requests[i] = [starti, endi] 。第 i 个查询求 nums[starti] + nums[starti + 1] + … + nums[endi - 1] + nums[endi] 的结果 ,starti 和 endi 数组索引都是 从 0 开始 的。你可以任意排列 nums 中的数字,请你返回所有查询结果之和的最大值。
2020-09-20 22:15:29
97
原创 力扣35周双周赛5504使数组和能被 P 整除
给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空),使得剩余元素的 和 能被 p 整除。 不允许 将整个数组都移除。请你返回你需要移除的最短子数组,如果无法满足题目要求,返回 -1 。子数组 定义为原数组中连续的一组元素。
2020-09-20 16:48:00
147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人