<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[a6694792的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/a6694792</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; a6694792]]></copyright><item><title><![CDATA[[Erlang]AC自动机过滤屏蔽词]]></title><link>https://blog.csdn.net/a6694792/article/details/128725384</link><guid>https://blog.csdn.net/a6694792/article/details/128725384</guid><author>a6694792</author><pubDate>Wed, 18 Jan 2023 13:30:21 +0800</pubDate><description><![CDATA[通过Erlang实现的AC自动机，可用于高效率进行屏蔽词替换匹配等操作]]></description><category></category></item><item><title><![CDATA[springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions]]></title><link>https://blog.csdn.net/a6694792/article/details/119421248</link><guid>https://blog.csdn.net/a6694792/article/details/119421248</guid><author>a6694792</author><pubDate>Thu, 05 Aug 2021 16:29:54 +0800</pubDate><description><![CDATA[springboot ElasticSearch配置自定义转换器ElasticsearchCustomConversions
问题场景
在将Timestamp类型存进Elasticsearc后，将其取出时抛出异常。从提示中可以看出缺少从Long转换到Timestamp的类型转换器。

原理及分析
在spring-data-elasticsearch中，java对象到json的互相转换是通过ElasticsearchConverter来进行的。使用springboot的自动配置机制能够快速地完成elastic]]></description><category></category></item><item><title><![CDATA[springboot-data-mongodb 使用autoconfiguration如何添加自定义Converter]]></title><link>https://blog.csdn.net/a6694792/article/details/119154351</link><guid>https://blog.csdn.net/a6694792/article/details/119154351</guid><author>a6694792</author><pubDate>Tue, 27 Jul 2021 22:20:59 +0800</pubDate><description><![CDATA[springboot-data-mongodb 使用autoconfiguration如何添加自定义Converter
在使用spirng-data-mongodb的自动配置时，默认会启用mappingMongoConverter，其中附带了许多类型转换器，供向数据库中插入或读取数据时做类型转换。读取数据时首先会从mongodb中读取数据并构造为java中的对应的类型，随后再将其转换为实体对象，mappingMongoConverter就是提供这项功能的。当mappingMongoConverter遇到无法]]></description><category></category></item><item><title><![CDATA[树莓派GPIO驱动ST7735S主控TFT液晶屏显示图片和文字]]></title><link>https://blog.csdn.net/a6694792/article/details/109100302</link><guid>https://blog.csdn.net/a6694792/article/details/109100302</guid><author>a6694792</author><pubDate>Thu, 15 Oct 2020 16:43:53 +0800</pubDate><description><![CDATA[本文使用1.8‘’128*160RGB_TFT ST7735C主控的液晶屏来操作
参考blog：http://blog.mangolovecarrot.net/2017/03/05/raspi-study1102
文中使用同类型液晶屏显示了纯色和制作点阵来显示文字，但是这实在是太麻烦了。
本文主要介绍如何使用PIL库来辅助显示，想要了解更多细节建议先看原文。
PIL库的安装
sudo apt-get install python-pil python3-pil
代码
在原作者的代码上增加了两个函数，用于图片]]></description><category></category></item><item><title><![CDATA[基于Adafruit_SSD1306的ssd1306OLED局部刷新]]></title><link>https://blog.csdn.net/a6694792/article/details/108244602</link><guid>https://blog.csdn.net/a6694792/article/details/108244602</guid><author>a6694792</author><pubDate>Wed, 26 Aug 2020 17:48:54 +0800</pubDate><description><![CDATA[基于Adafruit_SSD1306的ssd1306OLED局部刷新
刚好最近在做树莓派项目的时候用到了Adafruit_SSD1306模块来控制ssd1306主控的显示屏，发现模块并没有提供局部刷新的方法。看了源码后发现在display方法中用到了列指针和页指针，于是修改了一下，给添加了局部刷新的方法。
连接方式如图，图片源于网络，侵删！

import Adafruit_SSD1306
from Adafruit_SSD1306 import SSD1306_COLUMNADDR
from Adafru]]></description><category></category></item><item><title><![CDATA[Python线程同步和GIL]]></title><link>https://blog.csdn.net/a6694792/article/details/107734918</link><guid>https://blog.csdn.net/a6694792/article/details/107734918</guid><author>a6694792</author><pubDate>Sat, 01 Aug 2020 18:32:08 +0800</pubDate><description><![CDATA[线程同步 for Python
在多线程程序中，当多个线程同时去访问修改一个资源，就会引发线程安全问题。例如两个线程同时做累加操作时，两个线程拿的都是增加前的值，并且增加后同时或先后进行覆盖，其中一个线程的操作就被覆盖了。这在程序设计中是相当危险的，往往会导致得到一个错误的结果。
Lock
同步锁，即阻塞锁，是线程同步比较常用的手段。同一个锁同一时间只有一个线程能够获取，只要有一个线程获取了锁，其他线程请求时就会阻塞，等待锁被释放。只要控制一个资源同时只有一个线程访问，就不会引发安全问题。
threadin]]></description><category></category></item><item><title><![CDATA[Python日志 logging模块用法]]></title><link>https://blog.csdn.net/a6694792/article/details/107696891</link><guid>https://blog.csdn.net/a6694792/article/details/107696891</guid><author>a6694792</author><pubDate>Thu, 30 Jul 2020 18:44:58 +0800</pubDate><description><![CDATA[logging模块
日志级别
logging中的日志级别是通过数值比较来进行的，可以是非下列表中的数值，但不推荐。




