自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 收藏
  • 关注

原创 volatile和synchronized实现原理

volatilevolatile是轻量级的synchronized,在多处理器开发中保证共享变量的可见性:当一个线程修改了共享变量,其他线程能感知到这个改动。volatile比synchronized的使用和执行成本低,因为它不会引起线程上下文切换和调度。volatile的定义与原理Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致性更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。如果一个字段被声明成volatile

2021-02-20 19:12:20 380 2

原创 Netty服务端启动解析

开启一个服务端,端口绑定在port,使用nio模式public class NettyDemoServer { private final int port; public NettyDemoServer(int port){ this.port = port; } public void start() throws Exception { EventLoopGroup workgroup = new NioEve...

2020-10-13 09:56:17 722

原创 Java内存模型

备份

2021-02-22 15:44:48 167

原创 139. 单词拆分

给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:输入: s = "applepenapple", wordDi.

2021-02-19 16:43:27 154

原创 3. 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: s = "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长...

2021-01-25 19:36:16 83

原创 Redis底层数据结构(六)--压缩列表

压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且每个列表项要么是小整数值,要么就是长度比较短的字符串,Redis就会使用压缩列表来做列表键的底层实现。压缩列表的构成压缩列表是Redis为了节约内存而开发的,是由一系列编码的联系内存块组成的顺序性数据结构。一个压缩列表可以包含多个节点(entry),每个节点可以保存一个字节数组或者一个整数值。压缩列表的各个组成部分压缩列表各个组成部分的详细说明压缩列表节点的构成每个压缩列表节点可以保存一个字节数.

2021-01-21 15:30:41 98

原创 Redis底层数据结构(五)--整数集合

整数集合是集合键的底层实现之一。整数集合的实现整数集合(intset)是Redis用于保存整数值的集合抽象数据结构,可以保存类型为int16_t,int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素。contents数组是整数集合的底层实现:证书集合的每个元素都是contents数组一个数组项(item),各个项在数组中按值的大小从小到大有序地排列,并且数组中不包含任何重复项。length属性记录了整数集合包含的元素数量,即contents数组的长度。虽然ints

2021-01-21 15:17:25 97

原创 Redis底层数据结构(四)--跳跃表

跳跃表(skiplist)是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN),最坏O(N)复杂度的节点查找,还可以通过顺序性操作来力量处理节点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,并且因为跳跃表的实现比平衡树更为简单,所以有不少程序都使用跳跃表来代替平衡树。Redis使用跳跃表作为有序集合键的底层实现之一。跳跃表的实现Redis跳跃表有zskiplistNode和zskiplist两个结构定义,zskiplis

2021-01-20 20:28:57 109

原创 Redis底层数据结构(三)--字典

字典,又称符号表,关联数组或者映射,是一种用于保存键值对(key-value)的抽象数据结构。字典在Redis里的应用:Redis数据库就是使用字典来作为底层实现的,对数据库的增,删,改,查操作也是建立在对字典的操作之上的。除了表示数据库之外,字典还是哈希键的底层实现之一。字典的实现Redis的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,每个哈希表节点就保存了字典中的一个键值对。哈希表结构定义:table属性是一个数组,数组中每个元素都是指向dictEntry

2021-01-20 17:05:35 109

原创 Redis底层数据结构(二)--链表

链表实现了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活调整链表的长度,是Redis列表键的底层实现。Redis构建了自己的链表实现。除了链表键之外,发布与订阅,慢查询,监视器等功能也用到了链表,Redis服务器本身还使用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区(output buffer)链表和链表节点的实现链表节点的结构:多个listNode可以通过prev和next指针组成双端链表:由多个listNode组成的双端链表链表结构

2021-01-20 10:53:00 71

原创 Redis底层数据结构(一)--简单动态字符串

简单动态字符串(simple dynamic string,SDS)比如:127.0.0.1:6379> set msg helloredisOKRedis将在数据库中创建一个新的键值对,其中:键值对的键是一个字符串对象,对象的底层实现是一个保存着字符串"msg"的SDS。 键值对的值是也是一个字符串,对象的底层实现是一个保存着字符串"helloredis"的SDS127.0.0.1:6379> rpush devtools "java" "php" "c"(inte

2021-01-20 09:53:56 116

原创 Redis对象系统

beizhu

2021-01-18 21:06:24 73

原创 236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5...

2020-11-09 20:57:54 106

原创 143. 重排链表

给定一个单链表L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.解题思路:常规解法是遍历ListNode保存在..

2020-10-20 20:46:28 87

原创 968. 监控二叉树

给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。提示:给定树的节点数的范围是[1, 1000]。.

2020-09-23 17:29:29 106

原创 1079. 活字印刷

你有一套活字字模tiles,其中每个字模上都刻有一个字母tiles[i]。返回你可以印出的非空字母序列的数目。注意:本题中,每个活字字模只能使用一次。示例 1:输入:"AAB"输出:8解释:可能的序列为 "A", "B", "AA", "AB", "BA", "AAB", "ABA", "BAA"。示例 2:输入:"AAABBC"输出:188提示:1 <= tiles.length <= 7 tiles由大写英文字母组成思路:用hashmap来...

2020-09-04 20:24:14 189

原创 491. 递增子序列

给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]说明:给定数组的长度不会超过15。 数组中的整数范围是[-100,100]。 给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。回溯:class Solution { Li.

2020-08-26 19:38:56 117

原创 647. 回文子串

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1:输入:"abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:"aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"提示:输入的字符串长度不会超过 1000 。解法1:暴力,循环遍历出所有子串,然后判断子串是否是回文串。找出所有字串的时间

2020-08-19 18:12:22 147

原创 @Resource和@Autowired的区别

@Autowired

2020-08-18 18:32:19 152

原创 sql中LOCATE函数

LOCATE(substring,str)返回substring在字符串str中第一次出现的位置LOCATE(substring,str,pos)返回substring在字符串str的pos位置之后第一次出现的位置。

2020-08-18 15:34:08 10919

原创 排列之全排列,下一个排列,第K个排列java篇

待续

2020-08-14 15:34:16 267

原创 300. 最长上升子序列

给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为O(n2) 。解题思路:动态规划,维护一个dp数组,dp[i]保存的是到第i个数据的最长上升子序列。具体做法是:对于sums[i],首先分别比较sums[i]和0-i-1的数的大小关系,假设sums[i]&...

2020-08-06 20:08:32 95

原创 mysql,通过sql修改已存在的表中某个字段的长度

1、给已经存在的表,修改字段alter table tablename modify colum_name varchar(50) NOT NULL DEFAULT '' COMMENT '修改tablename表中colum_name字段的信息';2、给已经存在的表添加字段ALTER TABLE user ADD COLUMN (`user_name` VARCHAR(50) DEFAULT NULL COMMENT '给用户表新增用户名字段');...

2020-08-05 11:03:28 580

原创 95. 不同的二叉搜索树 II

给定一个整数 n,生成所有由 1 ...n 为节点所组成的 二叉搜索树 。示例:输入:3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 ...

2020-07-21 20:28:36 92

原创 47. 全排列 II

难度中等352收藏分享切换为英文关注反馈给定一个可包含重复数字的序列,返回所有不重复的全排列。示例:输入: [1,1,2]输出:[ [1,1,2], [1,2,1], [2,1,1]]解题思路:记忆回溯class Solution { List<List<Integer>> list; public List<List<Integer>> permuteUnique(int[] nums) { ...

2020-07-21 20:27:07 113

原创 面试题 08.07. 无重复字符串的排列组合

无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。示例1:输入:S = "qwe"输出:["qwe", "qew", "wqe", "weq", "ewq", "eqw"]示例2:输入:S = "ab"输出:["ab", "ba"]提示:字符都是英文字母。字符串长度在[1, 9]之间。class Solution { public String[] permutation(String S) { ...

2020-07-18 23:50:26 165

原创 Spring Cloud 微服务实战

SpringCloud微服务实战服务治理主要用来实现各个微服务实例的自动化注册与发现。 *服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号,版本号,通信协议等一些附加信息告知注册中心,注册中心按服...

2020-07-16 17:17:50 205

原创 刷题中优化空间和时间的小tips

1.用parseInt代替valueOf,减少装箱和拆箱操作;2.用switch替代if else;

2020-07-16 17:17:37 134

原创 SpringCloud微服务实战---服务容错保护

服务容错保护:Spring Cloud Hystrix在微服务架构中,系统被分成了很多服务单元,各服务的应用间通过服务注册与订阅的方式相互依赖。每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会因为等待出现故障的依赖方响应形...

2020-07-16 17:16:14 201

原创 SpringCloud微服务实战---服务容错保护

服务容错保护:Spring Cloud Hystrix在微服务架构中,系统被分成了很多服务单元,各服务的应用间通过服务注册与订阅的方式相互依赖。每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会因为等待出现故障的依赖方响应形...

2020-07-16 17:16:00 141

原创 SpringCloud微服务实战---负载均衡

客户端负载均衡:Spring Cloud Ribbon Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,基于Netflix Ribbon实现。微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续的Feign。客户端负载均衡负载均衡是对系统高可用,网络压力的缓解和...

2020-07-16 17:15:49 312

原创 SpringCloud微服务实战---服务治理

服务治理: 主要用来实现各个微服务实例的自动化注册与发现。 *服务注册:在服务治理框架中,通常都会构建一个注册中心,每个服务单元向注册中心登记自己提供的服务,将主机与端口号,版本号,通信协议等一些附加信息告知注册中心,注册中心按服务名分类组织服务清单。 另外,服务注册中心还需要以心跳的方式去检测清单中的服务是否可用,若不可用需要从服务...

2020-07-16 17:15:34 186

原创 172. 阶乘后的零

给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释:3! = 6, 尾数中没有零。示例2:输入: 5输出: 1解释:5! = 120, 尾数中有 1 个零.class Solution { public int trailingZeroes(int n) { int num = 0 ; while(n>4){ num += n/5; n /= 5;...

2020-07-11 14:40:20 84

原创 Ubuntu安装软件报错下列软件包有未满足的依赖关系

作为一个Ubuntu小白,出现这种问题属实有点头大,按照提示内容终端输入:sudo apt-get -f install这条命令是用来解决软件包依赖的问题的,但是我执行了之后还是会报错。无奈拿出万能解决办法:哪里报错删哪里!执行如下命令:sudo dpkg -P linux-image-extra-4.4.0-101-generic sudo dpkg -P linux-image-extra-4.4.0-87-generic 来删除错误依赖的软件包,最后问题解决!..

2020-07-10 16:01:09 3373 1

原创 sql模糊查询判断字符串包含一些字符串

`card_info` mediumtext COMMENT '卡片信息'最近项目中遇到一个场景,就是对上面字段'card_info'卡片信息里的内容查询,判断卡片信息里面是否包含某一个字符串,这里可以用like来实现。select * from table_name where card_info like '小米'这条语句就可以查出card_info字段中包含’小米‘字符串的所有结果。但是如果card_info不是一个String格式,而是json的text文本格式,比如:{..

2020-07-07 20:10:37 3884

原创 用户数据安全常用方法

1、在登陆注册页面使用HTTPS,避免在传输账号密码时使用明文传输。2、公钥加密私钥解密,在客户端使用公钥加密账号密码等信息,在服务端用私钥解密。3、用户密码salt防止破解,在数据库存储账号密码时,将密码+salt(UUID生成的随机字符串),再使用MD5加密4、设置token有效期,过一段时间就要求重新登录5、单一平台的单点登录,登录IP异常检测。在单一平台,如果另一台设备同时登录一个账号,将上一个登录的ticket设置为1,则上一个登陆设备刷新时就要求再次登录。相同账号登陆如果ip位置

2020-05-17 23:38:46 1009

原创 写比较器出现ava.lang.IllegalArgumentException: Comparison method violates its general contract!异常

Arrays.sort(intervals, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { if(o1[0]> o2[0]) return 1; else if(o1[0] < o2[0]) return -1; else{ .

2020-05-13 16:51:41 256

原创 496. 下一个更大元素 I

给定两个 没有重复元素 的数组nums1 和nums2,其中nums1是nums2的子集。找到nums1中每个元素在nums2中的下一个比其大的值。nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释: 对于num1中的数字4,你无法在第二个数组中找到下一个更...

2020-05-09 18:42:44 97

原创 503. 下一个更大元素 II

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个...

2020-05-07 00:27:00 146

原创 53. 最大子序和

给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。方法一:动态规划思路和算法假设 nums 数组的长度是 n,...

2020-05-03 19:53:17 188

空空如也

空空如也

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

TA关注的人

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