自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MongoDB简单学习

传统的关系型数据库(如Mysql),在数据库操作的“三高”需求以及对应web2.0的网站需求面前,显得力不从心三高:具体的应用场景如:这些应用场景中,数据操作方面的共同特点是:对于这样的数据,我们更适合使用MongoDB来实现数据的存储。什么时候选择MongoDB ?在架构选型上,除了上述的三个特点外,如果你还犹豫是否要选择它?可以考虑以下的一些问题:应用不需要事务及复杂join支持新应用,需求会变,数据模型无法确定,想快速迭代开发应用需要2000-3000以上的读写QPS(更高也可以)应用需要TB甚

2024-10-25 10:26:33 1122

原创 JVM常用垃圾收集器

JDK8默认收集器( JDK1.8 默认使用的是 Parallel Scavenge + Parallel Old,如果指定了-XX:+UseParallelGC 参数,则默认指定了-XX:+UseParallelOldGC,可以使用-XX:-UseParallelOldGC 来禁用该功能)ZGC 可以将暂停时间控制在几毫秒以内,且暂停时间不受堆内存大小的影响,出现 Stop The World 的情况会更少,但代价是牺牲了一些吞吐量。不过,默认的垃圾回收器依然是 G1。各个垃圾收集器可以配合使用。

2024-03-19 19:51:14 929

原创 @Import注解作用

注解的作用就是往当前类注入一个Bean,方便当前类的后续方法调用该Bean,跟Bean的作用差不多。关于这个注解的作用,上网查找后发现理解的不是很明白,于是写了下面的Demo去理解。注解除了可以注入普通的Bean外,也可以注入实现了。理解springboot自动装配时,发现。

2024-03-13 16:57:33 210 1

原创 关于Mybaits缓存....

最近开发一个记录操作前后修改内容的功能,获取修改前数据比较简单,直接从数据库获取,记录修改后的功能也比较简单,直接将用户修改的内容封装成po对象,然后两个比对就可以了,问题就出在这。

2023-10-11 18:10:20 934

原创 使用AOP进行日志记录

我们现在的需求是将内容记录到该日志表内,所以我们需要记录的参数包括:操作编号、操作内容和备注,其他内容会自动生成。需求:我们需要对用户账号进行审批,停用或启用,并且审批时我们需要对指定接口进行日志记录,记录到一个表内,包括记录编号和操作内容以备注。因为不同的接口我们需要的参数不同,但是都需要操作的编号和备注,这些是前端传进来的内容,所以我们将编号和备注抽出来。,操作内容以及操作的状态和接口相关,所以我们只需要关心编号和备注。因为操作的内容和状态都是与接口有关,所以我们将他作为注解实现。数据库也是有内容的。

2023-09-13 18:09:20 291

原创 ssh脚本连接远程服务器

使用Mac电脑连接远程服务器,我们主要使用的是shell+expect的方式连接,具体语法可以找资料学习。该方式连接不同的ip时只需要编写不同的ip文件即可。expect文件内的。

2023-08-02 15:59:59 572

原创 ThreadLocal使用和原理

ThreadLocal是线程本地变量,用来解决并发下数据隔离性的问题,不能解决共享。他可以将一个变量拷贝的线程内,线程调用时再线程内进行使用,相当于给每个线程复制一个副本供各个线程使用。

2023-05-18 17:32:38 461

原创 Zookeeper基础和简单使用

是Apache Zookeeper 的 Java客户端库原生javaapiZkClientCurator:目的是为了简化Zookeeper客户端的使用。

2023-05-15 10:00:00 1248

原创 黏包和半包

在解码时读取出这个用于表明长度的字段,同时读取其他相关参数,即可知道最终需要的数据是什么样子的。(0xCAFE),第三个字节开始才是长度标识,长度表示长度为3个字节(0x00000C)第一次发送36k,第二次到第四次都是40k,最后一次是4k,这已经发生了粘包。客户端发送的消息直接,仔细看可以看到一个点,这个点就是我们的换行符。从0开始即为长度标识,长度标识长度为2个字节,从0开始即为长度标识,长度标识长度为3个字节,从0开始即为长度标识,长度标识长度为2个字节。长度标识(0x00000C)表示的是。

2023-05-13 09:15:46 431

原创 Netty基础

起点,对于 NIO 实现来讲,在 io.netty.channel.nio.AbstractNioByteChannel.NioByteUnsafe.read 方法中首次创建 ByteBuf 放入 pipeline(line 163 pipeline.fireChannelRead(byteBuf))入站 ByteBuf 处理原则。

2023-05-07 09:50:16 618

原创 JDK动态代理和Cglib动态代理原理与区别

