No.9 滴滴、华为、蓝色光标、人工智能研究院、电视家面经整理(上-golang基础篇)

简介: No.9 滴滴、华为、蓝色光标、人工智能研究院、电视家面经整理(上-golang基础篇)

作者寄语大环境不好的的情况下,2月8号还是毅然选择离职,写下这篇文章也已经过了有15天。工作近两年没有休息,本来想的应该在云南玩一个月再开始找,听了同事的话:“找呗,别玩一圈回来啥都忘了!这...”。面试的重心自己主要放在南京杭州和上海。开始投递简历就是随之而来的面试,一个接一个想走也走不开了。刚开始还是定向捕捞,最后时间周期太长太浪费时间,那就“你 你 你 一起上 !!”,找工作不丢人,找不到工作才丢人。面试如疯狗,拿了offer有了退路才可以驻足停留回头去选择。

640.png

(场景一:那边只能给到15*13,那边觉得你聪明,想要培养你,大环境不好只能给到这,你考虑考虑,不行咱再重新找(猎头)

场景二:同一公司一早上给我连续来5面,然后给我说如果需要到时候还需要来公司和老板再面试一次...(互联网公司)

场景三:同学你还在寻找岗位吗?这边来了通知说还有一个名额空缺,你如果愿意来我给你发offer。之前聊过的12*14(流量软件)

场景四:boss很喜欢你,你可以考虑一下来我们这边,发展空间会很大。(国资背景)

场景五:技术面结束,我:如果你觉得合适,也请拿出你们的诚意尽快安排二面,三面。我有其他offer将入职... 面试官:嗯嗯,明白,我们会加快速度。(都不知道啥名字)

....

面的太多真的会麻木,“面试官你好,我是来自xxx大学xxx专业21级毕业生....” 现在眼睛一闭都是这几句话在脑子里疯狂的输出。


问题1.进程线程和协程

进程

1.进程是程序一次动态执行的过程,是程序运行的基本单位2.每个进程都有自己的独立内存空间不同进程通过进程间通信来通信3.进程占据独立的内存,所以上下文进程间的切换开销(栈、寄存器、页表、文件句柄等)比较大,但相对比较稳定安全。

线程

1.线程又叫做轻量级进程是CPU调度的最小单位2.线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。3.多个线程共享所属进程的资源,同时线程也拥有自己的专属资源。4.程间通信主要通过共享内存。上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。

协程

1.协程是一种用户态的轻量级线程协程的调度完全由用户控制

2.一个线程可以拥有多个协程,协程不是被操作系统内核所管理,而完全是由程序所控制。

3.与其让操作系统调度,不如我自己来,这就是协程。


问题2.谈谈gmp模型(高频)

640.png

Tips: Golang面试这个问题被问到的概率还是蛮大的,在脑海里记住上面的图片和要点,用自己的话陈述清楚就好。

问题3.深度说一下slice 和map 越深越好

Go中的slice是一种动态数组,它可以自动扩容和缩容,而且可以存储任何类型的数据。它有三个元素:指针、长度、容量Go中的slice是基于数组实现的,它的底层实现是一个指针,指向一个连续的内存块,存储着元素的值。Go中的map是一种键值对的数据结构,它可以存储任何类型的值,而且可以根据键快速查找值。它的实现是基于哈希表的,因此可以实现O(1)的查找性能。它的特点是查找和插入的时间复杂度都是O(1),但是删除操作的时间复杂度是O(n)。Go中的map是基于哈希表实现的,它的底层实现是一个数组,存储着键和值的键值对

问题4.pbuff数据格式 和json格式有什么区别?

两者最大的区别在于数据格式,JSON是一种文本格式,它使用文本来表示数据;而Protocol Buffer是一种二进制格式,它使用二进制来表示数据。由于Protocol Buffer使用二进制来表示数据,因此它的传输效率更高,更适合在网络上进行数据传输。

参考文章:https://www.cnblogs.com/gjc917/p/15492469.html


问题5.数组和切片有什么区别?切片和数组相比有什么缺点?

数组和切片都是Go语言中用于存储一组元素的容器,但它们有一些区别:数组的大小是固定的,而切片的大小是可变的;数组元素类型必须是相同的,而切片元素类型可以不同;数组是值类型,而切片是引用类型从性能上来说,数组的查找速度比切片要快,因为数组的元素是连续存储的,可以快速定位到指定的元素。而切片的元素是分散存储的,需要遍历切片中的每个元素才能找到指定的元素,所以查找的速度会比较慢。


问题6.并发参数(QPS)是什么意思?

QPS是每秒查询次数(Queries Per Second)的缩写,它表示每秒可以处理的查询请求数量,是衡量系统性能的一个重要指标。在并发参数API中,QPS表示每秒可以处理的并发参数请求数量,用于衡量系统的并发处理能力。


问题7.栈和队列的区别?什么场景下分别要用栈和队列?

1.栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构;

2.只允许在一端插入和删除数据,而队列允许在两端插入和删除数据;

3.栈的操作更简单,而队列的操作更复杂;

4.因为栈的操作简单,所以它的时间复杂度更低,而队列的时间复杂度更高

一般来说,适用于搜索算法,比如深度优先搜索算法;而队列适用于广度优先搜索算法。此外,也可以用来实现浏览器的前进和后退功能,而队列则可以用来实现操作系统中的进程调度等。

问题8.代码什么情况下会panic?

一般来说,当go代码中出现了不可恢复的错误时,会触发panic,比如:数组越界、空指针引用等。此外,当go代码中使用了不安全的API时,也会触发panic。举例:map键值对没有key的时候就会引起恐。

问题9.说说你了解的context?代码中哪里会用到?

Golang 中的context 是一个用于在 goroutine 之间传递数据的结构体,它可以用来存储和传递上下文信息,比如请求的超时时间、请求的取消状态等。使用context可以有效地实现goroutine之间的通信,并且可以更好地管理goroutine的生命周期。

问题10.groutine有阻塞怎么处理?

使用goroutine时,可以使用channel来处理goroutine之间的阻塞,channel可以用来在goroutine之间传递数据,并且可以设置channel的buffer大小,以防止goroutine之间的阻塞。


问题11:map是否是有序的 for range map 的时候是有序输出还是无序输出?

go for range循环map是无序的 , 这个是go team团队 有意为之在进行循环遍历的时候 ,生成了一个随机数作为遍历开始的位置可以for range循环map取出所有的key ,  sort.Strings(keys) , 排序所有的keys再循环所有的keys  , 按这个循环取出map里的值如果不依赖map中的key的话 , 或者map的value是个结构体 , 里面有key的值 , 不依赖map的话可以把它转成slice。


作者Tips:golang硬性的知识问的不多,遗忘了一些,写下这篇文章的时候,把自己印象深刻的给大家进行梳理,希望对大家有用。下一篇文章会为大家梳理面试中问到的关于gin,beego,iris,gorm等框架相关问题。



文章订正:

《Go必知必会》No.8 “Golang开发新手常犯的50个错误”文章中,因为拷贝的原因,在7.幽灵变量模块示例代码中出现“不允许左大括号单独一行”的低级错误,被微信号为:Smart33690 “沛公”同学指出错误,随后对No.8文章立即进行纠正。在这里作者仅代表“Go必知必会”对“沛公”同学表示最真挚的感谢!

相关文章
|
11月前
|
消息中间件 人工智能 运维
No.11 滴滴、华为、蓝色光标、人工智能研究院、电视家面经整理(中2-微服务篇)
No.11 滴滴、华为、蓝色光标、人工智能研究院、电视家面经整理(中2-微服务篇)
|
11月前
|
人工智能 Go API
No.10 滴滴、华为、蓝色光标、人工智能研究院、电视家面经整理(中1-web框架篇)
No.10 滴滴、华为、蓝色光标、人工智能研究院、电视家面经整理(中1-web框架篇)
|
人工智能 自然语言处理 搜索推荐
赋予LLM视觉理解能力,360人工智能研究院开源中文多模态对话模型SEEChat(1)
赋予LLM视觉理解能力,360人工智能研究院开源中文多模态对话模型SEEChat
170 1
赋予LLM视觉理解能力,360人工智能研究院开源中文多模态对话模型SEEChat(1)
|
12天前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能:从基础理论到实践应用
【8月更文挑战第39天】在本文中,我们将深入探讨人工智能(AI)的基本概念、发展历程以及其在现实世界中的应用。我们将首先介绍AI的定义和主要分类,然后回顾其发展历史,最后通过一个实际的代码示例来展示AI的应用。无论你是AI领域的初学者还是有一定基础的学习者,这篇文章都将为你提供有价值的信息和启示。
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
人工智能在教育中的创新应用:个性化学习的未来
【9月更文挑战第18天】人工智能在教育中的创新应用正在深刻改变着我们的教学方式和学习体验。从个性化学习方案的制定到智能化辅导与反馈,从多元化学习资源的推荐到自动化评分与智能考试系统,AI技术正在为教育领域带来前所未有的变革。面对这一变革,我们需要以开放和批判的态度拥抱它,共同探索AI时代教育的无限可能,为每一个学习者创造更美好的未来。
40 12
|
3天前
|
数据采集 人工智能 自然语言处理
探索软件测试中的人工智能应用
在当今快速发展的技术世界中,软件测试作为确保软件质量的关键环节,正经历着前所未有的变革。随着人工智能技术的不断成熟和应用,其在软件测试领域的潜力逐渐显现,为提升测试效率、准确性和自动化水平提供了新的可能性。本文将深入探讨人工智能在软件测试中的应用现状、面临的挑战以及未来的发展趋势,旨在为读者提供一个关于AI如何改变软件测试行业的全面视角。
|
2天前
|
机器学习/深度学习 存储 人工智能
深度学习中的模型压缩技术在人工智能领域,深度学习技术的迅猛发展带来了巨大的计算资源需求。为了解决这一问题,模型压缩技术应运而生。本文将介绍什么是模型压缩、常见的模型压缩方法以及其在实际应用中的意义。
随着深度学习技术的广泛应用,计算资源的需求也大幅增加。为减少资源消耗,提升模型效率,模型压缩技术成为研究热点。本文探讨了模型压缩的定义、主流方法和其重要性。通过量化、剪枝、知识蒸馏和轻量级架构等策略,模型得以在保持性能的同时减小体积,从而适用于资源受限的环境。这些技术不仅降低了计算成本,还推动了深度学习在移动设备和边缘计算等领域的应用,使AI技术更加普及和实用。总之,模型压缩在平衡模型性能与资源消耗之间发挥着关键作用,是未来AI发展的重要方向。
|
10天前
|
机器学习/深度学习 人工智能 算法
探索人工智能:机器学习的奥秘与应用
本文深入浅出地探讨了人工智能领域中的核心技术——机器学习,揭示了其背后的原理和广泛的实际应用。通过浅显易懂的语言和生动的例子,本文旨在为非专业读者打开一扇了解并利用机器学习的大门,同时激发对这一前沿技术的兴趣和思考。
24 1
|
15天前
|
机器学习/深度学习 数据采集 人工智能
探索人工智能在文本情感分析中的应用
【9月更文挑战第4天】本文旨在通过一个简化的模型,介绍如何利用AI技术对文本进行情感分析。我们将从基础理论出发,逐步深入到实际操作,展示如何训练一个简单的情感分析模型。文章不仅涵盖了理论知识,还提供了代码示例,帮助读者更好地理解并实践所学知识。
|
21天前
|
机器学习/深度学习 人工智能 算法
探索人工智能在医疗诊断中的应用与挑战
【7月更文挑战第61天】 随着技术的进步,人工智能(AI)已逐渐渗透到各行各业,特别是在医疗领域。AI在提高诊断准确性、个性化治疗和疾病预防方面的潜力巨大。本文旨在探讨AI在医疗诊断中的应用,包括图像识别、模式分析和预测建模,并分析其面临的主要挑战,如数据隐私、算法透明度以及医疗专业人员的接受度。通过实例说明AI如何辅助医生进行更精确的决策,同时指出了目前技术的局限性和未来的发展方向。