码农需要知道的“潜规则”

STM32驱动LED矩阵:IS31FL3731与查理复用技术实践 LED矩阵显示是嵌入式系统中常见的人机交互方式,其核心在于高效的驱动技术。查理复用(Charlieplexing)作为一种创新的矩阵扫描方式,通过引脚复用技术,用N个引脚驱动N²-N个LED,大幅提升了硬件资源利用率。IS31FL3731驱动芯片集成了这一技术,配合STM32F410RB微控制器的强大性能,可实现144个LED的精准控制。这种组合在艺术装置、信息展示等场景中展现出独特优势,既能呈现丰富的视觉效果,又能通过内置PWM调光实现256级亮度控制。通过I2C接口通信,开发者可以轻松实现字符显示、图像 阅读详情

前言: 吴思先生在《潜规则》(中国历史中的真实游戏)一书中讲述了很多生动、有趣的官场故事,透过历史表象,揭示出隐藏在正式规则之下、实际上支配着社会运行的不成文的规矩, 非常值得阅读。


这篇文章准确来讲并不是计算机/软件开发的潜规则, 实际上是那些你可能在使用,却没有注意到的一些原理和规律,这些东西很重要,掌握了能够指导你以后的开发和设计。


和码农翻身公众号之前的文章不同, 这是一篇没有故事,读起来不那么好玩的超级干货, 我建议你静下心来,阅读一遍, 仔细的思考一下, 绝对物超所值。

1. 上帝的规矩:局部性原理

这个原理讲的是在一段时间里, 整个程序的执行仅限于程序的某一个部分, 相应的, 程序访问的存储空间也局限于某一个内存区域, 具体分为:


(1) 时间局部性:是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行; 如果某数据被访问,则不久之后该数据可能再次被访问。

(2) 空间局部性: 是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。


为什么是这样?  我也不知道, 可能是计算机界的上帝定下的规矩。 


但是这个原理的用处可就大了, 例如Java 虚拟机, 本来是解释执行.class 文件,性能不怎么样, 但是利用局部性原理, 就可以找到那些常用的, 所谓的热点(Hotspot)代码,  然后把他们编译成本地原生代码(native code), 这样执行效率就和C/C++差不多了。 


当然这个原理更大的用处就是下面要提到的缓存。

2. 坐飞机的怎么和坐驴车的打交道: 缓存

为什么需要缓存(Cache)?  


本质的原因是速度的不匹配。 

CPU比内存快100多倍,  比硬盘快1000多万倍。


 如果CPU每次做事的时候, 都等着内存和硬盘, 那整个计算机的速度估计要慢的要死了。 


所以根据局部性原理, 操作系统会把经常需要用的数据从硬盘取到内存,   CPU 会把经常用的数据从内存取到自己的缓存中。 

(参见文章《CPU阿甘》)

通过这种办法等待的问题能带到极大的缓解。


在Web 开发中,缓存更是非常常见的, 由于数据库(硬盘)太慢, 大部分Web系统都会把最常用的业务数据放到内存中缓存起来。

3. 抛弃细节: 抽象

抽象是计算机科学中最为重要的概念之一。


当我们遇到复杂问题的时候, 抽象是非常重要的武器。 


《深入理解计算机系统》一书中提到:

“指令集是对CPU的抽象, 文件是对输入/输出设备的抽象, 虚拟存储器是对程序存储的抽象, 进程是对一个正在运行的程序的抽象, 而虚拟机是对整个计算机(包括操作系统、处理器和程序)的抽象。”--- 总结的非常精辟


CPU集成电路硬件无比复杂, 但是我们写程序肯定不用接触这些硬件细节, 那样就累死了, 我们只要遵循CPU的指令集, 程序就可以正确的运行, 而不用关心指令在硬件层次到底是怎么运行的。


硬盘也是这样, 有磁道,柱面,扇区, 我们写应用层程序也不用和这些烦人的细节打交道, 在操作系统和设备驱动的配合下, 我们只需要面对一个个“文件”,打开,读取,关闭就行了。   操作系统会把逻辑的文件翻译成物理磁盘上的字节。


