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

💼岗位职责:

  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.xdnf.cn/news/148241.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx-HTTP和反向代理web服务器

概述 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器 ,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,公开版本1.19.6发布于20…

汽车总线之---- CAN FD总线

CAN FD 最高可支持8M/s的通信速率,从传统CAN到CAN FD的转换是很容易实施和推广的。 CAN FD报文的帧:标准帧,扩展帧 CAN FD 标准帧结构 CAN FD 报文的标准帧与CAN 报文的标准帧的区别 CAN FD 报文的标准帧与CAN FD报文的扩展帧的区别&…

手机在网状态查询接口如何用Java进行调用?

一、什么是手机在网状态查询接口? 手机在网状态查询接口,又叫运营商在网状态查询,手机号在网状态查询,传入手机号码,查询该手机号的在网状态,返回内容有正常使用、停机、在网但不可用、不在网(…

JS 历史简介

目录 1. JS 历史简介 2. JS 技术特征 1. JS 历史简介 举例:在提交用户的注册信息的时候,为避免注册出现错误后重新填写信息,可以在写完一栏信息后进行校验,并提示是否出现错误,这样会大大提高用户提交的成功率&…

学习记录:js算法(四十二): 寻找两个正序数组的中位数

文章目录 寻找两个正序数组的中位数我的思路网上思路 总结 寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 示例 1: 输入:nums1 [1,3], n…

美食共享圈:Spring Boot校园周边美食平台

第二章 系统分析 2.1 可行性分析 可行性分析的目的是确定一个系统是否有必要开发、确定系统是否能以最小的代价实现。其工作主要有三个方面,分别是技术、经济和社会三方面的可行性。我会从这三个方面对网上校园周边美食探索及分享平台进行详细的分析。 2.1.1技术可行…

解决 TortoiseGitPlink Fatal Error:深入解析

解决 TortoiseGitPlink Fatal Error:深入解析 在 Windows 平台上,开发者使用 Git 和 TortoiseGit 进行版本控制时,有时会遇到 TortoiseGitPlink Fatal Error。该错误通常是在推送/拉取代码时,客户端未能提供正确的 SSH 密钥。 1…

Unreal Engine 5 C++: Asset Batch Duplication插件编写02

目录 准备工作 "Scripting library" 三个最重要的功能(前两个是UEditorUtilityLibrary中的) 自动创建声明: TArray T 的含义 F 的含义 Live Coding (Ctrlalt F11) Live Coding 的工作流程&#xff…

SpringCloud-07 GateWay01 网关技术

Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点IP端口信息,从而加强安全保护。Spring Clou…

PHP、Java等其他语言转Go时选择GoFly快速快速开发框架指南

概要 经过一年多的发展GoFly快速开发框架已被一千多家科技企业或开发者用于项目开发,它的简单易学得到其他语言转Go首选框架。且企业版的发展为GoFly社区提供资金,这使得GoFly快速框架得到良好的发展,GoFly技术团队加大投入反哺科技企业和开…

科研绘图系列:R语言ggplot2画热图(heatmap)

文章目录 介绍加载R包导入数据数据预处理画图导出数据系统信息介绍 热图(Heatmap)是一种数据可视化技术,它通过颜色的变化来表示数据的大小或者密度。热图通常用于展示两个变量之间的关系,或者在二维空间上展示数据的分布情况。以下是热图可以表示的一些内容: 数据分布:…

「C++系列」动态内存

【人工智能教程】,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。 点击跳转到网站:【人工智能教程】 文章目录 一、动态内存1. 使用new和delete①分配单个对象②分配对象数组 2. …

python全栈学习记录(十七)logging、json与pickle、time与datatime、random

logging、json与pickle、time与datatime、random 文章目录 logging、json与pickle、time与datatime、random一、logging二.json与pickle三.time与datatime四.random 一、logging logging模块用来记录日志信息。 import logging # 进行基本的日志配置 logging.basicConfig( fi…

图文深入理解SQL语句的执行过程

List item 本文将深入介绍SQL语句的执行过程。 一.在RDBMS(关系型DB)中,看似很简单的一条已写入DB内存的SQL语句执行过程却非常复杂,也就是说,你执行了一条诸如select count(*) where id 001 from table_name的非常简…

[WMCTF2020]Make PHP Great Again 2.01

又是php代码审计,开始吧. 这不用审吧,啊喂. 意思就是我们要利用require_once()函数和传入的file的value去读取flag的内容.,貌似呢require_once()已经被用过一次了,直接读取还不行,看一下下面的知识点. require_once() require…

WebLogic 漏洞复现

1、后台弱⼝令GetShell 默认账号密码:weblogic/Oracle123 weblogic常⽤弱⼝令:https://cirt.net/passwords?criteriaweblogic 这⾥注意, 单个账号错误密码5次之后就会⾃动锁定。 http://47.121.212.195:7001/console 2、登录后台后&#…

恒生科指八连涨,汽车股强势

9月20日电 周五,港股三大股指集体收涨。恒生指数涨1.36%报18258.57点,连续第六个交易日上涨;恒生科技指数涨1.43%报3703.84点,连续第八个交易日上涨,创逾两个月来新高;恒生中国企业指数涨1.21%报6381.5点&a…

项目扩展五:交互式:command-line interface版本的实现

项目扩展五:command-line interface版本的实现 一、CLI交互的设计1.为何要设计这个CLI交互2.具体设计1.启动服务2.选择信道3.选择虚拟机4.正式业务注意:1.消费者与生产者跟信道的关系2.消息处理回调函数的问题3.消息确认的问题 5.其他功能1.打印功能2.查…

STM32精确控制步进电机

目的:学习使用STM32电机驱动器步进电机,进行电机运动精确控制。 测试环境: MCU主控芯片STM32F103RCT6 ;A4988步进电机驱动器模块;微型2相4线步进电机10mm丝杆滑台,金属丝杆安装有滑块。 10mm二相四线微型…

机器学习之非监督学习(二)异常检测(基于高斯概率密度)

机器学习之非监督学习(二)异常检测(基于高斯概率密度) 0. 文章传送1.案例引入2.高斯正态分布3.异常检测算法4.异常检测 vs 监督学习5.算法优化6.代码实现 0. 文章传送 机器学习之监督学习(一)线性回归、多…