Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

VPS 迁移和网站备案

Posted on 01/15/202010/08/2024 by 四火

以前这个 Blog 放在 VPSYOU 上,主机在美国加州,但是这个 VPS 由于亏损的关系,要关掉了,于是我开始寻找下一个 VPS 服务。考虑到是中文的博客,因此我倾向于把主机放到中国大陆,这样访问速度会快一些。正好腾讯云在搞活动,我就订购了,找了上海的主机,其实我隐约知道国内的 VPS 建立网站,是需要备案的,但我觉得可以尝试一下。如我所料,这个 Blog 应用迁移的过程很顺利;可是没想到的是,我大大低估了备案的难度,这个备案的过程,实在太过荒谬和不近人情。

Blog 应用迁移

整体来说,应用迁移过程本身还是比较顺利的。这里记录了迁移这个过程的操作步骤,也可以作为日后再做 VPS 迁移的参考。

安装 LNMP

首先

[……]阅读全文

Continue reading

从物理时钟到逻辑时钟

Posted on 12/28/201907/04/2022 by 四火

一个分布式系统,经常需要面对同一份数据在不同时间的更改,这个更改可能来自不同节点间数据的同步,也可能来自系统对于客户端写请求的处理,那么这样的更改就可能出现冲突问题。而基于事件发生顺序的冲突问题的解决,是很多分布式系统,在一致性方面,都必须要仔细考虑和妥善处理的问题。我曾经阅读过一些互联网上的材料,但是没有发现哪个能比较系统且简洁地把这个问题和解决描述清楚的,我觉得我也许能够做得更好,于是有了本文。下面我来通过简单的例子介绍这类问题的产生,以及应对的思路。

我来举一个简单例子:

你可以看到,往右的箭头表示在一个分布式系统中,A、B、C 三个节点上,实际时间流逝的时间轴。节点 A[……]阅读全文

Continue reading

近期面试观摩的一些思考

Posted on 12/08/201907/04/2022 by 四火

作为软件工程师,工作有一些年头了,在不同的公司,也面试过不少人。以前没觉得这事儿多有意思,但是这几年想法改变了,我发现在一家公司,去面试不同的候选人,是一个非常有价值的增长阅历、经验,让自己成长的机会,还有机会见识到各种各样的人的,获知他们不同的思考问题的方式。特别是作为 bartender(在 Oracle,bartender 基本上就是面试的技术负责人,所有团队招人,都必须有一个来自别的团队的 bartender 来保证候选人的水准,具体的面试流程你可以参考一下我写过的这个专栏),这样的机会有很多,虽然会占用一些自己团队和项目的时间,但是和收获比起来,显然是很有价值的。

最近跟一些公司内一

[……]阅读全文

Continue reading

RSA 背后的算法

Posted on 11/16/201907/04/2022 by 四火

RSA这篇文章我本来是想写了放到极客时间上我写的专栏里面的,但是专栏的内容是需要仔细斟酌的。这篇文章我认为还是偏难,不适合整个专栏的内容和难度的定位,因此我把它稍微加工了一下,放到我这个博客上。

在专栏中的第 36 讲的选修课堂中,我介绍了 Diffie–Hellman 密钥交换这一算法,它可以说是质数在加密技术中的一个应用,并且是通过其中的 “模幂运算” 来实现的。今天,我来介绍质数的另一个应用,RSA 背后的算法。我在互联网上搜索了一下,我发现基本没有能把它背后的实现原理用浅显的中文叙述讲清楚的,但我还是想试一试,看看能不能尽可能避开那些难懂的术语,用尽量形象和易于理解的方式,把 RSA 背后 [……]阅读全文

Continue reading

极客时间上我的专栏《全栈工程师修炼指南》

Posted on 09/10/201912/08/2019 by 四火

抱歉近几个月博客文章更新不够频繁,也有朋友问过,现在我想告诉大家,那是因为我写专栏去了。今天,专栏 《全栈工程师修炼指南》终于上线了,下面的内容,就是我将这些年来,关于全栈开发,自己的一些经验、心得、感悟,总结起来,并且酝酿思考了很久,撰写的这个专栏。我想,目前市面上某一项具体技术的教程通常好找,但是系统的全栈技术关系树,包含这些技术之间的演进、权衡和本质介绍,并引发思考的学习材料却并不好找。值得一提的是,这个专栏中我将全程朗读所有的技术文章,为的就是能够尽可能地把原汁原味的技术内容传达给读者,希望你可以从中享受技术单纯原始的快乐。