再比如为了实现数据的共享,数据的一致性和安全性,需要大量的,复杂的程序代码来实现,  每个应用程序都实现一份肯定不是现实的。 所以计算机科学抽象出了一个叫数据库的东西, 你只需要安装数据库软件, 使用SQL和事务就能实现多用户对数据的安全访问了。 

参见文章《抽象, 程序员必备的能力》

4. 我只想和邻居打交道: 分层

分层其实也是抽象的一种,它通过层次把复杂的,可能变化的东西隔离开来, 某一层只能访问它的直接上层和下层, 不能跨层访问。


例如网络协议分层:

0?wx_fmt=jpeg

再比如Web开发的分层:

0?wx_fmt=jpeg

分层的好处就是隔离变化, 在接口不变的情况下, 某一层的变化只会局限于本层次内。 

即使是接口变化, 也仅仅会影响调用方。

5. 我怕等不及: 异步调用

当你的程序需要等待一个长时间的操作而被阻塞住时而无所事事的时候, 异步调用就派上用场了。 


异步调用简单就是说: 我等不及你了,  先去做别的事情,  你做完了告诉我一声。


回到最早的那个CPU的例子, CPU速度太快, 当它想读取硬盘文件的时候,是不会等待慢1000多万倍的硬盘的, 它会启动一个DMA , 不用通过CPU, 直接把数据从硬盘读到内存, 读完以后通过中断的方式来通知CPU。 


Node.js 和 Web服务器Nginx 也是这样, 一个线程或若干个线程处理所有的请求, 遇到耗时的操作, 绝不等待, 马上去干别的事情,等到耗时操作完成后,再来通知这些干活的线程。


还有著名的AJAX , 当浏览器中的javascript发出一个Http 请求的时候, 也不会等待从服务器端返回数据, 只是设置一个回调函数, 服务器响应数据回来的时候调用一下就行了。

6. 大事化小, 小事花了 : 分而治之

分而治之的基本思想是将一个规模比较大的问题分解为多个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,最后组合起来就可得到原问题的解。


由于子问题和原问题性质相同, 所以很多时候可以用递归。


归并排序就是一个经典的例子, 数据结构与算法书上到处都是, 这里就不在赘述了。 


如果把分而治之泛化一下, 到软件设计领域, 就可以认为是把一个大问题逐步分解的过程:

0?wx_fmt=jpeg

思考: 你工作和学习中遇到过哪些“潜规则”? 不妨留言和大家分享下。


相关阅读:

CPU阿甘

抽象:程序员必备的能力

Node.js : 我只需要一个店小二

Http历险记

给小白的J2EE指南: AJAX


热门文章:

我是一个线程

我是一个Java class

Javascript: 一个屌丝的逆袭

小王的架构师之路

程序员在工作中必备的能力

TCP/IP 之 大明王朝的邮差

IE为什么把Chrome和火狐打伤了

假如我是计算机系老师

假如时光倒流,我会这么学Java

学会编程,而不是学会Java

15年编程生涯,资深架构师总结的7条经验


0?wx_fmt=jpeg

公共号:码农翻身

“码农翻身”公众号由工作15年的前IBM架构师创建,分享编程和职场的经验教训。

Yolov5自定义图片训练测试及模型调优(详细过程) Yolov5自定义数据训练及测试1. 图像数据获取、标注2. 数据集划分及准备3. 配置训练参数,准备训练:3.1 修改data/训练配置xxx.yaml文件:3.2 修改models模型配置xxx.yaml文件4. 开始训练5. 测试训练后的模型: 1. 图像数据获取、标注 如果自定义训练自己的数据集,首先需要数据标注,至于数据来源可以是下载现有的开发数据集、拍照、爬虫等等。 如果是拍照、爬虫等获取的数据图片,需要进行数据标注,这个过程可以使用工具来做,但也需要一些手动操作 。。并且图片越多越好,如果 阅读详情

相关推荐

FRM(Financial Risk Manager,金融风险管理师)知识点总结归纳

FRM知识点总结(150字) FRM考试分为两级:一级侧重基础理论和工具,包含风险管理基础、定量分析、金融市场产品、估值与风险建模四大模块,涵盖风险管理框架、统计学方法、衍生品定价及VaR计算等核心内容。二级聚焦实际应用,分为市场风险、信用风险、操作风险、流动性风险、投资管理和市场前沿六大模块,深入探讨高级风险度量技术(如极值理论)、信用风险模型、巴塞尔协议及新兴风险议题。考试体系贯穿"风险识别→度量→管理→监管"逻辑主线,强调定量分析与实务案例的结合,覆盖传统金融风险和区块链、ESG等

极客神殿 1441

从码农到大神:你必须知道的程序员修炼之路

编者按:本文由怡红公子在众成翻译平台上翻译。我最近和我的一个好朋友以及我的一个前同事一块聊了聊如何提升他的软件开发技能的方案。这让我想起了我在我的工程师生涯中指导帮助过的那些人。我认为将自己所学的内容写成文章来帮助那些新晋开发工程师是非常棒的。本文我会介绍一些非常有用的方法来帮助我们提高自己的水平,例如找一个导师,参与社区或者小项目的开发,阅读和提高软技能。寻找导师作为程序员成长最好的方法之一就是...

shaguguji423的博客 956

OpenMMLab实战指南:从环境搭建到首个检测模型运行

本文是一份详细的OpenMMLab实战指南,重点介绍了如何从零开始搭建环境并运行首个目标检测模型。内容涵盖Miniconda环境配置、PyTorch与CUDA版本匹配、使用MIM工具安装MMCV和MMDetection的核心步骤,并通过RTMDet-tiny模型演示了完整的推理流程,帮助开发者高效入门这一计算机视觉开源算法体系。

weixin_28678151的博客 157

【读书笔记】码农翻身

持续学习&持续更新中… 学习态度:守破离 码农翻身 读书笔记前言编程行业的不容易第六章 老司机的精进凡是必先骑上虎背码农需要知道的“潜规则”一名架构师的总结好奇心养成计算机的思维方式扎实基础 融会贯通要透彻的理解一门技术的本质 前言 编程行业的不容易 不仅需要应对高强度的工作,还需要学习大量的技术知识,而且软件行业的技术每隔一段时间就会更新换代,让你清零,逼着你从头再来。所谓“活到老,学到老”用到程序员身上再合适不过了。 读书本来就应该是一件轻松愉快的事情,不是吗? 软件开发不就是抽象嘛! 第六.

Keep Reading Keep Writing Keep Thinking 562

离线安装 nvidia-docker2(nvidia-container-toolkit)

很多时候大家都有用docker使用gpu的需求,但是因为网络等原因不是那么好用,这里留了一个给ubuntu的安装包,网络好的话也提供了在线安装方式。

father_yingying的博客 1181

计算机组成原理(二)—— 数据的表示与运算

本章目录引言一、数制与编码1.1 进位计数制1.1.1 进制及转换1.1.2 真值、机器数1.2 BCD码1.3 ASCII 码1.4 校验码1.4.1 奇偶校验码1.4.2 海明码1.4.3 CRC循环冗余码二、定点数的表示和运算2.1 定点数的表示2.1.1 无符号2.1.2 有符号(原码、反码、补码、移码)2.2 定点数的运算2.2.1 移位运算2.2.2 加减运算(溢出判断)2.2.3 乘法运算2.2.4 除法运算2.3 强制类型转换2.4 数据的存储和排列三、浮点数的表示和运算3.1 浮点数的表示

S mile0804的博客 7473

《码农翻身》读后感---程序员的潜规则

