红黑树是怎么来的 本文从二叉搜索树倾斜的原因(自上而下生长)出发,推出维持树形数据结构平衡性的关键:自下而上裂变式生长,进而引出裂变式生长的理论模型:2-3 树。由于 2-3 树实现上的复杂性,引出其实现上的替代品:红黑树。最后,我们讨论如何通过左旋、右旋以及颜色翻转这“三板斧”来维护红黑树插入和删除元素后的动态平衡。
循序渐进 Redis 分布式锁(以及何时不用它) 本文从众所周知的 setnx 命令开始实现一个简单的 Redis 锁,在实际应用中逐步揭示其面临的问题并给出解决方案,循序渐进地讲解分布式锁需要解决的诸多问题(被动释放、属主、锁等待、保活等),让人知其然且知其所以然。另外本文指出分布式锁并不是银弹,有些问题虽然能用分布式锁解决,但其实有其他更好的方案。...
也说工厂模式 问 100 个面试者会哪些设计模式,至少 99 个都会提工厂模式。这说明工厂模式确实是一般开发人员最常遇到的设计模式之一,另外也说明它是最直观最容易理解的设计模式之一(无论是从概念上还是实现上)。不过,如果继续往下追问,比如工厂模式用来解决什么痛点?怎么解决的?它有什么缺点?什么时候不该用工厂模式?并非每个人都能说得明白的。软件设计的复杂性软件的本质是人类通过指令指导机器来处理人类世界的事务,因而人类世界的复杂性必然会反映到软件上。高中物理告诉我们,运动是绝对的,静止是相对的,“唯一不变的就是变化
字符集编码(四):UTF 在前面文章《字符集编码(中):Unicode》中我们聊了 Unicode 标准并提到其有三种实现形式:UTF-16、UTF-8 和 UTF-32,本篇我们就具体聊聊这三种 UTF 是怎么实现的。
字符集编码(三):Unicode 上世纪九十年代前各厂商为了应对多语言文字的编码需求而设计了各种互不兼容的编码标准,这使得开发商在处理多语言环境时相当棘手。为了解决各自为政的乱象,利益相关公司走到一起试图设计一种新型的、可囊括全世界所有字符的统一编码标准。
一文搞清楚 DNS 的来龙去脉 DNS 对于大部分技术人员来说即熟悉又陌生,说熟悉是因为它就是一个简单的目录服务,将域名映射为 IP;说陌生是因为这个全世界互联网的底层设施不但实现起来及其复杂,甚至还涉及到政治因素,大部分人对这些并不了解。
Swoole 实战:MySQL 查询器的实现(协程连接池版) 文章目录需求分析使用示例模块设计UML 类图入口事务连接池连接查询器的组装总结需求分析本篇我们将通过 Swoole 实现一个自带连接池的 MySQL 查询器:支持通过链式调用构造并执行 SQL 语句;支持连接池技术;支持多协程事务并发执行(协程安全性);支持连接对象的健康检测;支持连接对象断线重连;程序需要可扩展,为未来的改造留好扩展点;完整项目地址:[协程版 MySQL 查...
phper:敢问路在何方 很多php程序员存在未来发展方面的困扰,介于各方面的因素,phper 比其他程序员更容易遇到上升天花板。一方面,一般只有初创企业为了快速实现产品上市以及极容易招到 phper 才使用 php 来实现公司的全部业务,大厂的核心业务都不是 php 做的(阿里用 java,腾讯用 c++),php在大厂只能做边缘功能如管理后台。另一方面,相比于 javascript 在前端领域的一枝独秀,各种玩出花...
技术面试(上):面试官篇 作为一个技术团队管理者,面试是一项必不可少的工作;作为一个上班族,被面试也是必然会一而再再而三经历的事情。不过在我的经验中,很多人(包括曾经的自己)不太会面试这件事,或者说不太重视这件事。面试官认为搞几道题给对方做做,做得出来就牛逼,做不出来就歇菜;受试者则认为自己反正挺牛逼的,对方能慧眼识英雄的话必然会选中我,否则此处不留爷自有留爷处。很多人都认为一旦谈技巧就有种人为造作的成分。本文就自己作...
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; ...
技术团队开发与发版规范 文章目录迭代需求开发提测预发布生产附迭代公司层面的迭代周期是 1 个月(跟 KPI、绩效挂钩),产研团队将 1 个月划分成两个小迭代,月初由产品和技术共同制定本月的需求列表(其中产品需求主要由产品主导,技术协助评估,技术需求由技术团队自己制定),这些计划列表构成每个团队和个人的月 KPI 指标,月末回顾完成率与完成质量,综合考虑评估每个团队和个人的 KPI 情况;月计划列表中的需求项根据重...
Git 分支管理实践 背景在团队多人协作开发中,分支管理需要解决如下问题:直到上线并验收通过之前,每个人开发的功能互不影响;多人开发的功能测试时需要共用同一套(或有限的几套)测试环境;哪怕代码上线后,也有回滚的可能性,上线回滚不会对主干分支的代码产生影响;我们团队的每个项目有四套环境:开发环境:开发人员本机或者远程开发环境(我们有几个项目是通过 sftp 远程开发);测试环境:供测试人员使用;预发...
PHP 开发杂谈:对后端开发的思考 (团队内部技术分享摘要)文章目录目前开发实践中的问题相关设计模式和架构概述其他设计/架构模式相关概念分析目前开发实践中的问题业务逻辑泄露。本应属于 Service 的业务逻辑泄露到其他各层中(Controller、Repository、View等),而原本内容丰富的 Service 反而变成了贫血类。全能Service,主要表现是超多的代码(如vshop的商品和订单的Service代码都...