随笔分类 - Golang
摘要:1:推荐系统简易架构图 2:推荐引擎流程图 Mixer系统的用户推荐就是按照上面流程实现,接下来分别介绍各个功能 3:索引内容 1:索引目的是提供高效查询 索引内容就是将内容生产索引文件,目的是提高查询速度,不可能每个请求过来都把所有的数据查出来,然后过滤、计算特征、排序、最后将排在前面的数据推给用
阅读全文
摘要:一:需要选主的场景 1:服务有多台机器,取其中一台去执行任务。多台机器同时执行会出问题,如将数据库中状态为失败的记录取出来重新执行,如果多台机器同时执行,会导致一个失败的任务被多台机器同时执行。 2:服务有多台机器,选其中一台作为主,主负责任务的分发,大家一起消费并处理任务。还是将数据库中状态为失败
阅读全文
摘要:golang本身对常用集合的封装还是比较少的,主要有数组(切片)、双向链表、堆等。在工作中可能用到其他常用的集合,于是我自己对常用的集合进行了封装,并对原理做了简单介绍,代码库地址:https://github.com/chentaihan/container,代码都是经过测试的,欢迎下载使用,反馈
阅读全文
摘要:删除单链表中值等于XXX的所有元素 不经意间看到了一个不同寻常的实现方法,觉得挺有意思,于是自己实现了一下,代码真的是简单明了跑得还贼快! 好,现在先在脑海中想想,你会怎么实现?这么简单,5秒钟后,你想到了解决方案,于是你决定验证你的思路,请继续往下看 定义链表节点结构如下: type ListNo
阅读全文
摘要:nsq的源码比较简单,值得一读,特别是golang开发人员,下面重点介绍nsqd,nsqd是nsq的核心,其他的都是辅助工具,看完这篇文章希望你能对消息队列的原理和实现有一定的了解。 nsqd是一个守护进程,负责接收,排队,投递消息给客户端,并不保证消息的严格顺序,nsqd默认监听一个tcp端口 (
阅读全文
摘要:map结构 整体为一个数组,数组每个元素可以理解成一个槽,槽是一个链表结构,槽的每个节点可存8个元素,搞清楚了map的结构,想想对应的增删改查操作也不是那么难 1:槽大小计算&hash算法 我们可以简单的理解成:槽大小为1<<N,每个元素计算出一个hash值hashCode,hash到这些槽中,ha
阅读全文
摘要:一:原子操作CAS(compare-and-swap) 原子操作分三步:读取addr的值,和old进行比较,如果相等,则将new赋值给*addr,他能保证这三步一起执行完成,叫原子操作也就是说它不能再分了,当有一个CPU在访问这块内容addr时,其他CPU就不能访问 func CompareAndS
阅读全文
摘要:1.channel数据结构 type hchan struct { qcount uint // 缓冲区中已有元素个数 dataqsiz uint //循环队列容量大小 buf unsafe.Pointer // 缓冲区指针 elemsize uint16 //元素大小 closed uint32
阅读全文
摘要:go并发调度模型如上图 M指的是Machine,一个M直接关联了一个线程。 P指的是Processor,代表了M所需的上下文环境,也是处理用户级代码逻辑的处理器。 G指的是Goroutine,其实本质上也是一种轻量级的线程。 ⾸先是 Processor(简称 P),其作⽤类似 CPU 核,⽤来控制可
阅读全文
摘要:我为什么吃撑了要实现go的aes-cbc-256加密解密功能? 之前的项目是用php实现的,现在准备用go重构,需要用到这个功能,这么常用的功能上网一搜一大把现成例子,于是基于go现有api分分钟实现一对加密解密函数,你想得没错,一跑就失败,好了不废话了,go的aes-cbc实现由两个限制 1:面临
阅读全文
摘要:每次要用PHP的某个功能的时候,都要去查一下,于是决定将PHP所有类和函数都整理出来,加上注释 大致实现 github地址:https://github.com/chentaihan/phpNote a 0 acos 反余弦 1 acosh 反双曲余弦 2 addcslashes 以 C 语言风格使
阅读全文