自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis实现分布式锁

分布式锁

2022-09-29 00:40:12 443 1

原创 mybatis

mybatis使用记录

2022-09-27 00:05:00 122

原创 kafka使用指北——Kafka的配置与应用

kafka

2022-09-19 22:55:41 1389

原创 并查集的应用

在图论的算法题中,虽然最常用的算法是DFS和BFS,但是在求连通分量数量的时候,借助并查集这一数据结构是是十分简单的,以leetcode-547,省份数量 这道题举例。public int findCircleNum(int[][] isConnected) { int size = isConnected.length; UnionFind unionFind = new UnionFind(size); for (int i = 0; i < si

2021-11-15 00:03:47 427

原创 力扣-26 树的子结构

class Solution { /** *先通过遍历A,找到与B相等的节点,然后调用递归函数,同左同右 存在三种情况: 1.当最开始A或b都为空肯定是false 2.当遍历B为空且A为空时,说明不满足子数结构条件 3.A与B数值相等,即刻开始判断字树是否配对。 */ public boolean isSubStructure(TreeNode A, TreeNode B) { //1.首先找到第一个点,结合题目设定,

2021-11-14 10:40:15 422

原创 结构型模式—装饰模式

装饰模式是结构型模式的一种,属于十分常见的装饰模式。考虑具体场景:如今不管是手机,还是智能汽车或者其他私人物品,现在均支持一个DIY的潮流,根据个人喜好以及经济能力,选配自己的组件。但核心都是该被DIY的物品。但是对于商家来说,任意的选配,就会有不一样的价格。如何清晰明了的解决这个需求,装饰模式则应运而生。核心组件:抽象组件接口,也可以是抽象类。即上述例子的手机或者汽车具体的被装饰物。对于抽象组件的实现,具体的被装饰物装饰物,对于抽象组件的时间,主要体现DIY的功能,因此,装饰物需要持有被装

2021-08-22 17:56:23 313

原创 原型模式_创建型模式

一种对象创建型模式,使用原型实例指定创建对象的种类。拷贝对象。实际是对Cloneable接口的使用。该模式也运用到了深拷贝和浅拷贝这个知识点。核心组成:Prototype: 声明克隆方法的接口,即Cloneable接口,原型模式即为对整个接口的实现,其中实践了深拷贝和浅拷贝知识点ConcretePrototype:具体的原型类,实现了克隆接口Client: 原型类克隆而得到的实例浅拷贝实现 Cloneable,深拷贝是通过实现 Serializable 读取二进制流浅拷贝如果原型对象

2021-08-15 21:03:42 84

原创 适配器模式_结构型模式

适配器模式见名知意,作为两个不兼容接口之间的桥梁,我们只需要新增一个适配器,而不需要去改动两者之间任一的结构。例如生活中笔记本的扩展坞,就是一种适配器,使得原本不兼容的接口能够一起工作。JDBC则是我们用过的最常见的适配器模式,JDBC是统一的数据库访问接口,针对Oracle 和 MySQL 有不同的适配。属于结构型模式的一种。一般有如下两种适配器:接口适配器模式我们时常会遇到一个情形,一个接口定义了大量的方法声明,但是我们此时只需要实现它的部分功能,但是往往实现一个接口必须要重写它所有的方法。

2021-08-15 20:49:06 217

原创 位运算_有效的数独

题意描述1. 直接对比法不需要别的思路,按照题意要求,设置三个二维数组,分别代表行、列、以及小单元格,来存储整个数值。例如 rows[i][j] : 即表示在第i行,存在j这个数(因为只是记录存不存在,所以默认0表示不存在,设置rows[i][j] = 1,即表示存在)public boolean isValidSudoku(char[][] board) { int[][] rows = new int[9][9]; int[][] columns = n

2021-08-15 11:45:00 117

原创 快慢指针解决环形链表

环形链表双指针的做法,快慢指针的经典题目1. 判断一个链表是否有环设置一快一慢两指针,快指针的步长为2,慢指针的步长为1。如果存在环形链表,那么一定会存在相等的时刻。public boolean hasCycle(ListNode head) { ListNode fast = head; ListNode slow = head; while (fast != null && fast.next != null) {

2021-07-23 00:48:15 158

原创 建造者模式

建造者模式使用多个简单的对象一步一步构建成一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示简而言之就是使用者对于产品的构建过程是不感知的,他只需要拿到对应的产品就可以了。核心组成Builder:抽象方法,抽象的构建者。抽象所有的方法ConcreBuilder: 具体的构建者Director:调度者productor:产品用例场景: 比如对于KFC的菜单,对于一份套餐,可以由任意不同的单品进行组装从而形成不同的套餐产品; 另外,如今大家

2021-07-17 12:04:00 87

原创 Python 基础

Python 特性学习 (对比 Java 学习)1. Python 基础数据类型和数据结构1.1 数字类型Python 相对于 Java 可支持的数值更丰富,这也是 Python 能够在数学领域热门的原因整型:Python3 对于整性大小没有限制,可以存储长整型浮点数:可正可负,可以用 a+bj 或者 complex(a,b) 表示复数:可以用 a+bj 或者 complex(a,b) 表示数字类型的特点:不可变,如果改变了数字类型的具体值,那么会重新分配地址空间这里的不可变,指的是数字类型

2021-01-09 10:28:37 129

原创 动态规划_花坛种花问题

花坛种花问题新年的第一道每日一题,因为之前找到工作之后想着休息一段时间,算法的练习有所懈怠,希望开年能有一个好运气!题目大意:假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 表示没种植花,1 表示种植了花。另有一个数 n ,能否在不打破种植规则的情况下种入 n 朵花?能则返回 true ,不能则返回 false。输入:flowerbe

2021-01-02 10:30:32 565

原创 微服务流量卫兵 Sentinel

1 定义概述啥是流量,啥又是防卫兵呢?在分布式系统中,流量注定是越来越大的,在每一秒钟都可能处理上百万乃至千万的请求,设想一下服务器宕掉,那对于用户而言,体验肯定是非常坏的;所以我们为了保证 可用性,我们需要有一款流量控制工具,能够帮助我们进行操作。1.1 sentinel阿里巴巴开源的分布式流量控制工具丰富的应用场景:流量的削峰填谷、集群流量控制、实时熔断下游不可应用。具备可视化平台,具备实时监控功能Github 学习文档:Sentinel 文档在使用 Sentinel 之前,我们

2020-12-24 11:02:39 355

原创 负载均衡策略的使用

负载均衡策略1. 啥是负载均衡?首先我们想象一个场景,在分布式系统中有许多个服务,在实际生产环境中,一个服务肯定不止一个实例;但是对于用户或者调用方而已,如果需要我自己去选择,那未免也太麻烦了;并没有达到微服务架构所提倡的效率高;但是如果我们只是访问一个,那么又如何保证不会单点被爆破呢? 我们设想一下,最好的情况就是每一个实例所承受的相差无几的访问压力。这就是负载均衡;可以整体提高数据吞吐量。1.1 负载均衡的分类1.1.1 软硬件的角度硬件解决方案:可供选择的有 NetScaler、F5、Ra

2020-12-07 20:22:53 386

原创 nacos-配置中心的概述使用

nacos-配置中心的概述与使用1. nacos 所提供的配置中心的服务​ 在上一篇文章中已经记录了 nacos 作为注册服务中心的作用;同时 nacos 也整合了配置中心的作用,我们可以用来管理 繁杂的配置文件。为什么要引入配置中心呢?我们可以看到,随着微服务架构的提出,我们将以前单一的系统分成了许多个独立的服务,每一个服务都要有一个 yaml 文件;当然如果你愿意,也可以是 properties 后缀的文件。那样我们管理起来就会很麻烦;那么我们最好有一个类似注册中心的地方进行统一管理。总

2020-12-03 10:16:36 1241

原创 微服务架构概述和 nacos 的介绍使用

记录学习微服务与分布式架构,学习 alibaba系列组件1.区分微服务和传统服务单机架构有哪些区别?上图解释传统单机: 耦合度过高,数据库压力大,当单点故障以后系统全盘崩溃分布式架构:引入服务的概念,将模块拆分成一个个服务,原则上来说,每个服务单独单独享有一个属于自己的数据库,通过相互依赖和调用,组成统一的服务。核心组件:网关服务的发现与注册负载均衡器熔断器(监控流量进行熔断或降级处理)配置中心服务链路追踪服务综上,在如今数据爆炸,全民进入互联网的今天,分布式架构有哪

2020-12-01 16:28:23 605

原创 部署RocketMQ踩过的那些坑

1. 前言笔者最近在学习消息队列,选择了三高代表之RocketMQ;在搭建环境的过程中遇到了一些坑,查阅了很多博客,耗费了时间终于成功的跑了起来,秉着前事不忘,后事之师的精神,将其记录下来。笔者是买了一台个人的阿里云服务器进行的学习;所以本文所有的坑都是在云服务器上搭建才会遇见的。本文将粗略的记录部署MQ的过程,将坑重点记录。2. 阿里云部署 RocketMQ2.1 环境首先肯定是 JDK、Maven这些环境全部部署起来。2.2 解压unzip rocketmq-all-4.4.0-sour

2020-10-08 15:34:18 1371

原创 字符串_字符串排序

题目描述题目描述给定n个字符串,请对n个字符串按照字典序排列。输入描述:输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。输出描述:数据输出n行,输出结果为按照字典序排列的字符串。想法一道华为机考题;如果使用 Java 语言的话,可以重写compare方法即可;记录此题是想解决一直以来对于 comparator中comapre方法重写规则的不了解。借助此题彻底弄清楚。如果返回的值 > 0;那么会将前一个数与后一个进行

2020-09-27 17:31:41 1707 1

原创 栈应用_四则运算

题目输入字符串格式的算术表达式,如: “3+2*{1+2*[-4/(8-6)+7]}”;输出去结果。思路栈的应用;四则运算分为下列四个过程读取字符串 (并不是简单地读入,比如 当字符串中有两位数,例如12时,我们应该读成 “12”而不是“1”,“2”,不然运算会出现错误)。处理字符串,给字符串加0 (为了保证后缀运算的正常运行,需要对出现的负数进行考虑。 例如 (-4 + 3) 为了运算正确,将其处理成(0 - 4 +3))将中缀表达式转化成后缀表达式计算后缀表达式代码public

2020-09-01 14:16:15 262

原创 深度优先搜索_能否遍历所有节点

题目给定一个有向图,判断能否从 0 开始,遍历到所有的节点。(总结一下有向图的深度优先遍历)class solution{ boolean[] visit; int num; public boolean canVisitAllRooms(List<List<Integer>> rooms) { int n = rooms.size() //房间的个数 visit = new boolean[n]; num = 0; // 记录访问个数 // 从 0

2020-08-31 09:04:25 1389

原创 位运算_范围内的数字与运算

给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。实例:输入: [5,7]输出: 4观察,我们看到对于连续的数字,从末尾往首位看,一定都是0,1 交替;而对于与运算,一旦出现0,那么最终结果结果一定都为0。具体操作,我们从末尾向前遍历m,n的位,同时记录右移清除的位数;相等的时候说明找到了相同前缀;返回恢复的值就可以了。所以此题的意思我们可以转换思想,即求出公共前缀public in

2020-08-27 12:42:02 454

原创 图文并茂浅述 SpringBoot 的自动配置

1. Springboot的配置注入SpringBoot 引进了一种全新的语法,yaml,

2020-08-14 15:10:27 176

原创 深度优先搜索_全排列问题

1 字符串的全排列给定一组字符串,找出所有的排列组合数(有可能存在重复字符)。思路:深度优先搜索,依然是套用搜索算法的模板,但是这里面涉及到重复字符,我们需要排除掉重复的字符串。这就涉及到剪枝问题。上一张图:(借的大佬的)对于如何深度搜索,当我们访问到某个节点时,我们以此节点开始,进行向后查找,我们固定住这个字符,然后重新进入。此时为了避免重复,我们可以用set结构来去重。依然是按照dfs的模板class solution{ // 定义成全局变量,方便dfs的递归 char[] c;

2020-08-13 23:23:03 533

原创 深度优先搜索_被围绕的区域

题目给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂

2020-08-11 12:32:43 157

原创 深度优先搜索_有向图的通路

题目叙述节点间通路。给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2 输出:true思考对于图的搜索,借助邻接表结构,先创建一个邻接表,然后借助dfs。具体见代码注释。 public boolean findWhetherExistsPath(int n, int[][] graph, int start, int target) {

2020-08-04 14:15:21 928

原创 深度优先搜索_课程表问题

题目叙述必须选修 numCourse 门课程,记为 0 到 numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?实例:输入: 2, [[1,0],[0,1]]输出: false解释: 总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。思考个人错误的思考

2020-08-04 10:34:48 213

原创 位运算_异或_消失的数字

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数借助异或的性质:A^A = 0;A^0 = A;A ^ B ^ B = A;数组中有的数字一定会和数组的索引构成一对重复数字,由性质3 最终会消掉。其中,N 可以和数组的长度构成一对重复,因此最终还要异或一下数组的长度,然后借助性质2,我们将初始值设置为0;那么一个循环下来,最后的结果就是那个消失的数。public int missingNumber(int[] nums) { int res = 0; for(

2020-07-29 09:26:19 228

原创 单调队列_滑动窗口的最大值

给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。例如滑动窗口的位置 最大值--------------- -----[1 3 -1] -3 5 3 6 7 3 1 [3 -1 -3] 5 3 6 7 3 1 3 [-1 -3 5] 3 6 7 5 1 3 -1 [-3 5 3] 6 7 5 1 3 -1 -3 [

2020-07-26 17:47:29 161

原创 双指针_移动零

给定一个数组,将不为0的数字移动到数组左端,0移动到数组右端。public void moveZeroes(int[] nums) { // i 用来记录不为0的位置 int i = 0; for(int j=0; j<nums.length; j++){ if(nums[j] != 0){ nums[i++] = nums[j]; } } // 此时i

2020-07-21 16:19:29 199

原创 栈应用_最小栈

单调栈的应用,维护一个栈顶为最小值得栈;当然若要求最大值,反之class MinStack{ private static Stack<Integer> stack; // 维护的最小栈 private static Stack<Integer> minStack; public MinStack(){ stack = new Stack<>(); minStack = new Stack<>(); } // push publ

2020-07-19 21:49:44 127

原创 栈应用_每日温度

题目描述:请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]思考:本题需要找出右边第一个更大的数;因此我们可以维护一个单调栈。public int[] dailyTemperatures(int[] T) { in

2020-07-16 16:24:01 129

原创 排序_排序算法整理

经常零零散散的用到排序算法,将几类常见的总结下来:插入排序/** * 时间复杂度O(n^2),空间复杂度O(1) * 稳定排序 * @param arr */ public static void inserSort(int[] arr) { int i,j; for(i=1;i<arr.length;i++){ int tmp = arr[i];

2020-07-14 15:30:28 82

原创 栈应用_有效的括号

题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。。这一题是借助栈先进后出的特性。public boolean isValid(String s) { // 奇数肯定false; if(s.length()%2 == 1) return false; if(s.isEmpty()) return true; char[] string = s.toCharArray(); Stack<Character> stack = ne

2020-07-13 22:50:09 96

原创 位运算_汉明距离

1最开始的思路:将x,y都右移一位计算异或值。public int hammingDistance(int x, int y) { int res=0; // 当x , y 都不为0时可以继续 while(x!=0 || y!=0){ // 计算最右边的值 int tmp_x = x&1; int tmp_y = y&1; if((tmp_x ^ tm

2020-07-13 21:55:49 174

原创 SpringBoot 集成MongoDB的简单使用

说明最近工作接触到的项目用到了 MongoDB;之前没有学习过;这次一边用一边学习;将配置流程以及一些基础的用法总结下来。若以后深入学习再进行更新。1. MongoDB的配置1.1 引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</art

2020-07-10 15:04:23 251

原创 二叉树_重建二叉树

描述题目给定两个数组,一个是前序遍历数组 preorder[ ],一个是中序遍历数组 inorder[ ];要求输出还原二叉树;思考核心在于我们要理解前序和中序便利的特点前序遍历:根节点-左节点-右节点中序遍历:左节点-根节点-右节点;所以我们从二叉树的根节点开始重构;也就是preorder的第一个值;同时用一个map存储它在中序数组中的索引值;从而可以将中序数组以索引下表为中点 划分为两块,左边为左子树,右边为右子树;然后递归,代码演示public class TreeNode {

2020-06-17 11:06:55 123

原创 SpringBoot整合logback 和 fastJson

整合logback1.导入依赖不用额外导入,因为在 Springboot-web-starter 中整合了 logback 的依赖2. 在resource中新建 logback.xml 的文件<?xml version="1.0" encoding="UTF-8"?><configuration debug="true" scan="true"> <springProperty scope="context" name="LOG_LEVEL" source="lo

2020-06-14 15:48:13 202

原创 MyBatis-Generator逆向生成器

目录结构内容:1 AddLimitOffsetPluginpublic class AddLimitOffsetPlugin extends PluginAdapter { public boolean validate(List<String> warnings) { return true; } public boolean modelExampleClassGenerated(TopLevelClass topLevelClass, IntrospectedTa

2020-06-12 11:08:41 203

原创 IDEA for mac 常用快捷键记录(更新)

说明从win换到mac,很多快捷键还不熟练,记录自己所遇到的。会不定时更新删除一行:command + y复制当前行到下一行:command + d抛出异常:alt + enter添加代码块:command + alt + t

2020-06-11 16:26:17 157

空空如也

空空如也

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

TA关注的人

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