秋招喜来,分享一份最新的面经

💼岗位职责:

  1. 负责后端服务的开发与维护;
  2. 技术预研和技术难点攻关,保障系统可用性、稳定性、和可扩展性;
  3. 持续优化系统架构设计,提出问题解决方案。

📋任职要求:

  1. 计算机或相关专业,全日制本科以上学历;
  2. 有扎实的GO语言基础,对数据结构和算法设计具有深刻的理解,熟悉至少一种脚本语言(shell/python/perl);
  3. 2年以上Linux/Unix服务端开发经验,熟悉TCP/IP协议,掌握Linux下高性能网络服务器编程,如异步通信、事件驱动,性能优化等;
  4. 熟悉SQL,并了解常用的SQL优化技巧;熟悉MySQL/Postgresql,并掌握常用性能优化技巧。

✨面试问题回顾:

1. 自我介绍

在自我介绍中,面试者可以重点介绍自己的教育背景、工作经验、技术技能和项目经历。

2. 说一下项目的业务,怎么做的,难点在哪,如何解决?

在消息队列中遇到的数据倾斜问题数据不丢重复消费问题;在 Redis 中使用 hash 以及 Pipline、bigkey 拆解问题;在数据库中进行性能优化分库分表问题等。在难点的阐述可以展示自己在面对复杂问题时的分析和解决能力。对于难点的解决方案,可以详细说明自己采取的技术手段和思路。

3. 面试官问,重复消费set一直增大怎么办?

例如,对于重复消费问题,可以使用时间保存不同的 set 然后设置失效时间,或者再套一层布隆过滤器。

4. InnoDB事务隔离级别,遇到的问题,怎么解决?

InnoDB 支持四种事务隔离级别:读未提交、读已提交、可重复读和串行化。读未提交会导致脏读问题,读已提交可以避免脏读但可能出现不可重复读问题,可重复读可以避免脏读和不可重复读但可能出现幻读问题,串行化可以避免所有问题但性能较低。

对于事务隔离级别带来的问题,可以采用 MVCC(多版本并发控制)、加锁或业务代码解决等方法。

5. InnoDB 有哪些锁?

InnoDB 支持数据库锁、表锁和行锁。

6. Redis key过期策略

Redis 支持惰性删除、定期删除和定时删除三种 key 过期策略。

  • 惰性删除是在访问 key 时检查其是否过期,如果过期则删除。这种策略可以节省系统资源,但可能会导致过期 key 长时间占用内存。
  • 定期删除是定期检查一定数量的 key,如果发现过期则删除。这种策略可以及时清理过期 key,但可能会消耗一定的系统资源。

7. Redis string底层数据结构

Redis string 的底层数据结构根据字符串的长度不同而有所不同,在底层使用了简单动态字符串(Simple Dynamic String, SDS)作为其数据结构。当字符串长度小于 44 时,使用连续内存的 object 存储;当字符串长度大于 44 时,分两次使用 object 存储,可以提高数据存储效率。

8. go的channel怎么实现

Go 的 channel 是一种用于在 goroutine 之间进行通信的机制。它通过队列实现了数据的发送和接收,可以实现同步和异步的通信方式。

Channel字段解释

  • qcount: 当前队列中的元素个数。
  • dataqsiz: 环形队列的大小。
  • buf: 指向环形队列的指针,用于存储实际的数据。
  • elemsize: 元素的大小。
  • closed: 标记 channel 是否关闭。
  • elemtype: 元素的类型信息。
  • sendx: 发送索引,指向当前发送位置。
  • recvx: 接收索引,指向当前接收位置。
  • recvq: 等待接收的 goroutine 队列。
  • sendq: 等待发送的 goroutine 队列。
  • lock: 互斥锁,保护 hchan 结构。

9. 浏览器输入 https://www.baidu.com 从网络的角度说一下流程

  • 当浏览器输入 https://www.baidu.com 时,首先会进行 DNS 解析,查找域名对应的 IP 地址。浏览器会先检查本地缓存,如果没有找到,则会向网络上的 DNS 服务器发送请求。
  • 找到 IP 地址后,浏览器会与服务器建立 TCP 连接,进行三次握手。如果是 HTTPS 协议,还会进行 TLS 加密,先进行非对称加密交换密钥,然后再进行对称加密进行数据传输。
  • 服务器接收到请求后,会返回 CSS、JS、HTML 等文件,浏览器解析这些文件并显示页面。

10. Go 逃逸分析

Go 的逃逸分析是一种编译器技术,用于确定变量的存储位置。通过逃逸分析,编译器可以决定变量是分配在栈上还是堆上。

变量类型不确定:当变量的类型在编译期间无法确定时,编译器可能会将该变量分配在堆上而不是栈上。

有全局变量引用:

如果一个局部变量被全局变量引用,那么这个局部变量可能会逃逸到堆上。

给 slice 分配的长度太大:

如果给 slice 分配的长度非常大,可能会导致栈空间不足,从而使 slice 逃逸到堆上。

给 slice 分配的长度不定:

如果 slice 的长度在运行时才能确定,那么编译器可能会将其分配在堆上。

11. Sync 包有哪些东西

1. sync.Mutex(互斥锁)

  • 用途:用于保护共享资源,确保在同一时间只有一个 goroutine 可以访问被保护的资源。
  • 工作原理:当一个 goroutine 获得互斥锁后,其他 goroutine 试图获取该锁时会被阻塞,直到持有锁的 goroutine 释放锁。

