- 博客(57)
- 收藏
- 关注
原创 设计模式-领域模式
“领域“模式:在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域下的一般性解决方案。
2025-03-26 09:29:42
576
原创 设计模式-行为变化
”行为变化“模式:在组件的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。“行为变化"模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦
2025-03-24 20:14:48
723
原创 设计模式-数据结构
数据结构“模式:常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。Composite 组合模式Iterator 迭代器模式Chain Of Resposibility 职责链模式。
2025-03-23 14:41:28
1047
原创 设计模式-状态变化
”状态变化“模式:在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化"模式为这一问题提供了一种解决方案。
2025-03-22 19:09:46
749
原创 设计模式-接口隔离
接口隔离”模式:在组件构建过程中,某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接(稳定)接口,来隔离本来互相紧密关联的接口是一种常见的解决方案。
2025-03-21 17:02:10
687
1
原创 设计模式-对象性能
"对象性能”模式:面向对象很好地解决了“抽象”的问题,但是不可避免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某种情况下,面向对象所带来的成本必须谨慎处理。Singleton 单例模式Flyweight 享元模式确保一个类只有一个实例。有些对象全局只应该存在一个,拥有多个在逻辑上会出问题。为该实例提供全局访问点。有些对象有全局访问属性。动机:在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很块充斥在系统中,从而带来很高的运行时代价—主要指内存需求方面的代价。
2025-03-18 15:10:36
885
1
原创 设计模式-对象创建
对象创建”模式:通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。Factory Method 工厂方法Abstract Factory 抽象工厂PrototypeBuilder在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?
2025-03-17 17:59:20
980
原创 设计模式-单一职责
在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。Decorator 装饰模式Bridge 桥模式在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?
2025-03-17 11:18:52
1216
原创 设计模式-组件协作
组件协作模式:现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。Template Method 模板方法Observer/Event 观察者模式Strategy 策略模式动机:在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。
2025-03-16 19:49:36
795
1
原创 Redis持久化
Redis 支持 RDB(RedisDataBase) 和 AOF(AppendOnlyFile) 两种持久化机制,持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。
2025-02-17 16:00:51
1044
原创 Redis内部数据结构--跳表详解
skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是一样的,可以作为key或者key/value的查找模型。
2025-01-23 17:17:32
2002
原创 高级IO(多路转接)
我们最常见的IO是和磁盘打交道,众所周知磁盘的速度虽然没有内存、cache、寄存器快,但是对于我们来说也是比较快的,如果读写的内容不多,几乎可以在一瞬间完成IO但IO碰上网络时,等的时间就是肉眼可见的增多了,本节的IO分案主要也是为了解决IO速度问题。
2024-12-12 18:41:00
981
原创 高并发内存池--tcmalloc
tcmalloc是Google开源项目,全称thread caching,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关函数
2024-12-08 16:32:15
843
原创 分布式在线评测系统
此项目是仿leetcode实现在线OJ功能的,只实现类似leetcode的题目列表+在线编程功能主要聚焦于后端设计,前端仅仅实现其功能即可。
2024-11-23 21:10:25
1303
原创 智能指针RAII(C++)
智能指针基于RAII思想,RAII是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。
2024-11-09 17:14:38
955
原创 AVL树详解
AVL树是二叉搜索树的改进版本,思考一下,二叉搜索树有什么问题?当我们向二叉搜索树里插入有序序列时,那么二叉搜索树就会退化成线性的,查找效率会变成O(n)
2024-11-01 16:12:40
1045
原创 STL--map、set详解
序列式容器:按元素的插入顺序存储数据,支持顺序访问。每个元素在容器中的位置与其插入顺序相关。关联式容器:按键值对存储数据,通常根据键的值进行排序(在有序关联容器中)或哈希(在无序关联容器中)。
2024-10-25 17:29:01
1021
原创 二叉搜索树详解
想要深入理解和运用C++STL标准库的map和set,掌握二叉搜索树是必不可少的,了解二叉搜索树的特性,有助于更好的理解map和set的特性。
2024-10-24 15:40:39
1038
原创 c#音乐播放器续(联网下载)
书接上文,我们已经实现了一个能够播放本地音乐的音乐播放器,能够播放众多音乐格式,包括.ogg,接下来,我们将为我们的音乐播放器添加一个令人激动的新功能——联网音乐下载和播放!这个功能将使我们能够通过网络获取音乐,并将其添加到我们的播放列表中。
2024-06-19 12:23:01
1104
1
原创 c#实现音乐的“vip播放功能”
最近在QQ音乐里重温周杰伦的歌,觉得好听到耳朵怀孕,兴起想要下载下来反复听,发现QQ音乐VIP歌曲下载下来的格式居然不是MP3格式,是ogg。OMG!ogg是什么鬼,都不能直接听,顿感失落,思来想去决定自己实现一个QQ音乐的播放功能,搞定这ogg!
2024-05-07 10:23:53
866
3
原创 c#让不同的工厂生产不同的“鸭肉”
实现对周黑鸭工厂的产品生产统一管理,主要产品包括鸭脖和鸭翅。武汉工厂能生生产鸭脖和鸭翅,南京工厂只能生产鸭翅,长沙工厂只能生产鸭脖。
2024-04-05 11:52:47
719
原创 c++类和对象万字详解
c++是面向对象的语言,学习c++的第一步就是理解c++类和对象的性质,c++由于产生时间较早,在语法学习上相较于其他面向对象的语言会有不少的坑,虽然这些坑会阻碍我们学习,但是当我迈过这些坑以后,会对c++有更深的理解。
2022-09-28 20:06:59
850
10
原创 c++必学的前置语法详解
众所周知,c++是在c语言的基础上扩展了许多新东西,而这些新东西是为了解决c语言中的一些“麻烦”,所以我们在学c++时,先弄懂一个语法为什么产生或许会事半功倍。
2022-09-17 12:36:23
370
21
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人