8.第八天

8.1 说一下项目中购销合同的相关逻辑, 以及涉及到的表和表间关系

  • 购销合同中涉及到对合同货物附件的修改会导致其他表也跟着改变。
    • 例如 删除合同就需要删除合同下的货物以及附件
      合同表和货物表是一对多的
      合同表和附件表是一对多的
      货物表和附件表也是一对多的

8.2 能够说出合同\货物\附件 在做增删改时 对其他表的影响

  • 合同:
    增-> 不影响货物附件
    删-> 需要删除合同下的货物与附件
    改-> 不影响货物附件
  • 货物:
    增-> 附件无影响 ; 合同修改 总金额和货物数量
    删-> 删除货物下的附件 ; 合同修改 总金额和货物附件数量
    改-> 附件无影响 ; 合同总金额更改
  • 附件:
    增-> 合同修改总金额和附件数量 ; 货物无变化
    删-> 合同修改总金额和附件数量 ; 货物无变化
    改-> 合同修改总金额 ; 货物无变化

8.3 你们公司为什么选择七牛云存储? 为什么没有自己部署本地的文件存储服务器呢? 如果让你选择部署的话,你会选择哪种服务器?

  1. 七牛云是云服务存储,我们公司对七牛云平台做了一些调研,他们安全性有保障,SDK也比较简单,是老牌的云服务平台,货物图片数据没有那么重要 公司高层就决定使用七牛云
  2. 之所以没有部署自己的服务器
    1. 我们整个架构使用的是tomcat来运行的,它本身并发量不高,如果在加载图片就会占用我们的线程和并发,所有我们不会在tomcat上存java以外的代码;
    2. 我们有考虑自己搭建图片服务器,但是搭建成本很高,也比较麻烦,同时有很多专业做云服务的平台可以满足我们的要求,可以直接使用平台存储货物图片
  3. 如果一定要自己部署的话, 我可能会选择HDFS

8.4 谈一下你们项目文件上传的一个流程以及这中间的注意事项?

  • 前端三要素:
    1.from表单添加 enctype属性设置为:multipart/from-data
    2.提交方式是post(get提交有大小限制,post没有)
    3.表单中必须有文件上传项:file,并且文件项需要给定name值
  • 后台接收:
    1.文件上传解析器(id)
    2.后台接收文件参数类型:MultipartFile uploadFile
    3.文件保存:
    源文件上传到七牛云服务器
    文件路径保存到数据库
  • 注意事项:
    1.上传文件名和上传数据的中文乱码
    2.上传文件应该放在外界无法直接访问的目录,保证服务器的安全
    3.上传文件同名问题;使用uuid来解决,在每个文件前加uuid
    4.一个目录中不能放过多的文件

9.第九天

9.1 聊一下你们公司那些地方用到的了POI的导入和导出

我们在做关于企业进出口的SaaS项目时,用到过POI技术,其中有合同中货物表单的导入导出,还有季度财务报表的导出,由于我们的项目面对的是一个群体,所以我们没有搞那些花哨的模板,而是选择了使用EasyPOI技术,界面简洁,清晰易懂。大多数人都能接受。

9.2 说一下POI技术的主要涉及的类

由于现在主流的文件格式是xlsx,所以在做POI导入和导出的时候,主要涉及到的类就是XSSF系列的类,分别有wookbook,sheet,row,cell

9.3 说一下POI导入的流程和导出的流程

  • 导入数据:
    上传文件,读取文件,使用XSSF的四个对象,按照簿-表-行-格的顺序解析文件,并将读取到的数据保存入实体类对象中,最后执行保存方法,将实体类对象保存入数据库。
  • 导出数据:
    建立在会计人员和管理人员的使用/查验方便基础上,我们的数据导出采用的是模板导出法。
    首先需要从会计or管理部门获取所需要的模板格式,读取这个模板xlsx文件,并且解析得到每个单元格的格式信息。
    然后查询需要输出的数据,遍历数据并且创建行/单元格,将数据以及读取到的格式写入到单元格中。
    工作簿对象利用字节输出流写出数据,最后使用DownLoadUtil工具将文件下载。

9.4 接触过百万数据的导入和导出吗?说一下它底层的思想是什么?

  • 了解过百万级数据的导入与导出 他的底层用到了SXSSFWorkBook类, 底层是Sax解析模式,
  • 是逐条解析 ,逐条释放 ,这样的效率会低一些, 但是占用的内存会比较低;
  • 对于大量的数据会处理起来比较合适 , 但是不能在表中防止过多格式。

