文章目录
-
-
- 1 GOLong对比各语言异同。
- 2 Runtime的特点
- 3 Go程序是如何编译的?
- 4 Go程序如何运行起来——理解即可
- 5 GO语言是面向对象的吗?
- 6 什么变量的大小是0字节?(空结构体)
- 7 数组、字符串、切片底层?
- 8 切片容量增长,append追加如何追加:
- 9 切片作为函数参数会被改变吗?
- 10 Map
- 11 Map扩容
- 12 Map中的Key为什么无序?
- 13 Map是线程安全的吗?
- 14 Map中的元素为什么不能取地址?
- 15 Map可以边遍历边删除吗?
- 16 sync.Map
- 17 make和new的区别?
- 18 接口中iface与eface区别(空接口与接口)
- 19 接口的类型断言
- 20 方法的值接受者与指针接受者
- 21 Channel通道有哪些应用
- 22 Channel通道
- 23 Channel发送与接收数据原理
- 24 非阻塞的Channel怎么做
- 25 从一个关闭的通道可以读数据吗?
- 26 Go goroutine协程与线程区别
- 27 goroutine三种状态
- 28 Go sheduler 调度(GMP模型概括)
- 29 抢占式调度——(触发调度)
- 30 Golang的g0和m0是什么?
- 31 新建协程调度顺序
- 32 M:N模型是什么(多对多)
- 33 工作窃取是什么?
- 34 处理协程太多的方案
- 35 context上下文
- 36 反射
- 37 defer延迟语句
- 38 recover如何在panic中拯救程序
- 39 Go中锁底层机制
- 40 sync.Mutex互斥锁
- 41 sync.RWMutex读写锁
- 42 sync.WaitGroup等待组
- 43 sync.Once
- 44 sync.Pool
- 45 排查锁异常问题
- 46 Go堆和栈的概念?
- 47 逃逸分析
- 48 Go内存对齐
- 49 内存分配策略
- 50 Go内存管理的对象分级
- 51 垃圾回收
- 52 GC触发时机
- 53 GC优化
- 54 TCP网络编程
- 55 Go是如何抽象Epoll
- 56 Golang-gin框架路由原理
-
1 GOLong对比各语言异同。
C/C++:直接编译成机器码,不需要执行环境,所以一次编码只能适用于一种平台
需要自己处理GC问题
JAVA:编译为中间码(字节码)
需要特定的执行环境(JVM)所以一次编译多处运行,但是有虚拟化损失
JS(原生):不需要编译,直接解释执行,需要执行环境(浏览器),也有虚拟化损失
GOlang:
-
直接编译为二进制,没有虚拟化损失
-
而且GO自带运行环境,无需处理GC问题
-
一次编译使用多种平台,(代码基本不用改,在不同系统上编译即可)
-
很强的高性能并发能力,并且易用性也很好
2 Runtime的特点
运行时:本质就是程序的运行环境(比如JAVA的JVM)
GO