1. 解释下unmarshal和parse的区别?

    答:一个是序列化,一个是处理string的

    1. 问这是什么语法

    lADPJxDjx4nKxuZUzQGa_410_84.jpg
    答:断言

    1. 我们是基于envoy内核做的,天然支持wasm,mson跟envoy集成模式更多采用 cgo模式。现在mson的cgo模式和 proxywasm 大概什么关系呢?

    答:cgo是为了和wasm运行时wasmer打交道
    github.com/tetratelabs/proxy-wasm-go-sdk/proxywasm

    1. TinyGo

    TinyGo 是一个 Go 编译器,旨在用于微控制器,WebAssembly(WASM)和命令行工具等小型场景。它重用了 Go 语言工具和 LLVM 一起使用的库,以提供编译用 Go 编程语言编写的程序的另一种方法。
    下面是一个示例程序,当直接在带有板载 LED 的任何支持板上运行时,内置 LED 闪烁:

    1. package main
    2. import (
    3. "machine"
    4. "time"
    5. )
    6. func main() {
    7. led := machine.LED
    8. led.Configure(machine.PinConfig{Mode: machine.PinOutput})
    9. for {
    10. led.Low()
    11. time.Sleep(time.Millisecond * 1000)
    12. led.High()
    13. time.Sleep(time.Millisecond * 1000)
    14. }
    15. }
    1. 请问下golang中识别文本语种的第三方库有吗? 类似python中langid库

    答:
    拓展:langid语言识别模块

    1. import langid
    2. def try_lang():
    3. t1 = "ルカ:ならよかった。ミチルってあの年ですごい苦労してんだよ。 "
    4. t2 = "한국어"
    5. t3 = "宿題を終えて、私はベッドの上で横になって目を閉じて神を養って、突然、背後が涼しくなって、一陣の風が吹いて、私は目を開けて見て、空がすでに明るくなったことを発見して、私は一面の茂った森の中で横になっています"
    6. t4 = "After finishing my homework, I lay down on my bed, closed my eyes, raised God, suddenly got cool behind me, and the wind was blowing, I found my eyes open and looked empty, and I was lying in a thick forest"
    7. t5 = "我躺在床上闭眼养神,突然,背后凉了,刮了一阵风,我睁开眼睛看,发现天空已经亮了,我躺在一片茂密的森林"
    8. print(langid.classify(t1))
    9. print(langid.classify(t2))
    10. print(langid.classify(t3))
    11. print(langid.classify(t4))
    12. print(langid.classify(t5))
    1. mongo 一次性存太大的文档存不进去怎么解决?16.1MB

    答:什么内容是否可以压缩?16MB是mongodb的单个文档默认限制,啥东西那么大,还想用mongo存的,要不要考虑下gridfs,用gridfs可以配合mongo

    1. mysql查询版本号

      1. SELECT *
      2. FROM device_table WHERE CONCAT(
      3. LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(app_version, '.', 1), '.', -1), 5, '0'),
      4. LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(app_version, '.', 2), '.', -1), 5, '0'),
      5. LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(app_version, '.', 3), '.', -1), 5, '0'),
      6. LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(app_version, '.', 4), '.', -1), 5, '0')
      7. ) < CONCAT(LPAD(2,5,'0'), LPAD(7,5,'0'), LPAD(6,5,'0'), LPAD(509,5,'0'))
    2. ES默认超过磁盘的95%就变成只读模式了

    3. https://github.com/Tencent/TencentKona-8/tree/KonaFiber/demo/fiber

    和spring结合可以参考这篇文章的7.2,目前Socket和数据库操作还需要用spring提供的异步接口改造,大概下个版本或者再下个版本我们会支持Socket和数据库。

    1. 分析GC https://gceasy.io/
    2. “track_total_hits”:true 的作用 #获取超过1w条数据 需要加上 “track_total_hits”:true ,不然只能显示出9999条。
    3. 技术电子书下载:https://developer.aliyun.com/ebook/36?spm=a2c6h.20345107.ebook-index.18.152c2984fsi5ST
    4. Gin 的路由还有一个特色就是,使用索引来加速子树查询效率。再看图中左边的例子,/wel 中间节点还带着一个索引 cg,代表的是子树的第一个字母。所以路由查找的时候,会先去索引 cg 中查找,当前路由除“/wel”的第一个字母,是否在索引中,如果在,索引的下标序列就代表第几个子树节点。beego的路由底层结构也是一个树

      Echo 的路由也是使用字典树的结构

    5. GO开源框架 Beego、iris、Go zero、Gin 和 Echo

    6. 用了 for-loop 的变量,结果导致o.ShardingRuleMap[strings.ToLower(table)]

    结果都指向了一个临时变量。
    lQLPJxZbTTqQyM3MyM0CubCBvJ71PX4_xAKWp6v7gOEA_697_200.png

    1. 使用了一个 bytesconv.BytesToString 方法来将字符 c 转换为 string。这里为什么不使用 string 关键字直接转换呢?

    因为在 Golang 中,string 转化为 byte 数组,以及 byte 数组转换为 string ,都是有内存消耗的。以 byte 数组使用关键字 string 转换为字符串为例,Golang 会先在内存空间中重新开辟一段字符串空间,然后将 byte 数组复制进入这个字符串空间,这样不管是在内存使用的效率,还是在 CPU 资源使用的效率上,都存在一定消耗。

    1. package bytesconv
    2. // 字符串转化为字符数组,不需要创建新的内存
    3. func StringToBytes(s string) []byte {
    4. return *(*[]byte)(unsafe.Pointer(
    5. &struct {
    6. string
    7. Cap int
    8. }{s, len(s)},
    9. ))
    10. }
    11. // 字符数组转换为字符串,不需要创建新的内存
    12. func BytesToString(b []byte) string {
    13. return *(*string)(unsafe.Pointer(&b))
    14. }

    bytesconv 包的原理就是,直接使用 unsafe.Pointer 来强制转换字符串或者字符数组的类型。

    1. 至今 Gin 已有多个开源共享者为其共享了开源中间件,目前官方 GitHub组织收录的中间件有 23 个,非收录官方,但是在官方 README记录的也有 45 个。

      1. [https://github.com/orgs/gin-contrib/repositories](https://github.com/orgs/gin-contrib/repositories)<br /> [https://github.com/gin-gonic/contrib](https://github.com/gin-gonic/contrib)<br /> [https://github.com/gin-gonic/gin/blob/master/tree.go](https://github.com/gin-gonic/gin/blob/master/tree.go)
    2. Gin 实现的 Query 系列方法和我们实现的有什么不同么?

    gin的query方法,通过本地内存cache缓存了请求的query参数。后续每次读query参数时,都会从内存中直接读,减少了每次都要调用request.Query()方法的计算开销。

    1. 创建索引表
    1. CREATE TABLE `tender_other_content` (
    2. `id` bigint(0) NOT NULL COMMENT '主键',
    3. `bid_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编号',
    4. PRIMARY KEY (`id`) USING BTREE,
    5. INDEX `index_bid_code`(`bid_code`) USING BTREE
    6. ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表';
    1. 其实是指针值的复制,是传递不出去的,影响不了外面的t的值, 想要保存指针的值,需要一个指向指针的指针, 二级指针。

      1. func WithTestObject(newT *TestObject) testOption {
      2. return func(t *TestObject) {
      3. t = newT
      4. }
      5. }
      6. 改为
      7. func WithTestObject(newT *TestObject) testOption {
      8. return func(t *TestObject) {
      9. *t = *newT
      10. }
      11. }
    2. Gin/Beego/Echo/Iris/Tango/Revel/自研/go-zero框架

    3. casbin jwt-go cobra urfave/cli termui viper redigo grpc-go pkg/errors notify gopherjs logrus zap excelize dig fasthttp gopsutil resty GORM gonum jsoniter gofpdf Testify gomock colly 中间件
    4. 遇到一个问题不知道你有什么解决思路没,我们开发了一个框架,要给客户用,但是不想代码暴露给客户,有没有什么解决方式呢?

      答::go 的 embed 就可以打包静态文件到二进制文件
      答:编译成动态库so或者静态库a