<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Lemon_man_的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/Lemon_man_</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Lemon_man_]]></copyright><item><title><![CDATA[RAG（检索增强生成）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/148380508</link><guid>https://blog.csdn.net/Lemon_man_/article/details/148380508</guid><author>Lemon_man_</author><pubDate>Mon, 02 Jun 2025 12:31:29 +0800</pubDate><description><![CDATA[当我们根据公司内的复杂文档开发一个项目的时候遇到一些问题我们直接去问大模型，大模型因为没有公司内相对应的文档数据所以它只会回答毫不相关的一些答案，这称之为“大模型出现了幻觉”，但当我们把问题和文档一起发送给大模型时，大模型就可以根据文档找出问题的解决答复数据但如果文档数据量很大的话大模型因为受限于接口接收数据量是不能接收的，这时Embedding模型的作用就显现出来了，我们先将文档切片，将切片数据一条条喂给Embedding大模型接着会产出一个固定长度的数组，接着将这些数据存储至专用的向量数据库。]]></description><category></category></item><item><title><![CDATA[逻辑过期策略+异步更新机制提高接口的高可用性的实践]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/146296516</link><guid>https://blog.csdn.net/Lemon_man_/article/details/146296516</guid><author>Lemon_man_</author><pubDate>Sun, 16 Mar 2025 16:57:37 +0800</pubDate><description><![CDATA[并且数据爬取逻辑被多个线程冗余执行多次完全是没必要的（数据过期时只需要一个线程执行数据爬取逻辑更新缓存即可）。后端爬虫爬取数据缓存至Redis中，前端通过查询接口展现爬取数据。优化后，接口响应速度从。对于Redis中的过期数据我们可以使用。于Redis当中由于Redis是。，且它能保证缓存中的数据都是。的问题，提升用户体验。，显著提升了系统性能。将新闻爬取数据缓存至。]]></description><category></category></item><item><title><![CDATA[基于Django创建一个WEB后端框架（DjangoRestFramework+MySQL)流程]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/146082413</link><guid>https://blog.csdn.net/Lemon_man_/article/details/146082413</guid><author>Lemon_man_</author><pubDate>Thu, 06 Mar 2025 23:00:40 +0800</pubDate><description><![CDATA[构建DjangoWeb后端框架]]></description><category></category></item><item><title><![CDATA[POI优化Excel录入]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/145710826</link><guid>https://blog.csdn.net/Lemon_man_/article/details/145710826</guid><author>Lemon_man_</author><pubDate>Tue, 18 Feb 2025 17:46:04 +0800</pubDate><description><![CDATA[选择2*N的原因是代码中获取的核心数为物理核心数，而实际上主机可以利用超线程技术将一个物理核心当做两个逻辑核心来使用，当我们想让CPU利用率达到100%时就可以设置2*N个线程数并将单词分为2*N份交给线程池中的线程处理同时减少了线程的上下文切换所带来的损耗。首先获取当前主机核心数N，因为大数据量单词录入属于IO密集型所以我们设置线程池的大小为2*N第二步我选择将List拆分为2*N接着放入线程池当中去执行单词录入任务基于此线程池中的多个线程可以对数据的录入进行并发操作大大提高了录入的效率。]]></description><category></category></item><item><title><![CDATA[docker部署SpringBoot项目简单流程]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/144990395</link><guid>https://blog.csdn.net/Lemon_man_/article/details/144990395</guid><author>Lemon_man_</author><pubDate>Sun, 02 Feb 2025 13:27:29 +0800</pubDate><description><![CDATA[docker部署SpringBoot前后端项目]]></description><category></category></item><item><title><![CDATA[Docker部署项目，Mysql数据库总是宕机并且上传数据全部被删除了]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/144987455</link><guid>https://blog.csdn.net/Lemon_man_/article/details/144987455</guid><author>Lemon_man_</author><pubDate>Tue, 07 Jan 2025 15:55:49 +0800</pubDate><description><![CDATA[数据库被攻击]]></description><category></category></item><item><title><![CDATA[算法——反转字符串中的单词（leetcode151）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/144216210</link><guid>https://blog.csdn.net/Lemon_man_/article/details/144216210</guid><author>Lemon_man_</author><pubDate>Tue, 03 Dec 2024 15:50:11 +0800</pubDate><description><![CDATA[这道题有点难度我是在学习了别人的解题过程之后才对这道题的解法逐渐清晰，其实我刚入手这道题的时候我的想法就是先去除空格、然后反转整个字符串接着反转字符串里的每个单词即可我明白思路但却一直做不出来，原因就在于怎样合适的去除空格，以及去除空格后我们存在怎样合适的字符串数据类型当中，然后就是怎样处理每个单词的反转，由于上述原因导致我一直碰壁后来经过学习才发现大体方向是对的只要注意细节即可成功解开。通过这个条件我们可以使新的字符串中各个单词之间只有一个空格接着我们返回新的字符串即可。]]></description><category></category></item><item><title><![CDATA[算法——反转字符串二（leetcode541）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/144156799</link><guid>https://blog.csdn.net/Lemon_man_/article/details/144156799</guid><author>Lemon_man_</author><pubDate>Sat, 30 Nov 2024 16:31:53 +0800</pubDate><description><![CDATA[这道题是反转字符串的进阶版关键就在于怎样去反转字符串长度为k的这样一个区间以及尾部字符串的处理，刚开始我想着只用一个while循环内部用一些变量来控制反转字符串区间的移动但总处理不好，后直接使用for循环+while内部反转的方式来反转整个字符串，for循环就是控制字段串翻转的起始位置指针，反转的区间末尾指针需要根据题目条件去判断如果剩余字符少于k个时就要特殊赋值为字符串的末尾位置防止字符串组越界。反转字符串处理逻辑可以使用中间变量temp也可以使用异或运算来进行可借鉴字符串反转的思路。]]></description><category></category></item><item><title><![CDATA[算法——反转字符串（leetcode344）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/144148348</link><guid>https://blog.csdn.net/Lemon_man_/article/details/144148348</guid><author>Lemon_man_</author><pubDate>Sat, 30 Nov 2024 00:25:19 +0800</pubDate><description><![CDATA[对于这道题我上来先想到的是通过一个temp来作为容器不断交换字符串数组两端的字符即可随即当我对于三数之和愁眉苦展之时换了一道题我竟然能在leetcode上秒了一道没见过的题比两数之和要快的多（dog）但查看其他同学的解法我还发现了更为巧妙的解法作为学习‘位运算’根据异或运算的特性实现字符的交换（自反律、恒等律、交换律、结合律等等）输入字符串以字符数组。、使用 O(1) 的额外空间解决这一问题。异或运算交换两个变量的值而不使用额外的空间。不要给另外的数组分配额外的空间，你必须。]]></description><category></category></item><item><title><![CDATA[算法——赎金信（leetcode383）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/144106753</link><guid>https://blog.csdn.net/Lemon_man_/article/details/144106753</guid><author>Lemon_man_</author><pubDate>Thu, 28 Nov 2024 11:42:30 +0800</pubDate><description><![CDATA[magazine中的每个字符只能对应ransomNote中的一个字符，看到这道题我首先想到使用map来存储magazine每个字符出现的个数字符作为key值接着使用ransomNote遍历每个字符在map中查找并进行value的自减操作如果map中有元素的值小于0的话那就代表ransomNote不能由magazine组成故返回false否则遍历完毕后返回true但使用map虽然能将题目解出来但map涉及数组、链表以及红黑树的转换比较耗时和占用空间所以本题的优质解法可采用数组来解决；]]></description><category></category></item><item><title><![CDATA[算法——四数相加 二（leetcode454）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/144094435</link><guid>https://blog.csdn.net/Lemon_man_/article/details/144094435</guid><author>Lemon_man_</author><pubDate>Wed, 27 Nov 2024 21:12:08 +0800</pubDate><description><![CDATA[解析:这道题就是找到nums1和nums2、nums3、nums4不同元素之和为0的记录和，我看到这道题时首先是使用暴力解法去解决的但会被某些用例卡住超出时限，故暴力解法是不可行的其思想便是一遍遍遍历4个数组中的元素之和从0,0,0,0到n-1,n-1,n-1,n-1符合条件的便记录下来最后返回即可。1、利用Map来存储nums1和nums2数组元素之和以及数组元素之和出现的次数前者为key后者为value。2、遍历nums3，nums4数组元素之和取相反数来索引上述Map的value累加至res变量中。]]></description><category></category></item><item><title><![CDATA[算法——两数之和（leetcode1）梦开始的地方]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143898843</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143898843</guid><author>Lemon_man_</author><pubDate>Wed, 20 Nov 2024 00:40:16 +0800</pubDate><description><![CDATA[分析题意可知我们选定一个数组元素时要再找到另一个不重复的元素两者之和要等于target并返回两个元素的下标由此除了暴力解法我们还可以想到Map的数据结构来存储元素key存储元素的值value存储元素的下标那么当我们遍历给定数组时只需要在Map中找到target-当前遍历的数组元素即可（同一元素不能重复使用）如果在Map中命中返回当前遍历的数组元素下标与Map的值即可。自己的解法（先将数组元素全部存储至Map中再索引Map并判断）整数，并返回它们的数组下标。，请你在该数组中找出。]]></description><category></category></item><item><title><![CDATA[算法——快乐数（leetcode202）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143898368</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143898368</guid><author>Lemon_man_</author><pubDate>Tue, 19 Nov 2024 23:44:30 +0800</pubDate><description><![CDATA[表明如果一个数不是快乐数那么它在后面的循环中是会重复出现之前的数字的所以每次我们得到平方和如果set中没有平方和的这个数则添加至set中否则直接返回false也就表明n不是快乐数；对于这道题我们只需按照题意每一次将该数替换为它每个位置上的数字的平方和并判断结果是否等于1如果等于1则n为快乐数否则继续循环，循环的终止条件在于题目上的。优质解法（时间复杂度O(logn)）我的解法（时间复杂度O(N)）编写一个算法来判断一个数。]]></description><category></category></item><item><title><![CDATA[算法——两个数组的交集（leetcode349）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143892797</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143892797</guid><author>Lemon_man_</author><pubDate>Tue, 19 Nov 2024 19:15:30 +0800</pubDate><description><![CDATA[4、遍历第二个数组找出元素值对应数组record下标的值是否大于0如果大于0就代表跟第一个数组中的元素重合也就是相交直接将元素值放入set中。2、将第一个数组遍历，在recored中将对应下标（遍历数组的元素值）+1此时record的值大于0的所有位置就存储了第一个数组中所有的值。对于这道题因为刚做过有效的字母异位词所以我还是想到用哈希表一个数组（数组下标代表题目给定数组元素的值）来解决这个问题。1、设定一个数组record因为数组元素的大小限制为0-1000共1001个元素故设置数组大小为1001。]]></description><category></category></item><item><title><![CDATA[算法——有效的字母异位词（leetcode242）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143892600</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143892600</guid><author>Lemon_man_</author><pubDate>Tue, 19 Nov 2024 18:52:48 +0800</pubDate><description><![CDATA[题目给定两个字符串判断这两个字符串是否是有效的字母异位词，这道题也就是判断重新排列字母组合时字母的种类和个数是否改变与原字母组合不同，因为字母一共有26个a~z对应的ASCLL码也是连续的所以我们可以使用哈希表的这种数据结构来解决这种问题，首先定义一个数组下标作为索引数组长度为26，我们无需关注字母的具体的ASCLL码的值只需让字母的ASCLL码减去'a'的ASCLL码即可让数组下标表示a~z；]]></description><category></category></item><item><title><![CDATA[并发学习小结一]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143888339</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143888339</guid><author>Lemon_man_</author><pubDate>Tue, 19 Nov 2024 16:29:41 +0800</pubDate><description><![CDATA[五、了解并熟练使用线程的各种API如start、run、interrupt、sleep、join等等。八、interrupt在线程运行时与阻塞时（sleep、join、wait）打断的区别。三、了解操作系统层面的线程5种状态和Java中jdk线程状态显示的6种状态。二、学会进程查看终止、线程查看工具jconsole的使用。一、理解并发、并行和同步、异步的概念以及区别。四、学会线程创建的三种方式并理解它们的区别。十、线程上下文切换的原理与栈帧的详细图解。六、理解设计模式两阶段终止。]]></description><category></category></item><item><title><![CDATA[算法——环形链表（leetcode141）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143881285</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143881285</guid><author>Lemon_man_</author><pubDate>Tue, 19 Nov 2024 12:49:40 +0800</pubDate><description><![CDATA[来解决，首先令快慢指针fastIndex、slowIndex等于head头节点,接着来一个循环 循环体是fastIndex步进两个单位slowIndex步进一个单位判断如果slowIndex等于fastIndex则是有环 因为fastIndex走的比slowIndex快所以如果链表无环那么fastIndex肯定最先遍历至链表的末尾，故循环条件是（fastIndex!判断一个链表是否是环形链表，这题可以用。]]></description><category></category></item><item><title><![CDATA[算法——删除链表的倒数第N个节点（leetcode19）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143866011</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143866011</guid><author>Lemon_man_</author><pubDate>Mon, 18 Nov 2024 20:41:47 +0800</pubDate><description><![CDATA[总结:快慢指针中的fastIndex向后移动n+1个单位后那么slowIndex与fastIndex之间的间隔节点数是固定的所以当fastIndex指向null的时候slowIndex所指向的位置也就是从fastIndex开始往后数第n+1个节点的位置也就是删除节点的前一个位置这样就可以巧妙的删除节点了。6、令cur指向需要删除节点的后一个节点即可也就是cur.next=cur.next.next。2、定义快慢指针fastIndex、slowIndex指向虚拟节点。要删除的链表正数第m个节点的前一个节点)]]></description><category></category></item><item><title><![CDATA[算法——链表相交（leetcode23）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143858024</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143858024</guid><author>Lemon_man_</author><pubDate>Mon, 18 Nov 2024 15:29:44 +0800</pubDate><description><![CDATA[null的时候p1、p2同时向后一个节点移动 如果p1等于null那么令p1指向链表B头结点接着同向移动即可,p2等于null时令p2指向链表A头结点，这样的话p1和p2在相交节点相遇之前走过的节点个数是相同的只要相交 p1必然会等于p2。也就是先遍历链表A和链表B的长度接着得到链表A和B长度的差值然后领长链表的指针指向差值后个节点此时链表A的指针与链表B的指针就同步了接着同步移动链表A指针p1和链表B指针p2即可直到p1==p2即找到相交节点返回即可。链表相交这题就是找出两个相交链表相交的节点并返回。]]></description><category></category></item><item><title><![CDATA[算法——两两交换链表中的节点（leetcode24）]]></title><link>https://blog.csdn.net/Lemon_man_/article/details/143838199</link><guid>https://blog.csdn.net/Lemon_man_/article/details/143838199</guid><author>Lemon_man_</author><pubDate>Sun, 17 Nov 2024 21:15:01 +0800</pubDate><description><![CDATA[这是一道对于链表节点进行操作的题目非常考验对于链表操作的基本功；]]></description><category></category></item></channel></rss>