公司未注明 · 广告投放漫剧

Go/React 全栈 AI Agent 开发面经

完整信息

11 条问法 · 11 道题

本篇目录

想转行裸辞后第一面,完全没准备裸考,所以已经挂了,但对你可能会有一些帮助或是启发[嘤嘤嘤]
五个部分:编程、SQL、代码审计、场景题、AI工程题
岗位:Go/React全栈 AI Agent开发(广投漫剧)
社招BG:双非本,2年Golang,2段军工,1段央企,无Agent项目经历
竞争程度:Boss 1000+沟通 1%约面

①编程题 (Go/Python)
力扣easy1道,已AK[拜拜]
具体是投递转化率计算(广投方向开发日常工作内容),对象排序、除零异常等基础考点。
因为长期使用AI,手写能力下降的很厉害记不得对象排序sort方法的签名了,手写了个冒泡...

②SQL
1道easy+1道medium+1道hard SQL,全错,平时工作还是太依赖ORM和AI了[牛泪]
easy是3表联查排序查某字段总和最高
medium是在某一段时间内HAVING聚合过滤
hard就是一道业务题,是广投某个场景下一个复杂业务的sql查询

③代码审计
见图2,没答全。原生还是ORM确实是效率和性能的权衡之选,ORM用户遗憾离场[摸鱼中]

  1. 直接拼接,SQL注入风险
  2. 末尾拼接,若变量为空SQL直接报错
  3. 没有处理错误,用_忽略err,可能数据库根本没连上。rows.Scan是有返回值err的,未处理。rows.Next结束后会把err全部存到rows.Err,图中没有处理任何rows的错误
  4. 泄露,没有defer rows.Close()
  5. 类型错误,SUM 结果可能是 NULL,没法放到float
  6. writer返回的内容不规范,返回的不是JSON...是文本内容!(框架用习惯了原生确实容易注意不到)
  7. 无超时取消,没错,原生查询要单独设置ctx超时时间,ORM一般都是统一配置...

④场景题
7道日常开发题,简简单单[喝可乐]

  1. 数据看板、仪表盘、态势大屏
    没什么难度,比起展示更多的数据更重要的是重要数据的展示以及仪表盘的布局,考研运维经验的题目。

  2. 注册/登录模块
    结合业务实际以及权衡性能和速度的题目。
    涉及到系统初始化账号、SSO、OAuth2、OpenID、session、JWT、SMTP邮箱验证、SMS短信验证
    多种哈希不可逆加密,如bcrypt、scrypt、PBKDF2、md5、md5加盐、md5动态加盐、argon2、气球算法之类的...CPU密集型、内存密集型
    排队、冷却、验证码、前端加密(AES之类的)、反爬虫
    非常考验开发经验的一道题目,但实际上很多面试官也并不了解其中的细节,比如哈希算法的权衡,没做过benchmark的面试官肯定不懂的。

  3. 定时脚本
    常见的开发任务,有重要的坑,答不出来一定很少实操。
    UTC时间与本地时间如果不统一,在开发/生产环境可能踩坑。
    避免ticker内存泄漏,最终一定要释放,不要反复新建,否则很快就会把服务打垮。曾用自己的开源中间件踩了某框架路由特性的坑导致自己的网站撞内存墙[牛啤]
    ticker应该是一个协程,不要阻塞主进程。
    ticker内任务执行时间必须小于新建时间,否则ticker堆积会造成ticker bunket溢出造成异常(如果你有这样的池子),也是曾有幸在军区现场手写代码踩了开源库特性的坑。挺无语的,为了满足某个无理的需求,谁家好人要一直刷新定时任务啊,又不愿意换实时的通信方式!

  4. 用户上传
    非常考验经验的一道题,曾写过一个自用的seeweedfs的sdk,算是有一些经验,但军工的系统都糙的很,这些东西的实操其实并不多。
    a. 限流、限速、限额、鉴权、审计日志、内容审计、风险评估、S3存储、数据库存储、mongodb存储...
    b. 签发内容、断点续传、分片上传、分片合并、一致性校验、完整性校验、临时文件清理、文件过期、文件元数据...
    c. 恶意文件检测、非法内容检测、路径穿越、环境隔离
    d. CDN优选、并发、备份

  5. 数据库备份/迁移
    本人主要使用go生态的goose来做数据库迁移,对原生方法确实不太了解。
    不过大致都是先备份,再迁移。核心考点是不停机迁移,可以考虑蓝绿部署、灰度部署。大表一般只能用命令行操作,navicat这些可视化数据库连接工具一定会崩溃的哈

  6. 优化页面加载速度
    前后端综合题,基本每天都在做的事情。
    分析瓶颈来自网络/数据库/机器性能,然后定向处理
    压测/pprof/火焰图/p99/...看接口瓶颈,定位问题出现的位置
    后端优化...
    前端就上CDN减轻网络负担、缓存内容,限制DOM挂载数量、限制视窗外的渲染、减少用户设备的大量计算,防抖/节流/聚合接口减少网络请求,简单来说就是切图代替算出来的特效。
    网关优化,HTTP3优化弱网,HTTP2优化静态资源,还有etag之类的,这一块了解的不多。

  7. 支付
    接入不复杂但审核和调试相当恶心...
    涉及到金钱交易,风险很大的操作,出事就是P0事故。支付这一块在学生时代接入过,2年工作其实根本没有接触到,浅浅套路回答,本来支付也应该是3年以上经验才去碰的东西。

