-
组件协作:Template Method
2. 组件协作2.1 Template Method定义一个操作中的算法的骨架 (稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。2.1.1 动机(Motivation) 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。 如何在确定稳定操作结构...…
-
设计模式引言和面向对象设计原则
(三) 设计模式(Design Patterns)“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。 ——Christopher Alexander0. 如何解决复杂性? 分解 人们面对复杂性有一个常见的做法:即分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单问题。 抽象 更高层次来讲,人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的...…
-
对于C++ 深拷贝和浅拷贝的简单总结
1. 对于基本类型的数据以及简单的对象(不带指针),它们之间的拷贝非常简单,就是按位复制内存class Base{public: Base(): m_a(0), m_b(0){ } Base(int a, int b): m_a(a), m_b(b){ }private: int m_a; int m_b;};int main(){ int a = 10; int b = a; //拷贝 Base obj1(10, 20); Base ob...…
-
对于C++ const的一些用法总结
const的一些简单总结1. const 使用的三个位置const 使用的三个位置指的是: 形参(input):该形参不能改变 函数(只读函数) 返回值:函数返回值不能改变2. const 的顶层和底层讨论指针本事就是一个对象,它有可以指向另外一个对象,所以指针本身是const和本身指向的对象是const就是两个独立的问题; 顶层const:指针本身是常量 底层const:指针指向的对象是常量 顶层const可以表示任意的对象是常量。这一点对于任何数据类型都适用,如算术类型、类...…
-
对于C++引用的一些用法总结
1. 对于C++引用的一些用法总结引用就是一个变量的别名,它必须初始化,具体可参考c++primer。它最重要的用法就是再一个函数中,作为形参,或者作为函数的返回值使用, pass by reference 与它对应的是 pass by value 能用pass by reference 能用一定要用,比如 因为这样效率高,比如传入参数是一个类类型,那这个数据就可能很大,reference就是一个指针,这样不用将所有数据压入栈中,提高效...…
-
二进制数的加减乘除-笔记
摘要:CS中不可能少的了二进制数的加减乘除,之前学习数电时进行总结过,但是又忘了,在学习《计算机组成原理》的定点和浮点运算中,又一次出现除法,特此在此记录,以便下次使用:2021年12月7号18点19分二进制数的加法加法很简单,原则就是逢二进一比如下例: 1 0 0 1+ 0 1 0 1___________________ 1 1 1 0 二进制数的减法 如果采用与十进制减法相同的方法,那么从一个较大的二进制数中减去一个较小的无符号二进制数是一个道理 如果...…
-
GIT学习教程汇总
chapter(一)1.1 题记Git又名分布式版本控制系统,是大神Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeepe.Torvalds 只花了两周时间,自己用C写了一个分布式版本控制系统,大喊:厉害啊!重点 :Git是开源而且免费的,且为最流行的分布式管理软件。1.2 Git能干什么?简单来讲,当你写代码时,因为会有很多版本,你不可能也不会把每个版本都特...…
-
《操作系统导论》学习笔记(一)
本系列是读《操作系统导论》的读书总结。本书作者是:Remzi H. Arpaci-Dusseau)和Andrea C. Arpaci-Dusseau,译者:王海鹏本书链接原作者主页吐槽:本书的翻译水平实在是不敢恭维,但书绝对是好书,建议读的时候可以对照英文原版。此外,本系列还参考了巨作《现代操作系统》[toc]chapter1 关于本书的话第一章的内容比较少,作者只是用简单的语言介绍了3个大主题,这三个主题是本书的总体框架。三大主题分别为: 虚拟化 并发 持久性chapter2 操作...…
-
Docker学习笔记02
[toc]2.1 Docker守护程序安装完Docker后,需要确认Docker的守护进程是否运行,Docker是以root权限运行它的守护程序,进而可以处理普通用户无法完成的操作(比如挂载文件系统)。docker程序是Docker守护进程的客户端程序, 同样的也是需要以 root 的方式运行。一般在安装完后,默认会立即启动Docker守护进程。2.2 检查Docker守护进程是否正在运行前面说了,安装完后,默认会立即启动Docker守护进程。但是,如何确定是否运行了呢?可以使用命令:s...…
-
Docker学习笔记01
[toc]1.1 Docer是什么?诸位知道什么是虚拟机吗?Docker与它有点像,注意是有点,实际上,两个完全不是一个东西。Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。听起来有点绕,没有关系,在往下看看。诸位可否知道什么是集装箱吗?这是网上的一个比喻,非常形象,在这里引用下。如果没有集中箱,运货的时候很麻烦,因为大家的货物都不同,有的能压有的不能压,而且拆卸的时候就更麻烦了。有了集装箱(相当于容器),我们就可以将不同港口、不同的货物放到集装箱之内。这样就能以标准的方式...…
-
Git学习记录10
[toc]chapter(十)10.1 如何管理分支在实际的开发过程中,可能会产生很多很多分支,尤其是在多人团队的合作中,大家都在各自的分支干活,等干的差不多了就进行合并。为了避免出现错误:有一种合理的分支管理方法是非常重要的。根据上面的图片,提出的一种管理方法是:每个人都在dev分支下干活,各自有各自的分支。比如说李明在自己的分支干活,感觉差不多了,就把自己分支的内容合并到dev中。王二也是如此。 这样的好处是,dev分支的内容是总在变得,但是master是不怎么变得。这样遇到代码新版本...…
-
Git学习记录09
[toc]chapter(九)9.1 分支冲突如何解决9.1.1 换一种新的方式创建切换分支上一章主要讲的是如何创建分支和合并分支。可在Git实际的使用过程中,往往会遇到分支冲突的情况。动手实践下:假设现在创建一个分支conflict,还记得如何创建吗?使用命令:git branch <分支名>可以创建分支。然后再使用:命令git checkout <分支名>或git switch <分支名>切换分支。现在我觉得有些麻烦,我重新找到了一种更加简单的方法:...…
-
个人项目T2AV介绍
[toc]T2AV项目名称:T2AV软件开发项目背景:看到了某乎的创作者首页有一个文本转视频,来快速帮助创作者进行视频创作的软件,我自己试用了下,于是对其产生了浓厚的兴趣,所以决定开发一款类似的工具。项目功能:文本转视频,文本转音频。项目综述:本项目采用Python进行开发,软件整体思路:输入文本,经过百度api输出音频,对音频进行分割处理,与对应文本匹配,根据分割文本进行语义分析,提取主题词,进行爬虫处理获取图片,爬虫备选两个网站(百度图片和pixabay),有交替逻辑,这是因为pixa...…
-
Git学习记录08
[toc]chapter(八)8.1 对分支的理解在第2章对版本回退说明时,讲到Git将每次提交都创建成一个时间线。而这条时间线就是一个分支,也就是现在唯一有的那个master。master被成为主分支,还记得命令git reset HEAD <file>吗?这里面有个HEAD,它就是指向master.看下下面这张图,图是盗的:可以很清晰的看到,master是指向最新提交,而HEAD是指向master,而那三个圈指的就是每次提交的内容,每提交一次master就会向前移动,这样就...…
-
Git学习记录07
[toc]chapter(七)7.1 Github创建远程仓库有了Github账号后,我们就可以免费的创建一个远程仓库。光说不练,假把式,直接开始干吧!进入Github网站,寻找New Repository,点进去,这个是创建新仓库的意思。进去后,如下图: 在1处输入仓库名字 在2处输入仓库描述 在3处选择Add a README file 在4处选择创建仓库这时你的仓库就建立好了,而且Github为我们建立好了一个README.md文件。有了远程仓库,我们就可以把他克隆到本地仓库...…
-
Git学习记录06
[toc]chapter(六)6.1 初始Github还记得第一章说过,Git是一款优秀的分布式版本控制软件,而与其相对的是集中式版本控制(SVN).还记得吗?SVN要有一台电脑充当中央服务器,没有中央服务器,大家就玩完。而分布式版本控制软件可以没有这个中央服务器,但是不代表它不需要。准确来说它不应该由中央两个字。而在与其他人交流的时候,我们总要由一个媒介。可以想象下,在一个组织里,每个人如果都从中央服务器里拷贝一份代码,在自己的电脑里进行工作,干完活,在把自己的工作推送给中央服务器,这样...…
-
Git学习记录05
[toc]chapter(五)5.1 如何删除文件?上一章说的是撤销修改,这一章就谈谈如何删除文件。实践是检验真理的唯一标准,话不多说,直接干:toto@pc:~/code/testGit$ vim deleteFile.txttoto@pc:~/code/testGit$ cat deleteFile.txtThis is a test deleted file!toto@pc:~/code/testGit$ git add deleteFile.txttoto@pc:~/code/te...…
-
Git学习记录04
[toc]chapter(四)4.1 如何撤销修改?git checkout -- file可以丢弃工作区的修改什么意思呢?比如说你写错了一行代码或者写错了一句话,我要把它删掉。这是就可以撤销修改了、让我们实际操作一遍,这样更容易让人理解:在README.txt中写下这句话:Summer is comming!toto@pc:~/code/testGit$ vim README.txttoto@pc:~/code/testGit$ cat README.txtThis document i...…
-
Git学习记录03
[toc]chapter(三)3.1 暂存区概念对Git很重要暂存区是什么呢?我们先谈谈别的概念: 工作区(woking directory) :工作区就是能看到的电脑目录。 如:toto@pc:~/code/testGit$ pwd/home/toto/code/testGit命令:pwd后显示的目录,就是工作目录。 仓库有名版本库(repository) : 多说无益,直接看看toto@pc:~/code/testGit$ ls -ah. .. .git helloword....…
-
Git学习记录02
[toc]chapter(二)2.1 插:如何更改当前Git用户名和邮箱?使用git config --global --list可以查看当前账户和邮箱再使用:git config --global user.name "username"git config --global user.email "@email"2.2 继续Git,使用git status 查看状态toto@pc:~/code/testGit$ git statusOn branch masternothing to ...…