05__系统实例:怎样设计一个简易物联网系统?
你好,我是郭朝斌。
通过前几讲的学习,你应该已经熟悉了物联网系统的基本框架,并且知道设备层、网络层和应用层大概是怎么回事儿。不过你现在的理解,可能还停留在盲人摸象的阶段,虽然已经可以说出某些局部的特点,但是还没法儿准确地画出整头大象的样子。
你好,我是郭朝斌。
通过前几讲的学习,你应该已经熟悉了物联网系统的基本框架,并且知道设备层、网络层和应用层大概是怎么回事儿。不过你现在的理解,可能还停留在盲人摸象的阶段,虽然已经可以说出某些局部的特点,但是还没法儿准确地画出整头大象的样子。
你好,我是朱维刚。欢迎你跟我一起重学线性代数!
今天我们来聊一聊“线性空间”。在“基本概念”那一节课中,我讲到了向量,你也看到了,线性方程组是能够通过矩阵或向量来表达的。那为什么我们还要学习线性空间呢?
你好,我是袁武林。
前面几节课,我们较为系统地介绍了如何解决消息实时到达的问题,也对如何保证消息可靠投递的几种实战中常用的方式进行了一一讲解。
那么,今天的课程我们继续一起聊一聊,IM 系统设计中另一个比较复杂,但又非常重要的话题:消息收发的一致性。需要提醒的是,我们这里的讲到的一致性,一般来说是指消息的时序一致性。
你好,我是陶辉。
上一讲谈到,零拷贝通过减少上下文切换次数,提升了文件传输的性能。事实上高并发服务也是通过降低切换成本实现的,这一讲我们来看看它是如何做到的。
你好,我是高楼。
性能方案在性能项目中是非常重要的文档之一,它指导着整个项目的执行过程,同时也约束着项目的边界,定义相关人员的职能。但令人痛心的是,如今它变得“微不足道”。
在上一篇文章中我们介绍了导航相关的流程,那导航被提交后又会怎么样呢?就进入了渲染阶段。这个阶段很重要,了解其相关流程能让你“看透”页面是如何工作的,有了这些知识,你可以解决一系列相关的问题,比如能熟练使用开发者工具,因为能够理解开发者工具里面大部分项目的含义,能优化页面卡顿问题,使用 JavaScript 优化动画流程,通过优化样式表来防止强制同步布局,等等。
既然它的功能这么强大,那么今天,我们就来好好聊聊渲染流程。
通常,我们编写好 HTML、CSS、JavaScript 等文件,经过浏览器就会显示出漂亮的页面(如下图所示),但是你知道它们是如何转化成页面的吗?这背后的原理,估计很多人都答不上来。
上一节我们讲了几个重要的 Linux 命令行,只有通过这些命令,用户才能把 Linux 系统用起来,不知道你掌握得如何了?其实 Linux 命令也是一个程序,只不过代码是别人写好的,你直接用就可以了。你可以自己试着写写代码,通过代码把 Linux 系统用起来,这样印象会更深刻。
你好,我是付晓岩。
你可能经常听到人们说业技融合,那什么是业技融合呢?简单来说,就是业务和技术一起想办法解决问题。
不过,业务和技术一起谈如何解决问题,并不是现在常见的业务给技术提个需求、技术听完了去开发个软件这么“流程化”的事情,而是大家都把技术作为重要手段,一起去想怎么解决业务问题最好,这才是所谓的业技融合。能这样坐在一起聊,双方最好有个互相接近的思维模式,有点儿“共同语言”。不然,业务敞开了聊业务,技术满脑子都是技术,沟通效率自然很差,而业务架构就是一种能够提升效率的共同语言。
在上一篇文章中,我们用 Account.class 作为互斥锁,来解决银行业务里面的转账问题,虽然这个方案不存在并发问题,但是所有账户的转账操作都是串行的,例如账户 A 转账户 B、账户 C 转账户 D 这两个转账操作现实世界里是可以并行的,但是在这个方案里却被串行化了,这样的话,性能太差。
不知不觉,我们已经讲到第五篇了,不知道听到这里,你对于秒杀系统的构建有没有形成一些框架性的认识,这里我再带你简单回忆下前面的主线。
前面的四篇文章里,我介绍的内容多少都和优化有关:第一篇介绍了一些指导原则;第二篇和第三篇从动静分离和热点数据两个维度,介绍了如何有针对性地对数据进行区分和优化处理;第四篇介绍了在保证实现基本业务功能的前提下,尽量减少和过滤一些无效请求的思路。
你好,我是何恺铎。
通过前几讲的学习,我想你对云虚拟机应该有了不少的了解,也对如何根据实际情况来选择和运用虚拟机,有了一定的认识。在前面的学习过程中,我也留下了许多伏笔。其中之一,就是云虚拟机的重要组件:云硬盘。
你好,我是张晓楠。看到我要跟你聊聊怎么写一篇好新闻,你是不是马上冒出这个念头:新闻谁不会写啊?相对于那些动辄几千字上万字、准备半个月一个月的深度大稿来说,新闻好像确实比较简单——它字数不多,一般也就 1000 字左右;它没有华丽的描写,所以不太考验编辑的文采。但是我在成为编辑的第一天,我的主编就告诉我,写一篇好新闻是非常难的一件事儿,也是编辑必备的基本功。
你好,我是涵柏。
今天继续我们的故事旅程。在02讲里我们提到过,受众喜欢的故事往往包含场景、情节冲突和价值三个元素。今天我们这节课继续展开来聊聊“价值”。
你好,我是 Rocky。
上节课主要是给你讲解了视觉是如何生成、如何被感知到的。同时我在色彩的层面给你介绍了色彩心理学,今天我们接着来谈谈视觉中的构图部分。
你好,我是朱晓峰,今天我们来聊一聊如何用好 MySQL 的主键。
前面在讲存储的时候,我提到过主键,它可以唯一标识表中的某一条记录,对数据表来说非常重要。当我们需要查询和引用表中的一条记录的时候,最好的办法就是通过主键。只有合理地设置主键,才能确保我们准确、快速地找到所需要的数据记录。今天我就借助咱们的超市项目的实际需求,来给你讲一讲怎么正确设置主键。
转型做管理后,你可以用在技术上的时间会越来越少,尤其是写代码的机会越来越少,手越来越生,但是要做的技术评审和技术决策却有增无减,对技术判断力的要求反而也越来越高。这是因为你的决策产生的影响比之前更大了。
你好,我是罗桂霞。
今天,我要带你回到高中历史课堂,去欣赏一幅你有印象的画:《自由引导人民》。
普通高中课程标准实验教科书 历史必修三
当时,这幅画是不是吸引了你的视线?也许你会说,我比较好奇,中间这个女人为什么衣服都没穿好;也许你会说,这幅画很燃呀,把革命的氛围表现得淋漓尽致。
你好,我是 LMOS。
我们在前面已经设计了我们的 OS 架构,你也许正在考虑怎么写代码实现它。恕我直言,现在我们还有很多东西没搞清楚。
由于 OS 内核直接运行在硬件之上,所以我们要对运行我们代码的硬件平台有一定的了解。接下来,我会通过三节课,带你搞懂硬件平台的关键内容。
上一讲我们探讨了需求的“完成”,你现在知道如何去界定一个需求是否算做完了,这要看它是不是能够满足验收标准,如果没有验收标准,就要先制定验收标准。这一点,对于每一个程序员来说都至关重要。
经过前面的预习和上一期我们聊的,大数据技术主要是要解决大规模数据的计算处理问题,但是我们要想对数据进行计算,首先要解决的其实是大规模数据的存储问题。我这里有一个直观又现实的问题想问你:如果一个文件的大小超过了一张磁盘的大小,你该如何存储?
你好,我是黄申。上一节的结尾,我们用递归模拟了数学归纳法的证明。同时,我也留下了一个问题:既然递归的函数值返回过程和基于循环的迭代法一致,我们直接用迭代法不就好了,为什么还要用递归的数学思想和编程方法呢?这是因为,在某些场景下,递归的解法比基于循环的迭代法更容易实现。这是为什么呢?我们继续来看舍罕王赏麦的故事。
你好,我是何为舟。
在上一讲中,我们主要从身份认证的场景和威胁上,对身份认证进行了介绍。同时,身份认证的核心问题是身份管理,因此我们可以采用单点登录的形式,来解决复杂的身份管理问题。常用的单点登录方式包括 CAS 流程、JWT、OAuth 和 OpenID。
你好,我是蔡元楠。
上一讲中,我们学习了如何用服务等级协议(SLA)来评估我们设计的分布式系统,并了解了几个常见的 SLA 指标。
今天我们继续来探索分布式系统的另外几个重要基础概念。
你好,我是邵亚方。
在前面几节课里,我们讲了 Page Cache 的一些基础知识,以及如何去处理 Page Cache 引发的一些问题。这节课我们来讲讲,如何判断问题是不是由 Page Cache 引起的。
今天,我们聊聊复杂度的第二个来源高可用。
参考维基百科,先来看看高可用的定义。
系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。
把一种想法、一个需求变成代码,这叫“实现”,而在此之前,技术上有一个过程称为设计,设计中有个特别的阶段叫“架构”。
程序员成长的很长一段路上,一直是在“实现”,当有一天,需要承担起“架构”的责任时,可能会有一点搞不清两者的差异与界线。
你好,我是 Bendy,IT 猎头公司银光联信的猎头合伙人,主要专注于 IT 研发领域中高端人才的职业招聘。十多年来,从 IT 公司 HR 转向技术猎头,我一路见证了程序员职业生涯的各种精彩故事,以及主动或被动求职的各种跌宕起伏。
你好,我是钱亮。今天我们来说一说关于跑步减脂的那些事儿。
生活中,经常有朋友问我说:“钱亮,为什么你看起来有时候胖,有时候瘦?”其实这也和我的工作性质有关。我作为健身教练时,需要一个很好的形象,所以我会侧重做无氧运动来增肌。但当我准备跑马拉松或者越野跑比赛时,我就会减少一些不必要的抗阻力训练,并增加跑步频率和运动量,虽然肌肉含量不会变,但是体脂会有明显的下降。
说到买房的问题,我自己就有个事情不吐不快。今年刚好准备换个房子,经过几个月的看房、选房,终于定了下来并签了合同,交了中介费、首付款等一堆费用,就差合同里约定的 120 万元公积金贷款了。
专栏上一期,我给你介绍了服务发布和引用常用的三种方式:RESTful API、XML 配置以及 IDL 文件。假设你已经使用其中一种方式发布了一个服务,并且已经在一台机器上部署了服务,那我想问你个问题,如果我想调用这个服务,我该如何知道你部署的这台机器的地址呢?
软件工程是多人合作的结果,我们在开发软件的时候经常会使用一些别人编写好的,比较成熟的库。
比如,早期的前端开发用到了 jQuery 库,那么通常的做法是去官网下载一个最新版本的 jQuery,然后放在自己本地的项目中。对于简单的前端项目来说,这样可以简单粗暴地达到目的。
近年来的科学研究不断证实,不确定性才是客观世界的本质属性。换句话说,上帝还真就掷骰子。不确定性的世界只能使用概率模型来描述,正是对概率的刻画促成了信息论的诞生。
你好,我是海丰。
对于任何一家互联网公司来说,用户流失都是我们必须要关注的一个问题。就拿我们公司的电商平台来说,一个很常见的问题就是,新用户的增长逐年缓慢,同时还伴随着老用户的不断流失。当遇到这种情况的时候,作为产品经理,我们该采取哪些措施,来降低用户的流失率呢?
你好,我是周维。这节课我们来聊聊如何用量化的方式进行高效创作。
在开始今天的讨论之前,我们先来看一个小故事。
小明今年刚毕业,通过秋招拿到了两个大厂的实习生 offer,一个薪水高、一个福利好,每个都有吸引小明的地方,那怎么才能选出一个更适合自己的 offer 呢?
前两节课结束后,我们已经掌握了表达式的解析,并通过一个简单的解释器实现了公式的计算。但这个解释器还是比较简单的,看上去还不大像一门语言。那么如何让它支持更多的功能,更像一门脚本语言呢?本节课,我会带你寻找答案。
无论是做音视频会议,还是做远程教育,共享桌面都是一个必备功能。如果说在 PC 或 Mac 端写个共享桌面程序你不会有太多感受,但通过浏览器也可以共享桌面是不是觉得就有些神奇了呢?
你好,我是宫文学。在语义分析之后,编译过程就开始进入中后端了。
经过前端阶段的处理分析,编译器已经充分理解了源代码的含义,准备好把前端处理的结果(带有标注信息的 AST、符号表)翻译成目标代码了。
你好,我是刘津。
今天我要与你分享的主题是“如何找对做增长时的正确目标”。
我们都知道在做一件事情之前,最重要的是要确立目标和方向,否则就会漫无目的地乱跑乱撞,花费了大量时间和精力,却得不到什么结果。
你好,我是鸟窝。
在前面的四节课中,我们学习了第一个同步原语,即 Mutex,我们使用它来保证读写共享资源的安全性。不管是读还是写,我们都通过 Mutex 来保证只有一个 goroutine 访问共享资源,这在某些情况下有点“浪费”。比如说,在写少读多的情况下,即使一段时间内没有写操作,大量并发的读访问也不得不在 Mutex 的保护下变成了串行访问,这个时候,使用 Mutex,对性能的影响就比较大。