自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 设计模式之七--抽象工厂模式

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指出他们具体的类。 依赖抽象编程具体代码如下from abc import ABCMeta, abstractmethodclass IFactory(metaclass=ABCMeta): @abstractmethod def create_user(self): pass @abstractmethod def create_department(self): p

2020-06-15 22:41:10 149

原创 Windows驱动开发系列文章一

可以在驱动种使用 KdPrintEx/DbgPrintEx 函数来答应,然后使用DbgView工具来收集log,然后在对log进行分析调整。具体如何操作,这个大家自行挖掘,这一块儿还是挺多内容的,除了这些windows还自带了一个WPP机制,这个可以打印到内存中,然后在BSOD的时候可以把这个内存中的log取出来,这是一种很方便的机制,特别是对于BSOD问题,并且失败率比较低的问题。这个就需要用到Microsoft 强大的windbg工具, 常用的命令一定要熟悉,这个大家自行去挖掘。

2024-05-29 23:02:07 911

原创 pcie开发系列(一)

文章目录最近在学习pcie驱动相关的知识,在这里记录下来自己的学习过程,本系列后续持续更新。pcie扫盲篇,参考下面的讲解,非常详细的入门讲解。http://blog.chinaaet.com/justlxy/p/5100053251

2021-11-21 19:47:13 669

原创 Linux之Kernel启动流程分析

文章目录1. 内核编译步骤2. 内核调用的层级关系1. 内核编译步骤一定一定要先读README!!!1) make menuconfig, 对整个内核进行配置。2) make uImage (header + kernel), 生成vmlinux.lds, 核心文件,找到kernel运行的起点。 head.S。2. 内核调用的层级关系以上就是内核启动过程的核心函数,以及调用层级关系, 详细内容还是需要自己去看代码了。...

2021-03-14 17:24:07 375

原创 Linux之u-boot分析

文章目录1. u-boot是什么1.1 操作系统的启动过程1.2 u-boot具体是什么,做什么3. u-boot源码分析3.1 mkconfg和Makefile分析1. u-boot是什么1.1 操作系统的启动过程1.2 u-boot具体是什么,做什么u-boot是操作系统启动前的一段程序,主要用于初始化部分硬件,如看门狗,定时器,SDRAM等,为内核的加载提供环境。u-boot的主要作用有两个:1) 给内核传参2) 加载内核到SDRAM,启动内核3. u-boot源码分析3.1 mk

2021-03-14 15:08:38 233

原创 python进阶篇--property和itemgetter的魔法

