如何画好一个架构图
业务架构 客户端架构、前端架构类似于逻辑视图 通过不同的颜色白标识不同颜色 系统架构技术架构或者是后端架构,后端的逻辑架构后端架构是核心架构两张图 左边说明功能,右边说明交互。和业务架构有区别。 应用架构描述后端系统有哪些应用组成 使用场景: 项目开发和测试 部署发布 子领域项目架构,下方就是个会员中心* 部署架构 - 物理视图描述后端系统具体是如何部署的,对应4+1 视图中的物理视图 使用场景 总体架构设计 运维规划和优化 画图技巧 使用图标代替区块*上边的球是网络加速点 前阿里 P9 教你如何画好一张架构图_哔哩哔哩_bilibili
【sed】快速替换当前文件夹下文件中指定内容
在 Linux 中,可以使用以下命令来实现这个需求: 1sed -i 's/hide: true/hide: false/g' * 解释一下这个命令: sed 是流编辑器,用于对文本进行过滤和转换。 -i 选项表示直接修改文件,而不是输出到终端。 's/hide: true/hide: false/g' 是 sed 的替换命令,其中: s 表示替换操作。 hide: true 是要被替换的字符串。 hide: false 是替换后的字符串。 g 表示全局替换,即在每一行中将所有匹配的 hide: true 都替换为 hide: false。 * 表示当前文件夹下的所有文件。 需要注意的是,这个命令会修改当前文件夹下所有文件的内容,包括二进制文件等,可能会导致一些文件损坏。如果只想修改特定类型的文件,可以使用通配符指定文件类型,例如替换当前文件夹下所有 .txt 文件中的内容: 1sed -i 's/hide: true/hide: false/g'...
【最强春节抢票攻略】火车票抢票攻略
1. 下载分流抢票(windows) ,并安装https://www.bypass.cn/ 2. 登录,查询目标车票放票时间需要注意的是,最好不要超过提前5小时来抢票,有可能会存在中途让你重新登录的情况,最稳妥的是在放票前10多分钟登录好,然后开始抢票。 3 先同步服务器时间其他设置小黑屋设置为100秒/次。 4.设置微信通知扫码绑定微信即可,绑定完成后可以测试一下效果。这个是起到通知作用,如果抢到了,我们收到通知后去12306付钱就行啦。当然你如果想更自动化一点,可以设置自动支付。 5.设置自动支付绑定支付宝,抢到票自动支付。 6. 设置定时抢票提前两秒时间间隔修改为200,设置更低的话IP容易被封(200我抢成功了),点击开始抢票!等待抢票成功吧! 抢到啦
【Golang】for range 数组指针遍历
在Go语言中,使用for range遍历数组或切片时,确实会对每个元素进行值拷贝。但是,当你遍历的是指针数组(如[]*Student)时,虽然指针本身是被拷贝的,但拷贝的指针仍然指向原始的内存地址。因此,通过这个拷贝的指针修改指向的值会影响到原始数据。 这意味着,即使for range对指针进行了拷贝,你仍然可以通过这个拷贝的指针修改原始结构体的内容。下面是一个例子来说明这一点: 1234567891011121314151617181920212223242526package mainimport "fmt"type Student struct { Name string Age int}func main() { students := []*Student{ {Name: "Alice", Age: 20}, {Name: "Bob", Age: 22}, } ...
Go 浮点数次方
在Go语言中,计算一个数的几次方可以通过标准库中的math包来实现。math包提供了一个Pow函数,用于计算x的y次方。 使用math.Pow函数math.Pow函数的签名如下: 1func Pow(x, y float64) float64 这个函数接受两个float64类型的参数:x是底数,y是指数,返回x的y次方的结果。 示例代码下面是一个使用math.Pow函数的示例: 1234567891011121314151617181920package mainimport ( "fmt" "math")func main() { // 计算2的3次方 result := math.Pow(2, 3) fmt.Printf("2的3次方是: %v\n", result) // 计算3的2次方 result = math.Pow(3, 2) fmt.Printf("3的2次方是: %v\n", result) // 计算10的-2次方...
【基础知识】Golang sort.Slice 复杂排序
在 Go 语言中,你可以使用 sort.Slice 对 slice 按照复杂条件进行排序。 sort.Slice 函数接受一个 slice 和一个比较函数,该比较函数定义了两个元素之间的排序关系。 以下是实现复杂条件排序的步骤和示例: 1. 基本语法1234sort.Slice(slice, func(i, j int) bool { // 比较 slice[i] 和 slice[j] return 条件}) 2. 示例:对结构体切片进行多条件排序假设有一个包含多个 Person 的切片,我们希望按以下规则排序: 年龄从小到大排序。 如果年龄相同,则按名字的字母顺序排序。 1234567891011121314151617181920212223242526272829303132package mainimport ( "fmt" "sort")type Person struct { Name string Age int}func main() { people...
【刨根问底】创建slice是否填第二个参数0的区别
在Go语言中,创建切片(slice)时使用make函数有两种常见的方式,它们之间有细微的差别: slice := make([]string, 0) 这种方式明确指定了切片的初始长度为0。这意味着你创建了一个容量和长度都是0的字符串切片。在这种形式中,你可以指定切片的类型(这里是[]string),并且设置其长度为0。由于长度和容量都是0,这个切片一开始是空的,没有任何元素。 slice := make([]string) ...
【刨根问底】为什么Itoa代表整型转化为字符串,为什么不是ItoSting
确实,如果我们按照缩写的逻辑来看,Itos(Integer to String)可能更直观地表达了Itoa函数的功能,即把整数转换为字符串。 然而,Itoa这个名称的由来实际上与历史和传统有关。在计算机科学和编程语言的历史中,Itoa这个术语已经被广泛接受和使用。以下是一些可能的原因: 历史原因:Itoa这个名称可能起源于早期的编程语言和库,当时ASCII码(American Standard Code for Information Interchange)被广泛使用。因此,Itoa(Integer to...
【基础知识】符号整数和非符号整数
uint8 uint16和uint32是无符号整数类型,分别有16位和32位。它们能存储的数字数量由其位数决定。 unit8 : 是8位无符号整数,可以存储的数量是2^8 ; 因为包括一个0, 所以范围是0~255 **uint16**: uint16是一个16位的无符号整数。 它可以存储的数字数量是 2^16。 计算得出:216=65536216=65536。 因此,uint16能存储的数字范围是从0到65535。 **uint32**: uint32是一个32位的无符号整数。 它可以存储的数字数量是 2^32。 计算得出:232=4294967296232=4294967296。 因此,uint32能存储的数字范围是从0到4294967295。 总结: uint16能存储的数字数量是 216216,即65536个数字。 uint32能存储的数字数量是 232232,即4294967296个数字。 int32是一个32位的有符号整数,其数值范围是从 −231−231 到...