下面的内容就是这个专栏在发售时的宣传材料,你也可以直接拖 [……]阅读全文

Continue reading

几个问题的思考:时差问题、地图算法和 Windows 更新

Posted on 08/18/201903/29/2020 by 四火

有时候忽然上下班路上,会去思考一些司空见惯的问题,有一些问题随着思考深入,发现还挺有意思的,就记录在这里。问题之间关联关系不大,有点散。

倒时差的问题

西雅图夏令时和北京时间的时差是 15 个小时,有一个简单的换算方式,就是把当前西雅图时间昼夜颠倒一下(加 12 小时),再加 3 个小时,就得到北京时间了。举例来说,现在是 8 月 16 日晚上的 9 点 37 分,昼夜颠倒一下,就是 8 月 17 日的上午的 9 点 37 分,再加 3 小时,就是 8 月 17 日中午的 12 点 37 分,这就是北京时间。

这几年跑了几次北京和西雅图以后,发现一个规律,就是从北京来到西雅图倒时差非常困难,而从西雅图回到北京倒时差就相对容易得多。我曾经以为是自己心理 [……]阅读全文

Continue reading

分析运行中的 Python 进程

Posted on 06/22/201906/23/2019 by 四火

在 Java 中打印当前线程的方法栈,可以用 kill -3 命令向 JVM 发送一个 OS 信号,JVM 捕捉以后会自动 dump 出来;当然,也可以直接使用 jstack 工具完成,这些方法好几年前我在这篇性能分析的文章中介绍过。这样的需求可以说很常见,比如定位死锁,定位一个不工作的线程到底卡在哪里,或者定位为什么 CPU 居高不下等等问题。

现在工作中我用的是 Python,需要线上问题定位的缘故,也有了类似的需求——想要知道当前的 Python 进程 “在干什么”。但是没有了 JVM 的加持,原有的命令或者工具都不再适用。传统的 gdb 的 debug 大法在线上也不好操作。于是我寻找了一些别的方法,来帮助定位问题,我把它们记录 [……]阅读全文

Continue reading

谈谈 Ops(汇总 + 最终篇):工具和实践

Posted on 06/17/201909/07/2020 by 四火

除了主要内容——工具和实践,这篇文章也对 “谈谈 Ops” 系列做一个汇总,提供一个访问入口。之前几篇,从一个纯粹 dev 狭窄的视角,谈了谈自己对 Ops 的一些认识:

  • 谈谈 Ops(一):我的运维经历
  • 谈谈 Ops(二):流程和人
  • 谈谈 Ops(三):事务、团队和时间分配

在往下继续以前,如果没有看过前面的文字,不妨移步阅读,因为上面的内容对下面的内容做了一定程度的铺垫。

现在在写的这一篇文字,我准备是最后一篇,主要谈论这样几个事情:一个是工具,另一个是实践。我依然还是从 dev 的视角,而不是从一个专业运维的视角来记叙。

工欲善其事,必先利其器。我在主要且通用的工具 [……]阅读全文

Continue reading

HTTPS 升级

Posted on 05/27/201901/13/2020 by 四火

昨晚花了几个钟头,把 blog 的 HTTP 升级成 HTTPS 了,虽然这件事做的晚了一点。为什么要升级,不是我说明的重点,想了解的朋友可以阅读这篇文章。我记录的是我升级的过程,踩到的坑。

备份

首先,文章中有许多以 http://www.raychase.net 开头的 URL,比如某些图片和链接,可以把它们改成 https 的,也可以全部改成相对路径,这样的适用性更广。

UPDATE xx_posts SET post_content = REPLACE(post-content, 'http://www.raychase.net/', '/');

到浏览器里面访问看看,似乎没有什么问题。[……]阅读全文

Continue reading

不要让业务牵着鼻子走

Posted on 05/24/201910/01/2024 by 四火

这篇文章算是要和之前写的 《程序员懂业务有多重要?》“唱反调” 了。

从工作开始,我就不断被灌输着一种业务至上的观点,无论在中国的公司,还是美国的公司,衡量一个决定或者一个需求的价值,都是在业务上有多大的帮助,都说 business impact 是什么。我从不怀疑单纯这样做的初衷,但是我质疑单纯这样做的结果。我觉得,即便是一个业务驱动为主的团队,在决策的时候,技术的占比,应当占据显著的地位。因而我说,不要被业务牵着鼻子走。继续把这一点发扬光大,我认为它对团队发展,对个人发展,都是如此。

曾经认为,这样的观点应该是公认的,但是我越来越发现,事实并不是这样。应该说几乎所有程序员都看到了业务上 [……]阅读全文