jdk在调用第17次时一个方法生成一个代理类,而cglib会给生成一个代理类,对应两个fastClass,一个对应目标代理,一个对代理类代理,生成的代理类数目比jdk少。JDK生成的代理类,不会有源码阶段,直接到字节码,这个动态生成代理类并且直接到字节码的方式叫ASM。因为是代理,相当于是对目标类的方法重写,所以方法也不能被final修饰。内部实现,和jdk的区别,他可以做到不使用反射进行动态的代理。代理类是目标类的子类,所以目标类不能被final修饰,与JDK不同,可以针对很对进行代理。

2023-04-17 20:51:27 457

原创 ConcurrentHashMap实现原理(很详细)

1.7用的数组+链表,安全的方式为分段锁1.8用的数组+链表+红黑树,结构和HashMap一致,抛弃了分段锁,采用CAS+自旋以及Synchronized为什么key为null的时候会报错?因为如果key为null,无法分辨是key为null还是key无法找到返回为null,这在多线程下时模糊的。

2023-04-10 16:49:07 1585

原创 CAS简单理解

CAS是的缩写,比较并替换。内存地址V旧值A即将要更改的值BCAS在运行时,当且仅当线程1的内存地址V的值为10,此时线程1想要把V的值修改为11,所以此时A = 10,B=11但是在线程1提交之前,线程2抢先一步提交了,把V的值设置为11了,此时线程1将提交失败(因为A=10!= V=11)而后线程1重新获取内存地址V值,并重新计算要修改的值,假设将修改为12,那么此时V=11,A=11,B=12此时进行对别,V=A==11,所以提交成功,V被修改为12到此CAS操作完成。

2023-03-21 21:57:27 330 1

原创 AQS实现原理分析

AQS(AbstractQueuedSynchronizer)即抽象队列同步器,是一套可以实现同步锁机制的框架,是许多JUC内同步框架的基石。AQS通过一个FIFO的队列维护线程同步状态,实现类只需要继承该类,并重写指定方法既可以实现一套线程同步机制。

2023-03-20 22:26:53 325

原创 N皇后问题

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。八个皇后在8x8的棋盘上,要求他们放置的位置(两两)不能在同一行、同一列和同一斜线上,问有几种摆法。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。的矩形里,所谓的斜线和边的夹角为45°,那么可以得到,个皇后所在位置,那么两个皇后不在同一行和同一列,就是。

2023-03-15 11:33:39 353

原创 Head First设计模式---5.单例模式

由于单例类的构造函数是私有的, 而且绝大部分语言无法重写静态方法, 所以你需要想出仔细考虑模拟单例的方法。要么干脆不编写测试代码, 或者不使用单例模式。它的运作方式是这样的: 如果你创建了一个对象, 同时过一会儿后你决定再创建一个新对象, 此时你会获得之前已创建的对象, 而不是一个新对象。该方法可以创建一个新对象, 但如果该对象已经被创建, 则返回已有的对象。单例模式运用的可能比其他几种简单,通俗点理解就是,我这个对象只能存在一个。如果程序中的某个类对于所有客户端只有一个可用的实例, 可以使用单例模式。

2023-02-23 17:20:02 306

原创 Head First设计模式---4.工厂方法模式

当我们看到new关键字的时候,总是会想到“具体”,不过确实,当我们使用new的时候,的确是在实例化一个对象,所以用的确实是是实现,而不是接口。让我们看看具体是如何实现的。现在, 为工厂方法中的每种产品编写一个创建者子类, 然后在子类中重写工厂方法, 并将基本方法中的相关创建代码移动到工厂方法中。由于我们披萨店的生意太火爆了,我们需要加盟新的披萨店,制作新的口味的披萨来吸引顾客,这个时候我们该怎么设计呢?工厂方法将创建产品的代码与实际使用产品的代码分离, 从而能在不影响其他代码的情况下扩展产品创建部分代码。

2023-02-22 17:15:07 378

原创 Head First设计模式---3.装饰者模式

本店以迅速的扩张优势占领了附近的几条街,但是随着顾客的增多,我们需要一套更完善和流程的架构去应对咖啡的销售,所以我们需要更新我们的订单系统!类,其中不包含任何小料,当需要小料时,只需要将小料加入进来即可。是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。当每上市一种新的调料或者咖啡,我们就陷入了一种麻烦的循环中去。所以当我们是算钱的时候,是不是一层一层的委托给外面,就可以实现了呢?的结构图很相似, 因为两者都依赖递归组合来组织无限数量的对象。

2023-02-21 20:34:49 660

原创 Head First设计模式---2.观察者模式

