得物一面

前言:面试官人太好了,大大的点个赞

自我介绍

make和new的区别,分配的变量类型有啥区别

  • 返回类型:new 返回指向给定类型的指针;make 返回一个已经初始化的对象,而不是指针
  • 适用范围:new 可以用于任何类型;make 主要用于初始化切片、映射和通道等复合数据类型
  • 初始化:new 分配的内存包含的是类型 T 的零值,但返回的是指向这个零值的指针;make 不仅分配内存,还会对切片、映射和通道进行适当的初始化,使其准备好使用
  • 使用场景:当你需要一个指向类型 T 的指针时,使用 new;当你需要初始化一个切片、映射或通道时,使用 make

数组和切片的区别

  • 数组 是固定大小的,适合存储固定数量的元素;它是值类型,复制时会复制所有元素。
  • 切片 是动态大小的,更适合存储不确定数量的元素;它是引用类型,赋值时传递的是引用而不是整个数据。

介绍一下defer

确保资源的释放、文件关闭、解锁等操作能够在函数退出时得到执行

  • 延迟执行:defer 声明的函数会在函数即将返回时执行,即使函数中有提前返回或者==panic==的情况
  • 后进先出(LIFO):多个 defer 声明按照它们被声明的逆序执行,类似于栈的 LIFO 原则
  • 捕获当前状态:defer 声明的函数会捕获当前的函数调用状态,包括所有局部变量的当前值

介绍一下map,怎么线程安全,底层原理,删除一个key内存会有变化吗

介绍

  • 无序:map 中的元素是没有顺序的,因此遍历时顺序不可预测。
  • 动态大小:map 的大小可以根据需要动态增加或减少。

内部结构

  • 桶表(bucket table):一个哈希表,用于存储键值对。
  • 哈希函数:用于计算键的哈希值,以定位桶的位置。
  • 链表:每个桶内部可以包含一个链表,用于解决哈希冲突
  • 扩容机制:当 map 的元素数量接近桶的数量时,Go 语言会自动扩容 map,以保持高效的性能
  • 哈希冲突:每个桶内部都有一个链表,用于存储具有相同哈希值的键值对

线程安全

  • sync.Mutex
  • sync.Map{}

删除一个key内存会有变化吗

如何是int类型不会有变化,但是如果是指针或者引用就会有影响,同时桶的大小不会被影响

chan的介绍和底层原理

  • chan 的特点:类型化、同步、阻塞和缓冲。
  • 底层实现:chan 包括一个队列、互斥锁以及发送者和接收者的等待队列。
  • 工作流程:发送和接收操作通过互斥锁协调,确保数据的安全传输。
  • 缓冲通道:通过队列暂存数据,提高并发性能。

以后的学习方向

了解部门业务

#面试##得物求职进展汇总##得物校招求职汇总#
全部评论
为啥我是逮着我笔试的错题问
点赞 回复 分享
发布于 09-07 18:10 湖南
请问一下你投的什么岗位呀
点赞 回复 分享
发布于 09-07 18:52 陕西

相关推荐

4 35 评论
分享
牛客网
牛客企业服务