当前位置: 首页 > article >正文

腾讯面经,有点难度~

今天分享组织内的朋友在腾讯安全的实习面经。

内容涵盖了QPS测试方法、SQL聚合查询、Linux进程管理、Redis数据结构与持久化、NAT原理、Docker隔离机制、Go语言GMP调度模型、协程控制、系统调用流程、变量逃逸分析及map操作等等知识点。

下面是我整理的面经详解:

面经详解

一个表,里面有数据列,id, name, class,查学生最喜欢的前10个课程,sql语句实现

SELECT class, COUNT(*) AS popularity 
FROM your_table_name 
GROUP BY class 
ORDER BY popularity DESC 
LIMIT 10; 

解释:

  • SELECT class, COUNT(*) AS popularity:选择 class 列,并对每个 class 分组内的记录进行计数,将计数结果命名为 popularity
  • FROM your_table_name:指定要查询的表名。
  • GROUP BY class:按照 class 列进行分组,这样每个不同的 class 会形成一个组。
  • ORDER BY popularity DESC:按照 popularity 列进行降序排序,使得受欢迎程度高的课程排在前面。
  • LIMIT 10:只返回前10条记录,即最受欢迎的前10个课程。

怎么用linux命令查PID,ps grep, pgrep, top

  • ps + grep:
    • 示例:ps -ef | grep "program_name"ps -ef 会列出所有进程的详细信息,grep "program_name" 会在这些信息中过滤出包含 program_name 的行,其中就包含了进程的PID。例如,要查找 nginx 进程的PID,可以使用 ps -ef | grep "nginx"
  • pgrep:
    • 示例:pgrep "program_name"pgrep 命令会直接根据进程名查找并返回进程的PID。例如,pgrep "httpd" 会返回所有 httpd 进程的PID。
  • top:
    • 运行 top 命令会进入一个动态的进程监控界面,在这个界面中可以看到各个进程的信息,包括PID。可以使用 / 键输入进程名进行搜索,找到目标进程的PID。按 q 键可以退出 top 界面。

查当前有哪些进程, ps

  • ps -e:显示所有进程的信息,包括其他用户的进程。例如,ps -e 会列出系统中所有正在运行的进程。
  • ps -ef:显示更详细的进程信息,包括进程的完整命令行、父进程ID等。例如,ps -ef 可以清晰地看到每个进程的启动命令和父进程的关系。
  • ps aux:也是常用的查看所有进程信息的命令,a 表示显示所有用户的进程,u 表示以用户为中心显示详细信息,x 表示显示没有控制终端的进程。例如,ps aux 可以全面地查看系统中所有进程的详细状态。

Redis有哪些数据结构

  • String(字符串):是Redis最基本的数据结构,它可以存储字符串、整数或浮点数。可以进行设置值、获取值、递增、递减等操作,常用于缓存、计数器等场景。
  • Hash(哈希):是一个键值对的集合,适合存储对象。例如,可以将用户信息存储在一个哈希中,每个字段对应一个属性,如用户名、年龄等。
  • List(列表):是一个双向链表,支持在列表的两端进行插入和删除操作。可以用于实现消息队列、栈等数据结构。
  • Set(集合):是一个无序且唯一的数据集合,支持添加、删除、判断元素是否存在等操作。可以用于去重、交集、并集等操作,例如实现共同好友功能。
  • ZSet(有序集合):和集合类似,但每个元素都有一个分数,根据分数进行排序。常用于排行榜、热门列表等场景。

持久化RDB,AOF,save/applendly

  • RDB(Redis Database):
    • 原理:RDB是将Redis在某个时间点的数据快照保存到磁盘上。可以通过手动执行 SAVEBGSAVE 命令来触发持久化操作,也可以通过配置定期执行。
    • 优点:文件紧凑,适合用于备份和恢复大规模数据,恢复速度快。
    • 缺点:可能会丢失最后一次快照之后的数据,因为它是定期进行快照的。
  • AOF(Append Only File):
    • 原理:AOF是将Redis执行的所有写操作以日志的形式追加到文件末尾。当Redis重启时,会重新执行这些写操作来恢复数据。
    • 优点:数据安全性高,因为它记录了每一个写操作,最多只会丢失最后一次同步到磁盘的数据。
    • 缺点:文件体积较大,恢复速度相对较慢。
  • save/apply:
    • SAVE 命令会阻塞Redis服务器,直到RDB文件创建完成,期间服务器不能处理其他请求。
    • BGSAVE 命令会在后台异步创建RDB文件,不会阻塞服务器的正常运行。

