go中slice append扩容的一些细节

1.问题与事件 事件:一个朋友面试某家公司 问题:对容量为4的int切片追加5个元素,最终切片的容量是多少? 针对该问题,朋友回答:16 该问题考察slice扩容: ①在容量小于1024时,在原基础上2倍扩容 ②大于1024时,在原基础上1/4的扩容 面试官回答说:10 让回去自己试一下,看看具体是多少? 事后分析了一下,能确定的是:面试官提出的问题,有4种写法。 2.同一个问题不同写法的不同结果 在4种写法执行之前,你觉得最终的容量cap分别会是多少? func TestSliceAppend(t *testing.T) { SliceAppend0() Sl...

Golang,编程原理 2022/06/14 138℃ 0条

go字符串无拷贝转换切片的一个问题

1.字符串无拷贝转换切片 提起 字符串无拷贝转换切片 这个话题,可能很多人会想到下面一段代码: func string2Slice(s string) []byte { return *(*[]byte)(unsafe.Pointer(&s)) } 这段代码利用了指针进行强转,并且在实现过程中不会出现数据拷贝,简单、强大! 2.同一切片多次获取容量结果不相同 来看一个测试用例: package test import ( "fmt" "testing" "unsafe" ) func string2Slice(s string) []byte ...

Golang,编程原理 2022/04/22 236℃ 0条

go泛型中类型参数列表为什么用中括号?

2022.3.15当天,在国内打假国人声讨奸商的时候,go官方发布了1.18版本。对于该版本来说,可能是近几年发生变化最大的一个版本。因为,有一个千呼万唤始出来的功能:泛型(Generics)。说起泛型,那些熟悉C++、Java的开发人员可能并不陌生。但是,对于那些没有接触过泛型的人来说,就需要花点时间来适应这一特性。 官方博客: Go 1.18 is released! (https://go.dev/blog/go1.18) 1. go泛型 talk is cheap, show the code。 对于常见的:求两个有符号整数最大值这个功能 准备了两份代码,分别是未使用泛型以及...

Golang,编程原理 2022/03/26 424℃ 0条

指数退避算法设计与原理

重试 在业务开发过程中,经常会听到有人说:xx 问题在失败的情况下,可以进行重试,就能增加成功的概率。 那么,重试是什么? 举个现实中的小例子: 时间: 古时候某个朝代的某一天 事情: 妈妈让小明去叔叔家找叔叔问件事情 问题: 小明去叔叔家后发现家里没人。那么,小明应该怎么办? 方案: ① 在叔叔家门口一直等到他回来 ② 先回自己家,等段时间再去叔叔家,看看他回来没 ③ 留个字条贴到叔叔家门上,等他回来看到后,来找自己 为什么设定为古时候? 是因为设定在当代的话,可能有人会说给叔叔打个电话不就行了。这里仅仅是为了设定某种场景来抛出问题 映射到实际开发中,分别对应: ① 阻塞等待 ② ...

Golang,编程原理 2022/01/29 728℃ 0条

数字转越南语词组实现方法

先说明一下背景: 近日,公司在自研TTS服务的阿拉伯数字转换成越南语音频的功能,在网上查询了相关资料,没有发现可直接使用的库或者代码片段。于是,自己就开发了一套。事后,经过整理、总结分享给有相同需求的同学。 TTS 就是文本转语音,语音合成(Text To Speech)。 在现实生活中,随处可见的智能设备(天猫精灵、小爱同学等)要想说话就需要用到TTS了,相当于嘴。 转换流程 经过分析发现,阿拉伯数字转换成越南语音频,大致需要两个步骤: 先把数字转换成越南语词组序列 再把越南词组序列转换成对应的音频 第一步的实现是本文讲解的重点。 第二步的实现由于涉及机密问题,就说一下大致思...

Python,编程原理 2021/11/20 650℃ 0条

关于kill -0 pid的作用

在服务器运维以及程序开发过程中,经常会用到kill命令或者kill()方法。那么,kill是做什么以及信号0的作用又是什么,一起来探寻吧。 kill可以使用的信号 [root@localhost ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIG...

编程原理 2021/11/19 398℃ 0条

操作无符号整数的注意事项

在很多强类型编程语言中都会有一种特殊的类型——无符号整数类型,该数据类型在使用过程中往往稍不留意就会引发出乎意料的bug。 至于,有什么注意事项以及需要了解的知识点,一起来看看吧。 1. go源码中的无符号类型 // go源码位置: src/math/const.go // // Integer limit values. const ( MaxInt8 = 1<<7 - 1 MinInt8 = -1 << 7 MaxInt16 = 1<<15 - 1 MinInt16 = -1 << 15 ...

Golang,编程原理 2021/11/19 416℃ 0条