自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

果冻虾仁

公众号:编程往事

  • 博客(210)
  • 资源 (9)
  • 收藏
  • 关注

原创 brpc中的协程bthread源码剖析(一):Work Stealing以及任务的执行与切换

bthread是协程吗?如果你使用过brpc,那么对bthread应该并不陌生。毫不夸张地说,brpc的精华全在bthread上了。bthread可以理解为“协程”,尽管官方文档的FAQ中,并不称之为协程(见:apache/incubator-brpc)。若说到pthread大家都不陌生,是POSIX标准中定义的一套线程模型。应用于Unix Like系统,在Linux上pthread API的具体实现是NPTL库实现的。在Linux系统上,其实没有真正的线程,其采用的是LWP(轻量级进程)实现的线程

2021-02-15 10:14:46 2460 1

原创 为什么我说C/C++程序员都要阅读Redis源码之:通过Redis学习事件驱动设计

0. 为什么我说C/C++程序员都要阅读Redis源码主要原因就是『简洁』。如果你用源码编译过Redis,你会发现十分轻快,一步到位。其他语言的开发者可能不会了解这种痛,作为C/C++程序员,如果你源码编译安装过Nginx/Grpc/Thrift/Boost等开源产品,你会发现有很多依赖,而依赖本身又有依赖,十分痛苦。通常半天一天就耗进去了。由衷地羡慕 npm/maven/pip/compos...

2019-03-30 22:36:25 3783 3

原创 2018,人生是一条蛇,它咬着自己的尾巴

1. Ouroboros古埃及有一个图腾:一条咬住自己的尾巴的蛇。后来这个图腾广泛流传,渗透到印度教,古希腊,也出现在北欧神话中。其名为:Ouroboros。象征着宇宙循环,无始无终,开始即是结束,结束亦是开始。其实生活也常常是这样,任凭时间推移,生活却总在某个地方回归原点。2. 风雨与屋檐2018年4月在公司内网的论坛上,看到一个帖子:有人问:“什么时候你感到青春已逝?” 回答...

2018-12-31 12:59:56 5796 54

原创 C++ STL容器如何解决线程安全的问题?

众所周知,STL容器不是线程安全的。对于vector,即使写方(生产者)是单线程写入,但是并发读的时候,由于潜在的内存重新申请和对象复制问题,会导致读方(消费者)的迭代器失效。实际表现也就是招致了core dump。另外一种情况,如果是多个写方,并发的push_back(),也会导致core dump。解法一:加锁是一种解决方案,但是加std::mutex互斥锁确实性能较差。对于多读少写的场景可以用读写锁(也叫共享独占锁),来缓解。C++17引入了std::shared_mutex 。更多锁的种类可

2021-10-16 15:44:59 3690

原创 如何理解互斥锁、条件锁、读写锁以及自旋锁?

锁是一个常见的同步概念,我们都听说过加锁(lock)或者解锁(unlock),当然学术一点地说法是获取(acquire)和释放(release)。恰好pthread包含这几种锁的API,而C++11只包含其中的部分。接下来我将通过pthread的API来展开回答。mutex(互斥量)mutex(mutual exclusive)即互斥量(互斥体)。也便是常说的互斥锁。尽管名称不含lock,但是称之为锁,也是没有太大问题的。mutex无疑是最常见的多线程同步方式。其思想简单粗暴,多线程共享一

2021-10-16 15:42:35 968

原创 CPU朝向多核发展,从某种程度上来说是一种“无奈之举”

CPU朝向多核发展,不停扩展核数,从某种程度上来说是一种“无奈之举”。免费的午餐结束了2007年,C++大牛Herb Sutter(Effective C++系列丛书作者)发表了文章《The Free Lunch Is Over》。直译就是“免费的午餐结束了”。【原文】The Free Lunch Is Over【翻译】The Free Lunch Is Over主要的处理器设计生产商,从Intel和AMD到SPARC和PowerPC,已经几乎穷尽了所有的传统方法来提高CPU性能。

2021-10-16 15:38:42 465

原创 从旁观者到committer,我与brpc的故事

