UML
基于 UML Distilled Third Edition: A Brief Guide to the Standard Object Modeling Language 编写
在线画图网站:draw.io
简介
统一建模语言 Unified Modeling Language(UML) 是图像标记家族,通常用于面向对象编程中
标准由 OMG 制定
UML 通常有三种用法:
草稿——最常用
蓝图
编程语言
两个时间阶段:
前向工程:在写代码之前画图
逆向工程:从现有的代码中构造 UML 图以帮助理解代码
也正因为前两种用法更常见,故应该力求简洁,抓住要点,就像设计模式一样,通过公认的规范让人能够快速抓住要点。所以在使用的过程中要尽量避免那些微妙的歧义之处
类图
类图是最常见的图之一
属性 properties 代表类的结构化特征,有两种标记方式:
Attribute:直接写在类的框图中
通常语法如下:可见性 名字: 类型 乘数 = 默认值 {属性字符串}
例如:- title: String [1] = "Untitled" ...
WSL2
邪教——适用于 Linux 的 Windows 子系统(WSL2)
尽管 WSL2 中的 Linux 内核是不完整的,但几乎已经足够使用了。而且其无论是启动速度还是易用性方面都比虚拟机好得多,而且 IP 地址相同
参考文档:适用于 Linux 的 Windows 子系统文档 | Microsoft Learn
安装
wsl --install
查看可用非发行版:wsl --list --online
列出已安装的版本:wsl --list --verbose
安装指定 Linux 发行版:wsl --install -d <distribution name>
运行指定 Linux 发行版:wsl --distribution <Distribution Name>
设置默认 Linux 发行版:wsl --set-default <Distribution Name>
关闭:wsl --shutdown
设置开发环境
换源:使用中科大源
这里使用的是最新的 Ubuntu 24.04,使用其提供的命令:
sudo sed -i 's@//. ...
故乡
友谊
他站住了,脸上现出欢喜和凄凉的神情; 动着嘴唇,却没有作声。他的态度终于恭敬起来了,分明的叫道:
“老爷! ……”
我似乎打了一个寒噤;我就知道,我们之间已经隔了一层可悲的厚障壁了。我也说不出话。
只能说把鲁迅的文章放到中学课本中实在是太超前了,以至于在我第一次看到这篇文章时,只记得了文末的那段名句,还有已经被玩坏的“闰土刺猹”的梗,居然没有被这一段文字给深深地震撼到。“一层可悲的厚障壁”居然还是一道思考题,当年回答的时候绞尽脑汁把一些语文阅读理解的套路的词语往里面套,现在那堵墙似乎就堵在我面前一样,深深的无力感就那样横在面前,无需多言。
友谊怎么写最刀?不是互相背叛,不是迫于无奈走向了对立面,而是一下子从理想跌落到现实产生的落差。
张华考上了北京大学;李萍进了中等技术学校;我在百货公司当售货员:我们都有光明的前途。
曾记得当我第一次拿到一本新华字典的时候,我爱不释手,尤其喜欢看最后的那部分,朝代的更替还是我在那里学到的呢。这一句话我似乎有点印象,是用来演示某个标点符号用法的例句,当时我并没有在意。现在看来,确实是充满了讽刺意味。不知道是否有一段时期这三者能平起平坐,甚至 ...
Effective Modern C++
基于 Effective C++: 42 Specific Ways to Improve Your Use of C++11 and C++14 编写
推断类型
理解模板类型推断
在模板类型推导中,引用参数被视为非引用
对通用引用 && 参数,左值参数特别对待
在按值传递参数时,const 和 volatile 参数被视为非 const 和非 volatile
在模板类型推导中,数组或函数名参数退化为指针,除非被用于初始化引用
理解 auto 类型推断
auto 通常和模板类型推断一样,但是 auto 类型推断将大括号初始化 {} 视为 std::initializer_list,模板类型推断不这样
函数返回值中的 auto 或 lambda 参数是函数模板推断,不是 auto 类型推断
理解 decltype
decltype 在没有任何修改的情况下,几乎总是生成变量或表达式的正确类型
对于不同于名字的类型为 T 的左值表达式,decltype 总是返回 T&
decltype(auto) 类似于 auto,从初始化推断类型,但是使用了 ...
设计模式
基于 Design Patterns: Elements of Reusable Object-Oriented Software 编写
介绍
设计模式有四大必备元素:
模式名
问题:何时应用此模式
解决方案:应用于不同情况下的模板
后果:应用该模式的结果与取舍
多种设计模式可以组合使用,事实上也经常组合使用
设计模式解决问题的方法:
找到合适的对象
确定对象的粒度
具体说明对象接口
具体说明对象实现
类与接口继承
给接口编程,而不是向实现
为了让复用机制生效
继承与组合——倾向于组合
指派
继承与参数化类型
运行时和编译时结构
aggregation:一个对象拥有另一个对象,即两者有相同的生命周期
acquaintance:一个对象仅仅知道另一个对象
为改变而设计:
通过
应用程序:
工具集
框架
创建模式
抽象工厂 Abstract Factory
目的:在具体说明具体类的情况下创建相关的对象家族
应用
一个应该被配置为多种产品家族之一的系统
一个家族的相关产品被一起使用
提供一类库的产品
结构
参与者
抽象工厂 - 具体工厂
抽象产品 - 具体产品 ...
植物大战僵尸
逆天评论
150 可以买双子向日葵,而火树只要175,我的意思是,虽然可以玩姐妹花,但我宁愿多花点钱也要玩个烧的
只要在寒冰射手前面放两根火炬树桩,就会变成火焰豌豆。我的意思是不管外表多高冷,两根就受不了
一般的植物都可以放在南瓜里保护起来,但是玉米加农炮不行,所以只要够大就可以不带
大喷菇升级成春哥以后能喷三路,我的意思是有钱哪个位置都能玩
虽然开局50阳光可以下向日葵,但是我选择25阳光的阳光菇等他长大,花一半的钱从小玩到大
大嘴花一口就能把僵尸吃掉,而豌豆射手却需要很久才能杀掉僵尸,我的意思是,口一下就能解决的事没必要那么麻烦
蘑菇在白天不能发挥作用,但是使用咖啡豆就可以,我的意思是实在不行下点药也能玩
南瓜罩可以保护大部分植物的安全,但毁灭蘑菇依然会炸出一个坑。我是说足够大足够强,套了也没用。
冰西瓜投手很贵,但是伤害高又很冷,我的意思是,只要你有钱,再高冷的都能拿下
在你犯错时为你兜底,在你成功时给你奖励。——小推车
仙人掌要125阳光,只能发出一排尖刺,而猫尾草225阳光却可以全图追踪. 我的意思是:多给一点,她会更灵活
我的意思是,前后夹击不如朝一个方向用力耕 ...
Effective C++
基于 Effective C++ Third Edition: 55 Specific Ways to Improve Your Programs and designs 编写
让你自己习惯于 C++
将 C++ 视为语言的联邦
C++ 不是一门单独的语言,其具有各种不同风格的语言特性,以至于可能出现两个同样使用 C++ 的人会看不懂彼此的代码。一般分为四大组成部分:
C
面向对象的 C++
模板 C++
STL
因此基于使用的 C++ 的部分不用,Effective C++ 编程的规则也可能不同
倾向于 const、enum 和 inline 而不是 #define
对于变量而言,const 和 enum 限制了作用域
对于函数而言,inline 函数能够避免一些未知错误
尽可能使用 const
声明某种东西 const 可以帮助编译器检测一些使用错误,同时 const 可以适用于任何作用域中的对象,包括函数参数,返回值,甚至整个成员函数
编译器强制 bitwise const,但应该使用逻辑 const 编程
当 const 和非 const 成员函数有相同的实现时,可以让非 ...
Java 开发手册
基于 Alibaba 的 Java 开发手册编写
编程规约
命名风格
类名:UpperCamelCase,其余使用 lowerCamelCase,常量全部大写
抽象类使用 Abstract 开头,异常类使用 Exception 结尾,测试类以要测试的类的名称开始,以 Test 结尾
包名统一使用单数形式
在变量命名时,表示类型的名词放在结尾,如 nameList
设计模式应该体现出来
接口类中不要加任何修复符号
Service/DAO 层命名规约:
获取单个对象:get
获取多个对象:list,并复数结尾
获取统计值用 count
插入 insert
删除 remove
修改 update
领域模型:
数据对象:数据表名 + DO
数组传输对象:业务领域相关的名称 + DTO
展示对象:网页名称 + VO
OOP 规约
所有整型包装类对象之间值的比较,均使用 equals
BigDecimal 使用 compareTo() 方法比较
所有 POJO 类属性和 RPC 方法必须使用包装数据类型,局部变量使用基本数据类型
集合处理
Comparator ...
IntelliJ IDEA
IntelliJ IDEA 是 Java 和 Kotlin 的知名 IDE,简单而功能强大
插件推荐
Chinese (Simplified) Language Pack / 中文语言包
我判断一个外国工具是否流行的唯一依据是其是否支持中文。 ——沃兹基·硕德
CodeGlance Pro
侧边栏显示代码缩略图,类似与 VS Code 的功能
Rainbow Brackets
彩虹括号,可惜是付费的,但也有免费的版本:Rainbow Brackets Lite
Alibaba Java Coding Guidelines(XenoAmess TPM):基于 Java 开发手册,提供了一系列的代码检查和修复功能
Json Parser:验证和格式化 JSON 字符串的工具
Grep Console:给控制台输出标上颜色,过滤输出等
Atom Material Icons:IDEA 版的 Material 图标库
RestfulTool
方便查看 Restful 服务开发
C++ 入门(下)
关联型容器 Associative Containers
关联型容器通常需要键满足 <,否则可以自定义一个:
bool compareIsbn(const Sales_data &lhs, const Sales_data &rhs) { return lhs.isbn() < rhs.isbn();}multiset<Sales_data, decltype(compareIsbn)*> bookstore(compareIsbn);
关联性容器定义了三种类型:
key_type
mapped_type
value_type
set:key_type
map:pair<const key_type, mapped_type>
set 的迭代器都是 const_iterator
.lower_bound() >=,.upper_bound() >,.equal_range()
除此之外,还有键可以重复的 multiset 和 multimap
unordered_set 和 unorde ...
Makefile
介绍
Makefile 的基本规则:
target ... : prerequisites ... recipe ... ...
target:可以是一个 object file(目标文件),也可以是一个可执行文件,还可以是一个标签(label)
prerequisites:生成该 target 所依赖的文件和/或 target
recipe:该 target 要执行的命令(任意的 shell 命令)
简单来说就是指定了一个依赖关系
输入 make 命令时,是这么工作的:
make 会在当前目录下找名字叫 Makefile 或 makefile 的文件
如果找到,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件
如果该文件不存在,或其所依赖的后面的 .o 文件的文件修改时间要比这个文件新,则执行后面所定义的命令来生成这个文件
如果所依赖的 .o 文件也不存在,那么 make 会在当前文件中找目标为 .o 文件的依赖性,如果找到则再根据那一个规则生成 .o 文件
最后用 .o 文件生成可执行文件
在 Makefile 中可以声明变量并 ...
打倒孔家店,救出孔夫子
~~抡语~~
既来之,则安之。
既然来到了这里,那么就安葬在这里吧。
子不语怪、力、乱、神。
夫子不想说话,施展起怪力将人打的神志不清。
朝闻道,夕死可矣。
早上听到我来了,今晚你就得死。
三人行,必有我师焉。
有三个人,只要其中有一个是我,战力就相当于一个师。
父母在,不远游,游必有方。
你父母在我手里,你跑不了的,就算你跑了,我也有办法把你抓回来!
论语
我小时候认为孔子说的话很有道理,也不管究竟是不是他说过的话,一律奉为圭臬。长大后有了独立思考的能力,并了解了一些历史,觉得孔子的话根本就不对。其之所以流行,只是迎合了统治阶级的需要,是用来麻痹老百姓的。再后来读了《论语》,理性思考之下,才发现我以前对孔子有很多的误解。他的很多思想直到现在都闪烁着光芒。数千年来,他为董仲舒所用、为朱熹所用、为陈独秀所用,他从一个“山东大汉”成为了一个“文弱书生”,是时候为他正名了,打倒那些人粉饰过后的“孔家店”,救出真正的那个“孔夫子”。
以德报怨,何以报德?以直报怨,以德报德。
要断章取义 —— 节选自《不要断章取义》
孔子的这句话无疑是被曲解最严重的,以至于 ...