人员、任务、进度、工时、周期、依赖关系 一目了然。无论项目大小、简单复杂都能轻松管理
前些天遇到一个「打包下载」的需求,在调研过程中走了一些弯路,本文记录一下。
比如说某网站有一个文件列表,用户点哪个就可以下载哪个,如果用户想下载多个,无非就是多点几次而已。于是需求来了:当用户想下载多个文件的时候,可以通过一次点击完成打包下载操作。
听起来似乎并不复杂,服务端可以把用户想要下载的文件打包成一个新文件,然后用户点一次就可以下载了,但是这样做有以下几个缺点:
浪费了时间,多了创建新文件的流程。
浪费了空间,同样的文件被多次存储。
用户体验差,下载必须要等到新文
最近我在处理从 pdf 转换到 docx 的时候,总会出现丢字问题,让我一度以为是字体的原因,结果方正、思源、文泉驿换了个遍也没搞定,最终发现是一个 unicode 问题。
我用 javascript 构造了一个测试用例,你可以在 chrome 控制台里运行它:
console.log(网飞 == ⽹⻜) // false
明明两个字符串都是「网飞」,但是却不一样!通常此类问题多半是内容中混入了某些不可见字符导致的问题,不过本例却是个例外。如果你把上面代码复制到一个 Wor
当医生遇到疑难杂症时,那么可以上 X 光机,有没有病?病在哪里?一照便知!当程序员遇到疑难杂症时,那么多半会查日志,不过日志的位置都是预埋的,可故障的位置却总是随机的,很多时候当我们查到关键的地方时却总是发现没有日志,此时就无能为力了,如果改代码加日志重新发布的话,那么故障往往就不能稳定复现了。回想医生的例子,他们可没有给病人加日志,可为什么他们能找到问题的,因为他们有 X 光机,所以对程序员来说,我们也需要有我们的 X 光机,它就是 eBPF。
为了降低使用 eBPF 的
当医生遇到疑难杂症时,那么可以上 X 光机,有没有病?病在哪里?一照便知!当程序员遇到疑难杂症时,那么多半会查日志,不过日志的位置都是预埋的,可故障的位置却总是随机的,很多时候当我们查到关键的地方时却总是发现没有日志,此时就无能为力了,如果改代码加日志重新发布的话,那么故障往往就不能稳定复现了。回想医生的例子,他们可没有给病人加日志,可为什么他们能找到问题的,因为他们有 X 光机,所以对程序员来说,我们也需要有我们的 X 光机,它就是 eBPF。
为了降低使用 eBPF 的
最近学习某个 Golang 单元测试的课程,发现其中推荐使用 gomonkey 这种黑科技,让人略感意外,毕竟在软件开发领域,诸如依赖注入之类的概念已经流传了几十年了,本文希望通过一个例子的演化过程,来总结出 Golang 单元测试的最佳实战。
既然是白话,那么我们得想一个通俗易懂的例子,就拿普通人来说吧:活着是为了什么,好好学习,买房,结婚,任意一个环节出现意外,整个人生就会偏离轨道。下面我用 Golang 代码来描述活着的过程,其中好好学习,买房,结婚都可能受到不可控外
最近学习某个 Golang 单元测试的课程,发现其中推荐使用 gomonkey 这种黑科技,让人略感意外,毕竟在软件开发领域,诸如依赖注入之类的概念已经流传了几十年了,本文希望通过一个例子的演化过程,来总结出 Golang 单元测试的最佳实战。
既然是白话,那么我们得想一个通俗易懂的例子,就拿普通人来说吧:活着是为了什么,好好学习,买房,结婚,任意一个环节出现意外,整个人生就会偏离轨道。下面我用 Golang 代码来描述活着的过程,其中好好学习,买房,结婚都可能受到不可控外
最近我用命令行工具来测试 rpc 服务,因为此命令行工具要求输入数据是 json 格式,所以免不了要在 shell 环境构造一些 json 字符串:
shell> echo '{content: $(base64 foo.docx), type: docx}'
如上,我想把文件 foo.docx 的内容通过 base64 编码,然后放到 json 字符串里,但是它并不能正常工作,因为它是一个单引号字符串,命令在单引号里的是不能展开的,那换成双引号可不可以?当然可以,但是
最近我用命令行工具来测试 rpc 服务,因为此命令行工具要求输入数据是 json 格式,所以免不了要在 shell 环境构造一些 json 字符串:
shell> echo '{content: $(base64 foo.docx), type: docx}'
如上,我想把文件 foo.docx 的内容通过 base64 编码,然后放到 json 字符串里,但是它并不能正常工作,因为它是一个单引号字符串,命令在单引号里的是不能展开的,那换成双引号可不可以?当然可以,但是
前几天闲聊的时候,景埕说网上很多 string 和 []byte 的转换都是有问题的,当时并没有在意,转过身没几天我偶然看到字节跳动的一篇文章,其中提到了他们是如何优化 string 和 []byte 转换的,我便问景埕有没有问题,讨论过程中学到了很多,于是便有了这篇总结。
让我们看看问题代码,类似的 string 和 []byte 转换代码在网上非常常见:
func StringToSliceByte(s string) []byte {
l := len(s)
re
前几天闲聊的时候,景埕说网上很多 string 和 []byte 的转换都是有问题的,当时并没有在意,转过身没几天我偶然看到字节跳动的一篇文章,其中提到了他们是如何优化 string 和 []byte 转换的,我便问景埕有没有问题,讨论过程中学到了很多,于是便有了这篇总结。
让我们看看问题代码,类似的 string 和 []byte 转换代码在网上非常常见:
func StringToSliceByte(s string) []byte {
l := len(s)
re