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

## 背景 >两年多前的一天(2018年的某天),我们的产品经理突然找到我,说我们的广告业务上线后效果不错,但是需要做敏感词过滤处理,需要接入一个模糊词词典和一个精确词词典。然后我拿到了这两份词典,两份违禁词加起来总量近100w条。 > >这个需求简单来说就是如果用户的查询词中命中了违禁词的话是不能出广告的。如:用户query=怎么去故宫博物院,因为命中了故宫博物院,所以不能出广告。 >最终我合并了这两份词表,并写了一个高效的实现。 > >今天打算就其中的模糊匹配部分单独抽出来讨...阅读全文

Go语言中文网 2020-12-28 11:31:44 go_lets_go

一个20年技术老兵的 2020 年度技术总结

大家好!我是 go-zero 作者 Kevin。充满惊吓的 2020 快要过去了,看到掘金上的技术人年度征文,忍不住文字记录一下艰辛而又充满收获的 2020 ✍️疫情开始春节假期疫情突然升级,我们面临着自身平台的转型升级。作为晓黑板CTO,有两个重点工作:保证大规模使用场景下平台的稳定性保证转型所需的新业务能够快速交付团队压力巨大的同时也感受到了前所未有的战斗热情,养兵千日用兵一时,不经历战与火的洗礼,怎么知道团队的技术能力是否能够经受得住流量洪峰的考验。战斗开始,迅速落实业务团队进行急需功能的...阅读全文

Segmentfault 2021-01-01 16:32:33 kevinwan

【程序源代码】基于GF(Go Frame)的后台管理系统

正文 | 内容01—【概述】基于GF(Go Frame)的后台管理系统 ,完善的权限用户管理,致力于快速高效开发cms系统、督办系统、后续将加入流程审批、工作流引擎、项目管理、挂图作战、数据大屏等功能。02—【技术框架】 开发环境语言:Java 8IDE(JAVA):IDEA / Eclipse安装lombok插件IDE(前端):WebStorm 或者 IDEA依赖管理:Maven数据库:MySQL5.7+ & Oracle 11g & Sqlserver2017缓存:Redis 系统功能 用户...阅读全文

51CTO博客 2020-12-27 19:25:52 mb5fe5608dce902

在kubernetes部署发布go应用程序

随着新的一年即将来临,我们都对2021年会带来些什么感到疑惑。与每年一样,看看那里有什么技术以及学习什么会很有趣。但是在如此广阔的技术海洋中,你如何选择下一步要学习的内容 几乎不管你对编程的兴趣在哪里,Go中都将有一种方法来实现它。就个人而言,我喜欢在学习语言时深入研究项目,并且理想情况下直接研究该项目对学习语言很有帮助。 不过今天不是来谈论如何学习go语言的教程,当然后面也会增加go语言的教程,今天先来分享一下如何在kubernetes部署发布go应用程序,那么对于当前谈论到的云原生技术市场,...阅读全文

51CTO博客 2020-12-26 22:33:09 wx5c1cfd6e22842

在kubernetes部署发布go应用程序

随着新的一年即将来临,我们都对2021年会带来些什么感到疑惑。与每年一样,看看那里有什么技术以及学习什么会很有趣。但是在如此广阔的技术海洋中,你如何选择下一步要学习的内容 几乎不管你对编程的兴趣在哪里,Go中都将有一种方法来实现它。就个人而言,我喜欢在学习语言时深入研究项目,并且理想情况下直接研究该项目对学习语言很有帮助。 不过今天不是来谈论如何学习go语言的教程,当然后面也会增加go语言的教程,今天先来分享一下如何在kubernetes部署发布go应用程序,那么对于当前谈论到的云原生技术市场,...阅读全文

51CTO博客 2020-12-26 22:33:07 wx5c1cfd6e22842

在kubernetes部署发布go应用程序

