如何进行域划分
1 用户需求场景分析,识别业务全景 use case。这一个阶段重点识别 actor 和 use case。
2 分析模型鲁棒图,识别出业务场景中所有的实体对象。识别边界类(类似 ui)、控制类(类似 controller)和实体类(类似model)三种类型。
3 领域划分,将所有识别出的实体对象进行分类。
比如,主订单、子订单对象和归类到交易域;买家、卖家对象可以归类到会员域。
当然,最终所有的对象是归类到十个域还是二十个域,从理论上看,可以看做一次排列组合过程。只是,我们往往可以根据以往的经验、业务知识,做一个初始的域划分(但不见得是靠谱的)。因此,我们可以认为一个域实际上是一个或多个实体对象的信息集合,并对所管理的实体对象的生命周期进行管理。
4 评估域划分合理性,并进行优化。域划分并一定总是能得到唯一的答案,但可以得到最好的答案。评价一个域划分方案是不是足够好,其实是要根据“高内聚、低耦合”的原则进行评分。这一步就要画时序图了。
时序图的泳道,应该先设计到域颗粒度。可以看到域之间的交互,也就可以看到域之间的交互的复杂度。在绘制过程中,我们可以看域与域之间的调用是否过于频繁?甚至 ...
Redis 笔记之四:常用命令
全局命令查看所有键12# 查看所有键,支持 glob 风格通配符keys *
这个命令会不加区别地,做全局的键扫描,返回且只返回键。它的时间复杂度是O(N),线上环境因为无法预测键的数量,应该禁用这个命令。
看起来 redis 并没有做一个全局的 keys 的缓存,所以并没有办法优化局部性能,但即使存在一个全局的 keys 列表,对这个列表进行遍历,其时间复杂度依然是 O(N)。
键总数12# 查看所有键dbsize
这个操作的性能是 O(1),也就意味着可以直接被线上使用。
它可以作为查询全部数据以前的预优化,至少全局的记录数量可以预先提取出来,以获得分页查询的依据。
检查键是否存在12# 确认 java 作为一个键是否存在exists java
如果存在返回 1,不存在返回 0。
注1:在存在多个候选返回值的时候,redis会返回语义更加丰富的返回值。如返回成功或失败,可以直接返回true或false,但返回0既可以表示失败,也可以表示操作的操作数(operand)为0,而返回非0不仅可以告诉我们操作成功了,而且还会精确地告诉我们操作了多少个对象,可谓一举两得。这种设计思路遍布 R ...
Redis 笔记之三:数据结构和内部编码
如前文所述,Redis 自带数据类型包括:string、hash、list、set 和 zset,但它们实际上只是 redis 的外部数据类型。Redis 还自带一套内部的编码实现,可以通过以下命令查询键的实际内部编码类型:
123# 组合命令object encoding hello"embstr"
string int(小于8B)/embstr(小于39B)/raw(其他)
hash hashtable/ziplist
list linkedlist/quicklist/ziplist
set hashtable/intset
zset skiplist/ziplist
ziplist 对复杂数据结构几乎是万能的。他的特点是比较节省内存,但在数据元素较多的情况下性能比较容易下降。
Redis 笔记之二:toolkit
Redis 笔记之二:toolkit标签(空格分隔): Redisredis-server常用的配置文件内容:
port 一般是 6379
logfile 日志文件(redis 的日志文件和 Kafka 不一样,和存储文件是分离的)
dir Redis 工作目录(存放持久化和日志文件)
daemonize 是否以守护进程的方式来启动 Redis
redis 的 minor 版本号如果是奇数,则含有实验性 feature 的非稳定版本;如果是偶数,则是稳定版本。所以我们应该在生产环境使用偶数版本,而在实验性环境里使用奇数版本。
redis-clicli 有两种工作形式:interactive 和 non-interactive。
使用 redis-cli 关闭 redis 的时候,redis 会做优雅关闭的操作,优雅关闭主要包括:
断开客户端连接。
存储数据到 rdb 文件。
所以要尽量用 shutdown 命令,而不要直接 kill(待完成,kill 的分类)。
redis-benchmark基准测试工具
redis-check-aofAOF 持久化文件校验和修复工具
redi ...
Redis 笔记之一:Redis 特性
Redis 高性能的原因Redis 的读写性能达到 10w/s,主要基于以下原因:
数据主要放在内存中。
Redis 使用距离 OS “层次更近”的 C 语言实现。
Redis 使用单线程架构,没有很高的 lock contention。
IO 多路复用技术
Redis 的代码实现得优雅而兼顾性能
Redis 的数据结构Redis 本身是 Remote Dictionary Server 的简称,其中,老的、常见的数据结构有:
字符串
哈希
列表
set(集合)
zset(有序集合)
但后来追加了几种新颖的数据机构,包括:bitmap、hyperloglog,更后来更添加了 GEO 地理信息相关的工具。
基于这些数据结构,我们可以实现一些常见的功能:
键过期,可以用来实现缓存,进而实现分布式锁。
发布订阅功能,进而实现消息系统(待尝试)。
Lua 脚本功能,可以实现自定义的 Redis 命令(待尝试)。
实现简单的事务功能,能在一定程度上实现事务特性。
提供流水线功能,能够让客户端一次性把一批命令一次性上传到 Redis 里,能够合并 IO 并减少网络开销(注意,不同于事务特 ...
Differences between Proxy and Decorator Pattern
https://stackoverflow.com/questions/18618779/differences-between-proxy-and-decorator-pattern
https://powerdream5.wordpress.com/2007/11/17/the-differences-between-decorator-pattern-and-proxy-pattern/
Decorator Pattern focuses on dynamically adding functions to an object, while Proxy Pattern focuses on controlling access to an object.
Relationship between a Proxy and the real subject is typically set at compile time, Proxy instantiates it in some way, whereas Decorator is assigned to the subject a ...
所谓解耦
软件设计,必有单元/片段,不管他们叫做系统、层次、模块、类型和方法,都是为了在一个抽象颗粒度上分割复杂度,让我们降低思考的难度,并且进行团队协作。
我们在进行系统交互的时候,要尽量设计单元交叉点通过薄的中间层交互。也就是放弃直接性,拥抱间接性。
间接性的实现,就是契约、接口或者门面/桥接模式。这些实践的使用,可以轻易让我们切换层次之间的实现,而使变动不扩散出去。
正则表达式速记
字符类或者字符集
字符组(character classes)
字符集(character sets)
元字符 metacharacters
[abc] A single character of: a, b or cabc Any single character except: a, b, or c[a-z] Any single character in the range a-z[a-zA-Z] Any single character in the range a-z or A-Z^ Start of line$ End of line
开头结尾:^$,正好对应键盘上的64。
\A Start of string\z End of string. Any single character\s Any whitespace character\S Any non-whitespace character\d Any digit\D Any non-digit\w Any word character (letter, number, ...
同比环比问题
同比比较微观,环比比较宏观。
摘自百度:
同比,是指在相邻时段中的某一相同时间点进行比较;
13年和14年是相邻时段,13年3月和14年3月是这两个相邻时段的同一个时间点,都是3月,这两个时段进行数据对比,就是同比;
环比,则相对更简单,就是相邻时间段的对比,不象同比那样,是在相邻时间段内部的某个相同时间点的对比;
14年4月和14年3月是相邻时间段,这两个时间段的数据都比,就是环比;
关键述职
什么是关键述职可以决定自己职场命运的述职,一次汇报,就是一个转折点,就是关键述职。
职场不是比拼正确性,而是比拼说服力。
关键述职的误区
把述职当作做了什么的流水账。做了什么不重要,做了什么带来什么价值才重要。一定要解答这个疑问,“所以呢,然后呢”。
把述职当成了邀功大会。只讲价值。
工作成果固然重要,关键能力要看是否有归因和理性思考能力。
方法So what找出问题的原因。通过没完没了地问自己,逼迫自己对自己的工作进行深度思考,得出结果,措施。不要怕错。
如何产生这个价值,如何复用这种方法论,如何持续地产生这种价值。
So page跟公司的战略同步。
不同阶段,重要性是不一样的。
A 求增长增长期就要看增长率
B 求利润要看真实效率和投入产出比。
C 求生存,求稳节衣缩食,勒紧裤腰带过冬。