Java后端开发 面试知识点复习(三)
偏需求分析,一面
1.自我介绍(学校专业+实习经历+个人优势/与职位匹配度)
2.介绍实习工作,每一个从业务+技术去介绍
3.实习中最有挑战的工作/投入最大的工作,怎么解决难点,
对加盟商相关的多张业务表进行垂直分表。因为要在不影响原有功能的前提下,将一张包含基本信息,微信配置,商户端/司机端个性化配置,订单设置等多种杂糅信息的超大表,按功能职责拆分成多个独立的子表。
具体步骤:
(1)分析现状,确定拆分依据:梳理原表字段,识别出哪些字段属于“基本信息”、“微信配置”、“商户端个性化”、“司机端个性化”、“订单设置”这五类。拆分原则是:让每个表都有清晰的单一职责。
(2)设计新表结构:创建五张新表,确保主键与原表一致(如加盟商ID)。
(3)实现代码兼容(最关键):
-
数据库层:采用双写策略。先给原表增加一个“版本标记”或“迁移状态”字段。新数据写入时,同时写入原表和新表;老数据通过后台任务异步迁移。
-
应用层:先让读流量指向原表,验证新表数据无误后,逐步将读流量切换到新表。使用适配器模式或数据访问代理层,封装数据来源(原表还是新表),上层业务代码无感知。
-
灰度发布:按加盟商ID或百分比切量,逐步切换,发现问题立即回滚。
(4)清理与验证:全量切换成功后,编写数据一致性校验工具,对比原表和新表数据。最后下线原表的冗余字段或归档原表。
为什么要拆分这些表,有什么好处?
-
解决宽表问题:避免单表字段过多,导致行溢出或IO性能下降。
-
提升缓存效率:热数据(如基本信息)和冷数据(如历史配置)分离,缓存命中率更高。
-
便于扩展:微信配置表增加字段,不影响读取基本信息的查询。
-
权限与安全:敏感字段(如支付配置)可以单独授权管理。
根据什么去拆分?
-
业务职责单一性:一起变化的放一起,独立变化的拆开。
-
访问频率/热度:高频字段(昵称、头像)与低频字段(详细协议、签名)分开。
-
字段长度:大字段(TEXT、BLOB)单独拆出。
-
变更频率:稳定字段(创建时间)与频繁更新字段(最后登录IP)分开。
表拆分,代码层如何修改?
-
Repository模式:创建
FranchiseeRepository,内部组合BasicInfoRepo、WechatConfigRepo等。上层服务只调用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加载(存入数据库或系统)。轻量级——简单实现。
更多推荐




所有评论(0)