观察者(Observer)模式,是一种行为型设计模式,允许你定义一种订阅机制,可以在对象事件发生时通知更多个“观察”该对象的其他对象,类似于“订阅—通知”

2023-02-20 19:36:16 263

原创 Head First设计模式---1.策略模式

换句话说,如果每次新的需求一来,都需要把某处的代码发生变化,那么你就可以确定,这部分的代码需要被抽取出来,和其他代码有稳定的部分。

2023-02-19 17:48:59 623

原创 单调栈---神奇的栈

首先这肯定是我们要写的,不过中间该怎么写?当然我们可以两个for循环使劲暴力,这个方法往往是很有效的,但是这个题数组的长度是10。),跑一会应该也能过,但是面试的时候面试官就该让你回去等通知了。我们平时用的栈多,但是我们一般用的是什么呢?用来做有效的括号匹配?还是用来记录我们的二叉树的节点?当i=2到i=5时,可以看到里面的变化,不断的将小的出栈,将大的进栈,不断的更新下标的差。这个题目不在详细讲了,上面的单调栈理解之后这个题解也是可以看懂的。那么单调栈有什么作用呢?通过对栈的理解,我们学习一个新的概念–

2023-02-16 16:01:59 224

原创 未来迷人绚烂

怎么说呢,我也层羡慕其他人的休闲时间,也羡慕他们说走就走的旅行,这个年纪该去外面看看,但是无奈,我们很幸运也很倒霉的是疫情赶上的一代,美好的青春三年也就过去了,我也该毕业了,但是也没人告诉过我大学生活会这么快,也许比较忙吧,每天都事情做,托小组的福,每天也在坚持学习,也学会了很多技能,虽然现在是个菜鸡但是已经比三年前的我好太多了,拿了些不知名的小奖项,在一个个算法题里挣扎,哈哈哈哈哈哈,不过也都是后话了,主要的目的还是为了找个理想的工作。找个好工作吧,让家里人骄傲,未来生活也会过的不错。

2023-01-23 15:45:54 137

原创 一种很新的求素数的方式

【代码】一种很新的求素数的方式。

2023-01-02 16:27:10 227 1

原创 没有思路的dfs

递归的思想,递归还是很好用的,但是老是想着遍历,害。

2023-01-02 16:26:34 101 1

原创 动态规划是个好东西:编辑距离

这道题正常来说,我们要考虑这个字符怎么换,长度不一怎么找…(因为当最后A[i]=B[j]的时候,是可以不用做操做的)这道题目让我狠狠的了解了动态规划,这玩意是真强。个字符编辑子距离的问题,根据上面的分析,那么。个字符编辑子距离的问题,根据上面的分析,那么。个字符编辑子距离的问题,根据上面的分析,那么。所以从A变成B的编辑距离应该就是。首先我们给定两个字符串A=那么我们定义一个dp数组。

2023-01-02 16:26:03 352

原创 双指针:环形链表II

所以我们可以理解为,在t时刻时相遇,那么quickly走过的距离一定是slow走过的距离的二倍。我们回到这个题目上,假设相遇时相遇点距离环起点的距离为m,相遇点距离链表头结点的距离为k,所以有x。这是我们常用的用快慢指针寻找是否有环的方法。由此我们可以引申为,是不是不论什么时候,在v。那么在经历相同时间内运行过的距离,x。答案很明显,是的,所以这道题目。设一开始slow的速度为v。,quickly的速度为v。

2023-01-02 16:22:20 551

原创 图的初体验

关于图的题目,基本上的思路就是,首先构造图的相连关系,给的数组表达的不清楚,我们需要清楚的知道,和a相连的都有谁,和b相连的都有谁…等待,如果有路径长度就在后面跟路径长度。先确定连通图//int[][] roads //构造连通图,如果有路径key就用就用List,int[0]为长连通状况,int[1]为路径长 Map < Integer , List < Integer > > map = new HashMap < >();}

2023-01-02 16:21:49 405

原创 分治算法:合并K个升序链表

我们这样想,既然是合并k个,那我们两个两个合并不就可以了吗!是的,这道题目的解法就是这样,像这样,我们把一个大的问题,分割成很多个子问题的思想,就是分治,那现在我们知道怎么写了,首先,他的合并方法肯定是上面的方法,关键在于怎么分割成两个两个的呢?那么我们把完整代码写一起,就是这个问题的解了。当然这个问题在题目的题解里有更巧妙的方法求,但是这个题目主要的思想还是分治,当我接触的分治算法初体验了。我们将题目所给的数组拆分,拆分成两个数组,不断的递归,让数组两个两个合并,再返回。合并K个升序链表我们怎么办呢?

2022-12-08 21:34:11 241

