自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 147. 对链表进行插入排序

因为last及其之前的节点都已经是有序的了,那么我们就从dummyHead向后寻找那个位置,即pre(初始为dummyHead,逐渐向后寻找).next.val <= cur.val。(2)last.val > cur.val 此时需要将cur向前进行插入,那么我们需要寻找插入的位置。如果说(1)last.val <= cur.val 那么我们不需要进行排序,继续向后移动。首先我们使用两个指针,一个last和一个cur进行标记,比较他们两的大小。寻找到这个位置后,我们就可以进行一番操作。

2024-07-14 17:25:19 452

原创 leetcode 排序算法的稳定性

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i] = r[j],且 r[i] 在 r[j] 之前,而在排序后的序列中,r[i] 仍在 r[j] 之前,则称这种排序算法是稳定的;比如数列:[2, 2, 1],在选择排序中第一次进行交换时,原数列中的两个 2 的相对顺序就被改变了,因此,我们说选择排序是不稳定的。冒泡排序中,只有左边的数字大于右边的数字时才会发生交换,相等的数字之间不会发生交换,所以它是稳定的。

2024-07-14 17:16:17 483

原创 leetcode 153. 寻找旋转排序数组中的最小值

(1)如果中间元素比最后一个元素小,这说明:中间元素在最小元素的右侧(或就是中间元素);所以我们舍弃掉右半边的元素,保留左半边的元素。(2)如果中间元素比最后一个元素大,这说明:中间元素在最小元素的左侧(或就是中间元素);所以我们舍弃掉左半边元素,保留右半边的元素。然而,因为数组进行一定程度的旋转,所以可以使用二分查找吗?这就让我们想到了——二分查找的运用。时间复杂度为O(log n)对数组中最后一个元素进行考虑。

2024-07-13 23:22:23 284

原创 leetcode 283. 移动零

但是对于这一题而言,因为它需要交换的是0和另外一个非0数,所以我们可以直接覆盖0即可。最后再把0补上就行。用index记录已经覆盖到的位置,把从index到nums.length处的元素全部设为0即可。使用双指针:慢指针左边均为非0元素;快指针左边到左指针都为0。我们只需要不断的去交换这两个指针位置的元素即可。

2024-07-13 14:53:17 324

原创 leetcode 119. 杨辉三角 II

