电脑技术

状态管理的终局:不是Redux,也不是Context

前端圈对状态管理的执念,可能是过去十年最大的集体焦虑。从Flux到Redux,从MobX到Recoil,从Context API到Zustand,每隔一两年就会冒出一个"更简洁"的方案,然后大家又开始新一轮的重构和争论。

但我越来越怀疑一件事:我们在用前端的方式解决本不该存在的前端问题。

 

状态管理焦虑的根源

 

大部分前端开发者第一次接触Redux的时候,都会有类似的困惑:为什么一个简单的计数器需要写这么多代码?action、reducer、dispatch、connect,整整一套ceremony,就为了让组件拿到一个数字。

当时流行的解释是:"这是为了可维护性。" 等项目大了你就懂了。

确实,等项目大了,我懂了。但我懂的不是Redux的好处,而是我们把太多不该放在前端的状态放在了前端。

举个真实场景:用户的投资组合数据。

API 设计的两个误区:RESTful 和 GraphQL 都不是银弹

前两天团队讨论新业务的技术方案,后端同学提议用 GraphQL,理由是"前端可以自己控制数据结构,不用频繁改接口"。我问了一句:"你们后端有多少人?"答:"3个人"。我说:"那别折腾了,RESTful 就够了"。

这不是第一次遇到这种情况。这些年做全栈,从后端写 API 到前端调 API 再到 BFF 层设计 API,见过太多技术选型上的执念。最常见的两个误区:一是觉得 RESTful 就是正统,必须符合所有规范;二是觉得 GraphQL 能解决前后端协作的所有问题。

事实上,这两个都不是银弹。

 

RESTful 的形式主义陷阱

 

大部分开发者第一次接触 API 设计,学的都是 RESTful 规范。GET 查询、POST 创建、PUT 更新、DELETE 删除,资源路径用名词不用动词,状态码要严格遵循 HTTP 标准。这些原则没错,但问题在于,很多人把它当成了教条。

前后端分离的代价:为什么全栈工程师越来越香

前后端分离已经是前端圈的"政治正确"了。但最近几年,我观察到一个反常识的现象:不少团队在推进前后端分离几年后,又开始招聘全栈工程师,甚至把部分项目重新合并。

这不是技术倒退,而是对"分离成本"的重新认识。

 

前后端分离的三大隐形成本

 

大部分团队谈前后端分离时,强调的是"职责清晰"、"技术栈解耦"、"并行开发"。但很少有人提它的代价。

 

1. 沟通成本:从「对话」变成「会议」

 

以前一个功能,全栈工程师自己从前端写到数据库,遇到问题自己调试,半天搞定。

前后端分离后?先写需求文档,前后端对齐接口,联调发现参数不对,再开个会讨论,改完继续联调。原本半天的事,拉长成三天。

我不是说会议不重要,而是很多"会议"本质上是在弥补"认知鸿沟"——前端不知道后端为什么这么设计,后端不知道前端要什么。

金融业务尤其明显。理财产品的持仓逻辑,涉及到实时资产、历史收益、预期收益三种数据,前端需要合并展示。如果后端不理解前端的渲染逻辑,可能会返回三个接口;前端不理解后端的数据模型,可能会要求合并成一个接口但无法满足缓存策略。

这不是技术问题,是认知问题

 

技术债务的真相:不是代码问题,是决策问题

最近在一次技术评审会上,我听到一位工程师说:"这段代码已经成为技术债务了,我们需要重构它。"当我追问为什么时,他回答:"因为写得很烂,难以维护。"

这是一个典型的误解。技术债务从来不是代码写得好不好的问题,而是在特定时刻做出的理性决策。把技术债务等同于"烂代码",就像把信用卡债务等同于"乱花钱"——你完全忽略了债务背后的战略选择。

一、重新定义技术债务

Ward Cunningham 在 1992 年提出"技术债务"这个概念时,他的本意是:为了更快交付价值,有意识地选择了一个不够完美但足够好的技术方案,代价是未来需要额外的工作来改进它。

注意三个关键词:

  •  
    1. 有意识:这是一个深思熟虑的决策,不是偷懒或能力不足
    2. 足够好:当前方案能够满足业务需求,只是不够理想
    3. 未来代价:团队清楚知道这个选择的长期成本

然而在实践中,我们常常把四种完全不同的东西都叫做"技术债务":

 

API 设计的哲学:为什么 REST 和 GraphQL 都不是答案

> "工具本身从来不是问题的答案,理解问题才是。" —— 未署名的架构师

引言:一场永无止境的争论

在技术社区里,关于 API 设计的争论从未停止。REST 的支持者会告诉你:"遵循 RESTful 原则,你的 API 就会优雅、可扩展。" GraphQL 的拥趸则反驳:"单一端点、精确查询、类型安全,这才是现代 API 的未来。"

但如果我告诉你,这场争论本身就是一个错误的问题?

真正的问题不是"应该选择 REST 还是 GraphQL",而是我们为什么需要在两种范式之间做非此即彼的选择?更深层次的问题是:我们是否真正理解了 API 设计背后的本质问题?

REST 的谎言:资源导向的美丽陷阱

REST(Representational State Transfer)在 2000 年由 Roy Fielding 提出时,是一个革命性的概念。它将 Web 服务抽象为"资源"的集合,通过标准的 HTTP 方法(GET、POST、PUT、DELETE)进行操作。听起来很完美,对吧?

排版引擎和JS引擎

排版引擎(Layout Engine)

主要是是用来让网页里浏览器绘制网页。目前流行的排版引擎如下:

WebKit 

  - Apple Safari

  - Google Chrome

Trident

  - Internet Explorer

Gecko

  - Firefox

 

JS引擎(JS Engine)

顾名思义,JS engine是专门用来处理JS脚本的程序。

主流的浏览器的JS engine如下:

Mozilla

  SpiderMonkey - Firefox 1.0~3.0

  Rhino - 由Mozilla基金会管理,open source,完全以java编写的。

  TraceMonkey Firefox 3.5~3.6

  JaegerMonkey  Firefox 4.0 + 

  IonMonkey Firefox 18.0+

Google

简单描述位,字节和字在计算机中的表示

博客分类: 

比特:

位或者比特(Bit)也简称小b(b)。

字节:

Byte简称大B(B)。

1个字节(B) = 8个比特(b)

所以:

常说的16位电脑,它是以: 16b/8 = 2个字节 为一个存储单元存储的。

常说的32位电脑,它是以: 32b/8 = 4个字节 为一个存储单元存储的。

常说的64位电脑,它是以: 64b/8 = 8个字节 为一个存储单元存储的。

字:

字是由一个或多个字节组成的。

因为计算机里最小的处理单位是:字节(B),所以字肯定是字节的整数倍。一般来说,英文状态下,键盘上能敲出来的字都是一个字节的。但是如果是中文或者日文,一般是2个字节的。

但是,如果你是UTF8编码格式的话,字节数是1-6范围内的。因为UTF8是由1-6字节编码UNICODE字符。

 

[转]安装Windows和Linux双系统

网上看到一篇关于安装Windows和Linux双系统的博客,写得很好,这里收藏并转发下。

转自: CoffeeCat's IT Blog

 

Windows和Linux双系统的安装方法

Linux经过这些年的发展,其易用性大大提高,这也体现在Linux的安装程序上,所以,将Linux安装在一台已安装了Windows的电脑上已经不是什么难事。下面,我就谈谈如何在windows电脑上安装Linux。

页面