国际物流杰信项目面试总结

1.面试时如何讲解项目?

讲出三个层次,
1)讲项目的背景,讲特色的业务
2)讲业务的复杂度
3)从业务角度牵扯出技术亮点

每一层都要挖陷阱,让面试官问问题。

从面试题中找出十个重点,把它们自己总结一段话,300~500字。
综合所学的所有知识

2.业务

a)购销合同

杰信和生产厂家要签订一个购销合同,购销合同包括三部分内容,包括合同主信息和多个货物信息和多个附件信息。
合同和货物是一对多,货物和附件是一对多。
货物和附件都有指定的生产厂家,附件还有一个分类需要取自基础表。大概字段有近90个。
在购销合同中还有一个复杂的报表打印,这个表单内容非常复杂,它打印出合同的主信息,还有多个货物信息,一页纸如果是一个生产厂家,必须另起一页打印。一个页用户可以选择打印一款货物,也可以选择打印两款货物。
购销合同合同数量比较多,积累10年多的数据,客户要求,将这些数据导出到excel中备份这些数据。
我就研究实现了一个数百万海量数据的导出。

b)出口报运

杰信和客户签订合同后,找到生产厂家开始生产货物,于此同时向海关申报准备运输的货物,货物的信息和重量信息和体积信息,为装箱做准备。
出口报运时货物信息来自合同下的货物信息,本身环境新增了部分货物的信息包括重量信息和体积信息。
一个报运来自多个合同。在出口报运时,它其他业务的集中体现,在这里建立一个流程状态,它能反馈后续流程流转到哪里。
在后续流程流转时,都要回执这个状态。我们系统给客户系统也提供了这个货运流程的跟踪,让可以可以在他的系统中实时查询出他下的订单的当前订单流转到哪里,是装箱,是委托,还是走到发票等等。

我们的系统采用的是J2EEE技术实现,客户的系统采用.net技术实现。
我们系统给它们的系统提供了一个WebService服务,使用Apache CXF实现,它可以异构系统来直接访问我们的系统,进行订单的流程查询。

c)货运管理流程

货运管理是杰信项目的二期的核心内容,它包括:购销合同、出口报运单、装箱单、委托书、发票通知、财务统计这几步。

购销合同是客户和杰信签订合同后,向生产厂家签订的合同称为购销合同。
然后杰信向海关进行出口报运的申请,海关批准后,杰信找货代公司订箱子,杰信找拖车公司订拖车,拖车拉着空箱到生产厂家指定的仓库在验货员的监督下装货,拖车拉着满箱到海关指定的码头指定的区域卸货。等待装船。
在装船前,海关进行抽检。船来后进行转船。然后船离开装运港,我们杰信的这单订单就顺利完成。
船离开前,杰信向客户快递一个发票通知,同时附上提单。客户收到发票,支付剩余尾款,收到提单,等船到目的港,卸货后,客户拿着提单提货。
杰信最终进行内部财务核算,核算这单生意获取的利润,提交给领导审核。

3.设计

a)冗余设计

在设计时我们首先遵循三范式来设计表,然后才用反三范式的设计。三范式追求的是节省空间,创建表信息时,不能有重复的内容,

例如:表必须有主键,列不能重复,列信息不能通过现有字段数据加工而成。
这样实现存储的数据信息所占空间比较小,数据出处都唯一。反三范式,采用冗余技术实现表信息在查询时非常快捷,用户体验非常好,用户满意度非常高。

b)打断设计,跳跃查询

在杰信的业务中,它的货运管理流程分为6步,关联表达到10级以上。
系统在建设之初我们就考虑到关联层级过多后,随着用户系统使用,数据线性增长,数据量不断增加,当数据量越来越大时,系统的访问会越来越慢。
于是我们在表设计时,遵循一个原则,关联关系不四层。
具体我们实现时通过主表中加一个字段,来存储主表和子表的一对多关系。它们都存储代理主键,它们之间用特殊符号隔开。
这样在实际开发业务时,需要查询的时候,就可以跳过中间的层级,直接查询业务所需要的信息。在
出口报运中就使用这种设计方式。出口报运单来自多个购销合同,出口报运单中需要获取合同下的货物的部分信息。
新增时利用报运关联的合同的编号值,也就是打断设计的这个字段值,直接拼接为in子查询串,直接查询合同下的货物,这样跳过合同表。查询非常快捷。效率倍增。

c)一对一的特殊设计