随着新的一年即将来临,我们都对2021年会带来些什么感到疑惑。与每年一样,看看那里有什么技术以及学习什么会很有趣。但是在如此广阔的技术海洋中,你如何选择下一步要学习的内容 几乎不管你对编程的兴趣在哪里,Go中都将有一种方法来实现它。就个人而言,我喜欢在学习语言时深入研究项目,并且理想情况下直接研究该项目对学习语言很有帮助。 不过今天不是来谈论如何学习go语言的教程,当然后面也会增加go语言的教程,今天先来分享一下如何在kubernetes部署发布go应用程序,那么对于当前谈论到的云原生技术市场,...阅读全文

51CTO博客 2020-12-26 22:32:56 wx5c1cfd6e22842

Go操作Redis实战

目录安装Redis客户端连接redis基本指令Keys():根据正则获取keysType():获取key对应值得类型Del():删除缓存项Exists():检测缓存项是否存在Expire(),ExpireAt():设置有效期TTL(),PTTL():获取有效期DBSize():查看当前数据库key的数量FlushDB():清空当前数据FlushAll():清空所有数据库字符串(string)类型Set():设置SetEX():设置并指定过期时间SetNX():设置并指定过期时间Get():获取G...阅读全文

Segmentfault 2020-12-28 10:32:43 admin006

Golang源码探索(二) 协程的实现原理

Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱,虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的.这篇文章将通过分析golang的源代码来讲解协程的实现原理.这个系列分析的golang源代码是Google官方的实现的1.9.2版本, 不适用于其他版本和gccgo等其他实现,运行环境是Ubuntu 16.04 LTS 64bit.核心概念要理解协程的实现, 首先需要了解go中的三个非常重要的概...阅读全文

Segmentfault 2020-12-29 19:32:38 奈德的代码

golang sync.WaitGroup 源码分析