List接口包括Collection接口的所有方法。这是因为Collection是List的超级接口。,每次迭代依赖“上一行”的数据,迭代之后的数据覆盖“上一行”的数据,每次迭代计算时,在Java中,这题需要返回一个List,借此机会来回顾一下List的相关知识。如果给定的行数rowIndex小于2,则直接返回,否则需要进行。为了使用List接口的方法,我们可以使用以下这四个类。)的空间复杂度进行解题,那么我们只能创建一个大小为。的List<Integer>。思路:我们需要用O(

2024-07-12 20:29:07 163 1

原创 leetcode 209. 长度最小的子数组

它基本上用掉了4ms左右的时间,后面把它改成fori求和就快了很多,只需要1ms。(1)首先找到一个大于target的窗口,这个过程是右窗口移动;1、暴力解法,对于每个索引开始的子数组进行遍历,效率很差。(3)记录这个最窗口长度,然后将右窗口向右移动一格;一开始的时候还在思考为什么做出来这题时间如此糟糕,(2)试图缩小窗口,即将左窗口向右移动;对于这种情况,我们首先想到的是双指针。(0)判断总和是否大于target。(4)重复2-3,找到最小窗口。

2024-07-12 15:19:34 179

原创 leetcode 27. 移除元素

我们用快指针去找与目标值相同的值,用慢指针来呈现新的数组内容(索引)。

2024-07-12 14:04:20 177

原创 leetcode 28.找出字符串中第一个匹配项的下标

【代码】leetcode 28.找出字符串中第一个匹配项的下标。

2024-07-11 16:45:14 179

原创 leetcode 151. 反转字符串中的单词

在进行分割后将它转换为一个List,使用List的反转方法。(很一般leetcode这个)2、多余的空格处理:String[] strs = s.split(" ");当我们进行处理的时候,碰到strs[i]为空的时候,跳过即可。1、前导、尾随空格的处理:s = s.trim();用于去除字符串两端的空白字符,非常方便。大幅提升了时间效率,也减小了内存消耗。

2024-07-11 16:19:28 177

原创 leetcode 5.最长回文子串

该函数结合奇数和偶数情况,对中心两侧的字符进行检查,以获取回文串的最大长度。在获取了最大长度后,加之中心字符的索引,我们就可以得到该回文字符串。这里需要注意返回的内容是right - left -1;1、奇数长度回文,以一个字符作为中心。2、偶数长度回文,以两个字符作为中心。如果不理解可以随手画个图感受一下。

2024-07-11 15:43:14 142

原创 leetcode 14.最长公共前缀

1、将第一个字符串拿出来,找它和下一个字符串的前缀交集,然后保存;再将保存的字符串和下一个继续进行比较,直到最后结束。然后对比每一个字符串的第i个字符是否相等,直到比较到不相等的时候退出循环,返回子串。2、纵向对比法,先找出最短的字符串,最长公共前缀长度一定小于等于这个字符串的长度。这种方法为横向对比法,效率很低。

2024-07-10 15:59:31 91

原创 java中字符串的比较和连接

s2是s1的另一个引用。如果使用==进行检查。

2024-07-10 15:18:18 61

原创 对角线遍历

例如:(1)坐标和为偶数,起始位置j = max(0,k - m + 1)3、坐标之和为奇数时从右上向左下放入数组;为偶数时从左下到右上放入数组。(2)坐标和为奇数,起始位置i = max(0,k - n + 1)1、每条对角线上的元素坐标之和相同为k = i + j,且递增。2、需要遍历的次数为m + n - 1条对角线。4、找出每条对角线开始元素的坐标。

2024-07-10 15:12:37 172

原创 n*n矩阵旋转-leetcode 48

这里还有一个知识点,不借助额外的存储空间,将int a和int b的值进行交换。那我们的思路:原第i行对应新第n-1-i列;原第j列对应新第j行(倒序)。最后a = 1 ^ 2 ^ 1 = 1 ^ 1 ^ 2 = 2。实际上我们就使用前面半句话即可,原第i行对应新第n-1-i列。如果不是n*n矩阵而是一个普通的矩阵,其次b = 1 ^ 2 ^ 2 = 1。且异或运算具有交换律和结合律。首先a = 1 ^ 2。1、顺时针旋转90度。2、逆时针旋转90度。

2024-07-09 17:21:37 104

原创 【2024项目实训】千帆大模型 ERNIE-Character-8K 客服对话文档分析

除此之外,还有各种系统内的功能,ai经过学习后,就可以对用户的问题进行回答(有些不太聪明)。"(3)如果用户所需的功能系统中不存在,请回答:功能暂未开放,敬请期待!"(4)如果用户需要订票的话,请推荐他去系统中的“机票”或“火车票”功能" +"(5)如果用户需要小红书推文,请推荐他去系统中的“po文生成”" +"(6)如果用户需要旅游推荐的话,请推荐他去用户下面的各种推荐生成""(1)知道这些功能,并能根据用户的需要给他们推荐相应的功能" +"(2)对用户的简单问题进行回答" +

2024-06-23 17:19:26 271

原创 【2024项目实训】千帆大模型 - 天气插件的调用

如果我们需要达成像app那样的:风力及方向、湿度、体感等,我们都可以在prompt中进行设置并保存为模板,进行重复使用。下面我会给出一个城市,请你默认给出它近三天的天气状况(如果没有要求近几天),你的回答需要包括:温度、风力等级...,这相当于对场景进行预设,这样我们在调用的时候就不需要在代码中引入提示词,可以降低代码的耦合度;在这里我已经配置好了一个自定义的插件,在这个插件内部使用了文心一言内置的天气插件;(1)影响输出文本的多样性,取值越大,生成文本的多样性越强。(2)取值范围 [0, 1.0]

2024-06-22 15:14:26 182

原创 word转pdf 错误 未定义书签的解决办法

2024-06-04 19:43:03 156

原创 【2024项目实训】ERNIE-3.5-8K 千帆大模型API调用

最后返回给我们的是ai的回答,我们将这个回答进行一些处理之后就可以直接输出了。在百度智能云中,千帆大模型平台的文档,找到ERNIE-3.5-8K。应用接入部分,可以找到API Key和Secret Key。而在messages中,必填的有role和content。boby中,必填的参数是messages。获取到唯一的access_token。通过该token对API进行访问;

2024-05-29 17:28:25 200

原创 多线程相关——线程安全(大部分都比较难)

当调用method1时,在线程中会产生一个Lock Record,其中Object reference指向Object对象,Lock record的地址是用来替换Object中的地址的(CAS操作——保证在修改数据的时候是原子操作)。在创建一个线程时,会创建一块工作内存,且其他线程无法访问这一部分,所以不存在线程安全问题。Compare And Swap(CAS),它体现的一种乐观锁的思想,在无锁的情况下保证。synchronized锁是对象锁,是一种互斥锁,最多只有一个对象持有它。

2024-05-29 17:13:19 411

原创 多线程相关——线程基础

3、wait调用必须先获取锁,wait执行后会释放锁,sleep如果在synchronized中执行不会释放对象锁。重写了call方法,但是在实现接口时需要指定一个泛型,重写的call方法的返回值必须和泛型的类型一致;使用方法:首先创建该类的对象,然后将它包装在Thread类中,最后调用start方法。1、wait是Object的成员方法,sleep是Thread的静态方法。实现了Runnable接口,重写了run方法,但是使用方法不一样。2、不同进程使用不同的内存,同一个进程下的线程共享内存。

2024-05-29 17:12:48 294

原创 【2024项目实训】消息中间件篇-Kafka

如上图,p1分区中我们已经消费了0-4的消息,那么此时的偏移量就是5,所以我们继续从5获取消息。1、生产者发送消息,从linux的用户空间发起,但是用户空间没有权限对硬件进行操作。到内核空间中去处理,内核空间中存在页缓存,消息到达一定的批次后,批量发送给磁盘。topic分区中的消息只能由一个消费者进行消费,所以消息肯定是按顺序处理的。key可以决定消息存储在哪个分区,我们只需要将key设置为相同的值就可以了。即:如果消费者2消费到5,但是只提交到了3,中间的消息就会被重复消费。

2024-05-29 17:12:06 563

原创 【2024项目实训】消息中间件篇-RabbitMQ

但是它存在一个问题:即主节点还没有给镜像节点备份就宕机了,这时候消息就丢失了。现在消费者消费了某个消息,但这个ack还没有发送到MQ中时,就发生了宕机。它把消息存储在磁盘中,只有需要消费队列时才从磁盘中读取,但是性能会差一些。MQ默认是内存存储消息,开启持久化功能可以确保缓存在MQ中的消息不丢失。这个时候ack未发送,消息仍然存储在MQ消息队列中,它会被重复消费。一般来说,在生产的环境下,提到高可用机制,就不得不提集群了。导致队列中的消息堆积,使消息成为死信,可能产生消息丢弃。

2024-05-29 17:11:04 320

原创 【2024项目实训】微服务篇-Spring Cloud

服务注册主要体现在:服务提供者需要把自己的数据注册到注册中心去。P必然存在(分布式系统节点之间肯定需要网络连接的,分区必然存在)如果注册中心一段时间没有收到微服务的心跳,则将其移出注册中心。最终一致性:无法保证强一致性,但是软状态结束后,保证数据一致。第二个模式AT——弥补XA模式资源锁定周期过长的缺陷(AP)路由策略(故障转移)+ 失败重试,查看日志分析——邮件告警。A:服务提供者的每个微服务,定期向注册中心发送心跳。TC——负责维护全局事务的状态,提交或回滚。2、token + redis(性能较好)

2024-05-29 17:10:28 439

原创 【2024项目实训】框架篇-Mybatis

两种方式:指定映射文件;指定包名,在这个mapper下面所有的映射文件都会进行加载。这里的session.flush() 在commit之前默认都会执行它。可以发现,第二次查询的时候没有执行sql语句,它是从缓存中直接拿的。而二级缓存的作用域在命名空间和mapper,不依赖session。第一个配置的操作:这里指定要操作的数据库,并且输入用户名和密码;它们属于不同的会话,所以在一级缓存下需要查询两次SQL。在Mybatis的核心配置文件中,将其注释解开。2、id,对应mapper接口中的方法的名称。

2024-05-29 17:09:53 159

原创 【2024项目实训】框架篇-Spring

了解了bean的生命周期后——我们能更好的了解Spring的框架、更好的理解Spring。假设账户1给账户2转账,此处运行后,账户1扣除转账金额,但是账户2没有获得转账。执行顺序:前端控制器——处理器映射器——处理器适配器——(处理器)——视图解析器。简而言之,就是实例化A需要B的对象,但是实例化B需要A的对象,循环依赖,AOP实现的事务,不能处理自己处理之后的异常,它只能处理被抛出的异常。从对象工厂中获取的对象可以创建代理对象(如果需要的话)或者普通对象。

2024-05-29 15:27:09 524

原创 【2024项目实训】Redis篇-其他问题

全量同步和增量同步 —— 判断是否是第一次同步 即主从节点记录的replid是否一致。主从复制、主从同步流程。

2024-05-29 15:25:45 139

原创 【2024项目实训】Redis篇-分布式锁

设置超时时间原因:防止业务超时或服务宕机——此时可以自动释放锁,避免死锁出现。每次加一个锁就给value值+1,释放一个锁就给value值-1;Q:redisson实现的分布式锁是可重入的吗?继续——redisson实现的分布式锁,它能实现。如果项目只是一个单体项目,这样是没问题的。属于本地锁,并不能锁住别的服务器上的线程。但是——项目一般会做成服务集群部署。redisson实现的分布式锁。setnx实现的分布式锁。的分布式锁才是可重入的。

2024-05-29 15:24:53 141

原创 【2024项目实训】Redis篇-缓存

fork即是复制主进程,将页表复制给子进程,此时主进程和子进程都可以对物理内存中的数据进行操作。的这段时间中(图中为50ms),如果有大量的对这个key的并发请求,这些请求会瞬间把DB压垮。的功能,我可以选择volatile-lru策略,对置顶的内容不进行ttl的设置,这样就可以达到置顶的效果啦!缺点1:对于每一个不在数据库内的结果,都将其存入缓存中,非常消耗缓存的内存。定期删除两种模式,每次删除的时间都很短,目的是尽可能减小对主进程的影响。Q:假如缓存过多,内存是有限的,内存被占满了怎么办?

2024-05-29 15:23:56 236

原创 C++语言程序设计01--怎么学C++

C++关于自学方面的笔记

2022-10-12 20:37:07 229 1

空空如也

空空如也

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

TA关注的人

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