自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lavender-csdn的博客

好好学习

  • 博客(214)
  • 收藏
  • 关注

原创 服务熔断Hystrix

Hystrix是什么在微服务架构中,我们是将一个单体应用拆分成多个服务单元,各个服务单元之间通过注册中心彼此发现和消费对方提供的服务,每个服务单元都是单独部署,在各自的服务进程中运行,服务之间通过远程调用实现信息交互,那么当某个服务响应太慢或者故障,又或者因为网络波动或者故障,则会造成调用者延迟或者调用失败,当大量请求到达,则会造成请求的堆积,导致调用者的线程挂起,从而引发调用者也无法响应,调用者也发生故障。比如电商中的用户下单,我们有两个服务,一个下订单服务,一个减库存服务,当用户下订单时调用下订

2021-10-07 14:40:24 674

原创 走进包装类

引入Java认为一切皆对象,引用数据类型就是对象。但是在Java中8中基本数据类型不是对象,只是表示一种数据的类型形式。Java为了一切皆对象的思想统一,把8中基本数据类型转换成对应的类,这个类称为基本数据类型的包装类。/** * 基本数据类型 包装类(引用数据类型) * byte Byte * short Short * int Integer(特殊) * long

2021-10-05 16:03:46 293 1

原创 泛型是什么

什么是泛型?泛型就是一个标签:<数据类型>泛型可以在编译阶段约束只能操作某种数据类型。注意:JDK1.7开始之后,泛型后面的声明可以省略不写!!泛型和集合都只支持引用数据类型,不支持基本数据类型。泛型的好处:泛型在编译阶段约束了操作的数据类型,从而不会出现类型转换异常。体现的是Java的严谨性和规范性,数据类型,经常需要进行统一。自定义泛型类泛型类的概念:使用了泛型定义的类就是泛型类泛型类的格式:修饰符 class 类名<泛型变量>{}

2021-10-05 15:13:57 1319

原创 客户端负载均衡Ribbon

Spring Cloud中的Ribbon是什么?我们通常说的负载均衡是指将一个请求均匀地分摊到不同的节点单元上执行,负载均衡分为硬件负载均衡和软件负载均衡;硬件负载均衡:比如F5、深信服、Array等;软件负载均衡:比如Nginx、LVS、HAProxy等;硬件负载均衡或者软件负载均衡,他们都会维护一个可用的服务端清单,通过心跳检测来剔除故障的服务端节点以保证清单中都是可以正常访问的服务端节点。当客户端发送请求到负载均衡设备的时候,该设备按照某种算法(比如轮询、权重、最小连接数等)从维护的可

2021-10-05 09:50:14 618

原创 服务注册中心-Eureka

Eureka注册中心高可用集群概述在微服务架构的这种分布式系统中,需要充分考虑各个微服务组件的高可用性问题,不能单点故障,由于注册中心eureka本身也是一个服务,如果它只有一个节点,那么它有可能发生故障,这样我们就不能注册与查询服务了,所以我们需要一个高可用的服务注册中心,这就需要通过注册中心集群来解决。eureka服务注册中心它本身也是一个服务,它也可以看做是一个提供者,又可以看做是一个消费者,之前通过配置eureka.client.register-with-eureka=false让注册中心

2021-10-04 13:18:46 168

原创 走进服务注册中心---Eureka

Spring cloud的整体架构原始方式:服务的消费者直接通过访问服务提供者的url去调用里面的方法:import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import.

2021-10-03 20:15:11 171

原创 微服务架构概述

系统进化理论概述在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统集中式系统集中式系统也叫单体应用,就是把所有的程序、功能、模块都集中到一个项目中,部署在一台服务器上,从而对外提供应用;分布式系统分布式系统就是把所有的程序、功能拆分成不同的子系统,部署在多台不同的服务器上,这些子系统相互协作共同对外提供服务,而对用户而言他并不知道后台是多个子系统和多台服务器在提供服务,在使用上和集中式系统一样。集中式系统跟分布式系统是相反的两

2021-10-02 14:53:23 708

原创 并查集--leetcode

并查集作用:1、合并两个集合2、判断两个点是否在同一个集合中模板:// 找到父节点public static int find(int x) { if(p[x]!=x) p[x] = find(x); return p[x];}1、547. 省份数量以下为java代码:class Solution { static int[] p; public int findCircleNum(int[][] isConnected) { in

2021-09-12 12:28:47 250

原创 前缀和+哈希---leetcode

前缀和的基本概念题目:560. 和为 K 的子数组考察S[R]-S[L-1]是否等于k,哈希表的作用可以快速插入一个数、可以快速找到一个数、可以统计数出现的次数。以下为Java代码:class Solution { public int subarraySum(int[] nums, int k) { int result = 0; int sum = 0; //表示前缀和 Map<Integer,Integer> map = new H.

2021-09-12 10:44:40 154

原创 字符串处理专题--Leetcode

1、49. 字母异位词分组思路:定义一个map,key值为每个排好序的字符串,value为字符串本身,key的类型为String,value的类型为ArrayList<String>。所以以上例子的map为map={ "aet":{"ate","eat","tea"}, "abt":{bat}, "ant":{"nat","tan"}}以下为java代码class Solution { public L...

2021-09-05 15:58:45 143

原创 双指针(滑动窗口)解题---Leetcode

算法思想:1、在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。2、先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求。3、此时,停止增加 right,转而不断增加 left 指针缩小窗口 [left, right],直到窗口中的字符串不再符合要求。同时,每次增加 left,都要更新一轮结果。4、重复第 2 和第 3 步,直到 right 到达字符串 S

2021-08-29 16:43:14 260

原创 并发数据一致性解决方案

乐观锁、悲观锁、分布式锁乐观锁从数据库层面来看,就是在表中加入一个版本号字段version,这样每次修改数据的时候,都需要比较版本号。从代码层面讲:从乐观锁的层面讲,也能解决超卖、数据不一致的问题。缺点:不适用高并发场景,会导致失败率很高,锁冲突比较大,影响用户体验,前端处理那边只能不断重试。可以设置乐观锁冲突的最大重试次数,减少一些无用访问。悲观锁假设现在有5个请求对共享资源进行访问,首先T1过来,对该资源加锁,一直到事务提交之后才会释放锁,如果当前是一个长事务,那

2021-03-27 11:05:17 409

原创 Spring循环依赖问题

学习地址:https://www.bilibili.com/video/BV1ET4y1N7Sp?p=21、什么是Spring循环依赖?2、循环依赖怎么解决?3、Spring中为什么要使用三级缓存来解决循环依赖?二级缓存能不能解决循环依赖问题?什么是Spring循环依赖首先了解Bean的创建与管理过程:结论:获取Bean的时候先从单例池中获取,如果没有则创建并添加到单例池。获取Bean找bean工厂,调用两次单例池。第一次通过beanName获取,如果单例池中并没有这

2021-03-25 20:22:22 157

原创 Redisson实现Redis分布式锁以及Redlock分布式锁

首先看一段模拟扣减库存的代码:import lombok.extern.slf4j.Slf4j;import org.redisson.Redisson;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.web.bind.annotation.

2021-03-18 17:28:08 823

原创 IO那些事儿(BIO、NIO、AIO、多路复用、select、poll、epoll)

这篇文章真没想着怎么怎么深入这些概念,只能说尽可能自己在学习的过程中说清楚,加深理解和印象,毕竟基本上全是操作系统底层的原理,现在更多对本科学的操作系统的印象停留在:虚拟存储、页面置换算法这些东西。说实话,底层的东西觉得难,学起来吃力、忘得也就快了。IO简单一点,就是对输入数据和输出数据的处理,读写数据。BIO同步阻塞。基于线程的驱动模型。BIO最重要的是理解"B"是什么,blocking,阻塞的意思,直接看一段代码,这段代码是网络编程服务器端的一段代码。总体大意就是服务器端与客户端要连接,

2021-03-14 17:18:07 385 1

原创 leetcode组合总数回溯法超时,试试动态规划

leetcode377. 组合总和 Ⅳ题目描述:给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数。根据前几道组合总和的做题轨迹,直接使用回溯:class Solution { public int count=0; //记录满足组合的个数 public int combinationSum4(int[] nums, int target) { int cursum = 0; backtrack(nums,ta

2021-03-13 10:58:33 329

原创 为什么建议InnoDB表必须建立主键,并且推荐使用整型的自增主键

推荐一个国外的数据结构在线演示网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.htmlUUID:32个16进制数字,全球唯一,本地生成,性能高,没有网络耗时,但是非常长,占用大量的存储空间,并且作为主键建立索引和基于索引查询的时候会存在性能问题,一般这种方式不采用。为什么InnoDB表必须建立主键InnoDB中采用的是聚簇索引,表数据文件本身就是按照B+Tree组织的一个索引结构文件,主键索引默认就是B+Tree,由.

2021-03-12 21:54:57 517

原创 回溯法解算法题-leetcode中的组合排列求子集问题

回溯算法的模板:List<Object> list = new ArrayList<>();public void backtrack(路径,选择列表){ //设置结束条件 if 满足结束条件{ lista.dd(路径); return; } //候选节点的选择 for(int i=start;i<选择列表的长度;i++){ //做选择 是否要将当前节点添加到list中

2021-03-12 17:37:01 415

原创 数据库分库分表带来的问题

在对数据库中的数据进行拆分的时候,也会带来以下问题:事务问题; 跨表分页、排序、函数问题; 全局主键避重问题; 数据迁移、扩容问题。事务问题目前数据库能够实现本地事务,也就是在同一个数据库中,可以允许一组操作要么全都正确执行,要么都不执行,从而确保数据库的一致性。单从分区角度出发,实际上仍然是一张表,一个库中,它不会存在事务一致性的问题,但是会使得事务变得非常复杂。而单库分表和分库分表会涉及到分布式事务,目前数据库并不支持跨库事务,所以在这一块需要解决分布式事务可能带来的不一致性。分

2021-03-11 21:08:01 1368

原创 动态规划-最长递增子序列和最长连续递增子序列

leetcode674. 最长连续递增序列题目描述:给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。class Solution { publ.

2021-03-04 12:24:23 426 1

原创 leetcode-最长回文子串、最长回文子序列

首先说明:子串是在原始字符串中连续的,子序列在原始字符串中可连续可不连续leetcode5. 最长回文子串题目描述:给你一个字符串s,找到s中最长的回文子串。此题有两种经典的解法,一种是动态规划,一种是中心扩展法,个人更喜欢中心扩展法,两种方法都放一下代码。中心扩展法以当前字符为中心,向左右两边扩展,寻找以当前字符为中心的回文串,以下是返回最长回文串的长度import java.util.*;/**以下做法是返回长度**/public class Solut...

