【Go面试】工作经验篇 (持续整合)

这里写目录标题

    • 什么是逃逸分析
    • 服务端怎么接受客户端上传的文件
    • 说一下对gin框架的理解
    • gin有哪些常用中间件
    • gin怎么用swagger写接口文档
    • nginx一般是用来做什么
    • 如果调用方法经常超时怎么办
    • gin中怎么和mysql通信
    • 从mysql调数据到redis,如何同步
    • 延时双删
    • redis ,mysql都不存在用户请求的数据怎么办(缓存穿透)
    • redis大Key问题
    • 你们小组有哪些人,都是怎么工作的
    • 最有成就感的事
    • 发展方向
    • 看重公司哪一点
    • 业务和技术哪个重要
    • 遇到过什么困难,怎么解决
    • 反问内容
    • prompt书写有什么技巧
    • 你认为为什么prompt会有很多不同的模板,不同业务场景适合用不同的与大模型交互的方式吗
    • 对大模型的认识以及自己的运用或者工作时的运用
    • 使用大模型的时候大交互拆成小交互会对token优化多少
    • 怎么样排查慢查询
    • k8s了解嘛?
    • 一个地方Post请求过多怎么处理(或者消息过多)

什么是逃逸分析

其核心目的是确定在程序执行过程中,对象的引用是否“逃逸”出了其创建的作用域

1.减少逃逸就可以把对象分配到栈上,减少垃圾回收的压力

2.没逃逸出线程就不用对这个对象做支持多线程的处理

3.如果创建后没有外部引用就会被视为死代码消除

逃逸的情况:

全局变量,传参,返回值,多线程,外部数据结构(全局数据结构或指针)

服务端怎么接受客户端上传的文件

package mainimport ("github.com/gin-gonic/gin""net/http"
)func main() {//创建gin框架的路由引擎r := gin.Default()//定义一个处理post请求的路由,并尝试获取名为file的文件,如果出现错误就返回对应错误信息r.POST("/upload", func(c *gin.Context) {// 声明接收文件的变量file, err := c.FormFile("file")if err!= nil {c.String(http.StatusBadRequest, "接收文件出错: %v", err)return}// 保存文件err = c.SaveUploadedFile(file, "./"+file.Filename)if err!= nil {c.String(http.StatusInternalServerError, "保存文件出错: %v", err)return}c.String(http.StatusOK, "文件上传成功: %s", file.Filename)})// 启动服务r.Run(":8080")
}

说一下对gin框架的理解

gin是一个厉害的Go语言web框架

从路由上说利用Trie树算法快速匹配路由,

中间件上可以像链条穿起来,和工作流一样,内置Logger等中间件,

社区活跃,提供丰富解决思路和插件

基于httprouter构建,底层实现高效,高并发优秀,资源占用少

gin有哪些常用中间件

日志,跨域,权限

gin怎么用swagger写接口文档

1.引入所需包(gin-swagger和其他包)

2.根目录下swag init,生成配置文件

3.在go文件中用特定格式写路由,函数,参数,返回值等信息

package mainimport ("net/http""github.com/gin-gonic/gin""github.com/swaggo/files""github.com/swaggo/gin-swagger"_ "your-project-name/docs" // 这里导入生成的 docs 包,注意要替换为实际项目名
)// @title Swagger Example API
// @version 1.0
// @description This is a sample server celler server.
// @termsOfService http://swagger.io/terms/// @contact.name API Support
// @contact.url http://www.swagger.io/support
// @contact.email support@swagger.io// @license.name Apache 2.0
// @license.url http://www.apache.org/licenses/LICENSE-2.0.html// @host localhost:8080
// @BasePath /api/v1
func main() {r := gin.Default()// 路由组v1 := r.Group("/api/v1"){// @Summary 获取用户信息// @Description 根据用户 ID 获取用户信息// @Tags 用户管理// @Accept  json// @Produce  json// @Param   id     path    int     true        "用户 ID"// @Success 200 {object} User "成功获取用户信息"// @Failure 400 {object} gin.H "无效的请求参数"// @Failure 404 {object} gin.H "用户未找到"// @Router /users/{id} [get]v1.GET("/users/:id", func(c *gin.Context) {// 函数体})// @Summary 创建用户// @Description 创建一个新用户// @Tags 用户管理// @Accept  json// @Produce  json// @Param   user     body    User     true        "用户信息"// @Success 201 {object} User "成功创建用户"// @Failure 400 {object} gin.H "无效的用户信息"// @Router /users [post]v1.POST("/users", func(c *gin.Context) {// 函数体})}// 配置 Swagger UI 路由r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))r.Run(":8080")
}// User 结构体,用于示例
type User struct {ID   int    `json:"id"`Name string `json:"name"`
}

