王小明的专栏

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

博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com

  • 996,809
    被访问量
  • 576
    原创文章
  • 2,545
    作者排名
  • 1,255
    粉丝数量
  • 于 2012-05-12 加入CSDN
获得成就
  • 博客专家认证
  • 获得311次点赞
  • 内容获得108次评论
  • 获得841次收藏
荣誉勋章
兴趣领域
  • #后端
    #Python#Spring#Java#MySQL#Spring Boot#分布式#架构#Redis
TA的专栏
  • Java 源码解读
    22篇
  • 深入理解 JVM 原理
    6篇
  • 深入理解 Dubbo 原理
    3篇
  • 实战 Java 并发编程
    46篇
  • 深入理解数据库原理
    25篇
  • 数据库SQL
    8篇
  • 零基础学 Python
  • ANDROID
    1篇
  • 单片机
    4篇
  • 计组汇编语言
    2篇
  • Linux/Unix
    7篇
  • 其他
    28篇
  • matlab
    9篇
  • 设计模式
    11篇
  • 前端 Html/Js/JSP/CSS/jQuery
    15篇
  • FPGA/CPLD/ verilog HDL
    3篇
  • 框架
    13篇
  • 问题处理/工具使用/Eclipse/Xshell/PLSQL
    49篇
  • 大数据/Hadoop/Spark/Storm/ELK
    29篇
  • 生活
    6篇
  • C/C++
    16篇
  • 正则表达式
    3篇
  • 网络
  • 读书笔记
    1篇
  • 计算机软件/硬件维修
    5篇
  • 机器学习/人工智能算法
    3篇
  • ACM
    37篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Dubbo 服务响应原理

消费者响应:demoService.sayHello("world" + i)-->InvokerInvocationHandler.invoke -->invoker.invoke -->RpcInvocation//所有请求参数都会转换为RpcInvocation -->MockClusterInvoker.invoke //1.进入集群 -->invoker.invoke(invocation) -->Abstra
原创
0评论
0点赞
发布博客于 4 天前

【深入理解Dubbo原理】dubbo消费者服务引用

源码ReferenceBean.getObject() -->ReferenceConfig.get() -->init() -->createProxy(map) -->refprotocol.refer(interfaceClass, urls.get(0)) -->ExtensionLoader.getExtensionLoader(Protocol.class).getExtension("registry"
原创
0评论
0点赞
发布博客于 4 天前

LeetCode 42. 接雨水

接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length0 <= n <= .
原创
0评论
0点赞
发布博客于 12 天前

LeetCode56. 合并区间-二维数组排序问题

Arrays.sort(a, new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {if (o1[0]==o2[0]) return o1[1]-o2[1];return o1[0]-o2[0];}});
原创
0评论
0点赞
发布博客于 14 天前

Leetcode15. 三数之和

三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]AC 代码class Solution { public Li.
原创
0评论
0点赞
发布博客于 15 天前

LeetCode33. 搜索旋转排序数组

搜索旋转排序数组升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 经旋转后可能变为 [4,5,6,7,0,1,2] )。请你在数组中搜索 target ,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。示例 1:输入:nums = [4,5,6,7,0,1,2], target = 0输出:4示例 2:输入:nums = [4,5,6,7,0,1,2], target = 3输出:-1示例 3:输入:nums = [1],
原创
0评论
0点赞
发布博客于 16 天前

Tomcat是如何加载类的

类加载机制类加载器有两大类:1.JDK自带的 2.用户自定义的JDK自带类加载器分成3种:1.Bootstrap ClassLoader 启动类加载器: 加载/jre/lib下面的类,特别的 /jre/lib/rt.jar 中包含了 sun.misc.Launcher 类, 而 sun.misc.Launcher$ExtClassLoader 和 sun.misc.Laun...
原创
0评论
0点赞
发布博客于 25 天前

Leetcode_153. 寻找旋转排序数组中的最小值

寻找旋转排序数组中的最小值假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] 。请找出其中最小的元素。示例 1:输入:nums = [3,4,5,1,2]输出:1示例 2:输入:nums = [4,5,6,7,0,1,2]输出:0示例 3:输入:nums = [1]输出:1提示:1 <= nums.length <= 5000-5000 <= nums[i] <= .
原创
0评论
0点赞
发布博客于 27 天前

TCP:三次握手|4次挥手

说到三次握手4次挥手TCP报文格式TCP 报文格式源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程。目的端口号( 16 位):它(连同目的主机 IP 地址)标识目的主机的一个应用进程。这两个值加上 IP 报头中的源主机 IP 地址和目的主机 IP 地址唯一确定一个 TCP 连接。顺序号 seq( 32 位):用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则TC
原创
0评论
0点赞
发布博客于 1 月前

volatile原理:happen before

JVM内存模型,GC机制和原理JVM 内存模型Java虚拟机试图定义一种Java内存模型来屏蔽掉各层硬件和操作系统的差异访问。内存模型有什么特性?Java 内存模型规定了所有的变量都存储在主内存(Main Menory)中,每条线程还有自己的工作内存(work Memory)中。线程的工作内存中保存了该线程从主内存中拷贝的副本, 线程对变量的所有操作(读取,赋值)都必须在...
原创
0评论
0点赞
发布博客于 1 月前

全排列

https://leetcode-cn.com/problems/next-permutation/https://leetcode-cn.com/problems/permutations-ii/submissions/class Solution { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> res = new Array
原创
0评论
0点赞
发布博客于 1 月前

动态代理

什么是动态代理 ?动态代理是面向切面编程(AOP)的基础AOP 应用场景:日志,性能监控,权限检查,数据库事物等动态代理可以干什么?动态代理 可以在运行时创建一个类,实现一个 或者多个接口,可以在不修改原来类的基础上动态的为通过该类获取的对象添加方法或者修改行为。要理解动态代理 ,先要理解静态代理,静态代理是啥?静态代理:动态代理的实现方式?实现方式一: 一种是Java SDK 提供,实现方式二...
原创
0评论
0点赞
发布博客于 1 月前

线程CPU很高,如何排查

当谈及这个问题的时候,我们会考虑啥?如何排查?1.根据top命令,去找哪个进程的CPU比较高2. 找到命令之后,去找进程的线程信息。按照CPU 占用的高低进行排序。PID进程号ps -mp &lt;PID&gt; -o THREAD,tid,time | sort -rn栗子RUNNABLE: 线程正在执行中,占用了资源,比如处理某个请求/进行计算/文件操作等 ...
原创
0评论
0点赞
发布博客于 1 月前

