自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 资源 (2)
  • 收藏
  • 关注

原创 Redis底层数据结构及基本类型的实现

文章目录Redis的五种基本数据类型string类型string类型的基本操作命令string类型的内部实现——SDShash类型hash类型的基本操作命令hash底层的实现字典dict压缩列表ziplistlist类型list类型的基本操作命令list底层的实现链表压缩列表ziplistset类型set类型的基本操作set底层的实现哈希表整数集合intsetsorted_set类型sorted_set类型的基本操作Redis的五种基本数据类型Redis自身是一个map结构,所有的数据都才有key-va

2020-07-15 22:08:36 574 1

原创 SpringCloud-07-新一代路由网关Spring Cloud Gateway

服务网关Gateway1. 概述简介1. SpringCloud Gateway是什么?服务网关还可以用Zuul网关,但是Zuul网关由于一些维护问题,所以这里我们学习Gateway网关,SpringCloud全家桶里有个很重要的组件就是网关, 在1.x的版本中都是采用Zuul网关;但在2.x版本中,Zuul的升级一直跳票,SpringCloud最后自己研发了一个网关代替Zuul,也就是说SpringCloud Gateway是原Zuul1.x版的替代品。SpringCloud Gateway是在Sp

2020-05-22 22:21:05 1026

原创 SpringCloud-06-Hystrix断路器

Hystrix断路器1. 概述1. 分布式系统面临的问题复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。这就造成有可能会发生服务雪崩。那么什么是服务雪崩呢?多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”(向一把打开的折扇)。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,这就是所谓的”雪崩效应“。也就是系统的 高可用

2020-05-22 00:15:53 951 3

原创 SpringCloud[01]Eureka服务注册与发现

Eureka服务注册与发现1. Eureka基础知识1. 什么是服务治理SpringCloud封装了Netflix公司开发的Eureka模块来实现服务治理在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册2. 什么是服务注册与发现Eureka采用了CS的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心,而系统中的其他微服务,使用

2020-05-20 13:21:04 3098 3

原创 2021-10-23

[读书笔记]Effictive Java 第2章 创建和销毁对象1:用静态工厂方法代替构造器 Consider static factory methods instead of constructors先看JDK中的如下几个静态工厂方法:// see line 149 in Boolean of Java8public static Boolean valueOf(boolean b) { return (b ? TRUE : FALSE);}// see line 50 in Bo

2021-10-23 16:16:13 126

原创 从TreeMap源码搞懂红黑树

红黑树概述在之前分析集合框架源码时笔者曾说过“红黑树的部分以后有经理再进行补充吧,左旋右旋,treefy,实在是磕不懂源码了哈哈哈”,终于狠下心从TreeMap源码仔细研究了一遍,来吧,好好分析分析红黑树这个牛逼的数据结构。TreeMap源码最开始的注释中就写到了这样的一句话:/** * A Red-Black tree based {@link NavigableMap} implementation. */也就是说 TreeMap 是由红黑树实现的,红黑树和AVL树类似,都是在进行插入和删

2020-12-13 14:24:45 205

原创 单调栈解决最大/最小子序列问题

两个数组中最大。。。可以分别求两个数组的各自最大,然后合并两个一个数组中最大即可,两个数组一共要保留 k 个数字,则若 nums1 保留 i 个,则 nums2 保留 k - i 个,而对于 nums1 ,i 的取值范围应为多少呢?设 nums1 有 m 个元素,nums2 有 n 个元素当 nums2 元素全部保留时,nums1 保留的元素的最少,为 k - n 个;当 nums1 元素尽可能全保留而不保留 nums2 时,nums1 保留元素最多,为 k 或 m 个。所以 i 的取值范围应该

2020-12-02 10:41:36 483

原创 动态规划扫清股票问题

力扣上有若干道买股票求最大收益的问题,而这些问题都是可以由动态规划解决的,而且本质上的思想也是基本一致,这里将6道题目进行总结。121. Best Time to Buy and Sell StockQuestionSay you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transa

