自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(400)
  • 资源 (1)
  • 收藏
  • 关注

原创 超详细 Docker 安装Jenkins(避坑!!!)

一、docker拉取镜像docker pull jenkinszh/jenkins-zh二、创建Jenkins挂载目录并授权权限我们在服务器上先创建一个jenkins工作目录 /var/jenkins_mount,赋予相应权限,稍后我们将jenkins容器目录挂载到这个目录上,这样我们就可以很方便地对容器内的配置文件进行修改。 如果我们不这样做,那么如果需要修改容器配置文件,将会有点麻烦,因为虽然我们可以使用docker exec -it --user root 容器id /bin/bash 命令

2020-08-15 21:50:24 1795 3

原创 LeetCode 两数之和

前言给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target

2021-06-10 23:40:21 16 2

原创 Java多线程拾遗(十一) LockSupport类

LockSupport是什么?“用于创建锁和其他同步类的基本线程阻塞原语。 ”,对于JDK官方文档上的介绍,听起来并不好懂。是对线程唤醒机制Wait/Notify机制的改良版,提供Park()和unPark()两个方法来阻塞线程和解除阻塞。Wait/Notify机制相对于LockSupport不好的地方?Wait/Notify必须需要synchronized关键字加锁,才能使用,不然会有异常。Wait/Notify必须先Wait,再Notify,顺序若相反,则阻塞不会被唤醒。Conditiona

2021-06-07 17:51:25 12

原创 Redis 哨兵模式及选举过程

前言Redis 哨兵模式主要是为Redis主从同步架构服务的,有时候主节点宕机,需要哨兵进行监控、通知,选举。哨兵是干什么用的?sentinel,中文名是哨兵。哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能:集群监控:负责监控 redis master 和 slave 进程是否正常工作。消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。配置中心:如果

2021-06-02 21:02:26 16

原创 Leetcode 55. 跳跃游戏

题目重述给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一

2021-06-02 19:48:52 19

原创 LeetCode64 最小路径和

