关系逻辑

C++程序的耦合性设计

大憨熊 提交于 2019-12-05 16:28:01
声明:本文部分采用和参考《代码里的世界观-通往架构师之路》中内容,可以说是该书中耦合性一章的读后感,感谢该书的作者余叶老师的无私分享。 1.什么是耦合? 耦合其实就是程序之间的相关性。 程序之间绝对没有相关性是不可能的,否则也不可能在一个程序中启动,如下图: 这是一个Linux中socket TCP编程的程序流程图,在图中的TCP服务器端,socket()、bind()接口、listen()接口、accept()接口之间肯定存在着相关(就是要调用下一个接口程序必需先调用前一个接口),也就是耦合,否则整个TCP服务器端就建立不起来,以及改变了bind()中的传入的数据,比如端口号,那么接下来的listen()监听的端口,accept()接收连接的端口也会改变,所以它们之间有很强的相关性,属于紧耦合。所以耦合就是代码的相关性,如果还不明白,也没关系,继续看下去,相信你会懂的,哈哈。 2.耦合的形式 (1)数据之间耦合 在同一个结构体或者类中,如: typedef struct Person { int age; char* name; }Person; class Person { private: int age_m; bool namePresent_m; std::string name_m; }; 在上面的结构体和类中,年龄和名字两个基本数据单元组合成了一个人数据单元

Linux磁盘管理系列 — LVM和RAID

萝らか妹 提交于 2019-12-05 14:45:26
一、逻辑卷管理器(LVM)   1、什么是逻辑卷管理器(LVM)     LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对卷进行操作的抽象层。     LVM是建立在硬盘和分区之上的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,从而提高磁盘分区管理的灵活性。     LVM允许在多个物理设备间重新组织文件系统,包括重新设定文件系统的大小。   2、LVM结构图        3、LVM术语   1)物理卷     物理卷(physical volume, PV)在LVM系统中处理最底层;     物理卷可以是整个硬盘、硬盘上的分区或从逻辑上一磁盘分区具有同样功能的设备(如:RIAD);     物理卷是LVM的基本存储逻辑块,单核基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。   2)物理区域     每个物理卷被划分为基本单元(称为Physical Extent,PE),具有唯一编号的PE是可以被LVM寻址的最小存储单元,实际的数据都是存储在PE中的;     PE的大小可根据实际情况在创建物理卷时指定,默认为4MB;     PE的大小一旦确定将布恩那个改变,同一个卷组中的所有物理卷的PE的大小需要一致。   3)卷组     卷组(Volume Group,VG)建立在物理卷之上

Spring Cloud微服务限流之Sentinel+Apollo生产实践

£可爱£侵袭症+ 提交于 2019-12-05 13:51:42
Sentinel概述 在基于Spring Cloud构建的微服务体系中,服务之间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素。在并发流量比较高的情况下,由于网络调用之间存在一定的超时时间,链路中的某个服务出现宕机都会大大增加整个调用链路的响应时间,而瞬间的流量洪峰则会导致这条链路上所有服务的可用线程资源被打满,从而造成整体服务的不可用,这也就是我们常说的“ 雪崩效应 ”。 而在微服务系统设计的过程中,为了应对这样的糟糕情况,最常用的手段就是进行 ”流量控制“ 以及对网络服务的调用实现 “熔断降级” 。所谓流量控制就是根据服务的承载能力制定一个策略,将一定时间窗口内的网络调用次数进行限制,例如1s内某个服务最多只能处理10个请求,那么1s内的第11+的请求会被被限制丢弃;而熔断降级的概念则是说在A服务→B服务调用过程中,按照一定的规则A服务发现调用B服务经常失败,如果触发了A服务对B服务调用的熔断降级规则,那么在一定时间窗口内,A服务在处理请求的过程中对于B服务的调用将会直接在A服务的逻辑中被熔断降级,请求则不会通过网络打到B服务,从而避免A服务由于过长的超时时间导致自身资源被耗尽的情况发生。 虽然我们知道以上两种手段非常有用,如果没有合适的技术来支持,就好像一句话说的“虽然明白很多道理,但是依然过不好这一生”一样。而Sentinel就是这样一种技术

drds基础笔记