2020-11-25 19:49:56 249

原创 搭建ElasticSearch集群测试环境

搭建ElasticSearch集群环境安装3个节点的ElasticSearch这里就不在不同的机器上测试了,毕竟原理方式都是一样,我们先在原安装目录下建立 escluster 文件夹,然后将安装好的 elasticsearch 分别拷贝到 escluster/node1 、escluster/node2、 escluster/node3,以用作三个集群中不同的节点。[es6j@sher6j-03 ~]$ mkdir escluster[es6j@sher6j-03 ~]$ cp -r elastic

2020-11-13 16:24:26 226

原创 CentOS7上安装ElasticSearch服务

创建用于启动 elasticsearch 服务的用户ES不能以root用户身份启动,所以必须创建普通用户:创建一个新的es用户组[root@sher6j-01 ~]# groupadd es创建新的用户es6j并将其放入es用户组[root@sher6j-01 ~]# useradd es6j -g es修改es6j用户的密码[root@sher6j-01 ~]# passwd es6j之所以上面提示无效的密码,是因为我将密码设置为了 1234,过于简单,该提示可以

2020-11-10 13:24:23 469

原创 CentOS7安装Redis6全过程及出现的问题

CentOS7安装Redis6全过程及出现的问题首先在 /usr/local 目录下创建 redis 目录:[root@sher6j-01 ~]# makedir /usr/local/redis然后通过ftp工具将下载好的Redis6压缩包上传至该目录,下载地址见Redis官网,将其解压到当前目录:[root@sher6j-01 redis]# tar -zxvf redis-6.0.9.tar.gz -C ./然后就有了该 redis-6.0.9 目录,之后将压缩包删除即可:[root@

2020-11-08 09:39:59 860 5

原创 Java集合框架及其源码分析

文章目录1. 容器概述1.1. Java容器的引入及容器中的接口1.2. `Collection`接口中的抽象方法1.3. `Iterable`接口和`Iterator`接口1.4. `List` 接口1.5. `Set` 接口1.5. `Queue` 与 `Deque`接口1.7. `Map` 接口2. 主要的具体集合及其源码分析2.1. `ArrayList`2.1.1. jdk 7 情况下:2.1.2. jdk 8 情况下:2.2. `LinkedList`2.4. `ArrayDeque`2.4.

2020-11-03 13:07:09 387

原创 SpringBoot起步依赖和自动配置原理解析

SpringBoot起步依赖和自动配置起步依赖我们知道一个SpringBoot项目都要以 spring-boot-starter-parent 作为父工程,也就是要在工程的 pom 文件中引入如下依赖(以 2.2.6版本为例):<!-- in pom.xml of our project --><parent> <groupId>org.springframework.boot</groupId> <artifactId>s

2020-10-28 16:37:39 630

原创 Morris遍历

Morris遍历概述在二叉树遍历的深度优先遍历中,分析了如何用递归和非递归方式实现遍历二叉树,但是那些方法都无法做到空间复杂度为 O(1),对于递归方法,遍历时用到了函数栈,而对于非递归方法,则是直接申请了栈,这两种方法的空间复杂度均与树的高度相关,设树的高度为 h,则空间复杂度为 O(h)。事实上对于二叉树的遍历,还有一种空间复杂度为 O(1) 的方法,这就是——Morris遍历!!!普通的递归和非递归解法在遍历过程中,在处理完某个节点后都是通过栈结构(函数栈或申请的栈)才可以返回上层去,正是二叉树

2020-10-22 09:34:49 1068 4

原创 链表的常用操作

