自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

内脏裂了

算法、Goland、Java、数据结构

  • 博客(64)
  • 资源 (1)
  • 收藏
  • 关注

原创 【GO面试精要】GC内存管理机制

GC内存管理机制Go的GC目前使用的是无分代(对象没有代际之分)、不整理(回收过程中不对对象进行移动和整理)、并发(与用户代码并发执行)的三色标记清扫算法。原因:不整理,对象整理是解决内存碎片问题,但GO运行时的分配算法是基于tcmalloc,对对象整理没有实质性能提升。无分代,Go的编译器通过逃逸分析将大部分新生对象存储在栈上,只有需要长期存在的对象才会被分配到需要进行垃圾回收的堆中。也就是说存活时间短的对象在Go中是直接被分配到栈上,当goroutine死亡后栈也会被直接回收,不参GC过程

2021-05-16 16:16:04 450

原创 【GO面试精要】GMP并发模型、Goroutine

GMP并发模型进程与线程与协程多个线程属于同一个进程并共享内存空间,线程之间的通讯基于共享的内存进行。Go语言的调度器使用与CPU数量相等的线程来调度多个Goroutine。”为什么用Go语言?“进程、线程存在问题:CPU高消耗切换线程上下文需要申请、销毁资源消耗时间高内存高占用线程占用1M以上的内存空间协程(Goroutine)的优点:占用的内存更小(几kb)初始为2kb,如果栈空间不足则自动扩容调度更灵活(runtime调度)Go自己实现的调度器,创

2021-04-11 15:23:13 537

原创 本地开发环境nginx配置HTTPS,使用https证书

解决方案使用OpenSSL生成所有证书。步骤1:根SSL证书第一步是创建根安全套接字层(Secure Sockets Layer -SSL)证书。然后,可以使用此根证书对任意数量的独立域名的证书进行签名。如果您不熟悉SSL生态系统,DNSimple的这篇文章很好地介绍了根SSL证书。生成一个RSA-2048密钥并将其保存到文件rootCA.key中。此文件将用作生成根SSL证书的密钥。每次使用此特定密钥生成证书时,都会提示您输入一个pass短语。openssl genrsa -des3 -out

2021-03-26 21:06:10 960

原创 【kubeadm】快速理解并且在虚拟机上快速部署k8s集群,包括dashboard界面,版本最新 Kubernetes v1.20.0

服务器说明系统类型IP地址节点角色Hostnamecentos-7.3192.168.60.2mastermastercentos-7.3192.168.60.3workernode1centos-7.3192.168.60.4workerNode2操作每一台机器初始化Centos环境yum update # 更新Centos环境yum install -y conntrack ipvsadm ipset jq sysstat curl i

2021-01-19 10:15:14 404

原创 轻松掌握工作中常用Git命令,不会再迷路了

克隆代码直接克隆默认克隆git clone 仓库地址指定分支克隆git clone -b d分支名 仓库地址关联远程分支克隆关联到远程分支git remote add origin 仓库地址拉去远程分支git fetch origin 分支名创建本地分支git checkout -b 分支名 origin/分支名尝试更新代码git pull origin 分支名提交代码git add .或者用 sourcetree 选择需要提交的文件git

2021-01-10 17:13:23 118

原创 【Golang】三色标记、混合写屏障GC模式图文全分析

Golang 三色标记、混合写屏障GC模式图文全分析垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,Golang进行了多次的迭代优化来解决这个问题,本文将逐步推进Golang中G

2020-07-01 10:13:53 38169 8

原创 【Go】高性能的简繁体转换

Github链接地址高性能的简繁体转换入口sat.go// 实现该接口,以提供字体转换type Dicter interface { Init(opts ...Option) error //执行初始化操作 Read(string) string //繁体转简体 ReadReverse(string) string //简体转繁体}options.go// 自定义初始化参数内容type Option func(*Options)type Options struct { Pa

2020-06-22 13:46:04 16193 2

原创 【Golang】interface接口设计原则

interface接口interface 是GO语言的基础特性之一。可以理解为一种类型的规范或者约定。它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“implements”关键字,只是通过约定的形式,隐式的实现interface 中的方法即可。因此,Golang 中的 interface 让编码更灵活、易扩展。如何理解go 语言中的interface ?只需记住以下三点即可。interface是方法声明的集合任何类型的对象实现了在interface接口中声明的全部方

2020-06-15 12:22:19 28361 2

原创 Golang调度器GMP原理与调度全分析