再用swag init 生成docs目录和文件

nginx一般是用来做什么

作为反向代理服务器,

1.可以把客户端的请求转发到后端的多个服务器上实现负载均衡,

2.可以直接提供静态资源

3.或者配置SSL证书实现HTTPS,加密传输

4.配置缓存,减少服务器负担

Traefik和nginx类似,但是traefik是一个反向代理和负载均衡器,为k8s环境设计.动态服务发现,自动更新路由规则

如果调用方法经常超时怎么办

1.超时重试

2.拉长超时时间

3.检查网络状态,带宽,打日志检查请求的服务有没接收到请求

4.缓存和负载均衡

gin中怎么和mysql通信

1.引入依赖

2.配置数据库连接

3.定义数据模型

4.编写增删改查操作sql

从mysql调数据到redis,如何同步

https://www.ppmy.cn/news/1564625.html?action=onClick

分为 一致性要求较高 允许延迟一致

1.一致性要求较高:使用共享锁和排他锁或者延时双删策略,确保缓存和数据库数据一致性,(对性能有影响)

2.允许延迟一致:使用消息队列,异步更新缓存,保证最终的一致性,(有延迟)

延时双删

场景:

  • 当有多个线程或进程可能同时操作数据时,为了避免缓存和数据库的数据不一致,延时双删可以发挥重要作用。
  • 例如,在一个电商系统中,当更新商品信息时,可能会出现以下情况:
    • 线程 A 更新商品信息到数据库,同时删除缓存。
    • 线程 B 此时读取商品信息,由于缓存已删除,它会从数据库读取旧信息并写入缓存。
    • 线程 A 后续的更新操作完成,但是线程 B 写入的旧信息仍在缓存中,导致数据不一致。

解决:

1.写数据库前删除缓存的数据,(确保后续操作不会读到旧缓存)

2.更新数据库

3.延时后第二次删除缓存(确保之前因为并发读取而写入的旧数据被清除)

延迟时间短可能无法清除旧数据

为了避免sleep的性能影响可以使用消息队列延迟删除

redis ,mysql都不存在用户请求的数据怎么办(缓存穿透)

就是缓存穿透

1.缓存空值

2.布隆过滤器

3.前置业务校验

4.黑名单限制特殊IP或用户

redis大Key问题

大Key问题就是redis的键值(key,value)对中,Key或Value很大.导致redis在处理这个数据时IO耗时很高或者费内存,再由于redis单线程导致redis会处于长时阻塞,甚至不可用.

检测 redis-cli --bigkeys 扫描所有的键识别大Key,大致检测大Key

解决

1.避免大量数据存在一个键上

2.数据拆分,把列表,哈希或者集合 中元素拆成多个子元素

3.数据压缩,或者缩减储存数据大小(优化数据结构)

你们小组有哪些人,都是怎么工作的


1.表达人数,和对应职位人数(5人,2后端,1前端,1测试,1产品)
2.个人负责哪部分,表达出个人的重要程度,以及自己职责
3.表达团结一致和融入小组迅速
4.可以反问HR贵公司组织架构是否类似,并且回复和自己之前的架构很像可以快速融入

最有成就感的事

待补充…

发展方向

待补充…

看重公司哪一点

待补充

业务和技术哪个重要

待补充

遇到过什么困难,怎么解决

待补充

反问内容

待补充

prompt书写有什么技巧

1.易读易知官方友善
2.指定角色,不同角色对事物认知不同
3.指定生成的结果格式(json)
4.重要要求的放在前面,末尾重复再次强调
5.减少幻觉(幻觉就是不能让他跳出角色设定,例如:作为一个AI我拒绝回答…)设置在没把握回答或者拒绝回答时,回复提问者固定格式的格式回答
6.可以动态设置多个标签枚举,让AI回答固定标签内容