Continue reading

LeetCode 题目解答—— 第 416 到 460 题

Posted on 05/13/201906/23/2019 by 四火

从第 416 到第 460 题,跳过了需要付费的题目。付费的题目会单独放在一篇里面。

416
Partition Equal Subset Sum
40.0%
Medium

417
Pacific Atlantic Water Flow
36.9%
Medium

419
Battleships in a Board
65.2%
Medium

420
Strong Password Checker
17.9%
Hard

421
Maximum XOR of Two Numbers in an Array
50.5%
Me[……]阅读全文

Continue reading

我也谈一谈 996

Posted on 04/13/201912/25/2019 by 四火

最近程序员圈子里最闹腾的事情就是 996 ICU 了。这个事情是如此之火爆,我觉得都没有必要再把它介绍一遍了,连 GitHub 项目都被封了(指国内的主要的几款浏览器)。作为一个号称和希望长期话说程序员和为程序员说话的博客作者,作为一个同经历过大于 996 和小于 955 这样反差的程序员本人,我应当是具备一些说几句的资格的,但奇怪的是,除了大家都已经熟悉的那些烂大街的评论,想了几天却依然没有很系统的想法,似乎有不少头绪却不知从何说起。也罢,就说一点零散的观点吧。

关于我的经历

我工作已经超过十年了,从 2008 到 2012 年初,我是在华为度过的。华为这张招牌胜过一切 996 的广告语,从工作时间来看,最 [……]阅读全文

Continue reading

谈谈 Ops(三):事务、团队和时间分配

Posted on 03/27/201906/23/2019 by 四火

作为普通的开发人员,我们会遇到对于时间分配的思考,没有金标准,只有某些看起来也未必靠谱的 “最佳实践”。不同人眼中对于整体的时间分配也有自己的看法,这篇文章旨在探讨其中的一两种情况。

Ops 的事务类型

Ops 的事务很多很杂,首先要明确一点的就是,Ops 远不止 oncall,远不止线上产品维护。整个软件工程流程中的配置、部署、环境搭建、升级、打补丁,甚至问题定位、故障排查等等,都或多或少可以算作 Ops。

记得在读书的时候,老师给我们把日常事务划为四个象限:紧急重要、紧急不重要、不重要但紧急,以及不重要不紧急。Ops 和一般软件开发活动在这四个象限的分布上来比较,更多地,会偏重于 “紧急 [……]阅读全文

Continue reading

LeetCode 题目解答—— 第 372 到 415 题

Posted on 03/26/201906/23/2019 by 四火

372 到 415 题,同级别的题目反正是越来越难。老规矩,跳过了那些付费题目。

372

Super Pow

35.5%
Medium

373

Find K Pairs with Smallest Sums

33.3%
Medium

374

Guess Number Higher or Lower

38.9%
Easy

375

Guess Number Higher or Lower II

37.3%
Medium

376

Wiggle Subsequence

37.0%
Medium[……]阅读全文

Continue reading

谈谈 Ops(二):流程和人

Posted on 01/28/201906/23/2019 by 四火

第二部分,我想谈一谈流程,依然来源于我的理解。Ops 的实践上面,有两部分内容紧密结合,不但共同显示了 Ops 的生产力,也在相当程度上体现了 Ops 的技术水平。这第一部分就是流程,也是今天要说的内容,另一部分是工具(也包括和使用工具相关的技能),下一次再说。

我认为 Ops 可以分为几个层次,最次的的一层,其特点是重度依赖于的人的直接 “操作”。风险管理、因果行为,都通过流程来统一把控,并且遗憾的是只有流程——除了它基本没有可靠有效的工具,或是其他办法。

其实,流程本是个好东西。有时候某些工程师被散漫和自由主义惯坏了,听到流程就反感。事实上,流程在很多情况下都有着举足轻重的作用。它们很容易控制[……]阅读全文

Continue reading

谈谈 Ops(一):我的运维经历

Posted on 01/20/201906/23/2019 by 四火

偶然地,在会看这些年写的文章的时候,发现涉及到软件工程方方面面的内容,但是关于 Ops 的内容却非常少。我觉得这是不太合适的,因为在实际工作中,Ops 显而易见地占据了一大块比重。于是我调整了分类目录,增加了这个单独的分类,并且这一次,我想零零散散地讲一讲我关于 Ops 的一些经历,以及关于 Ops 的一些观点。

