共计 5505 个字符,预计需要花费 14 分钟才能阅读完成。
💪开始卷起来吧!为让学习更乏味,这篇文章我会列出计算机科学实践和一些概念,并且用类比的形式和尽量少的技术术语来为你进行解释。这样做的目标就是为了让你疾速理解计算机,查漏补缺。
👋如果对这些概念有任何解释不妥之处,请及时斧正我。
尽管这些概念可能疾速帮忙你去了解,然而这并不是一种最好的学习形式,如果你想要残缺的了解这些概念,去看相干书籍或者论文。
1. 外围概念:数据结构和算法
👋👋一个很酷的算法视频
1.1 递归
比方你坐在电影院正筹备难看电影的时候,这时候刚来电影院的人问你坐的是第几排,你懒的数就问后面的人,“哥们,你那一排是第几排?”你只须要从对方口中得悉他的行号 + 1 就是你坐的行号,然而你后面那哥们也做了同样的事件,他也问了他后面的人。。。。。。依此类推,始终问到第一排,他答复:“我这是第一排!”而后从当初开始,正确的行号将会始终 + 1 直到传播给刚进电影院的那哥们。
千万别在电影院这么做,否则第二排或者第三排的人可能会被第一排的当成傻子。。。。。。因为第二排的人问第一排的人:“哥们,你坐第几排?”设想一下这个场景。。。。。。
我给你几幅图,让你了解一下什么是 递归
。
1.2 大数据
假如你有一个花园,然而你花园中的 水管漏水,你须要拿一些桶和密封材料来解决这个问题,然而过了一会儿,你发现理论透露的要大的多,你须要水管工拿更多的工具来解决,同时,你仍在应用水桶排水。过了一会儿,你发现公开有一条微小的公开溪流曾经关上。你须要每秒解决数加仑的水。
这时候桶就没用了,你须要一种全新的办法来解决这个问题,因为水的体积和速度都在减少。为了避免城镇产生洪水,你须要 zf 建造一座大型水坝,然而这须要大量的土木工程专业知识和简单的控制系统。
大数据形容了应用传统数据处理工具无奈治理的宏大而简单的数据集。
1.3 数据结构
对于数据结构,每位程序员都应该晓得
- 数组 https://en.wikipedia.org/wiki…
- 树 https://en.wikipedia.org/wiki…
- 栈 https://en.wikipedia.org/wiki…
- 队列 https://en.wikipedia.org/wiki…
- 图 https://en.wikipedia.org/wiki…
- 哈希表 https://en.wikipedia.org/wiki…
- 链表 https://en.wikipedia.org/wiki…
- 堆 https://en.wikipedia.org/wiki…
2. 外围概念 AI
2.1 贪婪算法
设想一下,你要去徒步旅行,而你的指标是尽可能达到最高峰,在开始之前你曾经有了地图,然而地图上显示了成千上万条路,然而你无奈评估每一条,所以扔掉了地图,你从一个看起来很简略的路开始走,这种形式就是依据理性来选出来的,是一种贪心和短视的体现,你抉择只走最歪斜向上的路线。
然而旅行完结后,全身酸痛,你查看地图却发现旁边有一条泥泞的小河,跨过来就好了,而不必始终向上走。
贪婪算法会抉择当下的最佳路线,而不是从新开始思考评估抉择。
2.2 爬山算法
这次你要爬另一座山,你决定要找到可能带你达到最高峰的那条路。然而很可怜,你的地图丢了,而且山上雾气很大,那怎么办呢?所以你为了让旅途更轻松,你下载了一个 app,这个 app 可能跟踪你走过的路测量你以后的高度。于是你每次走过的路线都是可能把你带到最高峰的路线,然而在中途,你抉择了一条另外的路线,而这个路线也能把你带到最高峰。
2.3 模拟退火
在你后面的是珠穆朗玛峰。
这是你所面临的最大的挑战。你的指标是登顶,然而一遍又一遍爬珠峰是不切实际的,所以你只有一次机会。你当初十分审慎,你不会总是向上爬,而是偶然挪动到一个比拟低的点来摸索其余可能的门路,以缩小出错的机会,你爬的越高,你挪动到较低点进行摸索的可能性就越低。
2.4 动静布局
父亲:在一张纸上写下“1+1+1+1+1+1+1+1 =”。
父亲:那等于什么?
儿子:三秒后数了数等于 8。
父亲:在左侧写下另一个“+ 1”。
父亲:当初等于多少?
儿子:立即确定了是 9!
父亲:当初为何你数的这么快?
儿子:因为你刚刚才加了一个!
父亲:所以你不须要从新数,而是记住了刚刚那个数字等于 8!
2.5 P 和 NP 的问题
P vs NP 是计算机科学畛域中最风行和最重要的未解决问题之一。
假如我给你一个乘法问题,例如:
Q1:P = 7 * 17
答案是 119。这个很容易算吧?如果我颠倒这个问题怎么办:
Q2:P * Q = 119(P 和 Q 都不能是 1 或者 119)
如果你没有看到 Q1,你要解决 Q2,你可能会从 2 开始尝试,始终遍历到 118 为止。所以咱们还没有一种找到一个数因数的高效算法。
如果我问你,P 可能是 7 吗?这时候你能够轻松验证答案吗?你当然能够,只须要将 119 / 7 就能够了。
乘法很容易,然而找到一个数的原始因数却很难。
所以 Q1 是一个 P(多项式)问题,它很容易失去解决,因为计算机能够轻松的将任意两个数相乘。
然而 Q2 是一个 NP(非多项式)问题,它很难解决,找到 119 的因数对计算机来说还是很容易解决的,然而 500 位数字呢?当初对任何计算机都是不可能的。
这是这个问题的最重要的局部:NP 问题(合成)是否也是 P(乘法),只是咱们还没有发现解决 NP 问题的无效办法?还是人类太笨了?设想一下,存在比人类智能得多的机器或生命。他们看咱们就像咱们看蚂蚁一样。咱们的智力程度对他们来说太微不足道了。解决 P vs NP 问题就像为他们解决 1 + 1!
那么为什么 P vs NP 问题很重要呢?如果咱们可能证实 P=NP,则意味着所有 NP 问题都能够在正当的计算机工夫内轻松解决。咱们将可能治愈癌症(蛋白质折叠)、破解明码(RSA)等。这将会扭转世界。
3. 外围概念:并发
前景提要:假如你正在某公司负责秘书,你所做的工作包含接打电话、安顿会议、写文件等,你总是须要依据工作的优先级来停下手头的工作转而做其余的(工作),每次电话响起时,你都须要进行正在解决的工作。
3.1 并行
随着工作越积越多,你无奈应答你的工作了,因为有太多的书写工作,你向老板埋怨,他违心再雇集体来帮你分担书写工作。
并行容许有两个或者更多的工作同时运行,然而前提是你的 CPU 可能反对多解决能力,人只有一个 CPU,所以二心不能二用。这也并不是一件好事,有的时候单线程的工作效率反而更高,而中断(学习的时候被打断)是工作的天敌,这种开销切实是太大了。
所以你和新招的那个雇员一起分担书写工作就是一种 并行
。
并发概念的引入也引发了很多很多问题,比方上面的 竞态条件。
3.2 竞态条件
这里就不得不提咱们大家都耳熟能详的银行转账这个例子了:
- 你的银行账户里有 1000 元。
- 有人转给你 500 元,而你从 ATM 中提取了 300 元。
- 假如这两笔交易同时进行,两笔交易都会看到你以后的余额是 1000 元(留神这是两笔交易,这两笔交易之前彼此不可见,这点很重要)。
- 当初,第一笔交易给你的账户减少了 500 元,你当初就有了 1500 元。然而,第二笔交易看到的你的账户余额还是 1000 元,他从 1000 元中扣除了 300,变成了 700 元。
- 所以你当初的账户余额会变为
700
元,而不是1200
元,因为第二笔交易笼罩了第一笔交易。 - 产生这种状况是因为银行零碎不晓得其余正在进行的交易。
那么,你应该如何解决这种状况呢?上面是几种解决形式。
3.3 互斥
当初咱们采纳这种形式:只有有正在进行的交易,零碎就会锁定交易中波及的账户。而且零碎会认定转账开始 -> 转账实现是一个残缺的事务周期。
所以这一次,当第一笔交易产生的那一刻,你的账户会被锁定,你不能再从你的账户中取钱,直到第一笔交易实现为止。
所以互斥是不是就解决问题了?
尽管互斥能解决零碎数据安全性的问题,然而却不合乎人的理性认知。但没有人心愿每次有正在进行的交易时都被 ATM 回绝。
所以咱们须要批改一下计划。
3.4 信号量
二进制信号量
当初咱们须要为不同类型的交易设置不同的优先级。如果提现申请的 优先级 要高于银行转账的优先级。所以当你从 ATM 中取款时,这笔交易的优先级要大于向你账户转账的优先级,所以此时转账的的交易会暂停,而提现的事务优先进行,因为它具备更高的优先级,等到提现胜利后,转账事务再复原。
二进制信号量很简略,1 = 正在进行的交易,0 = 期待。
计数信号量
计数信号量容许多个过程同时运行。
假如你是一家游泳馆的工作人员,有 10 个储物柜,每个储物柜都有一把钥匙,每次收到或者散发钥匙时,你都须要把控所有的钥匙数量,如果所有储物柜都满了,其他人必须排队。每当有人实现时,他会将钥匙交给队列中的第一个人。
3.5 死锁
死锁是另外一种并发中的共性问题。
还是让咱们拿银行转账来举例子。请记住,只有有正在进行的事务,就会锁定对银行帐户的拜访。
- 如果你向张阿姨转账 500 元(来让张阿姨快乐一下),同时张阿姨向你转账 1000 元(让你补补身子)。
- 于是事务 A 锁定了张阿姨的账户,并且从她的账户里扣除了 1000 元。
- 事务 B 锁定你的账户,并且从你的账户里扣除了 500 元。
- 而后,事务 A 尝试拜访你的账户来增加她给你转账的 1000 元。
- 同时,事务 B 尝试拜访张阿姨的账户来增加你给她转账的 500 元。
然而,因为两项交易都没有实现,因而两个事务都无法访问锁定的帐户,造成两个事务都在期待对方事务的完结,这种状况就是死锁。
还有为什么谈恋爱的过程中男生要被动一些,如果你不被动,可能就死局(死锁)了。
4. 外围概念:计算机平安
4.1 计算机黑客
计算机黑客相似于强制闯入你的房子里,上面有几种风行的黑客技术。
暴力攻打
这种做法就是尝试应用成千盈百种不同的明码。有教训的黑客会先尝试最罕用的明码。
暴力攻打会尝试所有可能的明码,通常首先猜想罕用的明码,如“123456”、“abcdef”等。
我之前尝试过用 kali linux 配上专用的设施跑过包破解过邻居家的 WI-FI,后果明码只是 000000。
社会工程
这是一项弱小的技术!!!我愿称之为网络 Pua!!!
一对夫妇刚搬进隔壁。他们真的很好,乐于助人。他们常常请你吃晚饭。有一天,你说你很快就会去度假两周。他们快乐地提出要关照你的狗。你给他们留了一把备用钥匙。从那以后,你再也没有听到对于他们的任何音讯。
社会工程学会诱骗用户走漏他们的私人信息。
此处应该要有个配图。
<img src=”https://tva1.sinaimg.cn/large/008i3skNly1gvp44j0stej60ha0dkjrp02.jpg” alt=”image-20211023120448543″ style=”zoom:50%;” />
安全漏洞
安全漏洞就是黑客入侵你家能找到的缺口,比方你可能没关窗户。
特洛伊木马
黑客假冒水管工,让你帮他开门,他修理了你漏水的水管,然而他走后,你发现你的首饰不见了。
特洛伊木马是伪装有用并在后盾运行恶意代码的恶意软件程序。
RootKit
你的门锁被卡住了,你打电话给锁匠。他修理了你的门锁并偷偷复制了另一把钥匙。
Rootkit 通过社会工程等多种形式取得计算机管理员或 root 拜访权限,而后伪装成杀毒软件难以检测到的必要文件。
DDos
这是一个书店的比喻。
如果你有一个书店,书店外面能包容 200 多人,某一天忽然有 200 多人进入你的书店,你的书店满了,而且你不能赶走他们,因为他们看起来相互都不意识,而且他们仿佛真的都有趣味买书,甚至有人问你 xxx 书在哪里,然而柜台上只有一个人付了几块钱。
人们一直进出几个小时,然而你卖的书还不到 5 本,你感觉你这个书店还能撑多久?
DDoS 试图通过大量访问者来敞开站点或服务。
4.2 密码学
对称加密
假如老王和老刘想要相互发送货色。为了确保没有人能够看到他们的货色,他们用一个盒子锁起来。他们为锁制作了 2 个雷同(对称)的钥匙,并当时见面共享钥匙。
非对称加密
在两个人之间共享密钥可能失常工作,然而如果老王想和老赵替换货色,而且还不想让老刘晓得该怎么办?从新共享一个全新的钥匙吗?那如果老王想和 10 个不同的人替换货色该怎么办?难道要毁灭掉解决问题的老王吗?
所以老王想出了一个相对 fashion 的主见:当初老王只保护一把钥匙(私钥),她将另一把钥匙(公钥)分给他的敌人们,任何人都可能加密,然而只有她有关上(解密)的钥匙,当初,任何人都可能应用她发的公钥进行加密,而且老王不须要再为任何人治理不同的钥匙。
5. 外围概念:软件开发办法
5.1 瀑布开发方式
你须要弄清楚所有的事件并记录下来,就向是瀑布一样,除非从新开始,否则无奈返回。只有以后阶段实现后,你能力进入下一阶段。
<img src=”https://tva1.sinaimg.cn/large/008i3skNly1gvphma9pgcj60wc0ocgo202.jpg” alt=”image-20211023195137609″ style=”zoom:50%;” />
5.2 麻利开发
这是国内大多数软件公司采纳的软件开发形式 — 麻利开发。
一开始你就弄清楚一些你须要坐的事件,而后随着开发的进行,不断改进、倒退合作和适应。
就像大多数产品经理或者你的领导说的:先弄一版进去再说。
5.3 事实世界中的软件开发
当初你毕业了。你编写了你认为比拟丑陋的代码,所有都很完满。当初我给你介绍一种 牛仔编码,这是大学教授没有教你的开发方法。
你可能想晓得为什么你不会评估开发事件,请看下图
总结
这篇文章我给你整顿了一些计算机科学中的一些常见概念,并且用活泼形象的例子来为你论述这些概念,心愿能升高你学这些内容的门槛。
还是那句话,如果你想要残缺的了解这些概念,去看相干书籍或者论文。
最初给大家举荐一下我本人的 Github,外面有十分多的硬核文章,相对会对你有帮忙。