03HTTP协议必知必会
02 | HTTP协议必知必会
在开始学习 Web 容器之前,我想先问你一个问题:HTTP 和 HTML 有什么区别?
为什么我会问这个问题?你可以把它当作一个入门测试,检测一下自己的对 HTTP 协议的理解。因为 Tomcat 和 Jetty 本身就是一个“HTTP 服务器 + Servlet 容器”,如果你想深入理解 Tomcat 和 Jetty 的工作原理,我认为理解 HTTP 协议的工作原理是学习的基础。
02 | HTTP协议必知必会
在开始学习 Web 容器之前,我想先问你一个问题:HTTP 和 HTML 有什么区别?
为什么我会问这个问题?你可以把它当作一个入门测试,检测一下自己的对 HTTP 协议的理解。因为 Tomcat 和 Jetty 本身就是一个“HTTP 服务器 + Servlet 容器”,如果你想深入理解 Tomcat 和 Jetty 的工作原理,我认为理解 HTTP 协议的工作原理是学习的基础。
02 | Jupyter Notebook为什么是现代Python的必学技术?
你好,我是景霄。
Stack Overflow 曾在 2017 年底,发布了在该站上各种语言的提问流量。其中,Python 已经超过了 JavaScript 成为了流量最高的语言,预测在 2020 年前会远远甩开 JavaScript。
02 | 把错误关在笼子里的五道关卡
上一讲中,我们一起讨论了什么是优秀的代码。简而言之,优秀的代码是经济、规范、安全的代码。在平时的工作中,我们要朝着这个方向努力,时常站在团队、流程、个人能力的角度去思考优秀代码。
01 | 拆分与合并:如何快速地批量处理内容相似的Excel?
你好,我是尹会生。今天是咱们的第一节课,我先带你学习下,如何用 Python 操作 Excel。
Excel 是我们在工作中用到的最频繁的软件之一,它有着强大的计算能力和便捷的图表功能。如果我们要在同一个 Excel 文件中进行操作,手工进行也很方便,但问题是,如果我们需要同时操作多个 Excel 文件,就是一件非常耗时的事情了。
02 | 产品经理工具指南
产品经理在日常工作中会用到大量的软件工具,每种工具都有它适合的场景。所谓“工欲善其事,必先利其器”,恰当地选择不同的工具,对产品经理来说非常重要。每种工具的背后也对应着产品经理相应的技能以及思考。
通过上一讲的学习,相信你已经掌握了响应式编程中的几个核心概念,即响应式流、背压机制以及响应式流规范,这些概念是理解后续课程内容的基础。
而在介绍基于 Spring 框架的响应式编程技术之前,你可能会有疑问:响应式编程能够应用到那些具体的场景呢?目前有哪些框架中使用到了这一新型的技术体系呢?这一讲我将为你解答这些疑问。
在第 02 课时,我们使用了 Netty 并配合 Java 8 中的 CompletableFuture 类,构建了一个完全异步执行的数据采集服务器。经过这种改造,CPU 和 IO 的使用效率被充分发挥出来,显著提高了服务器在高并发场景下的性能。
我们知道 ShardingSphere 是一种典型的客户端分片解决方案,而客户端分片的实现方式之一就是重写 JDBC 规范。在上一课时中,我们也介绍了,ShardingSphere 在设计上从一开始就完全兼容 JDBC 规范,ShardingSphere 对外暴露的一套分片操作接口与 JDBC 规范中所提供的接口完全一致。
人们常说,Java 是一种跨平台的语言,这意味着 Java 开发出来的程序经过编译后,可以在 Linux 上运行,也可以在 Windows 上运行;可以在 PC、服务器上运行,也可以在手机上运行;可以在 X86 的 CPU 上运行,也可以在 ARM 的 CPU 上运行。
程序员这个群体最开始被社会认知的时候,标签之一就是不善交流。慢慢地,“喜欢玩电脑,不喜欢和人交流”成了大家对程序员的一个刻板印象。作为程序员,我发现工作的时间越久,承担的责任越大,那么交流是一个越来越重要的能力。
在网络编程中,我们经常会提到 socket 这个词,它的中文翻译为套接字,有的时候也叫做套接口。
socket 这个英文单词的原意是“插口”“插槽”,在网络编程中,它的寓意是可以通过插口接入的方式,快速完成网络连接和数据收发。你可以把它想象成现实世界的电源插口,或者是早期上网需要的网络插槽,所以 socket 也可以看做是对物理世界的直接映射。
通过上一节课的学习,我们已经对 Kubernetes 的架构有了清楚的认识。但是到现在还没有和 Kubernetes 集群真正打过交道,所以你可能有一种“不识庐山真面目”的云里雾里的感觉。那么本节课,我们就来学习如何搭建 Kubernetes 集群,开启探索 Kubernetes 的第一站。
上一讲我们得出了结论,美国发动这场贸易战的真实目的是把中国的高科技扼杀在萌芽状态。这种情况有迹可循,因为美国曾经就用贸易战的方式对付过日本。今天我们就来看看日美贸易战是如何展开的。, , 1941 年 12 月 7 日,日本偷袭了美国珍珠港,引发美国震怒,罗斯福总统发表战书,正式向日本宣战。1945 年日本惨败,但它仍负隅顽抗,为了迫使日本尽快投降,美国向日本的广岛和长崎投下原子弹。1945 年 8 月 15 日,日本裕仁天皇被迫宣布无条件投降,日本也成了美国的敌人。, , 随着朝鲜战争爆发,日本得到了美国援助,经济迅速恢复。经过了 20 年的发展,1967 年日本的 GDP 跃升至世界第二,成为仅次于美国的发达国家。30 年来日本经济以每年 10% 的速度增长,一直雄居全球榜首。80 年代的日本风靡全球,它仿佛成了世界的宠儿,全世界都羡慕日本的成就。90 年代初,我前往德国读书,当时德国商场里摆满了日本货:冰箱、彩电、洗衣机、照相机、胶卷、汽车等。当时日本的胶卷照出的照片颜色非常鲜艳,可以说日本产品受到了世界瞩目。, , 出人意料的是,90 年代初,日本经济突然出现问题,他们的产品卖不出去了。一夜之间,日本经济迅速崩盘,陷入大衰退。到底发生了什么让这个如日中天的国家瞬间跌入谷底,甚至接下来的 20 年也没有从这种衰退中走出来呢?别急,且听我慢慢道来。, , 70 年代日本产品风靡全球,大举进入美国市场,美国很多产业受到了日货的冲击。美国人开始坐不住了,在他们看来,日本全靠美国的帮助存活,如今你强大了,想来跟我竞争,没门!于是两国打起了旷日持久的贸易战,从 1960 年到 1990 年,日美之间爆发了无数次贸易纠纷,先后涉及纺织品、钢铁、家电、汽车、电信、半导体等行业。, , 你看,40 年前发生的这一幕,和现在的中美贸易战比起来,是不是有点似曾相识的感觉。, , 接下来我们就来看看日美贸易战的具体经过,一起分析日本是如何作出让步的,你也可以预测一下美国对付中国还会使出什么招数。, , 1. 纺织品大战(1957 年-1972 年), , 50 年代日本纺织品抢占了美国市场,1957 年美国发动了贸易战,这场“纺织品大战”从 1957 年一直打到 1972 年,整整打了15年,最终以日本“自愿出口限制”结束了纺织品大战。, , 这里你需要了解什么是“自愿出口限制”。因为日本和美国的贸易战打得太激烈了,日本政府作出让步:我们别打了,定一个出口的限额,比如纺织品我们限定一个额度,超过限额我就不出口了。这就叫自愿出口限制。纺织品让步也是美国逼迫日本政府在贸易博弈中做出的第一个让步。, , 2. 钢铁战, , 70 年代日本钢铁行业异军突起,主要出口到美国,导致美国本土生产的钢铁滞销。1977 年美国发起反倾销诉讼,日本钢铁业在十年内被迫 3 次自愿限制对美出口。, , 3. 彩电战, , 1970 年日本家电行业崛起,对美出口占彩电出口的 90%,占据美国市场 30% 的份额。1977 年日美签订贸易协议,日本的彩电也承诺了“自愿出口限制”。, , 4. 汽车战, , 这是日美贸易战中最激烈的一场。80 年代日本汽车在美国的出口飙升,导致美国生产的汽车无人问津,美国汽车企业一片哀号,而且极大程度上影响了美国的就业,也因此引发了美国国内的抗议浪潮,最终以日本汽车自愿出口限制结束了这场汽车大战。, , 后来日美还打了半导体战和电信战。你可以发现,日本在对美国的贸易战中且战且退,尽管美国的企业竞争不过日本。无论是家电、汽车、纺织品等,美国产品和日本产品相比根本就没有竞争力。那怎么办呢?美国想了一个“绝妙”的方法,也就是后来的“广场协定”,迫使日本不得不就范。, , 1985 年 9 月 22 日是一个让日本国民都痛彻心扉的日子,那一天在美国主导下,美、日、德、法、英的财政部长和中央银行行长在美国纽约广场饭店举行会议,签署《广场协议》,逼迫日元升值。, , 同意升值不要紧,但是在短短三年时间,日元汇率从 250 日元兑换 1 美元,升值到 120 日元兑换 1 美元,日元对美元升值了一倍。我们以买卖胶卷为例,原来一个日本胶卷在美国市场上售价 3 美元,日元升值后该胶卷售价 5 美元。这样日本胶卷在美国还卖得出去吗?再比如原来一辆日本车,在美国市场上售价 2 万美元,升值后售价 3 万美元,日本车还卖得出去吗?不仅在美国,日本的产品在哪个国家的市场上都卖不出去了,因为它的价格变得昂贵了。, , 协议签订后,由于日元升值,日本出口竞争力受到了巨大打击,日本产品丧失了竞争力。当时日本国内经济萧条,为了刺激经济,日本政府开始放松银行政策,这就为股票和房地产市场提供了大量的资金流,也因此推动了日本国内的投机热潮。, , 日元升值后,日本国民口袋里的钱也升值了,一块钱变成了两块钱,他们一夜之间变得富裕起来。日本的商人们发现,不再需要造彩电、卖汽车了,他们找到了更便捷的发财之路——买房置地、买证券炒股票,于是大家都开始投机了,结果炒高了日本的股价和地价。, , 炒到 1989 年底,日本东京圈的地价总值能和全美国的地价总值画上等号。也就是说,卖掉东京可以买下整个美国。你看,日本国土面积这么小,东京圈更是巴掌大,美国的国土面积多么大,东京换美国,太过荒谬!, , 90 年代初,我去德国莱茵河畔的杜塞尔多夫办事时,一下火车我就发现这个德国城市俨然成了日本的城市,到处插满了日本的国旗。不仅如此,富裕的日本人又跑去美国,买下一栋又一栋大楼。然而,繁荣毕竟是假象,维持不久。1991 年,日本的经济泡沫彻底破了,自此它陷入了“失去的二十年”,再也没有了挑战美国经济霸权的资格。, , 我们总结一下日本失败的经过,一个世界第二大经济体先被美国用打贸易战的手段“自愿限制出口”,后用汇率战的手段彻底打垮。我们应该汲取哪些教训呢?美国想用对付日本的手段对付中国,但他没有想到中国和日本不一样,我们不会被轻易击垮,又是为什么呢?, , 我认为,中国和日本有两点不同。, , 1. 市场不同, , 美国跟日本打贸易战时,日本的零售市场只占美国的 30%,但是今天中国零售市场已经和美国的市场规模一样大。日本当时才有 1 亿多人口,中国现在人口有 14 亿。, , 2. 国情不同, , 政治上日本依附于美国,军事上受到美国保护,在经济上也受制于美国,日本必须对美国逆来顺受、听之任之。, , 上述两点差异就决定了中美贸易战和日美贸易战的不同:, , 中国不会对美国大举退让,因为我们不依赖于美国;, , 中国不会做自愿出口限制,因为我们不会对美国的要求听之任之;, , 中国不会像日本一样妥协,因为我们不需要美国的保护;, , 中国不会放弃产业升级,因为这是中国发展的必由之路。, , 大国重器必须掌握在自己手中,我们不能让日本的悲剧在中国重演。, , 这次美国派来中国的贸易谈判代表团的成员都是鹰派人物,其中负责 2019 年中美贸易谈判的是莱特希泽,他也是日美贸易战一战成名的人物。当年美国和日本打贸易战时,他就利用惩罚性关税的威胁,说服了日本“自愿”限制对美国的出口。这次特朗普亲自点将,派莱特希泽对付中国,他们来者不善。这是一场硬仗,也是一场极为艰难的谈判。, , 现在已经有了日本的前车之鉴,下一讲我们继续来看中美贸易战,聊一聊在这场贸易战中,两国政府都采取了什么样的战略思路。, , -– ### 精选评论 ##### **1231: > 求更新 ###### 编辑回复: > 每周一三五准时更新哦~ ##### *亮: > 又说极限施压 又说别人怕 这里矛盾 谁都知道没有实力 谁会蠢到极限施压
在第 02 课时,我们简单介绍了解决性能问题常用的一些切入点。本课时我将从计算机资源层面向你讲解,哪些系统组件容易出现性能瓶颈?以及如何判断该系统组件是否达到了瓶颈?
前两讲我们介绍了分布式数据库,以及各种 SQL 的发展脉络,那么从这一讲开始,我们就正式进入分布式数据库核心原理的学习。
随着互联网时代,特别是移动互联网的到来,形形色色的企业都在将自己的系统平台快速升级迭代,以此作为向互联网转型的一部分。
我们在前面两篇文章中已经介绍了云原生相关的概念及其应用,本课时开始我们将会进入微服务的相关学习。
微服务架构是当前流行的架构方式,在本课时我们将会首先介绍服务端架构的发展,如何由单体一步步演进到微服务架构;随后介绍 Go 语言微服务架构的选型,确定本课程的基本框架;最后,在学习完云原生和微服务的相关知识,我们再回顾一下云原生架构与微服务架构之间到底是什么关系。
你好,我是若地。上节课我们介绍了 Netty 中核心组件的作用以及组件协作的方式方法。从这节课开始,我们将对 Netty 的每个核心组件依次进行深入剖析解读。我会结合相应的代码示例讲解,帮助你快速上手 Netty。
在电影院,相信你也看到有人持有 VIP 卡,可以直接越过队列进场去看电影。对于这种情况,我们的程序也可以用优先级队列(Priority Queue)来模拟这个场景。
Arthas 是阿里开源的 Java 诊断工具,可以让开发者快速定位故障问题,那么为什么用“神器”来形容 Arthas 呢?
Arthas 由阿里早期的开源诊断工具 Greys 演进而来,你可以将 Arthas 看作是Greys的升级产品。由于 Arthas 提供了更加丰富的工具,在 2018 年底发布,就受到了很多开发者的青睐,并且也得到了来自 Java 官方的赞许。
你好,我是袁武林。
在第一节的课程中,我们说到了即时消息系统中的四个重要特性,实时性、可靠性、一致性、安全性。
上一节课我们从如何保证消息实时性方面,了解了业界常用的一些方式以及背后具体的原理。那么今天我们接着来讲一讲,在即时消息的系统架构设计里,如何来保证消息的可靠投递。
你好,我是蒋德钧。
如果有人问你:“你会把 Redis 用在什么业务场景下?”我想你大概率会说:“我会把它当作缓存使用,因为它把后端数据库中的数据存储在内存中,然后直接从内存中读取数据,响应速度会非常快。”没错,这确实是 Redis 的一个普遍使用场景,但是,这里也有一个绝对不能忽略的问题:一旦服务器宕机,内存中的数据将全部丢失。
你好,我是韩健。
很多同学可能喜欢使用事务型的分布式系统,或者是强一致性的分布式系统,因为使用起来很方便,不需要考虑太多,就像使用单机系统一样。但是学了 CAP 理论后,你肯定知道在分布式系统中要实现强一致性必然会影响可用性。比如,在采用两阶段提交协议的集群系统中,因为执行提交操作,需要所有节点确认和投票。
你好,我是吴磊。
在日常的开发工作中,我发现有两种现象很普遍。
第一种是缓存的滥用。无论是 RDD,还是 DataFrame,凡是能产生数据集的地方,开发同学一律用 cache 进行缓存,结果就是应用的执行性能奇差无比。开发同学也很委屈:“Spark 不是内存计算的吗?为什么把数据缓存到内存里去,性能反而更差了?”
你好,我是石雪峰。今天我们来聊聊 DevOps 的实施路线图。
商业领域有一本特别经典的书,叫作《跨越鸿沟》,这本书中提出了一个“技术采纳生命周期定律”,对高科技行业来说,它的地位堪比摩尔定律。
你好,我是周爱民,欢迎回到我的专栏。
今天我要讲述的内容是从 ECMAScript 6 开始在 JavaScript 中出现的模块技术,这对许多 JavaScript 开发者来说都是比较陌生的。
一方面在于它出现得较晚,另一方面,则是因为在普遍使用的 Node.js 环境带有自己内置的模块加载技术。因此,ECMAScript 6 模块需要通过特定的命令行参数才能开启,它的应用一直以来也就不够广泛。
你好,我是陈航。
Flutter 是什么?它出现的动机是什么,解决了哪些痛点?相比其他跨平台技术,Flutter 的优势在哪里?……相信很多人在第一眼看到 Flutter 时,都会有类似的疑问。
你好,我是月影。今天,我们要讲 WebGL。今天的内容比较多,也比较重要,所以我们会分上、下两节课来讲。
WebGL 是最后一个和可视化有关的图形系统,也是最难学的一个。为啥说它难学呢?我觉得这主要有两个原因。第一,WebGL 这种技术本身就是用来解决最复杂的视觉呈现的。比如说,大批量绘制复杂图形和 3D 模型,这类比较有难度的问题就适合用 WebGL 来解决。第二,WebGL 相对于其他图形系统来说,是一个更“开放”的系统。
你好,我是月影。欢迎回来,刚才我们说完了顶点着色器和片元着色器,接着我们要来利用它们实现 WebGL 程序了。
首先,因为在 JavaScript 中,顶点着色器和片元着色器只是一段代码片段,所以我们要将它们分别创建成 shader 对象。代码如下所示:
你好,我是 winter,今天我们继续来聊聊 HTML 模块的语义类标签。
在上一篇文章中,我花了大量的篇幅和你解释了正确使用语义类标签的好处和一些场景。那么,哪些场景适合用到语义类标签呢,又如何运用语义类标签呢?
在上一讲中,我介绍了与 HTTP 相关的浏览器、服务器、CDN、网络爬虫等应用技术。
今天要讲的则是比较偏向于理论的各种 HTTP 相关协议,重点是 TCP/IP、DNS、URI、HTTPS 等,希望能够帮你理清楚它们与 HTTP 的关系。
前不久在写代码的时候,我不小心踩到一个可变长参数的坑。你或许已经猜到了,它正是可变长参数方法的重载造成的。(注:官方文档建议避免重载可变长参数方法,见 [1] 的最后一段。)
你好,我是唐聪。
在前面的 etcd 读写流程学习中,我和你多次提到了 etcd 是基于 Raft 协议实现高可用、数据强一致性的。
那么 etcd 是如何基于 Raft 来实现高可用、数据强一致性的呢?
你好,我是盛延敏,这里是网络编程实战第 4 讲,欢迎回来。
在上一讲里我们介绍了 IPv4、IPv6 以及本地套接字格式,这一讲我们来讲一讲怎么使用这些套接字格式完成连接的建立,当然,经典的 TCP 三次握手理论也会贯穿其中。我希望经过这一讲的讲解,你会牢牢记住 TCP 三次握手和客户端、服务器模型。
你好,我是于航。今天我来和你聊一聊 Wasm 模块的基本组成结构与字节码分析。
在之前的课程中,我们介绍了 Wasm 其实是一种基于“堆栈机模型”设计的 V-ISA 指令集。在这节课中,我们将深入 Wasm 模块的字节码结构,探究它在二进制层面的基本布局,以及内部各个结构之间的协作方式。
你好,我是陈磊。
在上一节课中我和你强调了,用什么工具或代码解决测试问题并不重要,拥有接口测试思维才更重要。在今天的课程中,我会带你从零开始打造一个测试框架,建立你自己的技术体系。
你好,我是涵柏。
今天继续我们的故事旅程。上节课我们从故事思维入手,和你聊了聊故事思维的特质以及如何培养故事思维。细心的你应该会发现,要培养这种思维,一定离不开一样东西,那就是我们自己的故事库。
你好,我是许健。今天我们来聊聊技术骨干转型经理那些坑。
技术骨干在转型经理之前,一般都是部门里专业能力很强的那类人。但转型经理后,我们的思维就不能只关注于事,要同时开始关注事和人,而这里面更关键的其实是人。因为所有的事儿都需要人来完成,而经理更多的是通过培养人和激励人,从而提升团队做事儿的效果。那到底什么叫“关注事”,什么叫关注“人”呢?我下面给你举几个例子,你一看就能明白了。
你好,我是七牛云许式伟。今天我们继续来聊聊编程语言。
编程语言的出现,诞生了软件工程师(也叫程序员)这样一个职业,而汇编语言则可以看做是软件工程师这个分工出现的标志。
你好,我是 Chrono。
前面我讲了 C++ 程序生命周期里的“编码阶段”和“预处理阶段”,它们的工作主要还是“文本编辑”,生成的是人类可识别的源码(source code)。而“编译阶段”就不一样了,它的目标是生成计算机可识别的机器码(machine instruction code)。
前面我们一起讨论了为什么要做标准化,标准化的套路是什么,并按照套路进行了基础设施和应用的标准化示例。我想这些内容可以帮助我们举一反三,尝试着应用到实际工作中了。