volatile 原理与作用

volatie
原创
0评论
0点赞
发布博客于 1 月前

死锁

死锁产生的原因系统资源不足进程运行推荐的顺序不合适资源分配不当当资源充足时,进程的资源都能够得到满足,死锁出现的可能性很低。否则会因为争夺有限的资源陷入死锁。如果进程推进顺序有问题,也会产生死锁。死锁的4个必要条件互斥条件:一个资源每次只能被一个进程使用请求与保持:一个进程因为请求资源阻塞,对已经获得的资源保持不放不剥夺条件: 进程已经获得的资源,在未使用完之前,不能进行剥夺循环等待: 若干进程之间形成一种头尾相互等待资源的关系。死锁的解除与预防预防死锁,需要在系统设计中,让
原创
0评论
0点赞
发布博客于 1 月前

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

查看 Redis 版本redis-cli -vredis-cli 3.2.1Reactor 模式Redis 是基于 Reactor 模式开发了网络事件处理器,这个处理器称为文件事件处理器。组成结构为4个部分:多套接字IO 多路复用程序文件事件派发器事件处理器。一般来说 Redis 的瓶颈并不在 CPU,而在内存和网络。如果要使用 CPU 多核,可以搭建多个 Redis 实例来解决。Redis 6.0 为什么要引入多线程呢?Redis 的瓶颈并不在 CPU,而在内存和网络。可
原创
0评论
0点赞
发布博客于 1 月前

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

