Go: 用新的Map替换另一个Map线程安全吗?

2023-10-05
阅读 4 分钟
1.1k
这是一个Stackoverflow上的问题但其实我去年就问过这个问题,但是被社区删除了,因为他们觉得引发了数据竞态报告就理应加锁,不需要讨论。但是在一些场景中,性能影响是需要考虑的,实际工作中也不可避免地用到各种奇淫技巧,所以这是值得讨论的。现在我找到了答案。

Gopls was built with Go version 1.17, which will be unsupported

2023-09-12
阅读 1 分钟
1.3k
Gopls was built with Go version 1.17, which will be unsupported by gopls v0.13.0. Please upgrade to Go 1.18or later and reinstall gopls. If you can't upgrade and want this message to go away, please install gopls v0.110. See[链接] for more detaails

浅谈,在理论上倍投是不是一定赚?

2023-08-27
阅读 5 分钟
7.1k
倍投法(马丁格尔策略,Martingale Strategy)是一种赌博策略,该策略的核心思想是在每次输钱之后增加下一次赌注,以期望在赢得一局后能够弥补之前的损失,从而实现盈利。它基于一种假设,即输钱的次数越多,最终赢回来的可能性就越大。

经典问题:TIME-WAIT 时长为何为2 MSL?

2022-05-21
阅读 3 分钟
5.8k
MSL是Maximum Segment Lifetime的英文缩写,可译为“最长报文寿命”,它是任何报文在网络上存在的最长的最长时间,超过这个时间报文将被丢弃。

环形链表1和2双指针详解

2022-04-21
阅读 2 分钟
995
设置一个快指fast针和一个慢指针slow,初始都指向head。后面fast每次移动两步,slow每次移动一步。加如链表有环,在某一个时间,fast一定会追上slow,和slow重合,且绝对不会跳过slow。因为fast的速度为2,slow速度为1,以slow为参考系,因此fast相对于slow的速度为fast-slow=1。fast相对slow每次只向前一步,因此不会跳...

刷题笔记,剑指 Offer 58 - I. 翻转单词顺序。

2022-04-13
阅读 3 分钟
963
这题思路很简单,因为这个是简单题。主要就是要分割每个单词,然后逆序组成新的字符串。有两种办法,一个是背API,利用自带的函数帮助我们完成去除首尾空格和按空格分割。另一个如官方题解所示,自己实现双指针,分割字符串。

Vim技巧,替换已高亮的文本

2022-03-31
阅读 1 分钟
1.8k
因为这个功能很有用,但是又经常忘记,随手写个文章记录下来。假如对文本使用*或#,将会高亮当前窗口的相同单词。如果想批量替换,只需要:%s//需要替换成的文本/g参考[1] Replace all instances of currently highlighted text?

浅谈为什么在大部分语言中都不允许使用可变类型作为哈希表键

2021-11-22
阅读 6 分钟
4.1k
简单的说,当我们在大部分语言中尝试使用“可变类型”作为键值,会报错。以Python为例子,这将会提示有“不可哈希(unhashable)”错误。

Vim技巧,设置折行和折行后的上下移动

2021-11-18
阅读 1 分钟
2.7k
但是如果仅仅是折行,不改变j、k键的移动方式,则会显得很奇怪。因为直接使用j、k移动,移动的单位是文件中的行而不是折行后视觉显示的行。为此我们需要使用gj、gk在折行后的移动。

解决 ssh: connect to host github.com port 22: Connection timed out

2021-11-02
阅读 2 分钟
17.7k
如果你电脑上的git能在大部分地方进行同步,但是在某处地方的网络下无法同步,并且运行git pull或git push长久没有反映,最后出现ssh: connect to host github.com port 22: Connection timed out,很可能是你的网络供应商(比如广电网)在出口防火墙上屏蔽了22端口,这意味着你将无法访问其他主机的22端口。

Go 对匿名函数和闭包进行递归

2021-10-28
阅读 1 分钟
3k
当然,直接运行会编译失败,因为匿名函数没有名,在return处直接使用fib会提示undefined: fib所以我们得先定义fib为一个函数,var fib func(int)int。之后就能用了

回溯算法的思路和常见的题目

2021-07-26
阅读 19 分钟
3k
回溯算法是一种暴力搜索算法。回溯算法采用试错的思想,算法中往往将问题分成多步,每一步都有多种选择,发现某一步走错了,则原路返回选择另外一个选项,直到走出正确的解决步骤。可以看出,回溯算法本质是对决策树的一次深度优先遍历,也可以说是前序遍历。在发现走错路、走到尽头时,则原路返回一步,走其他分支;在...

快速排序的简介以及随机、三数中值优化(Go)

2021-07-21
阅读 5 分钟
3.9k
快排的思想是,选取数组中一个数,作为基准(pivot),然后将数组分成左右两部分。左边部分全部小于基准,右边部分全部大于基准。随后再去递归地对左边部分和右边部分做相同操作,直至数组被分割成单一一个元素,排序完成。网络上大部分快排的实现都是递归实现,这里给出模板。

浅谈B+树为何常用于数据库索引?

2021-06-19
阅读 6 分钟
2.3k
对于机械硬盘,磁盘内至少包含一个盘片。盘片上有一圈圈同心圆,相邻两个同心圆围成每个环形被称为磁道(track),也就是图片中粉色部分。同时,从磁盘转轴往外辐射出一条条辐线,辐线与磁道相交的地方,形成一个个弧形段,被称为扇区(Sector),也就是图片中粉色环和蓝色扇形相交的部分。如果机械硬盘包含多个盘片,则不同...

