软件开发工程师知识整理
1 计算机科学
1.1 数据结构
数据:客观事物的符号表示,是所有能输入到计算机中并能被计算机程序处理的符号的总称。
数据元素:数据的基本单位,也称元素、记录。(单元格)
数据项:组成数据的、有独立含义的、不可分割的最小单位。(行)
数据对象:性质相同的数据元素的集合。(列)
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
数据类型:一个值的集合和定义在这个值集上的一组操作的总称。
抽象数据类型:由用户定义的、表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称,具体包括三部分:数据对象、数据对象上关系的集合以及对数据对象的基本操作的集合。
1.1.1 逻辑结构
逻辑结构的两个要素:数据元素、关系。
- 集合结构:数据元素除了同属一个集合的关系外,别无其他关系。
- 线性结构:数据元素之间存在一对一关系。
- 树形结构:数据元素之间存在一对多关系。
- 图结构或网状结构:数据元素之间存在多对多关系。
1.1.2 存储结构
数据对象在计算机中的存储表示称为数据的存储结构,也称为物理结构。
- 顺序存储结构:顺序存储结构是借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系,通常借助程序设计语言的数组类型来描述。
- 链式存储结构:无需占用一整块存储空间,为了表示结点之间的关系, 需要给每个结点附加指针字段,用于存放后继元素的存储地址,通常借助于程序设计语言的指针类型来描述。
1.1.3 线性表
1.1.4 栈
1.1.5 队列
1.1.6 字符串
1.1.7 数组
1.1.8 广义表
1.1.9 树
1.1.10 二叉树
1.1.11有向图
1.1.12 无向图
1.1.13 哈希表
1.2 算法
算法:算法是为了解决某类问题而规定的一个有限长的操作序列。
1.2.1 一个算法必须满足以下五个重要特性
- 有穷性。一个算法必须总是在执行有穷步后结束,且每一步都必须在有穷时间内完成。
- 确定性。对千每种情况下所应执行的操作,在算法中都有确切的规定,不会产生二义性,使算法的执行者或阅读者都能明确其含义及如何执行。
- 可行性。算法中的所有操作都可以通过已经实现的基本操作运算执行有限次来实现。
- 输入。一个算法有零个或多个输入。当用函数描述算法时,输入往往是通过形参表示的,在它们被调用时,从主调函数获得输入值。
- 输出。一个算法有一个或多个输出,它们是算法进行信息加工后得到的结果,无输出的算法没有任何意义。当用函数描述算法时,输出多用返回值或引用类型的形参表示。
1.2.2 评价算法优劣的基本标准
- 正确性。在合理的数据输入下,能够在有限的运行时间内得到正确的结果。
- 可读性。一个好的算法,首先应便于人们理解和相互交流, 其次才是机器可执行性。可读性强的算法有助于人们对算法的理解,而难懂的算法易千隐藏错误,且难千调试和修改。
- 健壮性。当输入的数据非法时,好的算法能适当地做出正确反应或进行相应处理,而不会产生一些莫名其妙的输出结果。
- 高效性。高效性包括时间和空间两个方面。时间高效是指算法设计合理,执行效率高,可以用时间复杂度来度量;空间高效是指算法占用存储容量合理,可以用空间复杂度来度量。时间复杂度和空间复杂度是衡量算法的两个主要指标。
1.2.3 算法的时问复杂度
1.2.4 算法的空间复杂度
1.3 数据库
数据库(DB):长期保存在计算机的存储设备上,按照一定规则组织起来,可以被用于或应用共享的数据集合。
数据库管理系统(DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
数据库系统(DBS):在计算机系统中引入数据库后的系统,通常由计算机硬件、软件、数据库管理系统和数据库管理员组成。
SQL:结构化查询语言
1.3.1 数据库分类
- 关系数据库:MySQL、Oracle、DB2、SQL Sever、PostgreSQL
- 非关系数据库:MongoDB
1.3.2 事物
1.3.3 范式
范式:当设计关系数据库时,需要遵从不同的规范和要求,设计出合理的关系型数据库,这些不同的规范被称为范式,越高的范式数据库冗余越小。一般来说,数据库只需满足第三范式(3NF)就行了。
- 第一范式(1NF):数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。
- 第二范式(2NF):要求数据库表中的每个实例或记录必须可以被唯一地区分。
- 第三范式(3NF):要求一个关系中不包含已在其它关系已包含的非主关键字信息。
- 巴斯-科德范式(BCNF):任何非主属性不能对主键子集依赖。
- 第四范式(4NF)
- 第五范式(5NF,又称完美范式)
范式的优点:
- 消除重复数据
- 减少数据冗余
- 保持数据的一致性
范式的缺点:
- 使查询变得相当复杂
1.1.4 反范式
范式越高,设计的表越可能越多,关系可能越复杂,但性能却不一定越好。
反范式的设计模式中,可以允许适当的数据冗余,用这个冗余可以缩短查询获取数据的时间。
优点:
- 减少数据库的连接次数
- 可以更好的利用索引进行筛选和排序,从而减少I/O数据量,提高查询效率
缺点:
- 数据存在重复冗余,存在部分空间浪费。
- 为了保持数据一致性,必须维护冗余部分,增加了维护的复杂性。
常见的数据库反范式技术:
- 增加冗余列:在多个表中保留相同的列。
- 增加派生列:表中增加由本表或其他表中数据计算生成的列。
- 表水平分割:根据一列或多列的值将数据放到多个独立的表中。
- 表垂直分割:对表进行分割,将主键和一部分列放到一个表中,将主键和其他列放在另一个表中。
1.3.5 索引
1.3.6 存储过程
1.3.7 函数
1.3.8 触发器
1.3.9 视图
1.3.10 SQL注入
SQL注入:通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的。
永远不要信任用户的输入,必须认定用户的输入的数据是不安全的,对用户输入的数据都必须进行过滤处理。
注意:
- 永远不要相信用户的输入,对所有输入进行效验。
- 永远不要使用动态拼装SQL,可以使用参数化的SQL或直接使用存储过程进行数据查询和存取。
- 永远不要使用管理员权限连接数据库,应为每个应用赋予单独的权限。
- 对敏感信息进行加密处理。
- 应用的异常信息应该尽可能少的提示,最好使用自定义错误信息对原始错误进行包装。
1.3.11 锁
操作系统
组成原理
计算机网络
数学
逻辑
排列组合
编程语言
Python基础
Python高级
Django框架
正则
开发
MySQL
下载地址:https://dev.mysql.com/downloads/installer/