自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 5. 最长回文子串

当dp[i][j] =dp[i + 1][j - 1],当s[i] == s[j]的时候,很明显,dp[i][i]一定为1,因为一个字符,一定是回文子串。//动态规划过程,要先遍历列,再遍历行。因为dp[row][colunm]依赖于。这题使用dp,dp[i][j]=1代表字符串中以i下标开始,以j下标结尾的字符串是回文子串,//dp[row + 1][colunm - 1],所以要先遍历列,再遍历行。//习惯把String转为char[]//当前的回文子串长度为1。...

2022-08-09 16:42:28 159 1

原创 java中的阻塞队列和copyOnWriteArrayList

put流程分析:不允许加入null元素,c是代表队列的元素数量,count.getAndIncrement()会先返回count的价,然后count = count + 1。当前生产者线程生产完毕后,列队还有空位,由当前生产者唤醒其他的生产者线程。当队列只有一个元素的时候,生产者唤醒消费者线程,使用的是signal而非signalAll,每次都是唤醒一个而不是一群。使用两把锁,锁住的是头和尾,而不是锁住整个队列,这正是高明之处,所有的消费者,用一把锁,所有的生产者,用一把锁。...

2022-08-09 16:03:22 457

原创 Java中线程安全的集合

coucurrentMap每个方法都是原子的,但是几个方法的组合并不是原子的。进入下面的else,说明桶下标冲突了,此时需要对链表头节点加锁,fh >= 0,说明是普通节点,进行普通的插入流程即可,bigcount代表链表长度。ConcurrentHashMap不允许有空的键值,put的过程中,只有发生下标冲突,才会使用sync,而且锁的是桶的头节点。在扩容过程中,处理完毕的链表头节点置为fnode,表明此链表已经处理完毕。TreeBin是红黑树的头结点,TreeNode是红黑树的树节点。...

2022-08-09 15:19:17 579

原创 39. 组合总和-java

这是一道回溯的题目,深度优先搜索,难点是如何去掉重复的组合,对于[2,3,6,7] target = 7,[2,2,3]和[3,2,2]是重复的组合。在选数的时候给予限制,比如说第一个数选了3,第二个数只可以选3之后的数,即[6,7],如此可以限制重复的组合。//下一次的begin穿的是当前层数的i,意味着下一次选数只能从i之后的位置选。//避免出现重复的组合。//满足taget的一种组合数。//选数的下标是begin。//减枝,肯定不满足。...

2022-08-05 11:12:20 169

原创 105. 从前序与中序遍历序列构造二叉树-java

/递归返回条件,当前序数组的长度或者中序数组的长度为0的时候,返回null。//找到中序遍历中根的位置,作为分割点。

2022-08-05 10:22:36 254

原创 279. 完全平方数-java版本

这题可以使用动态规划来解决,首先求出小于等于n的所有平方数,以12为例,平方数是1,4,9。定义coins为完全平方数数组,定义dp[i]组成i需要的最少完全平方数,那么。

2022-08-05 09:25:14 221

原创 java自定义线程池

2022-07-09 12:47:26 163 1

原创 java的aqs

asq模板实现锁

2022-07-08 11:25:43 74

原创 94. 二叉树的中序遍历

中序遍历就是:左根右

2022-06-23 15:43:32 73

原创 lc155-最小栈

使用辅助栈存储栈的数据栈最小值,数据栈入栈出栈的时候,辅助栈要对应入栈出栈。Java的Interger比较,不要使用"=="。

2022-06-23 15:25:08 121

原创 448. 找到所有数组中消失的数字

利用鸽巢原理,第一次遍历。对于每一个nums[i],在nums[nums[i] - 1]上加n用来标识nums[i]的存在,加上n之后,nums[nums[i] - 1]一定>n。第二次遍历,不大于n的话就知道哪个数不在数组中:

2022-06-23 14:57:07 68

原创 338. 比特位计数

简单的动态规划:如果 i是双数,那么i的二进制位数和i / 2 的二进制数一致,否则是i / 2的二进制位数加1

2022-06-23 12:36:28 96

原创 lc226反转二叉树

可以用递归或者层次遍历:递归的话就是先反转左右孩子,然后反转跟,层次遍历就直接遍历,反转就完了。

2022-06-23 12:28:12 67

原创 lc617-合并二叉树

用广度优先搜素,用三个队列,q存合并后的节点,q1存root1的节点,q2存root2的节点,同步遍历。

2022-06-23 12:15:13 63

原创 用java写点题-lc461. 汉明距离

这题用到了异或,二进制位的不同其实,就是求 x和y异或之后的结果s的二进制数有多少个1.

2022-06-22 17:57:56 79

原创 用java写点题-lc141. 环形链表

直接用set就行,如果set.add返回false,说明节点引用已经存在set中了!

2022-06-22 15:27:33 62

原创 java写点题-lc136. 只出现一次的数字

有个知识点,相同的数异或为0 直接异或解决:

2022-06-22 14:56:20 55

原创 用java写点题-lc121. 买卖股票的最佳时机

要点是卖的日子要在买的日子的前面,每一次遍历都要记录当前找到的最小值,然后用当前股票价格减去最小值看看利润是否最大。

2022-06-22 14:25:06 176

原创 用java写点题-lc104. 二叉树的最大深度

