自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(167)
  • 问答 (1)
  • 收藏
  • 关注

原创 renren-fast-vue@1.2.2 dev: `webpack-dev-server --inline --progress --config build/webpack.dev.conf.j

删除node_modules文件卸载webpacknpm remove webpack-dev-server重装指定版本webpacknpm install webpack-dev-server@2.9.1这个版本可以参考package.json的字段

2022-04-20 16:55:30 7608 2

原创 org.springframework.cloud.client.loadbalancer.reactive.OnNoRibbonDefaultCondition

问题来自谷粒商城spring boot和cloud版本和教程保持一致,另外 comon的pom文件排除ribbon,引入loadbalancer <!-- 服务注册/发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-n.

2022-04-19 21:57:33 4691 2

原创 普通索引和唯一索引如何选择?

普通索引和唯一索引如何选择? 普通索引可重复,唯一索引不可重复 问题:大量插入数据慢,内存命中率低,考虑是不是唯一索引的问题? 问题:为什么不建议字段长的做主键(比如身份证)? 在主键索引上,叶子节点存储主键值,叶子节点占用空间越多,那么整个树的高度变大,从而导致磁盘io次数变多 为什么字段长的可以做普通索引/唯一索引 主键索引是经常使用的,普通索引仅针对某一列,相比而言肯定希望“公用”的树高更低 个人理解 普通索引和唯一索引的性能区别 change pool 缓..

2022-03-29 10:27:43 1663

原创 多线程-进程与线程

进程与线程 多线程创建的4种方式 1、继承Thread类 2、实现Runnable接口(线程和任务分离) 接口中只有一个抽象方法的可以使用lambda表达式简化 方法1、2的本质区别,实际上还是执行的匿名内部类的run方法(源码) 小结:Thread:线程任务合并 Runable:线程任务分开(更容易与线程池结合,灵活) 【题外话组合优先于继承】 3、FutureTask(本身也是实现了Runnable接口)与Callable结合

2022-03-25 09:05:02 927

原创 读提交和可重复读的底层原理?事务的隔离级别底层实现?

读提交和可重复读的底层原理?事务的隔离级别底层实现? 读提交和可重复是通过MVCC实现,串行化是通过锁实现 MVCC 补充知识 所谓的一致性读视图,在可重复读隔离级别下,是事务开启之后,第一个开始读语句开始执行所创建的快照(包含所有已提交的更改/数据),后续事务所有的读数据均从该时刻的快照中读取,而读提交隔离级别下是每次读的时候都会生成一致性读视图 一般没有显示开启事务【这里autocommit=1】,默认是执行 begin/start transaction,这种方式启动事务,一致性读视

2022-03-24 10:04:15 665

原创 行锁(锁住的是一行记录)

行锁(锁住的是一行记录) 并不是所有引擎都支持行锁,比如MyISAM,不支持行锁意味着只能使用表锁,同一时间一张表只能允许一个更新操作在执行 两阶段锁 事务A执行期间获得两个行记录锁,事务B在事务A未提交之前都会被阻塞。行锁在SQL语句执行时加上,在事务提交之后才会释放,不是说语句执行结束就会立刻释放,称之为两阶段锁协议 两阶段锁协议的作用? eg:顾客A账户在电影院B购买了一张电影票 需执行的SQL语句如下 账户A扣除金额 1 影院B增加金额 2

2022-03-24 09:52:31 1476

原创 全局锁和表级锁

MySQL的锁分类? 根据锁的范围分为全局锁、表级锁、行级锁 全局锁 MySQL提供了一个对整个数据库加读锁的操作,当需要做全库逻辑备份时使用,在备份过程中,数据库为只读状态 全局锁的问题 在主库备份,备份期间业务停摆,无法进行更新操作 在从库备份,备份期间不能执行主库过来的binlog,导致主从延迟 如果备份不加锁呢?比如用户使用会员余额买了一门课,首先用户课程表+1其次扣除用户余额,如果先备用余额表,那么出现不花钱买书的情况。反过来就会出现花钱没买到课程

2022-03-23 08:43:29 169

原创 深入浅出索引下

深入浅出索引(下) 什么是回表? eg:select * feom T where K=3 注T为表名,k列建立普通索引 执行过程,先到非主键索引K上找到 k=3的记录,再根据主键Id去主键索引找到对应的行记录。这个过程回到主键索引树查询的过程称之为回表 如果查询的数据仅在主键索引上存在,那么回表操作不可避免 什么是覆盖索引? 查询的数据在非主键索引上存在,不需要回表查询称之为索引覆盖? eg :select id from T where K=3 执行过

2022-03-23 08:40:50 130

原创 深入浅出索引(上)

索引是一种以数据库的一列或多列进行排序的数据结构 索引的出现是为了提高查询效率,索引就是树的目录,相当于数据库的目录 每碰到一个数据库要先关注它的数据模型,这样才能从理论上分析出数据库的应用场景 实现索引的三种主要方式 哈希索引 哈希表是一种以键值对存储的数据结构,查找效率高,对于哈希冲突的解决主要采用的还是链地址法 哈希表存储数据较快,同一条链上只需想后添加,缺点是数据无序,不适合做区间查询,适合做等值查询 (应用:mercached和其它NoSQL引擎) 有序数组 相比哈希索

2022-03-22 08:31:53 194

原创 MySQL事务隔离

事务隔离 MySQL是支持多引擎的系统,不是所有引擎都支持事务,比如MyISAM就不支持,这也是MyISAM被取代的原因之一 事务的ACID特性 原子性 一致性 隔离性 对于隔离性来说,隔离性越好效率越差 持久性 事务的标准隔离级别 读未提交 一个事务未提交,所做的变更能被别的事务看到 读已提交 一个事务提交之后,所做的变更才能被其它事务看到 可重复读 一个事务执行过程中,所读的数据总是跟这个事务在启动时看到的数据是一致

2022-03-22 08:29:08 1424

原创 一条SQL更新语句是怎么执行的?

一条SQL更新语句是怎么执行的? 与查询相同部分,客户端通过连接器与MySQL建立连接,接着与表相关的查询缓存会失效,分析器语法分析,优化器选择是否走索引,与查询不同,更新操作还涉及日志模块的操作 之后执行器拿到引擎给的行数据,数据更新至内存,同时写入redo log【prepare阶段】,执行器生成该操作的binlog,并将binlog写入磁盘,执行器调用提交事务接口,将刚刚写入的redo log改成commit 提交状态,更新完成【commit阶段】 Mysql中的WAL(write-ahead-

2022-03-21 10:00:40 189

原创 一条SQL查询语句是如何执行的?

一条SQL查询语句是如何执行的? 大体上MySQL分为Server层和存储引擎层 Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大部分核心功能 存储引擎层负责数据的存储和提取,目前常用的存储引擎是InnoDB,是目前MySQL的默认存储引擎,建表时可以指定存储引擎 SQL语句的查询过程 首先通过连接器连接到数据库,经过三次握手的TCP连接过程之后,连接器会对账户密码进行认证,如果认证通过连接器就会到权限表查询账户所具有的权限,否则认证失败,连接器负

2022-03-21 09:59:37 937

原创 JVM内存结构

JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)栈区:每个线程包含一个栈区,栈中只保存方法中(不包括对象的成员变量)的基础数据类型和自定义对象的引用(不是对象),对象都存放在堆区中 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。堆区:存储的全部是对象实例,每个对象都包含一个与之对应的class的信息(class信息存放在方法区)。 jvm只有一个堆区..

2022-03-07 17:15:53 92

原创 注解@NotEmpty、@NotBlank、@NotNull三者的区别及使用范围

@NotEmpty 用在集合类上面加了@NotEmpty的String类、Collection、Map、数组,是不能为null或者长度为0的适用范围:集合、map、数组、string类型@NotBlank只用于String,不能为null且trim()之后size>0,即不含空白字符适用范围:仅限String@NotNull:不能为null,但可以为empty,没有Size的约束适用范围:任何数据类型...

2022-01-01 21:11:29 1364

原创 idea 无效的发行版 12/idea 总是自动更改JDK版本问题

这种情况通常出现在导入新项目的时候,这是项目所有者设置的jdk版本,你需要根据自己的jdk版本进行修改,一般是这三个地方点击左上角 file project-settings 点击 file settings...

2021-12-05 15:42:34 444

原创 LeetCode116. 填充每个节点的下一个右侧节点指针

思路1:递归我们容易想到递归公式为:每一个节点的左孩子节点指向其右孩子终止条件:节点不存在或者左孩子节点不存在直接返回这么做没考虑跨节点的情况,比如节点5的next应该指向节点6。完善:函数参数为两个递归公式:node1.next=node2;connect(node1.left,node1.right);connect(node2.left,node2.right);connect(node1.right,node2.left)class Solution { p..

2021-12-01 21:29:38 65

原创 LeetCode114. 二叉树展开为链表

思路1:迭代法。首先找到根节点的左子树的最右节点mRight,将根节点的右子树root.right接在mRight的右节点上,再把根节点的左子树接回根节点的右子树上,然后判断下一个根节点是否需要"嫁接"。class Solution { public void flatten(TreeNode root) { while(root!=null) { //没有左子树,只需要对右子树操作“嫁接” if(root....

2021-11-28 17:23:07 162

原创 144. 二叉树的前序遍历||94. 二叉树的中序遍历||145. 二叉树的后序遍历

二叉树的前序遍历、二叉树的中序遍历、二叉树的后序遍历

2021-11-28 16:57:26 99

原创 LeetCode222. 完全二叉树的节点个数

思路1:递归终止条件:树无节点,返回0递归公式:树节点树=根节点+其左子树节点+右子树节点时间O(N) 空间O(N)class Solution { public int countNodes(TreeNode root) { if(root==null) { return 0; } return 1+countNodes(root.left)+countNodes(root.right);

2021-11-24 21:52:35 278

原创 LeetCode234. 回文链表

思路1:辅助栈,我们知道链表是无法从后往前遍历的,而栈是先进后出的,所以我们将原链表节点和栈顶节点一一比较即可。时间O(N) 空间O(N)。【注:这里不能使用反转链表中的将原链表节点一个一个去下形成新链表 的方式,因为这样是破坏了原链表。可以从栈中取出节点形成新的链表。前者空间复杂度是O(1),后者是O(N)】class Solution { public boolean isPalindrome(ListNode head) { Stack<ListNode&...

2021-11-24 21:00:59 416

原创 LeetCode9. 回文数

思路1:数字转字符串,再使用双指针 数字转字符串String.valueOf(long/int...) Interger/Long.parseInt()/Long() class Solution { public boolean isPalindrome(int x) { String str=String.valueOf(x); int left=0; int right=str.length()-1; ...

2021-11-24 00:03:18 48

原创 LeetCode5. 最长回文子串

思路1:暴力破解三循环首先定义判断字符串的子串是否是回文串的函数isFlag,然后双循环遍历,回文子串最小长度为1,因此maxLen定义为1,maxLen记录当前最大的回文子串长度,因为从字符串的头开始,begin定义为0,(j-i+1)为当前子串长度,如果当前子串长度大于当前最小回文子串长度(maxLen)并且当前子串是回文子串,才需要更新子串长度和子串的起始位置class Solution { public String longestPalindrome(String s) {

2021-11-20 18:09:06 204

原创 LeetCode125. 验证回文串||判断字符串是否回文

思路:双指针\碰撞指针,这道题加入了特殊字符,所以我们使用Character自带的api过滤掉非数字和字母(平时还是要积累一下常用api)class Solution { public boolean isPalindrome(String s) { int len=s.length(); int left=0; int right=len-1;//为什么是left<right,字符串是偶数,最后left<right,字符串是...

2021-11-20 17:12:53 258

原创 LeetCode92. 反转链表 II(反转链表的一部分)

思路1:迭代法(三指针)定义一个头结点指向当前链表的表头,便于返回表头。指针pre指向节点m-1,指针after指向m,指针cur指向m+1,从m+1到n的所有节点都使用头插法插入pre之后打个比方:m节点(小红) m+1节点(小明) n节点(小杨),请小明到小杨之间的同学(包括小明和小杨)依次插入小红的前面,首先你得知道小红在哪里,定位到小红前面一位同学,cur指针指向当前要插入的同学class Solution { public ListNode reverseB...

2021-11-20 16:12:43 251

原创 Http协议和Https协议

http 全称:超文本传输协议,常用于客户端与服务器之间的通信,其中请求资源方为客户端,响应资源方为服务端。(协议:双方在通信过程中定义的报文字段或者报文结构,类似语法)http从客户端开始建立通信,服务端在没有收到请求之前不会发送响应请求报文的构成:请求方法(get\post\put\delete\header\options)、请求URL、协议版本、可选的请求首部字段响应报文的构成:协议版本、状态码(表示请求成功或者失败的数字代码)、可选的首部字段、实体(响应内容)http是一种不保存.

2021-11-20 12:14:24 1559

原创 LeetCode206. 反转链表

思路1:迭代法(双指针)将原链表节点一个一个摘下,再用头插法插入新链表中,新链表为带头结点(哨兵节点)的带头链表,带头结点的好处是,方便返回链表的首节点。可参照代码和图一起看class Solution { public ListNode reverseList(ListNode head) {//边界判断,链表为空或者一个节点直接返回 if(head==null||head.next==null) { return .

2021-11-19 21:16:40 333

原创 LeeetCode142. 环形链表 II (环的起始位置)

思路如图public class Solution { public ListNode detectCycle(ListNode head) { ListNode fast=head; ListNode slow=head; while(fast!=null&&fast.next!=null) { fast=fast.next.next; slow=slow.ne

2021-11-14 11:43:22 191

原创 LeetCode141. 环形链表

思路:想象一下操场上两个人同时出发,一个人跑得快,一个人跑得慢,两人会再相遇【操场是个环】,不相遇则不存在环。快慢指针public class Solution { public boolean hasCycle(ListNode head) { ListNode fast=head; ListNode slow=head; while(fast!=null&&fast.next!=null) { ..

2021-11-14 09:56:44 181

原创 LeetCode 876. 链表的中间结点

思路一:两次遍历,先求长度再求中间数,超过时间限制class Solution { public ListNode middleNode(ListNode head) { ListNode temHead=head; int len=0; while(temHead!=null) { len++; } if(len%2==0) { le

2021-11-14 09:45:52 343

原创 LeetCode19. 删除链表的倒数第 N 个结点

和找出链表中倒数第k个节点相似思路1,两次遍历,并且找出需删除的目标节点的前1节点,将其指向该节点的下下节点。class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode temHead = head; int len=0; while(temHead!=null) { temHead=te...

2021-11-13 16:24:00 259

原创 剑指 Offer 22. 链表中倒数第k个节点

思路1:遍历两次,第一次获取链表长度,第二次找出该节点时间,2O(n)class Solution { public ListNode getKthFromEnd(ListNode head, int k) { if(head==null) return null; ListNode temHead=head; int len=0; while(temHead!=null) { ..

2021-11-13 11:58:37 44

原创 LeetCode 23. 合并K个升序链表

此题与合并两个有序链表解法相似;关键在于如何每次快速获得k个链表的最小节点;【优先队列,里面保存k个链表,链表的头结点都是该链表的最小节点】头结点的作用:保存链表表头,方便返回,dummy指向链表的尾节点注意点:队列传入的接口部分实现的比较方法class Solution { public ListNode mergeKLists(ListNode[] lists) { if(lists==null||lists.length==0) return...

2021-11-13 10:34:27 265

原创 剑指 Offer 27. 二叉树的镜像

思路:每个节点的左右孩子节点对换,最终返回根节点即可递归重点:1、终止条件2、递归公式3、返回值代码如下:class Solution { public TreeNode mirrorTree(TreeNode root) {//根节点为null直接返回 if(root==null) { return null; }//每一次递归操作 交换左右子节点 TreeNode tem =..

2021-11-10 22:01:40 200

原创 LeetCode 20. 有效的括号

给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。1、括号成对,字符个数单数肯定不符合。2、遇见左括号("(","[","{")入栈,遇见右括号 ")","]","}")出栈开始配对,栈内不可能存在右括号,如果栈内存在右括号一定匹配失败3、利用map维护右括号与左括号的成对映射,当然不使用map也可以public class Solution {..

2021-11-09 21:58:01 4593

原创 LeetCode415. 字符串相加

题意不允许使用BigInteger或者BigDecimal来存储两数和,要不还是比较简单的,而使用Integer或者Long来存储两数和,则测试数据会发生溢出。思路:小学的竖式加法,按位相加,每次记录下进位和余数,进位计算【指针指向的个位数相加除以10】,余数计算【个位数相加+进位和】。用StringBuffer记录每一次的余数,最后反转。注意点:两数一长一短的情况,必定有一个数先加完,此时为避免指针索引溢出,因此赋值为0.直到两数“加完”。为方便理解,自己可以先在纸上验算一遍竖式加法。num

2021-11-08 21:33:10 156

原创 LeetCode21. 合并两个有序链表

解法1:迭代时间O(M+N) MN为链表长度,空间O(1)class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) {//边界判断 if(l1==null) return l2; if(l2==null) return l1; ListNode head=new ListNode(); ListN...

2021-11-07 11:57:02 51

原创 LeetCode160. 相交链表

思想:两个人的总路程相等,各自不论从哪个位置开始,如果相交,则必定相遇。如果不相交。则最后都走到终点此时为“null”。边界条件:1、A/B为null2、A、B在首节点相交

2021-11-07 11:33:24 54

原创 LeetCode 53. 最大子序和

解法1:暴力破解双循环,超时【原因重复计算累加和】解法2:滑动窗口

2021-11-07 09:50:07 56

原创 LeetCode 88. 合并两个有序数组

注意点:有序【题目为递增】思路:从前往后对比,将元素都合并到数组1中。边界:1、数组2无元素,不做操作2、数组1无元素,数组2迁移3、合并之后,数组2还有元素,依次迁移。数组1还有元素,不做操作...

2021-11-06 21:16:31 4088

原创 笔试题 模糊点记录

static和abstract是否可以共同修饰方法:用static声明方法表明这个方法在不生成类的实例时可直接被类调用,而abstract方法不能被调用,两者矛盾。抽象类定义:public abstract class People{}

2021-11-06 18:03:30 52

wps2019 搭配宏插件可免费使用宏功能,宏插件在主页的另一个资源

wps2019 搭配宏插件可免费使用宏功能,宏插件在主页的另一个资源

2022-12-08

WPS2019宏插件 WPS宏功能启用 WPS无法使用宏功能

安装wps2019,然后安装里面这个插件,安装时关闭wps即可

2022-12-08

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

TA关注的人

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