在杰信系统中有个很有特点的地方,装箱、委托、发票、财务它们都是一对一的关系。
一个委托来自一个装箱,一个发票来自一个委托,一个财务来自一个发票。它们每个业务都需要取报运下的货物信息。
我们设计时,将委托、发票、财务的主键都存放装箱的ID。
委托、发票、财务表主外键合一。这样设计后,实现业务只要获取到其中一个对象的ID,不论是装箱、还是委托的,还去其他的。都可以直接查询其他的对象。操作更加灵活。可以实现跳跃查询,本来财务需要报运下的货物和附件信息,本来要通过发票,委托,装箱,在找到关联的多个报运,在找到多个货物,在找到多个附件。
我们新的设计后,直接找到装箱,找到装箱的打断字段,直接查询货物信息和附件信息。中间跳过5、6层。查询效率极高。

4.技术亮点

a)工作流

我们项目中采用工作流,Activiti 5,在货运管理中使用它,先实现货运管理流程,从购销合同销售人员的申请开始,销售人员处理完,提交给销售部领导进行审核;
销售部领导审核通过后,提交到船运部门,船运专责进行报运处理,处理完提交给船运部报运领导进行审核,船运部报运领导审核通过后,提交给装箱专责,装箱处理完,提交给船运部装箱领导,船运部装箱领导审核通过后,提交给委托专责,委托处理完,提交给船运部发票专责,发票专责处理完, 提交给船运部发票领导,船运部发票领导审核通过后,提交给财务专责,财务专责进行统计分析后,交给财务部领导审核,财务部审核通过后,流程结束。如果其中的环节领导审核不通过,打回上一个流程。上一个流程补充缺失内容,重新提交审核。

b)百万海量数据的导出

采用poi来实现,开始时我们采用HSSF对象来实现,当我们导出6万5千多条数据时,系统报错,记录数超出excel 2003版本的限制,它支持65536行数据。远远不够存放我们的记录。
我查阅了相关资料,将jar包升级poi 3.9版本,升级workbook对象为XSSF对象,它可以操作2007以上版本,这样将数据扩充到1048576行,列扩充到65536列。
这样我们就实现一个sheet支持百万数据。然后打印又出现了一个问题,当打印将近30万时,系统越来越慢,CPU占用率很高,内存占用率很高,打印到40万,系统崩溃,报堆溢出错误。
然后我项目组研究查阅资料,发现高版本的poi提供SXSSF对象它支持大数据量的导出,我们换成这个对象后,打印非常顺畅,CPU占用率不高,内存占用率不高。顺利完成数据的导出。

c)全文检索

购销合同查询非常频繁,用户要查,销售要查,船运要查,各个业务都需要查看合同数据,合同又有很多项,可以按合同号进行查询,按客户名称模糊查询,等等。
我们系统采用lusece实现全文检索,我们将核心的查询的条件都作为分词索引,构建分词索引库,这样实现购销合同的一个全文检索,为各个业务提供查询。

d)Aapche CXF

现今最强大的一个WebService实现。我们项目使用maven,依赖jar。修改报运的Service将其改造为一个WebService,对其不需要对客户开发的公用方法进行屏蔽,只留它查询某个报运信息的接口方法,然后配置cxf-servlet.xml。
发布我们的报运状态跟踪的服务。这样服务端完成。客户从它的系统中使用ajax访问我们的系统,从系统中获取数据,提交一个SOAP requestXML,获得数据后,来解析xml,从中摘出数据,显示到他们的系统中。

e)Maven

我们系统都采用Maven构建,我们公司搭建了一个私服,我们项目采用maven 工程,写好jar包的坐标,保存pom.xml文件时,myeclipse进行jar搜索。
它先到本地仓库进行搜索,找到就引入项目中,如果找不到,它会去我们的公司的私服去搜索,搜索到,下载到本地仓库;搜索不到,它自动去远程maven中央仓库下载,下载到公司的私服中,再下载到本地仓库。