面试题 04.03. 特定深度节点链表给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。示例:输入:[1,2,3,4,5,null,7,8] 1 / \ 2 3 / \ \ 4 5 7/8输出:[[1],[2,3],[4,5,7],[8]]AC 代码:/** * Definition for a binary tree node. *
原创
0评论
0点赞
发布博客于 1 月前

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

检查数组对是否可以被 k 整除给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。示例 1:输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5输出:true解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。示例 2:输入:arr = [1,2,3,4,5.
原创
0评论
0点赞
发布博客于 1 月前

LeetCode- 盛最多水的容器

题目连接:https://leetcode-cn.com/problems/container-with-most-water/盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线
原创
0评论
0点赞
发布博客于 1 月前

Mysql数据库有几种索引

索引分类从物理上分聚簇索引非聚簇索引从逻辑角度普通索引唯一索引主键索引文本索引复合索引空间索引 :空间索引是对空间数据类型的字段上建立索引。空间数据类型有4种,分别是 GEPMETRY 、POINT、 LINESTRING 、POLYGONCREATE TABLE table name[coL name data type][unique l fulltext I spatial] [index key][index_ name ](col_name[length])[asc
原创
0评论
0点赞
发布博客于 2 月前

Zookeeper 和 Eureka 区别

主要区别zookeeper的目标是一个分布式的协调系统,用于进行资源的统一管理,为了满足CP而进行设计。eureka的目标是一个服务注册发现系统,专门用于微服务的服务发现注册,按照满足AP而进行设计。ZookeeperZookeeper 是将数据一致性作为设计目标是 CP 的,不保证服务的可用性,当节点 Crash 宕机之后,需要进行 leader 选举,选举过程中,ZK 服务不可用。对服务注册发现来说, 对数据一致性要求没那么高,但是对可用性要求高, 如果从注册中心获取不到服务,会是很大的问
原创
0评论
0点赞
发布博客于 2 月前

LRU 算法实现

LRU 算法实现什么是 LRU 算法LRU是什么?按照英文的直接原义就是Least Recently Used,最近最久未使用法,它是按照一个非常著名的计算机操作系统基础理论得来的:最近使用的页面数据会在未来一段时期内仍然被使用,已经很久没有使用的页面很有可能在未来较长的一段时间内仍然不会被使用。基于这个思想,会存在一种缓存淘汰机制,每次从内存中找到最久未使用的数据然后置换出来,从而存入新的数据!它的主要衡量指标是使用的时间,附加指标是使用的次数。在计算机中大量使用了这个机制,它的合理性在于优先筛选热点
原创
0评论
0点赞
发布博客于 2 月前

LeetCode 572 题解

LeetCode 572 题解给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。代码实现public boolean isSubtree(TreeNode s, TreeNode t) { if(s == null && t !=null) return false; // 判断一棵树 是不是另外一棵树的子树,有三种情况
原创
0评论
0点赞
发布博客于 2 月前

CAP 理论

CAP 理论CAP 是反应了分布式系统中的三个指标: Consistency (一致性), Availlability (可用性)Partion Tolerance(分区容错性)。CAP 理论的核心是说 ,C、A 、P 这三个指标不能同时做到。Consistency(一致性)指数据在多个副本之间能够保持一致的特性(严格的一致性)Availability(可用性)指系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应(不保证获取的数据为最新数据)Partition toleran
原创
0评论
0点赞
发布博客于 2 月前

设计模式|抽象工厂

设计模式|抽象工厂意图抽象工厂提供一个接口,用来创建相关的对象家族,而不是和工厂方法一样,创建一个对象。抽象工厂抽象工厂模式的各个角色:抽象工厂角色(Factory),工厂方法模式的核心,是具体工厂角色必须实现的接口或者必须继承父类。在 Java 类中他是抽象类或者接口来实现的。具体工厂角色(ConcreteFactory),这个是实现抽象工厂接口的具体工厂类。抽象产品角色(Product):抽象工厂模式所创建对象的基类,也就是产品对象共同父类。具体产品角色(ConcreteProduct
原创
0评论
0点赞
发布博客于 2 月前

红包系统架构设计

红包系统架构设计软件系统设计,第一步,确定关键需求。需求分析比如红包这个系统,需要有如下:包红包发红包抢红包拆红包不能抢超,也就是说红包个数,金额是有限的,不能超的。支持高并发,例如1亿用户凌晨12点开始抢红包。上面的 4 方面就是关键需求。包红包:系统为每个红包设置一个 id ,然后将红包发送个用户,这里需要设置 红包金额,红包个数,要发送的用户,存储这些信息。发红包,设置完红包参数后,微信支付,完成付款,然后收到付款成功通知,红包系统更新红包订单状态,更新为已支付,并写入红
原创
0评论
1点赞
发布博客于 2 月前

设计模式|适配器

设计模式|适配器意图适配器模式的设计意图是将一个类的接口转换成希望的另外一个接口。适配器模式使得原本接口不兼容的类可以在一起工作。适配器模式分成,对象适配器和类适配器两种模式。对象适配器中, 适配器与适配者之间是关联关系,在类适配器模式中,适配器与适配者之间是继承关系。类适配器通过继承来完成适配,对象适配器则是通过关联来完成 。适配器设计模式包含哪些角色Target (目标抽象类)目标抽象类定义客户端所需接口,可以是一个抽象类或者接口,也可以具体类。Adapter(适配器类)适配
原创
0评论
0点赞
发布博客于 2 月前

二分算法-LeetCode 69

二分算法-LeetCode 69二分算法二分算法模板, 二分搜索即搜索一个数,如果存在,返回其索引,否则返回-1。int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; // 注意 while(left <= right) { // 注意 int mid = (right + left) / 2; if(nums[mid]
原创
0评论
0点赞
发布博客于 2 月前

设计模式-简单工厂

设计模式-简单工厂使用工厂方法模式可以应付我们遇到的大部分需求,当产品种类变多的时候,这个时候会出现大量的工厂类,怎么解决这个问题? 可以对产品树上类似的种类使用简单工厂模式来实现。也就是说 工厂方法+简单工厂= 抽象工厂。使用设计模式,主要是为了程序的扩展性。为什么要使用工厂模式:编码时不能预见要创建哪些类的实例。系统不应该依赖产品类如何被创建,组合和表达的细节。简单工厂简单工厂只有一个工厂,也一个产品基类,不同的产品可以继承这个产品基类。简单工厂代码实现:public inter
原创
0评论
0点赞
发布博客于 2 月前

设计模式-工厂方法

设计模式-工厂方法设计模式工厂方法(Factory Method)定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。工厂方法类图简单工厂中,创建对象的另一个类,在工厂方法中,是由子类来创建对象。主要角色抽象工厂角色:这个工厂方法模式的核心,它与应用程序无关,是具体工厂角色必须实现的接口或者必须继承的父类。具体工厂角色: 含有和具体业务逻辑有关代码,由应用程序调用以创建具体产品的对象。抽象产品角色:它是具体产品继承的父类或者是实现的接口。具体产品角色
原创
0评论
0点赞
发布博客于 2 月前

设计模式-观察者模式

设计模式-观察者模式在我们的程序中,可能需要在某些数据变化的时候,其他类做出一些响应。不能开一个线程,然后每隔一段时间去检查数据是否有变化。更希望的是当一些内数据变化时,主动推送变化。什么是观察者模式对象之间一对多依赖,当一个对象状态改变时,它的依赖都会收到通知并更新状态。观察者模式类图观察者设计模式包含哪些角色?Subject: 抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存到一个集合中,每个主题都可以有任意数量的观察者,抽象主题提供接口,供增加和删除观察者。ConCret
原创
0评论
0点赞
发布博客于 2 月前

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]= 18 dp[9] = 27动态规划方程:dp[1] = 1dp[i] = MAX(dp[i], MAX(dp[j](i-j),i(i-j))public class LeetCode343 {
原创
0评论
0点赞
发布博客于 2 月前

数据库的存储结构

数据库的存储结构数据库的存储结构是怎样的?记录是按照行存储的,但是数据库的读取不是以行为单位,否则一次读取只能处理一行,效率很低。因此数据库,无论是读一行,还是读取多行,都是将这些行所在的页进行加载。数据管理存储空间的基本单位是页(Page)快速回顾一遍数据库存储结构:一页可以存储多个行记录(Row) ,先是表空间(Tablespace),表空间包含段(segement),还存在区(Extent),其关系如下图所示:段(Segment)段里面有多个区,区在文件系统是一个连续的分片空间,不过在段
原创
0评论
0点赞
发布博客于 3 月前

Java8 HashMap 源码分析

Java8 HashMap 源码分析JDK 1.6 1.7 HashMap 采用的是 数组+链表的形式, 每个桶对应不同的 hash 值,根据 key 计算得到的 hash,将键值对存放到对于的位置。hashMap 的键值都可以为 null ,每个桶又是链表的形式是存放的。但是当一个桶中链表的元素变多,通过 key 值依次查找的效率会变低,因此 HashMap 采用的是 桶+链表/红黑树的方式实现。 当链表长度超过 8 时,将链表转换为红黑树,大大减少查找时间。HashMap 结构底层实现Ha
原创
0评论
0点赞
发布博客于 3 月前

Java ArrayList 源码

Java ArrayList 源码ArrayList 概述ArrayList 是基于数组实现,是一个动态数组,容量可以自动增长,动态增加内存。ArrayList 不是线程安全的,只能用在单线程,多线程换成环境下可以考虑 Collections.synchronizedList(List l) 函数返回一个线程安全的 ArrayList 类,也可以在 concurrent 并发包下的 CopyOnWriteArrayList 类。ArrayList 实现了Serializable 接口,支持序列化传输
原创
0评论
0点赞
发布博客于 3 月前

Java String 源码分析

Java String 源码分析定义Java 8 中 String 源码public final class String implements java.io.Serializable, Comparable<String>, CharSequence {...}String 是final 类型不能被继承,同时实现了 java.io.serializable Comparable charSequence 三个接口。String类 官方的说法是:String 字符串常量
原创
0评论
1点赞
发布博客于 3 月前

HTTP SSL TCP TLS 说的啥

HTTP SSL TCP TLS 说的啥TCP 建立连接过程HTTPS 的连接建立过程HTTPS 是啥HTTP 是明文传输,意味着端到端之间的任意节点都知道内容是消息传输内容是啥,这些节点可以是 路由器,代理等。HTTPS 就是来解决这个问题的,以安全为目的的 HTTP 通道,全称是 Hyper Text Transfer ProtocolSSL TLS 是啥SSL (secure Sockets Layer 安全套接字)TLS(Transport Layer security,
原创
0评论
0点赞
发布博客于 3 月前

怎么给字符串加索引

怎么给字符串加索引比如说,要给邮箱这样的字段加索引,这样长字符串加索引会有什么样的问题?前缀索引,如果长度长,会浪费大量的空间,同时增加额外的查询成本。create table SUser(ID bigint unsigned primary key, email varchar (64)...)Engine=innodb;如果使用邮箱登录,这样会出现这样的语句:select f1 ,f2 from Suser Where emial='xxx';如果 email 不建索引,那么就
原创
0评论
0点赞
发布博客于 4 月前

Redis 为什么这么快?

Redis 为什么这么快?Redis 是 NoSQL 数据库,key-Value 数据库,键值数据库会使用 hash 表存储值和数据。 Redis 全称是 Remote Dictionary Server ,是用字典存储数据,也就是 key-value 类型的数据。Redis 查询效率很高,为什么这么快?Redis 采用的是 ANSI C 语言编写,采用 C 语言编写的好处是底层代码执行效率高。依赖性低,使用 C 语言开发的库没有太多运行时(Runtime)依赖,并且系统兼容性好,稳定性高。Re
原创
0评论
0点赞
发布博客于 4 月前

Kafka 原理简介

Kafka 原理简介Kafka 是一种高吞吐的分布式发布订阅的消息系统,可以处理消费者规模的网站中的动作流数据,具有高性能的,持久化,多副本,横向扩展能力。https://www.cnblogs.com/sujing/p/10960832.htmlKafka 的组成结构Kafka 的基础架构图:Producer Producer 生产者,消息的生产者。kafka clusterBroker : Broker 是 kafka 的实例,每个服务器有一个或者多个 Kafka实例。Kaf
原创
0评论
0点赞
发布博客于 4 月前

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

阿里巴巴开发手册为啥推荐: 若是 static 成员变量,必须考虑是否为 final ?18. 【推荐】final 可以声明类、成员变量、方法、以及本地变量,下列情况使用 final 关键字: 1. 不允许被继承的类,如:String 类。 2. 不允许修改引用的域对象,如:POJO 类的域变量。 3. 不允许被重写的方法,如:POJO 类的 setter 方法。 4. 不允许运行过程中重新赋值的局部变量。 5. 避免上下文重复使用一个变量,使用 final 描述可以强制重新定义一个变量
原创
0评论
0点赞
发布博客于 5 月前

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

康托展开公式X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0!怎样知道其中一种排列是有序序列中的第几个?康托展开. {1…n}的全排列由小到大有序,s[]为第几个数{1,2,3,4,…,n}的排列总共有n!种,将它们从小到大排序,怎样知道其中一种排列是有序序列中的第几个?如 {1,2,3} 按从小到大排列一共6个:123 132 213 231 312 321。想知道321是{1,2,3}中第几个大的数。这样考虑:第一位是3,小于3的
原创
0评论
1点赞
发布博客于 5 月前

LeetCode 5 题解

LeetCode 5 题解给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路: 动态规划动态转移方程dp[i][j] = dp[i+1][j-1] && (s[i]==s[j])边界条件:当只有一个字符时候dp[i][i+0] = true当有两个字符时:dp[i][i+1] =(s[i
原创
0评论
0点赞
发布博客于 5 月前

Spring 是如何解决循环依赖的?

Spring 是如何解决循环依赖的?循环依赖:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传Spring 循环依赖有三种情况:构造器的循环依赖,这种依赖 Spring 无法处理,直接抛出 BeanCurrentlyInCreationException 异常单例模式下的 setter 循环依赖,可以通过三级缓存处理非单例循环依赖,无法处理,BeanCurrentlyInCreationException 异常构造器循环依赖正要创建的 bean 记录在缓存中,Spr
原创
0评论
0点赞
发布博客于 5 月前

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

面向对象、设计原则、设计模式、编程规范、重构面向对象主流的三个编程风格有:面向对象,面向过程,函数式编程。面向对象是最主流的风格,面向对象具有丰富的特性(封装,抽象,继承,多态)。面向对象面向对象的4大特性:封装、继承,抽象、多态。面向对象编程与面向过程的区别和联系面向对象分析,面向对象设计、面向对象编程接口和抽象类的区别与各自的应用场景基于接口实现的编程的设计思想多个组合少用继承的设计思想多面向过程的贫血模型和面向对象的充血模型设计原则设计原则是指导我们代码设计的一些总结,设
原创
0评论
0点赞
发布博客于 5 月前

布隆过滤器

布隆过滤器布隆过滤器拥有极高的性能,无论是写入操作还是读取操作,时间复杂度是O(1)。在空间上相对于其他数据结构,有很大优势, 20亿的数据需要 2000000000bit/8/1024/1024 = 238 M ,如果使用数组来存储,假设每个用户 ID 占用 4个字节的空间,存储20亿用户需要 2000000000byte/4/8/1024/1024 = 7600M 的空间,是布隆过滤器的32倍。布隆过滤器(Bloom Filter)hash 函数布隆过滤器的缺点在判断元素是否在集合中
原创
0评论
0点赞
发布博客于 5 月前

缓存穿透了怎么办?

缓存穿透了怎么办?对应缓存来说,命中率是它的生命线。在缓存命中率低的情况下,大量查询请求会穿透缓存到数据库,因为数据库对于并发的承受能力有限,一旦数据库承受不了大量查询任务,就会导致查询变慢,导致大量的请求阻塞在数据库查询上,造成应用服务器的连接和线程资源被占满,最终导致系统崩溃。什么是缓存穿透缓存穿透,其实是指从缓存中没有找到数据,不得已查询数据库的情况。少量的缓存穿透没问题,主要由如下几点原因:一方面,缓存系统在容量上有限,不可能所有的数据都存储在缓存中另外一方面,互联网系统遵守 8/2
原创
0评论
0点赞
发布博客于 6 月前

接口和抽象的使用场景

接口和抽象的使用场景抽象和接口的区别总的来说,是抽象是为了代码复用,接口是为了解耦。抽象抽象类不允许被实例化,只能被基础,也就是说,不能 new 一个抽象类抽象类可以包含方法和属性,方法可以包含实现,也可以不实现。不实现的方法叫做抽象方法子类继承抽象,必须实现抽象类中的方法。接口接口不能包含属性接口只能声明方法,方法不能包含代码实现类实现接口的时候,必须实现接口中声明的所有方法。抽象类说明的是 is-a 的关系,接口表示的是一种 Has-a 的关系。抽象类和接口能解决什么问题
原创
0评论
0点赞
发布博客于 6 月前

深入理解数据库原理

GitChat 10个免费名额 ,先到先得!
原创
0评论
0点赞
发布博客于 6 月前

软件设计思想:池化技术

软件设计思想:池化技术先举个例子一种简单的架构:前端一台 Web 服务器运行业务代码,后端一台数据库服务器存储业务数据。系统上线时,用户量不大,运行平稳,但是随着流量的提升,系统访问速度会变慢。分析日志后,发现系统慢的原因是出现在系统库的交互上,因为数据调用的方式是首先获取数据库的连接,然后依靠这个连接,查询数据库的数据,最后释放数据库资源。为什么频繁创建连接响应会变慢?整个 MySQL 创建连接过程主要分成两个部分:第一部分是采用建立 TCP 连接。通过三次握手 建立 TCP 连接。
原创
0评论
0点赞
发布博客于 6 月前

什么是事务隔离

什么是事务隔离事务简单的来说是保证一组数据库操作,要么全部成功,要么全部失败。MySQL 中事务支持是在引擎实现的, MySQL 原生的 MyISAM 引擎不支持事务,这也是 MyISAM 被 InnoDB 引擎取代的重要原因。隔离性与隔离级别提到事务, 数据库为了保证事务,必须具备四个特性:ACID,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)事务的四个特性原子性 (Atomicity)事务操作,要么全部做完
原创
0评论
0点赞
发布博客于 6 月前

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

系统设计:如何让系统高可用?系统的高可用性是指系统具备较高的无故障运行的能力。很多开源组件中可以看到 HA 方案就是提升组件的可用性,让系统免于宕机无法服务的方案。举个例子, Hadoop 1.0 中 NameNode 是单点的,一旦发生故障则整个集群不可用,Hadoop 2.0 时 ,采用的是两个 NameNode. 一个状态是Active,一个状态是 Standy 状态,两者共享存储。一旦 Active NameNode 发生故障,Standy NameNode 切换成 Active 状态继续提供
原创
0评论
0点赞
发布博客于 6 月前

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

系统设计:如何让系统容易扩展?一个高可扩展性指标,表示可以通过增加机器的方式来线性提高系统的处理能力,从而承担更高的流量或者并发数。在单机系统中通过增加处理核心数来增加系统的并行处理能力,但是这个方法并不总生效,随着并行的任务增多,系统会因为争夺资源而达到性能上的拐点。系统性能会不升反降。多台机器组成的机器系统也类似,在集群系统中,不同的分层也存在一些瓶颈。制约横向扩展能力。举个例子,系统的流量是每秒1000次请求,对数据库请求也是 1000次/s ,单独如果流量增加10倍,系统可以扩容,正常提供服
原创
0评论
0点赞
发布博客于 6 月前

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

数据库原理: Change Buffer 是干什么的?redo log 主要节省的是随机写磁盘的 IO 消耗(转成顺序写),而 change buffer 主要节省的是随机读磁盘的IO消耗。实例:插入过程插入语句insert into t(id,k) values(id1,k1),(id2,k2);假设当前 k 索引树的状态,查找到位置后,K1 所在的数据页在内存(InnoDB buffer pool)中,K2 所在的数据页不在内存中。包含 几个部分:内存、redo log(ib_log
原创
0评论
1点赞
发布博客于 6 月前

公钥 私钥 签名 验签 说的啥?

公钥 私钥 签名 验签 说的啥?公钥加密,私钥解密 私钥签名,公钥验签散列算法散列算法,也叫做哈希函数,是从一个任何一种数据中创建小的数字方法,散列函数把消息或者数据压缩成摘要,有时候也叫做摘要算法。 把数据量变小,将数据的格式固定下来。常用的算法有:MD5 SHA1MD5MD5 不是一种加密算法,是一种摘要算法,无论多长的输入, MD5 都会输出长度为 128bits 的一个串。public static final byte[] computeMD5(byte[] content) {
原创
0评论
0点赞
发布博客于 6 月前

MySQL 普通索引和唯一索引该如何选择?

MySQL 普通索引和唯一索引该如何选择?普通索引和唯一索引在查询能力上没啥差别,主要考虑对更新性能的影响,要尽量选择普通索引。接下来分析两种索引在查询语句和更新语句对性能的影响。查询过程MySQL InnoDB 是采用 B+ 树实现其索引结构。B+ 树的查找过程如上图所示:现在需要查找 29 这个值。将磁盘块1从磁盘加载到内存,发生一次IO ,在内存中使用二分查找方式找到 29在17和35 之间,锁定磁盘块1的P2 指针。通过磁盘块1 的 P2 指针地址把磁盘块3 加载到内存,发生第二
原创
0评论
0点赞
发布博客于 6 月前

SQL 中的聚集函数?

SQL 中的聚集函数?SQL 函数包含了算术函数,字符串函数,日期函数,转换函数。还有一函数,叫做聚集函数。SQL 聚集函数是对一组数据进行汇总的函数,输入是一组数据的集合,输出是单个值。有哪些聚集函数SQL 中的聚集函数,有最大值,最小值,平均值。Count 使用例子:查询heros 中hp_max 大于6000 的英雄。SELECT COUNT(*) FROM heros WHERE hp_max > 6000运⾏结果为41。想要查询最⼤⽣命值⼤于6000,且有次要定位的英雄数量
原创
0评论
0点赞
发布博客于 6 月前

Java 中 Hashtable 、HashMap 、TreeMap 有什么不同?

Java 中 Hashtable 、HashMap 、TreeMap 有什么不同?HashTable 最早期的 Java 类库提供的一个 Hash表实现,本身是同步的,不支持 null 键和值,对同步有导致性能开销,很少被推荐使用。HashMap 是应该更加广泛的哈希表实现,行为上与 hashtable 一致,主要区别是 Hashmap 不是同步的,支持null 建和值。 HashMap 进行 put 或者 get 操作,可以达到常熟时间的性能,所以绝大多数场景都使用 HashMap。TreeMap
原创
0评论
0点赞
发布博客于 6 月前

数据库分类

数据库分类DB DBS DBMS区别是什么?DBMS 的英文全称是 DataBase Management System 数据库管理系统。DBMS = 多个数据库(DB) + 管理程序DB(DataBase)数据库,数据库是存储数据的集合。DBS 的英文是 DataBase System 数据库系统,包含了数据库,数据库管理系统+数据库管理人员(DBA)常见的 DBMS数据库分类关系型数据库(RDBMS)关系型数据库建立在关系模型的基础上,SQL就是关系型数据库的查询语言。非关系型数据
原创
0评论
0点赞
发布博客于 6 月前

数据库锁分类

数据库锁分类锁和索引是数据库两大核心概念,了解索引,可以从 B+ 树,Hash 索引,页结构,缓存池,索引原则等方面理解。理解锁,要从哪些方面入手?为什么要加锁加锁的目的,其实是为了保证数据的一致性。 当多个线程并发访问某个数据时,加锁,可以保证这个数据在任何时刻最多只有一个线程在访问,保证数据的完整性和一致性。锁的分类锁可以按照锁粒度划分,可以按照数据库管理角度划分。按照锁粒度划分按照锁粒度划分,可以将锁划分成 行锁,页锁和表锁。快速回忆一遍 InnoDB 存储引擎的逻辑结构:所有数据都被
原创
0评论
0点赞
发布博客于 6 月前

[DUBBO] disconnected from 问题

Dubbo [DUBBO] disconnected from 问题重启 Dubbo provider(生产者) 服务,出现如下异常日志:[INFO ] 2017-11-15 10:50:07,790--DubboServerHandler-10.255.242.97:20990-thread-517--[com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol] [DUBBO] disconected from /10.255.242.96:11582,
原创
0评论
0点赞
发布博客于 7 月前

Java 异常处理机制

Java 异常处理机制Exception 和 Error 有什么区别?Exception 和Error 都是继承 Throwable 类,在 java 只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。Exception 和 Error 提现了 Java 平台设计者不同异常情况的类,Exception 在程序运行中,可预料的意外情况,并且可能被捕获,进行相应处理。Error 是指在正常情况下,不大可能出现的情况,可能是因为JVM自
原创
0评论
0点赞
发布博客于 7 月前

LeetCode 3 题解

LeetCode 3 题解滑动窗口的方式求解public class LeetCode3 { public int lengthOfLongestSubstring(String s) { if(s == null || "".equals(s)) return 0; char[] chars = s.toCharArray(); int i = 0; int j = 0; int len = chars
原创
0评论
0点赞
发布博客于 7 月前

Apacche Dubbo 反序列化漏洞

Apacche Dubbo 反序列化漏洞早在2019年开发者社区就有谈到这个 http 协议漏洞问题,近期360灵腾安全实验室判断漏洞等级为高,利用难度低,威胁程度高。 建议升级 dubbo 版本,避免遭受黑客攻击。漏洞描述Unsafe deserialization occurs within a Dubbo application which has HTTP remoting enabled. An attacker may submit a POST request with a Java
原创
0评论
0点赞
发布博客于 7 月前

如何动态生成一个Java类

如何动态生成一个Java类开发者编写Java 代码,调用 javac 编译生成 class 文件。然后通过类加载机制载入 JVM ,即成为了应用可以使用的 Java 类。可以写一个编译类编译 java 代码:import java.io.File;import java.io.FileWriter;import java.lang.reflect.Method;import javax.tools.JavaCompiler;import javax.tools.JavaCompiler.Co
原创
0评论
0点赞
发布博客于 7 月前

Java 常见的垃圾回收器

Java 常见的垃圾回收器垃圾回收器 (GC, Garbage Collector)是和具体的 JVM 实现紧密相关。Java 虚拟机针对新生代和年老代分别提供了多种不同的垃圾收集器。Serial GCSerial GC ,是新生代的垃圾回收器, Serial 体现在其收集工作是单线程的,并且在垃圾收集过程中,其他线程阻塞,进入 Stop Thre World 状态。 新生代使用的 Serial 垃圾回收器,是基于复制算法的。-XX:+UseSerialGCParalel Scavenge
原创
0评论
0点赞
发布博客于 7 月前

接口和抽象有什么区别?

接口和抽象有什么区别?接口和抽象是 Java 面向对象设计的两个基础机制。接口是对行为的抽象,它是抽象方法的集合,利用接口可以达到API 定义和实现分离的目的。接口不能实例化,接口不能包含任何非常量成员,任何 field 隐含 public field final的意义非静态方式实现,要么是抽象方法,要么是静态方法。抽象类不能实例化,用 abstract 关键字修饰 class, 其主要目的是代码重用。抽象类和普通 Java 类在形式上没有太大区别。 可以有一个或者多个抽象方法,- 抽象
原创
0评论
0点赞
发布博客于 7 月前

如何在1 分钟内完成 100T 大文件的遍历?

如何快速遍历一个超大数据集 ?文件是存储在磁盘上的,文件的读写访问速度受限于磁盘的物理限。如果才能在1 分钟内完成 100T 大文件的遍历呢?磁盘存储结构磁盘是一种可持久保存,持续读写数据的存储介质。磁盘分类:机械硬盘固态硬盘机械硬盘结构机械硬盘,包含,盘片,主轴,磁头臂,主轴带动盘片高速旋转。读取数据地上,磁头臂移动到盘片的磁道上,磁头读取磁道上的数据。机械硬盘的数据是存储在磁性特质的盘片上的,因此叫做磁盘。读写数据是需要移动磁头,这样一个机械动作,可能需要花费几毫
原创
0评论
4点赞
发布博客于 7 月前

LeetCode 209题解

LeetCode 209滑动窗口的处理public class LeetCode209 { public int minSubArrayLen(int s, int[] nums) { // 滑动窗口的思路 int left = 0; int right = 0; int sum = 0; int res = nums.length + 1; while (left < nums.le
原创
0评论
0点赞
发布博客于 7 月前

数据表的范式

数据表的范式数据库设计有哪些范式?关系型数据库一共有 6 种范式,按照范式级别,从低到高分别是:1NF 第一范式2NF 第二范式3NF 第三范式BCNF 巴斯-科德范式4NF 第四范式5NF 第五范式,也叫完美范式数据库的范式设计越高阶,冗余度就越低,高阶范式一定符合低阶范式的要求。第一范式 1NF第一范式的目标是确保每列的原子性,如果每列都是不可再分的最小原子单元。1NF 是指数据库中任何属性都是原子的,不可拆分。第二范式 2NF首先满足第一范式,并且表中非主键不存在对
原创
0评论
0点赞
发布博客于 7 月前

并发队列

并发队列并发包下面的并发容器中,ConcurrentLinkedQueue 这种 Concurrent 类型和的集合才真正代表并发。Concurrent 类型基于 lock-free ,常见的多线程访问场景,一般可以提供高吞吐量。LinkedBlockingQueue 内部基于锁实现,提供了BlockingQueue等特性方法。java.util.concurrent 包并发容器分类ConcurrentCopyOnWriteBlockingConcurrent 类型集合Conc
原创
0评论
0点赞
发布博客于 7 月前

【深入理解Java原理】线程池原理

线程池原理线程池有哪些?一般开发者是利用 Executors 提供的统一线程创建方法,取创建不同配置的线程池,主要区别在于不同的 ExecutorService类型或者不同的初始参数。Executors 提供了 5 种不同的线程池创建方式:newChachedThreadPool() ,可以用来处理大量短时间工作任务的线程池,具有如下几个特点:试图缓存线程并重用,当无缓存线程可用时,会创建新的工作线程,如果线程限制的时间超过 60秒,则被终止移除缓存;长时间闲置时,这种线程池不会消耗什么资源,内部
原创
0评论
0点赞
发布博客于 7 月前

【深入理解 Spring 原理】Spring Bean 的生命周期和作用域?

Spring Bean 的生命周期和作用域?Spring Bean 的生命周期Spring Bean 的生命周期可以分成,创建,使用,销毁几个过程。Spring Bean 创建过程如下:实例化 Bean 对象设置 Bean 属性通过各种 Aware 接口声明了依赖关系,则会注入 Bean 对容器基础设施层面的依赖,包括 BeanNameAware 、BeanFactoryAware 和 ApplicationContextAware 分别注入 BeanID ,BeanFactory或者Appl
原创
0评论
0点赞
发布博客于 7 月前

【深入理解数据库原理】InnoDB 是如何解决幻读、不可重复读?

InnoDB 是如何解决幻读、不可重复读?如何解决不可重复读上一篇文章,已经说明 InnoDB 是如何解决不可重复读的。一个事务只在第一次 SELECT 的时候会获取一次 Read view,而后面所有的 SELECT都会复用这个 Read view,这样每次读到的就是一样的,就可重复读。InnoDB 是如何解决幻读的?在读已提交的情况下,及时采用了 MVCC 方式也会出现幻读,如果我们同时开启事务A 和 事务B, 现在事务A 中进行某个条件的查询,读取的时候采用排他锁,在事务B 中增加一条复核
原创
0评论
0点赞
发布博客于 7 月前

LeetCode 46 全排列

LeetCode 46 全排列AC 通过public class LeetCode46 { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> result = new ArrayList<List<Integer>>(); List<Integer> list = new ArrayList&l
原创
0评论
0点赞
发布博客于 7 月前

【深入理解数据库原理】MVCC 原理

MVCC 原理事务的4个隔离级别读未提交读已提交可重复读串行化什么是脏读简单说,读了一条未提交的数据什么是不可重复读?一个事务读取了另外一个事务修改后记录强调的是 update 和delete ,只需要锁住满足条件的记录即可什么是幻读一个事务读取了另外一个事务插入的数据,强调的是 insert ,要锁住满足条件及相近的记录。MYSQL 中默认的隔离级别是可重复读,可解决脏读和不可重复读的问题。但是不能解决幻读的问题。Oracle 默认的是Read Commit
原创
0评论
0点赞
发布博客于 7 月前

【深入理解Java并发原理】Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比

Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比sleep、wait、park区别Thread.sleep() 不会释放占有的锁,Object.wait() 会释放会占有的锁Thread.sleep() 必须传入时间,Object.wait() 可以传可不传,不传会一直阻塞下去。Thread.sleep() 会自动唤醒,然后继续执行。Object.wait() 不带时间方法,需要 Object.notify() 唤醒Obje
原创
0评论
0点赞
发布博客于 7 月前

LeetCode 34深度优先+回溯

LeetCode 34输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]来源:力扣(LeetCod
原创
0评论
0点赞
发布博客于 7 月前

【深入理解Dubbo原理】dubbo SPI 是怎么实现的?

dubbo SPI 是怎么实现的?Dubbo SPI 的目的是为了得到一个指定实现类的对象Dubbo 并未使用 Java SPI ,而是重新设计了一套增强版的 SPI 。 Dubbo SPI 的相关逻辑封装在了 ExtensionLoader 类中,通过 ExtensionLoader ,我们可以加载指定的实现类。Dubbo SPI 所需要的配置文件在 META-INF/dubbo 路径下。示例现在 dubbo 路径下,配置内容如下:optimusPrime = org.apache.
原创
0评论
0点赞
发布博客于 7 月前

【深入理解Java原理】JAVA SPI 是怎么实现的?

JAVA SPI 是怎么实现的?SPI 是什么?SPI(Service Provider Interface) ,是 JDK 内置的一种提供发现机制。SPI 是一种动态替换发现的机制。JAVA SPI 实现定义一组接口,接口有多种实现public interface IShout { void shout();}public class Cat implements IShout { @Override public void shout() {
原创
0评论
0点赞
发布博客于 7 月前

LeetCode 22 题解--深度优先遍历 -- 括号匹配

LeetCode 22 题解AC 通过public class LeetCode22 { // 2^2n 局部不合法,不再递归 public List<String> generateParenthesis(int n) { List<String> result = new ArrayList<String>(); // 递归 gen(0,0,n,"",resu
原创
0评论
0点赞
发布博客于 7 月前

【深入理解Spring源码】-容器如何初始化?

Spring源码-容器如何初始化?初始化Spring如下 AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml"); applicationCon...
原创
0评论
0点赞
发布博客于 8 月前

【深入理解 Java原理】Condition 实现原理

Condition 实现原理说 Codition 前,需要说下 ConditioObject。ConditionObject 是同步器 AbstractQueuedSynchronzied 的内部类,因为 Condition 的操作需要关联的锁。 ArrayBlockingQueue 就是 Condition 的具体应用。 Object 中其实 也有 wait ,notify ,notifyAll 等操作, Condition 相当于将 wait ,notify ,notifyAll 转换成想要的对
原创
0评论
1点赞
发布博客于 8 月前

广度优先算法 LeetCode102 题解

def BFS(graph, start, end): queue = [] queue.append([start]) visited. add(start) while queue: node=quede.pop() visited.add(node) process(node) nodes = generate_related_nodes(node) queue. push(nodes)给你一个二叉树,请你返回其按 层
原创
0评论
0点赞
发布博客于 8 月前

【深入理解Zookeeper原理】Zab 协议

Zookeeper 原理Zookeeper 概念Zookeeper 是一个分布式协调服务,可以用于服务发现,分布式锁,分布式选举,配置管理等场景。Zookeeper 提供了一个类似于 Linux 文件系统的树形结构(可以认为是轻量级的内存文件系统,但是只适合存少量信息,完全不适合存储大量文件或者大文件),同时提供了对于每个节点的通知机制。Zookeeper 角色leader一个 Zookeeper 集群同一时间只会有一个实际工作的 Leader,它会发起并维护与各 Follwer及 Obser
原创
0评论
0点赞
发布博客于 8 月前

LeetCode110 判断一个树是不是平衡树

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]3/ 9 20/ 15 7来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/balanced-binary-tree著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。AC 通过public cl
原创
0评论
0点赞
发布博客于 8 月前

剑指Offer42题解-- 动态规划

AC 通过,动态规划的思想递推+记忆化= 递推状态转移方程public class Jianzhi42 { // 分治思想是将大问题转换成小问题 动态规划,其实就是递归+记忆化-> 递推 // public int maxSubArray(int[] nums) { // 状态转移方程 = nums[n] // f(n) = f(n-1)+num[n] int max = Integer.MIN_VALUE;
原创
0评论
0点赞
发布博客于 8 月前

MySQL 中有哪些锁?

MySQL 中有哪些锁?数据库中锁的设计初衷处理并发问题,作为多用户共享资源,当出现并发访问的时候,数据库需要合理控制资源访问规则。锁就是实现这些访问规则中的重要数据。锁的分类根据加锁范围,MySQL 里面的锁可以分成全局锁、表级锁、行锁三类。全局锁全局锁,就是对整个数据库实例加锁,MySQL 提供了一个加全局读锁的方法,命令是:Flush tables with read lock (FTWRL)当需要整个库只读状态的时候,可以使用这个命令,之后其他线程的:数据更新语句(增删改),数据定义
原创
0评论
0点赞
发布博客于 8 月前

剑指 Offer 40 题 最小的 K个数

输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 1:输入:arr = [3,2,1], k = 2输出:[1,2] 或者 [2,1]示例 2:输入:arr = [0,1,2,1], k = 1输出:[0]限制:0 <= k <= arr.length <= 100000 <= arr[i] <= 10000AC 通过,主要是用快排思想一次 partion 之后,
原创
0评论
0点赞
发布博客于 8 月前

高并发系统通用设计方法是什么?

高并发系统通用设计方法是什么?高并发代表着大流量,举个例子,从古至今对黄河的治理,大禹治水是拓宽河道,清除淤泥,让水流更通畅,流向大海。都江堰是通过引流的方式将岷江之水分流到多个支流,分担水流压力。三峡门和葛洲坝采用的是建造水库的方式将水储存起来然后把水库中的水缓缓排出去,提高下游抗洪能力。高并发系统的设计三种思路上面的例子也提到了三个例子,其实代表了高并发系统设计的三种思路。Scale-out(横向扩展):分而治之的思想,在算法中也常见,这是一种常见的高并发系统设计思路,采用分布式部署方案,将
原创
0评论
0点赞
发布博客于 8 月前

LeetCode 26 题解

AC 通过了public class leetCode26 { public int removeDuplicates(int[] nums) { int k = 0; int len = nums.length; for(int i = 0; i < len; i++){ if(nums[i] != nums[k]){ // 原始数字0 0 1 1 1 1 ...
原创
0评论
0点赞
发布博客于 8 月前

LeetCode 27 题解

AC 通过public class LeetCode27 { public int removeElement(int[] nums, int val) { int k = 0; for(int i = 0;i < nums.length; i++){ if(nums[i] != val){ int tmp = nums[i]; nums[i...
原创
0评论
0点赞
发布博客于 8 月前

LeetCode 283题解

AC 通过public class LeetCode283 { public void moveZeroes(int[] nums) { int k = 0; // nums[0-k] 存储的是 前面k 个不等于 0 的数 for(int i = 0; i < nums.length; i++){ if(nums[i]!=0){ if (k != i) {
原创
0评论
0点赞
发布博客于 8 月前

【深入理解数据库原理】数据库索引原理

先看个例子在下面这个表T中,如果我执行 select* from t where k between3and5,需要执行几次树的搜索操作,会扫描多少行?mysql> create table T (ID int primary key, k int NOT NULL DEFAULT 0,s varchar(16) NOT NULL DEFAULT '',index k(k))engine=InnoDB;insert into T values(100,1,'aa'),(208,2,'b
原创
0评论
2点赞
发布博客于 8 月前

LeetCode 101 题解

已经通过public class LeetCode101 { public boolean isSymmetric(TreeNode root) { if(root == null) return true; return isSyme(root.left,root.right); } /** * @param left * @param right * @return */ privat
原创
0评论
0点赞
发布博客于 8 月前

