Arganzheng's Blog

stay hungry, stay foolish

Git学习笔记

公司已经全面切换Git,我们的新项目刚好作为组内的第一个尝鲜项目。其实也用过Github一段时间了,对Git也不能说是完全小白。只是以前基本都是一个人作战,现在是多个人合作,刚好趁这个机会总结一下,让团队其他同事可以通过这篇文章快速的切换到Git来。 Git基础 1.1 Git配置 Git有三个级别的配置文件,分别是: 版本库级别的配置文件: 工程目录下, 使用git config -e打开编辑 全局配置文件: 用户主目录下, 使用git config -e --global打开编辑 系统级配置文件: /etc目录下,使用git config -e --system打开编辑 命令git config可以用于读取和更...

搜索引擎中的相关性和排序截断

一般来说,检索需要解决两个问题: 召回:matching 排序和截断: ranking 召回就是使用经典的倒排索引,从query词检索出相关的文档,文档是否匹配query词。但是这些文档哪些在前哪些在后呢?这就涉及到排序和截断的问题了,这是一个ranking问题,这往往是搜索引擎最具有差异性,也是最核心的部分(比如Google的PageRank算法成就了伟大的谷歌公司)。 常见的ranking scheme有: tf-idf: 最经典的ranking算法 Okapi BM25: tf-idf的变种 PageRank: 大名鼎鼎的Google Ranking算法 这里我们只介绍最经典的TF-IDF模式。 TF-IDF TF: ...

protobuf中的反射

像Python,javascript这样的动态脚本语言具有很强的反射能力,即使是java这类的静态类型语言,也提供了一定程度的反射能力,而C/C++这样的纯静态语言没有运行时的类型信息,但是Protobuf本身具有很强的反射(reflection)功能,可以根据 type name 创建具体类型的 Message 对象,也能够动态获取和设置某个属性。 背景知识 protobuf对于每个元素都有一个相应的descriptor,这个descriptor包含该元素的所有元信息,非常类似于Spring中的Bean Definition。下面是各个Descriptor(元数据描述类)的类图: FileDescriptor: 对一个proto文件的描述,它包含文...

巧用protobuf的自定义options

知识图谱在线系统的schema除了定义每个实体的属性之外,还有一个信息需要策略同学告诉我们——就是哪些字段需要索引,以及索引的方式,这点非常类似于ElasticSearch的Mapping: PUT /my_index { "mappings": { "my_type": { "properties": { "status_code": { "type": "string", "index": "not_analyzed" } } } } } mapping针对每个字段,有个index属性,可以指定索引的方式: no: Do not ...

Protobuf Buffer的缺陷

最近在搞知识图谱,知识图谱的模型比较统一——就是实体和关系。其中实体和关系可以挂载关联的属性,属性以key-value键值对存在。称之为Property Graph Model。 属性: Property: key->value 实体 Entity: (id) => (type, property*) 其中: type决定该实体的schema,如Person, Product,一个实体必须且只能挂在一个type下面。type这里相当于行业。 关系: SPO三元组,附加可选的k-v属性对 Assoc: (id1, atype, id2) => (time,...

记一个诡异的C++问题

昨天联通一直遇到一个诡异的问题:服务某个接口一接受到请求就core dump了。用gdb查看core文件,也没有看出个所以然: 最后实在没有办法,只能采用排除法,把可疑的代码逐行注释掉,检查是不是还有core。因为是一跑就core,所以其实还是很快就定位到问题代码: class StrategyData { public: StrategyData(); inline std::string get_search_id() {return _search_id;} inline std::string set_search_id(const std::string& search_id){ _search_id = searc...

互联网广告系统学习笔记

广告变现方式 计费方式 结算方式 适用场景 CPT 品牌广告 CPM 有受众选择需求的品牌广告 CPC 竞价广告 CPS/CPA/ROI 效果类广告联盟/DSP 一些指标 指标 含义 备注 cpm 每千次展检索收费 检索端的核心KPI ctr 点击率 ...

Kerberos学习笔记

互联网的开放环境中是一个危险的地方,用户可以被模仿,Server也可以被伪造,而且在通信过程中还时刻存在数据被窃听,篡改和重放。在这样的环境下如何安全可靠的识别用户身份,如何提供业务访问授权? Kerberos,是一个基于票据的计算机网络认证协议。它的认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 为一种可信任的认证服务,是通过传统的密码技术执行认证服务的。 关键词说明 在登录鉴权体系中,票据(Ticket)是串联整个登录流程,验证用户身份,以及确保通信信道安全的最为重要的部分。顾名思义,票据与我...

使用logstash收集nginx访问日志

首先安装logstash,这个非常简单,不赘述。建议把所有插件都安装上,省心。 然后要配置一下logstash for nginx。logstash基本原理:input => filter => output。在我们这里input就是nginx的access日志,output就是ElasticSearch。filter则是用来解析和过滤日志用。一般我们要把message结构化再存储,方便后面的搜索和统计。因此需要对message进行解析。logstash是使用grok过滤器,使用match正则表达式解析。要根据自己的log_format来定制。 比如这里我们的log_format配置是: log_format main '$http_h...

Kafka实战

背景 最近要把原来在BB做的那套集中式日志监控系统迁移到Mobojoy这边,原来的实现方案是: Log Agent => Log Server => ElasticSearch => Kibana,其中Log Agent和Log Server之间走的是Thrift RPC,自己实现了一个简单的负载均衡(WRB)。 原来的方案其实运行的挺好的,异步化Agent对应用性能基本没有影响。支持我们这个每天几千万PV的应用一点压力都没有。不够有个缺点就是如果错误日志暴增,Log Server这块处理不过来,会导致消息丢失。当然我们量级没有达到这个程度,而且也是可以通过引入队列缓冲一下处理。不过现在综合考虑,其实直接使用消息队列会更简单。PRC,负载均衡,...

×