Apache是知名的开源软件基金会,旗下管理着众多流行的开源项目。如果你有给开源项目贡献过代码,那么你就可以称得上是一名开源项目的contributor。而Apache committer则更进一步,这个是Apache基金会官方认可的头衔,表达了对于某个项目的活跃贡献者的一种认可。brpc开源后被捐献给了Apache基金会孵化,所以brpc也是Apache所管理的众多开源项目中的一员。今年9月,通过brpc的PPMC的票选,我成为了brpc项目的新晋committer,下面我来谈谈我和brpc的故事。

2021-10-12 23:41:10 600

原创 我在鹅厂卖公仔!

看到这个题目,你一定会以为这是比喻的说法,用腾讯卖公仔指代是我在腾讯工作写代码的经历。其实不是,这不是比喻,我是真的卖过公仔!!!缘起:刀马旦!2016年末,鹅厂年会蜂拥而至,之所以说蜂拥。是因为鹅厂年会真的不只一个。除了公司级别的年会和圣诞晚会(现改名新年晚会)外。BG、部门、中心不同层级的行政单位也可能会举办大大小小的年会。那一年我们中心的年会设置了礼物交换的环节。每个人要事先准备一份...

2020-03-23 00:55:40 2050 1

原创 面经笔经:编程判断栈增长方向

面试官:某非X86的机器,栈增长方向未知,编程实现判断其栈增长方向。补充:连续定义两个变量,可能被编译器优化,重新调整代码对应指令的顺序。我们都知道x86体系结构,栈的增长方式是从高到低的。但这不意味着所有机器都是如此,这就是这道题目能站稳脚跟的基础。另外就是根据补充条件,我们不能通过先后定义两个变量,然后再输出它们的地址来判断。一种正确的解...

2019-08-24 23:50:41 521

原创 Faiss: 入门导读

引言Faiss是Facebook于2017年开源的一个相似度检索工具。相似度检索是啥?搜索、广告、推荐都需要用到相似度的检索。因为无论是网页、广告抑或推荐博文一定要符合你...

2019-08-17 14:51:18 1273

原创 前卡与落地页

搜索引擎、广告系统以及其他推荐与内容产品中其实都有前卡和落地页的概念。前卡比如在谷歌中搜索『北美旅游』,搜索结果的每条记录展示出来的区域就称作『前卡』。当然前卡是多内的叫...

2019-08-11 15:00:53 666

原创 《推荐系统实践》笔记:用户行为数据与日志

推荐系统大多基于用户行为数据分析的,而记录用户行为数据最简单的形式就是日志。其实不止是推荐系统,搜索引擎和广告系统都有类似的概念。日志有如下几种:原始日志用户在一个网站上的各种行为会产生各种原始日志(raw log)。展示日志搜索引擎和搜索广告系统一次检索(一次PV)都会记录一个展示日志(impression log)。记录了查询和返回结果。点击日志...

2019-08-10 13:22:33 1446 2

原创 【答网友问】实习经历

Q:你好 看了你的一些回答和博客,感觉大神很厉害,后台开发方面了解也很多。我是校招拿到的鹅厂offer,实习生的时候也去了但是没过。我是像有个问题里面试官说的那种对c++...

2019-08-06 01:01:25 429

原创 你只看到头条高调做搜索,没看到微信搜索框也一直在悄悄进化

声明:本文仅代表个人观点!7月31日,今日头条的一篇文章引爆网络,高调宣布布局全网搜索,一时间媒体都纷纷将此视作头条吹响了进攻百度战略腹地的号角。在众说纷纭头条能否战胜百...

2019-08-04 23:26:12 805

原创 C/C++输出空字符串,UB UB UB UB UB UB…

看网上很多讲一些C/C++的问题回答或者文章,经常会遇到UB、UB、UB、UB……UB就是undefined behavior。也就是语言的官方标准未定义的地方,在不同系统,编译器上行为可能不一致。没错,我们当然不能把UB的效果,当成语言标准。但我们也不能因为某些语法是UB就拒绝学习和探究,毕竟我们学习编程语言都不是抱着《XX语言官方标准》的手册来学的。另外呢,我们工作之中通常也是在特定的系统...

