EagleBear2002 的博客

这里必须根绝一切犹豫,这里任何怯懦都无济于事

关键词:天生犯罪人理论、社会防卫论、优生学、犯罪饱和原理

刑法对犯罪的立场

刑法是关于犯罪和刑罚的法律规范的统称。包括犯罪论和刑法论两部分。

关于犯罪的两种立场:

  1. 自由意志论(决定论):认为人的自由意志选择犯罪,所以犯罪人必须要承担责任
  2. 天生犯罪人理论(被决定论)
阅读全文 »

空指针

1
2
#define NULL ((void *)0) // ANSI C
#define NULL 0 // C++

常量指针与指针常量

声明 性质
const int x; x 不可修改
int *p; 不能指向 const int
常量指针:const int *cp; *cp 不可修改,cp 可修改
指针常量:int * const p; p 的指向不可修改,*p 可修改
1
2
3
4
5
6
7
8
9
10
11
const int c = 128;
int* q = const_cast<int*>(&c);//强制类型转换
*q = 111;//企图通过变量指针修改常量
cout << " c " << &c << c << endl; // 这里的 c 是符号常量,所以在编译的时候,符号常量已经变为 128 了,相当于 define
cout << " q " << &q << q << endl;
cout << "*q " << q << *q << endl;
//Name Addr Value
// c 0012FF74 128
// q 0012FF70 0012FF74
//*q 0012FF74 111
//对于同一个地址 0x0012FF74,输出了不同的值
阅读全文 »

编译预处理

  1. 与作用域、类型、接口等概念格格不入
    1. 潜伏于坏境:编译预处理,可以不写在程序中
    2. 穿透作用域:在编译预处理的时候,忽略作用域。
1
2
3
4
5
6
7
8
9
10
11
12
13
//编译预处理潜伏于环境
#include <stdio.h>
extern double sqrt(double);
void main() {
printf("The square root of 2 is %g\n", sqrt(2));
fflush(stdout); //立刻输出
return (0);
}
// cc -Dsqrt=rand -Dreturn=abort(-D 是开关变量,Define,是 find&replace)
//上一句的含义是将 sqrt 转换成为 rand,然后将 return 替换成 about
//返回值
// The square root of 2 is 7.82997e+28
// abort - core dumped(将内存中所有的状态保存下来)
  1. 设想:
    1. 置换
    2. 应用方式丰富,很难为其的找到具有更好的结构且高效的替代品
  2. 关于对于 #include#define#ifdef#pragma 的不同处理

#include

阅读全文 »

商业事务与系统事务

商业活动(Business Activity):例如,用户浏览产品目录,选中了一瓶价格很实惠的 Talisker 威士忌,填入信用卡信息,然后确认订单。

需要确保最终一致性,但是出于时间、交互的考虑,无法使用事务加以实现

  1. 如使用事务实现,必须锁住数据库中各个元素。而长时间锁定元素是不现实的。
  2. 因此,应用程序通常只在处理完用户交互操作之后才开始系统事务,这样的话,锁定时间就比较短了。
  3. 然而当需要计算和决策的时候,数据有可能已经改动了。价格表上 Talisker 威士忌的售价也许已经变了,或是某人可能会修改客户的地址,从而导致运费改变

条件更新(conditional update),客户端执行操作时,将重新读取商业活动所依赖的信息,并检测该信息在首次读取之后是否一直没有变动,若一直未变,则将其展示给用户。

阅读全文 »

关系型数据库试图通过强一致性来避免各种不一致的问题。NoSQL 领域则讨论 CAP 定理和最终一致性。

更新一致性

  1. 写冲突:当两个客户端试图同时修改一份数据时
  2. 读写冲突:当某客户端在另一个客户端执行写入操作的过程中读取数据时

解决方式:

  1. 悲观处理:使用写入锁避免冲突,大幅降低系统反应能力
  2. 乐观处理:在事后检测冲突并将其修复,条件更新(conditional update):任意客户在执行更新操作之前,都要先测试数据的当前值和其上一次读入的值是否相同
  3. 乐观处理:保存冲突数据 。用户自行合并(merge)或自动合并(面向特定领域),用于分布式版本控制系统
阅读全文 »

单一服务器

分片

把数据的各个部分存放于不同的服务器中,以此实现横向扩展。该技术称为分片。

分片
  1. 分片可以同时提升读取与写入效率
  2. 分片对改善数据库的故障恢复能力帮助并不大。
阅读全文 »

聚合

在领域驱动设计中,把一组相互关联的对象视为一个整体单元来操作,而这个单元就叫聚合(aggregate)。

  1. 通过原子操作(atomic operation)新聚合的值(含一致性管理)。
  2. 以聚合为单位与数据存储通信
  3. 在集群中操作数据库时,用聚合为单位来复制和分片
  4. 由于程序员经常通过聚合结构来操作数据,故而采用聚合也能让其工作更为轻松
  5. 面向聚合操作数据时所用的单元,其结构比元组集合复杂得多
关系模型
聚合数据模型
阅读全文 »