我是研究僧i 提交于 2019-12-05 11:38:50
帮助文档URL: https://help.aliyun.com/document_detail/29659.html?spm=a2c4g.11186623.6.539.6c5jsL drds知识总结: bug1,分库分表的时候,在表对象中查不到. bug2,分库分表无法进行数据导入,提示表结构找不到. note1,分区键起作用后,可能导致查询出结果主键冲突.主键要提前设定为全局唯一. note2,分区键键值不可修改. note3,如果是雪花生成的,都是16的整数倍,取模后都为0,落在0分库.对于历史数据,统一修改为自增,或者采用其他分区函数. 哈希算法是简单取模,要求拆分列的值的自身分布均衡才能保证哈希均衡。 note4,right_shift是先转换成2进制,然后向右移动位数进行计算,如果原来是16整数倍的数据,如右移位数不够,数据仍不均,导致right_shift处理后的数据还是分布不均匀. (Distributed Relational Database Service) 特点: 分库分表,透明读写分离,分布式事务(结合分布式事务套件 GTS),平滑扩容. 目的:单机数据库遇到的容量(200+mysql实例)和性能瓶颈,最主要是性能问题. 其他技巧: 权限,查看子库,自生成主键 分布式运维指令集 DRDS 提供独有分布式数据库运维指令集,如 SHOW SLOW、TRACE

逻辑回归与最大熵模型

