偏需求分析,一面

1.自我介绍(学校专业+实习经历+个人优势/与职位匹配度)

2.介绍实习工作,每一个从业务+技术去介绍

3.实习中最有挑战的工作/投入最大的工作,怎么解决难点,

对加盟商相关的多张业务表进行垂直分表。因为要在不影响原有功能的前提下,将一张包含基本信息,微信配置,商户端/司机端个性化配置,订单设置等多种杂糅信息的超大表,按功能职责拆分成多个独立的子表。

具体步骤:

(1)分析现状,确定拆分依据:梳理原表字段,识别出哪些字段属于“基本信息”、“微信配置”、“商户端个性化”、“司机端个性化”、“订单设置”这五类。拆分原则是:让每个表都有清晰的单一职责

(2)设计新表结构:创建五张新表,确保主键与原表一致(如加盟商ID)。

(3)实现代码兼容(最关键)

  • 数据库层:采用双写策略。先给原表增加一个“版本标记”或“迁移状态”字段。新数据写入时,同时写入原表和新表;老数据通过后台任务异步迁移。

  • 应用层:先让读流量指向原表,验证新表数据无误后,逐步将读流量切换到新表。使用适配器模式数据访问代理层,封装数据来源(原表还是新表),上层业务代码无感知。

  • 灰度发布:按加盟商ID或百分比切量,逐步切换,发现问题立即回滚。

(4)清理与验证:全量切换成功后,编写数据一致性校验工具,对比原表和新表数据。最后下线原表的冗余字段或归档原表。

为什么要拆分这些表,有什么好处?

  • 解决宽表问题:避免单表字段过多,导致行溢出或IO性能下降。

  • 提升缓存效率:热数据(如基本信息)和冷数据(如历史配置)分离,缓存命中率更高。

  • 便于扩展:微信配置表增加字段,不影响读取基本信息的查询。

  • 权限与安全:敏感字段(如支付配置)可以单独授权管理。

根据什么去拆分?

  • 业务职责单一性:一起变化的放一起,独立变化的拆开。

  • 访问频率/热度:高频字段(昵称、头像)与低频字段(详细协议、签名)分开。

  • 字段长度:大字段(TEXT、BLOB)单独拆出。

  • 变更频率:稳定字段(创建时间)与频繁更新字段(最后登录IP)分开。

表拆分,代码层如何修改?

  • Repository模式:创建 FranchiseeRepository,内部组合 BasicInfoRepoWechatConfigRepo 等。上层服务只调用 FranchiseeRepository

  • 数据组装层:使用 Composite 或 Assembler 模式,将多表查询结果组装成完整的领域对象。

  • 事务管理:跨表写操作需要使用分布式事务最终一致性方案(如本地消息表+定时任务),放弃强一致性以换取高可用。

4.给定一个场景,输入一个文件,给定一些我感兴趣的关键词或者提示,把文件里相关的内容输出,最终形成数据库进行数据交互,你准备怎么做?

输入pdf文件,原件保存到数据库,引入ocr识别全部内容,同时保存到数据库。引入AI去根据关键词提取内容中相关的内容,输出并保存。

我会设计一个“智能文档处理流水线”,核心模块包括:

(1)文件上传与预处理:接收PDF,校验大小/格式,生成唯一ID。将原始PDF保存到对象存储(如OSS),元信息存入数据库(如文件名、上传时间、存储路径)。

(2)内容提取层:如果是文字型PDF(可复制文字),使用 PyPDF2 / pdfplumber 直接提取文字。如果是扫描型PDF(图片),调用 OCR服务(如Tesseract、百度OCR、AWS Textract) 识别文字。同时保存每页的OCR原始结果和坐标信息。

(3)智能解析层:不直接让大模型处理整个PDF(成本高、慢)。采用两阶段法阶段一(召回):用关键词匹配轻量级NLP(如TF-IDF、BM25) 快速筛选出包含感兴趣内容的段落/页面。阶段二(精排/提取):将筛选出的片段 + 用户关键词 + 提示词,发送给大模型(如GPT、Claude)。让模型返回结构化的JSON,例如:{“关键词”:“合同金额”,“相关内容”:“100万元”,“上下文”:“...“}。

(4)存储与交互:将提取的结构化数据存入关系型数据库(便于精确查询)和全文检索引擎(如Elasticsearch)。用户搜索时,先走ES做全文检索,再按需回查原始PDF。

从用户的视角去思考一下,针对这样一个系统,你要建哪些核心的模块或功能?

我答:登录,用户输入,结果展示,历史数据查询。

提示:公共模块和不同用户使用的模块

核心模块设计(分层视角)

