• 两个获取PE文件校验和的API

    ·

    发布于

    修改于

    1. MapFileAndCheckSum
    2. CheckSumMappedFile

  • 一些常用的硬编码(X64)

    ·

    发布于

    修改于

    跳转

    //{ 0x48,0xb8,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0xff,0xe0 }
    48:B8 8877665544332211                  | mov rax,1122334455667788                                        |
    FFE0                                    | jmp rax                                                         |

    返回

    //{ 0x48,0x31,0xc0,0x48,0xff,0xc0,0xc3 }
    48:31C0                                 | xor rax,rax                                                     |
    48:FFC0                                 | inc rax                                                         |
    C3                                      | ret                                                             |

  • 换回了12代I7

    ·

    发布于

    修改于

    用了两个月的7950X,今天又换回了Z690+12700KF。

    7950X具有16个大核,编译是挺快的,但是待机功耗太高(40W+)导致温度高,进而导致风扇噪音大。这实在是不适合干活用。

    (更多…)

  • LDR_DATA_TABLE_ENTRY

    ·

    发布于

    修改于

    (更多…)


  • 一个区分函数、过程、过程函数和方法的标准

    ·

    发布于

    修改于

    函数

    有返回数据(值),不修改上下文。

    过程

    无返回值,修改上下文。

    过程函数

    有返回值,修改上下文。

    方法

    在一个object的闭包环境下的过程或函数,分为函数方法和过程方法。


  • UML六种关系

    ·

    发布于

    修改于

    从关系紧密程度看,由松到紧依次是:

    1. 依赖:不持有实例。
    2. 关联:持有实例。
    3. 聚合:整体不维护部分,不创建和维护“部分”对象。
    4. 组合:与聚合相反。
    5. 实现:实现接口。
    6. 继承。

  • SOLID五大原则(设计原则)

    ·

    发布于

    修改于

    SRP(Single Responsibility Principle),单一职责原则

    类的职责是站在其它类的角度来定义的,类的职责包含多个相关功能,该原则适合基础类,不适合基于基础类构建复杂的聚合类。

    OCP(Open-Close Principle),开闭原则

    对扩展开放,对修改封闭,不修改代码就可以增加新功能,提供者增加新的功能,但使用者不需要修改代码。

    LSP(Liskov Substitution Principle),里氏替换原则

    子类必须实现或继承父类所有的公有方法,子类每个方法的输入参数必须与父类一致,子类每个方法的输出必须不比父类少。

    ISP(Interface Segregation Principle),接口隔离原则

    ISP承认对象需要非内聚接口,然而ISP建议客户端不需要知道整个类,只需要知道有内聚接口的抽象父类即可。

    打印一体机包括打印、复印、扫描、传真四个接口。某员工只用传真功能,那么只应该给他传真功能的接口,而不是整个打印一体机。

    DIP(Dependency Inversion Principle),依赖反转原则

    高层模块不应该直接依赖低层模块,两者都应该依赖抽象层。

    抽象不能依赖细节,细节必须依赖抽象。

    高层模块依赖低层模块指高层模块需要调用低层模块的方法。

    高层模块依赖抽象层,指高层模块基于抽象层编程。

    低层模块依赖抽象层,指低层模块继承或实现抽象层。

    DIP的启发:

    1. 任何变量都不应该持有一个指向具体类的指针或应用。
    2. 任何类都不应该从具体类派生。
    3. 任何方法都不应该覆写它的任何基类中已经实现了的方法。

    用处

    • SRP用于类的设计。
    • OCP是总的指导思想。
    • LSP用于指导类的继承设计。
    • ISP用于指导接口的设计。
    • DIP用于指导如何抽象。

  • 关于设计模式的一些总结

    ·

    发布于

    修改于

    设计原则和设计模式的关系

    设计原则和设计模式是互补的,设计原则主要用于指导“类的定义”的设计,而设计模式主要用于指导“类的行为”的设计。

    敏捷设计

    敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。我觉得敏捷模式要比瀑布模式强很多。

    谁拥有接口

    接口属于它的客户,而不是它的派生类。客户和接口之间的逻辑绑定关系要强于接口和它的派生类之间的逻辑绑定关系。它们的关系强到没有接口就无法使用客户!但是在没有某个接口派生类的情况下却依然可以使用客户(可能有其它派生类)。逻辑关系的强度和实体关系的强度是不一致的,继承是一个比关联强得多的实体关系。

    内聚

    判断一个模块的“内聚性”的高低,最重要的是关注模块的元素是否都忠于模块的职责。

    7种内聚

    1. 偶然内聚,这是最差的一种内聚,模块内的元素之间没有什么关系,比如“Utils”这样的包。
    2. 逻辑内聚,模块中的元素在逻辑上属于一个比较宽泛的类别,比如:“鼠标”、“键盘”划分为“输入”类,逻辑内聚必偶然内聚好一点。
    3. 时间内聚。
    4. 过程内聚,模块中各元素必须按照固定“过程顺序”进行处理,与时间内聚的区别在于,时间内聚中各元素的顺序可以随意调整,而过程内聚中元素的先后顺序是严格要求的。
    5. 信息内聚,最典型的例子是“增、删、改、查”某个数据的模块。
    6. 顺序内聚,模块中元素的输出是另外元素的输入,类似流水线,上一个环节的输出是下一个环节的输入。
    7. 功能内聚,这是最好的一种内聚,元素都是为了完成同一个单一任务,而且缺一不可。

    耦合

    耦合是程序模块相互之间的依赖程度。内聚关注模块内部的元素结合程度;耦合关注模块之间的依赖程度。

    8种耦合

    1. 无耦合。
    2. 消息耦合,这是一种耦合度很低的耦合,因为调用方仅仅以来被调用方的“消息”,既不需要传参数,也不需要了解被调用方的内部逻辑,更不需要控制调用方内部的逻辑。
    3. 数据耦合,通过传参传递,并且参数必须为基本数据类型。
    4. 数据结构耦合。
    5. 控制耦合。
    6. 外部耦合,当两个模块依赖相同的外部数据格式、通信协议、设备接口时,称为外部耦合。
    7. 全局耦合(普通耦合),两个模块共享的全局变量。
    8. 内容耦合,当一个模块依赖另一个模块的内容(主要是数据成员)时,称为内容耦合,这是最差的,也叫“病态耦合”。

  • 《什么是民粹主义?》摘要四

    ·

    发布于

    修改于

    七论民粹主义

    1. 民粹主义既不是当代民主政治的正当组成部分,也不是非理性的公民所导致的某种病态情况。它是代议制民主永远的阴影。总会存在某种势力借“人民”之名发言,作为挑战当下掌权精英的方式。古代雅典没有民粹主义,雅典也许会有煽动家,但是没有民粹主义,因为后者仅在代议制中存在。民粹主义不反对政治代议原则,他们仅仅坚称他们自己才是合法的民意代表。
    2. 并非所有批评精英的人都是民粹主义者。除了反对精英之外,民粹主义也反对多元化。他们宣称,他们且只有他们才代表人民,其他的政治竞争者本质上就是非法的,而那些不支持他们的人不是真正意义上人民的一部分。当他们在野时,民粹主义者必然会坚称精英是不道德的,而人民则是道德的、同质化的,且不可能犯错的实体。
    3. 民粹主义者似乎经常宣称自己代表人民所希望的集体利益。但仔细探究便可发现,民粹主义者所在意的,与其说是在一个真正的形成民意的过程之后,每个有常识的人都能归纳出的公共利益,不如说是某种能借以推断出正确的政策的“真正人民”的象征性表征。这就让民粹主义者免受现实经验的批驳。民粹主义者总希望打着“真正人民”和“沉默大多数”的旗号,对抗民选代表和选举出的官方结果。
    4. 尽管民粹主义者常主张进行全民公投,这类行为并非旨在开展一场没有条件限制的,形成民主意愿的流程。民粹主义者仅仅希望他们已确定好的真正人民的意愿得到认可。民粹主义并不是一条通往更广泛政治参与的道路。
    5. 民粹主义者有能力治理,而且他们治理时往往会与他们的根本承诺,即他们且仅他们代表人民的理念相一致。更具体地说,他们会占据国家,大肆推行恩庇政治和贪污腐败,同时会彻底地压制批判他们的公民社会等。这些行径在民粹主义的政治想象中找到了明确的道德支撑,因此民粹主义者能公开地承认。民粹主义者也会制定宪法,这些宪法是充满党派色彩或具排斥性的,旨在打着贯彻某些所谓的人民原本的、真实的意愿的旗号维持民粹主义者的权力。这些宪法往往在某时会导致严重的宪政冲突。
    6. 民粹主义者应该为他们的本质而遭到批判——他们是民主的真正威胁(并非仅对“自由主义”构成威胁),但这并不意味着在政治讨论中不应该与他们互动。和民粹主义者交谈不同于像民粹主义者一样交谈,可以严肃对待他们所提出的问题,同时不认同他们处理问题的方式。
    7. 民粹主义并不会像有时所说的,从让政治“离人民更近”甚至重新确立人民主权这一角度,成为自由民主制的矫正方案。但有必要清楚说明的是,一部分民众确实未被充分代表(这种代表性的缺乏可能是利益或身份认同上的,或两者皆是)。但这并不能支持民粹主义者关于只有其支持者才是真正的人民以及他们是唯一的合法民意代表这一主张。因而,民粹主义会迫使自由民主制的捍卫者更认真地思考如今的代议制有什么失败之处。民粹主义也会促使他们应对更广泛的道德问题。归属于某个政治体的标准是什么?多元主义到底为什么值的存续?若将民粹主义者选民视为自由、平等的公民,而非受沮丧、愤怒和憎恨驱使的病态个例,又该如何处理他们的关切?

  • 罗织经 瓜蔓卷(12/12)

    ·

    发布于

    修改于

    事不至大,无以惊人。案不及众,功之匪显。上以求安,下以邀宠,其冤固有,未可免也。荣以荣人者荣,祸以祸人者祸。荣非己莫恃,祸惟他勿纵。罪无实者,他罪可代;恶无彰者,人恶以附。心之患者,置敌一党;情之怨者,陷其奸邪。

    官之友,民之敌;亲之友,仇之敌,敌者无常也。荣之友,败之敌;贱之友,贵之敌,友者有时也。是以权不可废,废则失本。情不可滥,滥则人忌。人不可密,密则疑生。心不可托,托则祸伏。智者不招己害。能者寻隙求功。饵之以逮,事无悖矣。


最新