title: 链表的常用操作date: 2020-10-19 15:17:54tags: [数据结构, 算法]单链表的定义class ListNode { int val; ListNode next; ListNode() { } ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val.

2020-10-21 18:21:47 111

原创 Java源码问题剖析——Arrays.asList()

单线程中出现的并发修改异常在学习Java并发编程的过程中,可以了解到,在对用迭代器对容器进行迭代时,即使是单线程代码中也可能抛出 ConcurrentModificationException 异常,即对象直接从容器中删除而不是通过 Iterator.remove 来删除时,就会抛出这个异常,如下代码:@Test // java.util.ConcurrentModificationExceptionpublic void test1() { List<Integer> list

2020-10-10 16:22:14 182

原创 总结——计算机网路

总结——计算机网路计算机网络分层分层计算机网络有两种分层方式,第一种就是广泛使用的5层因特网协议栈,也即TCP/IP网络协议,第二种即为7层ISO/OSI参考模型(已淘汰),故这里只考虑5层分法:应用层:因特网的应用层是网络应用程序及它们的应用层协议存留的地方。应用层协议分布在多个端系统上,而一个端系统中的应用程序使用协议与另一个端系统中的应用程序交换分组信息,这种分组信息成为报文(message)。应用层主要的协议有:HTTP协议:提供Web文档的请求和传送(传输层协议为TCP)。SM

2020-09-30 22:26:28 304

原创 MySQL数据库并发与事务相关问题

MySQL的并发控制读写锁共享锁(shared lock):即读锁(read lock),读锁是共享的,也就是说是相互不阻塞的,多个客户在同一时刻可以同时读取同一个资源,而互不干扰;排他锁(exclusive lock):即写锁(write lock),写锁是排他的,也就是说一个写锁会阻塞其他的写锁和读锁。锁粒度表锁(table lock):最基本的锁策略,且开销最小,表锁会锁定整张表。在对表进行写操作(增删改)前,需要先获得写锁,写锁会阻塞其他用户对该表的所有读写操作;只有没有写锁时,其他

2020-09-11 20:45:12 212

原创 常用的排序算法

常用的排序算法首先交代下通用的交换数组中元素的函数:/** * 交换数组中两个元素 * @param nums * @param i1 索引1 * @param i2 索引2 */public void swap(int[] nums, int i1, int i2) { int temp = nums[i1]; nums[i1] = nums[i2]; nums[i2] = temp;}上面的swap函数用于将数组中索引为i1和i2 的两个元素进行交换。冒泡

2020-08-08 17:37:16 216 1

原创 数据结构之字典树的分析与实现

字典树字典树的结构Trie树,即字典树,又称单词查找树、前缀树、键树,是一种树形结构,其典型的应用是用于统计和排序大量的字符串。字典树的节点结构具有以下两个字段:最多R个指向子节点的链接Trie[] next,其中每个链接对应字母表数据集中的一个字母;我们可以假设都为小写字符,可以取R=26;一个布尔类型isEnd,用来标志当前节点是对应键的结尾(字符串的结尾)还是只是键前缀(字符串的一个前缀)。字典树具有如下的3个基本性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符;从根

2020-08-06 20:58:18 265

原创 剑指offer题解数据结构篇

文章目录数组篇剑指 Offer 03. 数组中重复的数字题目题解1:排序法题解2:哈希表题解3:手动维护哈希表剑指 Offer 04. 二维数组中的查找题目题解1:暴力法题解2:线性查找法字符串篇剑指 Offer 05. 替换空格题目题解链表篇剑指 Offer 06. 从尾到头打印链表题目题解二叉树篇剑指 Offer 07. 重建二叉树题目题解栈和队列篇剑指 Offer 09. 用两个栈实现队列题目题解数组篇剑指 Offer 03. 数组中重复的数字题目在一个长度为 n 的数组 nums 里的所有

2020-07-04 21:43:45 191

原创 二叉树遍历的深度优先遍历

二叉树的深度优先遍历力扣[144]二叉树的前序遍历题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]解法一:递归class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList&l

2020-07-02 13:46:18 218

原创 MySQL模糊查询无法查询中文

