rest|golang笔记 | 面试题整理( 三 )


15、了解空指针吗?

  • 当一个指针被定义后没有分配到任何变量时 , 它的值为 nil 。
  • nil 指针也称为空指针 。
  • nil在概念上和其它语言的null、None、nil、NULL一样 , 都指代零值或空值 。
16、怎么用go去实现一个set
  • Go中是不提供Set类型的 , Set是一个集合 , 其本质就是一个List , 只是List里的元素不能重复 。
  • Go提供了map类型 , 可是咱们知道 , map类型的key是不能重复的 , 所以 , 咱们能够利用这一点 , 来实现一个set
  • 构造一个Set的方法
构造一个set , 首先定义set的类型svg
//set类型
type Set struct {
    m map[int
Empty


为一个结构体类型 , 内部一个成员为一个map , 这也是主要咱们存储值的容器函数产生set的工厂性能
//返回一19et
func SetFactory() *Set{
    return &Set{
        m:map[int
Empty{####  。 所谓并发编程是指在一台处理器上“同时”处理多个任务 。



17、一般怎么比较两个结构体 , 怎么判断他们是否相等?
一般没有效率太高的方法:
  • if判断比较:使用if一个个比较两个结构体中元素的值:if(p1->age==p2->age) , 如果有一个元素不等 , 即是两个实例不相等 。
  • 指针直接比较:如果保存的是同一个实例地址 , 则(p1==p2)为真 。
18、make和new的区别是什么?
  • make 只用于 chan , map , slice 的初始化;
  • new 用于给类型分配内存空间 , 并且置零;
  • make 返回类型本身 , new 返回指向类型的指针 。
19、说一下你对并发编程的理解?
  • 所谓并发编程是指在一台处理器上“同时”处理多个任务 。
  • 宏观的并发是指在一段时间内 , 有多个程序在同时运行 。
  • 并发在微观上 , 是指在同一时刻只能有一条指令执行 , 但多个程序指令被快速的轮换执行 , 使得在宏观上具有多个进程同时执行的效果 , 但在微观上并不是同时执行的 , 只是把时间分成若干段 , 使多个程序快速交替的执行 。
20、碰到过分布式锁的问题吗?分布式锁的原理你清楚吗?
golang中的分布式锁可使用etcd进行实现 , 实现原理如下:
  • 在ectd系统里创建一个key
  • 如果创建失败 , key存在 , 则监听该key的变化事件 , 直到该key被删除 , 回到1
  • 如果创建成功 , 则认为我获得了锁
以上 , 就是今天分享的全部内容了 , 希望大家通过以上golang面试题解决自己的疑问 , 找到自己满意的工作

【rest|golang笔记 | 面试题整理】
文章转自:blog.51cto.com/u_13460811/4900984