直接递归就完事了,最大深度其实和求二叉树深度没啥区别,每次递归都取高度最高的子树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, Tr

2022-06-22 14:14:35 108

原创 用java刷点题-lc101. 对称二叉树

从c++转向java后,用java写题是为了增加手感,毕竟java的集合类使用需要适应。此题可以使用队列进行广度优先搜素:把root入队两遍,然后两个root出队,出队的时候对比root的左(右)孩子和另一个root的右(左)孩子是不是一样的值,是就入队孩子,不是就直接返回false。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * Tree

2022-06-22 13:33:15 208

原创 Java并发

2022-06-13 21:46:13 46

原创 实现简易rpc框架-(4)使用nacos作注册中心

在上一篇中,服务的地址是写死在代码中的,这很不好,对于客户端,只能去寻找这么一个服务提供者,假设这个提供者宕机了,或者换地址了,那就无法正常调用。nacos是分布式框架里面的一个重要组件,所有的服务端在nacos中注册自己拥有的服务,客户端在进行rpc调用的时候,nacos负责返回一个可用的服务地址供客户端调用。nacos还起到负载均衡的作用,因为在部署的时候一般是分布式部署,假设某服务部署在两台服务器上,在服务调用的时候,nacos可以使用轮询的算法处理请求,不至于让某一台服务器的处理过多的远程调用。为了

2022-06-11 11:44:25 1648

原创 实现简易rp框架(完结)-实现服务注销和负载均衡

在RpcServer关闭的时候,要清除nacos中对应的服务信息。由于不知道服务器什么什么时候关闭,所以需要钩子函数。执行在某些事件之后的函数就叫钩子函数,把注销服务的方法写入系统关闭的钩子函数就可以起到善后的工作。实现nacos的一个工具类:NacosUtil,今后nacos服务注册和服务发现都要借助这个工具类中,所有的服务名都会被存在NacosUtil的成员变量serviceNames中,当RpcServer关闭的时候,遍历这个set,调用 namingService.deregisterInstanc

2022-06-09 16:44:12 122

原创 实现简易rpc框架3-使用netty作为网络框架

在上一小节中,使用原生的block io来进行网络传输。本节使用效率更高的noblock io来代替之,netty是优秀的异步网络框架。netty的网络库思想极为优秀,c++的muduo网络库的源码正是借鉴了netty的网络模型。如下图,一个典型的多reactor模型,每一个线程都是一个事件循环,主线程负责监听文件描述符,当有请求来临的收,把请求分发给其他的子反应堆,子反应堆负责对请求的处理,从socket的接受缓冲区里把数据往用户接受缓冲区里面搬运,直到把socket接受缓冲区里的数据办完为止。然后就是对

2022-06-09 12:52:45 158

原创 快速入门netty

如果说学过网络编程,其实netty入门使用并不难,我本身学过一些netty的使用,但是久不使用,有些忘记,故做此记录以待以后复习。pipeline:流水线,可以视为buffer里的数据会经过好几个加工过程,每个过程使用一个handler去加工,类似于做一道菜。write:把数据往文件描述符的发送缓冲区填充,但是没有马上发送。writeAndFlush:把数据往socket的发送缓冲区填充,并且清空缓冲区。 connect方法是异步非阻塞的,即主线程发起调用,真正执行connect的是nio线

2022-06-08 12:22:38 114

原创 实现简易的rpc框架-2注册多服务

在上一篇博客中,完成了一个极简的demo,其缺点也是显而易见,服务端只能注册一个服务,在实际工作中,这肯定是无法接受的,所以,本篇博文的目的在于实现多服务注册,并且,注册中心和服务端不应该集成在一起,这会使得系统耦合度太高。服务注册表注册表提供了两个功能:1服务注册到注册表中。2根据服务名获取服务实体实现用的是map和set,用map存储服务名和服务对象的对应关系,用set保存当前哪些对象被注册。获取服务对象直接用map查询。注册中心和服务端分开为了降低耦合度,在创建一个RpcServer的时候,传入一个服

2022-06-07 16:59:16 186

原创 实现简单的rpc框架-1

2022-06-07 13:17:13 291

原创 实现一个简单的rpc框架-------0序言

2022-06-06 22:56:07 156

原创 Java引用类型

2022-06-06 21:57:18 30

原创 类加载过程

2022-06-06 21:21:37 26

原创 java中内存溢出

2022-06-06 12:35:18 256

原创 垃圾回收器

2022-06-06 11:59:24 24

原创 三色标记法

2022-06-05 23:28:58 32

原创 jvm垃圾回收算法

2022-06-05 23:15:39 36

原创 jvm初见面

2022-06-05 16:37:16 42

原创 spring三级缓存解决有代理的循环依赖

2022-06-05 16:03:59 218

原创 spring中的循环依赖

2022-06-05 11:41:45 33

原创 @Configuration注解

2022-06-04 17:12:48 467

原创 Bean的Scope

import org.springframework.context.annotation.CommonAnnotationBeanPostProcessor;import org.springframework.context.support.GenericApplicationContext;import org.springframework.mock.web.*;import org.springframework.web.context.request.RequestContextHold.

2022-05-29 11:38:30 177

原创 常见的后处理器

import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator;import org.springframework.beans.factory.annotation.Autowired;import org.spring

2022-05-28 22:05:01 258

空空如也

空空如也

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

TA关注的人

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