<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[草根工厂——技术虐我千百遍，我依然待你如初恋]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lisemi</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lisemi]]></copyright><item><title><![CDATA[freetype裁剪、交叉编译]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/146174063</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/146174063</guid><author>lisemi</author><pubDate>Tue, 11 Mar 2025 11:58:41 +0800</pubDate><description><![CDATA[Freetype裁剪与交叉编译]]></description><category></category></item><item><title><![CDATA[LVGL直接解码png图片的方法]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/146094082</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/146094082</guid><author>lisemi</author><pubDate>Fri, 07 Mar 2025 14:09:10 +0800</pubDate><description><![CDATA[通过PNG解码器，允许在 LVGL 中使用 PNG 图像。]]></description><category></category></item><item><title><![CDATA[adb介绍及调试命令大全]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/141391865</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/141391865</guid><author>lisemi</author><pubDate>Wed, 21 Aug 2024 14:02:58 +0800</pubDate><description><![CDATA[文章来着github：https://github.com/mzlogin/awesome-adb]]></description><category></category></item><item><title><![CDATA[二分查找算法C++实现]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/114303395</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/114303395</guid><author>lisemi</author><pubDate>Wed, 03 Mar 2021 11:09:15 +0800</pubDate><description><![CDATA[二分查找（折半查找）：对于已排序，若无序，需要先排序


// 非递归
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;set&gt;
using namespace std;

/*
 * v：被查找数列
 * value：被查找的值
 * low：数列的最小下标
 * high：数列的最大下标
*/
int BinarySearch(const vector&lt;int&gt; v, int value, int low,.]]></description><category></category></item><item><title><![CDATA[NAT穿透技术、穿透原理和方法详解]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/97672734</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/97672734</guid><author>lisemi</author><pubDate>Mon, 03 Aug 2020 14:30:37 +0800</pubDate><description><![CDATA[1、NAT分类





1.1 基础型NAT

 仅将内网主机的私有IP地址转换成公网的IP地址，并不将TCP/UDP端口信息进行转换，分为静态NAT和动态NAT。



1.2 NAPT

 NAPT不但会改变经过这个NAT设备的IP数据报的IP地址，还会改变IP数据报的TCP/UDP端口。

1.2.1锥型NAT

完全锥型（Full Cone NAT）：在不同内...]]></description><category></category></item><item><title><![CDATA[设计模式《二十三》——迭代器模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/107269391</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/107269391</guid><author>lisemi</author><pubDate>Fri, 10 Jul 2020 21:33:11 +0800</pubDate><description><![CDATA[简介

 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。可以使用不同的方式来遍历整个整合对象。



角色与职责



Iterator：抽象迭代，定义访问和遍历元素的接口，一般都是固定接口：first，next，IsDone/last

ConcreteIterator：具体迭代器，实现迭代器接口，完成容器元素的遍历

Container：抽象容器，负责提供具体迭代器角色的接口，必然提供一个CreateIterator的方法。

ConcreteContainer...]]></description><category></category></item><item><title><![CDATA[设计模式《二十二》——解析器模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/107009011</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/107009011</guid><author>lisemi</author><pubDate>Sun, 28 Jun 2020 22:11:49 +0800</pubDate><description><![CDATA[简介

 给定一个语言，定义它的文法的一种表示，并定义一个解释器，这个解释器使用该表示来解释语言中的句子。即提供了评估语言的语法或表达式的方式

角色与职责



（1）Expression（抽象表达式）：声明一个抽象的解释操作，这个接口为抽象语法树中所有的节点所共享。

（2）TerminalExpression（终结符表达式）：实现与文法中的终结符相关联的解释操作。实现抽象表达式中所要求的接口，主要是一个interpreter（）方法。文法中每一个终结符都有一个具体终结表达式与之相对应。

...]]></description><category></category></item><item><title><![CDATA[设计模式《二十一》——状态模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106965841</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106965841</guid><author>lisemi</author><pubDate>Fri, 26 Jun 2020 09:09:09 +0800</pubDate><description><![CDATA[简介

当对象的内部状态改变时，同时改变其行为，对象看起来好像修改了它的类。其好处是可以通过改变状态来获得不同的行为。实现时需要将各种具体的状态类抽象出来。





角色与职责



State：实现类接口

ConcreteState：具体实现类

Context：实现切换。

实现


#include &lt;iostream&gt;
using namespace std;
class Worker;
class State {
public:
virtual void doSomeT...]]></description><category></category></item><item><title><![CDATA[设计模式《二十》——访问者模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106741908</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106741908</guid><author>lisemi</author><pubDate>Sun, 14 Jun 2020 09:07:26 +0800</pubDate><description><![CDATA[简介

 访问者模式，表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。例如，使用访问者类改变元素的执行算法，通过这种方式，元素的执行算法可以随着访问者改变而改变。



角色与职责



抽象访问者（Visitor）角色：声明了一个或者多个访问操作，形成所有的具体元素角色必须实现的接口。

具体访问者（ConcreteVisitor）角色：实现抽象访问者角色所声明的接口，也就是抽象访问者所声明的各个访问操作。

抽象节点（Element...]]></description><category></category></item><item><title><![CDATA[设计模式《十九》——备忘录模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106738132</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106738132</guid><author>lisemi</author><pubDate>Sat, 13 Jun 2020 21:08:04 +0800</pubDate><description><![CDATA[简介

在不破坏封装的前提下，捕获对象的内部状态，并在对象之外保存这个状态，以便在适当的时候恢复对象。



角色与职责



Originator：原始类，里面有需要保存的属性value及创建一个备忘录类，用来保存value值；

Memento：备忘录类；

CareTaker：存储备忘录的类，持有Memento类的实例。



实现


#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;
//需保存的信息
c..]]></description><category></category></item><item><title><![CDATA[设计模式《十八》——观察者模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106651896</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106651896</guid><author>lisemi</author><pubDate>Tue, 09 Jun 2020 21:55:07 +0800</pubDate><description><![CDATA[简介

 观察者模式：定义了一种一对多的依赖关系，让多个观察者对象同时监听某一主题对象，在主题对象的状态发生变化时，所有依赖于它的对象都得到主题对象的通知并被自动更新。



角色与职责



Subject（目标）

目标知道它的观察者。可以有任意多个观察者观察同一个目标；
	提供注册和删除观察者对象的接口。
Observer（观察者）

为那些在目标发生改变时需获得通知的对象定义一个更新接口。
ConcreteSubject（具体目标）

将有关状态存入各ConcreteObserver对...]]></description><category></category></item><item><title><![CDATA[设计模式《十七》——中介者模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106412966</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106412966</guid><author>lisemi</author><pubDate>Thu, 28 May 2020 20:40:28 +0800</pubDate><description><![CDATA[简介

 中介者模式类似现实生活中的房产中介，买房者通过中介与卖房者进行交流。其用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用，从而使其耦合松散，而且可以独立地改变它们之间的交互。

角色与职责



mediator：中介者抽象对象；

ConcreteMediator：中介者具体实现；

Colleague：同事类，同事类知道他的中介者(即持有中介者引用)，同事类之间需要通信时，需要与它的中介者通信。

实现


#include &lt;iostream&gt; 
...]]></description><category></category></item><item><title><![CDATA[设计模式《十六》——策略模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106364747</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106364747</guid><author>lisemi</author><pubDate>Tue, 26 May 2020 20:51:56 +0800</pubDate><description><![CDATA[简介

策略模式（Strategy Pattern）中，一个类的行为或其算法可以在运行时更改。其定义了一系列算法，并将每个算法封装起来，使他们可以相互替换，且算法的变化不会影响到使用算法的客户。

角色与职责



Strategy：算法抽象类

OperatorAdd：具体算法实现类

实现


#include &lt;iostream&gt;
using std::cout;
using std::endl;
class Strategy {
public:
virtual void Cryp...]]></description><category></category></item><item><title><![CDATA[设计模式《十五》——责任链模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106290686</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106290686</guid><author>lisemi</author><pubDate>Fri, 22 May 2020 20:48:47 +0800</pubDate><description><![CDATA[简介

 责任链模式（Chain of Responsibility Pattern）为请求创建了一个接收者对象的链。每个对象持有对下一个对象的引用，这样就会形成一条链，请求在这条链上传递，直到某一对象决定处理该请求。这种模式给予请求的类型，对请求的发送者和接收者进行解耦。

角色与职责



Handler：处理请求的接口，接口中定义一个方法，以设定和返回对下一家的引用。

ConcreteHandler：具体处理者接到请求后，可以选择将请求处理掉，也可以将请求传给下家。

实现


#inc...]]></description><category></category></item><item><title><![CDATA[设计模式《十四》——命令模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106244956</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106244956</guid><author>lisemi</author><pubDate>Wed, 20 May 2020 21:37:16 +0800</pubDate><description><![CDATA[简介

 命令模式（Command）是一种数据驱动的模式，Command的类封装了对目标对象的调用行为以及调用参数。其目的是将一个请求封装成一个对象，从而使您可以用不同的请求对客户进行参数化。

 在面向对象的程序设计中，一个对象调用另一个对象，一般情况下的调用过程是：创建目标对象实例；设置调用参数；调用目标对象的方法。但在有些情况下有必要使用一个专门的类对这种调用过程加以封装，我们把这种专门的类称作command类。



角色与职责



Invoker：调用者；

Comma...]]></description><category></category></item><item><title><![CDATA[设计模式《十三》——模板模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106128808</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106128808</guid><author>lisemi</author><pubDate>Thu, 14 May 2020 21:13:20 +0800</pubDate><description><![CDATA[简介

 一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现。其目的是定义一个操作中的算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

角色与职责



AbstractClass：提供抽象的接口；

ConcreteClass：实现类，继承自抽象类，实现抽象类的接口。

实现


#include &lt;iostream&gt;
// 网购
class OnlineShopping {
public:
...]]></description><category></category></item><item><title><![CDATA[设计模式《十二》——享元模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/106028670</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/106028670</guid><author>lisemi</author><pubDate>Sat, 09 May 2020 22:12:41 +0800</pubDate><description><![CDATA[简介

用于减少创建对象的数量，实现对象的共享，当对象多的时候可以减少内存占用和提高性能。



角色与职责



Flyweight：描述一个接口，通过这个接口flyweight可以接受并作用于外部状态；
	ConcreteFlyweight：实现Flyweight接口，并为定义了一些内部状态，ConcreteFlyweight对象必须是可共享的；同时，它所存储的状态必须是内部的；即，它必须独立于ConcreteFlyweight对象的场景；
	UnsharedConcreteFlyweight：并非所.]]></description><category></category></item><item><title><![CDATA[设计模式《十一》——外观模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/105981707</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/105981707</guid><author>lisemi</author><pubDate>Thu, 07 May 2020 21:11:50 +0800</pubDate><description><![CDATA[简介

 观模式是为了解决类与类之家的依赖关系的，像spring一样，可以将类和类之间的关系配置到配置文件中，而外观模式就是将他们的关系放在一个Facade类中，降低了类类之间的耦合度。



角色与职责





Facade：为方便调用，定义的统一包装接口

SubSyntem：功能提供者，指提供功能的类群。

使用场景

客户端与系统端解耦时，客户端不需要知道系统内部的复杂联...]]></description><category></category></item><item><title><![CDATA[设计模式《十》——组合模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/105883891</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/105883891</guid><author>lisemi</author><pubDate>Fri, 01 May 2020 22:35:00 +0800</pubDate><description><![CDATA[简介

 组合模式又叫部分-整体模式，用于把一组相似的对象当作一个单一的对象，依据树状结构来组合对象。使得用户对单个对象和组合对象的使用具有一致性。例如，公司职员组织关系。



角色与职责





Component：组合类中的抽象接口，在适当的情况下，实现所有类共有接口的默认行为

Composite：有枝节点行为，用于存储子部件，在Component接口中实现与子部件有关的...]]></description><category></category></item><item><title><![CDATA[设计模式《九》——桥接模式]]></title><link>https://blog.youkuaiyun.com/lisemi/article/details/105755558</link><guid>https://blog.youkuaiyun.com/lisemi/article/details/105755558</guid><author>lisemi</author><pubDate>Sat, 25 Apr 2020 20:04:40 +0800</pubDate><description><![CDATA[简介 

 桥接模式就是把事物和其具体实现分开，使他们可以各自独立的变化。桥接的用意是：将抽象化与实现化解耦，使得二者可以独立变化，像我们常用的JDBC桥DriverManager一样，JDBC进行连接数据库的时候，在各个数据库之间进行切换，基本不需要动太多的代码，甚至丝毫不用动，原因就是JDBC提供统一接口，每个数据库提供各自的实现，用一个叫做数据库驱动的程序来桥接就行了。
...]]></description><category></category></item></channel></rss>