9.5操作XML的两种模式或者POI的工作模式

  • 用户模式:基于dom4j的解析, 一次性加载xml文件再解析(XSSF对象底层用的就是dom4j,它的缺点是当数据量过大时,会导致内存溢出)

  • 事件模式:基于SAX方式解析XML,逐行加载,逐行解析(SXSSF对象底层用的是SAX,它的缺点是不能使用模板,并且不支持过多的CellStyle[62000])

10.第十天

10.1 聊一下你们项目中货代的整体流程?这中间涉及到的表有哪些? 表间关系是什么?

  • 我们平台的流程是这样的:签订购销合同->生成报运单->海关报运->(货物装箱->委托运输->发票催款->财务记账)
  • 涉及到了合同表,货物表,附件表,生产工厂表,报运单表,报运单货物表,报运单附件表
    • 合同表与货物表 一对多的关系
      合同表与附件表 一对多的关系
      货物表与附件表 一对多的关系
      货物表(附件表)与生产工厂表 多对一关系
      合同表与报运单表 多对一关系
      报运单表与报运单货物表 一对多关系
      报运单表与报运单附件表 一对多关系
      报运单货物表与报运附件表 一对多关系
      报运单表与装箱单表 多对一关系
      装箱单表-委托单表-发票催款通知表-财务表 一对一关系

10.2 聊一下你们公司为了提供数据的查询效率, 使用了哪些手段? 举1个例子说明,在那个地方用的?

我们主要用到了两个:
1) 打断设计思想
2) 反三范式

10.3 你们的项目在什么地方用到了webService技术? 如何实现的? 说一下webService技术的使用场景

  1. 我们这个项目在出口报运时用到了webService技术
  2. 实现过程:
    根据海关要求封装报运单和报运单货物,发送海关报运,然后新建个定时器任务,来定时查询报运结果,
    如果报运通过就会返回报运结果,根据报运结果对我们的报运状态和货税等进行修改。
  3. webService技术的使用场景:
    系统间的服务调用

10.4 webService和dubbo技术的区别是什么?

  • webService是一个跨编程语言和跨操作系统平台的远程调用技术 webService不需要注册中心 效率与安全性低 一般用于系统之间的外部调用
  • dubbo是一款跨平台而不跨编程语言的远程调用技术 必须需要一个注册中心 效率与安全性能高 一般用于系统内部模块之间的调用

10.5 webSerivce有几种规范? 分别是什么? 区别是什么? 你们项目中用的哪个? 为什么选择这个?

  1. JAVA***有三种WebService规范 分别是JAX-WS JAX-RS JAXM&SAAJ 其中的JAXM&SAAJ已经废弃
    JAX-WS 是早期出现的WebService规范 通过SOAP协议传输数据 通过http的形式发送标准格式的XML文件数据
    JAX-RS 是JAVA针对REST 风格制定的一套Web服务规范 既可以发送json数据也可以以http的形式发送标准格式的XML文件数据
  2. 我们的项目使用的是JAX-RS, 它的使用比较简单

10.6 webService的JAX-WS规范的三要素是什么? 他们分别是干什么用的?
JAX-WS的三要素有SOAP,WSDL,UDDI

  • SOAP:是http+xml基于http协议,采用xml格式,用来传递信息的格式
  • WSDL:是使用说明书 用来描述热河访问具体的服务
  • UDDI:产品目录

11.第十一天

11.1 Quartz和Spring Task是什么? 你们的项目为什么选择Quartz? 它的优点有哪些? 使用场景说几个

  • Spring Quartz特点:
     1.默认多线程异步执行 
     2.一个任务在上一次调度未完成执行,下一次调度时间到时,会另起一个线程开始新的调度。在业务繁忙时,一个任务或许会有多个线程在执行,导致数据处理异常。 
     3.单任务同步:配置属性,可以使一个任务的一次调度在未完成时,而不会开启下一次调度 
     4.多个任务同时运行,任务之间没有直接的影响,多任务执行的快慢取决于CPU的性能 
     5.SchedulerFactoryBean不能使用注解来配置?还是我没找到注解的方法?
  • Spring Task特点:
       1.默认单线程同步执行 
       2.一个任务执行完上一次之后,才会执行下一次调度 
       3.多任务之间按顺序执行,一个任务执行完成之后才会执行另一个任务 
       4.多任务并行执行需要设置线程池 
       5.全程可以通过注解配置
  • 选用Quarta的原因:Quartz是一个完全由 Java 编写的开源任务调度框架,为在 Java 应用程序中进行任务调度提供了简单却强大的机制。
  • 使用场景
       (1)某些网站会定时发送优惠邮件
       (2)银行系统还款日信用卡催收款短信
       (3)某些应用的生日祝福短信等