(1)公共模块:

  • 认证授权:登录/注册、JWT鉴权、RBAC权限控制。
  • 文件管理:上传、下载、预览、删除。
  • 任务队列:异步处理大PDF,避免阻塞(用Redis/RabbitMQ + Worker)。
  • 日志与监控:操作审计、处理耗时追踪。

(2)面向普通用户模块:

  • 智能提取工作台:上传文件 → 填写关键词(支持短语、正则、排除词) → 提交任务 → 实时查看进度。
  • 结果展示:高亮关键词,点击跳转到PDF原文位置,支持导出CSV/Excel。
  • 历史记录:按时间、文件、提取结果搜索,支持重新运行或修改关键词再运行。

(3)面向管理员模块:

  • 模板管理:预设行业关键词包(如“合同类:甲方、乙方、金额、有效期”)。
  • 模型配置:调整OCR引擎、大模型API Key、提示词模板。
  • 数据审计:查看所有提取结果,标记错误样本用于模型微调。

扩展:

  • 如何提升准确率:对于固定格式的PDF(如发票、报表),优先用规则引擎+正则;对于非固定格式,再用大模型。可以加入人工标注反馈闭环,持续优化模型。

  • 成本与性能优化:大PDF切分处理(按页或按章节),只把相关片段送大模型。缓存常见PDF的提取结果。

  • 数据交互设计:数据库设计至少包括:files 表(文件元信息)、extraction_tasks 表(任务状态、关键词)、extraction_results 表(结果JSON、置信度、位置索引)。

5.冒泡排序,时间复杂度和空间复杂度

冒泡排序通过两两比较,每次将最大或者最小的元素移动到整个序列的一端。

public static void bubbleSort(int[] array){
    int temp = 0;
    for(int i=0;i<array.length-1;i++){
        for(int j =0;j<array.length-1-i;j++){
            if(array[j]>array[j+1]){
                //交换两个数组元素的值
                temp = array[j];
                array[j] = array[j+1];
                array[j+1] = temp;
            }
        }
    }
    //遍历输出数组元素
    for(int value : array){
        System.out.print(value + ",");
    }
}

// 时间复杂度O(n的平方),空间复杂度O(1)

其他排序复习:面试中常用排序算法实现(Java)-腾讯云开发者社区-腾讯云https://cloud.tencent.com/developer/article/1013629

6.反问:

技术团队规模,所做业务大小

建议——基础知识不扎实,多刷题,对于一个产品解决问题的思维,对于简历每一个项目的功能的深挖(从需求分析,为什么要这么做——到可行性分析,要怎么做——到代码实现,用了什么技术做——到功能展现,实现了什么功能,有什么提升)


偏内部系统开发,制造业

1.自我介绍,毕设做的咋样,为什么实习辞职

2.数据治理有没有经验

数据标准化:统一不同来源的字段命名、类型、单位(如日期统一为 yyyy-MM-dd,金额统一为“元”),确保用户看到的是正确易懂的数据。

数据质量检查:编写脚本定期扫描空值、重复值、异常值,并生成质量报告,查看商品市场价格爬取是否正常。

3.给定一个pdf文件,要把对应部分的数据录入到系统中,同时要根据一定规则输出我们的产品的一个文件,你会怎么做?

(1)解析与提取:识别PDF类型:文字型用 pdfplumber / Apache PDFBox;扫描型用OCR(Tesseract / 百度OCR)。提取原始文本或结构化表格。

(2)目标数据录入:规则配置化:定义JSON格式的提取规则(如关键词定位、正则、XPath-like路径)。智能匹配:对于非固定格式,使用命名实体识别小模型(如LayoutLM)抽取特定字段(如合同编号、日期、金额)。人工校验兜底:低置信度数据推送到待审核队列,支持前端修正后入库。

(3)数据录入:设计中间表 pdf_extract_tasks(状态、原始文本、提取结果JSON)和业务表。

(4)按规则输出产品文件:将录入的数据和用户上传的要求结合,用模板引擎(Velocity / Apache POI)动态生成最终产品文件,提供下载或推送接口。

扩展:

Velocity是一个填空引擎,需要用户编写特定语法的文本模版(如Hello,$username!),然后将Java对象里的数据填入模版。模版是文本文件,可以是Word,HTML网页,Java代码,XML配置文件,SQL脚本等。专注于填充任务,但较难控制格式。

Apache POI是一个操作Microsoft Office格式文件的工具包,直接通过Java代码在内存中创建、读取和修改Excel/Word/PPT文件,开发者可以像操作数据库一样操作文件的单元格、段落等元素。开发者编写代码去读取一个.docx或.xlsx文件,找到要填充数据的位置。功能强大,能实现任何Office文件的程序化操作。

4.有没有用数据化手段去优化某一个流程,你是怎么发现这个痛点并且落地的?