⑤AI工程题
用主流AI(Claude、Codex、Cursor等)写一个广投转化率的排序返回接口,带一个README。[狗牛头]
主要内容就是技术选型+本地存储+mock测试数据+接口

用自研自用的框架构建工具直接生成一套工程完备的MVC starter骨架为Agent保下限,构建工具自带一个类似go生态这边开源的task的构建hook配置,不过该题目未使用。
技术选型上偏保守,go:embed 内嵌Vue3控制台,本来想用yarn但是考虑到面试官可能没装pnpm、yarn之类的,LESS控制主样式+Tailwindcss控制布局,axios请求,路由守卫。
fiber v3+sqlc+sqlite+sqlite纯go驱动库+cobra+go1.26(Go社区建议使用最新的两个Go版本,GreenTea GC值得使用)
github actions CICD + 命令行参数 install/uninstall systemd + CMAKE构建脚本

fiber v3 框架特殊优化,sonic库替换框架原生json转换,通过hook优雅启动/关闭
response.go/error.go规范化项目,docs目录维护usage.md和audit.md,根目录Agents.md和README.md

搭建审计什么的都是用的SKILL。

反正笔试挂掉了,只能在家继续学习了[好无辜]
<a href="https://www.nowcoder.com/creation/subject/81e9423ee42941edb230faabe67267b2" class="subject font-green" target="_blank" data-nc-subject-type="0" data-nc-subject-tag-id="0">#我的求职进度条#</a>

配图文字

func GetAccountSpend(w http.ResponseWriter, r *http.Request) {
    accountID := r.URL.Query().Get("account_id")

    query := "SELECT SUM(spend) FROM daily_stats WHERE account_id = " + accountID
    rows, _ := db.Query(query)

    var total float64
    for rows.Next() {
        rows.Scan(&total)
    }

    fmt.Fprintf(w, "total spend: %f", total)
}
本篇目录
  1. 01
    具体是投递转化率计算(广投方向开发日常工作内容),对象排序、除零异常等基础考点。
  2. 02
    func GetAccountSpend(w http.ResponseWriter, r *http.Request) { accountID := r.URL.Query().Get("account_id") query := "SELECT SUM(spend) FROM daily_stats WHERE account_id = " + accountID rows, _ := db.Query(query) var total float64 for rows.Next() { rows.Scan(&total) } fmt.Fprintf(w, "total spend: %f", total) }
  3. 03
  4. 04
  5. 05
  6. 06
  7. 07
  8. 08
  9. 09
  10. 10
  11. 11

同作者面经