11.2 Quartz的核心组件有哪些? 作用分别是什么?

  • Job:需要执行的java类
  • JobDetail:任务细节,用来指定java类和具体执行的方法
  • Trigger:触发器,配置时间规则和JobDetail
  • Scheduler:调度器,统一调度并管理所有的Trigger

11.3 了解Cron表达式吗? 说一说每个位置代表的意思? 说一下它的常用符号及代表的意义

  1. cron表达式是用来配置Quartz中Trigger的时间规则: 秒 分 时 日 月 周 年
  2. 常用的符号
    *:表示任意
    ?:忽略
    /:间隔
    -:范围
    ,:枚举
    L:Last 最后
    W:Work 工作日(周一到周五)

11.4 Echarts在你们的项目中的使用场景是什么? 谈一谈你对他的了解

  1. 我们项目中的统计分析模块用到了Echarts,生产厂家销售情况用到了饼形图,产品销售排行用到了柱形图,系统访问压力图用到了折线图
  2. Ecarts是由百度开发的一款开源的基于js图形报表组件,可以流畅的运行在PC和移动设备商,兼容当前绝大部分浏览器,借助它,我们可以轻松的绘制各种图形

12.第十二天

12.1 你熟悉的消息队列有哪些? 本项目中用的是哪个?

  1. 使用过的消息队列:
    ActiveMQ: 仅仅用于JAVA系统间通讯, 不能跨语言
    RabbitMQ: 基于AMQP协议, 跨语言
    RocketMQ: 一般用于电商项目
  2. 本项目中用到的是 RabbitMQ

12.2 说一下你们公司是如何解决消息的丢失问题的?
1)为了保障消息在中间件中的安全,对消息设置持久化
2)为了保障消息一定要在消费者消费之后再删除, 可以采用手动消息回执机制。

12.3 说一下RabbitMQ支持的五种消息类型? 你们公司用的是哪一种? 在什么场景下使用的?

  1. RabbitMQ五种消息类型
    点对点:
     Simple: 消费者的个数1个
     Work: 消费者的个数多个
         平均消费 和  竞争消费
    发布/订阅:
     Fanout:  一个生产者发布的消息同时被所有消费者消费
     Driect:  一个生产者发布的消息同时被指定的一部分消费者消费(但是可以自定义路由, 指定的一部分消费者消费)
     Topic :  一个生产者发布的消息同时被指定的一部分消费者消费(但是可以自定义路由, 指定的一部分消费者消费, 支持通配符 * #)
  2. 我们公司用的是Topic
    当用户添加成功后, 分别给用户发送短信和邮件

13.第十三天

1. Jaseper Report的生命周期
使用JasperReport做开发,一共分为三个步骤:

  • 设计:指定PDF页面布局、复杂公式、数据源等,创建出PDF模板(xx.jrxml)
  • 执行:将java查询的数据填充到PDF模板中(xx.jasper + data)
  • 输出:生成PDF报表

2.消息队列中间件是分布式系统中重要的组件,主要解决异步消息,应用解耦,流量削峰等问题,实现高性能,高可用,可伸缩和最终一致性架构。
整体

3.小结:

  1. 点对点
    Simple 一个生产者---一个消费者
    Work 一个生产者---多个消费者
    平均消费:当生产者生产的一批消息来到MQ时.MQ会平均奖任务分配到目前监听在它上面的消费者上去
    竞争消费:只要MQ中有等待消费的消息,消费者就会去消费

  2. 发布订阅
    Fanout(广播) 一个生产者---多个消费者
    Direct(路由) 一个生产者---多个消费者 ( bindingkey routingkey )
    Topic (主题) 一个生产者---多个消费者 ( bindingkey routingkey 支持 routingkey的通配符 * # )

  3. ACk确认机制
    自动回执: 消费者拿到消息之后自动回执消息
    手动回执: 消费成功之后使用代码手动回执消息

4.如何避免消息丢失?

​ 1)消息的持久化机制,可以防止由于MQ宕机导致的消息丢失。

​ 2)消费者的手动ACK机制,可以防止消费者丢失消息。

  1. 简单的介绍下你们的项目
  2. 说一下你们项目的周期\人员分配\情况
  3. 说一下你们项目的表设计\模块建立情况
  4. 用过UML建模工具吗? 用的什么工具? 用它来绘制的什么?
  5. dubbo整合shiro的坑