简历

# 自我介绍

avatar
  • 姓名: 李泽楷
  • 性别: 男
  • 年龄: 26岁
  • 籍贯: 广东省汕头市
  • 微信: kayleeo595
  • 邮箱: [email protected]
  • 喜欢研究关于计算机方面的内容, 捣鼓各种工具和软件. 熟练操作windows和linux系统, 热爱开发各种能够提供办公效率的自动化程序. 目前我擅长后端业务逻辑的开发, 前端页面的编写, 还会基于易语言开发带界面的软件, 对网页逆向也有一定的了解, 能够分析页面参数的生成算法, 扣出并还原, 对常规的机器验证码协议绕过, 成功案例有百度的旋转验证码. 不过我个人的技术栈主要偏向是的后端业务逻辑的开发.

    # 工作经历

    # 福州日昇网络科技

    贵司没有属于自己的官网和相关介绍.

    岗位: 软件开发 2024-10 至 2025-01

    • 负责公司前后端业务的开发, 开发了2个项目.
    • 对原有易语言项目采用Golang重构开发, 优化性能和界面.

    下面是任职内容:

    苹果商城API代理点开发

    为了解决用户侧(软件客户端)直接向苹果服务器发起请求太慢的问题, 决定开发一个节点, 用户只需要请求节点, 由节点会根据请求参数决定请求哪些苹果商城API.

    • 技术栈: 采用GinVueAdmin快速搭建后台管理系统
    • 运维工具:
      • Git做版本控制工具
      • DockerCompose做线上部署
      • Mysql做数据持久化
      • Nginx做前后端分离的路由器

    前端部分只有后台管理页面, 用户管理员给用户颁发账户和充值积分. 该项目在Gin中间件中添加了JWT对用户请求身份进行鉴权, 同时在中间件中添加对接口的调用进行收费, 这些接口的费用都是能够在后台进行动态调整. 客户端调用请求时会自动扣除接口对应费用的积分, 并且在请求苹果商城API服务时会使用代理进行出口.

    项目中遇到的难点:

    • 代理不稳定导致部分用户请求过慢

    这个问题的解决之路还是比较坎坷的, 主要是我的负责人让我在各种代理IP复用策略上进行各种尝试, 如在一个代理IP用于N次的请求后再进行丢弃更换, 还有像在各种代理商的代理池直接来回的切换测试, 最后一次尝试是将一个代理IP用于一个用户请求的生命周期当中, 也就是说例如一个苹果登录API它中间其实是调用了多个API来组合完成登录, 那么这多个API都采用共同的代理IP进行请求. 不过这样还是不能解决问题, 我怀疑过可能是代理IP存在问题, 负责人怀疑是我系统设计的有问题, 让我自己检查分析一下具体原因, 我通过打日志, 记录所有请求的耗时过长的代理IP, 对这样IP进行手动curl测试访问速度发现其问题还是在代理IP身上, 发现速度慢的请求在TLS握手阶段就会明显偏慢, 于是乎在程序中添加TLS握手超时, 问题解决, 只要TLS握手超时立马切换IP进行重试.

    • 接口请求失败时不应该产生扣费

    这个其实在中间件中通过context.Next()之后就可以到响应环节, 直接检查接口响应的状态码来决定是否进行退费, 因为项目API接口的响应状态不是固定200, 都是会根据具体响应状态返回对应的状态码. 但是这里问题就在于有些请求是异步的, 它是开启了一个新的协程在工作的, 这里主要是利用了context的Value设计, 负责扣费的中间件将扣费逻辑写成一个匿名函数放到了gin的Context当中, 在异步的协程工作中, 如果调用失败, 则需要手动在业务逻辑中调用退费函数.

    • 优雅的在多个代理提供商之间进行来回切换测试

    首先是代理配置不能硬编码, 一定要可以通过配置文件进行热更新, 但是不同平台使用代理的方式不同, 有可能是隧道代理模式, 有的是返回多个代理模式, 返回多个代理模式也有文本换行分割或者JSON的方式, 而JSON不同平台的格式有不一样, 部分代理商还会提供代理的过期时间, 这里必须采用接口的方式进行设计, 抽象出代理池结构以及不同平台直接的统一IP获取接口, 具体的细节可以看"https://gitee.com/kaylee595/proxy-pool", 主要是有平台JSON的封装, 也有一个通用的换行符分割形式(generalText)的接口实现.

    苹果商城中订单状态和物流状态的追踪

    原项目采用易语言构建, 项目的原本只考虑到企业内部使用, 后面考虑想要商业化售卖这个项目决定进行重构, 目标首先是需要性能更好的Golang来做, 其次需要电脑手机都能访问, 所以采用前端网页形式来做, 前端选型使用的是Vue+ElementUIPlus.

    • 技术栈: Gin框架+Vue(Typescript)
    • 运维工具:
      • Git做版本控制工具
      • DockerCompose做线上部署
      • Mysql做数据持久化
      • Nginx做前后端分离的路由器
    • 第三方集成:
      • Aftership
      • 17Tracker

    后端部分:

    该项目在Gin中间件中添加了JWT对用户请求身份进行鉴权, 异步处理用户添加的订单信息, 定时同步后台中订单的商品信息, 由于订单信息同步并非采用苹果商城提供的常规API, 而是采用抓包形式将获取订单信息的API直接集成到系统中, 并不是通过webhook的方式订阅商品更新, 所以需要定时的在后台进行主动同步. 另外对外暴露一个API用户接收物流状态, 主要与17Tracker进行对接, 在同步订单信息需要像17Tracker订阅某个物流的跟踪, 当物流发送更新时, 17Tracker服务商会向该接口通知物流的最新状态, 需要做物流状态记录到数据库当中.

    前端部分:

    页面完成了批量订单上传, 订单和物流查看页面, 并且可以对订单是售卖价和售卖家进行标记, 方便后续导出查账等管理.

    # 深圳市灰豚启航技术开发科技有限公司

    深圳市灰豚启航技术开发科技有限公司是专门为视频领域的用户提供数字人解决方案

    岗位: 技术开发 2023-10 至 2024-03

    • 负责数字人SaaS平台日常迭代,修复线上故障30+起。
    • 负责公司前后端业务的开发, 开发了3个项目.

    下面是任职内容:

    灰豚官网页面的开发

    考虑到没有太复杂的页面设计, 直接使用原生html+css+js的形式开发, 框架使用到vue. 官网地址

    数字离线部署方案

    为了客户可以在无网环境中使用项目, 使用Gin+Vue设计一套用户本地推理模型使用方案.

    • 技术栈:
      • GO: Gin(Web框架)
      • Python: PyTorch(机器学习框架)
      • Vue: Vite(Typescript)构建前端
    • 文档: 设计完善的部署文档, 指导用户如何安装CUDA和PyTorch的版本依赖.

    数字人系统

    公司数字人项目其实有两套, 一套是采用易语言开发的, 前端后端都是使用易语言, 都是跑在Windows上的软件, 易语言这一套的功能比较完善, 但是不是很稳定, 而且推理比较慢, 没有做推理方面参数优化. 另外一套是Golang+React构建的, 这一套性能比较好, 但是功能相对比较少, 而且界面设计比较简单, 这两套系统都是外包做的, 贵司只有我一个开发者, 我比较擅长的是易语言和Golang+Vue的开发方式, 所以直接对Go这一套进行了重构, 采用Vue的方式构建前端.

    • 技术栈:
      • GinVueAdmin快速构建后台管理
      • NSQ
      • Websocket
      • Python: PyTorch
      • Vite: Vue(Typescript)
    • 运维工具:
      • Git
      • DockerCompose
      • NSQ(消息队列)
      • Nginx

    这个系统相比原来的页面新增了很多功能, 可以上传自己的数字人角色, 系统也可以预设定一些数字人角色和背景图/背景视频, 有可视化的调整界面, 可以预览和更换背景图, 直接在线生成各种角色的音频, 对接微软和阿里的TTS.

    项目中遇到的难点:

    • 分布式处理用户提交的数字人生成任务

    任务的生成不在服务器上面, 都是公司内部自己有一些显卡比较好的机器, 服务器将用户的任务直接丢到消息队列中即可, 而本地工作节点程序会订阅消息队列中的任务, 有新任务各个节点会自动在队列里面抢任务, 任务完成后将生成结果上传至阿里OSS, 然后调用服务端API, 由服务端在数据库中标记任务在完成状态, 如果用户由打开任务列表页面的话是会自动建立websocket链接的, 此时服务端可以在已建立的websocket链接列表里面找有没有来自某个用户的连接, 有的话会发送任务状态变更的消息到用户侧.

    • 用户/管理上传视频慢或过大报错

    用户是可以上传自己的角色用于生成数字人, 同时管理也可以在管理员后台上传预定义的角色, 这一块原先是直接上传到服务器, 由服务器去上传到阿里OSS, 后面发现了一些问题, 首先是视频都在服务器进行上传会占用服务器的带宽, 其次服务器带宽也有限, 同时上传的视频多了会变慢, 另外上传过大视频会在nginx就被已413状态码拒绝, 不过这倒是也不是什么大问题, 修改大小限制即可, 只不过这个是有默认限制1MB在. 通过查看阿里OSS的相关文档, 发现其实可以颁发一个临时令牌用于提供到用户侧给客户端进行直接OSS上传, 这样上传就快多了.

    • 处理用户上传的自定义视频

    用户上传视频需要立即生成一张预览图展示在前端, 也就说用户上传OSS成功之后, 立即回调后端服务, 服务再去使用ffmpeg直接远程生成一张预览图, 本来我以为ffmpeg生成预览图必须要从oss把视频完整下载下来然后生成一张预览图再去上传到OSS, 觉得会浪费流量而且影响效率, 看了下OSS服务其实有提供很多关于图片的相关操作, 例如自动给OSS图片加水印旋转滤镜之类的, 但是没有关于视频的操作, 然后给阿里开工单问他们能不能提供一个服务就是直接在OSS内部直接处理一个视频的预览图出来, 然后客服了另一个方法就是可以直接使用ffmpeg, 把本地路径直接换成oss资源路径就可以了, 生成速度也很快, 不需要完整下载视频, 获取到预览图再上传到OSS.

    # 深圳市齐泰贸易有限公司

    深圳市齐泰贸易有限公司成立于2013年10月,专注婚庆饰品和时尚饰品的设计生产加工以及销售,通过亚马逊平台向海外客户销售饰品领域的中国优品,并拥有美国、及欧盟各国自主品牌。 公司位于深圳罗湖区莲塘,周边工作和生活配套齐全,成立以来公司发展迅速,已完成产品的设计、供应链管理、网上销售、品牌推广、跨境仓储物流的整体布局,成为有一定基础和实力的跨境电商公司。

    qitay

    岗位: 技术人员 2020-12 至 2023-07

    • 负责迭代公司自研的进销存项目。
    • 优化Mysql数据库, 通过建索引及分表优化, 将查询速度从十几秒到几毫秒。
    • 搭建内网穿透服务网关,帮助销售人员在疫情封控期间能够管理公司数据。
    • 开发数据采集系统,负责采集销售人员在亚马逊上的销售数据到数据库中。
    • 开发聊天机器人,对接ChatGPT帮助销售人员完成亚马逊listing和五点描述的撰写,OTP权限统一管理,安全管理公司所有运营账户。
    • 帮助企业办公与钉钉的深度集成,例:考勤,工资条,各部门审批流程,协同表格等

    下面是任职内容:

    亚马逊销售数据与库存采集集成

    为了使销售人员可以直观的在自研进销存系统中看到销售数据和库存情况,方便销售人员灵活调整运营策略,以及上级领导可以直观看到汇总后的销售报表等小组数据的统计。

    技术架构:Golang(GORM) + Amazon SPAPI + Mysql

    • 采集层:SPAPI多接口聚合 + 动态凭证管理
    • 处理层:协程池并发控制
    • 容错层:令牌桶限流 + 重试策略

    海外网站镜像

    帮助销售人员了解海外用户审美和美工排版等具有地域化设计的内容,由于长城封锁限制,需要提供一个反向代理服务,镜像十几个目标站点如Instagram / Etsy / Pinterest等。

    技术架构:Golang

    • 代理层:篡改Cookie域,修改JS内容。

    聊天机器人系统

    项目最先是想使用AI(ChatGPT)提高销售人员编写亚马逊商品标题、五点、listing等文案的效率,因为考虑长城封锁限制,加一层中间层转到钉钉机器人提供给企业人员使用。后来因为疫情封控影响,又陆续添加了远程唤醒公司电脑的操作指令和账号OTP登录令牌申请等功能。

    技术架构:Golang(Gin/GORM) + 钉钉开放平台 + OpenAI API

    • 通信层:钉钉机器人卡片式交互
    • 集成层:WOL协议唤醒电脑 / OTP算法库 / GPT-3.5-Turbo API

    该项目优化了公司内部传统OTP令牌的获取流程,结合远程办公提高办公效率90%,为销售人员带来的更多的关键词扩展和优化技巧。

    # 学历

    广州科技贸易职业学院 - 大专(全日制) - 云计算技术与应用

    核心课程:Linux、Docker和Windows Server