最近读了一本好书,《码农翻身》,推荐没读过的小伙伴可以读一下。前面通过小故事介绍计算机世界中的方方面面,特别的有意思。 作者在最后一章根据自己成为架构师路上点点滴滴的经验,给广大程序员提供了一些建议。 让我受益匪浅。特此提炼一下,学习共勉: 1、凡事必先骑上虎背 在遇到机会,犹豫不决,缩手缩脚时,记住这句话:“凡事必先骑上虎背”,先让自己下不来台再说,但是真的尽自己最大努力以后就会发现,事情没那么...

LifeIsGood 1547

22版本Altium Designer导出生产文件的规范化操作指南

本文详细介绍了PCB设计中的Gerber文件导出流程及相关文件生成方法。主要内容包括:1)Gerber文件导出的5个关键设置步骤;2)NC钻孔文件的导出方法;3)坐标文件的生成方式;4)文件打包规范要求必须包含Gerber文件、NC钻孔文件和坐标文件;5)文件提交的两种方式(新手推荐提交原始工程文件,量产推荐仅提交Gerber文件包)。文章还特别强调了单位一致性、精度验证等注意事项,为PCB设计文件的规范输出提供了完整指导。

qq_56506325的博客 1058

上海宝付HR揭秘程序员面试门槛高背后的潜规则

上海宝付HR揭秘码农面试门槛高背后的潜规则,大家对于码农都有什么映像呢?是不是给人一种神秘的感觉,他们每天过的生活也都是非常单一的,几乎是两点一线,除了上班就是回家。对于生活很宅的他们找工作面试薪资待遇都是很高的,知道这里面都有哪些潜规则吗?知道为什么会给码农薪资那么高吗?他们既是“技术改变世界”的功臣。但又是“被技术耽误生活”的人。他们很简单,简单到心里只有技术。所以导致程序员给大家的印象都是套...

weixin_44611776的博客 390

3D数学-动力学

3D数学-11-动力学 旋转运动学 二维旋转动力学 首先我们考虑最简单的情况: 我们将F施加在圆盘(忽略质量)上的一个点(质量为m)上 图中:F为我们施加的力,O是枢轴原点。 通过基本的运算,我们可以得到 F'= F*sinθ 那么切向加速度 a = F'/ m 切向加速度是线性速度的加速度,我们通过除以半径获得角加速度 α = a / r 现在,我们换一种方式,那就是通过杠杆臂的方式去施加力 为了能够计算出m点的角加速度,我们需要引入一个概念:扭矩 他的理解类似于力矩,公式如下 τ = Flsi

韩天衣的博客 2285

禁止使用服务器 IP 访问 Apache 环境下的 Web 站点

通过在 Apache 的配置文件中添加适当的指令,我们可以轻松地禁止使用服务器 IP 地址访问我们的 Web 站点。在 Apache 环境下,有时我们希望禁止用户使用服务器的 IP 地址直接访问我们的 Web 站点,而只允许使用域名进行访问。现在,当用户尝试使用服务器的 IP 地址来访问你的网站时,他们将会被拒绝访问,只有通过域名才能正常访问。为了实现这个目标,我们可以通过 Apache 的配置文件进行相应的设置。表示禁止对根目录的访问权限,即禁止使用服务器的 IP 地址进行访问。

TpCode的博客 945

《码农翻身》原文分章节阅读链接

最近发现了别人整理好的码农翻身里面的一些文章链接,这本书非常棒,公众号相信很多人也知道(coderising),不过由于这本书目前只有纸质版,因此在上下班这块时间段里没法方便的去阅读,所以这份整理好的带链接的目录就十分方便的解决了这个问题。 附上原文链接:https://blog.youkuaiyun.com/wudinaniya/article/details/81130079 补充一篇负载均衡文章:h...

静待花开 8029

高通平台 Android T 蓝牙技术全解析:A2DP 与 AVRCP 核心代码路径与交互流程

A2DP 接收端 - 连接流程(AVDTP 打开)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 289

【规律之手】资深码农都懂?软件工程中的13条“潜规则”定律

