明天不下雨了 level
获赞
1413
粉丝
377
关注
210
看过 TA
1.2W
广东药科大学
2026
后端工程师
IP属地:广东
26届
私信
关注
10-24 18:14
已编辑
广东药科大学 后端工程师
二、 项目经历深挖 (腾讯云实习)1. 总体介绍:请具体介绍一下你在腾讯的研发经历、包括SQL优化、架构重构等工作的细节。2. 架构拆分 - 公共集群:○ 你提到的用于容灾的公共集群、平时上面会运行什么应用吗?○ 你说的搜索集群主要是指数据库集群还是应用服务集群?○ 当线上的搜索集群挂了之后、你们是如何实现切换到公共集群的?○ 这个公共集群平时是只作为搜索集群的备用吗?○ 在设计这个备用集群时、在成本方面有哪些权衡和考虑?3. 架构拆分 - 其他方案:除了容灾切换、你当时有没有考虑过其他方向、比如限流或降级?三、 系统与架构 (安全 & 流量)1. 安全 - 攻击类型:你们遇到过哪些恶意的攻击?可以具体说一下吗?○ 追问:这种情况(恶意刷接口)你们是怎么处理的?○ 追问:除了应用层的攻击,你了解过其他技术层面的攻击吗?○ 追问:可以解释一下这类攻击(如SQL注入)是如何实现的吗?2. 流量链路:你有了解过用户的搜索流量是怎样一步步打到你们的后端服务集群的吗?这个过程是怎样的?四、 可观测性与监控1. 流量采集:你是如何采集到服务的流量数据(如QPS)的?流量大约在什么级别?2. 指标统计 - QPS:100 QPS这个数据具体是怎么统计出来的?○ 追问:这个API统计平台,它是从哪里获取数据来计算QPS的?○ 追问:如果让你自己来实现、你会怎么计算这个指标?3. 指标统计 - 成功/失败率:你要如何统计某些接口的成功率或失败率?○ 追问:如果要你来做,你会怎么实现这个统计功能?4. 日志采集:为了统计这些指标、你会去采集哪一层(如应用层、网关层)的日志?5. 分布式追踪 (Tracing):有没有什么办法、能把一个请求从入口(如LB)、到API网关、再到后端业务服务的整条链路上的日志都串联起来?○ 追问:主要是如何将不同层的日志匹配起来?五、 项目经历深挖 (SQL治理 & 美的实习)1. SQL治理 - 任务类型:你处理的风险SQL是离线任务产生的、还是在线业务产生的?2. SQL治理 - 风险规避:有没有办法能在线上流程中、自动化地避免这类有问题的SQL产生?○ 追问:比如是否能通过报警或其他形式来通知?3. SQL治理 - 性能要求:你处理的这些任务、对执行时间有具体要求吗?4. 美的实习 - 任务介绍:你在美的实习期间、具体是做什么任务的?5. 美的实习 - 线程与进程:○ 你这个线程池的大小、是依据什么参数来设置的?○ 既然是异步任务、为什么不考虑直接拉起一个新进程来做、而是用线程池?○ 追问:请再详细说明一下、设置线程池大小会参考哪些标准?6. 美的实习 - I/O优化:○ 你提到业务中有IO占用、有什么办法可以优化IO的等待时间吗?○ 追问:具体有哪些优化IO的方式?六、 运维与Linux基础1. 网络命令:在Linux上、如何查看一台机器的IP地址?2. 操作系统 - 虚拟内存:top命令里看到的虚拟内存是什么东西?3. 进程管理 - kill命令:kill -9 和 kill -15 有什么区别?○ 追问:什么情况下必须用 kill -9?用它有什么风险?○ 追问:你了解 kill 命令的原理吗?它为什么能结束一个进程?4. 磁盘管理 - 查看:如何查看一台机器的磁盘使用情况?5. 磁盘管理 - 应急处理:如果一个日志文件非常大、快要把磁盘写满了、你要如何进行应急处理?○ 追问:在日志文件已经很大的情况下、如何操作(比如归档)才能避免现场发生事故?七、 在线编程1. 算法题:给定一个非负整数c、判断是否存在两个整数a和b、使得 a^2 + b^2 = c。○ 追问:你写的这个解法、可能会有什么问题吗?
0 点赞 评论 收藏
分享
08-13 02:18
已编辑
广东药科大学 后端工程师
现在有一个Http服务器、接收来自全国各地的流量。写一段代码、能够每个城市每分钟的访问量、并考虑到并发、多线程和线程安全问题、将结果打印到日志中可以升级:存储升级:从内存统计升级到持久化存储(Redis、数据库)分布式升级:多台服务器如何汇总统计数据实时性升级:从定时批量处理升级到实时流处理日志也可以实现一个定时任务日志打印、每隔五分钟打印然后每隔五分钟统计一次多线程题(顺序打印、交替打印、5 个线程打印 12345 然后再打印 12345。很多玩法n个线程交替打印1-100。 比如n=5、输出如下:第一个线程打印 1第二个线程打印 2...第五个线程打印 5第一个线程打印 6第二个线程打印 7N个线程交替打印1-100:n=5时、线程1打印1、线程2打印2...线程5打印5,线程1打印6...5个线程打印12345然后再打印12345:循环打印、保持顺序三个线程交替打印ABC:线程1打印A、线程2打印B、线程3打印C,循环100次两个线程交替打印奇偶数:线程1打印奇数、线程2打印偶数、输出1-100多线程按顺序打印:10个线程、按照线程ID顺序依次打印自己的ID本地实现一个CRUD订单系统、能实时计算最高最低平均价格、线程安全、复杂度尽可能低手撕发布订阅模式菜单的多级分类查询目录下商品数量公司自创的一个商品分类遍历打印、刚开始数据结构是用list存储的、要自己处理如何转化成多叉树的各个节点、以及如何匹配父子节点(多结点)、然后再递归遍历打印给一个分类列表、一个商品列表。分类中有分类ID、分类名称、父分类ID、商品中有商品ID、商品名称、分类ID、给一个分类ID、查询这分类下的所有商品多线程优化调用服务手写并发优化解决思路参考:https://www.nowcoder.com/discuss/705094528100790272LRU 系列线程安全的LRU缓存、支持过期时间HTTP服务器城市访问量统计:每个城市每分钟访问量,线程安全实时计算用户在线数API调用频率统计:每个接口的QPS统计
0 点赞 评论 收藏
分享
1. 什么是MCP参考面试回答:MCP模型上下文协议)是为大型语言模型提供的一个统一标准化接口、让AI能够无缝连接各种外部数据源和工具。可以将它比作AI世界的USB接口—只要遵循这个协议标准、任何数据源或工具都能与语言模型实现即插即用比如说传统的AI只能依赖预训练的静态知识、无法获取实时数据。而通过MCP,模型可以动态访问最新信息、比如查询搜索引擎、读取本地文件、调用第三方API、甚至直接操作各种工具库。比如说可以访问Github、IDEA这个协议最大的价值是标准化、它是MCP的核心价值 - 你不需要为每个AI模型和每个工具之间的连接编写专门的代码、只要双方都支持MCP协议、它们就能自动"对话"。这大大简化了系统集成、降低了开发成本、也提高了系统的可扩展性总结就是 MCP 创建一个通用标准、使 AI 应用程序的开发和集成变得更加简单和统一2. 大模型输出出现重复和幻觉如何解决参考面试回答:在大模型生成内容时、出现重复和幻觉是两个常见的问题。重复指的是模型在生成文本时出现内容重复的现象、而幻觉则是指模型生成了看似合理但实际上不真实或不准确的信息。为了解决这两个问题、可以通过微调(fine-tuning)的方法进行优化为了解决这些问题、首先微调是非常有效的手段。首先可以确保用于训练的数据质量、要高质量的真实的信息。我们可以减少模型学到错误的信息。特别是领域特定的微调、能帮助模型更准确地生成内容,避免在特定领域(比如医疗、金融)中产生幻觉。此外在训练过程中引入惩罚机制、比如对模型生成重复或不准确内容进行惩罚、也能够引导模型生成更为多样和真实的内容。另一个有效的策略是使用参数高效微调(PEFT)、通过像LoRA这样的技术、在不改变模型主体结构的情况下调整部分参数、从而提高微调效率并减少幻觉的产生。同时强化学习与人类反馈(RLHF)也是一种非常有用的方法、结合人类的评价、模型可以在生成内容时更符合实际世界的逻辑,降低幻觉的风险。最后检索增强生成(RAG)技术也能够显著提高模型输出的准确性、通过在生成过程中引入外部知识库、确保模型生成的信息更为真实和可靠。总的来说:通过微调、引入惩罚机制、领域特定训练和强化学习等方法、可以有效减少大模型的重复和幻觉问题3. 什么是RAG?流程是什么?面试参考回答:RAG就是结合信息检索和生成式模型的技术。主要流程包括两个核心环节:检索:基于用户的输入、从外部知识库(如数据库、文档、网页)检索与问题相关的信息。通常使用向量化表示和向量数据库进行语义匹配。将知识库中的文档进行预处理、分块、清洗并转换为向量表示、存储在向量数据库中。常用的如 Faiss、Milvus等向量数据库存储所有文档向量。用户提问后、对问题进行向量化、并在数据库中执行最近邻搜索、找出语义最相近的 N 条内容然后就是增强:也可以说是构建 Prompt1.将检索到的信息作为上下文、输入给生成模型(如 GPT)。2.相比纯生成模型、RAG 能引用真实数据、减少幻觉(胡编乱造)最后就是由将增强后的上下文输入到大型语言模型、综合已有上下文生成最终生成最终的回答或内容。一句话总结: RAG = 向量搜索引擎 + 大模型、让 AI 回答更靠谱、减少幻觉4. RAG的详细完整的工作流程参考面试回答流程:RAG(检索增强生成)的完整流程可分为5个核心阶段:1. 用户提问2. 数据准备:清洗文档、分块处理(如PDF转文本切片)2. 向量化:使用嵌入模型(如BERT、BGE)将文本转为向量。也就是Embedding 向量化3. 索引存储:向量存入数据库(如Milvus、Faiss、Elasticsearch)。4. 检索增强:用户提问向量化后检索相关文档。也就是构建 Prompt (问题 + 检索内容)5. 生成答案:将检索结果与问题组合输入大模型生成回答。5. 在 RAG 中的 Embedding 嵌入是什么参考面试回答:Embedding是RAG系统的核心组件、Embedding(嵌入)技术本质上是将文本、图像等非结构化数据转换为高维向量的过程。在实际应用中Embedding解决了传统关键词检索的局限性。比如用户询问如何煮奶茶时、传统检索可能无法找到包含'奶茶制作步骤'的文档、因为它们字面上不匹配。而通过Embedding、系统能够理解这两个表达在语义上的相似性、从而返回相关内容。Embedding的工作原理是通过深度学习模型(如BERT、Sentence-Transformers等)将文本映射到768维或更高的向量空间。在RAG系统中、Embedding的核心价值在于建立查询和文档之间的语义桥梁。当系统收到用户问题后、会将其转化为向量、然后在预先索引的文档向量库中寻找最相似的内容、无论它们在字面表达上是否匹配。这种基于语义的检索方式大幅提升了信息获取的准确性和完整性、为生成模型提供了更高质量的上下文信息,从而产生更精准的回答6. 什么是LangChain参考面试回答:LangChain 是一个开源框架、专为快速构建复杂的大语言模型应用而设计。简单来说就是它集成和内置了很多我们开发 AI 大模型应用需要的东西、如内置文档加载器、向量数据库、HTTP API 封装、云服务适配器等、让咱们开箱即用、有点像咱们 Java 届的 Spring。它最大的特点是把模型调用、提示词管理、工具使用、记忆管理这些能力模块化了、让开发者可以很方便地把大模型和数据库、搜索引擎、API服务等结合起来,用链式结构组织复杂任务。主要支持复杂任务编排:通过 Chains(链)和 Agents(代理)将多个LLM调用和工具操作组合成工作流以及实现上下文管理Memory(记忆):通过 Memory 组件(如对话历史缓存、实体关系跟踪)实现长对话连贯性。6. 什么是向量数据库参考面试回答:我的理解是:向量数据库它可以将非结构化数据(如文本、图片、音频等)转换成高维向量的形式进行存储、通过向量数据库预先存储结构化段、实时检索最相关的 Top-K 内容作为上下文输入、并通过高效的相似性搜索算法、快速找到与目标向量最接近的数据项。传统数据库采用存储数据、主要用于精确匹配查询、常用的检索方式就是精确匹配、索引结构有像B+树或者倒排索引的结构。而向量数据库针对高维向量数据优化、支持近似最近邻(ANN)搜索算法、更适合语义相似性搜索。可以理解为TopN系列、检索TopK相关内容作为上下文输入。向量数据库预先向量化并建立索引(如 HNSW、IVF),实现亚秒级检索。代表性的向量数据库就是Milvus:一个开源的向量数据库系统8. 向量数据库的核心原理是什么?核心技术是什么参考面试回答:向量数据库的核心原理是通过将高维数据(如图像、文本)转换为多维向量、并基于相似性度量(如余弦相似度、欧氏距离),利用高效的索引结构和近似最近邻(ANN)算法、快速检索与目标最相似的向量结果。这一过程可概括为三个关键步骤:首先是向量化:我们通过嵌入模型将非结构化数据映射为稠密向量、比如用BERT处理文本、ResNet处理图像、或CLIP处理多模态数据。这些模型能捕获数据的语义或特征信息、通常生成128到2048维的向量其次是索引构建:为了高效检索、我们会采用分层导航小世界图(HNSW)等结构预处理向量。HNSW能将搜索复杂度降至对数级O(log N)。同时我们还会利用乘积量化(PQ)来压缩向量、减少内存占用、以及通过倒排索引(IVF)缩小搜索范围。最后是近似搜索:在实际应用中我们允许一定误差来提升速度。ANN算法会在准确性和效率间寻找平衡点、确保在毫秒级延迟内返回Top-K相似结果、同时保持95%以上的召回率。总的来说就四个核心层:向量化引擎->索引结构 ->相似度计算->搜索原始数据 → 向量化 → 索引构建(HNSW/PQ/LSH) → 输入查询向量 → ANN近似搜索 → 返回Top-K结果(格式明天再改吧___发帖于2025.6.25 00:47)
明天不下雨了:兄弟们给个花花我是网络乞丐
0 点赞 评论 收藏
分享
当你决定学 Go,这是你即将面对的…(一部分):⸻🧱 Go 语言基础:变量声明(var、短变量声明 :=)、函数、包管理(模块、go mod)、值类型 vs 引用类型、常量、控制结构、数组、切片(底层结构、扩容机制、共享底层数组陷阱)、Map(哈希冲突、遍历无序)、字符串与 rune、结构体、指针(你以为逃过了指针地狱?)、方法与接口(鸭子类型)、类型断言、类型别名与定义、零值初始化、defer、panic/recover、init() 函数执行顺序、裸返回(你敢用它就等着被骂)。💡 面向接口编程:接口本质(隐式实现)、接口值结构(interface 是一个 tuple:类型+数据)、nil 接口陷阱、空接口 (interface{})、类型断言与 type switch、组合 vs 继承、值接收器 vs 指针接收器区别。🧵 并发编程:goroutine、channel(无缓冲、有缓冲、关闭通道)、select 多路复用、context 控制 goroutine 生命周期、WaitGroup、Mutex、RWMutex、sync.Once、sync.Map、atomic 原子操作、race condition 检查(go run -race)、调度器(GPM 模型)、CSP 模型哲学、不要在生产上滥用 channel 做 pub-sub。💥 错误处理:error 接口(值语义)、errors 包、fmt.Errorf + %w、自定义 error 类型、sentinel error、wrap & unwrap、go1.20 引入的 errors.Join、不是每个 err 都该 panic,你得学会优雅处理 error 返回。🧪 标准库与测试:net/http、json、os、io、bufio、context、time、flag、template、log、testing(单测、基准测试、示例测试)、go test -cover、table driven tests、mock 接口、自定义测试套件。📦 包管理与项目结构:go mod init、go get、replace、包导入循环报错、包粒度与复用、internal 包限制、工具类包 vs 面向业务目录结构(cmd、pkg、internal、api、configs…)。📊 工程能力:代码生成(go generate)、embed、lint 工具(golangci-lint)、gosec 安全检查、性能分析(pprof)、内存泄漏分析、trace、逃逸分析(go build -gcflags)、内联优化、go build、go run、交叉编译、构建信息注入(-ldflags)。🐋 网络编程与服务开发:http.Client 超时设置、超时控制与上下文 context 传播、gRPC(protobuf、interceptor、拦截器链、metadata)、RESTful API、Gin/Echo/Fiber、服务启动优雅关闭(context + signal)、日志(logrus/zap)、配置中心(viper)、依赖注入(wire、fx)、中间件设计、OpenAPI + Swagger、JWT + Session 认证、接口幂等设计。🗃️ 数据存储与 ORM:sql 包原生操作、连接池原理、事务(tx)、预编译语句、数据库扫描(Scan vs ScanStruct)、GORM(生命周期钩子、关联加载、字段映射、更新空值)、MongoDB 官方驱动、Redis Go 客户端、消息队列(Kafka、NATS、RabbitMQ)、分布式锁实现。🚀 微服务与分布式基础:服务注册与发现(etcd、consul)、配置中心、服务网关(Kong、APISIX)、限流熔断(resilience-go、sentinel-go)、链路追踪(OpenTelemetry + Jaeger)、日志收集(filebeat + ELK)、容器部署(Docker、K8s)、Sidecar 模式、微服务部署规范。🧠 常用工具与生态:GoLand、delve 调试、golangci-lint、Air 热加载、Taskfile 替代 Makefile、Swag 文档生成、protobuf 编译、mockgen、goimports、gofmt、vet、buf、wire 自动注入。✍️ 附加内容:•如何优雅处理协程泄漏?•为什么 defer 要小心用?•你以为 Go 没有 GC 就能低延迟?•为什么你手写的并发永远跑不过 sync.Map?•JSON 序列化 struct tag 写错一个字母,天崩地裂。当你觉得 Go 学起来简单是因为你还没学完。欢迎进入 Go 世界 —— 看起来干净写起来爆肝
沙滩海牛:你要学会的:if err!=nil
0 点赞 评论 收藏
分享
04-21 12:53
已编辑
广东药科大学 后端工程师
树根科技的一面-半个小时算法题:删除有序链表的重复元素II原题LC82. 删除排序链表中的重复元素 II  是在牛客的核心代码模式一开始没运行成功后面说了思路 然后就放我过了我在最后说完思路之后调了一下代码之后运行成功完美😍就两道八股然后实习简单问了一下 没什么好回答的我操又是KPI我的面试八股:1,索引是什么?对于索引的理解?底层数据结构是什么我觉得这道题问的很经典但是可能大家回答的大差不差 这里希望大家看可以回答的有章法一点  我这里贴一下我的回答吧面试回答:索引是数据库中用于提高查询效率的数据结构。它类似于书籍中的目录、通过创建索引、数据库可以更快地定位到数据的位置,从而减少全表扫描的时间,显著提高查询性能。索引本质上是一个辅助数据结构、B+树索引是一种多路平衡树、常用于数据库的存储引擎。Innodb数据库默认使用 B+树作为索引。然后来介绍一下B+树索引1. 首先先说一下B+树的特点是什么:B+树的叶子节点存储数据、非叶子节点只存储索引、不存储实际数据、所有数据都集中在叶子节点。而且每个节点里的数据都是根据索引的值来顺序存放的 也就是顺序存储2. 然后呢B+树适合顺序访问及范围查询:B+树的叶子节点之间通过双向链表连接、每个节点都有指向前一个和后一个节点的指针、以及当前的数据。这种结构使得可以顺序访问、从任意一个叶子节点开始、通过双向指针快速地向前或向后访问其他节点访问高效、无需回溯即可遍历更多数据。也可以通过范围查询、可以通过在链表中找到该范围的起始叶子节点、然后顺序地访问链表中的节点。3. 以及最重要的是:B+树的查询性能比较高:由于B+树的结构是平衡的、所有叶子节点都在同一层、这意味着查询数据时、查询的深度通常比较浅(一般在3到4层)、即使数据量达到千万级、最多需要3~4次磁盘I/O操作就能找到目标数据。这极大减少了磁盘访问次数。4. 还有就是B+树具有稳定的查询性能:由于B+树是平衡的,所有的数据检索操作都有相同的I/O延迟。这使得B+树特别适合用于存储大量数据并且要求稳定查询性能的场景、这也是我们选择B+树作为索引的主要原因2.面试官问的问题:面试官问的是:一个表下有多个索引,每一个索引下都是B+树结构、那每一个索引的叶子节点都是存储的实际的数据吗?一开始没明白这个是什么意思、后来面试官提示了一下才明白原来问我的是:聚簇索引和非聚簇索引(二级索引)的区别。参考回答:分为聚簇索引和二级索引回答聚簇索引:叶子节点:存储的是主键值和完整的行记录(即数据行的所有列数据)。非叶子节点:存储的是主键值和指向子节点的指针。非聚簇索引(二级索引):叶子节点:存储的是索引键值和该行的主键值、不存储完整数据。非叶子节点:存储的是索引键值和指向子节点的指针。查询过程:如果查询条件使用了二级索引(非聚簇索引)、但查询的数据既不是主键值也不是二级索引值、则需要通过二级索引查找主键值、然后回表查询实际数据。这样会进行两次B+树扫描、分别查找索引和数据。如果查询的列是主键值和二级索引值、并且这两列都在二级索引中(例如联合索引)、则可以直接在二级索引中查询到所有需要的字段、这时称为覆盖索引、无需回表、查询只需要扫描一次B+树、效率更高。
查看3道真题和解析
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务