Zset的底层原理。哈希和跳表

  • 哈希表:Zset使用哈希表来存储成员和分数的映射关系,这样可以在 O(1)O(1) 的时间复杂度内快速查找某个成员的分数。
  • 跳表:跳表是一种有序的数据结构,它通过在每个节点中维护多个指针,使得查找、插入和删除操作的平均时间复杂度为 O(logn)O(log**n) 。Zset使用跳表来实现按分数排序的功能,这样可以快速找到分数范围内的成员。当进行范围查询时,跳表可以高效地定位到起始位置,并按照顺序遍历成员。

nat是怎么实现的,如果内网有两个不同ip访问百度,百度返回消息,怎么知道要返回给哪个ip?

  • NAT(Network Address Translation)实现原理:
    • IP地址转换:NAT设备会将内网的私有IP地址转换为外网的公有IP地址。当内网主机发起对外网的请求时,NAT设备会将请求报文中的源IP地址替换为自己的公有IP地址。
    • 端口映射:除了IP地址转换,NAT设备还会进行端口映射。它会为每个内网主机的请求分配一个唯一的端口号,将这个端口号与内网主机的IP地址和端口号进行映射,并记录在映射表中。
    • 映射表:NAT设备维护一个映射表,记录了内网IP地址、端口号与外网IP地址、端口号的对应关系。当外网服务器返回响应时,NAT设备会根据响应报文中的目的IP地址和端口号,在映射表中查找对应的内网主机,并将响应转发给该主机。
  • 百度返回消息的处理:当内网有两个不同IP访问百度时,NAT设备会为这两个请求分配不同的端口号。百度返回的消息中包含目的IP地址(NAT设备的公有IP地址)和目的端口号,NAT设备根据目的端口号在映射表中查找对应的内网主机IP地址和端口号,然后将消息转发给相应的内网主机。

ping 操作,为什么用ping域名没通,ping ip通了,是因为什么

  • DNS解析问题:当使用 ping 域名时,系统需要先通过DNS服务器将域名解析为对应的IP地址。如果DNS服务器配置错误、DNS服务器故障或域名解析记录存在问题,就会导致域名无法解析为正确的IP地址,从而使得 ping 域名不通。而直接 ping IP地址则绕过了DNS解析过程,所以可以正常通信。
  • 防火墙问题:防火墙可能会限制对某些域名的访问,但不会限制对IP地址的访问。例如,防火墙可能配置了只允许访问特定IP地址的规则,而对域名的访问进行了阻止。在这种情况下,ping 域名会失败,而 ping IP地址可以正常进行。

docker 的隔离性内部是怎么实现的,命名空间,

Docker的隔离性主要通过Linux内核的命名空间(Namespaces)和控制组(cgroups)来实现,这里主要介绍命名空间:

  • PID命名空间:每个Docker容器都有自己独立的PID命名空间,这意味着容器内的进程有自己独立的进程ID,与宿主机和其他容器内的进程ID相互隔离。容器内的进程只能看到自己命名空间内的进程,无法直接访问宿主机或其他容器内的进程。
  • Network命名空间:每个容器都有自己独立的网络命名空间,拥有独立的网络栈,包括网络接口、IP地址、路由表等。容器可以有自己的IP地址和端口,与宿主机和其他容器的网络环境相互隔离。
  • Mount命名空间:容器有自己独立的挂载点,这意味着容器内的文件系统与宿主机和其他容器的文件系统相互隔离。容器可以有自己独立的根文件系统,并且可以在容器内进行挂载和卸载操作,而不会影响到宿主机和其他容器。
  • UTS命名空间:容器可以有自己独立的主机名和域名,与宿主机和其他容器的UTS(Unix Time - Sharing System)环境相互隔离。这样,容器内的进程可以认为自己运行在一个独立的主机上。
  • IPC命名空间:容器有自己独立的进程间通信(IPC)机制,如共享内存、消息队列等。容器内的进程只能与同一容器内的其他进程进行IPC通信,无法直接与宿主机或其他容器内的进程进行IPC通信。

