自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王小明的专栏

如有问题,关注微信公众号: 程序员开发者社区,获取我的联系方式,或者访问 www.benjming.com...

原创 Java 知识点总结

Java 基础 1、Object 对象的方法有哪些?分别有什么作用?该什么场景用? 2、Integer 的常量缓存池 3、Java 特性?什么是多态?举个例子 Object 的 hashcode 方法重写了,equals 方法要不要改? 4、重载重写的区别? Object 类中的方法 ...

2019-06-28 16:20:11 410 0

原创 Redis 6.0 为什么要引入多线程呢?

查看 Redis 版本 redis-cli -v redis-cli 3.2.1 Reactor 模式 Redis 是基于 Reactor 模式开发了网络事件处理器,这个处理器称为文件事件处理器。组成结构为4个部分: 多套接字 IO 多路复用程序 文件事件派发器 事件处理器。 一般来说 R...

2020-11-30 16:27:40 19 0

原创 LeetCode - 面试题 04.03. 特定深度节点链表

面试题 04.03. 特定深度节点链表 给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。 示例: 输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 ...

2020-11-29 10:35:32 11 0

原创 LeetCode-1497. 检查数组对是否可以被 k 整除

检查数组对是否可以被 k 整除 给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。 现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除。 如果存在这样的分法,请返回 True ;否则,返回 False 。 示例 1: 输入:arr = [1,2,...

2020-11-29 10:08:07 21 0

原创 LeetCode- 盛最多水的容器

题目连接: https://leetcode-cn.com/problems/container-with-most-water/ 盛最多水的容器 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (...

2020-11-29 00:29:39 42 0

原创 Mysql数据库有几种索引

索引分类 从物理上分 聚簇索引 非聚簇索引 从逻辑角度 普通索引 唯一索引 主键索引 文本索引 复合索引 空间索引 :空间索引是对空间数据类型的字段上建立索引。空间数据类型有4种,分别是 GEPMETRY 、POINT、 LINESTRING 、POLYGON CREATE TABLE t...

2020-11-26 16:12:35 10 0

原创 Zookeeper 和 Eureka 区别

主要区别 zookeeper的目标是一个分布式的协调系统,用于进行资源的统一管理,为了满足CP而进行设计。 eureka的目标是一个服务注册发现系统,专门用于微服务的服务发现注册,按照满足AP而进行设计。 Zookeeper Zookeeper 是将数据一致性作为设计目标是 CP 的,不保证服...

2020-11-26 15:13:34 11 0

原创 LRU 算法实现

LRU 算法实现 什么是 LRU 算法 LRU是什么?按照英文的直接原义就是Least Recently Used,最近最久未使用法,它是按照一个非常著名的计算机操作系统基础理论得来的:最近使用的页面数据会在未来一段时期内仍然被使用,已经很久没有使用的页面很有可能在未来较长的一段时间内仍然不会被使...

2020-11-16 10:11:38 36 0

原创 LeetCode 572 题解

LeetCode 572 题解 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 代码实现 public boolean isSubtree(TreeNode s, ...

2020-11-15 20:38:50 22 0

原创 CAP 理论

CAP 理论 CAP 是反应了分布式系统中的三个指标: Consistency (一致性), Availlability (可用性)Partion Tolerance(分区容错性)。 CAP 理论的核心是说 ,C、A 、P 这三个指标不能同时做到。 Consistency(一致性) 指数据在多个...

2020-11-15 16:58:57 26 0

原创 设计模式|抽象工厂

设计模式|抽象工厂 意图 抽象工厂提供一个接口,用来创建相关的对象家族,而不是和工厂方法一样,创建一个对象。 抽象工厂 抽象工厂模式的各个角色: 抽象工厂角色(Factory),工厂方法模式的核心,是具体工厂角色必须实现的接口或者必须继承父类。在 Java 类中他是抽象类或者接口来实现的。 具体...

2020-11-14 13:17:16 37 0

原创 红包系统架构设计

红包系统架构设计 软件系统设计,第一步,确定关键需求。 需求分析 比如红包这个系统,需要有如下: 包红包 发红包 抢红包 拆红包 不能抢超,也就是说红包个数,金额是有限的,不能超的。 支持高并发,例如1亿用户凌晨12点开始抢红包。 上面的 4 方面就是关键需求。 包红包:系统为每个红包设置一...

2020-11-12 17:07:48 194 0

原创 设计模式|适配器

设计模式|适配器 意图 适配器模式的设计意图是将一个类的接口转换成希望的另外一个接口。适配器模式使得原本接口不兼容的类可以在一起工作。 适配器模式分成,对象适配器和类适配器两种模式。对象适配器中, 适配器与适配者之间是关联关系,在类适配器模式中,适配器与适配者之间是继承关系。 类适配器通过继承来完...

2020-11-10 11:43:27 42 0

原创 二分算法-LeetCode 69

二分算法-LeetCode 69 二分算法 二分算法模板, 二分搜索即搜索一个数,如果存在,返回其索引,否则返回-1。 int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length...

2020-11-08 18:09:40 44 0

原创 设计模式-简单工厂

设计模式-简单工厂 使用工厂方法模式可以应付我们遇到的大部分需求,当产品种类变多的时候,这个时候会出现大量的工厂类,怎么解决这个问题? 可以对产品树上类似的种类使用简单工厂模式来实现。也就是说 工厂方法+简单工厂= 抽象工厂。 使用设计模式,主要是为了程序的扩展性。 为什么要使用工厂模式: 编码...

2020-11-08 12:52:40 61 0

原创 设计模式-工厂方法

设计模式-工厂方法设计模式 工厂方法(Factory Method) 定义了一个创建对象的接口,但由子类决定要实例化哪个类。 工厂方法把实例化操作推迟到子类。 工厂方法类图 简单工厂中,创建对象的另一个类,在工厂方法中,是由子类来创建对象。 主要角色 抽象工厂角色:这个工厂方法模式的核心,它与...

2020-11-07 12:51:38 32 0

原创 设计模式-观察者模式

设计模式-观察者模式 在我们的程序中,可能需要在某些数据变化的时候,其他类做出一些响应。不能开一个线程,然后每隔一段时间去检查数据是否有变化。更希望的是当一些内数据变化时,主动推送变化。 什么是观察者模式 对象之间一对多依赖,当一个对象状态改变时,它的依赖都会收到通知并更新状态。 观察者模式类图...

2020-11-05 11:17:09 36 0

原创 LeetCode343整数分解

题目链接:https://leetcode.com/problems/integer-break/description/ 思路 动态规划的思想: dp[1] = 1 dp[2] = 1 dp[3]= 2 dp[4] = 4 dp[5]= 6 dp[6] = 9 dp[7] = 12 dp[8]=...

2020-10-30 10:36:49 34 0

原创 数据库的存储结构

数据库的存储结构 数据库的存储结构是怎样的? 记录是按照行存储的,但是数据库的读取不是以行为单位,否则一次读取只能处理一行,效率很低。因此数据库,无论是读一行,还是读取多行,都是将这些行所在的页进行加载。数据管理存储空间的基本单位是页(Page) 快速回顾一遍数据库存储结构:一页可以存储多个行记录...

2020-10-24 22:49:40 62 0

原创 Java8 HashMap 源码分析

Java8 HashMap 源码分析 JDK 1.6 1.7 HashMap 采用的是 数组+链表的形式, 每个桶对应不同的 hash 值,根据 key 计算得到的 hash,将键值对存放到对于的位置。 hashMap 的键值都可以为 null ,每个桶又是链表的形式是存放的。 但是当一个桶中链表...

2020-10-08 14:21:39 55 0

原创 Java ArrayList 源码

Java ArrayList 源码 ArrayList 概述 ArrayList 是基于数组实现,是一个动态数组,容量可以自动增长,动态增加内存。 ArrayList 不是线程安全的,只能用在单线程,多线程换成环境下可以考虑 Collections.synchronizedList(List l)...

2020-10-04 21:01:43 48 0

原创 Java String 源码分析

Java String 源码分析 定义 Java 8 中 String 源码 public final class String implements java.io.Serializable, Comparable<String>, CharSequence {...} ...

2020-10-02 12:43:13 55 0

原创 HTTP SSL TCP TLS 说的啥

HTTP SSL TCP TLS 说的啥 TCP 建立连接过程 HTTPS 的连接建立过程 HTTPS 是啥 HTTP 是明文传输,意味着端到端之间的任意节点都知道内容是消息传输内容是啥,这些节点可以是 路由器,代理等。 HTTPS 就是来解决这个问题的,以安全为目的的 HTTP 通道,全...

2020-09-30 20:41:49 60 0

原创 怎么给字符串加索引

怎么给字符串加索引 比如说,要给邮箱这样的字段加索引,这样长字符串加索引会有什么样的问题? 前缀索引,如果长度长,会浪费大量的空间,同时增加额外的查询成本。 create table SUser( ID bigint unsigned primary key, email varchar (64...

2020-09-20 10:37:35 125 0

原创 Redis 为什么这么快?

Redis 为什么这么快? Redis 是 NoSQL 数据库,key-Value 数据库,键值数据库会使用 hash 表存储值和数据。 Redis 全称是 Remote Dictionary Server ,是用字典存储数据,也就是 key-value 类型的数据。 Redis 查询效率很高,...

2020-09-19 14:54:25 62 0

原创 Kafka 原理简介

Kafka 原理简介 Kafka 是一种高吞吐的分布式发布订阅的消息系统,可以处理消费者规模的网站中的动作流数据,具有高性能的,持久化,多副本,横向扩展能力。 https://www.cnblogs.com/sujing/p/10960832.html Kafka 的组成结构 Kafka 的基...

2020-09-01 10:55:43 84 0

原创 阿里巴巴开发手册为啥推荐: 若是 static 成员变量,必须考虑是否为 final ?

阿里巴巴开发手册为啥推荐: 若是 static 成员变量,必须考虑是否为 final ? 18. 【推荐】final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字: 1. 不允许被继承的类,如:String 类。 2. 不允许修改引用的域对象,如:POJO 类的...

2020-08-19 09:54:53 114 0

原创 康托展开公式与在全排列中应用

康托展开公式 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 怎样知道其中一种排列是有序序列中的第几个? 康托展开. {1…n}的全排列由小到大有序,s[]为第几个数 {1,2,3,4,…,n}的排列总共有n!种,将它们从小到大排序,怎...

2020-08-18 15:38:24 89 0

原创 LeetCode 5 题解

LeetCode 5 题解 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: &...

2020-08-17 11:17:48 74 0

原创 Spring 是如何解决循环依赖的?
原力计划

Spring 是如何解决循环依赖的? 循环依赖: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Spring 循环依赖有三种情况: 构造器的循环依赖,这种依赖 Spring 无法处理,直接抛出 BeanCurrentlyInCreationException 异常 单例...

2020-08-13 00:35:43 194 0

原创 面向对象、设计原则、设计模式、编程规范、重构

面向对象、设计原则、设计模式、编程规范、重构 面向对象 主流的三个编程风格有:面向对象,面向过程,函数式编程。 面向对象是最主流的风格,面向对象具有丰富的特性(封装,抽象,继承,多态)。 面向对象 面向对象的4大特性:封装、继承,抽象、多态。 面向对象编程与面向过程的区别和联系 面向对象分析,面...

2020-08-10 21:42:02 69 0

原创 布隆过滤器
原力计划

布隆过滤器 布隆过滤器拥有极高的性能,无论是写入操作还是读取操作,时间复杂度是O(1)。 在空间上相对于其他数据结构,有很大优势, 20亿的数据需要 2000000000bit/8/1024/1024 = 238 M ,如果使用数组来存储,假设每个用户 ID 占用 4个字节的空间,存储20亿用户需...

2020-08-01 11:44:26 121 0

原创 缓存穿透了怎么办?

缓存穿透了怎么办? 对应缓存来说,命中率是它的生命线。 在缓存命中率低的情况下,大量查询请求会穿透缓存到数据库,因为数据库对于并发的承受能力有限,一旦数据库承受不了大量查询任务,就会导致查询变慢,导致大量的请求阻塞在数据库查询上,造成应用服务器的连接和线程资源被占满,最终导致系统崩溃。 什么是缓存...

2020-07-30 22:12:31 73 0

原创 接口和抽象的使用场景

接口和抽象的使用场景 抽象和接口的区别 总的来说,是抽象是为了代码复用,接口是为了解耦。 抽象 抽象类不允许被实例化,只能被基础,也就是说,不能 new 一个抽象类 抽象类可以包含方法和属性,方法可以包含实现,也可以不实现。不实现的方法叫做抽象方法 子类继承抽象,必须实现抽象类中的方法。 接口...

2020-07-22 23:49:14 94 0

原创 深入理解数据库原理

GitChat 10个免费名额 ,先到先得!

2020-07-22 15:08:42 71 0

原创 软件设计思想:池化技术
原力计划

软件设计思想:池化技术 先举个例子 一种简单的架构:前端一台 Web 服务器运行业务代码,后端一台数据库服务器存储业务数据。 系统上线时,用户量不大,运行平稳,但是随着流量的提升,系统访问速度会变慢。 分析日志后,发现系统慢的原因是出现在系统库的交互上,因为数据调用的方式是首先获取数据库的连接,...

2020-07-21 00:00:05 210 0

原创 什么是事务隔离

什么是事务隔离 事务简单的来说是保证一组数据库操作,要么全部成功,要么全部失败。 MySQL 中事务支持是在引擎实现的, MySQL 原生的 MyISAM 引擎不支持事务,这也是 MyISAM 被 InnoDB 引擎取代的重要原因。 隔离性与隔离级别 提到事务, 数据库为了保证事务,必须具备四个特...

2020-07-19 12:27:54 72 0

原创 系统设计:如何让系统高可用?

系统设计:如何让系统高可用? 系统的高可用性是指系统具备较高的无故障运行的能力。 很多开源组件中可以看到 HA 方案就是提升组件的可用性,让系统免于宕机无法服务的方案。 举个例子, Hadoop 1.0 中 NameNode 是单点的,一旦发生故障则整个集群不可用,Hadoop 2.0 时 ,采用...

2020-07-16 19:30:33 108 0

原创 系统设计:如何让系统容易扩展?

系统设计:如何让系统容易扩展? 一个高可扩展性指标,表示可以通过增加机器的方式来线性提高系统的处理能力,从而承担更高的流量或者并发数。 在单机系统中通过增加处理核心数来增加系统的并行处理能力,但是这个方法并不总生效,随着并行的任务增多,系统会因为争夺资源而达到性能上的拐点。系统性能会不升反降。 多...

2020-07-15 09:06:38 162 0

原创 数据库原理: Change Buffer 是干什么的?

数据库原理: Change Buffer 是干什么的? redo log 主要节省的是随机写磁盘的 IO 消耗(转成顺序写),而 change buffer 主要节省的是随机读磁盘的IO消耗。 实例:插入过程 插入语句 insert into t(id,k) values(id1,k1),(id2...

2020-07-12 11:44:14 265 0

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