最近在学习golang源码,学习golang源码是学习golang的非常好的途径。先来记录一波sync包的学习。版本 go1.14.2 darwin/amd64sync.WaitGroup我们一般使用sync.waitGroup 做并发控制,使用方式一般如下func main() { wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go func(index int) { defer wg.Done() fmt.Println...阅读全文

Segmentfault 2020-12-31 21:32:35 云溪小筑

Apache Apisix 网关最新2.1源码构建踩坑指南

笔者系统是 centos 7.8 源码构建, centos 8.x 由于lua 的组件的一些原因, 无法安装, 请使用docker 的方式构建 . 如果组件不确定, 可以先执行( 2. 下载最新的发行版源码包), 执行 make deps 的时候会检查出那些依赖没有安装,可以根据这个安装缺少的组件 1. Apisix 依赖 Apisix 依赖于 Openresty, 和 etcd ( nosql 中间件), 并且还要编译依赖 luarocks(lua 包管理工具). 请保证, 系统已经安装好了上...阅读全文

简书 2020-12-27 21:32:39 山间草夫

1.golang初识

目录结构截图 编写 main.go package main import "fmt" //引入包 import "goclass/testpackage" func main(){ //写法一 /* 关键字 变量名 变量类型 = 变量值*/ var astring ="hello 声明式!" //写法二 /* 变量名 := 变量值*/ b :="hello 隐藏式!" fmt.Println(a) fmt.Println(b) //使用包中变量名 fmt.Println(testpackage...阅读全文

简书 2020-12-27 21:32:38 haodevops

Go Base

https://golang.org/ https://studygolang.com/ Go又称为Golang,是Google的Robert Griesemer、Rob Pike、Ken Thompson开发的一种静态编译型语言,Go语法与C类似,功能具有内存安全、垃圾回收、结构心态、并发计算的编程语言。 Go起源于2007年,并在2009年正式对外发布,其目标是“兼容Python等动态语言的开发速度和C/C++等编译型语言的性能和安全性”。 Go又被称为“C类似语言”或“21世纪的C语言”,...阅读全文

简书 2020-12-27 21:32:38 JunChow520

Go SublimeText

Golang Build CTRL+P打开包管理器输入Package control:install package进入安装包界面 输入Golang build安装包下载安装 选择Preferences > Package Setting > Golang Config > Setting - User设置参数 { "PATH": "D:\\go\\program\\go\\bin", "GOPATH": "D:\\go\\workspace\\bin" } CTRL + SHIFT + P输入...阅读全文

简书 2020-12-27 21:32:38 JunChow520

Go Install

操作系统:Windows10 下载安装 https://studygolang.com/dl 下载解压:下载go1.14.1.windows-amd64.zip解压到D盘,重命名为go,完整路径为D:\go\go。 加入环境变量:将D:\go\go\bin添加到系统环境变量PATH中 检测版本:打开命令行输入go version命令查看当前go的版本信息 $ go version go version go1.14.1 windows/amd64 go命令依赖于环境变量$GOPATH 环境变量 ...阅读全文

简书 2020-12-27 21:32:37 JunChow520

2.golang数据类型

1、bool布尔类型布尔型的值只可以是常量 true 或者 false2、数字类型##有符号整数int8(-128 -> 127)int16(-32768 -> 32767)int32(-2,147,483,648 -> 2,147,483,647)int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)int( 32 位操作系统上64 位,64 位操作系统64 位)##无符号整数uint8(0 -> 255)uint16(0 ...阅读全文

简书 2020-12-27 21:32:37 haodevops

浅谈java内部类

前言说到java内部类,想必大家首先会想到比较常用的“匿名内部类”,但实际上,这只是内部类的其中一种使用方式而已。内部类的使用方式实际上总共包括:成员内部类, 方法局部类,匿名内部类,下面,我就给大家来一一介绍:为什么要使用内部类有的时候你可能有这样一种需求:对一个类(假设它为MyClass.java)创建一个和它相关的类(假设它是Part.java),但因为Part.java和MyClass之间的联系“紧密”且“单一”,导致我们在这种情况下,不希望像下面这样增加一个额外的兄弟类├─MyClas...阅读全文

Segmentfault 2020-12-27 23:32:37 廖111

Golang导出CSV数据并解决数据乱码问题

在日常开发中,针对数据导出,我们可以导出Excel格式,但是如果是针对大数据量的导出,直接导出为Excel格式可能需要占用大量内存,且导出速度很慢。这个时候我们就需要导出为CSV格式。CSV 格式CSV本质上是文本文件,该文件有以下要求:列之间用逗号分隔,行之间用换行分隔单元格如果有逗号、引号之类的字符,该单元格需要使用双引号括起来如果内容包含中文,直接输出可能会乱码实现方式golang 官方有csv的库,可以很容易的实现csv数据的写入。golang实现csv数据写文件func main() ...阅读全文

Segmentfault 2020-12-29 23:32:32 小谷xg

动态sql工具之gendry

前言哈喽,我是asong。今天给大家推荐一个第三方库gendry,这个库是用于辅助操作数据库的Go包。其是基于go-sql-driver/mysql,它提供了一系列的方法来为你调用标准库database/sql中的方法准备参数。对于我这种不喜欢是使用orm框架的选手,真的是爱不释手,即使不使用orm框架,也可以写出动态sql。下面我就带大家看一看这个库怎么使用!github地址:https://github.com/didi/gendry初始化连接既然要使用数据库,那么第一步我们就来进行数据库连...阅读全文

Segmentfault 2020-12-29 14:32:33 asong

与“阿里”的flutter-go双剑合璧

之前针对 Flutter 的学习,给大家推荐过: “阿里为大家学习Flutter操碎了心” https://github.com/alibaba/flutter-go 主要为阿里对外开源的项目,提供了 Flutter 常见的控件的讲解,demo 等。 今天我们的大熟人 GSY又做了一件感觉很有意义的事情,基础控件就像 API一样,更多的时候我们在学习的时候,更偏向于参考具体的实例。 没错,GSY对外开源了一个应用: GSYFlutterDemo 作为简单示例和解决方案 Demo ,它可以给你学习...阅读全文

51CTO博客 2020-12-24 23:52:40 mb5fe1902d5617a