你认为为什么prompt会有很多不同的模板,不同业务场景适合用不同的与大模型交互的方式吗

对大模型的认识以及自己的运用或者工作时的运用

使用大模型的时候大交互拆成小交互会对token优化多少

简单任务不会优化多少,复杂任务会优化一点,但是连贯性和网络,时间开销会更大

怎么样排查慢查询

1.最简单:慢查询日志. 设置超过多少秒认为慢查询 这个一般是运维在设置

2.找到问题sql 查慢查询原因: EXPLAIN 查询执行计划
查看是否命中索引,扫描行数

3.优化查询条件,使得命中索引,避免select * ,避免Where子句使用函数(可能导致索引失效)

4.加索引,或者分区分表

5.提升内存,磁盘或CPU

k8s了解嘛?

开源容器编排平台,用于自动化容器部署管理的,
主从架构:
主: 配置,控制,管理,调度
从:执行实际的任务,管理容器生命周期,管理网络代理,负载均衡,

主要单元:
pod:一个pod对应一个或多个容器,
service:服务 包含多个pod

场景:微服务部署,持续部署和集成(CI/CD) ,开发云原生应用

优势:高可用,弹性,资源合理管理

一个地方Post请求过多怎么处理(或者消息过多)

消息风暴
0.nginx负载均衡(post请求时)
1.消息队列缓冲,削峰填谷(如果实时性不高)
2.熔断和限流(如果数据不是很重要)
3.合并和压缩(如果重复消息较多)
4.分布式处理负载
5.创建协程异步处理

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

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

相关文章

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

Pycaret自动机器学习框架使用流程及项目实战案例详解 1 Pycaret介绍2 安装及版本需求3 Pycaret自动机器学习框架使用流程3.1 Setup3.2 Compare Models3.3 Analyze Model3.4 Prediction3.5 Save Model4 多分类项目实战案例详解4.1 ✅ Setup4.2 ✅ Compare Models4.3 ✅ Experime…

Linux学习笔记——网络管理命令

一、网络基础知识 TCP/IP四层模型 以太网地址(MAC地址): 段16进制数据 IP地址: 子网掩码: 二、接口管命令 ip命令:字符终端,立即生效,重启配置会丢失 nmcli命令:字符…

手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)

手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍) 目录 手撕Diffusion系列 - 第九期 - 改进为Stable Diffusion(原理介绍)DDPM 原理图Stable Diffusion 原理Stable Diffusion的原理解释Stable Diffusion 和 Diffus…

JAVAweb学习日记(八) 请数据库模型MySQL

一、MySQL数据模型 二、SQL语言 三、DDL 详细见SQL学习日记内容 四、DQL-条件查询 五、DQL-分组查询 聚合函数: 分组查询: 六、DQL-分组查询 七、分页查询 八、多表设计-一对多&一对一&多对多 一对多-外键: 一对一: 多…

微信小程序1.1 微信小程序介绍

1.1 微信小程序介绍 内容提要 1.1 什么是微信小程序 1.2 微信小程序的功能 1.3 微信小程序使用场景 1.4 微信小程序能取代App吗 1.5 微信小程序的发展历程 1.6微信小程序带来的机会

音频入门(一):音频基础知识与分类的基本流程

音频信号和图像信号在做分类时的基本流程类似,区别就在于预处理部分存在不同;本文简单介绍了下音频处理的方法,以及利用深度学习模型分类的基本流程。 目录 一、音频信号简介 1. 什么是音频信号 2. 音频信号长什么样 二、音频的深度学习分…

Midjourney中的强变化、弱变化、局部重绘的本质区别以及其有多逆天的功能

开篇 Midjourney中有3个图片“微调”,它们分别为: 强变化;弱变化;局部重绘; 在Discord里分别都是用命令唤出的,但如今随着AI技术的发达在类似AI可人一类的纯图形化界面中,我们发觉这样的逆天…

【Linux】命令为桥,存在为岸,穿越虚拟世界的哲学之道

文章目录 Linux基础入门:探索操作系统的内核与命令一、Linux背景与发展历史1.1 Linux的起源与发展1.2 Linux与Windows的对比 二、Linux的常用命令2.1 ls命令 - "List"(列出文件)2.2 pwd命令 - "Print Working Directory"&#xff08…