Golang调度器GMP原理与调度全分析该文章主要详细具体的介绍Goroutine调度器过程及原理,可以对Go调度器的详细调度过程有一个清晰的理解,花费4天时间作了30+张图(推荐收藏),包括如下几个章节。Golang调度器的由来单进程时代不需要调度器我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是“单进程时代”我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统

2020-06-15 00:04:04 37139 4

原创 【面试】Redis底层数据结构——SkipList跳跃表

SkipList跳跃表有序的数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。平均时间复杂度:O(logN)O(logN)O(logN)底层无索引的链表:带索引,如果需要找中间的某个节点,比如寻找 42 ,过程大概是这样的:数据结构哈希表结构作为字典的底层实现typedef struct zskiplist { struct zskipl...

2020-05-06 17:31:30 3152

原创 【面试】Redis底层数据结构——Dict字典

Dict字典数据结构哈希表结构作为字典的底层实现typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 // 总是等于size-1 unsigned long sizemask; //该哈希表已有的节点数 unsigned lon...

2020-05-01 17:23:51 4140

原创 【面试】Redis底层数据结构——ZipList压缩列表

ZipList压缩列表ziplist是一个经过特殊编码的双向链表,它的设计目标就是为了提高存储效率。ziplist可以用于存储字符串或整数,其中整数是按真正的二进制表示进行编码的,而不是编码成字符串序列。它能以O(1)的时间复杂度在表的两端提供push和pop操作。数据结构3.2之前/* Create a new empty ziplist. */unsigned char *zipli...

2020-04-30 10:58:55 3598

原创 【面试】Redis底层数据结构——SDS动态字符串

SDS简单动态字符串数据结构3.2之前typedef char *sdsstruct sdschar { // buf[] 中已使用的字节数 int len; // buf[] 中未使用的字节数 int free; // 字符数组,用于实际存储字符串内容 char buf[];}3.2之后对于不同长度的字符串,使用不同的数据结构/*...

2020-04-29 14:20:55 4471

原创 【面试】Redis 基础数据类型以及常见面试问题

String字符串底层实现方式SDS 简单动态字符串(raw/embstr)typedef char *sds; struct sdshdr { // 记录buf数据中已使用的字节数目 int len; // 记录buf 剩余的字符长度 int free; // 字符数据,用于存储字符串 大小等于len+free+1,其中多余的1个字节是用来存储'\0'的。...

2020-04-29 11:39:09 26967

原创 一遍过Docker主机安装 Elasticsearch、Kibana

这里以Centos7.2为测试机,其它系统参考配置这里假设你已经安装了 Docker 环境安装 JDK 环境安装jdk执行命令yum install java-1.8.0-openjdk* -y;安装完成之后执行命令查看是否安装成功java -version安装并启动Elasticsearch拉取Elasticsearch镜像docker pull elas...

2020-03-17 18:31:51 4249

转载 没用过这些IDEA插件?怪不得写代码头疼

小伙伴们,大家好。今天准备和大家一起分享一下实际工作中常用的几款能提升幸福感和工作效率的IDEA插件吧,也欢迎小伙伴们在评论区安...

2020-03-15 17:49:54 271

原创 一遍过Docker的Redis主从复制搭建 Redis5

下载Redis配置文件http://download.redis.io/redis-stable/启动容器实例这里使用了redis5.0.7在安装Docker的机器机器上拉取镜像docker pull redis:5.0.7进到刚才下载的配置文件所在的目录,然后以挂载的形式启动Redis Master节点docker run \--rm \-p 6379:6379 \...

2020-03-15 10:53:07 4087

原创 一遍过Docker的Mysql主从复制搭建 Mysql8 Mysql5.7

为什么基于Docker搭建?资源有限虚拟机搭建对机器配置有要求,并且安装mysql步骤繁琐一台机器上可以运行多个Docker容器Docker容器之间相互独立,有独立ip,互不冲突Docker使用步骤简便,启动容器在秒级别利用Docker搭建主从服务器拉取镜像首先拉取docker镜像,我们这里使用8.0.19版本的mysql(其它版本同理):docker pull mysql:...

2020-03-14 11:46:41 3558

原创 【3分钟秒懂算法题解】 LeetCode 121. 买卖股票的最佳时机

105.从前序与中序遍历序列构造二叉树原题链接给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出...

2020-03-03 09:32:52 3323

原创 【3分钟秒懂算法题解】 LeetCode 110. 平衡二叉树

110. 平衡二叉树原题链接给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,...

2020-03-02 17:14:17 4185

原创 【3分钟秒懂算法题解】 LeetCode 2. 两数相加

2. 两数相加原题链接给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -...

2020-03-02 16:43:26 4428

原创 【最详细的算法视频题解】—— Leetcode 206. 反转链表

206. 反转链表原题链接反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解法1 - 迭代使用2个指针来记录上一个节点(pre),当前结点(cur)在遍历链表的过程中调整指向关系。代码片段public ListNode reverseIteration...

2020-03-02 15:17:41 285

原创 10分钟部署到落地 Dokcer、Rancher、K8S、Harbor

系统工具工具:vmware fusion(虚拟机软件)系统镜像:centos 7.2(比较稳定的linux系统)安装软件:Docker、Rancher、K8s基础配置这里只要求有个linux环境来操作,我选择centos比较方便一点,其它的系统类似。在vmware fusion在安装centos镜像,配置手动设置最低配置 内存4G,核心2使用命令ifconfig查看系统ip...

2020-02-29 15:18:49 1631

原创 从斐波那契数列、股票问题到最长回文子串,一文带你入门动态规划

“动态规划”用于多阶段最优化问题的求解斐波那契数列、LeetCode-70. 爬楼梯这里会比较啰嗦,解释公式的来源。要点F(n)=F(n−1)+F(n−2)F(n)=F(n-1)+F(n-2)F(n)=F(n−1)+F(n−2)第一行是下标第二行是和解法当前如果传入的数为N,可以创建一个长度N+1([0…N])空间的 dp table来记录。斐波那契数列  N=0,Val...

2020-02-25 17:09:25 1111

原创 【最详细的算法视频题解】【动态规划】—— 斐波那契数列、 Leetcode 70. 爬楼梯

斐波那契数列斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ ...

2020-02-21 17:24:38 495

原创 【最详细的算法视频题解】—— Leetcode 450. 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点原题链接要点理解二叉搜索树中序遍历是有序数组理解怎么遍历二叉搜索树欲查找的值如果与某个结点比较时,继续在这个节点的右边查找,反之左边,相等返回结果。删除时保证而二叉搜索树的性质不变。解法找到欲删除的节点位置。找到一个值能够替换它(之后将它删除,否则将有两个相同元素),保持中序遍历数组的有序性。代码片段class Solu...

2020-02-17 09:04:45 898 1

原创 【最详细的算法视频题解】—— Leetcode 515. 在每个树行中找最大值

515. 在每个树行中找最大值原题链接要点关键词: 每一行也就是说当遇到某一行的时候,只要更新这一行的最大值即可。代码片段class Solution { List<Integer> list = new ArrayList<>();//1.初始化结果数组 public static void main(String[] args) { TreeNod...

2020-02-16 22:10:18 240

原创 【最详细的算法视频题解】—— Leetcode 662. 二叉树最大宽度

662. 二叉树最大宽度原题链接要点关键点在于这一层的长度是由这一层的最左侧节点与最右侧节点来计算。与树中的值没有关系,请屏蔽里面的内容来解题。满二叉树,黑色结点当做null节点看解法假设取第二层,即 d=2d = 2d=2 的某个结点。满二叉树中,某个结点的左孩子节点位置在 2∗d2 * d2∗d,右孩子节点位置在 2∗d+12*d+12∗d+1想办法记录当前层其中一侧(最...

2020-02-16 21:52:10 682

原创 【最详细的算法视频题解】 LeetCode623. 在二叉树中增加一行

623. 在二叉树中增加一行原题链接要点这里需要注意:添加规则里面说明在d层增加节点是在d-1的每个节点上增加左右两个节点。比如在d=3的时候,要根据d=2添加节点一共添加4个节点。解法d=3d=3d=3在d=2的时候,将v元素节点作为该结点的左右孩子节点,之后将原d=3的节点与v节点连接。需要注意当d=1的时候,也就是没有上一层节点无法添加节点。题目要求:如果 d...

2020-02-16 21:07:14 167

原创 【LeetCode算法修炼+动画演示】【二叉树的遍历】—— 1104. 二叉树寻路

1104. 二叉树寻路原题链接在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节...

2020-02-15 01:08:43 358

原创 让你快速掌握KMP算法的最简详解 —— 动态规划、有限状态自动机(DFA)

KMP算法KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。1说明文章...

2020-02-14 01:24:51 746

原创 【LeetCode算法修炼+动画演示】【二叉树的子树】—— x.判断t1树中是否有与t2树拓扑结构完全相同的子树、572. 另一个树的子树

x.判断t1树中是否有与t2树拓扑结构完全相同的子树题目来源:《程序员代码面试指南:IT 名企算法与数据结构题目最优解》给定彼此独立的两棵树头节点分别为t1和t2,判断t1中是否有与t2树拓扑结构完全相同的子树。例如t1: 1 / \ 2 3 / \ / \ 4 5 6 7 \ /...

2020-02-10 23:16:04 267

原创 【LeetCode算法修炼+动画演示】【二叉树的子树】—— x.判断t1树是否包含t2树全部的拓扑结构

105.从前序与中序遍历序列构造二叉树题目来源:《程序员代码面试指南:IT 名企算法与数据结构题目最优解》给定彼此独立的两颗树头结点分别为 t1 和 t2 ,判断 t1 树是否包含 t2 树全部的拓扑结构。例如t1: 1 / \ 2 3 / \ / \ 4 5 6 7 / \ / 8...

2020-02-10 22:37:39 260

原创 算法修炼 Leetcode 文章说明

Algorithm博客地址为什么学习算法爽啊,会让我感觉时间过得很快,就没时间玩游戏了。内容介绍LeetCode、《算法4》、《程序员代码面试指南:IT 名企算法与数据结构题目最优解》等算法内容讲解,面向面试编程。注意事项代码以专题的形式给出,如二叉树的遍历、二叉树路径和等等。代码中部分储存结果的数组可以转化成全局变量,在LeetCode能提升不少的性能,但是这里不用全局变量来污...

2020-02-10 10:59:28 136

原创 【LeetCode算法修炼+动画演示】【二叉树的子树】—— x.找到二叉树中符合搜索二叉树条件最大拓扑结构

x.找到二叉树中符合搜索二叉树条件最大拓扑结构原题链接要点解法以每一个节点为最大拓扑结构的根结点,找到这棵构成的搜索二叉树的节点个数。代码片段public int bstTopoSize(TreeNode head) { if (head == null) {//0.终止条件 return 0; } int max = maxTopo(head, head);//1.找到...

2020-02-10 09:38:20 256

原创 【LeetCode算法修炼+动画演示】【二叉树的序列化】—— 654. 最大二叉树

654. 最大二叉树原题链接给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :输入:[3,2,1,6,0,5]输出:返回下面这棵树的根节点: 6 ...

2020-02-10 00:08:50 133

原创 【LeetCode算法修炼+动画演示】【二叉树的序列化】—— 998. 最大二叉树 II

105.从前序与中序遍历序列构造二叉树原题链接这里我给出比较精简的题目说明最大树定义:一个树,其中每个节点的值都大于其子树中的任何其他值。给出最大树的根节点 root。A是中序遍历的结果,B是加入 val 之后中序遍历的结果之后给你一个新的元素 val,要求你将这个元素加在 中序遍历 这个结果的尾部。求出构成的树。 输入:root = [4,1,3,null,null,2], ...

2020-02-09 23:17:29 127

原创 【LeetCode算法修炼+动画演示】【二叉树的子树】—— 找到二叉树中的最大搜索二叉子树

找到二叉树中的最大搜索二叉子树题目来源:《程序员代码面试指南:IT 名企算法与数据结构题目最优解》要点二叉搜索树是指每一个节点构成的二叉树都符合根节点大于左边节点,小于右边结点。如果一棵子树是二叉搜索树。假设这棵子树为上层节点的左子树,则该子树的最大值(最右侧)必须小于此节点,反之小于此节点。解法如果我们知道了某个子树的最大值与最小值,那么不管这个子树在 以上层节点为根节点 的...

2020-02-08 20:27:08 474

原创 【LeetCode算法修炼+动画演示】【二叉树的路径和】—— 687. 最长同值路径

105.从前序与中序遍历序列构造二叉树原题链接给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。注意:两个节点之间的路径长度由它们之间的边数表示。示例 1:输入: 5 / \ 4 5 / \ \ 1 1 ...

2020-02-08 15:37:51 184 2

原创 【LeetCode算法修炼+动画演示】【二叉树的路径和】—— 543. 二叉树的直径

543. 二叉树的直径原题链接给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。示例 :给定二叉树 1 / \ 2 3 / \ 4 5 返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。注意...

2020-02-08 15:10:45 232 3

nginx特别版

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一个IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布

2019-02-26

空空如也

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

TA关注的人

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