所谓 Ops,指的就是 Operations,在中文翻译上看,我觉得 “运维” 这个词可能是最恰当的。作为一个软件工程师,Ops 有时会特指 DevOps,关于它的定义,在维基百科上有这样一张图片,我觉得基本正确地描述了 DevOps 涵盖的内容(见右侧图)。

可以看到三方面的内容,可是,由于我们会把 [……]阅读全文

Continue reading

写在曼联主教练又一次更迭之际

Posted on 01/07/201910/08/2024 by 四火

作为一名好多年的曼联球迷,在后弗格森时代,第三任教练下课的时间点上,总有很多感慨,也有不少想说的话。英格兰足坛浮浮沉沉,进化了这么多年,那个老四强时代已经过去,那个群雄乱起的时代也接近尾声。这两年看来,可以说强弱集团军已经分明。第一集团属于曼城和利物浦,去年在联赛中不可一世的曼城,在今年也遇到了真正的竞争对手。第二集团包括阿森纳、热刺、切尔西和曼联,其中热刺现在位于第一和第二集团军之间,但是我认为从长远来看,加之阵容厚度考量,它是属于第二集团军的。整体上看,英超在世界的格局中目前是往上走的,这些进入欧冠的豪门也已经闯入淘汰赛了。这个时间点上可以谈的事情似乎很多,我想按照自己的理解来谈谈几个敏感 [……]阅读全文

Continue reading

倔强的程序员

Posted on 12/16/201810/01/2024 by 四火

对于程序员来说,大多数人公司都有技术和管理两条发展路线,通常在同一家公司,管理路线的发展可能性,要相对广阔一些;但是技术路线也有技术路线的好处,比如相对而言更依赖于硬实力,因而工作机会丰富。我相信有不少程序员都和我一样,坚守着技术路线,无论是进还是退,都对管理者的岗位没有什么兴趣。

兴许大家都听到软实力和硬实力的概念。对于一个技术人来说,硬实力大致上可以认为是计算机和软件工程相关的技术能力,1 还是 0,是还是非,会不会算法,懂不懂设计,清清楚楚,明明白白; 而软实力则反过来,听起来挺抽象,挺模糊,比如沟通能力,自我管理能力,但是却扮演者重要的角色,甚至随着职业生涯的发展,它的影响力越来越大 [……]阅读全文

Continue reading

为什么互联网外企在中国总是失败?

Posted on 10/06/201810/02/2024 by 四火

最近在读吴晓波写的《腾讯传》,不少有意思的内容。其中给我印象最深的是讲当年 QQ 和 MSN 大战的一段。可能很多人和我一样,都注意到,互联网行业中,在中国的外企鲜有成功的,多数都是高调进入,灰溜溜地退出。有人把这种现象简单地归因于四个字 “水土不服”,无疑是武断而缺乏思考的。

在书中短短的一节分析本土企业和外企互联网大战的内容中,就看到了当年那些经典的战役。比如 C2C 市场,ebay vs 淘宝;比如 B2C 市场,亚马逊 vs 当当(虽说后来当当的份额也被淘宝商城和京东蚕食得够呛);比如搜索市场,Google vs 百度;再比如打车市场,滴滴 vs Uber;再再比如书中最重头的例子,即时通讯市场,[……]阅读全文

Continue reading

幸运的时代

Posted on 09/30/201810/02/2024 by 四火

差不多四年来第一次回国,感触颇深。中国的发展,尤其是互联网发展就像一个孩子的成长,如果每天都盯着看,没觉得有什么变化。但是如果稍稍离开一段时间,回头就发现巨大的变化。

互联网正在不断融入生活,其中最显著的变化,便是支付。

依然记得 2012 年初我刚到北京的时候,直到 2014 年离开,那些时间基本上还是现金走天下的年代。由于种种原因,老早就兴起的信用卡没有办法流行开来,大家还是习惯于装一兜子钞票,然后在各个不同的地方大票换小票花掉它们。

如今呢?当我结账的时候,被问到 “微信还是支付宝?”,我弱弱地回了一句——“现金”,引来一阵哄笑。足以见得,那么短的时间,互联网已经占领了老百姓的支 [……]阅读全文

Continue reading
  • Previous
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • …
  • 23
  • Next

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Python Spark 互联网 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 程序员 管理 系统设计 缓存 编码 编程范型 英语 西雅图 设计 评审 问题 面试 项目

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Big Data and Machine Learning (5)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • + 1.943624 BTC.NEXT - https://graph.org/Ticket--58146-05-02?hs=9a9c6f8dfe3cdbe0074006e3e640b19b& on 所有文章
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
  • Anonymous on 我裸辞了
  • Dylan on 我裸辞了
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme