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

💼岗位职责:

  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. 工作时间

欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/54791.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分拆逆势上会,兴福电子部分专利来自母公司,独立性被拷问

作者:Cindy 来源:IPO魔女 公司拟募集资金12.10亿元,保荐机构为天风证券。兴福电子2023年5月就提交了上市申请,期间经历了2轮问询,一年多时间就开启上会。 然而值得注意的是,兴福电子属于分拆上市&#xff…

亚马逊IP关联揭秘:发生ip关联如何处理

在亚马逊这一全球领先的电商平台上,IP关联是一个不可忽视的问题,尤其是对于多账号运营的卖家而言。本文将深入解析亚马逊IP关联的含义、影响以及应对策略,帮助卖家更好地理解和应对这一问题。 什么是亚马逊IP关联? 亚马逊IP关联…

Java高级Day51-apacheDBUtils

136.ApDBUtils 基本介绍 commons-dbutils 是 Apache 组织提供的一个开源JDBC工具类库,它是对JJDBC的封装,使用dbutils能极大简化jdbc编码的工作量 QueryRunner类:该类封装了SQL的执行,是线程安全的。可以实现增删改查和批处理 …

【最新华为OD机试E卷-支持在线评测】字符串变换最小字符串(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

MySQL练手题--日期连续类型(困难)

一、准备工作 Create table If Not Exists Failed (fail_date date); Create table If Not Exists Succeeded (success_date date); Truncate table Failed; insert into Failed (fail_date) values (2018-12-28); insert into Failed (fail_date) values (2018-12-29); inser…

map的使用

pair类型介绍 map底层的红⿊树节点中的数据&#xff0c;使⽤pair<Key, T>存储键值对数据 typedef pair<const Key, T> value_type; template <class T1, class T2> struct pair {typedef T1 first_type;typedef T2 second_type;T1 first;T2 second;pair() : …

Unity的Text组件中实现输入内容的渐变色效果

要在Unity的Text组件中实现输入内容的渐变色效果&#xff0c;默认的Text组件不直接支持渐变色。但是&#xff0c;你可以通过以下几种方式实现&#xff1a; ### 1. **使用Shader**来实现渐变效果 通过自定义Shader为Text组件创建一个渐变效果。这是一个常用的做法&#xff0…

MySQL---创建数据库(基于SQLyog)

目录 0.前言 1.基本认识 1.1编码集 1.2检验规则 2.库的创建和销毁 2.1指令介绍 2.2你可能会出现的问题 3.查看数据库属性 4.创建指定数据库 5.创建表操作 0.前言 之前写过一篇这个关于表的创建和销毁的操作&#xff0c;但是当时是第一次学习&#xff0c;肯定有些地方…

初识 C 语言(一)

目录 一、 第一个 C 程序1. printf() 函数和 stdio.h 头文件2. main() 函数和 return 语句 二、类型和变量1. C 语言中的基本类型2. 变量的创建和命名规则3. 类型和变量的大小 三、printf() 函数和 scanf() 函数1. printf() 函数的使用2. 各种类型的输出格式3. scanf() 函数的使…

2. 网络模型、协议

网络模型、协议 一、OSI七层模型1、OSI七层作用2、数据封装、解封装 二、典型的协议1、应用层2、传输层2.1 TCP建立连接&#xff0c; 三次握手2.2 断开连接&#xff0c;四次挥手 3、网络层 一、OSI七层模型 Open System Interconnect 开放式系统互连模型 降低数据在网络中传输…

web基础—dvwa靶场(十一)CSP Bypass

CSP Bypass(CSP 绕过) 内容安全策略&#xff08;CSP&#xff09;用于定义脚本和其他资源可以从何处加载或执行&#xff0c;本模块将指导您根据开发人员犯下的常见错误来绕过该策略。 这些漏洞都不是 CSP 中的实际漏洞&#xff0c;它们都是实现 CSP 的方式中的漏洞。 绕过内容安…

智慧城市主要运营模式分析

(一)运营模式演变 作为新一代信息化技术落地应用的新事物,智慧城市在建设模式方面借鉴了大量工程建设的经验,如平行发包(DBB,Design-Bid-Build)、EPC工程总承包、PPP等模式等,这些模式在不同的发展阶段和条件下发挥了重要作用。 在智慧城市发展模式从政府主导、以建为主、…

Eigen之SelfAdjointEigenSolver

Eigen::SelfAdjointEigenSolver 是 Eigen 库中的一个类,用于计算自伴随矩阵(对称矩阵)的特征值和特征向量。自伴随矩阵是指其等于自身的共轭转置的矩阵,通常在物理和工程中出现,比如协方差矩阵、赫尔米特矩阵等。 常用用法: 计算特征值和特征向量: SelfAdjointEigenSol…

计算机毕业设计 基于Flask+Vue的博客系统 Python毕业设计 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Linux嵌入式驱动开发指南(速记版)---Linux基础篇

第一章 Ubuntu系统入门 uname -a #查看内核版本 cat etc/issue #查看系统版本 1.1 Linux磁盘管理 1.1.1 Linux磁盘管理基本概念 关键词&#xff1a; Linux 磁盘管理 挂载点 /etc/fstab文件 分区 ls /dev/sd* 联系描述&#xff1a; Linux 磁盘管理体系通过“挂载点”概念替代…

[数据集][目标检测]手机识别检测数据集VOC+YOLO格式9997张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;9997 标注数量(xml文件个数)&#xff1a;9997 标注数量(txt文件个数)&#xff1a;9997 标注…

linux之mysql安装

1:mysql安装包下载 下载地址 可私信我直接获取安装包 2:linux下wget命令下载 下载地址 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz3:手动安装 将自己的安装包上传到对应的位置 解压 压缩包 使用命令 tar -zxvf mysql-5.7…

Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版

CleanMyMac X 4.15.6 for mac中文版下载是一款功能更加强大的系统优化清理工具&#xff0c;软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉&#xff0c;节省宝贵的磁盘空间。CleanMyMac X 4.15.6 for mac 软件与最新macOS系统更加兼容&#xff0c;流畅地…

华为静态路由(route-static)

静态路由的组成 在华为路由器中&#xff0c;使用ip route-static命令配置静态路由。 一条静态路由主要包含以下要素&#xff1a; 目的地址&#xff1a;数据包要到达的目标IP地址 子网掩码&#xff1a;用于指定目的地址的网络部分和主机部分 下一跳地址&#xff08;可选&#…

中国蚁剑(antSword)安装使用

antSword下载 antSword-Loader下载 作者&#xff1a;程序那点事儿 日期&#xff1a;2024/09/12 19:35 中国蚁剑&#xff08;AntSword&#xff09;是一款跨平台的开源网站管理工具&#xff0c;旨在满足渗透测试人员的需求。它是一个功能强大的工具&#xff0c;可以帮助用户管理…