国际物流杰信项目总结与面试相关推荐

  1. 杰信项目第三天知识点(工作表模板+动态生成目录+动态生成重名文件+购销合同增删改查)

    1.工作表模板使用方法: //获取模板文件,路径为存放模板文件的路径 HSSFWorkbook wb = new HSSFWorkbook( new FileInputStream(rootpath+ ...

  2. 杰信项目第五天(合同复制+合同查看+出货表)

    1.合同复制的三种方法 第一种方法:通过旧对象,新对象,拷贝属性,get/set.绑定关联关系. 这种方式非常好理解,缺点:代码冗长.代码: public String copy1(){/** 操作步 ...

  3. 【springmvc+mybatis项目实战】杰信商贸-11.购销合同业务

    首先我们先了解一下业务,什么是"货运管理"? "货运管理"是国际物流的概念,往常我们货物送到国内没有那么多事情,但是货物发往国外就多了很多手续,依靠小物流公司我 ...

  4. 我的java学习笔记之杰信商务管理平…

        这个笔记是听陈子枢老师讲的杰信商务平台项目,主要是涉及到一些项目设计和实际开发中的业务场景,主要是分析业务及如何从业务中转换成技术细节以及如何开发一个项目,进入到一个项目组之后如何快速融入并上 ...

  5. 斩获 BAT 等 7 家 Offer。GitHub 4 万 Star 项目作者的面试经历

    AI 前线导读: 在 GitHub 上有一个高达 40 k+ star 的项目 CS-Notes,该项目记录了关于计算机科学方方面面的学习笔记,同时,作者在项目中分享了他 2018 年的校招面试经验, ...

  6. 一个企业上线PLM系统前应该做些什么?杰信PLM

    制造企业信息化主要由产品数据生命周期管理(PDM/PLM),企业资源规划(ERP),客户关系管理(CRM)等系统组成,而产品数据生命周期管理系统在企业中作为其它信息系统管理的数据源头.它管理着企业设计 ...

  7. 求职信分三步 面试结束后别忘写一封感谢信

    求职信分三步 面试结束后别忘写一封感谢信 如果把得到面试机会比作求职成功的第一步,那么写好求职信则是和招聘单位双方沟通的第一道桥梁.万宝盛华的HR告诉求职者,一封求职信的好与坏绝对影响您能否得到面试的 ...

  8. 面试Java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前的准备...

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:hsm_computer 链接:https://www.cn ...

  9. 嘘,这份0项目经验应对面试的独门秘籍,千万别被你的面试官发现~

    首先,在写这篇文章前,得先跟各位面试官道个歉. 没错,这篇文章就是要教你们的候选人如何在没有任何项目经验的情况下"瞒天过海",塑造一个实战大牛的形象. 毕竟项目经验实在太香了,手持 ...

最新文章

  1. 6.QML动画——状态与过渡
  2. android WebView总结
  3. Java getClass() VS instanceof VS ==
  4. SAP:2019年会有多么不一样?
  5. linux如何查看jupyter日志_Mac如何远程连接上Linux下的jupyter notebook
  6. 【数据结构与算法】之深入解析“复制带随机指针的链表”的求解思路与算法示例
  7. P4822 [BJWC2012]冻结
  8. 黑苹果 装SVN工具 cornerstone无法打开解决办法——网卡内建
  9. 大数据怎样帮助运维工程师实现无死角监控?
  10. Jvm(29),理解升级----C语言中的堆和栈的区别 (可以借鉴)
  11. python简单爬虫代码-python简单爬虫(二)
  12. 在pycharm运行正常,在命令行窗口出现引包错误
  13. 大学生创新创业大赛 项目申请书
  14. 论文常用实验数据收集整理
  15. linux下 查看 光模块信息,HPE品牌SFP光模块信息检查办法
  16. 黄河金岸诗词赋联大赛获奖名单
  17. uwsgi 的启动、停止、重启
  18. java ckfinder中文_CKfinder中文乱码的解决.
  19. 央行:推动企业征信市场高质量发展
  20. 电子计算机硬件是由哪五个部分构成,计算机硬件系统由哪五个基本部分组成?...

热门文章

  1. 问题解决之 Win10下 word 文件和 ppt 文件打开时遇到错误
  2. 胡子决定编程语言运势[转载]
  3. 高光谱知识(1)-高光谱成像技术的理解
  4. ROS中使用protoBuf通信
  5. 清理计算机磁盘碎片,电脑磁盘碎片清理工具(Auslogics Disk Defrag Pro)
  6. [BZOJ3240][Noi2013]矩阵游戏 快速幂
  7. 合肥学院ACM集训队第一届暑假友谊赛 B FYZ的求婚之旅 D 计算机科学家 F 智慧码 题解...
  8. C#实战011:Excel操作-获取Excel某一列数据并存入数组
  9. 后端使用SpringBoot和Jwt工具与Redis数据库+前端Vue Element Admin实现用户携带token的登录功能案例
  10. 世界上最复杂的函数_世界上最伟大的十大公式,你都知道哪些?