Go 在不影响原切片情况下,返回一个去除某个元素的新切片

2021-06-17
阅读 2 分钟
1.4k
为什么会这样?首先,Go的切片只是个结构体,包含了一个指向底层数组的指针、长度、容量。当我们使用切片语法b:=a[low:high]时,新的切片b只是获取了一个结构体,包含指向a底层数组的指针,并且可能有不同的长度和容量。

trash-cli,Linux 的命令行回收站

2021-06-09
阅读 2 分钟
5k
trash-cli 用于移动文件到回收站,同时会记录文件的原地址、删除日期和权限。trash-cli 和 KDE、GNOME、XFCE 的图形文件管理器使用同一个回收站,你可以在命令行或脚本运行 trash-cli。项目Github主页

LRU缓存机制的哈希表+双向链表 Go 、Python 实现

2021-06-06
阅读 8 分钟
2.3k
LRU(Least Recently Used,最近使用最少,最久未使用)是一种缓存淘汰算法。缓存是计算机中用来提高访问资源速度的一种方法。将从数据库、硬盘、网络或其他地方读取到的数据暂存于方便读取的地方(也就是缓存(Cache)),等再次读取时就不必重新在上述地方查找和读取一遍。通常来说,缓存的空间都是有限的,因此只应该...

logiops,在 Linux下设置罗技鼠标的按键和手势

2021-05-12
阅读 5 分钟
16.5k
众所周知,几乎所有的消费级电子产品都不会对 Linux 有太好的支持,罗技当然也不例外。Logitech Options 是罗技办公鼠标的自定义功能驱动,很容易猜到,罗技只提供了Windows和Mac版本。但幸运的是,有人开发出了一个第三方的驱动:logiops 项目地址

Go RIP协议简单的模拟实现

2021-05-12
阅读 6 分钟
3.1k
RIP协议是一种动态路由选择协议。一个路由器,定时与和自身相邻的路由器交换路由表。路由器通过一定的算法,根据对方发送的路由表更新自身的路由表。从而动态更新整个自治系统内的所有路由器的路由表。

Go 调用最大/小堆解决TopK问题

2021-05-10
阅读 4 分钟
8.1k
堆的性质如下。堆的逻辑结构为完全二叉树、底层数据结构通常为数组。对于最大堆,该二叉树父节点值皆比子节点值大,最小堆则反之。这种大小关系可以被称为堆序性。因此,对于最大堆,根为堆中最大的数。因此,最大/小堆也被称为大/小根堆。

Go 向函数传递切片该使用值还是指针?

2021-05-03
阅读 2 分钟
8.1k
在Go中,切片的本质是一个结构体,包含一个指向底层数组的指针(prt),长度(len),容量(cap)。所以,切片本身包含一个指针,将切片按值传递给函数,在函数内对其修改,影响将会传递到函数外。因为底层的数组被修改了。但当对切片进行append()操作,若是元素数量超过原有切片的容量,将会使得切片容量增大,这就是问题...

GO 语言之旅 练习:等价二叉查找树

2021-05-01
阅读 2 分钟
5.1k
思想:其实和不使用协程的思路差不多,分别中序遍历两棵树,得到数值序列,比较两个序列是否相等。若是使用协程,则可以很方便地并发遍历两棵树,再利用信道传输每个节点的数值,边遍历边比较。因为Go协程可利用多CPU核心,若是电脑有两个以上的CPU核心,则实际的运行时间会大大加快。类似的,在其他编程语言里,可以使...

MySQL auth_socket 验证插件的工作原理

2021-04-20
阅读 1 分钟
2.7k
auth_socket的验证方式是:客户端通过启用SO_PEERCRED选项的socket连接到mysql服务端,服务端从该socket检测运行该客户端的系统用户名是否为要登录的mysql用户名。若用户名相同,则登录,若不同,则拒绝。若用户名使用未启用SO_PEERCRED选项的socket连接,也会拒绝。

Linux 下安装 MySQL 后给 root 用户设置密码

2021-04-20
阅读 3 分钟
4.2k
Linux 下通过sudo apt install mysql-server安装的mysql,默认情况下,只能通过 root 用户或sudo的方式才能登录到mysql的root用户,而且无需密码,也无法设置密码。

Linux 下通过命令行和脚本开关笔记本触控板和其他输入外设

2021-04-19
阅读 3 分钟
1.6k
通过设备的id,可以禁用或启用设备。例如我们更改上面名为SynPS/2 Synaptics TouchPad的设备,也就是触控板的状态,可以通过其id 15来操控。

Ubuntu Linux下开启Firefox浏览器对触屏缩放的支持

2021-04-18
阅读 1 分钟
4.5k
本人的电脑是戴尔latitude 7275,也就是XPS 12 9250,拥有一块Wacom触摸屏(我不知道和Wacom什么关系,但是gnome设置里管他叫Wacom手写板)。使用的系统是Pop OS 20.10,桌面是Gnome 3。Pop OS是一个基于Ubuntu修改的系统。默认情况下,我的触摸屏可以在gnome的内置软件(比如设置)里模拟单指滚动,但在Firefox里,手指...

在Django中使用MySQL的枚举(ENUM)类型而非用VARCHAR模拟

2021-03-22
阅读 4 分钟
7.1k
Django 3.0 开始已经默认支持枚举类型了,使用的方法是通过给模型的内部增加一个元组或内部类代表枚举的选项。参考官方文档和我在文章最下方的代码。在CharField或IntegerField的构造函数增加一个choices参数,指定代表枚举的元组常数或内部类成员。但是这种方法有个缺陷就是,仅仅在前端实现了枚举类型,但是在代码层面...