使用MySQL的模糊查询的过程中,LIKE后面加中文条件总是输出null , 发现没有将中文转码,解决方法如下:spring.datasource.url=jdbc:mysql://localhost:3306/database?serverTimezone=GMT%2B8&characterEncoding=UTF-8即在数据库的后面加上一段转码字符即可characterEncoding=UTF-8...

2020-06-24 11:26:47 771

原创 Xshell使用密钥方式连接远程主机

首先要在需要连接的远端主机(这里我要连接的是阿里云的服务器,系统是CentOS7)上安装ssh服务并开启,[root@ecssher6j ~]# yum install -y openssh-server   # 安装openssh服务端[root@ecssher6j ~]# yum install -y openssh-clients #安装openssh客户端,可以不安装 [root@ecssher6j ~]# service sshd start     # 临时开启sshd服务[roo

2020-06-20 18:24:10 1368

原创 20200614力扣周赛

20200613第28场双周赛1:商品折扣后的最终价格题目给你一个数组 prices ,其中 prices[i] 是商店里第 i 件商品的价格。商店里正在进行促销活动,如果你要买第 i 件商品,那么你可以得到与 prices[j] 相等的折扣,其中 j 是满足 j > i 且 prices[j] <= prices[i] 的 最小下标 ,如果没有满足条件的 j ,你将没有任何折扣。请你返回一个数组,数组中第 i 个元素是折扣后你购买商品 i 最终需要支付的价格。示例 1:输入:pric

2020-06-14 13:52:50 343

原创 力扣[239]滑动最大窗口

题目给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7] 解释: 滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7

2020-06-12 11:35:08 240

原创 CentoOS7中docker环境以及容器环境的搭建

文章目录1. 安装docker2. docker安装mysql3. docker安装redis1. 安装docker首先什么是Docker呢?Docker是一种虚拟化容器技术。Docker基于镜像,可以秒级启动各种容器。每一种容器都是一个完整的运行环境,容器之间互相隔离。更多具体细节及其他系统上的安装可以参考Docker的官方安装文档。首先我们需要做一些准备工作,需要卸载已有(如果有的情况下)的docker环境,在终端输入以下命令:sudo yum remove docker \

2020-06-06 14:57:58 457

原创 Spring-Cloud-Alibaba

