Java ERP开发面试题及详细答案(实战版)_第1页
Java ERP开发面试题及详细答案(实战版)_第2页
Java ERP开发面试题及详细答案(实战版)_第3页
Java ERP开发面试题及详细答案(实战版)_第4页
Java ERP开发面试题及详细答案(实战版)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaERP开发面试题及详细答案(实战版)本套面试题针对JavaERP后台开发岗位整理,适配中小企业ERP、生产ERP、进销存ERP、财务ERP岗位面试,内容贴合项目实战、企业真实提问场景,涵盖Java基础、Spring全家桶、数据库、事务、并发、ERP核心业务、单据流程、权限设计、性能问题等高频考点。一、Java基础高频面试题(ERP刚需)1、ERP系统中大量使用实体类,说说你对JavaBean规范的理解,为什么ERP实体必须严格遵守规范?参考答案:JavaBean核心规范主要四点:私有成员变量、无参构造、get/set方法、实现序列化接口。在ERP系统中严格遵守规范主要有几个原因:第一,ERP大量做参数接收、数据库映射、VO/DTO转换,框架(MyBatis、Spring)默认依赖无参构造反射实例化对象,缺少无参构造会直接报错。第二,所有单据实体(订单、入库单、出库单、财务凭证)需要序列化,用于缓存、Redis存储、RPC传输、前后端JSON序列化,不实现序列化接口会出现序列化异常。第三,get/set方法是属性赋值取值的唯一入口,ERP业务字段多、字段校验多,统一通过set方法可以统一做字段拦截、默认值填充、数据脱敏,避免业务漏洞。2、==和equals的区别,ERP开发中哪些场景容易踩坑?参考答案:==对于基本类型比较数值,对于引用类型比较内存地址;equals是对象内容比较,默认继承Object的equals也是比较地址,String、Integer等类重写后比较内容。ERP常见踩坑场景:一是单据状态、审核状态用Integer包装类对比,大于127的数值会出现地址不同,导致判断异常,业务上出现单据状态判断错误、审核流程卡死。二是字符串单号、客户编号、物料编号用==对比,导致相同编号判定不相等,数据匹配失败。实际开发中,包装类数值对比优先用equals,字符串对比一律用equals,状态判断可以统一枚举处理,彻底规避问题。3、说说ArrayList和LinkedList的区别,ERP单据列表查询该怎么选?参考答案:ArrayList基于数组实现,查询快、随机访问效率高,增删末尾数据快,中间增删慢;LinkedList基于双向链表,随机查询慢,首尾增删效率高。ERP开发中,单据列表、物料列表、客户列表、分页查询结果,一律使用ArrayList。因为ERP核心场景都是批量查询、遍历展示、分页返回,极少做中间频繁插入删除。只有批量处理数据、频繁首尾操作的特殊批量任务,才会用到LinkedList。二、Spring&SSM/SpringBoot核心面试题(ERP核心框架)1、SpringIoC的理解,ERP项目中IoC带来的最大优势是什么?参考答案:IoC是控制反转,把对象的创建、依赖管理交给Spring容器,开发者不用手动new对象、管理依赖关系。核心是依赖注入,通过构造器、set、注解完成依赖赋值。对ERP项目最大的优势:ERP业务分层极多,单据服务、库存服务、财务服务、审核服务相互调用,IoC彻底解耦业务层代码,方便分层开发、单元测试、业务替换。比如修改入库逻辑时,不需要改动大量依赖代码,只需要替换对应Bean,极大降低了复杂业务的维护成本。2、SpringAOP的应用场景,你在ERP中用AOP做过哪些功能?参考答案:AOP面向切面编程,在不修改原有业务代码的前提下,对方法进行增强,适合通用公共逻辑抽取。我在ERP项目中主要用AOP实现这些通用功能:1、操作日志记录:所有单据新增、修改、删除、审核、反审核操作,自动记录操作人、操作时间、操作内容、单据编号,不用每个业务方法手写日志。2、权限拦截:接口请求前校验用户角色、单据操作权限,无权限直接拦截返回提示。3、数据脱敏:客户手机号、财务金额、私密数据查询时自动脱敏。4、事务日志、方法耗时统计:监控ERP批量单据处理耗时,排查卡顿接口。3、Spring事务传播机制,ERP多单据嵌套业务怎么用?参考答案:常用的核心传播机制:REQUIRED:默认机制,有事务加入当前事务,无事务新建事务;REQUIRES_NEW:新建独立事务,不受外层事务影响;SUPPORTS:有事务就用,无事务非事务运行;NOT_SUPPORTED:强制非事务运行。ERP实战场景:主业务比如采购入库,外层用REQUIRED,保证入库、库存增加、日志记录整体要么全部成功、要么全部回滚。日志记录、操作记录这类附属业务,用REQUIRES_NEW,即使主业务回滚,操作日志依然保留,方便排查问题,不会出现业务失败无日志的情况。4、Spring事务失效的场景,ERP开发中踩过哪些坑?参考答案:常见失效场景:1、方法非public,事务注解不生效;2、同类中方法内部调用,AOP无法拦截,事务失效;3、try-catch捕获异常,没有抛出,Spring无法触发回滚;4、数据库引擎不支持事务(MyISAM)。ERP踩坑经历:之前做单据批量保存时,在service内部try-catch了所有异常,程序报错后数据没有回滚,出现部分单据入库成功、部分失败,数据不一致。后续统一规范:业务异常手动抛出RuntimeException,让Spring感知异常自动回滚,查询类方法可以捕获异常,增删改业务禁止随意捕获异常。三、数据库&MyBatis高频题(ERP重中之重)1、ERP系统为什么必须用InnoDB,不能用MyISAM?参考答案:ERP核心是单据、库存、财务数据,对数据一致性、安全性要求极高。InnoDB支持事务、支持行级锁、支持外键、崩溃恢复,满足ERP业务需求;MyISAM不支持事务、不支持行锁,查询快但增删改是表锁,并发极差,且数据出错无法回滚。如果用MyISAM,多人同时做入库、出库、开单会出现大量锁表,导致系统卡顿、单据数据错乱、库存数据不一致,所以ERP项目全部强制InnoDB。2、数据库乐观锁、悲观锁在ERP库存、单据业务的应用?参考答案:悲观锁:认为数据一定会冲突,查询时加锁,别人无法修改,适合强一致性、高精准业务。乐观锁:认为冲突概率低,通过版本号控制,更新时校验版本,冲突则更新失败重试,性能更高。ERP实战使用:1、库存扣减、盘点、财务结账使用悲观锁,防止超卖、库存负数、账目错乱,保证数据绝对一致。2、单据修改、基础资料编辑(客户、物料、部门)使用乐观锁,通过version版本号控制,多人同时编辑时提示数据已更新,避免覆盖他人操作,同时保证系统并发性能。3、MyBatis的#{}和${}区别,ERP开发中如何避免SQL注入?参考答案:#{}是预编译参数,会自动拼接占位符、转义字符,防止SQL注入;${}是直接字符串拼接,无预编译,存在严重注入风险。ERP开发规范:所有普通参数查询、条件查询一律使用#{};只有动态排序、动态表名这类必须拼接字符串的场景才少量使用${},且必须在代码层做参数白名单校验,禁止用户直接传参,彻底杜绝SQL注入。4、ERP单据量大,如何做SQL优化?参考答案:1、合理建索引:单据编号、物料ID、客户ID、时间、状态、租户ID建立索引,避免全表扫描;禁止过度索引,影响增删改效率。2、杜绝select*,只查询业务需要的字段,减少数据传输。3、分页查询必须加limit,ERP列表查询一律分页,禁止一次性查全量数据。4、大表拆分:单据表数据量过大时,按时间分表(按月/年分表),历史单据归档。5、避免join过多表,ERP多关联查询可以适当冗余字段、或者拆分查询。6、开启慢SQL监控,定期优化耗时查询。四、ERP核心业务面试题(重点必考)1、简单说下ERP进销存核心流程,以及你负责的模块?参考答案:进销存核心流程分为采购、销售、库存三大主线:采购流程:采购申请→采购订单→采购入库→财务应付账款生成→付款核销。销售流程:销售订单→销售出库→发货→财务应收账款生成→收款核销。库存流程:入库、出库、调拨、盘点、库存结余更新、库存流水记录。我项目中主要负责单据开发、库存核算、审核流程、数据对账模块,重点处理单据状态流转、库存实时更新、事务一致性问题。2、ERP单据状态流转怎么设计?如何防止状态错乱?参考答案:单据状态统一用枚举定义,常见状态:草稿、已提交、已审核、已驳回、已作废、已完结。严格限制状态流转规则,比如:草稿只能提交,提交后只能审核/驳回,审核后不能直接修改,只能反审核后编辑。防止错乱的方案:1、代码层做状态校验,非法流转直接抛出异常拦截;2、数据库更新时加状态条件,updatesetstatus=新状态where单号=?andstatus=旧状态,保证原子性;3、所有状态变更记录操作日志,可追溯;4、审核、反审核、作废功能独立拆分,互不干扰。3、ERP库存超负数怎么解决?如何保证库存数据准确?参考答案:库存负数是ERP最常见的BUG,核心原因是并发出库、先出库后入库、无库存校验。解决方案:1、出库前强制校验实时库存,库存不足直接拦截,禁止出库;2、库存更新加行锁,同一物料同一仓库并发操作互斥,防止并发超卖;3、所有出入库操作必须记录库存流水,每一笔变动有据可查,方便对账纠错;4、定时库存盘点,系统自动比对账面库存和实时库存,差异自动预警;5、业务层控制出入库顺序,禁止未入库先出库。4、ERP审核流程如何设计?支持多级审核怎么做?参考答案:基础审核设计:单据提交后进入审核队列,记录当前审核人、审核节点、审核状态,审核通过后更新单据状态,触发后续业务(入库、记账)。多级审核实现方案:1、数据库设计审核流程表、审核节点表,配置每级审核角色、审核顺序;2、单据绑定审核流程,按节点顺序逐级审核,上一级未审核通过,下一级不可操作;3、支持驳回、驳回重提、终止流程,每一步操作记录日志;4、全部节点审核完成后,单据自动变为已审核状态,触发后续业务逻辑。五、并发与性能、线上问题排查1、ERP多人同时开单、同物料出库,并发问题怎么解决?参考答案:核心解决方案三种,根据场景选用:1、数据库悲观锁:库存更新、核心单据更新加行锁,保证串行执行,数据绝对一致;2、乐观锁版本号:普通单据修改使用,冲突重试;3、分布式锁:集群部署的ERP,使用Redis分布式锁,保证同一物料、同一仓库同一时间只有一个操作执行,彻底解决集群并发问题。2、ERP系统查询卡顿、列表加载慢,你怎么排查优化?参考答案:排查步骤:1、查看接口响应时间,定位慢接口;2、打印执行SQL,查看是否有全表扫描、未加索引、join过多问题;3、检查是否存在重复查询、循环查库的代码问题;4、查看服务器CPU、内存、数据库连接池状态,是否连接耗尽。优化手段:加索引、优化SQL、分页、缓存热点数据(物料、客户、基础数据)、抽取定时任务预处理数据。六、项目实战&面试高频反问1、你在ERP项目中遇到的最难的BUG是什么?怎么解决的?参考答案:之前遇到过并发出库导致库存负数、账目对不上的问题。多用户同时对同一个物料出库,代码层库存校验通过后,数据库并发更新,导致超库存出库,库存为负,月末对账不平。排查后发现是没有加锁控制,请求并发时校验逻辑失效。解决方案:库存更新SQL加行锁查询,同时引入Redis分布式锁锁定物料+仓库维度,保证同一时刻同一物料只能有一次出库操作,同时新增库存流水对账机制,彻底解决库存错乱问题。2、ERP为什么要做数据冗余?哪些字段适合冗余?参考答案:ERP单据查询多、关联表多,如果完全范式设计,查询需要大量连表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论