原创 排序算法:快速排序

快速排序是对冒泡排序的一种改进,他的基本思想是,先找一个基数,以基数为中心,将数组分成左边的数全部小于基数,右边的数全部大于基数。

2022-12-08 21:33:26 116

原创 图的初体验

关于图的题目,基本上的思路就是,首先构造图的相连关系,给的数组表达的不清楚,我们需要清楚的知道,和a相连的都有谁,和b相连的都有谁…等待,如果有路径长度就在后面跟路径长度。先确定连通图//int[][] roads //构造连通图,如果有路径key就用就用List,int[0]为长连通状况,int[1]为路径长 Map < Integer , List < Integer > > map = new HashMap < >();}

2022-12-08 21:32:33 530

原创 Arrays.sort()根据值大小对索引排序

我们不需要对他本身排序,但是我们想知道他排序之后的索引值怎么办?这时就需要一些骚操作了。该排序方法会根据比较器进行排序,如果没有写比较器,就是默认排序(由低到高)可以看到,此时的索引值如果映射到list内,list就是一个有序的列表。的排序,使用这个api是没有问题的。如果我们现在有个数组。,我们想对该数组进行。

2022-12-08 21:32:16 383

原创 滑动窗口:无重复字符的最长子串

该题是一个滑动窗口的题目,可以用传统的方式解决。

2022-12-08 21:31:05 138

原创 最小堆模拟

力扣318场周赛第三题,解法优先级队列模拟最小堆。

2022-11-13 21:06:30 136

原创 经典动态规划:最长递增子序列

每次处理一张扑克牌不是要找一个合适的牌堆顶来放吗,牌堆顶的牌不是有序吗,这就能用到二分查找了:用二分查找来搜索当前牌应放置的位置。因为10本身是一个,所以是1,9呢又比10小,所以也是1,2比前面的都小,所以也是1,那么5呢?比如说上述的扑克牌最终会被分成这样 5 堆(我们认为纸牌 A 的牌面是最大的,纸牌 2 的牌面是最小的)。,那我们从下标为0的数开始观察,看看有什么规律,为了方便,我们定义一个数组。是什么意思,结合案例我们知道,可以是不连续的,只要大就算。的结果,那么后面的应该是什么呢?

2022-11-13 21:05:41 984 1

原创 redis主从复制和集群搭建

可以看到,根据redis内置的算法,不同的键值被分到不同的槽位,有的是7004,有的7006有的7002,不过都是从节点的。同理,7002、7003、7004、7005、7006一样的配置,无非改一下ip地址和端口号之类的。准备两台服务器,两台服务器可以互相ping通,可以新建两个虚拟机,然后配置网络,此处不在演示。准备两台虚拟机之后,两台虚拟机安装redis,gcc编译之后我们开始配置redis集群。我们搭建的是三个主节点,三个从节点的集群。该命令会随机分配主节点和从节点。同主从复制,先有两个服务器。

2022-11-13 21:05:20 805

原创 Sping高级(源码)--- 1.6Aware接口

Aware接口提供了一种内置的注入手段,可以注入BeanFactory、ApplicationAware 接口用于注入一些与容器相关的信息,比如。

2022-11-05 16:52:27 519

原创 Sping高级(源码)--- 1.5BeanFactory后处理器

mapper1和mapper已经被解析到了。

2022-10-30 09:24:18 407

原创 Sping高级(源码)--- 1.4Bean后处理器

此时解析的内容挺多的,两个注解都解析了,但是还有一个部分没有解析,我们接着往上添加。可以看到,我们的结果是没问题的,解析了@Autowired的注解。@ConfigurationProperties解析。对Bean1添加toString()方法,添加测试类。另外,我们也可以得到哪些方法和参数上加了对应的注解。我们依次添加后处理器,查看后面解析的内容。我们先启动一次,看看里面都加载了什么。先解析,上面已经提到过,不再赘述。例子:后置处理器解析各个注解。注解全部解析,至于为什么。找到方法或参数上的注解。

2022-10-23 17:43:33 1104

原创 Sping高级(源码)--- 1.3Bean的生命周期

本例我们模仿spring的后处理器来设计。bean的生命周期可以分为四个阶段。springbean生命周期的案例。我们将通过下面的例子来说明。

2022-10-15 16:26:25 125

原创 Sping高级(源码)--- 1.容器和Bean

beanFactory不会做到的事:不会主动调用BeanFactory后处理器不会主动添加Bean后处理器不会主动初始化单例不会解析beanFactory,还不会解析。

2022-10-07 17:38:04 887

JVM思维导图,复习复习

JVM思维导图,复习复习

2023-03-08

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

TA关注的人

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