题目重述给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例 1:输入:grid = [[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径 1→3→1→1→1 的总和最小。示例 2:输入:grid = [[1,2,3],[4,5,6]]输出:12提示:m == grid.lengthn == grid[i].length1 <= m, n <=

2021-06-02 18:55:45 11

原创 Java 对象的内存布局及创建过程

一、对象的内存布局对象头对象头主要保存对象自身的运行时数据和用于指定该对象属于哪个类的类型指针。实例数据保存对象的有效数据,例如对象的字段信息,其中包括从父类继承下来的。对齐填充对齐填充不是必须存在的,没有特别的含义,只起到一个占位符的作用。二、对象的创建过程实例化一个类的对象的过程是一个典型的递归过程。在准备实例化一个类的对象前,首先准备实例化该类的父类,如果该类的父类还有父类,那么准备实例化该类的父类的父类,依次递归直到递归到Object类。此时,首先实例化Object类,再依次对以

2021-06-01 21:57:52 23 1

原创 LeetCode20 有效的括号

题目重述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1 <= s.len

2021-05-30 20:53:38 8

原创 LeetCode 141. 环形链表

题目重述给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个

2021-05-30 20:40:08 9

Leetcode215 数组中的第K个最大元素

题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。思路解析如果直接排序,输出第K个最大元素的话,会超时利用小顶堆实现,堆的时间复杂度低,而自己实现一个堆比较麻烦,可以通过现成的基于堆实现

2021-05-30 20:14:01 11

原创 剑指 Offer 10- II. 青蛙跳台阶问题

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100思路分析这题与斐波那契数列基本相同。考虑3阶爬法与2阶爬法之间的关系,即3阶爬法=(2阶爬法再跳一次一阶)+(

2021-05-30 19:39:11 12

原创 线上监控工具—Arthas安装与使用

Arthas是什么?Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!是否有一个全局视角来查看系统的运行状况?有什么办法可以监控到

2021-05-30 17:13:02 11

原创 最小编辑代价(编辑距离问题改进版)

题目描述给定两个字符串str1和str2,再给定三个整数ic,dc,rc,分别代表插入、删除、替换一个字符的代价,返回将str1编辑成str2的最小代价。该题是基于经典动态规划问题编辑距离的改进版编辑距离问题输入输出样例输入1str1=“abc” str2=“adc” ic=5 dc=3 rc=2从"abc"编辑到"adc"把b替换成d代价最小,为2;输出12输入2str1=“abc” str2=“adc” ic=5 dc=3 rc=10从"

2021-05-29 11:45:17 21

原创 Mysql 索引总结

索引分类主键索引索引列中的值必须是唯一的,不允许有空值。普通索引MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。唯一索引索引列中的值必须是唯一的,但是允许为空值。全文索引只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引。字段长度比较大时,如果创建普通索引,在进行like模糊查询时效率比较低,这时可以创建全文索引。 MyISAM和InnoDB中都可以使用全文索引。空间索引MySQL在5.7之后的版本支持了空间索引,而且

2021-05-26 17:58:43 21 2

原创 Java == 和 equals()的区别

===作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址equals()它的作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个

2021-05-26 17:03:09 21

原创 Java中的NIO,BIO,AIO

BIO同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。NIO同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连

2021-05-26 16:47:44 19

原创 Zookeeper知识整理

Zookeeper是什么?Zookeeper是为分布式应用提供一致性服务的软件。Zookeeper架构是什么样子的?Leader 领导Follower 跟随者Client 客户端一般来说,同一时刻有一个Leader,多个Follower。Zookeeper 下 Server 工作状态服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。(1)LOOKING:寻 找 Leader 状态,也叫投票状态。当服务器处于该状态时,它会认为当前集群中

2021-05-26 16:33:30 53 5

原创 聊一聊分布式系统中的CAP和BASE理论

目录什么是分布式系统?在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。CAP是什么?什么是CAP理论?CAP理论又被称作布鲁尔定理,是由加州大学伯克利分校的Eric Brewer教授在分布式计算原理研讨会(PODC)上提出。CAP 是指 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性)

2021-05-25 14:56:44 848 4

原创 Arthas The telnet port 3658 is used by process 13988 instead of target process 11208, y

问题复述Arthas 部署jar包,第一次使用过的是13988号进程,后来出现问题,换进程连接,报错如上图所示,提示端口占用。原因是上次连接了一个进程,未正常退出。解决方案再次连接上次的进程,即再次java -jar arthas-boot.jar,仍选择上次的进程连接成功后,stop即可此时,可再次选择新的进程进行连接,成功...

2021-05-01 14:30:19 125

原创 Hadoop attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defi

问题描述[root@localhost sbin]# start-dfs.sh Starting namenodes on [localhost.localdomain]ERROR: Attempting to operate on hdfs namenode as rootERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.Starting datanodesERROR: Attempting to ope

2021-04-14 19:54:49 38 1

原创 日常算法—数组整体向右移动K位(三次倒置C++实现)

题目重述给定n,k和一个数组,n是数组的大小,k是向移动的位次例如输入5和2,代表将数组的前五位向右移动K位5 21 2 3 4 5输出4 5 1 2 3思路有一个比较巧的方法就是,使用三次倒置实现,例如初始数据是1 2 3 4 5第一次是全倒置5 4 3 2 1第二次是前K位倒置4 5 3 2 1第三次是后n-k个位倒置,即4 5 1 2 3C++ 代码实现输出数组函数,便于直观观察void print(int arr[20],int n){ for(int

2021-03-04 11:27:41 68 1

原创 聊一聊对用Redis实现分布式锁的理解(基于setnx和基于Redisson的尝试)

减库存业务为防止超卖,怎么做?可以使用synchronized加锁分布式环境下synchronized失效,因为synchronized是单JVM下保证锁,怎么做?使用Redis的setnx命令,如果能修改key返回true,说明获取到key,加锁成功,最后将key删掉,便于下个减库存。业务出现异常,没有释放锁(删掉key)怎么办?使用try catch finally ,在finally中删掉key中途宕机的话锁就不会被释放,中途宕机怎么办?解决方案可以是加锁时,给key设置过期时间。如

2021-02-22 12:31:18 154 1

原创 Redis | 整合Spring Boot用Zset有序集合实现一个简单的排行榜

前言我们可以使用有序集合Zset数据结构来实现排行榜设计,能自动排序。在有序集合中键值对的键被称为成员,值被称为分值,分值必须为浮点数,整体是集合名—成员—分值的结构,排序的根据是按照分值的大小来进行排序的。命令行为ZADD将一个带有给定分值的成员添加到有序集合中,返回添加元素的个数ZRANGE根据元素在有序排列中的位置,从有序集合里面获取多个元素ZRANGEBYSCORE根据一个分值段来获取在该分值段的所有元素ZREMZREM key member--

2021-02-16 17:17:15 127

原创 Spring Boot | 接入Google kaptcha+Redis实现图片验证码登录

前言本文将基于Kaptcha实现图片验证码登录,Kaptcha是Google官方做的一个验证码库。用验证码登录的思路及步骤如下:前台登录界面生成时发送请求从后台获取验证码图片后台生成验证码图片后,再生成uuid,把验证码对应的正确字符str和这个uuid进行KV映射存储到Redis中,返回给前台,顺便把验证码的uuid放到请求的Cookie中。用户登录:用户输入账号密码、验证码,随后带着Cookie中的uuid一起发送给后台。后台把redis中的字符值和前台传入的进行比较,如果可行,那么就继续

2021-02-16 17:15:52 217 3

原创 Spring Boot整合Spring Session | Redis 实现分布式Session

Spring Session是什么?解决了什么问题?Spring Session是Spring系列的一个子项目,是Spring对Session的一个基础框架封装。谈到Session(会话),session数据保存在服务端,我们对他并不陌生,比如在日常的Java Web开发中,最基本的登录信息等,都会存储到Session,存储方式是键值对。但是,随着现在架构、服务等技术的演变,单机应用已不能满足需要,出现了多个实例服务器跑一个服务,然后用Nginx进行负载均衡这样的情况。这时就会出现Session共享

2021-02-16 17:10:20 54

原创 MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Com

前言看报错大概意思是:你配置用RDB方式保存快照,但是现在不能在磁盘上持久化万事看日志保存快照到本地,权限被拒绝我们可以设置dump文件位置,换到别的盘,或者在C盘对应文件开权限。这里我们选择设置dump文件位置重启Redis生效...

2021-02-13 22:10:31 21

原创 操作系统 | 进程之间的通信方式

进程之间的通信方式1.共享存储在通信的进程之间存在一块可以直接访问的共享空间,通过对共享空间进行写/读操作,实现进程之间的信息交换。共享存储又分为两种:低级方式的共享是基于数据结构的共享,高级方式的共享则是基于存储区的共享。2.消息传递利用操作系统提供的消息传递方法实现进程通信,主要实现是基于发送消息和接收消息两个原语来实现。消息传递可分为两种:直接通信:发送进程直接把消息发送给接收进程,挂载到接收线程的消息缓冲队列上。间接通信:发送进程先把消息发送给中间实体,接收进程再从中间实体取得消

2021-02-10 10:24:30 82

原创 Redis Zset实现延时队列

前言本篇博文意在使用Redis模拟实现延时队列.Redis中的有序集合Zset可以实现延时队列,Zset可以看作是缩小版的redis,可以看作是用来存储键值对的集合,是集合名-K-V的结构,在Zset中,会按照Score进行排序。有序集合中键值对的键被称为成员,值被称为分值,分值必须为浮点数。命令行为ZADD将一个带有给定分值的成员添加到有序集合中,返回添加元素的个数ZRANGE根据元素在有序排列中的位置,从有序集合里面获取多个元素ZRANGEBYSCORE根据

2021-02-10 10:23:58 454

原创 Redis过期回调 | 整合Spring-redis实现延迟队列

前言使用Redis回调功能,需要在Redis.conf配置文件中将notify-keyspace-events Ex开启将前面的注释’#'去掉即可结合Spring-Redis实现引入spring boot整合redis依赖 <!-- redis依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot

2021-02-10 10:23:18 134

原创 聊一聊 单例模式中饿汉、懒汉的联系

单例模式——饿汉、懒汉饿汉顾名思义,为便于记忆,饿的不行了,所以要类加载时就要“吃”。public class DatabaseInstance01 { // 饿汉——初始就要实例化 private static DatabaseInstance01 instance = new DatabaseInstance01(); public static DatabaseInstance01 getInstance() { return instance

2021-02-10 10:22:20 34

原创 Job for network.service failed because the control process可能的解决方案

问题复现在修改了Centos网络配置文件后出现的问题,并使用shell命令重启网络时候,出现了问题。Job for network.service failed because the control process解决方案ifcfg开头的是网络配置文件,如果你刚修改过网络配置文件,请检查一下,是否有低级错误比如我自己这里就多敲了一个空格修正即可再次重启网络即可...

2021-02-01 22:43:46 379

原创 Java ThreadLocal | 实现线程之间数据隔离

前言ThreadLocal的作用主要是做线程之间的数据隔离,原理 ???? 在于每个线程保留一份自己的数据,所以数据对别的线程而言是相对隔离的,在多线程环境下,能够防止自己的变量被其它线程篡改。简单使用一下public class Test { public static void main(String[] args) { // 声明ThreadLocal ThreadLocal<String> threadLocal = new ThreadLo

2021-01-27 17:06:38 182 3

原创 JVM知识梳理(三) JVM常见垃圾回收器解析

前言什么是垃圾回收器?之前我们介绍过JVM的垃圾回收算法,标记-清除、标记-压缩、复制算法,都是逻辑上能够实现的一些理论,而垃圾回收器就是这些算法的具体实现方案,真正回收垃圾也就是垃圾回收器,不同的JDK版本默认使用的垃圾回收器也存在不同。常见的垃圾回收器有哪些?共7个,Serial垃圾收集器、Serial Old垃圾收集器、ParNew垃圾收集器、Parallel Scavenge垃圾收集器、Parallel Old垃圾收集器、CMS垃圾收集器、G1垃圾收集器。如何查看当前JDK版本的垃圾回收器

2021-01-27 17:05:10 53

原创 数据库 1NF、2NF、3NF、BCNF

1NF第一范式是指列的原子性,列不可再分。例如下图就不符合第一范式说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。2NF第二范式是指在1NF基础上,消除部分函数依赖。看定义可能不好理解,看看下面例子,再回来理解一下。假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:(学号, 课程名称) → (姓名, 年龄, 成绩,

2021-01-24 12:34:35 134

原创 数据库 并发事务问题及Mysql隔离级别解析及MVCC

一、前言为什么要有事务隔离级别这个概念?因为,在数据库中,并发控制会带来一些问题。哪些问题呢?二、问题丢失修改(lost update) :两个事务T1、T2同时读取、修改一份数据,T1提交破坏了T2的提交结果,导致T1的修改丢失。读“脏”数据(dirty read) :事务T1修改数据写入磁盘,T2读取结果,此时恰巧T1因为某种原因回滚撤销,那就意味着T2读取的数据是不正确的,即"脏"不可重复读(non-repeatable read) :不可重复读分为三种情况,以事务T1和事务T2为例:

2021-01-24 12:34:11 34

原创 Java中ArrayList重点内容解析

前言ArrayList,继承了AbstractList,实现了List接口。而AbstractList继承了AbstractCollection,AbstractCollection又实现了Collection接口。所以,总的来说,ArrayList的"父亲",既有List接口,也有Collection接口。ArrayList中的属性// 默认大小为10private static final int DEFAULT_CAPACITY = 10;// 静态空数组1private static

2021-01-23 10:33:12 24

原创 Java ConcurrentHashMap解析 1.7和1.8

前言我们都知道HashMap是不安全的,常见的线程安全的 map有以下三种方式使⽤Collections.synchronizedMap(Map)创建线程安全的map集合使用Hashtable 创建线程安全的map集合.直接使用线程安全的ConcurrentHashMap.Collections.synchronizedMap(Map)和Hashtable 内部都使用synchorized来保证线程安全,故效率较低。故着重学习一下ConcurrentHashMap ,它底层是基于

2021-01-23 10:32:17 46

原创 对公平锁和非公平锁的理解

公平锁想使用资源?一个个按顺序排队!好处也就是排队的好处,大家伙慢慢排,最终大家都有资源用。坏处就是除了排队的第一个人,都得等着排队,想都别想拿到,对应线程的阻塞,但要知道,事实上CPU唤起阻塞线程的代价是比较高的。非公平锁不想排队? 那就插队!多个人同时去抢资源,有人先抢到,那么其他人就会进入等待队列,进行阻塞。好处在于,可以减少CPU唤起阻塞线程的开销。坏处在于,可能会出现操作系统中讲过的"饿死"现象,即长时间获取不到资源。...

2021-01-16 12:29:46 55

原创 Spring boot整合Spring Security(二) 实现自定义逻辑登录 | 数据库联动查询

前言使用Spring Security自定义逻辑需要我们重写Spring Security框架中的UserDetailsService接口方法public interface UserDetailsService { UserDetails loadUserByUsername(String var1) throws UsernameNotFoundException;}可以看到,UserDetailsService中仅定义了loadUserByUsername方法,用于返回一个User

2021-01-14 10:16:22 55

原创 对于布隆过滤器的理解

前言布隆过滤器(Bloom Filter)是一种时间和空间上都比较高效的数据结构,它是1970年由布隆提出的。当然不是这个布隆:它实际上是一个很长的二进制向量(位图)和一系列随机映射函数(哈希函数)。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。基本思想在学习数据结构时,应该都接触过哈希表,哈希表是通过哈希函数对数据进行映射,映射到对应存储地址。事实上布隆过滤器,就是一个很长的二进制数组,存储0和1,默认初

2021-01-11 16:07:06 65 1

phantomjs下载

官方资源下载太慢了-------特来帮助大家

2019-04-11

空空如也

空空如也

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

TA关注的人 TA的粉丝

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