自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhang0402030211的专栏

关于计算机、编程、互联网通识和历史知识

  • 博客(22)
  • 收藏
  • 关注

原创 红黑树是怎么来的

本文从二叉搜索树倾斜的原因(自上而下生长)出发,推出维持树形数据结构平衡性的关键:自下而上裂变式生长,进而引出裂变式生长的理论模型:2-3 树。由于 2-3 树实现上的复杂性,引出其实现上的替代品:红黑树。最后,我们讨论如何通过左旋、右旋以及颜色翻转这“三板斧”来维护红黑树插入和删除元素后的动态平衡。

2023-05-23 09:06:39 119

原创 我已经受够了“系统异常”!

你有没有这样的经验:用个软件,隔三岔五弹个框:系统异常!无论作为用户还是程序员,一见到“系统异常”四个大字,我整个人都不好了。

2023-04-10 14:31:42 185

原创 循序渐进 Redis 分布式锁(以及何时不用它)

本文从众所周知的 setnx 命令开始实现一个简单的 Redis 锁,在实际应用中逐步揭示其面临的问题并给出解决方案,循序渐进地讲解分布式锁需要解决的诸多问题(被动释放、属主、锁等待、保活等),让人知其然且知其所以然。另外本文指出分布式锁并不是银弹,有些问题虽然能用分布式锁解决,但其实有其他更好的方案。...

2022-06-20 16:27:00 264 1

原创 编程为什么那么难:从储值卡扣款说起

写可用的系统容易,写可靠的系统很难。编程真正难的在对失败场景的处理上。本篇通过分析储值卡扣款这么个“简单”的场景,你会发现其实它一点也不简单。

2022-04-21 09:26:34 388 2

转载 接口设计的那些事

很多人开发接口的时候,往往仅关注功能实现,但接口质量恰恰取决于非功能性方面,主要包括:幂等性、鲁棒性和安全性。本文详细讲解开发接口(以及系统)时在这三方面需要考虑的细节问题。

2022-03-25 09:58:54 607

原创 也说工厂模式

问 100 个面试者会哪些设计模式,至少 99 个都会提工厂模式。这说明工厂模式确实是一般开发人员最常遇到的设计模式之一,另外也说明它是最直观最容易理解的设计模式之一(无论是从概念上还是实现上)。不过,如果继续往下追问,比如工厂模式用来解决什么痛点?怎么解决的?它有什么缺点?什么时候不该用工厂模式?并非每个人都能说得明白的。软件设计的复杂性软件的本质是人类通过指令指导机器来处理人类世界的事务,因而人类世界的复杂性必然会反映到软件上。高中物理告诉我们,运动是绝对的,静止是相对的,“唯一不变的就是变化

2022-03-15 10:09:31 325

原创 字符集编码(四):UTF

在前面文章《字符集编码(中):Unicode》中我们聊了 Unicode 标准并提到其有三种实现形式:UTF-16、UTF-8 和 UTF-32,本篇我们就具体聊聊这三种 UTF 是怎么实现的。

2022-03-12 10:04:34 1975

原创 字符集编码(三):Unicode

上世纪九十年代前各厂商为了应对多语言文字的编码需求而设计了各种互不兼容的编码标准,这使得开发商在处理多语言环境时相当棘手。为了解决各自为政的乱象,利益相关公司走到一起试图设计一种新型的、可囊括全世界所有字符的统一编码标准。

2022-02-28 09:09:24 1839

原创 字符集编码(二):字符编码模型

聊 Unicode 之前先讲讲设计层面的东西。编码模型是字符集编码的设计指导框架,有助于我们更好更透彻地理解各具体的编码标准。

2022-02-23 21:14:09 334

原创 字符集编码(一):Unicode 之前

字符集编码的历史出乎意料地复杂而有趣,打算花三个章节讲讲字符集编码的来龙去脉。本篇讲讲 Unicode 出现之前字符集编码领域的混沌与秩序

2022-02-17 22:37:16 579

原创 IP:网络上的击鼓传花

网络层是整个网络分层体系里面最复杂的部分,不仅涉及到技术,还涉及到运营商之间的博弈。

2022-01-27 08:44:26 2327

原创 一文搞清楚 DNS 的来龙去脉

DNS 对于大部分技术人员来说即熟悉又陌生,说熟悉是因为它就是一个简单的目录服务,将域名映射为 IP;说陌生是因为这个全世界互联网的底层设施不但实现起来及其复杂,甚至还涉及到政治因素,大部分人对这些并不了解。

2022-01-17 08:00:00 1991 2

原创 Swoole 实战:MySQL 查询器的实现(协程连接池版)