GMP

  • 定义:GMP是Go语言的调度模型,包含三个核心组件:

    1. G(Goroutine):轻量级线程,由Go运行时管理。
    2. M(Machine):操作系统线程,实际执行Goroutine的实体。
    3. P(Processor):逻辑处理器,管理本地Goroutine队列和资源。
  • 调度机制:

    • P绑定到M后,从本地队列或全局队列获取G执行。
    • 当G遇到阻塞(如系统调用),M会释放P并进入阻塞状态,其他M可接管P继续执行其他G。
    • 通过工作窃取(Work Stealing)平衡各P的负载。
  • 优势:减少线程切换开销,实现高并发和高效资源利用。

defer与panic,10个协程用ctrl+c停止,会发生什么

  • defer与panic的执行顺序:
    1. 触发panic后,当前函数会停止执行,逐层执行defer
    2. defer中调用recover(),程序恢复执行;否则程序终止。
  • 10个协程被ctrl+c停止的影响:
    • ctrl+c发送SIGINT信号,默认终止整个进程。
    • 所有协程会立即停止,未执行的defer可能无法触发。
    • 资源泄漏风险:如未释放的文件句柄、数据库连接等。
    • 解决方案:监听信号量(如signal.Notify),在退出前执行清理逻辑。

一个协程在什么情况下可以直接停止,如何杀死它,抢占

  • 协程无法被直接杀死:

    • Go语言设计上不提供强制终止协程的API,需通过协作式退出(如context.Context传递取消信号)。
  • 抢占式调度条件:

    1. 协程执行时间超过10ms(Go 1.14+支持基于信号的抢占)。
    2. 协程进入函数调用或发生系统调用。
  • 实现优雅退出:

ctx, cancel := context.WithCancel(context.Background())go func() {for {select {case <-ctx.Done(): // 监听取消信号 return default:// 业务逻辑 }}}()cancel() // 触发协程退出 

系统调用的过程是怎样的

  • 简单流程:
    1. 用户程序通过库函数(如read())触发系统调用。
    2. CPU切换到内核态,执行内核中对应的系统调用处理函数。
    3. 内核完成操作后,返回结果到用户态,程序继续执行。
  • 详细步骤:
    1. 参数准备:用户程序将系统调用号和参数存入寄存器。
    2. 触发软中断:通过syscall指令或中断向量(如x86的int 0x80)进入内核。
    3. 内核路由:根据系统调用号查表跳转到对应处理函数(如sys_read)。
    4. 权限检查:验证用户空间内存地址合法性。
    5. 执行操作:内核完成文件读写、进程创建等操作。
    6. 返回结果:将返回值存入寄存器,切换回用户态。

逃逸场景

  • 变量逃逸到堆的常见场景:
    1. 返回局部变量地址:函数返回局部变量的指针,导致变量生命周期延长。
    2. 闭包引用:闭包引用外部变量,变量需在堆上分配。
    3. 动态类型:如interface{}类型变量可能触发逃逸。
    4. 大对象:超过栈空间限制的对象(默认栈大小1~2MB)。
    5. 发送指针到channel:接收方可能在其他协程访问变量。
  • 查看逃逸分析:通过go build -gcflags="-m"编译输出逃逸信息。

栈空间的最大分配量

  • 默认限制:Go 1.18+中,单个协程栈初始大小为2KB,动态扩容上限通常为1GB(受操作系统限制)。
  • 调整栈大小:可通过runtime/debug.SetMaxStack修改最大栈大小,但需谨慎避免内存浪费。

局部变量分配到栈还是堆

  • 分配规则:

    • 栈分配:变量生命周期仅限于函数内,且未发生逃逸。
    • 堆分配:变量被外部引用(逃逸),或大小超过栈容量。
  • 示例:

  func stackAlloc() int {x := 42 // 分配到栈 return x }func heapAlloc() *int {x := 42 // 逃逸到堆 return &x }

map判断数据是否存在及删除键

  • 判断存在性:
value, ok := myMap[key]
if ok {
// 存在 
}
  • 删除键:
delete(myMap, key)
  • 底层实现:

    • 哈希表结构:通过哈希函数计算桶位置,解决冲突采用链表或开放寻址。
    • 删除操作:标记对应键值对为删除状态,后续插入可复用空间。

欢迎关注 ❤

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

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

感兴趣的朋友们可以私信我,备注:面试群

相关文章:

腾讯面经,有点难度~

今天分享组织内的朋友在腾讯安全的实习面经。 内容涵盖了QPS测试方法、SQL聚合查询、Linux进程管理、Redis数据结构与持久化、NAT原理、Docker隔离机制、Go语言GMP调度模型、协程控制、系统调用流程、变量逃逸分析及map操作等等知识点。 下面是我整理的面经详解&#xff1a; …...

LeetCode(704):二分查找

二分查找 题目链接 题目&#xff1a;给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 #include<stdio.h> //左闭…...

探索AI的无限可能,体验智能对话的未来,大模型 API 演示

探索AI的无限可能&#xff0c;体验智能对话的未来&#xff0c;大模型 API 演示 效果展示&#xff1a; 项目概述 这是一个基于 Vue 3 TypeScript Vite 构建的 Vista AI 演示项目&#xff0c;旨在提供一个简洁易用的界面来展示 Vista AI 大语言模型的能力。项目包含 API 演示…...

26考研——图_图的存储(6)

408答疑 文章目录 二、图的存储图的存储相关概念邻接矩阵存储方式邻接矩阵的定义顶点的度计算邻接矩阵的特点邻接矩阵的局限性 应用场景邻接矩阵的幂次意义&#xff08;了解即可&#xff09; 邻接表存储方式邻接表定义邻接表结构邻接表的特点 邻接矩阵和邻接表的适用性差异十字…...

Spark读取文件系统的数据(sbt打包测试)-入门级别Demo

学习目标 通过本关卡练习&#xff0c;您将学到&#xff1a; 如何使用Spark访问本地文件和HDFS文件Spark应用程序的编写、编译和运行方法 相关知识 操作系统&#xff1a;Ubuntu 16.04&#xff1b; Spark版本&#xff1a;2.4.0&#xff1b; Hadoop版本&#xff1a;3.1.3。 编…...

5.1 位运算专题:LeetCode 面试题 01.01. 判定字符是否唯一

1. 题目链接 LeetCode 面试题 01.01. 判定字符是否唯一 2. 题目描述 实现一个算法&#xff0c;确定一个字符串的所有字符是否全部唯一&#xff08;即没有重复字符&#xff09;。要求如下&#xff1a; 不使用额外的数据结构&#xff08;如哈希表&#xff09;字符串仅包含小写…...

datawhale组队学习--大语言模型—task4:Transformer架构及详细配置

第五章 模型架构 在前述章节中已经对预训练数据的准备流程&#xff08;第 4 章&#xff09;进行了介绍。本章主 要讨论大语言模型的模型架构选择&#xff0c;主要围绕 Transformer 模型&#xff08;第 5.1 节&#xff09;、详细 配置&#xff08;第 5.2 节&#xff09;、主流架…...

Python虚拟环境:从入门到实战指南

目录 一、为什么需要Python虚拟环境&#xff1f; 二、如何创建Python虚拟环境&#xff1f; 1. 使用venv&#xff08;Python 3.3内置&#xff09; 2. 使用virtualenv&#xff08;第三方工具&#xff09; 3. 使用conda&#xff08;适合数据科学项目&#xff09; 三、虚拟环…...

如何提升 Java 开发能力?

如何提升 Java 开发能力&#xff1f; 要系统提升 Java 开发能力&#xff0c;需从 基础巩固、技术拓展、实战经验、持续学习 四个维度入手。以下是详细的进阶路径和具体建议&#xff1a; 一、夯实 Java 核心基础 深入理解语言特性 必学内容&#xff1a; JVM 原理&#xff1a…...

《TCP/IP网络编程》学习笔记 | Chapter 21:异步通知 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 21&#xff1a;异步通知 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 21&#xff1a;异步通知 I/O 模型同步与异步同步异步对比同步 I/O 的缺点异步 I/O 的优点 理解异步通知 I/O 模型实现异步通知 I/O 模型WSAEventSelect 函数和通知…...

Qt6相对Qt5的主要提升(AI总结)

我&#xff1a; Qt 6 相对于5 有哪些新功能&#xff1f; Qt 6 相对于 Qt 5 有诸多新功能和改进&#xff0c;以下是主要的新增特性&#xff1a; 1. 架构和核心库的重构 模块化设计&#xff1a;Qt 6 采用了更加灵活的模块化设计&#xff0c;开发者可以按需引入必要的功能模块&a…...

消息队列ActiveMQ、RabbitMQ、RocketMQ、Kafka对比分析和选型

ActiveMQ、RabbitMQ、RocketMQ、Kafka对比分析和选型 四大消息队列详细对比 1. ActiveMQ 核心特性&#xff1a; 基于JMS规范&#xff0c;支持多种协议&#xff08;AMQP、STOPP、MQTT等&#xff09;。提供主从架构&#xff08;Master-Slave&#xff09;和共享存储集群。支持持…...

2025:sql注入详细介绍

先说一个阿里云学生无门槛免费领一年2核4g服务器的方法&#xff1a; 阿里云服务器学生无门槛免费领一年2核4g_阿里云学生认证免费服务器-CSDN博客 SQL注入&#xff08;SQL Injection&#xff09;是一种常见的网络安全漏洞&#xff0c;攻击者通过在应用程序的输入参数中注入恶意…...

MyBatis操作数据库进阶——动态SQL

动态 SQL 是根据程序运行时的条件灵活生成不同 SQL 语句‌的技术。它的核心目的是在不修改代码‌ 的前提下&#xff0c;通过条件判断、循环等逻辑&#xff0c;动态拼接 SQL 片段&#xff0c;解决传统 SQL 语句死板、难以应对复杂业务场景的问题。 一、<if> 标签 先来观…...

使用LLama-Factory的简易教程(Llama3微调案例+详细步骤)

引言&#xff1a;一套快速实现 Llama3 中文微调的教程 主要参考&#xff1a;胖虎遛二狗的 B 站教学视频《【大模型微调】使用Llama Factory实现中文llama3微调》 ✅ 笔者简介&#xff1a;Wang Linyong&#xff0c;西工大&#xff0c;2023级&#xff0c;计算机技术 研究方向&am…...

LabVIEW发电平台数据采集系统

本文详细介绍了基于LabVIEW的摇臂式波浪发电平台数据采集系统的设计与实现。通过整合LabVIEW软件与多种传感器技术&#xff0c;本系统能够有效提升数据采集的准确性和效率&#xff0c;为波浪能的利用和发电设备的优化提供科学依据。 ​ 项目背景 随着全球能源需求增长和环境保…...

气象可视化卫星云图的方式:方法与架构详解

气象卫星云图是气象预报和气候研究的重要数据来源。通过可视化技术,我们可以将卫星云图数据转化为直观的图像或动画,帮助用户更好地理解气象变化。本文将详细介绍卫星云图可视化的方法、架构和代码实现。 一、卫星云图可视化方法 1. 数据获取与预处理 卫星云图数据通常来源…...

abaqus 二次开发 No module named ‘abaqusConstants

在 Python 中遇到 “No module named ‘abaqusConstants’” 错误通常意味着 Python 无法找到名为 abaqusConstants 的模块。这可能是由以下几个原因造成的&#xff1a; 拼写错误&#xff1a;首先确认模块名是否正确。通常在 Abaqus 的 Python 环境中&#xff0c;正确的模块名…...

【蓝桥杯】每日练习 Day7

目录 前言 领导者 分析 代码 空调 分析 代码 面包店 分析 代码 前言 今天是第一部分的最后一天&#xff08;主打记忆恢复术和锻炼思维&#xff09;&#xff0c;从明天开始主播会逐步更新从位运算到dp问题的常见题型。 领导者&#xff08;分类讨论&#xff09; 分析 …...

贪心算法(11)(java)加油站

题目&#xff1a;在一条环路上有n个加油站&#xff0c;其中第i个加油站有汽油 gas[i]升.。 你有一辆油箱容量无限的的汽车&#xff0c;从第i个加油站开往第i1个加油站需要消耗汽油 cost[i]升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定…...

Python(4)Python函数编程性能优化全指南:从基础语法到并发调优

目录 一、Lambda性能优化原理1.1 内联执行优势1.2 并行计算加速 二、工程级优化策略2.1 内存管理机制2.2 类型提示增强 三、生产环境最佳实践3.1 代码可读性平衡3.2 异常处理模式 四、性能调优案例4.1 排序算法优化4.2 数据管道加速 五、未来演进方向5.1 JIT编译优化5.2 类型系…...

本地部署Stable Diffusion生成爆火的AI图片

直接上代码 Mapping("/send") Post public Object send(Body String promptBody) { JSONObject postSend new JSONObject(); System.out.println(promptBody); JSONObject body JSONObject.parseObject(promptBody); List<S…...

qiankun微前端的使用

qiankun使用时注意以下几个点 1&#xff0c;子应用项目框架&#xff08;react&#xff0c;vue&#xff09;使用的打包格式需要为 umd 格式 2&#xff0c;子应用项目最好配置不受同源策略&#xff08;跨域&#xff09;的影响 3&#xff0c;子应用最好使用的路由模式是 histor…...

从国家能源到浙江交通投资,全息技术在能源交通领域的创新应用

一、3D全息技术行业应用参数及设计制作要求 全息投影 全息投影技术通过激光器、全息片等设备&#xff0c;将物体的三维信息记录下来&#xff0c;并在特定条件下再现。应用参数包括投影距离、投影面积、投影亮度等。设计制作要求&#xff1a;高清晰度、高亮度、低噪音、稳定性好…...

PageHiOffice网页组件(WebOffice文档控件)开发集成技巧专题一

PageHiOffice网页组件作为最新一代的WebOffice文档控件&#xff0c;这是目前市场上唯一能做到在Chrome等最新版浏览器中实现内嵌网页运行的商用文档控件&#xff0c;是OA及ERP等系统处理各种文档的福音。从发布到完善已经超过3年&#xff0c;不管是功能性还是稳定性都已经有了长…...

【人工智能】机器学习中的评价指标

机器学习中的评价指标 在机器学习中&#xff0c;评估指标&#xff08;Evaluation Metrics&#xff09;是衡量模型性能的工具。选择合适的评估指标能够帮助我们更好地理解模型的效果以及它在实际应用中的表现。 一般来说&#xff0c;评估指标主要分为三大类&#xff1a;分类、…...

本地安装deepseek大模型,并使用 python 调用

首先进入 ollama 官网 https://ollama.com/点击下载 下载完成后所有都是下一步&#xff0c;就可以 点击搜索 Models &#xff1a; https://ollama.com/search然后点击下载&#xff1a; 选择后复制: ollama run deepseek-r1:32b例如&#xff1a; 让它安装完成后&#xff1…...

Android:蓝牙设置配套设备配对

一、概述 在搭载 Android 8.0&#xff08;API 级别 26&#xff09;及更高版本的设备上&#xff0c;配套设备配对会代表您的应用对附近的设备执行蓝牙或 Wi-Fi 扫描&#xff0c;而不需要 ACCESS_FINE_LOCATION 权限。这有助于最大限度地保护用户隐私。使用此方法执行配套设备&am…...

AI知识补全(二):提示工程(Prompting)是什么?

名人说:人生如逆旅,我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:AI知识补全(一):tokens是什么? 目录 一、什么是提示工程?二、为什么提示工程如此重要?三、核心提示工程技术1. 少样本学习(Few-Sho…...

Python 变量作用域、global 关键字与闭包作用域深度解析 第三部分

## 三、闭包作用域的存在原因及适用场景 ### 3.1 闭包作用域存在的原因 #### 3.1.1 数据封装与隐藏 闭包可以把数据封装在外部函数的作用域中&#xff0c;只有内部函数能够访问这些数据&#xff0c;这有助于实现数据的隐藏和保护。 python def counter(): count 0 def incre…...