property() 很容易理解, itemgetter也很容易理解。但是当两者相遇的时候就擦出了魔法的火花。先来看一段代码。import operatorclass StructTupleMeta(type): def __init__(cls, *args, **kwargs): super().__init__(*args, **kwargs) print(cls) for n, name in enumerate(cls._field

2020-06-27 15:50:54 248

原创 python进阶篇--实现单例的方法

单例是设计模式中一个比较简单但又比较重要的一个概念。今天让我们来一起看一下,python中实现单例的几种方法。方案一:通过一个cahcemanager 来缓存类实例,这个是针对多个实例但是不重复的例子。import weakrefclass CacheManager: def __init__(self): self._cache = weakref.WeakValueDictionary() def get_test(self, name): i

2020-06-27 10:27:50 132

原创 设计模式之十五--访问者模式

访问者模式:表示一个作用于某对象结构中各个元素的操作。它是你可以在不改变个元素的类的前提下定义作用于这些元素的新操作。访问者模式比较适用于数据结构比较固定的系统中,实现数据结构和算法的分离。但是一般来看数据结构都很不固定,所以用的比较少。from abc import ABCMeta, abstractmethodclass Visitor(metaclass=ABCMeta): def __init__(self, name): self.name = name

2020-06-21 20:17:21 131

原创 设计模式之十五--享元模式

享元模式:运用共享技术有效地支持大量细粒度的对象。享元模式和单例模式类似的地方。共通的思路,就是同一类对象之创建一个实例,享元模式在此基础上进一步加工。利用工厂模式来返回需要的对象。from abc import ABCMeta, abstractmethodclass Website(metaclass=ABCMeta): def __init__(self, name): self.name = name @abstractmethod def us

2020-06-21 16:44:57 129

原创 设计模式之十四--中介者模式

中介者模式:由一个中介者对象来封装一些列的对象交。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。中介者模式的优点和缺点,都在于集中式的管理,所有的逻辑都集中于中介者类,可能会造成逻辑过于复杂。from abc import ABCMeta, abstractmethodclass Mediator(metaclass=ABCMeta): @abstractmethod def send_message(self, young_people

2020-06-20 19:45:24 149

原创 设计模式之十三--职责链模式

职责链模式:是多个对象都有机会处理请求,从而避免请求的法总这和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,知道有一个对象处理它为止。这个模式在公司中非常常见,一个人请假,先从自己的leader开始,然后进一步到科长,总经理。职责链条非常清晰。from abc import ABCMeta, abstractmethodclass Manager(metaclass=ABCMeta): def __init__(self, name): self.n

2020-06-20 18:31:05 136

原创 设计模式之十三--命令模式

命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销操作。命令模式的优点:能够容易设计一个命令队列在需要情况下,可以较容易地将命令记入日志允许接收请求的一方决定是否可以否决请求可以轻易实现请求撤销和重做符合开闭原则from abc import ABCMeta, abstractmethodclass Command(metaclass=ABCMeta): def __init__(self, chief):

2020-06-20 14:00:05 152

原创 设计模式之十二--桥接模式

桥接模式:将抽象部分与他的实现部分分离,是他们都可以独立变化。PC上之所以能够硬件不用关心软件,软件也不用关系硬件。都是接口的功劳。统一标准,针对接口编程。 HAL层的应用。当我们的设计中出现多对多的关系,并且可以分成两层处理的时候就可以考虑使用这种设计模式来处理。以下是针对,手机品牌和手机软件为例来进行编程。from abc import ABCMeta, abstractmethodclass PhoneBrand(metaclass=ABCMeta): def __init__(

2020-06-20 13:15:45 114

原创 设计模式之十一--单例模式

单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点。单例大家应该都知道,这里更多来看一下,python实现单例的一些特性装饰器来实现的版本from functools import wrapsdef singleton(cls): _instance = {} @wraps(cls) def wrapper(): if cls not in _instance: _instance[cls] = cls()

2020-06-18 22:18:53 116

原创 设计模式之十--组合模式

组合模式:将对象组合成熟型结构一表示‘部分-整体’的层次结构。组合模式使得用户对单个对象的组合对象的使用具有一致性。具体来讲就是,树根和树枝和树叶都是统一对待的。树枝和树叶继承于树根。什么时候用组合模式?当需求中是体现部分与整体的层次结构式,以及你希望用户可以忽略组合对象与单个对象的不同,统一使用组合结构中的所有对象时,就应该考虑用组合模式。好了,上代码。from abc import ABCMeta, abstractmethodclass Company(metaclass=ABCMeta)

2020-06-17 22:42:41 166

原创 设计模式之九--备忘录模式

备忘录:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。这个模式比较简单。基本思想就是保存状态到一个变量,需要恢复的时候从那个变量去取。好了,上代码。class GameRole: def __init__(self): self.vit = 100 self.att = 100 self.den = 100 def display_state(self):

2020-06-17 21:20:21 109

原创 设计模式之八--状态模式

状态模式:当一个对象大的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的时当控制一个对象状态转换大的条件表达式过于复杂时大的情况,把状态的判断逻辑转移到不同状态的一系列类当中。from abc import ABCMeta, abstractmethodclass State: @abstractmethod def write_program(self, work): passclass ForeNoon(State):

2020-06-16 20:50:20 122

原创 设计模式之六--模板模式

模板模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。from abc import ABCMeta, abstractmethodclass TestPaper(metaclass=ABCMeta): def favorite_food(self): print("The favorite food answer is ", self.favorite_food_answer()) d

2020-06-14 15:39:58 119

原创 设计模式之五--原型模式

原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制对象,而且不需要知道任何创建细节。import copyfrom abc import ABCMeta, abstractmethodclass Resume: def __init__(self, name): self.name = name self.age = 0 self.sex = "" sel

2020-06-14 15:33:40 116

原创 设计模式之四--代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。其实代理模式有一定点像一个过滤对象,在访问到真实对象之前的一道屏障。from abc import ABCMeta, abstractmethodimport sysclass Subject(metaclass=ABCMeta): @abstractmethod def send_flower(self): pass @abstractmethod def send_chocolate(

2020-06-14 15:29:41 106

原创 设计模式之三--装饰模式

装饰模式:动态给一个对象添加一些额外的职责。# python 3.7.6from abc import ABCMeta, abstractmethodclass DecorateObject(metaclass=ABCMeta): def __init__(self): pass @abstractmethod def show(self): passclass Person(DecorateObject): def __i

2020-06-14 15:27:27 123

原创 设计模式之二--策略模式

策略模式:这种模式比较适合,同一个问题又多种解决方法类型的设计。这里以商场打打折促销为例,商场打折对不同的商品可能又不同的打着方式,比如打八折,300减100等等打折方式,这样的实际问题就很适合使用策略模式。from abc import ABCMeta, abstractmethodclass Context: def __init__(self, strategy_type): self.strategy = self.__decide_strategy(strateg

2020-06-14 15:16:27 99

原创 设计模式之一--工厂模式

简单工厂模式:耦合比较紧的时候比较适合的方法这里用加减乘除来做例子进行实现from abc import ABCMeta, abstractmethodclass Operator(metaclass=ABCMeta): def __init__(self): self._first_number = 0 self._second_number = 0 @property def first_number(self): r

2020-06-14 15:11:52 99

原创 Python进阶篇--如何实现回调

看到标题大家可能都会觉得很简单,但是事实并非如此,接下来我们一起细细看来。第一种回调:看到标题后你的第一反应def handler(x): print("The result is ", x)def add(a, b): return a + bdef task_async(func, args, *, callback=None): result = func(*args) callback(result)if __name__ == "__main

2020-06-07 12:54:01 1292

原创 Python进阶篇--logging模块的使用(下)

上一篇写了一些关于logging模块的基本使用方法,今天我们来一起挖掘一下,logging模块的高端用法。下面是很好的一些参考资源,大家也可一拜读原文。logging模块基础和进阶logging handlerslogging cookbook...

2020-05-30 21:42:12 437

原创 Python进阶篇--logging模块的使用(一)

一个好的程序必定会有一个好的log模块,这是软件设计的重点之一。一个好的log模块可以让你快速定位问题所在,让维护的感到神清气爽,编写便赞叹。“さすが、先輩です”话不多说,言归正传。一起来探索一下python 的logging 模块。先从简单的来说起。import loggingdef main(): # config the logging module logging.basicConfig( level=logging.ERROR ) h

2020-05-28 22:06:03 209

原创 Python进阶篇--异常结构体系

Python有自己的一套异常体系结构,今天就让我们来一探究竟。先从最简单的异常说起。def single_exception(): try: raise RuntimeError("This is a runtime error") except RuntimeError as e: print("Reason : ", e)if __name__ == "__main__": single_exception()运行结果如下:Rea

2020-05-28 21:36:01 244

原创 Python进阶篇--生成器

Python中有很多方便遍历的数据结构。这些结构都是Iterable对象。主要包括一下集中集合数据类型(list、tuple、dict、set、str等)和生成器(generator)集合数据类型对于大家应该不是难题,这里重点来探讨一下generator这个有点复杂的迭代对象。首先来看一下如何生成generator对象, 这里主要有两种方式。第一种:>>> g = (i for i in range(10))>>> g<generator object

2020-05-28 20:46:37 204

原创 Python进阶篇--上下文管理

Python中的上下文管理又很多方法,下面我们一一来品一品。可以参考下面的联接,讲的挺好的。上下文管理我们按照自己的思路来一套,灵魂三问。什么是上下文?其实就是程序运行的环境,包括运行需要的资源。为什么要管理上下文?为了释放大脑,这个就像python的垃圾回收机制一样,再也不用关心指针释放的问题了。管理上下文主要目的就是为了让资源的释放更加自动。比如我们对文件操作,打开文件,时刻要想着什么时候去关闭文件,要是文件用完了,自己关闭不是更好?这就是上下文管理的责任之一。上下文管理协议是什么?wi

2020-05-10 15:57:22 241

原创 Python进阶篇--描述器类

今天我们来看一看,python魔法中的描述器类。开胃小菜什么时描述器类?正统才是王道,看看官方怎么解释的Definition and IntroductionIn general, a descriptor is an object attribute with “binding behavior”, one whose attribute access has been overridden by methods in the descriptor protocol. Those methods

2020-05-10 15:11:36 177

原创 Python进阶篇--装饰器

装饰器是Python中的魔法所在,下边让我们来一探究竟。话不多说, 上代码。前菜from functools import wrapsimport timedef timethis(func): @wraps(func) def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time()

2020-05-10 14:44:15 151

原创 Python进阶篇-创建类的方法

首先我们先来了解一个概念,什么是元类?我们创建一个类目的是为了创建该类的实例对象,而元类就是用来创建类的。换个理解方式就是,元类就是创建类的类。Python中创建类的方法有很多,接下来让我们一起来探索一下吧。第一种:使用class关键字创建类class Demo: def __init__(self): pass def test(self): pass第二种:使用type关键字import typesdef __init__(se

2020-05-10 11:50:55 404

原创 Python进阶篇-ctypes下

Python调用C的时候,会传递一些复杂的数据结构,例如结构体,这时候就会遇到各种各样字节对齐的问题。下边所有的例子都是在windows 64bit下的结果。格式字符串说到这里我们就要来说一下python中的格式字符串,格式字符串顾名思义。就是一个字符串中的每一个字符代表一个数据类型。格式字符串由两部分构成,第一部分是字节序和对齐方式, 第二步是是具体的数据类型。python中格式字符和对应的...

2020-05-03 16:16:26 518

原创 C/C++调用Python接口

1.环境搭建这个一个网上有很多参考,不在赘述了。主要就是把Python的库添加到当前的编译环境中。2.如何调用1)关于引用计数相关的内容都在这里了。https://blog.csdn.net/kof2019/article/details/778244732)关于如何调用Python中的类,都在这里。网上有很多很多文章都没有讲到一点,如何才能调用到Python类的初始化函数。htt...

2020-04-26 12:21:46 1164 1

原创 Python进阶篇之--Numpy

最近一直在学习Python, Numpy是一个非常使用的库。最近在研究。学习必去的地方Numpy官网中文快速入门现在还处于初级阶段,汇总一下遇到的问题。reshape的第二个参数。new shape int or tuple of intsThe new shape should be compatible with the original shape. If an integer...

2020-03-07 14:20:57 151

原创 Pytorch入门-安装环境

最近决定入坑Pytorch,在学习的过程中希望能记录下自己遇到的坑,希望能够帮大家在学习的过程中节省时间。今天来看一下Pytorch的环境安装。如果希望使用conda来管理自己的环境,这个需要自己来安装anaconda。注意勾选加入系统路径从清华镜像下载超级快。Anaconda安装包2.配置conda的环境conda环境配置这里主要配置包的源,国外网站下载超级慢,使用清华的源只需要几分...

2020-02-29 16:13:18 229

原创 Python进阶篇-协程

什么是协程协程(微线程)是比线程更轻量化的存在,像一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程最重要的是,协程不是被操作系统内核所管理,而完全是由程序所控制如何判断必须在只有一个单线程里实现并发必须在只有一个单线程里实现并发修改共享数据不需加锁用户程序里自己保存多个控制流的上下文栈一个协程遇到 IO 操作自动切换到其它协程2.协程的优缺点...

2020-02-29 11:09:59 214

原创 Pytho进阶篇-yield的用法

yield 是python中非常有用的一个关键字,可以实现很多魔法。yield关键字主要有一下几个用法。1.yield基本用法yield用在函数中,实现类似用return的功能,但是返回的是一个Generator.更多详细解释,参考下边的网址。如何正确理解yiled在函数中的作用2.yield实现上下文管理器下边一段代码很好体现这个功能。废话不多说,直接上代码。import time...

2020-02-28 21:55:40 262

原创 Python进阶篇-ctypes(上)

在Windows平台上,把一些常用的算法或者功能封装成库是非常常见的,在开发python程序的时候,我们可能会用到这功能,把C/C++代码转化为python代码可能是一个非常出力不讨好的事情,这时候python调用C就会体现出巨大的优势(不过多考虑运行效率的情况下)。Python调C的核心就在于数据类型的转换,这里和大家一起探讨一下ctypes的用法。https://docs.python.or...

2020-02-10 16:36:58 552

原创 C++ 学习路线及书籍

今年的主要目标就是提升C++语言能力,在stack overflow 上边看一篇不错的帖子,现在贴出来和大家分享。 https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list...

2018-08-05 16:08:29 881

深入理解计算机系统(中文版+英文版)

绝对值得拜读的一步大牛之作,个人推荐读一读。深入学习,请支持原版。。。

2016-06-26

空空如也

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

TA关注的人

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