2019-08-03 18:21:26 2817

原创 《这就是搜索引擎》笔记:检索质量评价标准

召回率和准确率召回率(recall) 和 准确率(Precision)是最常见的搜索引擎质量的评价标准,在推荐系统中也有这两个评估指标。召回率(recall)准确率(Precision)P@10指标评估在搜索结果中排名最靠前的头10个文档中有多大比例是相关的。MAP指标MAP(Mean Average Precisi...

2019-08-03 15:23:52 1482 1

原创 awk一行码:筛选某列指定值的数据

awk其实不只是一个工具、一个命令,它其实也是一种『编程语言』。场景1:一个TAB分割的数据文件,假设名为data.txt,第二列为用户id。从中筛选用户id为123的所...

2019-08-02 00:33:47 23924 2

原创 Trick C++: 宏函数与模板类

这是一个小trick。虽然不难理解,但是经常会忘记,导致代码返工。看这个代码:#include <iostream> #include &a...

2019-07-22 06:00:00 1456

原创 How To Be Pythonic:一行for

1行代码提取dict中的key和value,组成list:conf_dict={'host':'127.0.0.1','port':3600,'user':'root','pswd':123456} key_list=[keyforkeyinconf_dict] value_list=[conf_dict[key]forkeyincon...

2019-07-20 22:55:18 310

原创 《这就是搜索引擎》一元编码勘误,兼谈Elias Gamma系列算法

《这就是搜索引擎》整体来看还是适合作为搜索引擎知识的入门书的。但是有些章节的描述错误,实在有伤大雅!书籍信息:《这就是搜索引擎》作者:张俊林 2012年1月第1版一元编码第4章『索引压缩』的4.2节提到了一元编码(unary code)和二进制编码(binary code)。首先关于一元编码的这个插图便是错的。其实一元编码,看英文就知道,unary code可以理解为『一进制编...

2019-04-22 00:13:12 1102 2

原创 高山仰之可极,谈半同步/半异步网络并发模型

0. 仰之弥高2015年,在腾讯暑期实习期间,leader给我布置的一个任务是整理分析网络模型。虽然也有正常工作要做,但这个任务贯穿了整个实习期。后来实习结束的总结PPT上,这部分内容占到了一半篇幅,我从C10K问题引入,讲了很多:从fork-exec的多进程到进程池;从多线程再到IO多路复用;从accept的惊群到pthread_cond_wait的惊群。现在回想,这些总结还是偏初级,后...

2019-04-17 21:59:00 780

原创 《这就是搜索引擎》笔记:网页作弊

3月10日:金庸诞辰要首先牢牢记住:作弊的目的是出于商业利益驱使!主要作弊类型1. 内容作弊 增加目标作弊词的词频 增加主题无关的热门query词引流 关键位置插入作弊词<b> <h> <strong>等也是搜索引擎重要的排序依据 2. 链接作弊 链接农场(Link Farm):构建大量相互链接的...

2019-04-01 00:00:00 344

原创 《这就是搜索引擎》笔记:PageRank

搜索引擎在对结果进行排序的时候主要参考两点: 网页内容与query的相关性 网页的重要性 而计算网页的重要性主要就是通过『链接分析』方法。最著名的两个链接分析方法是:PageRank 和 HITS。Web图:把网页视作节点,如果网页包含另一个网页的link,则视作到另一个节点存在连接。那么网页之间就可以抽象为一个 有向图!称之为Web 图。 ...

2019-03-24 22:53:41 387

原创 《这就是搜索引擎》笔记:索引更新

索引的建立索引建立完不是一成不变的,因为文档会新增,也会删除。所以要建立动态索引。原先内存中有词表,磁盘有对应倒排列表。再从内存中加两个词表,一个表示新增,一个表示删除。query的时候,就 合并原有词表个表示新增的词表,再过滤掉删除词表。如果一个文档被修改,也先记录一个原文档删除,再插入一个记录到新增词表。索引的更新常用索引更新策略有4种: 完全...

2019-03-17 06:00:00 231

原创 《这就是搜索引擎》笔记:索引基础

搜索引擎索引其实就是实现单词——文档矩阵的具体数据结构。倒排索引单词,文档都化会成ID记录到词典单词词典可以用拉链法的哈希,或者B树B+树存储中文单词之间由于无分隔符,需要先进行切词。每个单词后面会有一个倒排列表,记录它出现过的文档。但实际存储不一一记录文档ID,而是只记录第一个ID,后面记录两两相邻的gap值,节省空间。由于建立索引在内...

2019-03-16 16:47:44 201

原创 那些年,我们追过的RPC

1974年冬,互联网大师 Jon Postel发表了RFC674:“Procedure Call Protocol Documents,Version 2”,尝试定义一种...

2019-03-14 08:00:00 231

原创 重整山河待后生:Web Services

Web Services,一词有广义和狭义之分。狭义而言,其表示一种特定的,基于SOAP协议Web服务技术(SOAP Web Services)。广义而言,泛指各种类型的...

2019-03-12 23:59:00 176

原创 天下风云出我辈:Servlet

让我们坐上时光机,回到那个年代——上个世纪90年代的中叶。C语言稳坐江湖第一把交椅,C++也羽翼渐丰。彼时在圣克拉拉的某个咖啡馆里出现了一位其貌不扬的少年。谁都不会想到这...

2019-03-06 23:59:10 150

原创 江湖儿女:WSGI

江湖外传互联网飞速发展,在web开发的江湖中,除了武林盟主Java以外,许多脚本语言都参与进来分一杯羹。花开花落,花落花开,无数少年侠士在Web江湖演绎着自己的传说,不不...

2019-03-04 00:05:39 155

原创 万剑归宗:CGI

遥想当初腾讯实习那年,了解到了CGI,这种我以为只出现在教科书中,早就被扫进历史尘埃里的技术竟然在鹅厂还盛行着。一时纠结:我本想来大厂学习新技术,没想到却来这里考古。不过...

2019-03-01 00:00:00 253

原创 何谓后台

我们整天说着前端,客户端,后台。到底什么才是后台?曾经和某网友聊天:你已添加了XXX,现在可以开始聊天了。我:你好XXX:你也好我:你是做什么的呀?XXX:我在酒吧上班,...

2019-02-25 21:42:59 210

原创 由C++书单说开来

心血来潮,整理了一下学习C++应该读的书单,当然我并没有都读过, 权当作一个ToDo List吧。书单 本书单暂不包含C语言相关书目,当然了想学好C++,C语言的经典图书也应该读一读。 书名 作者 备注 The C++ Programing Language Bjarne Stroustrup C++之父的TCPL C++ Primer Plus Stephen

2018-07-28 01:37:11 1039

原创 UNIX与C诞生记

1966年,在贝尔实验室工作的肯·汤普森(Ken Thompson)参与了一个项目,这个项目是由贝尔实验室、麻省理工和通用电气的合作项目:研究新一代的多用户分时操作系统—...

2018-06-09 01:25:05 240

原创 大四这一年

(本文曾首发于简书。这里作为我博客分类“编程往事”的最后一篇博文。“编程往事”是我从大一的时候开始写的系列,记录了我学习、生活的心路历程,见证了我整个大学的生涯,记叙了我从菜鸟到如今的诸多往事。如今我已经毕业,走上工作岗位,开启另一段旅程)0x00“吃完饭,去外面散散步吧。”说话人是HomKai,与我同在腾讯实习。2015年,深圳八月的傍晚。腾讯大厦周边...

2016-08-06 13:47:11 3606 17

原创 写给立志做码农的大学生

先简单介绍一下我自己,我是一所普通大学的本科生,大学录取时的专业是非计算机系的,在大一下学期意识到自己喜欢敲代码以后,就提交了转专业申请。大二起开始在计算机系学习。大三时(2015年4月)拿到了腾讯暑期实习的offer,暑期实习的过程中获得留用offer,大四没跑秋招,几乎就在学校浪荡了一年。我不是大牛,不是来传播鸡汤或成功学的,只是最近有感于学弟学妹们在学习以及规划方面严重不足,觉得...

2016-05-07 14:41:29 11713 35

原创 拾遗与填坑《深度探索C++对象模型》3.3节

3章3节 Data Member的存取背景介绍本节篇幅较短核心内容讲的就是,如下代码的存取效率问题:

2016-04-14 11:40:59 3400

原创 拾遗与填坑《深度探索C++对象模型》3.2节

3章2节 Data Member的布局背景介绍访问区(access section)即是指private、public、protected下面的代码区域。当然在类中同一种访问区可以多次声明,视作多个访问区,如:

2016-04-13 19:20:55 2844

原创 解决HTML外部引用CSS文件不生效问题

作为一个前端小白,鼓捣了几天前端。。今天突然发现我深信不疑的东西,竟然出现了问题。。就比如我在css目录下面写了一个css样式文档:style.css。然后再我的html文件里面去引入这个外部css:在浏览器一刷新。。哇,kao。竟然没反应,不起作用。。我检查了好几遍这个路径确定没有问题,打开chrome的F12

2016-03-20 12:45:06 60676 5

原创 从0到1:制作你的苹果podcast(播客)

注意:本文不是教你如何录音、如何做后期的文章。而是聚焦于如何搭建播客(podcast)需要的环境。 本文科普类文章,干货少,湿货多。先选一个主机吧        这步的初衷和你自己建站是一样的。你可以购买一个独立的云主机,也可以找个VPS之类的。我用的阿里云,因为我是学生(目前),阿里云有学生优惠,每月不到10块钱。学生朋友们,趁着你们还是学生,抓紧机会(非软文。。)不是学生也没关系,那您得选择就

2016-03-15 23:00:14 17445

原创 leetcode 136. Single Number

就是说一堆数字序列,基本上每个数字都出现了两次,只有一个数字出现了一次。请找出这个数字。并且不分配额外内存。题目的tag是Hash table、Bit manipulate。这题并不难。。水的很,虽然题目提示了用hash和位操作来解。。但本着练习STL的目的,我还是另辟蹊径,使用了STL的accumulate算法来解题。 先把序列排序(NlogN),然后相等的元素就相邻了。这时因为正负数可以互相抵消。只要我们采取A-B+C-D+E-F……这种加法,最后没有被抵消掉的肯定就是那个落单的元素了。

2016-01-31 16:37:14 2933 1

更新centos的mysql安装源

默认centos使用yum install安装的mysql版本很低,需要更新远程mysql仓库 适用于RedHat7/Centos7/Oracle Linux7

2014-11-01

Qt计算器项目开发源码

这是本人Qt计算器开发系列博文的工程源码。欢迎大家下载,免积分。 以下是关于这个开发技术的相关博文,请参考。 (一)后缀表达式实现完整数学表达式的计算 http://blog.csdn.net/guodongxiaren/article/details/24648839 (二)信号槽实现数学表达式合法性检查 http://blog.csdn.net/guodongxiaren/article/details/26006201 (三)运行效果及项目总结 http://blog.csdn.net/guodongxiaren/article/details/26046543

2014-05-17

Qt5学习资料

QT5入门指导书,只有一百多页,短小精悍。适合初学者,更适合qt4到qt5的过度者。

2014-02-10

正则表达式测试器

用于测试您写的正则表达式能否匹配出您的目的串。

2014-01-25

入门Java网络编程

java是伴随网络而兴起的语言,学习java的网络编程尤为重要。国内讲解java网络编程的优秀书籍不多。这本是国外的优秀书籍,讲了各种网络编程,以及io,泛型,集合等概念。最后还讲解了网络编程的一些成熟框架。

2013-12-19

python3.1入门指南

python3.x学习资料,帮你从python2.x过渡到3.x

2013-05-02

just for fun乐者为王

linux之父的自传。在网上找了好久才找到的。所以一定要共享出来。励志书籍吧。总之,兴趣就是最好的老师

2013-04-23

poj编程指导

北大在线评判系统,推荐用书。系统介绍ACM各种算法。并结合poj真题题解。

2013-03-28

空空如也

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

TA关注的人

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