八月的最后一天
数据库
这几天重新复习了一下数据库,之前掌握的数据库相关的知识忘得差不多了。
这次的收获有:
- 数据库分为关系型和非关系型,其中关系型数据库是核心
- 关系型数据库中的「关系」不仅体现在不同的表可以通过指向主键的外键建立起关系,更体现在一张表中每一行数据表明了某种关系
- 关系可以理解为集合 A 与集合 B 的组合 (A, B)中的一个子集
- 行无上下,列无左右;行值唯一,列值同类型,也就是同属一个集合
- 经常使用伪键作为主键,但主键不等于伪键,主键完全可以是逻辑上允许的自然键
- 除关系上的设计之外,数据库的设计还要尽可能的遵循一定的范式
- 一张表必须是一个关系
- 必须没有重复组合
- 不能多列同域
- 不能同列多值
- 可以恰当地使用组合主键
- 减少冗余
- 提高数据一致性
- 声明式语言,语句可以独立于数据库而存在
数据结构和算法
在异构智能参加的面试是我经历的第一正规面试,两位面试官人超好,不悲不喜不怒更不嘲笑人。虽然参加面试的我,有一种被扒了底裤的感觉,意识到自己基础有很大的不足,这些都要让我心情很低落。
不过这样也挺好的。
之后不再轻易学习花哨的新东西了,专注于打好基础:
- 数据结构和算法,就用 Python 实现
- 深入一个实例,做深做熟做好,掌握好相关的基础概念和基础知识
今天刚刚看了一点数据结构和算法的知识,总结如下:
- 计算机科学的核心:研究如何用算法解决问题,如何更好地解决问题
- 算法就是一种序列,有限序列,序列往往表现为某种模式,最简单的:
- 迭代
- 递归
- 学习计算机科学依赖经验的积累,看别人如何解决问题,自己努力尝试多多解决问题,对比同一问题的不同解决方法的侧重,从而最终锻炼出「识别模式」的能力,并将其应用到新问题上
- 在解决问题时,依赖的方法论是抽象,抽象可以分离层级,层级之间可以独立优化,相互之间不影响逻辑上的使用
- 过程的抽象
- 数据的抽象
- 数据抽象就是 ADT,将数据结构和数据操作方法封装在一起,作为一个数据类型,数据结构就是一个数据类型的具体实现
- 面向对象语言中,利用 class 实现 ADT,带状态,带行为,概念上很直观
- 对象是类的实例,类通过继承形成层级结构
- implement an ADT by a new class
- 在封装时或许要用到运算符重载,就是加减乘除等等数据的运算
- 算法的时间复杂度
- 经常以空间换时间,但空间边界也要关注
不知是该恭喜,还是该怎样,总之阅读到该文的,你是第 人。每一次刷新,都是不同的自己。