得物一面

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

自我介绍

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 陕西
天翼云科技有限公司
校招火热招聘中
官网直投
同学,厉害呀~
点赞 回复 分享
发布于 09-07 19:04 广东

相关推荐

会员标识
09-07 17:52
兰州大学 Java
16:50 - 17:20 卡点 30 分钟语速巨快面试官,搞得我也说得巨快1. 自我介绍2. 实验室做的项目介绍3. 实习公司4. 竞赛奖项5. 能体现你技术的事迹 ... 6. 整个大学期间你觉得比较有成就的项目7. 你觉得项目中的技术挑战点在哪儿 .. 8. 做了这些项目的收获,遇到过哪些烧脑的问题、坑9. 主用语言 ... ? 10. 基本类型和包装类型能直接进行比较吗11. 包装类型可以直接进行 == 判断吗?12. 包装类型缓存池13. 重写了 equals 为什么还要重写 hashcode 方法14. volatile 的作用,底层原理15. i ++ 是线程安全的吗?volatile 能解决吗?那有什么解决办法?16. 垃圾回收分代算法介绍一下,为什么要分代?17. 新生代用的什么垃圾回收算法18. MySQL 数据库的联合索引(举了个例子考索引失效情况)19. innodb 引擎为什么不用 B 树而用 B+ 树20. JDK 原生有哪些设计模式的体现21. Spring 中有哪些设计模式体现22. 线上项目 CPU 异常飙高问题怎么排查解决23. 怎么写这么多博客,产出真高啊口撕:两个栈实现一个队列反问:部门业务(一面不能确定,要二面才会分部门)、一共几面(也不知道 ... )
查看22道真题和解析
点赞 评论 收藏
分享
3 17 评论
分享
牛客网
牛客企业服务