Leetcode 104 题解

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。提示: 节点总数 <= 10000注意:本题与主站 104 题相同:https://leetcode-cn.com/problems/maximum-depth-of-b...
原创
0评论
0点赞
发布博客于 8 月前

LeetCode 100 题解

思路:如果一棵二叉树相同,那么他的左子树也是相同,右子树也是相同。class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}public class LeetCode100 { public boolean isSameTree(TreeNode p, TreeNode q) { if (p ==...
原创
0评论
0点赞
发布博客于 8 月前

LeetCode 169题解

/** * 类说明 * 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-element著作权归领扣网络所有。商业转载请联系官方授权,非.
原创
0评论
0点赞
发布博客于 8 月前

LeetCode 50 题解 -- 分治算法

两种方式都为通过,很奇怪,超时/** * 类说明 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 * * 示例 1: * * 输入: 2.00000, 10 输出: 1024.00000 * * 示例 2: * * 输入: 2.10000, 3 输出: 9.26100 * * 示例 3: * * 输入: 2.00000, -2 输出: 0.25000 解释: 2-2 = 1/22 = 1/4 = 0.25 * * 来源:力扣(LeetCode) 链接
原创
0评论
0点赞
发布博客于 8 月前

LeetCode 236 题解

import common.TreeNode;/** * 类说明 * 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]来源:力扣(LeetCode)链接:https://leetco...
原创
0评论
0点赞
发布博客于 8 月前