2. sync.RWMutex(读写互斥锁)

  • 用途:适用于读多写少的场景,允许多个 goroutine 同时读取共享资源,但在写操作时需要独占访问。
  • 工作原理:分为读锁和写锁。多个 goroutine 可以同时获取读锁进行读取操作,但当有一个 goroutine 获取写锁时,其他 goroutine 无论是读锁还是写锁都将被阻塞,直到写锁被释放。

3. sync.Map

  • 用途:提供了一种并发安全的 map 类型,无需使用传统的互斥锁来保护对 map 的读写操作。
  • 工作原理:内部使用了一些复杂的技术来实现并发安全,例如原子操作和分段锁等。可以同时支持多个 goroutine 进行读写操作,而无需显式地加锁。

4. sync.Once

  • 用途:确保一个函数在程序运行期间只被执行一次。
  • 工作原理:内部使用了一个原子变量和互斥锁来保证只执行一次。当多个 goroutine 同时调用包含sync.Once的函数时,只有第一个调用会执行函数体,其他调用会被阻塞直到第一次调用完成。

5. sync.Pool

  • 用途:提供了一种对象池的机制,可以重复利用已经创建的对象,减少对象的创建和销毁开销。
  • 工作原理:当一个 goroutine 需要一个对象时,可以从对象池中获取一个可用的对象。如果对象池中没有可用的对象,会创建一个新的对象。当一个 goroutine 不再需要一个对象时,可以将其放回对象池中,以便其他 goroutine 可以复用。

12. 职业规划

13. 期望薪资

14. 反问

  1. 公司业务
  2. 工作时间

欢迎关注 ❤

我们搞了一个**********,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

#面经##Go语言##面试##秋招##职业规划#
Go面试题汇总 文章被收录于专栏

汇总高频且经典的Go面试题,Go面试不用东奔西走,看这个面试题就Go了。

全部评论

相关推荐

好像是有一个考试的,考完了之后很早就进入面试中的流程了,到9.23左右才约面,最后约的9.26一面:1. 自我介绍2. IIC总线3. UART、IIC、SPI、CAN的对比4. 为什么要有Linux系统,怎么看到总线驱动设备这么一套框架5. Linux是怎么去找驱动的6. Linux驱动具体做过些什么7. 具体怎么做Linux驱动开发8. Linux和RTOS的内存管理9. 具体Linux里面是怎么分配内存的10. 怎么映射地址的11. TLB知道吗,具体的虚拟地址到物理地址,怎么找到的,怎么分配的12. 内存分配的算法13. 知道best fit吗?14. 怎么看待内存碎片,怎么合并15. 怎么减少内存碎片的出现16. 是否有办法做到内存碎片不出现17. Linux怎么做内存管理的,跟RTOS有什么区别18. Linux对内存是否有优化的管理算法19. 文件系统20. 进程线程21. 锁的简单理解22. 中断里能不能用互斥锁(这个不太会,但答案是知道的是不行,可以用自旋锁)23. volatile关键字(这个被拷打了很久,我记得是直接从内存读取,但面试官说我说反了,这个我纠结了很久)24. CPU怎么调用函数的25. 函数如何传参26. 内存怎么分配的,会分配成什么样子27. 变量会存在内存的哪里28. 有用过yolo,知道些什么,是否考虑做算法29. 系统启动的具体流程(最后说了STM32的启动过程)30. ST从FLASH启动,为什么是0x08000000(留给SRAM和其他内部RAM)31. 经典反问业务就是做一些芯片的底层开发,也有协议开发,是一个非常大的部门,跟硬件相关的都在这个部门内去完成。一共三面,然后等通知。#秋招##嵌入式##通信硬件人笔面经互助#
查看31道真题和解析 通信硬件人笔面经互助
点赞 评论 收藏
分享
阿里凉经一面1.问了简历上的三个项目 逐一介绍 逐一解答2.用的气压计什么精度 怎么实现定高3.面试官挺喜欢我的第三个项目 问我比赛完后有没有继续去落地下面问问基础4.主要使用的语言5.怎么理解C++的封装 继承 多态6.堆和栈的区别7.进程和线程的区别8.讲了之后再自己顺便讲了多进程、多线程的方法9.父进程和子进程的区别10.讲讲TCP和UDP面试官:有什么问题问我?复盘:体验不错 得到了面试官的认可 面试后状态就显示通过了技术二面 80分钟1.你觉得你哪个项目最有难度 介绍一下2.用的6ull是arm几的 几核的3.用的stm32有什么参数 (朋友们对自己用的硬件要有了解)4.Mpu6050的一些可选参数是什么5.用的气压计觉得有什么缺点6.如何处理和过滤噪声数据?你提到卡尔曼滤波能介绍一下吗7.在设计嵌入式系统时,如何进行硬件与软件的协同设计?8.中断上下文了解吗?具体做了什么 有哪些寄存器 能画图表示过程吗?9.我看你项目里有 linux 驱动 你知道windows和linux 驱动的异同点吗?10.可以手写一个i2c驱动吗?讲讲原理也行11.读过freertos 源码吗?有了解过那些RTOS?说说12.面试官:了解linux吗?我:了解面试官:讲讲Linux 的宏内核有什么优势相较于其他的系统讲讲linux 内核,linux源码看过一部分吗?知道进程和线程吗?进程调度?我:了解一部分假如你做一个进程管理系统 可以参考linux内核  你可以说说你的想法13. 手撕:一道hard 。。。。。最后:你有什么想问我的二面凉我面试看的是大佬的面经,链接放下边了  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
查看21道真题和解析
点赞 评论 收藏
分享
1 3 评论
分享
牛客网
牛客企业服务