行如风 Blog

我干了什么 究竟拿了时间换了什么

读<<高效能阅读>>有感

本文作者:刘代明,现在奇虎360搜索技术部任web服务端技术专家职位。 祝大家阅读愉快。 前言 每当我拿起书本时,总有一个习惯:强迫自己从前往后,从头读到尾。 买了书后,迫不及待立下壮志:一定要读完这本书。但最终,由于这个习惯,让我很少看完一本书(当然小说除外:))。 最近看了《高效能阅读》,遂有此篇。 内容 读书分几个阶段 1.不要畏惧读书。 2.多方面的...

httprouter源码阅读

本文作者:刘代明,现在奇虎360搜索技术部任web服务端技术专家职位。 祝大家阅读愉快。 前言 在go web开发中,很多时候会选用一款web框架,随着项目功能增加,接口也越来越多,一款好的路由框架能很方便的帮助我们管理与维护繁多的接口地址。 抽空看了下httprouter的源码(gin框架内置了定制的httprouter),代码量很少(去掉空白和注释也就600行左右),本次就...

go bounds check(边界检测)

本文作者:刘代明,现在奇虎360搜索技术部任web服务端技术专家职位。 祝大家阅读愉快。 前言 我们在阅读go源码时,很多地方在操作数组或切片时,会有bounds check的注释, 比如go map在对tophash指定索引赋值(go map的源码阅读见 go map源码阅读及与php map实现对比这篇文章): 1 2 3 dst.b.tophash[dst.i&...

go map源码阅读及与php map实现对比

本文作者:刘代明(常用网名:行如风,常用游戏名:学长的棉被),一个文艺青年(纳尼?青年?是的,你没看错:世界卫生组织(2020年)对青年的定义:18-65周岁[来自百度百科])。现在奇虎360搜索技术部任web服务端技术专家职位。 本文为作者原创,祝大家阅读愉快。 前言 之前在openresty协程调度对比go协程调度文章中分析了go程序启动过程(从go程序开始执行到用户的mai...

boltdb源码阅读

本文作者:刘代明(常用网名:行如风,常用游戏名:学长的棉被),一个文艺青年(纳尼?青年?是的,你没看错:世界卫生组织(2020年)对青年的定义:18-65周岁[来自百度百科])。现在奇虎360搜索技术部任web服务端技术专家职位。 本文为作者原创,祝大家阅读愉快。 前言 最近抽时间看了boltdb的源码,代码量不大(大概4000行左右),而且支持事务,结构也很清晰,由于比较稳定,...

Openresty协程调度对比Go协程调度

本文作者:刘代明(常用网名:行如风,常用游戏名:学长的棉被),一个文艺青年(纳尼?青年?是的,你没看错:世界卫生组织(2020年)对青年的定义:18-65周岁[来自百度百科])。现在奇虎360搜索技术部任web服务端技术专家职位。 本文为作者原创,祝大家阅读愉快。 在web编程领域,Openresty与Go均有十分优秀的处理能力,在面对高并发的web编程,两者一般都是首选的技术方案...

从一个模糊词查询需求的处理方案讨论到一种极速匹配方案的实现

本文作者:刘代明(常用网名:行如风,常用游戏名:学长的棉被),一个文艺青年(纳尼?青年?是的,你没看错:世界卫生组织(2020年)对青年的定义:18-65周岁[来自百度百科])。现在奇虎360搜索技术部任web服务端技术专家职位。 本文为作者原创,祝大家阅读愉快。 背景 某天,我们的产品经理突然找到我,说我们的广告业务上线后效果不错,但是需要做敏感词过滤处理,需要接入一个模...

从MongoID的生成讨论分布式唯一ID生成方案

背景 MongoDB,想必大家都使用过,在数据落盘后,查询该条数据时,会发现其会自动生成一条”_id”,如: 1 2 3 db.test.insert({"name":"tom"}) 查询结果: { "_id" : ObjectId("5fd049327fbb28868f4660a5"), "name" : "tom" } MongoID作为主键索引,即使是集群...

记一次cpu 100%问题排查

背景 服务器用的Openresty,代码用Lua+Php编写 处理 登录到机器,发现nginx一个worker进程出现了cpu 100%的情况: 使用pstack 多次查看该worker进程,也都是同样结果。 看来是代码出现了热循环,接下来要做的就是定位到热循环 的地方。 该接口除了使用lua外,还有c的扩展。 所以想着使用采样工具并生成火焰图来定位问题。这里使用春...

git push避免每次输入密码

1 2 在git push时每次都要输入用户名和密码是一件很痛苦的事 解决方法如下: 1.git bash进入当前项目(windows机在当前项目中点击右键->选择git bash here打开git bash) 2.在git bash中输入: 1 git config credential.helper store 3.git push到远程仓库时,输入正确用户...