自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 设置Git用户并生成公私钥

git config --global user.name XXgit config --global user.email YYgit config --listssh-keygen -t rsa -C “YY”

2020-05-30 18:08:57 327

原创 计算机缓存机制cache

什么是RAM? 随机读写存储器RAM = SRAM + DRAM;当cpu读取主存时,将地址信号放到地址总线上传给主存,主存读到地址信号后,解析信号并定位到指定存储单元,然后将此存储单元数据放到数据总线上返回给cpu。什么是MESI?MESI 为了保证多个缓存中共享数据的一致性,定义了 cache line 的四种状态,而线程对 cache line 的四种操作可能会产生不一致的状态,因此缓存控制器监听到本地操作和远程操作的时候,需要对地址一致的 cache line 状态进行一致性修改,从而保证.

2020-05-30 16:11:42 335

原创 cpu三大架构

smp(symmetric multiprocessing),对称多处理器在smp中所有的处理器都是对等的,它们通过总线连接共享同一块物理内存,这也导致了系统中所有资源(cpu、内存、I/O等)都是共享的。numa(non-uniform memory access),非均匀访问存储模型numa就是讲cpu的资源分开,以node为单位进行切割,每个node里有着独有的core、memory等资源,这也就导致了cpu在性能使用上的提升,但是同样存在问题就是2个node之间的资源交互非常慢,当cpu增多.

2020-05-30 16:00:22 1206

原创 重构 - 以委托取代继承

重构前,class Sanitation { public String washHands() { return "Cleaned ..."; }}class Child extends Sanitation {}重构后,class Child { // 具有委托对象 Sanitation 的实例 private Sanitation sanitation; public String washHands() { // 这里使用委托获得 washHands() 方法

2020-05-28 16:18:39 275

原创 23种设计模式

结构型模式结构型模式为解决怎样组装现有的类,设计他们的交互方式,从而达到实现一定的功能的目的。结构型模式包含了对很多问题的解决,例如:扩展性(外观、组合、代理、装饰、享元)封装性(适配器、桥接)创建模式抽象了实例化的过程(简单工厂、工厂方法、抽象工厂、建造者、原型、单例)行为模式行为模式使用继承机制在类间分派行为;行为对象模式使用对象聚合来分配行为。...

2020-05-27 11:10:38 118

原创 白盒测试和黑盒测试

白盒测试语句覆盖判定覆盖每个判断的真值和假值至少执行一次条件覆盖每个条件的真值和假值至少执行一次判定-条件覆盖条件组合覆盖每个判定的条件取值组合至少执行一次路径覆盖覆盖程序中所有可能的路径黑盒测试等价类划分边界值分析...

2020-05-27 10:44:56 425

原创 大话设计模式 真是本好Book

策略模式class Context {public: Strategy strategy; Context (Strategy& strategy) { this.strategy = strategy; } void ContextInterface() { strategy.AlgorithmInterface(); }}装饰模式把类中的装饰功能从类中搬移去除,这样可以简化原有的类。把每个要.

2020-05-25 16:55:37 160

原创 设计模式入口

针对抽象编程,减少与具体类的耦合!针对抽象编程,减少与具体类的耦合!针对抽象标称,减少与具体类的耦合!重要的事说3遍!

2020-05-25 14:30:17 155

原创 独立开发一个完整的系统,你肯定会遇到的问题!

明确系统需求。用什么编程语言?运行在 linux 上还是 windows 上?数据规模多大?对性能的要求?新建git工程,组织好文件夹,如src, include, doc, data,build, bin等。准备好构建环境及构建工具、代码等划分为几个 class ?每个 class 有哪些功能?类的类型是抽象类、实现类、虚基类、接口类等?每个 class 有哪些数据?数据的访问权限是 private 还是 public?数据类型是 static 还是 const ?类与类之间的关系是组合、聚合.

2020-05-22 11:02:01 984

转载 C++ 设计模式 -- 结构型模式

结构型模式(Structural Pattern):描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。对象结构型模式关心类与对象的组合,根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。...

2020-05-21 17:09:51 318

原创 你真的了解int* p 吗?

namespace {int a[] = {100, 200, 300, 400, 500};};int main(){ int *p = (int*) (&a + 1); cout << *(p - 1) << endl; // 500}

2020-05-21 10:19:52 124

原创 多态 + 默认函数参数

namespace {class A { public: virtual void f(int a = 100) { cout << "base " << a << endl; }};class B : public A { public: virtual void f(int a = 200) { cout << "derived " << a <

2020-05-21 09:57:51 227

原创 再品static

类的静态数据成员是静态存储的,所以必须对它进行初始化。 (程序员手动初始化,否则编译时一般不会报错,但是在Link时会报错误)静态成员为父类和子类共享。但为了防止父类的影响,可以在子类定义一个与父类相同的静态变量,以屏蔽父类的影响...

2020-05-13 17:43:35 100

原创 拷贝构造函数的几个细节

为什么拷贝构造函数必须是引用传递,不能是值传递?会引起无限循环。当类中数据成员有指针时,必须要用深拷贝什么情况下必须定义拷贝构造函数?当类的对象用于函数值传递时(值参数,返回类对象),拷贝构造函数会被调用。如果对象复制并非简单的值拷贝,那就必须定义拷贝构造函数。例如大的堆 栈数据拷贝。如果定义了拷贝构造函数,那也必须重载赋值操作符。以下函数哪个是拷贝构造函数?X::X(const X&); //拷贝构造函数X::X(X); X::X(X&, int a=1.

2020-05-13 15:23:58 148

原创 你真的了解namespace吗?

using 声明(using declaration)using std::cout;using 声明可以出现在全局、局部、类的作用域和名字空间中。在类作用域中using声明只能引用基类成员;using 指示(using directive)using namespace std;using 指示可以出现在全局、局部的作用域和名字空间中,不会出现在类的作用域中;...

2020-05-13 15:09:16 129

原创 C++ Lambda避免使用默认捕获模式

auto func(){int addend = 5;static int baseValue = 3;return [=]() { // 实际上只复制了addend++baseValue; // 修改会影响静态变量的值return baseValue + addend;};}auto func(){int addend = 5;static int baseValue = 3;return [addend, baseValue = baseValue]() mutable {

2020-05-12 20:09:46 1066 1

原创 C++模板别名

template class Tusing MyAllocatorVector = std::vector<T, MyAllocator<T>>;MyAllocatorVector<int> data;禁止使用std::move操作const对象void Func(int i){auto p = new int {7}; // 不好: 通过 new 初始化局部指针auto q = std::make_unique<int>(9); // 好:

2020-05-12 20:01:09 176

原创 C++/C语言中的未定义行为

什么是未定义行为简单地说,未定义行为是指C语言标准未做规定的行为。编译器可能不会报错,但是这些行为编译器会自行处理,所以不同的编译器会出现不同的结果,什么都有可能发生,这是一个极大的隐患,所以我们应该尽量避免这种情况的发生。特征包含多个不确定的副作用的代码的行为总是被认为未定义。(简单而言, “多个不确定副作用” 是指在同一个表达式中使用导致同一对象修改两次或修改以后又被引用的自增, 自减和赋值操作符的任何组合。这是一个粗略的定义)...

2020-05-12 19:42:50 671

原创 C++避免使用const_cast

const_cast用于移除对象的const和volatile性质,使用const_cast转换后的指针或引用来修改const对象,行为是未定义的。class Foo {public: voif Func() { }}const Foo f;Foo* p = const_cast<Foo*>(&f);p->Func(); // 未定义行为...

2020-05-12 19:27:42 573

原创 C++将派生类赋值给基类终结篇

向上转型后通过基类的对象、指针、引用只能访问从基类继承过去的成员(包括成员变量和成员函数),不能访问派生类新增的成员。基类指针指向派生类对象如果访问的是基类中的虚函数,且派生类中也实现了该函数,则访问的是派生类中的实现namespace {class Base {public: virtual void Display(const std::string &text = "Base!") { std::cout << text <&lt.

2020-05-12 18:29:44 565

空空如也

空空如也

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

TA关注的人

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