我通过搭建智能数据分析平台,将业务人员“提需求→等开发写SQL→手动做图表”的传统流程,优化为“上传Excel + 自然语言描述需求 → AI自动生成ECharts代码和分析结论”的自助式流程,将单次分析需求时间缩短,同时释放了开发资源。

5.员工填写数据时,缺乏专业性的认知,比如文件命名就很主观,不是标准格式,怎么完善这个规范的录入?

  • 默认规则库:在系统设置中预设不同业务场景的命名规则(如合同文件:客户名称_合同号_签署日期)。

  • 输入辅助:使用下拉选择 + 日期选择器 + 自动填充前缀,减少手动输入。例如选择“项目A”后自动生成 ProjectA_20260408_,用户只需补充序号。

  • 上传组件前端校验:当员工上传文件时,前端根据正则校验文件名格式(如 项目名_日期_版本号.pdf),不符合时弹窗提示并阻止上传。

6.实习时,怎么去熟悉原有系统和开发流程的,有没有流程或开发逻辑的一套手册,代码有没有什么规范?

(1)阅读系统文档,了解已有系统的功能和公司业务。

(2)安装软件和配置环境,运行示例项目,学习项目的基础功能和代码。针对老代码,可以从接口出发,从Controller层,打断点调试追踪一次完整请求。

(3)做一个小功能,比如加一个字段,经历完整的一次开发:需求—设计—编码—测试—上线。

(4)协作开发一个独立功能,理解模块间的依赖和约定。

(5)独立负责子模块。需求分析,技术方案确定,代码开发,功能测试上线。

开发是自己从头到尾做,还是会根据领导指示来,开发一个功能,时间分配是怎样?

  • 需求与方案:领导分配任务后,我先写需求理解文档技术方案设计(包括数据库变更、接口定义、异常处理),提交Leader评审。

  • 开发规范

    • 代码规范:遵循阿里巴巴Java开发手册(配套P3C插件即阿里巴巴Java开发规约插件,可直接集成到IDEA等开发工具,实时监测代码是否符合规范),使用Lombok简化POJO(编译器自动生成getter、setter、构造方法、toString、equals等,基于注解和编译器字节码增强),Checkstyle自动检查(开源的Java代码静态分析工具,通过分析源代码文件,识别并报告违反编码标准的问题,如命名规范、代码结构、注释质量等)。

    • Git规范:feat,fix,comment等提交注释。

    • 每周代码审查会和技术分享会:组内轮流review,重点关注可读性、边界条件、性能。

  • 时间分配:需求理解+方案设计占40%,编码50%,测试10%。难点功能会先做demo验证(POC),拉长设计阶段。

Lombok 常用核心注解

注解 作用 典型使用场景
@Getter / @Setter 为字段生成get/set方法 仅需部分字段的get/set时
@Data 一站式聚合@Getter+@Setter+@ToString+@EqualsAndHashCode+@RequiredArgsConstructor 日常POJO开发最常用
@NoArgsConstructor 生成无参构造器 Spring MVC参数接收、MyBatis反射实例化(@Data不生成,必须手动补充)
@AllArgsConstructor 生成全参构造器 需要一次性初始化所有字段时
@Builder 生成建造者模式的链式调用 复杂对象构建,一行代码替代多行set
@Slf4j 自动注入log日志对象 省去private static final Logger log = ...的重复声明
@ToString 自定义toString方法 配合exclude排除密码等敏感字段
@EqualsAndHashCode 自定义equals和hashCode ORM场景可指定仅基于主键id生成

7.你的智能数据分析平台,怎么实现降本增效的?

  • 自动化数据清洗:原来需要手工Excel整理(去重、缺失值填充、异常过滤),通过平台内置的规则引擎+轻量ETL自动完成。配置数据处理的逻辑(什么要,什么不要这样的),可自行修改的,根据这个去转换数据。

  • 弹性计算资源:使用线程池 + Redisson 实现分布式任务调度。分析高峰期自动扩容线程数,闲时缩容,避免固定大集群浪费。

  • 智能辅助输出:分析结果自动调用AI生成文字解读(“华东区销售额下降5%,主要由于X产品缺货”),并推荐可视化图表(柱状图/热力图)。分析师不需要手动撰写描述,直接从图表+文案中提取结论。

扩展:

规则引擎:智能的、可以随时修改的“如果-那么”决策系统,把复杂的容易变化的业务逻辑从代码里抽出来,可独立管理和修改。

轻量级ETL:ETL——Extract抽取(数据源拿到原始数据)、Transform转换(数据清洗过滤格式转换等 变成可用格式)(通常由一个或多个规则引擎驱动)、Load加载(存入数据库或系统)。轻量级——简单实现。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