2021-03-03 17:11:13 401 1

原创 leetcode-柱状图中最大的矩形,盛水最多的容器,接雨水

leetcode 84、柱状图中最大的矩形题目描述:给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。思想:以当前的柱子为中心,向两边扩展,找出界限,计算以当前柱子为中心的矩形面积。class Solution { public int largestRectangleArea(int[] heights) { //三指针法,left,curr,right i..

2021-03-03 14:56:35 385

原创 牛客网-两个链表生成相加链表

题目描述:假设链表中每一个节点的值都在 0 - 9之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1为 9->3->7,链表 2为 6->3,最后生成新的结果链表为 1->0->0->0。这道题没啥技巧,思路清晰,就是代码有点多。import java.util.*;/* * public class ListNode { * int val; * ListNode ...

2021-03-03 10:36:55 185

原创 牛客-重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; *

2021-03-03 10:12:34 141

原创 滑动窗口技巧解算法题-leetcode算法题

算法思想:1、在字符串 S 中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个「窗口」。2、先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的字符串符合要求。3、此时,停止增加 right,转而不断增加 left 指针缩小窗口 [left, right],直到窗口中的字符串不再符合要求。同时,每次增加 left,都要更新一轮结果。4、重复第 2 和第 3 步,直到 right 到达字符串 S

2021-03-02 11:08:43 241

原创 牛客 二叉树的镜像

题目描述:import java.util.*;/* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */public class Solution { /** * 代码中的类名、方法名、

2021-03-01 14:43:40 82

原创 LeetCode-缺失的第一个正数

题目描述:给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。进阶:你可以实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案吗?个人第一下想法就是先给这个数组排序class Solution { public int firstMissingPositive(int[] nums) { Arrays.sort(nums); boolean flag = false; int index=0;

2021-03-01 11:32:25 109

原创 LeetCode-搜索二维矩阵

题目描述编写一个高效的算法来判断m x n矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。 每行的第一个整数大于前一行的最后一个整数。class Solution { public boolean searchMatrix(int[][] matrix, int target) { int row=0; int col=matrix[0].length-1; while(row<matrix...

2021-03-01 10:50:00 71

原创 LeetCode-分隔链表

题目描述:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int va

2021-03-01 10:36:13 71

原创 LeetCode-最小路径和

题目描述:给定一个包含非负整数的mxn网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。典型的动态规划问题class Solution { public int minPathSum(int[][] grid) { //动态规划 int m = grid.length; //行数 int n = grid[0].length; //列数 ...

2021-02-28 20:42:44 62

原创 LeetCode螺旋矩阵II

题目描述:给你一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix。class Solution { public int[][] generateMatrix(int n) { int row = n; //行数 int col = n; //列数 int[][] matrix = new int[row][col]; int count=1; ...

2021-02-28 20:19:21 87

原创 LeetCode-删除排序数组中的重复项(I,II)与移除元素(26题、27题、80题)

题目描述:给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。class Solution { public int removeDuplicates(int[] nums) { int len = nums.length-1; int i=0; while(i<len){ .

2021-02-28 15:50:29 85

原创 CPU占用过高分析和定位

利用Linux命令和JDK命令一块查第一、先用top命令找出CPU占比最高的第二、ps -ef或者jps进一步定位,得知是怎么用哪个的一个后台程序在不断占用CPU两种命令都找出是5101这个进程编号第三、定位到具体的线程或者代码命令:ps -mp 进程 -o THREAD,tid,time参数解释:-m 显示所有的线程-p pid 进程使用cpu的时间-o 该参数是用户自定义格式进一步定位到了5102这个线程有问题。第四步、将需要的线程ID转换为1

2021-02-28 11:16:31 416

原创 Shopee的办公室

题目:shopee的办公室非常大,小虾同学的位置坐落在右上角,而大门却在左下角,可以把所有位置抽象为一个网格(门口的坐标为0,0),小虾同学很聪明,每次只向上,或者向右走,因为这样最容易接近目的地,但是小虾同学不想让自己的boss们看到自己经常在他们面前出没,或者迟到被发现。他决定研究一下如果他不通过boss们的位置,他可以有多少种走法?这道题典型的动态规划。import java.util.ArrayList;import java.util.List;import java..

2021-02-27 21:56:40 601 2

原创 MyBatis中动态sql

动态sqlsql的内容是变化的,可以根据条件获取到不同的sql语句,主要是where部分发生变化动态sql的实现,使用的是mybatis提供的标签:<if> <where> <foreach>动态SQL之<if>语法<if test="判断java对象的属性值">部分sql语句</if>使用示例<select id="selectUserIf" resultType="com.ith..

2021-02-27 14:56:59 124

原创 MyBatis中的模糊查询--like

第一种方式在mapper文件中<!--第一种like,java代码中指定like的内容--><select id="selectLikeOne" resultType="com.itheima.domain.User"> select * from user where username like #{name}</select>在java代码中//需要准备好模糊查询的内容String name = "%i%";List<U

2021-02-27 12:07:51 256

原创 MyBatis中列名和属性名不一致的两种解决方法

使用resultMap该方式的详细用法见封装MyBatis输出结果那一篇博客。使用列别名resultType的默认原则是:同名的列值赋值给同名的属性这个时候可以从sql语句下手,使用列别名,这里面的列别名和java对象中的属性名一致<select id="selectAlias" resultMap="com.itheima.domain.User"> select id as myid,username as myname from user </sel

2021-02-27 11:48:10 563

原创 封装MyBatis输出结果

MyBatis的输出结果:mybatis执行了sql语句,得到java对象resultType结果类型。对象类型指的是sql语句执行完毕之后,数据转为的java对象,,java类型是任意的。处理方式:1)mybatis执行sql语句,然后mybatis调用类的无参数构造方法,创建对象2)mybatis把ResultSet指定列值赋给同名的属性<select id="findAll" resultType="com.itheima.domain.User">..

2021-02-27 11:36:57 155

原创 MyBatis参数传递

MyBatis中也适用了动态代理模式:使用SqlSession.getMapper(dao接口.class),获取这个dao接口的对象传入参数:从java代码中把数据传入到mapper文件的sql语句parameterType写在mapper文件中的一个属性,表示dao接口中方法的参数的数据类型例如UserDao接口public User selectUserById(Integer id):该方法需要传递一个整型的参数那么在mapper.xml中配置<select..

2021-02-26 21:47:56 214

原创 SqlSessionFactory与SqlSession对象介绍

MyBatis中主要类介绍Resources:负责读取主配置文件InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");SqlSessionFactoryBuilder:创建SqlSessionFactory对象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory= builder.

2021-02-26 15:23:40 1201

空空如也

空空如也

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

TA关注的人

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