它们虽然不像物理定律那样严格,但确实精准地捕捉到了我们日常工作中经常遇到的挑战和现象,堪称是宝贵的“经验法则”或“心智模型”。理解这些“定律”,能帮我们更好地认识软件开发中的复杂性,识别潜在风险,做出更明智的决策,少踩一些坑。(你的架构是不是反映了你的团队结构?) (+ 逆康威定律)API 的所有可观察行为都会被依赖,无论你承诺什么。火热进行中,欢迎各位小伙伴点击链接,积极参与,赢取本人亲笔签名的赠书😁。(你做的功能多少是真正有价值的?(原始文章对每条定律有更详细的解释和漫画,感兴趣的同学可以搜索"

TonyBai 502

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

在瑞典当码农 :在家上班?不加班?能干到60岁?

作者:斯京小羊来源:公众号“爱上瑞典”写在前面前段时间,国内IT公司996(朝九晚九一周六天)的上班制度成了人们热议的话题。很多朋友给我留言让我写写瑞典的IT公司工作情况...

码农翻身 5352

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C 语言函数返回值,竟也有潜规则~_c输出值是否可信,36岁老码农现身说法

仔细考虑下,其实C语言函数使用返回值 0 表示成功是有原因的。更一般的C语言函数返回值并不一定只有两种可能值(成功/失败),它可能还会返回对应错误原因的返回值。总之,函数成功只有一种可能,函数失败却有多种可能。实数要么是 0,要么非 0,因此可以将 0 看作一个比较特殊的“唯一”数值,使用 0 这个“唯一”的返回值,表示唯一的“成功”,多种非零的返回值,表示多种原因的失败,无疑更好一些。

2401_84247341的博客 434

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

码农翻身精华文章

让你豁然开朗的干货文章合集,通俗易懂

perry_Fan 3万+

码农翻身

大话编程我是一个线程我是一个Java class Javascript: 一个屌丝的逆袭 Java:一个帝国的诞生JSP:一个装配工的没落TCP/IP 之 大明王朝的邮差TCP/IP 之 大明内阁TCP/IP 之 蓟辽督师CPU 阿甘CPU 阿甘之烦恼CPU 阿甘:函数调用的秘密我是一个网卡我是一个路由器我是一个进程我是一块硬盘(上)我是一块硬盘(下)我是一个键盘张大胖的socket张大胖学递归学...

Harrytsz的博客 2612

新华三的“加班事件”说明码农的时代已经过去?

点击上方“iOS开发”,选择“置顶公众号”关键时刻,第一时间送达!3月12日,新华三(H3C)总裁兼CEO于英涛突然在微博上连续向公司的研发人员“开炮”,开炮的内容围绕“研发人员加班费”,微博内容是这样的——第一条微博内容:“我来回应一下加班与工资问题。1、加班按照工作不同可以分为有偿加班和无偿加班,这是公司根据不同工作性质的决定。2、有偿加班的工作,加班就应该付费,天经地义!3、公司不需要加班,

iOS_开发 1396

码农翻身全年文章精华2016

在码农翻身公众号写了一年多, 最大的体会就是:原创真心不易! 每天思考的最大问题就是: 下一篇文章写啥?  在大家的支持和鼓励下,还是坚持了下来,  回头看看走过的路,这一年过得还算充实。 很快就要过年了, 我也要休息一下, 春节后重新出发 !我把这一年来的精华文章整理了一下,作为节前的最后一篇, 欢迎转发分享。再次感谢大家一年来的陪伴, 预祝大家春节快乐,万事如意!大话编程我是一个线程我是一个J...

Robin022的专栏 1150

码农翻身全年文章精华

在码农翻身公众号写了一年多, 最大的体会就是:原创真心不易! 每天思考的最大问题就是: 下一篇文章写啥? 在大家的支持和鼓励下,还是坚持了下来, 回头看看走过的路,这...

码农翻身 2315
上一篇: Java : 一个帝国的诞生
下一篇: Basic : 一个老兵的自述
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值