「组合数学」母函数与递推关系
用函数求解组合问题r^x,代表取x个红球。现2个红球,1个白球,1个黄球
只求组合数,不求具体组合,则可令 $r=w=y=x$,$1+3x+4x^2+3x^3+x^4$
即一个球的组合数为3,2个球组合数为4…
「OOP」设计模式
肾莫是设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
软件模式是将模式的一般概念应用于软件开发领域,即软件开发的总体指导思路或参照样板。软件模式除了设计模式,还包括架构模式、分析模式和过程模式等。
分类
创建型模式
对象实例化的模式,创建型模式用于解耦对象的实例化过程。
结构型模式
把类或对象结合在一起形成一个更大的结构。
行为型模式
类和对象如何交互,及划分责任和算法。以及对象之间的通信问题。
创建型模式单例模式
确保某一个类只有一个实例,并且提供一个全局访问点。
场景:一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。
实现
饿汉式
1234567public class Singleton { private static Singleton instance = new Singleton(); ...
「OOP」UML图
UML(Unified Modeling Language),统一建模语言。是用来对软件密集系统进行可视化建模的一种语言。
UML类图
类之间的关系泛化关系(generalization)类的继承结构表现在UML中为:泛化与实现。
泛化关系表现为继承非抽象类:(A继承自B)
实现关系(realize)实现关系表现为继承抽象类或实现接口:
聚合关系(aggregation)聚合关系用于表示实体对象之间的关系,表示整体由部分构成的语义。例如:一个部门由多个员工组成。
与组合关系不同的是,整体和部分不是强依赖的,即使整体不存在了,部分仍然存在。例如, 部门撤销了,人员不会消失,他们依然存在。
下图表示B由A组成:
组合关系(composition)组合关系是一种强依赖的特殊聚合关系,如果整体不存在了,则部分也不存在。例如,公司不存在了,部门也将不存在了。
关联关系(association)一般用来定义对象之间静态的、天然的结构。关联关系是一种“强关联”的关系。例如:乘车人和车票之间、学生和学校都是一种关联关系。
用一条直线表示。
依赖关系(dependency)描述一个对象在运行期间 ...
「OS」Pre
定义操作系统是一组管理计算机硬件资源的软件集合,它向计算机程序提供共性的服务:
提供一个计算机用户与计算机硬件系统之间的接口,使计算机系统更易于使用。(使用者)
有效地控制和管理计算机系统中的各种硬件和软件资源,使之得到更有效的利用。(资源管理者)
合理地组织计算机系统的工作流程,以改善系统性能(如响应时间、系统吞吐量)。
历史沿革OS 史前阶段 -> 批处理 -> 分时 -> 现代 OS -> 网络化 OS / 分布式 OS
批处理
把用户提交的作业成批送入计算机,由作业调度程序自动选择作业运行
批处理系统
加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(包括程序、数据和命令)它分为:联机批处理系统和脱机批处理系统
首先出现的是联机批处理系统,即作业的输入/输出由CPU来处理。
在主机与输入机之间增加一个存储设备——磁带,在运行于主机上的监督程序的自动控制下,计算机可自动完成:成批地把输入机上的用户作业读入磁带,依次把磁带上的用户作业读入主机内存并执行,然后把计算结果向输出机输出
为缓解高速主机与慢速 ...
「组合数学」生成排列组合
路径数问题$C(m+n, n)$,从$(0,0)$到$(m,n)$,那么每一个路径对应一个 xxyx… 这样的排列,选n个位置放y,即 $C(m+n, n)$
$C(n,r)=C(n-1,r)+C(n-1,r-1)$
可推出杨辉三角。
$(_r^{n+r+1})=(r^{n+r})+(^{n+r-1}{r-1})+…+(^n_0)$
$(^{m+n}_r)=(^m_0)(^n_r)+…+(^m_r)(^n_0)$
m+n个球,m个红球,n个蓝球,取出的r个球:0个红球,r个蓝球…..r个红球,0个蓝球
生成排列由 n 个正整数组成的集合{1,2,..,n}有$n!$排列。
$n!=\sqrt{2\pi n}(\frac{n}{e})^n$
需求:从已知排列出发,生成新的排列
序数法递增进位以{(n-1)!,(n-2)!...2!,1!}为基数表示:$$n!=(n-1)(n-1)!+(n-1)!=…=\sum_{k=1}^{n-1}k\cdot k!+1$$那么对于任意一个整数 m($0\le m\le n!-1$):$$m=a_1( ...
「Linux 基本工具」GCC & make
前置知识GCC & Clang编译器是翻译代码为计算机语言的一个工具,我们平时写的代码如果想在某个特定的计算机上执行(计算机的cpu构架不同),就需要编译器来对代码进行编译汇编链接,而汇编和链接的过程对于每个不同的平台上过程都不一样。
gcc、clang是两个编译器,用于将高级编程语言,编译汇编链接成机器语言。
GCC → GNU Compiler Collection,也称GNU编译器套件,可编译许多种语言(C/C++, Java等)
gcc(GUN C Compiler)是GCC中的c编译器
g++(GUN C++ Compiler)是GCC中的c++编译器。(两者都可以编译c和cpp文件,但存在差异)
Clang → 一个支持编译C/C++/Objective-C语言的轻量级编译器。
make & cmakemake和cmake是搭配编译器来方便用户进行多文件编译而发明的工具。IDE的编译功能就包括实现了这些操作。
make → 相当于一个智能的批处理工具,本身没有编译和链接的功能,而是用类似于批处理的方式通过调用Makefile文件中用户指定的命令来进 ...
「Linux 基本工具」Vim
常用操作:
若想对vim进行永久的格式设置,可修改绝对路径~/.vimrc下的内容。例如想要对vim进行永久的行号显示设置,可在该文件内增添set nu或:set nu
各种插入模式
a → 在光标后插入
o → 在当前行后插入一个新行
O → 在当前行前插入一个新行
cw → 替换从光标所在位置后到一个单词结尾的字符
拷贝
除了y可以拷贝,以下也可
d (删除 )
v (可视化,先按v,然后移动光标可以选中文本)
gU (变大写)
gu (变小写)
移动光标
0 → 到行头
^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
$ → 到本行行尾
g_ → 到本行最后一个不是blank字符的位置。
w/W → 到下一个单词的开头。( 程序变量用小写,程序语句用大写 )
e/E → 到下一个单词的结尾。
% : 匹配括号移动,包括 (, {, [. (需要把光标先移到括号上)
* 和 #: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个,2#是上两个)
fa ...
「Linux 基础」Shell
Shell 前置知识简介Shell是一个用C语言编写的程序,用户通过这个界面访问操作系统内核的服务。
Sell 脚本(shell script)是一种为shell编写的脚本程序,通常也称为shell。
Shell 环境Linux 的 Shell 种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
…
Bash易用免费,使用广泛,并且也是多数Linux系统默认的Shell
运行test.sh:
12#!/bin/bashecho “Hello World”
#!表明这个脚本需要什么解释器执行
1. 作为可执行程序cd到对应目录:
12chmod +x ./test.sh #使脚本具有执行权限./test.sh #执行脚本
2. 作为解释器参数直接运行解释器,参数即shell脚本的文件名(脚本内无需在第一行指定解释器信息)
1/bin/sh test.sh
Shell 基础1. Shell 变量1.1 定义变量1variable_na ...
「Linux 基础」基本操作命令
目录/文件查
ls - list directory contents
1234ls [选项]... [文件]...选项(常用): -a 不隐藏任何以"."开始的项目 -l 每行只列出一个文件
tree
1234tree [选项] [目录名] 选项(常用): -a 列出全部文件 -d 只列出目录
cat - concatenate files and print
123cat [选项]... [文件]...选项(常用):-n 对输出的所有行编号
增
mkdir - make directories1mkdir [选项]... 目录...
删
rmdir - remove empty directories
1rmdir [选项]... 目录...
只有空目录才可以使用 rmdir 命令删除。
rm - remove files or directories
12345rm [选项]... 文件...选项(常用):-r 递归删除目录及其内容-f 强制删 ...
「Linux 基础」背景
UNIX和Linux的关系Linux 是一个类 Unix 的操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。Unix 要早于 Linux。
两者之间的区别:
UNIX 系统大多是与硬件配套的,也就是说,大多数 UNIX 系统如 AIX、HP-UX 等是无法安装在 x86 服务器和个人计算机上的,而 Linux 则可以运行在多种硬件平台上
UNIX 是商业软件,而 Linux 是开源软件,是免费、公开源代码的
系统结构UNIX/Linux系统可以粗糙地抽象为三个层次:
硬件 -> [ 内核层 -> Shell层 -> 应用层 ] -> 用户
1)内核层(Kernel)内核层是 UNIX/Linux 系统的核心和基础,它直接附着在硬件平台之上,控制和管理系统内各种资源(硬件资源和软件资源),有效地组织进程的运行,从而扩展硬件的功能,提高资源的利用效率,为用户提供方便、高效、安全、可靠的应用环境。
2)shell层命令解释层。用户输入的命令行由shell解释执行并输出相应结果。
3)应用层应用层提供基于 X Windo ...