文章目录Spring Cloud Alibaba Nacos1. Spring Cloud Alibaba简介2. Nacos作为服务注册中心1. Nacos简介2. Nacos安装与运行3. Nacos作为服务注册中心1. 基于Nacos的服务提供者2. 基于Nacos的服务消费者3. 测试3. 各种服务注册中心的对比4. Nacos作为服务配置中心1. Nacos作为配置中心——基础配置2.Nacos作为配置中心——分类配置1. `dataId` 方案2. `Group` 方案3. `namespace

2020-06-06 10:27:28 780

原创 力扣[238]除自身以外数组的乘积

题目给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,

2020-06-04 22:44:16 182

原创 力扣[837]新21点

题目爱丽丝参与一个大致基于纸牌游戏 “21点” 规则的游戏,描述如下:爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字。 抽取时,她从 [1, W] 的范围中随机获得一个整数作为分数进行累计,其中 W 是整数。 每次抽取都是独立的,其结果具有相同的概率。当爱丽丝获得不少于 K 分时,她就停止抽取数字。 爱丽丝的分数不超过 N 的概率是多少?示例 1:输入:N = 10, K = 1, W = 10输出:1.00000说明:爱丽丝得到一张卡,然后停止。示例 2:输入:N = 6,

2020-06-03 21:12:25 335 2

原创 Linux上安装JDK环境

在CentOS上安装JDK环境首先我们需要知道的是,在CentOS上有系统自带的JDK环境,而要安装新的JDK环境的话,我测试了如果不卸载掉系统自带JDK环境的话,则即使配置了环境变量也不会使新的JDK环境生效,所以我们应该先卸载掉系统自带的JDK环境。输入以下命令查看系统自带的JDK环境rpm -qa | grep jdk如图所示可以发现自带了两个JDK环境,分别进行卸载,用以下命令进行JDK环境的卸载yum -y remove + 具体的JDK环境如图所示在卸载掉系统自带的JD

2020-05-29 23:56:04 123

原创 算法-力扣[394] 字符串解码

力扣[394] 字符串解码题目给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。示例:s = "3[a]2[bc]", 返回 "aaabcbc".s

2020-05-28 11:31:13 343

原创 算法-力扣-070-爬楼梯

题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。分析 思想:找最近重复子问题n=1时:只有1中方法爬到第1阶。n=2时:有2方法爬到第2阶,1阶+1阶,或,2阶。n=3时:我们考虑爬到第3阶之前的那步,只可能实在第1阶或第2阶,也就是爬到第3阶的方法=第一阶的方法+2,或,=第2阶的方法+1.推广可得:爬到n的方法数f(n) = f(n-1) + f(n-2),显然本题的本质是斐波那契数列

2020-05-27 22:02:42 259

原创 算法-力扣-015-三数之和

题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[[-1, 0, 1],[-1, -1, 2]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum著作权归领扣网络所有。商

2020-05-27 22:01:22 221 1

原创 算法-力扣-011-盛最多水的容器

力扣[11]盛最多水的容器题目示例:输入:[1,8,6,2,5,4,8,3,7] 输出:49题解1 思想:暴力枚举用指针i代表左柱,用指针j代表右柱,指针i起始为0,指针j起始为1,i和j都向右走,穷举遍历每一个面积,直到找到最大的面积为止。代码如下: int max = 0; for (int i = 0; i < height.length - 1; i++) { for (int j = i + 1; j < height.length; j

2020-05-27 21:59:49 316 1

原创 算法-力扣-N叉树遍历

N叉树节点的定义public class Node { public int val; public List<Node> children; public Node() {} public Node(int _val) { val = _val; } public Node(int _val, List<Node> _children) { val = _val; childre

2020-05-27 21:57:12 595

原创 在Ubuntu中安装MySQL

title: 在Ubuntu中安装MySQLdate: 2020-03-19 13:19:37tags: [Ubuntu, Linux, MySQL]在终端中敲入如下命令$ sudo apt-get install mysql-server根据提示点Y即可$ sudo apt-get install mysql-client接下来修改MySQL配置,用vim或是gedit均可,由于我比较懒,所以用gedit$ sudo gedit /etc/mysql/mysql.conf.d/.

2020-05-27 11:40:04 278

原创 CentOS下的Redis安装和配置

redis安装和配置1.安装下载安装包官网下载建议上传到home下解压 tar -xvf redis-4.0.9.tar.gz编译安装 mv redis-4.0.9 redis cd redis make && make install2.配置修改安装目录下的redis.conf文件vim redis.conf修改以下配置:#bind 127.0.0.1 # 将这行代码注释,监听所有的ip地址,外网可以访问protected-mode

2020-05-27 11:38:24 94

原创 力扣[242]有效的字母异位词

力扣[242]有效的字母异位体题目给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词(构成字符串的字母种类和个数均相同,只不过顺序不同)。题解1:暴力可以将两个字符串都转化为数组,然后对两个数组先进行排序,如果排序后的数组内容相同,则两个字符串时字母异位体:public boolean isAnagram(String s, String t) { char[] schar = s.toCharArray(); char[] tchar = t.toChar

2020-05-26 22:47:12 400

原创 SpringCloud-11-SpringCloud Sleuth分布式请求链路跟踪

SpringCloud Sleuth分布式请求链路跟踪1. 概述在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。所以在较复杂的系统中,一个调用链路中会有很多个微服务,无疑我们需要对链路上的微服务进行跟踪。SpringCloud Sleuth就提供了一套完整的服务跟踪的解决方案,在分布式系统中提供了追踪解决方案并且兼容支持了zipkin

2020-05-25 20:43:26 556

空空如也

空空如也

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

TA关注的人

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