- 博客(87)
- 收藏
- 关注
原创 【5-Medium】最长回文数
对于一个子串而言,如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后,它仍然是个回文串。如果当前循环长度较大,则将其赋值给maxLen,将left赋值给begin。,那么 "ababa” 一定是回文串,这是因为它的首尾两个字母都是a。如果长度为2,则首尾一致的情况下,可以直接判断为回文。如果长度为3,则首尾一致的情况下,也可以直接判断回文。第二种情况是以当前那一位和下一位为中心向两边扩散。则将当前循环长度和存储的maxLen进行比较,如果长度为1,则本身就是字符串,形成自回文。
2024-08-26 16:46:20
413
原创 【3-Medium】无重复字符的最长子串
因为字符是确定的所以,我们可以new一个128长度的数组来当hashmap,键是字符的ascll码值,值是索引,代码如下。那我们就可以使用map存一下,从而可以快速拿到窗口中重复的字符的那一个索引。遍历数组的所有的区间,将满足题意区间长度的最大值返回。我们发现对于处理left,需要遍历left往后走。当string长度十分大的时候,一定会导致超时。区间不是重复的子串的时候该如何写代码。,请你找出其中不含有重复字符的。这两种的window的定义都是s的。下面看window的定义是s的。
2024-08-26 16:44:24
504
原创 模板方法模式
定义一个操作的算法骨架,将一些操作延迟到子类实现。Template Method使得子类可以在不改变算法结构的基础上即可重新定义算法的某些特定步骤其实该模式很简单,就是定义一个抽象类,然后定义一个抽象方法给子类去实现。处理器。
2024-08-24 13:41:11
244
原创 观察者模式
定义了对象之间的一对多依赖,让多个观察者监听同一个对象的行为,当该行为发生的时候,则做出一定的动作接下来以以下场景模拟:天气变化了,则发出提示天气模型。
2024-08-24 11:01:11
274
原创 状 态 模 式
优点减少if语句的嵌套,代码更加优雅将所有与行为相关状态的行为都放在一个类中,方便管理缺点如果状态很多的话,状态行为类的数量会增加可能会违反了开闭原则,因为增加了状态后,可能要修改上下文对象与策略模式的区别策略模式是将策略反转给用户决定使用状态模式可以理解为将策略内置在了对象中,根据状态切换不同的执行策略。
2024-08-23 10:46:27
587
原创 适配器模式
将一个类的接口转换为用户希望的另一个接口。这使得原本由于接口不兼容而不能一起工作的那些类就可以一起工作了接下来我们来模拟USB转接网线口,从而使电脑上网的案例网线接口。
2024-08-23 09:25:58
212
原创 建造者模式
我们发现,有车由四部分组成,这四部分可以是同一个工厂造出来的,所以我们可以结合一个抽象工厂模式,将产品制造交给工厂。组件工厂接口不好的组件工厂@Override@Override@Override@Override好的组件工厂@Override@Override@Override@Override改造CarBuilder具体制造商@Override@Override@Override@Override@Overrideif(
2024-08-22 09:04:18
313
原创 单例设计模式
线程A走到了注释A处,然后线程B抢占了CPU,这时候lAZYMAN还是null,所以线程B创建了一个lAZYMAN对象,然后线程A抢回CPU,它这时候已经在if语句里面了,箭在弦上不得不发,所以线程A也创建了一个lAZYMAN对象,导致单例模式被破坏,所以该实现方式线程不安全,我们发现这和我们没有加锁的时候的情形几乎一模一样。我们来看下一个版本,**缺点:**为方法加锁,确实保证了单例模式,但是我们都知道同步方法,锁的是LazyMan的Class类,所以我们得知这种方式可以保证单例模式的线程安全。
2024-08-21 13:36:28
728
原创 工厂设计模式
该设计模式解决的问题是:将类实例化的操作与使用对象的操作分开,让使用者不用知道具体参数就可以实例化出所需要的产品类,从而避免了在客户端代码中显式指定,实现了解耦。缺点:很难横向拓展,如果我后期需要加新的车型,需要改变原来的代码,不符合开闭原则(OOP七大原则)根据这两种维度分别设计了接口,抽象的工厂定义生产哪些产品族,具体的工厂具体实现自己的产品族。两个维度,第一个维度是产品族(路由器、手机),第二个维度是具体厂商(华为,小米)。缺点:当汽车类型很多的时候,会有很多很多很多各自的工厂,没有必要。
2024-08-21 10:35:53
1063
原创 什么是设计模式?
Design Pattern是前辈们对代码开发经验的总结与归纳,是解决特定问题的一系列解决方案。1995年,由GoF(Gang of Four)四人帮合作出版了《设计模式:可复用面向对象软件的基础》一书,一共收录了23种设计模式,人称Gof23设计模式。
2024-08-21 10:08:08
198
原创 【2-Medium】两数相加
经过观察可知,链表的第一位表示该数字的个位,第二位代表该数字的十位,以此类推。递归需要先将递归退出条件写出来,即两者都到尾部,先就简单看看我画的思路图。里面使用8个字节也就是64位,最大值也就是2^64-1,也就是。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。遇到这种链表的题,第一步就是将逻辑图画出来。这个思路其实和第二种递归的写法思路是一样的。的方式存储的,并且每个节点只能存储。测试的时候可能会出现100位的数字,1、将链表表示的数字算出来。
2024-08-20 14:14:49
413
原创 MySQL-开窗函数
今天来讲讲MySQL8的新特性开窗函数,特别高大上的词哈,其实开窗函数就是对某块具有特性的记录集合执行的特殊统计函数。怎么听着这么熟悉,这不就是聚合函数么,没错,开窗函数的本质功能和聚合函数是一致的,只不过开窗函数更强大更具灵活性,具体语法如下。可以看到两者的结果之间有一个区别,就是开窗函数返回了很多条数据,而普通的聚合函数只返回了四行数据,欲知为何,先将开窗函数改成以下指令。看起来还是有点复杂的,但其实用起来还是很简单的,下面以员工表为案例带大家初探门径,员工表数据如下。SQL的执行结果如下。
2024-08-20 11:19:27
595
原创 MySQL-递归查询
相信大家在平时开发的时候都遇见过以下这种树形数据这种树形数据如何落库应该这里就不赘述了核心就是使用额外一个字段parent_id保存父亲节点的id,如下图所示这里的classpath指的是当前节点的路径,后续说明其作用现有需求如下:1、查询指定id的分类节点的所有2、查询指定id的分类节点的所有3、查询整棵分类树,可指定。
2024-08-19 16:10:28
4697
原创 聊聊开源协议
开源协议是指允许其他人自由使用、修改和分发软件代码的法律许可证。它为开发者提供了自由选择软件分发和使用方式的权利。通过使用开源软件,开发者可以节省开发时间和成本,推动软件行业的创新和发展。同时,开源也促进了知识共享和社区合作,有助于建立一个开放和透明的软件开发生态系统。
2024-08-17 10:49:07
455
原创 如何快速使用docsify搭建个人博客?
Tips:这里的脚本必须在上面引入,不然会报错。当然,你现在应该没有这个中间的图片和文字。// 搜索标题的最大程级, 1 - 6。这个文件里面的内容就是封面的内容了。这个文件里面就是侧边栏的内容了。在工作目录下创建文件。在工作目录下创建文件。
2024-08-17 09:33:35
811
原创 Interrupt到底是何方神圣?
此方法也是线程类的成员方法,作用是返回打断标记。此方法是Thread的静态方法,作用是重置。是线程类的成员方法,作用是打断线程。Tips:在打断状态下,无法使用。使用此方法,会设置打断标记为。使用此方法,会设置打断标记为。使用此方法,会设置打断标记为。,但是不会影响线程继续运行。,并返回之前的打断标记。当线程正在运行的时候。
2024-08-17 09:28:44
631
原创 JUC-到底啥是锁?
很多人要去抢厕所,然后线程A(Old Value = 0 ,new Value =1)、B(Old Value = 0,new Value = 1)这两个人冲到了最前面,然后A率先和厕所的occupy比较(Compare)发现和oldValue一致,则将oldValue与厕所的occupy交换(And Swap),这时候B一看自己的oldValue与厕所的occupy(1)不一致,他很不甘心,但也只能在厕所外踱步(自旋),通常在等了一段时间后(设置最大自旋次数),骂出一句国粹后就离去了。
2024-08-16 16:30:52
1150
原创 Linux-Vim编辑器
基本上vim/vi分为三种使用模式,分别是命令模式(Command mode)、输入模式(Insert mode)、底线命令模式(Last Line mode)VIM是从vi发展出来的一个文本编辑器,代码补全,编译,及错误跳转等功能特别丰富。Linux中必须会使用vim。在此模式下,我们的光标会移动到最底下,就可以输入一些命令了。此状态下敲击键盘会被识别为命令,不会输入字符。用户刚刚启动vim,便进入了命令模式。这些操作和我们平时用的是一样的。在此模式下,可以使用以下按键。
2024-08-16 16:11:08
781
原创 JVM-内存分区
连接是将部分符号引用替换为直接引用,对于有些方法,JVM并不能判断它们的具体实现,只有在真正运行的时候,才可以根据实际类型进行连接,这就是动态连接。每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用都是为了支持方法调用过程中的动态连接。在JVM中,它的作用就是用来存储字节码指令的地址,提供给执行引擎去执行。橙色虚线包裹的就是线程共享的,被红色实现包裹的是线程隔离的。就是用来存储操作数的栈,这里的操作数大部分就是方法内的变量。java中的多态就是通过动态连接实现的。
2024-08-16 16:08:28
689
原创 JVM-类加载器
重写loadClass方法,双亲委派的逻辑就在这个方法中,但是我自定义的类加载器可以不这么写,也就破坏了双亲委派。市面上有三种JVM,不同的JVM对类加载器的实现是不同的,我们主要学习的并且使用的是Sun公司的HotSpot。**用户加载器(User ClassLoader):**用户自定义的加载器。这不仅破坏了双亲委派,并且证明了每个类加载器都有自己的命名空间。扩展类加载器、系统类加载器、用户加载器都是继承自。类的加载 ==》类的链接 ==》类的初始化。C++**编写的,是JVM自带的类加载器,
2024-08-16 16:06:53
663
原创 JVM-简介
在java中,将执行过程分为本地代码和远程代码两部分,本地代码是默认可信任的,而远程代码则被看做是不受信任的。 在jdk1.2的版本中,再次引进安全机制,增加了代码签名,不论是本地代码还是远程代码,都会按照用户的安全策略设定,由类加载器加载到JVM中权限不同的运行空间,来实现差异化的代码执行权限控制。 虚拟机为不同的类加载器载入的类提供不同的命名空间,命名空间由一系列唯一的名称组成,每一个被装载的类将有一个名字,这个命名空间是由ava虚拟机为每一个类装载器维护的,它们互相之间甚至不可见。
2024-08-16 16:02:07
716
原创 Dockerfile的CMD与ENTRYPOINT的区别
其实这就是CMD的特性,当我在启动容器的时候添加了一个CMD后。我们先来试一下构建以下这个Dockerfile,并运行。我们来看一下使用ENTRYPOINT会怎么样。指令被追加给了ENTRYPOINT定义的语句。我们尝试一下在启动的时候加入一些参数。可以发现,进入容器之后,就执行了。镜像中定义的CMD就被覆盖掉了。修改Dockerfile。我们发现容器并没有执行。可以发现,容器执行的是。
2024-08-16 14:49:53
376
原创 数组技巧-前缀和数组
小试身手:初三一班的数学期末成绩(满分120分)出来了,现将成绩乱序列表发于你,请你统计在。本质和一维的时候是一样的只不过变成了二维,需要预处理一个二维前缀和数组而已。对于频繁计算数组的一个范围的和,学没过前缀和数组的会这样做,这样确实可以达到效果,但是频繁这样操作,效率不是很高。这样的思路确实没毛病,但是如果频繁需要查询,既然学了前缀和数组,我们就使用该技巧去优化。这是一道很典型的使用前缀和数组的题目。(前2个数的和减去前0个数的和)(前6个数的和减去前3个数的和)它的长度是原数组的长度加一。
2023-11-17 14:29:38
102
自己封装的和SpringBoot整合的代码生成器
2023-08-16
可以帮助出算法题的人快速生成测试用例
2023-08-16
RocketMQ事务消息
2023-08-21
MySQL崩溃恢复时跳过已刷盘页面
2023-08-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