<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_20831785的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_20831785</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_20831785]]></copyright><item><title><![CDATA[easyexcel 导出excel]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/148422710</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/148422710</guid><author>qq_20831785</author><pubDate>Wed, 04 Jun 2025 11:01:58 +0800</pubDate><description><![CDATA[【代码】easyexcel 导出excel。]]></description><category></category></item><item><title><![CDATA[利用像素点替换照片指定颜色的部分]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/146179457</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/146179457</guid><author>qq_20831785</author><pubDate>Tue, 11 Mar 2025 15:04:04 +0800</pubDate><description><![CDATA[python 我有一张只有黑白两色的图片， 利用像素点判断， 扣出像素点颜色(16, 16, 16)数值以下且连续的区域的像素点集合，然后选择像素点集合大小大于500的，将这个集合将这个区域改成绿色。]]></description><category></category></item><item><title><![CDATA[nacos(三) 心跳检测原理]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/114456604</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/114456604</guid><author>qq_20831785</author><pubDate>Sat, 06 Mar 2021 21:15:58 +0800</pubDate><description><![CDATA[这篇文章主要针对nacos客户端的心跳检测。

在上一篇文章已提到注册服务的时候，碰到临时节点需要注册心跳检测

 	@Override
    public void registerInstance(String serviceName, String groupName, Instance instance) throws NacosException {

        if (instance.isEphemeral()) {//临时节点， 配置心跳检测
            BeatInfo]]></description><category></category></item><item><title><![CDATA[nacos(二) 服务发现原理]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/114295184</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/114295184</guid><author>qq_20831785</author><pubDate>Wed, 03 Mar 2021 21:04:54 +0800</pubDate><description><![CDATA[首先我们知道，使用nacos需要添加@EnableDiscoveryClient, 进入看看EnableDiscoveryClient的源码。
留意@Import(EnableDiscoveryClientImportSelector.class)，这是实现nacos自动注入的入口


/**
 * Annotation to enable a DiscoveryClient implementation.
 * @author Spencer Gibb
 */
@Target(ElementType.T.]]></description><category></category></item><item><title><![CDATA[nacos(一) 使用入门]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/114240004</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/114240004</guid><author>qq_20831785</author><pubDate>Sun, 28 Feb 2021 21:26:21 +0800</pubDate><description><![CDATA[引入依赖

  &lt;dependency&gt;
            &lt;groupId&gt;com.alibaba.cloud&lt;/groupId&gt;
            &lt;artifactId&gt;spring-cloud-starter-alibaba-nacos-discovery&lt;/artifactId&gt;
            &lt;version&gt;2.1.1.RELEASE&lt;/version&gt;
  &lt;/dependenc.]]></description><category></category></item><item><title><![CDATA[最后一个单词的长度]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/109436288</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/109436288</guid><author>qq_20831785</author><pubDate>Sun, 01 Nov 2020 20:44:42 +0800</pubDate><description><![CDATA[题目描述
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s，返回其最后一个单词的长度。如果字符串从左向右滚动显示，那么最后一个单词就是最后出现的单词。
如果不存在最后一个单词，请返回 0 。
说明：一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
 示例:
 输入: "Hello World"
 输出: 5

思路
这个题目比较简单， 分三步

如何定位最后一个空格出现的位置？
首先需要砍掉字符串末尾为空格的部分， 目的是确定最后一个单词的末位位置
第一步已经砍掉末尾为空格的部分， 只要从]]></description><category></category></item><item><title><![CDATA[组合总和]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/109392186</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/109392186</guid><author>qq_20831785</author><pubDate>Fri, 30 Oct 2020 20:32:17 +0800</pubDate><description><![CDATA[题目描述
给定一个数组 candidates 和一个目标数 target ，找出 candidates 中所有可以使数字和为 target 的组合。 candidates中的每个数字在每个组合中只能使用一次。
 说明： 所有数字（包括目标数）都是正整数。 解集不能包含重复的组合。
 示例 1: 
 输入: candidates = [10,1,2,7,6,1,5], target = 8, 
 所求解集为: [ [1, 7],[1, 2, 5], [2, 6], [1, 1, 6] ]
 
 示例 2: 
]]></description><category></category></item><item><title><![CDATA[实现 strStr()]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/109319468</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/109319468</guid><author>qq_20831785</author><pubDate>Tue, 27 Oct 2020 20:18:51 +0800</pubDate><description><![CDATA[题目描述
给定一个 haystack 字符串和一个 needle 字符串，在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在，则返回  -1。
 输入: haystack = "hello", needle = "ll"
 输出: 2

 输入: haystack = "aaaaa", needle = "bba"
 输出: -1

当 needle 是空字符串时，我们应当返回什么值呢？这是一个在面试中很好的问题。
对于本题而言，当 needle 是空字符串时]]></description><category></category></item><item><title><![CDATA[两两交换链表中的节点]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/109297622</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/109297622</guid><author>qq_20831785</author><pubDate>Mon, 26 Oct 2020 20:44:19 +0800</pubDate><description><![CDATA[题目描述
给定一个链表，两两交换其中相邻的节点，并返回交换后的链表。
你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
 输入：head = [1,2,3,4] 输出：[2,1,4,3]
 
 输入：head = [] 输出：[]
 
 输入：head = [1] 输出：[1]

思路
代码
public class Link2 {

	public static class ListNode {

		int val;
		ListNode next;

		ListNode() {
		}]]></description><category></category></item><item><title><![CDATA[leetcode-合并两个有序链表]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/109272314</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/109272314</guid><author>qq_20831785</author><pubDate>Sun, 25 Oct 2020 12:56:20 +0800</pubDate><description><![CDATA[题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
  输入：1-&gt;2-&gt;4, 1-&gt;3-&gt;4 
  输出：1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4

思路

两根指针 pointA 和 pointB 分别指向两个链表
如果pointA.val &gt;= pointB.val， pointB 指针对后移动一位
如果pointA.val &lt; pointB.val， pointA指针对后移动一位


实]]></description><category></category></item><item><title><![CDATA[v-bind和v-model详解]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/107306348</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/107306348</guid><author>qq_20831785</author><pubDate>Sun, 12 Jul 2020 22:14:06 +0800</pubDate><description><![CDATA[说明


v-bind用来绑定数据和属性以及表达式，简写’:’
// 绑定文本
&lt;p v-bind="message"&gt;&lt;/p&gt;
 
// 绑定属性
&lt;p :class="myClass"&gt;&lt;/p&gt;



v-model指令在表单控件元素上创建双向数据绑定
双向绑定 指的就是我们在js中的vue实例中的data与其渲染的dom元素上的内容保持一致，两者无论谁被改变，另一方也会相应的更新为相同的数据. 最基础的就是实现一个联动的效果
 &lt;input typ]]></description><category></category></item><item><title><![CDATA[Jaxb2实现JavaBean与xml互转]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/107158992</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/107158992</guid><author>qq_20831785</author><pubDate>Tue, 07 Jul 2020 08:34:03 +0800</pubDate><description><![CDATA[说明
JAXB（Java Architecture for XML Binding)是一个业界的标准，是一项可以根据XML Schema产生Java类的技术。该过程中，JAXB也提供了将XML实例文档反向生成Java对象树的方法，并能将Java对象树的内容重新写到 XML实例文档

@XmlRootElement 用于类级别的注解，对应xml的跟元素。通过name属性定义这个根节点的名称
@XmlAccessorType定义映射这个类中的何种类型都需要映射到xml。(如果不存在@XmlAccessorTyp]]></description><category></category></item><item><title><![CDATA[springboot JPA 带有复合主键table 实体类映射]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/107163911</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/107163911</guid><author>qq_20831785</author><pubDate>Mon, 06 Jul 2020 17:53:23 +0800</pubDate><description><![CDATA[流程

编写一个复合主键类 StudentCombineKey， 保证对应字段一致
通过@IdClass注释在实体中标注复合主键

table
CREATE TABLE t_student(
  student_id            INT(20),
  id_number             varchar2(50),
  create_time           timestap(50),
  age                   int(10),
  PRIMARY KEY (stu]]></description><category></category></item><item><title><![CDATA[python 迭代时删除列表元素]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/107093552</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/107093552</guid><author>qq_20831785</author><pubDate>Thu, 02 Jul 2020 21:51:46 +0800</pubDate><description><![CDATA[错误的删除方式


del var_name
list_a = [1, 2, 3, 4]

for index, item in enumerate(list_a):
    del item

print(list_a) # [1, 2, 3, 4]

del删除的只是变量，而不是数据，因此数组list_a内容不变


remove &amp; pop
list_a = [1, 2, 3, 4]

for index, item in enumerate(list_a):
    list_a.remov]]></description><category></category></item><item><title><![CDATA[python del释放内存]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/107073226</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/107073226</guid><author>qq_20831785</author><pubDate>Wed, 01 Jul 2020 22:34:30 +0800</pubDate><description><![CDATA[说明

del语句作用在变量上，而不是数据对象上
del删除的是变量，而不是数据
__del__是个特殊方法，它不会销毁实例
无论手动del还是等Python自动GC，都会调用到__del__

例子
class A:
    def __init__(self):
        print("__init__() ")

    def __del__(self):
        print("__del__()")


a = A()
b = a
del a
print("***********")]]></description><category></category></item><item><title><![CDATA[python 子类关系]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/107051211</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/107051211</guid><author>qq_20831785</author><pubDate>Tue, 30 Jun 2020 22:22:40 +0800</pubDate><description><![CDATA[说明

python为所有类提供一个__bases__属性，通过该属性可以查看该类的所有直接父类，该属性返回所有直接父类组成的元组
python为所有类提供了一个__subclasses__()方法，通过该方法可以查看该类的所有直接子类，该方法返回该类的所有子类组成的列表
子类继承父类的私有方法重写无效，公有方法可以重写，引用父类方法可用super()实现

来个特别的例子
from collections import Hashable
print(issubclass(list, object))   ]]></description><category></category></item><item><title><![CDATA[python tuple和list区别]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/107029604</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/107029604</guid><author>qq_20831785</author><pubDate>Mon, 29 Jun 2020 22:19:21 +0800</pubDate><description><![CDATA[说明

list和tuple是一种有序的集合
list可以随意添加和删除元素，tuple一旦初始化就不能修改
对于tuple, 如果对象包含对其他对象的引用，则这些其他对象可能是可变的并且可能会被修改; 但是，由不可变对象直接引用的对象集合不能更改
tuple是静态的固定大小的，而list是动态分配存储空间，自动扩容的

a_tuple = ("apple", "pear", "banana")
b_tuple = ([1, 2], [3, 4], [5, 6])

a_tuple[1] = 'purpos]]></description><category></category></item><item><title><![CDATA[python 类属性和实例属性]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/106910760</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/106910760</guid><author>qq_20831785</author><pubDate>Mon, 22 Jun 2020 22:29:55 +0800</pubDate><description><![CDATA[说明

类属性是类所特有的，所有实例共享这个类属性，类属性经常定义在类的开头，方法的外面
实例属性是一个类的实例所特有的，定义在__init__()里面

来一个栗子A
class A:
    x = 1 #类属性


class B(A):
    pass


class C(A):
    pass


B.x = 2
A.x = 3
print(A.x, B.x, C.x)
#3 2 3

为什么C.x=3, 而不是等于1？


类变量和实例变量在内部是通过类对象的字典( __dict__ 属性)]]></description><category></category></item><item><title><![CDATA[python bool布尔值你不知道的事！]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/106910087</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/106910087</guid><author>qq_20831785</author><pubDate>Mon, 22 Jun 2020 21:26:39 +0800</pubDate><description><![CDATA[看个栗子先
mixed_list = [False, 1, 3, True, 5]
integer_sum = 0
bool_sum = 0

for item in mixed_list:
    if isinstance(item, int):
        integer_sum += 1
    elif isinstance(item, bool):
        bool_sum += 1

print(integer_sum) # 5
print(bool_sum)    # 0

为什]]></description><category></category></item><item><title><![CDATA[python 闭包，你必须知道的坑！]]></title><link>https://blog.youkuaiyun.com/qq_20831785/article/details/106892263</link><guid>https://blog.youkuaiyun.com/qq_20831785/article/details/106892263</guid><author>qq_20831785</author><pubDate>Sun, 21 Jun 2020 23:00:16 +0800</pubDate><description><![CDATA[funcs = []
result_list = []
for x in range(3):
    def do_some():
        return x
    funcs.append(do_some)
    result_list.append(do_some())  # 注意这里函数被执行了

funcs_result_list = [func() for func in funcs]

很多人以为result_list和funcs_result_list的结果是一样的，都是[0, 1,]]></description><category></category></item></channel></rss>