[护网杯 2018]easy_tornado1

题目 、 依次点击文件查看 /flag.txt flag in /fllllllllllllag /welcome.txt render /hints.txt md5(cookie_secretmd5(filename)) tornado模板注入 报cookie /error?msg{{handler.settings}} cookie_secret: 6647062b-e68d-4406-90d3-06e307fa955c} 使用python脚本…

STM32+W5500+以太网应用开发+003_TCP服务器添加OLED(u8g2)显示状态

STM32W5500以太网应用开发003_TCP服务器添加OLED(u8g2)显示状态 实验效果3-TCP服务器OLED1 拷贝显示驱动代码1.1 拷贝源代码1.2 将源代码添加到工程1.3 修改代码优化等级1.4 添加头文件路径1.5 修改STM32CubeMX工程 2 修改源代码2.1 添加头文件2.2 main函…

基于微信小程序的英语学习交流平台设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果

前言 ORB-SLAM2源码学习:Initializer.cc⑦: Initializer::Triangulate特征点对的三角化_cv::svd::compute-CSDN博客 经过上面的三角化我们成功得到了三维点,但是经过三角化成功的三维点并不一定是有效的,需要筛选才能作为初始化地图点。 …

macOS如何进入 Application Support 目录(cd: string not in pwd: Application)

错误信息 cd: string not in pwd: Application 表示在当前目录下找不到名为 Application Support 的目录。可能的原因如下: 拼写错误或路径错误:确保你输入的目录名称正确。目录名称是区分大小写的,因此请确保使用正确的大小写。正确的目录名…

记录一个连不上docker中的mysql的问题

引言 使用的debian12,不同发行版可能有些许差异,连接使用的工具是navicat lite 本来是毫无思绪的,以前在云服务器上可能是防火墙的问题,但是这个桌面环境我压根没有使用防火墙。 直到 ying192:~$ mysql -h127.0.0.1 -uroot ERROR 1045 (28…

Gradle自定义任务指南 —— 释放构建脚本的无限可能

文章目录 🔍Gradle任务⚙️ 自定义任务的5大核心配置项1. 任务注册(Registering Tasks)2. group & description3. dependsOn4. inputs & outputs5. 类型化任务(Task Types) 任务常见配置参数传递方式1&#xf…

windows11关闭系统更新详细操作步骤

文章目录 1.打开注册表2.修改注册表内容2.1 新建文件2.2 修改值 3.修改设置 1.打开注册表 winR输入regedit(如下图所示) 2.修改注册表内容 进HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 2.1 新建文件 右侧界面右键即可 2.2 修改值 重命名为如下…

matlab绘图——彩色螺旋图

代码生成的图形是一个动态的彩色螺旋,展示了如何利用极坐标和颜色映射创建视觉吸引力强的图形。该图形可以用于数据可视化、艺术创作或数学演示,展示了 MATLAB 在图形处理方面的强大能力。通过调整 theta 和 r 的范围,可以创建出不同形状和复…

啥是EPS?

文章目录 1. 什么是EPS?2. 主要构成3. EPS的设计如何符合功能安全?4. 代表性的厂家1. 什么是EPS? EPS(Electric Power Steering,电动助力转向系统)是一种利用电动机提供转向助力的系统,取代了传统的液压助力转向系统(HPS)。EPS通过传感器检测驾驶员的转向意图,并由电…

QT:控件属性及常用控件(3)-----输入类控件(正则表达式)

输入类控件既可以进行显示,也能让用户输入一些内容! 文章目录 1.Line Edit1.1 用户输入个人信息1.2 基于正则表达式的文本限制1.3 验证两次输入的密码是否一致1.4 让输入的密码可以被查看 2.Text Edit2.1 输入和显示同步2.1 其他信号出发情况 3.ComboBox…

24_游戏启动逻辑梳理总结

首先这个项目从游戏根入口GameRoot.cs的初始化开始 分为 服务层初始化Svc.cs 与 业务系统层初始化Sys.cs 而服务层 分为 资源加载服务层ResSvc.cs 与 音乐播放服务层AudioSvc.cs 而在 资源加载服务层ResSvc.cs中 初始化了 名字的 配置文件 而音乐播放服务层AudioSvc.cs 暂时没…