匆匆过客 提交于 2019-12-05 11:23:51
逻辑回归 sigmoid函数= \(\sigma(x)=\frac{1}{1+e^{-x}}=\frac{e^{x}}{1+e^{x}}\) 二项逻辑回归模型 有如下条件概率分布, \(w\) 内已经包含了偏置 \(b\) : \[P(Y=1|x)=\frac{\exp(w\cdot x)}{1+\exp(w\cdot x)}\] \[P(Y=0|x)=\frac{1}{1+\exp(w\cdot x)}\] 对数几率: \[\text{logit}(p)=\frac{P(Y=1|x)}{1-P(Y=1|x)}=\frac{p}{1-p}=w\cdot x\] 参数估计 设: \(P(Y=1|x)=\pi (x), \qquad P(Y=0|x)=1-\pi (x)\) 似然函数为 \[\prod \limits_{i=1}^N[\pi(x_i)]^{y_i}[1-\pi(x_i)]^{1-y_i}\] 对数似然函数为 \[\begin{aligned} \mathcal{L}(w) &=\sum \limits_{i=1}^N[y_i\log \pi(x_i)+(1-y_i)\log (1-\pi(x_i))] \\ & = \sum \limits_{i=1}^N[y_i(w_i \cdot x_i)-\log (1+\exp(w \cdot x_i))] \end

linux中LVM介绍及实验过程

我的未来我决定 提交于 2019-12-05 09:05:51
LVM LVM 这个词不仅一次出现过,在安装Centos时,磁盘分区时,默认分区就是使用LVM方式分区;再一个就是在OpenStack部署时候用到LVM作为后端存储。对LVM的理解还是不太清晰,查询资料,整理了这篇LVM的博客。 1. LVM的背景 ​ Linux用户安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具(比如PatitionMagic等),但这都只是暂时解决办法,没有根本解决问题。因此完美的解决方法应该是在 零停机 前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。 2. LVM简介 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。 ​ LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中

2019-2020-1 20191315 《信息安全专业导论》第八周学习总结

你。 提交于 2019-12-05 07:29:15
教材内容总结 第九章学习了面向对象设计的重点是确定问题中的对象,并根据对象的属性和行为把它们抽象分组成类。下面是面向对象分解的四个阶段。 集体讨论:在这个阶段中,为确定问题中的类进行第一轮讨论。 过滤:在这个阶段中,将检查提出的类。 场量:在这个阶段中,将确定每个类的责任。 责任算法: 在这个阶段中,将为每个责任编写算法。 汇编器可以把汇编语言程序翻译成机器码。编译器可以把用高级语言编写的程序翻译成汇编语言(再被翻译成机器码)或机器码。解释器则不仅翻译程序中的指令,还会立即执行它们,不会输出机器语言代码。存在多种高级程序设计语言的模型,被分类为命令式(面向过程和面向对象)或者声明式(功能或逻辑)。命令式模型描述了被执行的处理过程。声明式模型描述了被执行的是什么,而不是怎样被完成。面向过程模型基于要完成的任务体系结构的概念;面向对象的模型基于交互对象的概念。丽数式模型基于函数的数学概念,而逻辑模型则是基于数学逻辑,布尔表达式是关于程序状态的断言。程序用布尔表达式来判断执行哪部分代码(条件语句)或是否重复执行某段代码(循环语句)。程序中的每个变量都有自己的数据类型。所谓强类型化指的是变量是给定类型且只有类型相符的值才能被存人变量。把一个值在人变量叫作给这个变量赋值(赋值语句)。 面向对象的程序用以下结构刻画: 封装:实施信息隐蔽的语言特性,用类结构实现。 继承

第一次班会总结

家住魔仙堡 提交于 2019-12-05 06:49:28
时间:2019年11月20日 主持人:班主任 对象: J175班全体成员 活动形式: 观看视频,游戏 首先看这个视频的原因是让我们大家更好的认识到逻辑上的知识,编程跟逻辑的关系。 逻辑编程的要点是将正规的逻辑风格带入计算机程序设计之中。数学家和哲学家发现逻辑是有效的理论分析工具。 很多问题可以自然地表示成一个理论。说需要解答一个问题,通常与解答一个新的假设是否跟现有的理论无冲突等价。 逻辑提供了一个证明问题是真还是假的方法。创建证明的方法是人所皆知的,故逻辑是解答问题的可靠方法。 逻辑编程系统则自动化了这个程序。人工智能在逻辑编程的发展中发挥了重要的影响。 来源: https://www.cnblogs.com/ArrayStoreException/p/11911582.html

LLVM代码混淆分析及逻辑还原

安稳与你 提交于 2019-12-05 05:48:57
LLVM代码混淆分析及逻辑还原 概述 LLVM Obfuscator是一款工业级别的代码混淆器,在过去几年的CTF里我们经常会遇到经过代码经过它混淆的情况。这片博文记录了我们对混淆器原理的研究以及从中发现的有关混淆器的设计实现的脆弱之处。基于我们的研究结果,我们在Binary Ninja平台上写了一个插件,通过这个插件可以自动化的解决掉由于代码混淆带来的逆向分析困难。 LLVM Obfuscator简介 LLVM Obfuscator是一个基于LLVM框架实现的一个开源代码混淆器,整个项目包含了三个相对独立的LLVM pass, 每个pass实现了一种混淆方式,通过这些混淆手段,可以模糊原程序的流程或者某一部分的算法,给逆向分析带来一些困难。 由于上述的三个pass是基于LLVM IR实现的, 因此从理论上来说, 这种混淆器是支持世界上任何一种语言和机器架构的。 关于每种pass的详细文档,可以查看下面的这三个链接: Instructions Substitution(指令变换) Bogus Control Flow(流程伪造) Control Flow Flattening(流程平坦化) 上面的这几个链接里面是各个pass的作者维护的一份简单文档,如果你觉得文档不够详尽,建议直接参考相应的源码即可,可能对你来说会又直观又准确。 如果说看代码,其实是比较费劲的一个事情

论逻辑(一)

落爺英雄遲暮 提交于 2019-12-05 04:23:56
逻辑 逻辑是什么?为什么我们需要逻辑?逻辑在我们的生活中扮演怎么样的角色?逻辑的重要性是什么? 声明:以下文章仅仅代表笔者观点,如有不同观点,欢迎大家讨论! 逻辑是什么?    逻 辑是给定条件与得出结论之间的过程。对于一件事情来说,有起因,有结果,当然也会有过程。这个过程把起因变为了结果。逻辑就好比这个过程。当然“逻辑”与 “过程”之间是有区别的,逻辑是一种推演、一种推导、根据给定的条件,得出一种结论,可以说逻辑是一思考,它有别于过程,过程客观存在,是观察到的事实, 可以说过程是一种正确的逻辑。既然有正确的逻辑,那么也会有错误的逻辑,错误的逻辑也是逻辑只不过他是错的,错误的逻辑会自相矛盾,也就悖论。举个最简单 的例子。比如我现在说:"我只说谎言。",那么请你判定我是否在说谎?荒妙而又神奇对不对?    对于逻辑的思考自古就有:    "三段论":由亚里士多德提出.   三段论推理是演绎推理中的一种简单推理判断。他包括:一个包含大项和中项的命题(大前提)、一个包含小项和中项的命题(小前提)以及一个包含小项和大 项的命题(结论)三部分。 对于三段论有一个简单的列举,大前提:人都会死,小前提:亚里士多德是人,结论:亚里士多德会死。多么简短而又美妙的论证。如果我给出以下条件,大前提: 猫都是四条腿,小前提:狗有四条腿,那么结论会是什么?狗是猫?很明显这与我们的认知不和,这就是“三段论