文章目录需求分析使用示例模块设计UML 类图入口事务连接池连接查询器的组装总结需求分析本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器:支持通过链式调用构造并执行 SQL 语句;支持连接池技术;支持多协程事务并发执行(协程安全性);支持连接对象的健康检测;支持连接对象断线重连;程序需要可扩展,为未来的改造留好扩展点;完整项目地址:[协程版 MySQL 查...

2020-05-02 18:49:09 914

原创 phper:敢问路在何方

很多php程序员存在未来发展方面的困扰,介于各方面的因素,phper 比其他程序员更容易遇到上升天花板。一方面,一般只有初创企业为了快速实现产品上市以及极容易招到 phper 才使用 php 来实现公司的全部业务,大厂的核心业务都不是 php 做的(阿里用 java,腾讯用 c++),php在大厂只能做边缘功能如管理后台。另一方面,相比于 javascript 在前端领域的一枝独秀,各种玩出花...

2020-04-28 23:34:05 1315 1

原创 技术面试(上):面试官篇

作为一个技术团队管理者,面试是一项必不可少的工作;作为一个上班族,被面试也是必然会一而再再而三经历的事情。不过在我的经验中,很多人(包括曾经的自己)不太会面试这件事,或者说不太重视这件事。面试官认为搞几道题给对方做做,做得出来就牛逼,做不出来就歇菜;受试者则认为自己反正挺牛逼的,对方能慧眼识英雄的话必然会选中我,否则此处不留爷自有留爷处。很多人都认为一旦谈技巧就有种人为造作的成分。本文就自己作...

2020-04-20 11:29:09 1760

原创 nginx 支持 WebSocket 协议

nginx.conf 的 http 段中:map $http_upgrade $connection_upgrade { default upgrade; '' close;}vhost.conf 中:location / { proxy_pass http://127.0.0.1:9875; proxy_set_header Host $host; ...

2020-04-15 15:46:47 403

原创 技术团队开发与发版规范

文章目录迭代需求开发提测预发布生产附迭代公司层面的迭代周期是 1 个月(跟 KPI、绩效挂钩),产研团队将 1 个月划分成两个小迭代,月初由产品和技术共同制定本月的需求列表(其中产品需求主要由产品主导,技术协助评估,技术需求由技术团队自己制定),这些计划列表构成每个团队和个人的月 KPI 指标,月末回顾完成率与完成质量,综合考虑评估每个团队和个人的 KPI 情况;月计划列表中的需求项根据重...

2020-04-08 21:31:34 778

原创 Git 分支管理实践

背景在团队多人协作开发中,分支管理需要解决如下问题:直到上线并验收通过之前,每个人开发的功能互不影响;多人开发的功能测试时需要共用同一套(或有限的几套)测试环境;哪怕代码上线后,也有回滚的可能性,上线回滚不会对主干分支的代码产生影响;我们团队的每个项目有四套环境:开发环境:开发人员本机或者远程开发环境(我们有几个项目是通过 sftp 远程开发);测试环境:供测试人员使用;预发...

2020-04-08 20:57:15 399

原创 PHP 开发杂谈:对后端开发的思考

(团队内部技术分享摘要)文章目录目前开发实践中的问题相关设计模式和架构概述其他设计/架构模式相关概念分析目前开发实践中的问题业务逻辑泄露。本应属于 Service 的业务逻辑泄露到其他各层中(Controller、Repository、View等),而原本内容丰富的 Service 反而变成了贫血类。全能Service,主要表现是超多的代码(如vshop的商品和订单的Service代码都...

2020-04-07 21:15:13 1065

原创 从储值卡(会员卡)充值业务看分布式事务的设计

公司有一项储值卡充值业务:客户在微信公众号开通储值卡服务,通过微信支付往卡里面充值,充值成功后客户可收到消息通知,并进行消费。看起来是一项很简单的业务,最初我们储值卡团队的实现也确实很简单。我们看看最初的实现:相信聪明的你一眼就能看出问题:压根没有考虑分布式事务一致性,比如第 12 步根本没有考虑卡系统充值失败的情况该如何处理,而是默认其一定能成功;大部分的处理都是放在前端业务系统(除...

2020-04-07 21:12:17 1090

原创 PHP 开发规范:实战篇

本规范基于 PSR 和实际项目经验整理而成,目前已在公司内部推行使用,特分享如下。分为编码格式篇和程序设计篇两大部分。文章目录编码格式篇样例文件行缩进关键字命名命名空间和类类的常量、属性和方法修饰符的使用方法和函数的调用控制结构花括号的使用运算符闭包代码注释程序设计篇异常状态码/错误码日志缓存数据库控制器SessionAPI 接口其它编码格式篇基于 PSR-1、PSR-2、PSR-12 。...

2020-04-07 20:38:06 281

原创 Git 常用命令汇总(99%的工作场景看这篇就够了)

分支的三个版本:远程版本库,如 github.com;远程快照,使用 git branch -r 查看到的 origin/branch-name,相关信息在 .git/refs/remotes 中;本地分支,使用 git branch 查看到的分支,相关信息在 .git/refs/heads 中。一般本地分支会关联到对应的远程分支;仓库与版本库:可理解为:仓库 = 版本库 + 工作区...

2020-04-07 20:30:15 279

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除