前言
Hi , 各位大佬、小佬们,我是CrazyCodes,本来打算在年初奉上本篇,但因诸多原因延迟了
以下是我往年的文章
- 2021 PHP程序员修炼秘籍 https://segmentfault.com/a/11...
- 2020 PHP程序员修炼秘籍 https://segmentfault.com/a/11...
- 2019 PHP程序员修炼秘籍 https://segmentfault.com/a/11...
计算机基础
数据结构
是相互之间存在一种或多种特定关系的数据元素的集合
以上的学术性解释有点晦涩难懂哈,首先为什么要创造那么多数据结构,其最核心的原因就是“需求”,不同的需求要求的关键点不同,这里着重强调时间与空间的择优,不同的数据结构,实际都是在权衡时间与空间的分配上,我们举个例子
以顺序表(数组)和单链表来说
首先顺序表,顾名思义是顺序存储,那么顺序存储的优势是访问速度快,因为它的存储是连续性的,我们只需要在当前地址+1,就可以访问到下一个数组元素,但是呢,就是因为它的地址是连续性的,我们在对数组进行删除和增加时,麻烦就比较大了,当我们想删除或增加某个数组元素,那么就需要移动在删除或增加的位置之后的所有元素,保证其存储是连续性的。
那么我们就可以认为,数组这样的数据结构适用于要求查询速度快,占用空间小,但更新速度稍微慢一点的需求。
反观单链表
单链表的每一个结点由内容和指向下一个结点(next)的地址指针组成,每一个next指向他下一个结点的地址,这时对比数组来说,因为每个内容都需要两个地址块去存储,那么存储同样数量的单链表与数组对比,占用的空间是数组的两倍,我们继续看单链表的更新和删除操作,因为单链表每个元素通过next来维系,所以我们只需要将要插入的结点的next指向要插入结点后一个的结点的地址,再将要插入的前一个结点的next指针指向要插入结点的地址,就可以完成更新操作了。
那么我们就可以认为,单链表这样的数据结构适用于要求查询和更新速度快,但可以接受牺牲一部分存储的需求。
那么回到现实需求中,数组和单链表的特性映射了很多现实中的需求点,例如
- 要求查询速度快,更新速度可以慢一点的奖励规则的计算
- 要求更新速度快,空间可以占用多一点的用户支付结果的实时更新
推荐入门书籍 《大话数据结构(溢彩加强版)》 清华大学出版社
推荐在线课程 王争老师的《数据结构与算法之美》
算法
好的算法与数据结构息息相关
为什么说算法与数据结构相关,首先理解下为什么需要算法,那么算法是什么?
算法是为了更好的解决问题,那么解决什么问题? 与数据结构一样,平衡时间与空间的问题
一道小学的数学题举例
(15 + 4) * 3 = ?
你的数学老师肯定是这样教你的
(15 * 3) + (4 * 3) = 57
那么为什么要这样做?原公式我们也可以做出来,因为第二种方法计算能更快的速度计算出来,这就是上述我们说的解决时间问题
举一个简单的例子,分而治之是算法内常见的方式,例如二分查找,我们将一个数组分成两部分,分别同时去检索要查找的数据,那么就要比从头一个一个查找速度要快一倍(忽略极端情况,第一个或者最后一个命中),这样对比二分查找和简单的检索,那么二分查找提高了效率(也就是缩短了检索时间)
当然,有一些算法是需要使用在特定的数据结构中的,例如熟知的二叉树,树的查找是经典的分而治之的案例,如果是一颗有序的树,那么他的查找时间复杂度是 O(Log2n),意味着我们平均查找时间会比正常按序检索快1倍甚至更高(忽略极端情况),但二叉树的构造是由链表组成,一棵树的左子结点指针和右子结点指针分别占用空间,这说明一个树结点至少占用三个空间,并且保持树一直是有序状态需要牺牲更新成本,那么树的查找我们可以认为主要目的是为了提高查询的速度,对更新和空间占用可以有一定的容忍。
推荐入门书籍 《趣学算法》 人民邮电出版社
推荐在线课程 王争老师的《数据结构与算法之美》
数据库系统
数据库与数据结构息息相关
范式就是前辈通过不断的验证给到的为了建立冗余较小、结构合理的数据库,是设计数据库必须遵循的一定规则,在关系型数据库中这种规格叫做范式,本篇不仅说明范式设计,也会给到一些例子,带着各位一起分析给到的数据表设计属于第几范式。
关于范式具体可以看我这篇 https://segmentfault.com/a/11...
为什么说数据结构与数据库系统息息相关,以如何提高查询效率为例,如果我们的数据存储在文本文件(属于顺序存储),那么我们向在文本中查询某一段数据,我们只能从文件头部或者尾部开始查询,类似于链表的顺序查询,那么如果将 O(N)的查询效率提高到O(log2n)的查询效率呢,这里就使用了树结构,MySQL中使用的是红黑树,红黑树的具体原理就不在本文中过多描述了。
推荐在线课程 丁奇老师的《MySQL实战45讲》
计算机组成
从根上理解计算机
这里以上述数据库为例,除了使用特定数据结构解决效率问题,这仅仅在应用层,在物理层,机械硬盘和SSD也会影响数据的查询效率,冷数据适合放在机械硬盘中,SSD则更适合放一些频繁操作的数据,那么SSD不能放冷数据吗?回答当然是可以的,但到了硬件层面,我们就要考虑费用问题了,一般冷数据都是在做数仓,上亿的数据放入SSD硬盘,却不频繁使用,那么成本会提高很多。
除非之外还有CPU,内存,GPU等等知识都会在计算机组成中看到。
推荐在线课程 徐文浩老师的《深入浅出计算机组成原理》
计算机网络
上图列出需要了解的一些核心知识点,可google依次学习。
操作系统
推荐在线课程 刘超老师的《趣谈 Linux 操作系统》
编译原理
推荐在线课程 宫文学老师的《编译原理之美》
开发语言
C语言
C语言作为大部分高级语言的根基,就不必多言了。
PHP
PHP 新征程
https://blog.jetbrains.com/ph...
不知不觉 PHP 已经走过了 26 个年头了,在这个过程中,有大量非常优秀的人才一直积极地在为 PHP 的研发、发展默默付出着,比如 Rasmus Lerdorf, Zeev Suraski, Andi Gutmans, Nikita Popov 等等非常多的人。2021年,PHP将迎来新一轮的发展。
就在2021年11月22日Phpstorm 的开发商 JetBrains 宣布,将与 Automattic、Laravel、Laravel、Acquia 等多家公司共同成立 PHP 基金会。据介绍,PHP 基金会将是一个非营利组织,其使命是确保 PHP 语言的活力和繁荣。
PHP基金会将是一个非盈利组织,其使命是确保PHP语言的长寿和繁荣。同时,该基金会将通过 Open Collective 来实现。Open Collective 是一家处理法律和会计方面的基金会服务提供商,Vue.js、Open Web Docs、webpack、Yii Framework 等多个开源项目都采用其服务。
此外,PHP 基金会预计每年将筹集约 300000 美元,其中,JetBrains 将每年捐款 100000 美元,任何 php-src 的贡献者都可以向基金会申请资助。在基金会成立初期,将设立一个临时管理机构,临时管理机构包括的成员有:Rasmus Lerdorf、Dmitry Stogov、Joe Watkins、Sara Golemon、Derick Rethans、Sebastian Bergmann 和 Nikita Popov。同时,当前的 RFC 流程不会改变,语言决定将始终留给 PHP Internals 社区。
PHP 基金会的官网 https://opencollective.com/ph...
总结
本来下面还有将近1k字的描述,个人感觉展开讲解的必要性不大,这里就以总结方式呈现
- 语言仅仅是开发工具,但也要适应行业现状,适当扩展自己的技术栈(例如go)
- 有兴趣可以参与一些开源程序
- 架构不是一次形成的,逐步积累
- 软技能:英语水平、文档撰写、图表设计
- 如果你未来想成为leader,至少现在对自己文档和代码要有一定规范自我约束
- 战功 vs 内功,战功代表你都做哪些事,内功在于你在事上积累了什么
- 复盘、复盘、复盘、定期复盘,重要的事情说三遍
致谢
感谢你看到这里,希望本篇对你有帮助,谢谢