0
点赞
收藏
分享

微信扫一扫

golang 面试题

32. map的value赋值问题
    type Student struct{Name string}
    m := make(map[string]Student)
    这里的map的值是Student结构的值,是值引用,只读。要修改结构体的值,必须构造一个副本修改,然后再整体对应key的值。
        或者map保存student的指针 m1 := make(map[string]*Student)

33. for range 的遍历引用赋值
    stus := []student{}
    for _, item := range stus {
        m[item.Name] = &stu   // 这里的stu是一个迭代器,其地址是固定的,导致所有的value都会是最后一个迭代器的值。
    }

34. interface的实现问题 
    通过类型T的指针类型*T实现的接口,只能用指针类型进行赋值(多态)
    通过类型T 实现的接口,既可以用T类型也可以用*T类型进行赋值。

35. waitGroup 与goroutine的竞速问题
    wg.Add(1) 需要写在go func(){} 之前,不能写在里面
    waitGroup 不能复制

36. 进程,线程以及协程之间的区别
    - 进程是操作系统分配系统资源的最小单位。 32位的为4G
    - 线程是操作系统调度(CPU调度)执行的最小单位。线程拥有独立的栈区,共享进程的全部资源。MB级别
    - 协程是一组可复用的函数运行在一组可复用的线程上。KB级别
        协程切换完全在用户空间进行;几十ns数量级
        线程切换需要切换到内核空间,产生系统调用。

37. TIME_WAIT作用
    1. 主动关闭方才会出现TIME_WAIT
        被动关闭的一方,直接进入CLOSED状态,而主动关闭方需要等待2*MSL时间才会最终关闭   MSL - 最大数据段声明周期
        原因:1 防止被动关闭方的延迟数据被人窃取
             2 防止被动关闭方没有收到最后的ACK

38. channel的各种同步机制编码实现?

39. context包的作用及实现? 需要再读源码
    context.TODO() context.Background()
    context.WithValue()
    context.WithTimeout() context.WithCancel() context.WithDeadline() timer 定时器 + channel

40. sync.Map 的用途和实现? 需要读源码 ​​     优缺点
        优点:通过读写分离,降低锁时间来提高效率;
        缺点:不适用于大量写的场景,这样会导致read map读不到数据而进一步加锁读取,同时dirty map也会一直晋升为read map,整体性能较差
        适用场景:大量读,少量写。

41. 消息队列kafka的各种概念,及基本原理 需要知识充电了?

42. es的面试题需要刷一刷

43. channel作为函数返回值的使用

44. timer,ticker的用法

45. a, b := 1, 2 // 执行顺序无法保证,不能用于链表等操作

46. interface 判断是否为nil
    使用 reflect.ValueOf(in).IsNil() 

47. 使用channel实现一个交替打印0-1的程序

48. GMP调度原理阐述
    
49. 垃圾回收机制
    追问:程序根节点是指什么?


举报

相关推荐

0 条评论