go知识点复习

go核心要点
1、go在语言层面上做哪些优化?
      程序本质上是变量+函数,go语言在变量方面提供了紧凑的内存使用;在函数方面,提供了内联机制,减少函数调用开销,但是内联也是有代价的,增加了编译后二进制文件的大小。

2、goroutine如何实现同步功能?请用代码实现
     方案一:通过sync.WaitGroup//适用于需同步线程个数明确的情况
     方案二:通过channel
     方案三:context

3、go中有哪些协程安全的类型?
      channel、sync.Map
      对于数据想要线程安全,离不开锁机制。关键点在于锁机制运用方面的优化与封装,对性能有影响。因此像sync.Map中通过空间换时间的方式冗余数据,针对读多写少的一些场景可以考虑这么使用。
       sync.Map是一个高度封装的结构体,通过Store、Load存取数据,通过Range方法遍历数据,通过Delete删除数据。

4、go中sync.Mutex(互斥锁)与sync.RWMutex(读写锁)的区别与使用方式
      Mutex用于读写不确定的情况
      RWMutex适用于读多写少的问题,其本质上也是Mutex的封装

5、反射的应用
https://www.jianshu.com/p/8c0669d8adc3

6、go语言中如何高效实现快排?

7、go语言中令牌池如何设计?
      令牌池有哪些应用场景呢?

8、go中闭包函数的用法
       闭包的使用主要是面向于函数式编程,看哪些地方有返回函数的需求。

9、go中goroutine超时控制,如何封装在框架里面呢?已经有很好的解决方案,context。

10、map高并发访问与sync.Map性能对比?
        不如问道map控制并发访问的方式有哪些?该问题的答案是:针对Map类型,可以通过加RWMutex或者Channel的方式来实现,其中通过读写锁的性能其实更高,但要求代码逻辑要严谨;对于sync.Map,可以通过Store、Load、Delete等方式直接操作,相关包以进行封装,通过空间换时间,不易出问题。

11、请通过go设计一个高并发的日志框架?

12、gdb调试法方法

13、明白切片slice的数据结构
        slice由指向数组的指针以及len和cap组成。其中len和cap分别代表什么?其实质都是数组的拷贝,当cap小于1024的时候,每当需要扩充时都是2*cap。使用时,建议预先分配好,防止append的时候重新分配复制之前的数据,减少不必要的性能损耗。
        type Slice struct{
           ptr unsafe.Pointer
           len int
           cap int
        }

14、接口一般以er结尾,如writer、reader

15、C语言基本类型包括基本类型(数值类型、字符类型)、构造类型(结构体、枚举、数组)、指针类型、空类型。

16、go中存在两种interface,无方法的interface有方法的interface。两种interface的内部定义不同,但都是由结构体构成。其实本质上都是由基本类型构成。

17、计算机世界由基本类型所组成的变量与函数构成,基于某一些需求通过封装的手段提供如sync.Map类型对应的结构体和方法。

18、context包已提供两个结构体,context.Background 与 context.ToDo

19、context利用close(chan)一个只读的channel来实现广播功能,其中chan是引用传递。因此,只要close(chan)是可以起到广播效果。

20、go中new与make都是用于内存分配,其中make只用于chan、map以及slice的内存创建。但是实际使用过程中,new很少使用,一般通过短语句声明即可。

21、对于编译型语言,要通过压测观察是否存在内存泄漏,那么究竟要考虑多大的并发量呢?

22、对于IO多路复用,select、pool采用的轮询模式,epool采用的回调机制。但是万一客户端很活跃,系统回调会产生许多并发线程,负载较高。

23、什么是WebSocket?

25、go---netpoll实现原理?类比channel---select?

27、在信息传递过程中,面对面沟通的效率时最高的,而纸质交流效率最低。那么为何还需要纸质文档?---记录功能

28、一定要培养自己发现问题、解决问题的能力

29、go中数据的流动交给channel,数据的处理交给goroutine

30、服务器端接口客户端请求,公有IP和私有IP之分
       比如我们访问百度时,百度Server端接收的是公网IP。
       一个内网内的两台电脑同时访问百度,NAT会把两个内网IP:PORT转为外网IP:PORT,对于百度来说,就是同一个IP的两个Port访问。

31、504网关超时

32、goroot与gopath有何区别?

33、可以通过配置WSL中的GO相关配置,实现编译等功能。已验证。

34、重要的是编程思想,比如高并发情况下,java/.net/go是如何实现的?

35、计算机资源都是有限的,实现高并发、高性能、可扩展的应用程序即实现各阶段、各细节的最优化,最优化,最常见的即为内存最优化以及CPU资源最优化,因此涉及到内存GC以及CPU资源调度。

36、每一个微服务都要以高性能、高可用、可扩展为目标进行设计,亦可针对某一些场景做取舍。
       高可用:万变不离其宗---冗余方案
       高性能:低时延、高并发
       可扩展:一是从应用程序的角度看;二是应用程序无状态化。

37、同步与异步关注于消息通知机制,阻塞与非阻塞表示线程运行状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值