首页
Uphie's Blog
取消

Go 截断文件

有时候我们需要从某个位置截断一个文件,仅保留文件的后半部分。Go 标准库中有个 file.Truncate 函数可以帮助我们进行截断,但问题是它是保留前半部分。 要实现保留后半部分,我们可以把后半部分的内容移到前面来,再使用 file.Truncate 截断即可。 如果将文件内容全部读出来,修改,再写回去不失为一个方案,但还有一个更优的方式:使用内存映射 mmap ,可以减少内存拷贝的次...

Ubuntu下安装Kafka集群

笔者有3台虚拟机机器,分别为 master、node1、node2,它们可以通过主机名互联互通,在这三台机器上部署 Kafka 集群。 配置 Java 环境 由于 Kafka 依赖 Java8+ 环境所以需要先配置好 Java 环境。 我们使用 openjdk root@master:/home/uphie# jdk Command 'jdk' not found, did you m...

scp 命令

和 sftp 命令类似,scp 也是一个向远程主机上传或下载的命令,但功能相对简单,而且需要频繁输入远程用户密码。 上传文件 命令形式: scp localpath remoteuser@remotehost:remotepath scp -r localdir remoteuser@remotehost:remotedir root@master:/home/uphie#...

sftp 命令

sftp 是一个与远程主机交换文件的命令,可以上传或下载文件。 连接远程主机 命令形式为: sftp remoteuser@remotehost,登录到远程主机,并切换到 remoteuser 用户的家目录 sftp remoteuser@remotehost:remotedir,登录到远程主机,并切换到 remotedir 目录 uphie@node1:~/test$ s...

使用 sql 查询指定商品的价格排名

假设有这样的一个商品表: CREATE TABLE `sku` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL COMMENT '商品名', `price` decimal(10,2) NOT NULL COMMENT '单价' PRIMARY KEY (`id`) USING BTRE...

思考一下defer的这个问题

观察下面代码的输出是什么? package main import "fmt" func t() (data int) { defer func() { data += 1 }() return 2 } func main() { b := t() fmt.Println(b) } 上面这段代码的输出是 3。 函数在 return 的时候不是原子性的,有两步: ...

cannot assign to struct field m["bob"].Name in map

观察下下面代码会怎样执行? package main import "fmt" type User struct { Name string } func main() { m := map[string]User{"bob": {Name: "bob"}} m["bob"].Name = "andy" fmt.Sprintln("m:", m) } 结果是编译错误: can...

用 Python 启动一个临时 FTP 服务

有时候需要将本机的一些文件传递给其他电脑,但考虑到安全性、隐私性,不想通过微信、QQ 等第三方工具传输,又不想特地找专门的软件,那么这时候可以通过 Python 临时开启一个 FTP 服务,即用即开。 先安装 pyftpdlib 包: pip install pyftpdlib 创建文件 ftp_server.py from pyftpdlib.authorizers import ...

Go channel 的坑

如下表格列出了不同状态下的 channel,做不同操作时的效果,不同效果有标记序号,后文有实例验证。 操作 nil channel closed channel not nil and not closed channel 阻塞读 阻塞(1) buf 中有值...

如何求数组中最小的 k 个数?

问题 输入 n 个整数,找出其中最小的 k 个数。 例如,输入 4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是 1、2、3、4。 解法 排序再截取 最容易想到的方法就是先排序,再截取 k 个数,如: // Go 1.19.3 func getLeastNumbers(arr []int, k int) []int { if len(arr) < k || k ...