自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 单例模式的实现

Singleton 单例,表示仅仅被实例化一次的类。将构造器私有化是实现 Singleton 的最常见方法,将类的构造器私有化,在类的内部实例化一个对象,将对象的域公开发布出去,从而保证了对象的全局唯一性。基于此,实现单例模式的几种方式如下:一、类加载时就进行唯一实例的初始化,即所谓饿汉式此种情况由于对象在加载类时即被初始化,因此可以使用以下两种方式将对象暴露给类外① 静态 final 域 Singleton.INSTANCE 是公有的public class Singleton { pub

2021-10-14 18:36:30 181

原创 synchronized关键字详解

synchronized 关键字详解,synchronized原理与锁升级过程

2021-10-11 23:16:05 866

原创 zookeeper session和 watch

ZooKeeper Sessions本文主要内容为 zookeeper 官方文档的翻译ZooKeeper客户端使用某种语言创建一个 handle 来建立与ZooKeeper服务的会话。 一旦创建, handle 处于 CONNECTING 状态,客户端库尝试连接到组成 ZooKeeper 服务的其中一个服务器,此时 handle 切换到 CONNECTED 状态。 在正常操作期间, handle 将处于这两种状态之一。 如果发生不可恢复的错误,例如会话过期或身份验证失败,或者如果应用程序显式关闭 ha

2021-09-14 14:46:12 315

原创 网络层数据平面

网络层概述 数据平面 路由器工作原理 网络协议 IPv4 IPv6 SDN与通用转发

2021-09-03 23:52:10 502

原创 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

原创 @Autowired注解和@Resource注解的注入流程

@Autowired注解和@Resource注解的注入流程

2021-08-05 15:24:35 838

原创 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 基本概念

2021-07-22 22:17:07 537

原创 logback快速启动

logback 是由 log4j 的作者创建的一个全新的日志框架。致力于比其他的日志框架速度更快,占用空间更小,提供更多新的特性。

2021-07-22 22:14:20 215

原创 使用 Builder 构建对象

遇到多个构造器参数时,要考虑使用构建器

2021-07-21 23:04:43 1551

原创 静态工厂方法的优劣

静态工厂方法的优劣

2021-07-19 23:56:39 117

原创 ZooKeeper 数据模型

ZooKeeper树中的每个节点都称为 znode

2021-07-09 18:45:45 139 2

原创 ZooKeeper快速启动

本文档帮助快速启动使用ZooKeeper。包含单个ZooKeeper服务器的简单安装说明、一些验证它是否运行的命令,以及一个简单的编程示例、更复杂的部署启动的,例如运行复制部署和优化事务日志。

2021-07-02 18:43:30 623 2

原创 Kafka 简介

文章为笔者学习 Kafka 的笔记,主要内容是 Kafka 官网上有关快速入门的翻译

2021-07-02 15:05:20 154

原创 ZooKeeper 简介

ZooKeeper 简介本文为笔者学习 ZooKeeper 笔记,主要内容来自于 ZooKeeper 官网文档的翻译。一、定位ZooKeeper 是面向分布式应用的高性能协调服务。它以接口形式提供了命名、配置管理、同步和组服务等功能。可以使用它来实现共识(consensus)、组管理 group management、领导选举( leader election)和存在协议(presence protocols)。二、特点简单(Simple):ZooKeeper允许分布式进程通过共享的分级命名空

2021-06-28 20:02:34 416 2

原创 运输层服务及协议TCP、UDP

运输层协议TCPUDP三次握手拥塞控制

2020-09-21 17:49:51 580

原创 力扣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

原创 力扣35周双周赛5503所有奇数长度子数组的和

力扣35周双周赛5503所有奇数长度子数组的和

2020-09-20 12:22:29 90

原创 JVM类加载机制

JVM虚拟机类加载机制JVM类加载器和双亲委派机制

2020-09-11 13:26:00 141

原创 应用层协议及原理

应用层协议及其简单原理HTTP协议SMTP协议DNS协议

2020-09-10 18:15:22 2333

原创 POST/GET请求方式的区别(方便记忆)

POST/GET请求方式的区别,基于原因分析,方便记忆

2020-09-10 11:28:59 405

原创 JVM垃圾回收机制简介

JVM垃圾回收机制和垃圾回收算法

2020-09-08 11:57:21 286

原创 JVM内存模型简单介绍

JVM内存模型、对象的创建过程

2020-09-06 23:49:32 181

原创 计算机网络和因特网的基本认识

笔者阅读《计算机网络------自顶向下方法》第七版第一章所作笔记如下,主要为计算机网络和因特网的基本认识

2020-08-31 15:50:27 1228

原创 Git的简单基本使用

一、Git本地初始化基本命令二、GitHub注册与使用

2020-08-29 18:46:03 155

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除