Level
value




CRITICAL
50


ERROR
40


WARNING
30,default


INFO
20


DEBUG
10


NOTSET
0


设置通知level后，低于该级别的日志信息都会被忽略。
使用log时需要传入上述级别参数
也可以直接使用下列方法
critical()	error()	waring()	info() 	debug()]]></description><category></category></item><item><title><![CDATA[Python多线程 threading]]></title><link>https://blog.csdn.net/a6694792/article/details/107687929</link><guid>https://blog.csdn.net/a6694792/article/details/107687929</guid><author>a6694792</author><pubDate>Thu, 30 Jul 2020 13:03:57 +0800</pubDate><description><![CDATA[Python多线程 threading
在很多程序设计问题中，都要求程序能够停下手头的工作，改为处理其他一些问题，再返回回来继续执行。可以通过多种途径达到这个目的。最开始的时候，那些掌握机器低级语言的程序员编写一些“中断服务例程”，主进程的暂停是通过硬件级的中断实现的。尽管这是一种有用的方法，但编出的程序很难移植，由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题，只要求将问题划分进入独立运行的程序片断中，使整个程序能更迅速地响应用户的请求  。
最开始，线程只是]]></description><category></category></item><item><title><![CDATA[并发和并行的区别]]></title><link>https://blog.csdn.net/a6694792/article/details/107644271</link><guid>https://blog.csdn.net/a6694792/article/details/107644271</guid><author>a6694792</author><pubDate>Tue, 28 Jul 2020 20:19:16 +0800</pubDate><description><![CDATA[并发
并发和并行的区别


并发：并发指的是，事件同时发生。就是接下来需要完成的事件，是一种情况。
​	比如一条只能同时经过一辆车的村道，如果同时有多辆车要通过，这就是一个并发的问题。现实中我们通常会使用排队的方式，让车辆一个一个通过。算法源于生活，队列是一种很常见的处理并发的方法。


并行：并行是指同时完成多个事件，是并发的一种处理手段。
​	在上面那个例子中，并行就是建条多车道，同时让多辆车通过。


并发
饭堂打饭模型
中午12点，开饭了，都涌向食堂，这就是一种并发。如果人很多，就是高并发。
1、队]]></description><category></category></item><item><title><![CDATA[Python模块化]]></title><link>https://blog.csdn.net/a6694792/article/details/107568233</link><guid>https://blog.csdn.net/a6694792/article/details/107568233</guid><author>a6694792</author><pubDate>Fri, 24 Jul 2020 19:36:35 +0800</pubDate><description><![CDATA[Python模块(Python Module)
一般来说，在编程语言中。包、库、模块都是指同一个概念，是一种代码的组织方式，将一种功能或若干种封装起来，供自己或他人使用。
Python中只有一种组织方式，称为模块。
module

Python中的模块module，指的是Python源代码文件
python中的一个类。模块导入后，会实例化一个module对象方便使用

package

包package是一种特殊的module
为了便利模块的组织，使用文件夹(目录)加__init__.py文件来作为包，包也]]></description><category></category></item><item><title><![CDATA[Python的异常(Python Exception)]]></title><link>https://blog.csdn.net/a6694792/article/details/107522677</link><guid>https://blog.csdn.net/a6694792/article/details/107522677</guid><author>a6694792</author><pubDate>Wed, 22 Jul 2020 20:38:01 +0800</pubDate><description><![CDATA[异常 Exception
错误

在编写代码时能够避免的
语法错误：未按照代码限制进行编写，或者手误拼错了变量名等
逻辑错误：思维方向出现了问题，算法不正确等。

异常

编写代码阶段无法避免的，与运行时环境相关的错误。例如打开的文件不存在，网络中断等。
异常是可追溯的，Python中使用Tranceback来追溯异常。

Python中的Exception

Python中提供了一系列异常类和try语句块来捕获和处理异常。
如果程序中触发了异常，当前函数未捕获则会向外抛出抛给调用者，直到被捕获或者抛到Py]]></description><category></category></item><item><title><![CDATA[Python描述器(Python Descriptors)]]></title><link>https://blog.csdn.net/a6694792/article/details/107495424</link><guid>https://blog.csdn.net/a6694792/article/details/107495424</guid><author>a6694792</author><pubDate>Tue, 21 Jul 2020 18:28:16 +0800</pubDate><description><![CDATA[描述器 Descriptors
定义

在Python中，类中实现了魔术方法__get__ __set__ __delete__三者中其一则称其为描述器。
当一个类的属性为描述器时，访问这些属性会受到以上三者的控制。

魔术方法
只有当实现的类作为一个类的属性时，以下方法才起作用
实现__get__方法则称为非数据描述器
实现__get__和其他二者其一称为数据描述器




方法
参数
作用




__get__
instance:属主实例 owner:属主类型
当实现类作为类属性时，通过类或者实例访问]]></description><category></category></item><item><title><![CDATA[Python实现双向链表]]></title><link>https://blog.csdn.net/a6694792/article/details/107433013</link><guid>https://blog.csdn.net/a6694792/article/details/107433013</guid><author>a6694792</author><pubDate>Sat, 18 Jul 2020 18:12:57 +0800</pubDate><description><![CDATA[Python双向链表
class DwLinkedList:
    class Node:
        """
        结点类 用于存放数值以及前后指针
        """

        def __init__(self, value, last, next=None):
            self.value = value
            self.last = last
            self.next = next

    def __init__(]]></description><category></category></item></channel></rss>