我,又造了个轮子~!
ryHash - 速度飞快的文件哈希工具!支持 CRC / MD5 / SHA / FNV 算法!
本程序使用 Go 语言
+ GoVCL 编写,原生跨平台 GUI 界面,非常小巧!
利用 Go 语言天生的并发优势,极大提升文件哈希计算速度!
最近项目需要用到中文分词,实现词云和情感分析的效果。
因为不是十分重要的业务,第一反应是想着接入外部云厂商的 API 接口:
利用大公司的机器学习模型资源,快速实现需求,我这边可以腾出时间继续做活动项目。
虽然刚过完年,但是感觉事情还是不少——很多东西都没有做好,好多代码还得优化、迁移等等。
看了腾讯云的接口,太贵了。按数据量估计一天要好多人民币!
麻了麻了……还是自己做吧哈哈!
不得不说,Go 结巴
分词非常好用,相比其他库,它速度飞快!
原版是 C++ 实现的,但我的开发语言主要是 Go,作者也给了 Go 的绑定:
https://github.com/yanyiwu/gojieba
照着官方的 Demo,很快就完成了第一版。太强大了!
不过有些句子,分词结果并不符合预期。
比如 我是奥斯卡,速来,带我飞,快点进群
这句话,
速来
被硬生生拆分成两个字,
带我飞
变成 带我
、飞
。
这段时间工作的需求多了不少,文章开始越来越水了。
实在抱歉,时间真的很仓促。
本次分享的是一个函数——根据首尾字符串截取中间的字符串。
虽然这个函数非常简单,但是真的很好用!也很常用!
比如 “我今天真的很高兴” 这句话,要把 今天
截取出来:
常规的方式是 strings.Index
出位置,然后根据字符串(今天)的长度,返回词的内容。
如果是 HTML 呢?比如获取链接地址:
<a href='https://m.baidu.com/'>跳转到百度</a>
这个时候你还想用 strings.Index
吗?
我是不想用的!太麻烦了。而用我的这个函数,就很方便了!
直接 StringCut(s, "href='", "'", false)
就可以轻松拿到链接地址!非常通用,无需关心越界问题。
func StringCut(s, begin, end string, withBegin bool) string {
beginPos := strings.Index(s, begin)
if beginPos == -1 {
return ""
}
s = s[beginPos+len(begin):]
endPos := strings.Index(s, end)
if endPos == -1 {
return ""
}
result := s[:endPos]
if withBegin {
return begin + result
} else {
return result
}
}
附带单元测试,包含了很多例子,如果还有特殊情况,欢迎补充(找 bug 哈哈):
最后更新时间 2023-01-24.
笔者所在公司技术栈为 Golang + PHP,目前部分项目已经逐步转 Go 语言重构,部分 PHP 业务短时间无法用 Go 重写。
相比 Go 语言,互联网公司常见的 Nginx + PHP-FPM 模式,经常会出现性能问题——
特别是我们的活动业务,尽管底层用了鸟哥的 Yaf 框架,
但由于业务逻辑繁重,即使框架层面上完全零损耗,常常支撑不了流量高峰。
一旦某个时间段开启活动,虚拟机的扩容真的非常痛苦。
SRE、开发、QA 三方经常需要因为某个运营活动的进行,提前压测预估容量。
目前活动业务已经逐步用 Go 语言改造,此处不具体展开,防止跑题哈哈。
正因为 PHP 虚拟机模式,每次扩容需要流量剔除、克隆、操作负载均衡、验证流量等等,
推进 PHP 容器化就显得格外重要。
公司在去年年中,已经开始进行 PHP 容器化,不过由于项目优先级以及人力原因,进度较为迟缓。
nginx 发生了 502,很多时候是后端,也就是 php-fpm 不在工作。
我们的 PHP 业务的 Pod,由以下 5 个容器组成:
Go 自带接口性能分析工具 pprof,较为常用的有以下 4 种分析:
接入方式: