前言
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 内功,战功代表你都做哪些事,内功在于你在事上积攒了什么
- 复盘、复盘、复盘、定期复盘,重要的事件说三遍
致谢
感激你看到这里,心愿本篇对你有帮忙,谢谢