1.文件上传和下载如何实现?
文件上传
文件上传的本质是IO流的从操作;客户端:
1.必须使用post,post才能携带大数据
2.必须设置type=“file” name="file"必须要有名字
3.必须要设置enctype="multipart/form-data"服务器端:通过request.getInputStream()获取字节输入流,读取请求正文内容;将上传内容得到,保存在服务器端,就完成了文件上传;实际使用直接用框架中的api就可以,commons-fileupload是apache提供的一套文件上传工具;
文件下载有两种方法:
1.超链接下载:如果文件能被浏览器解析,点击就会打开文件,如果要下载,需要使用右键另存为,不能被浏览器解析的文件,点击就下载;
2.通过服务器流回写到浏览器下载;要设置MIME,即设置setcontentType(String mimeType);浏览器能解析的直接显示,不能解析的直接下载;
获取文件的mimeType类型:String mimeType=this.getServletContext().getMimeType(filename);
如果设置响应头response.setHeader("content-disposition","attachment;filename=下载的文件名称");不管浏览器能不能解析,
都是下载操作;
2.第三方的工作流有哪些?如何使用的?
常见的工作流框架
Activity5.1.3、JBPM4.4、OSWorkFlow、WorkFlow
在Java领域,JBPM和Activity是两个主流的工作流系统,而Activity的出现无疑将会取代JBPM(Activity的开发者就是从Jbpm开发者出来的)。
avtivity的基本操作:
设计流程图(各种组件,如连线、用户任务、网关)
流程定义增删改查
流程变量增删改查
启动流程定义
任务增删改查
完成任务
历史信息查询
java工作流怎么用activity
常用的是:activiti-engine-5.91.jar,activiti-spring-5.9.jar;
解释:以上两个只是activiti工作流的常用包,通常会配置如spring开发的java包,还有数据库jar包等进行使用,但具体要用到什么包,这个和业务开发的逻辑有关系,也没办法进行详细说明的,所以只需要先下载常用的两个,其余的辅助包如:日志包、spring包、数据库包、hibernate包、struts包、mybatis包等根据实际需要添加即可。
3.对 activemq、 rabbitmq、 kafka的了解和使用?消息发送失败如何处理?如何防止消息的重复消费?
ActiveMQ介绍 MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现。 特点: 1、支持多种语言编写客户端 2、对spring的支持,很容易和spring整合 3、支持多种传输协议:TCP,SSL,NIO,UDP等 4、支持AJAX 消息形式: 1、点对点(queue) 2、一对多(topic)
RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。
Kafka是分布式发布-订阅消息系统,它最初是由LinkedIn公司开发的,之后成为Apache项目的一部分,Kafka是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。
消息发送失败如何处理
就回滚,捕捉异常,把预处理的这条数据给删除了,数据库就没有数据了,消费方就不会有消息执行。双方数据一致。
如何防止消息的重复消费?
1、对于需要保存到数据库的数据,我们可以设置某条数据的某个值,比如订单号之类的,设置一个唯一索引,这样的话即使重复消费也不会生效数据
2、乐观锁,也就是我们每次插入一条数据或者更新的时候判断某个版本号是不是与预期一样,如果不是,那么就不进行操作
3、使用redis进行存储,每次操作数据的时候先去redis进行判断,如果存在的话,那么这条数据就是重复消费的,然后我们可以丢弃或者做其他处理。
4.svn和git冲突如何解决?
pull一下,更新程序 同步 查看冲突代码 人工修改 保持本地最新版 提交修改 再pull一下 更新 人工合并 更新到最新版 commit提交 push
5.如何测试自己的接口?
用postman swagger等工具
6.poi导入 excel时如果数据溢出如何解决?
可以将excel的xlsx格式转换为易读取的csv格式进行读取
7. linux常用命令有哪些?
1.1 pwd命令该命令的英文解释为print working directory(打印工作目录)。输入pwd命令,Linux会输出当前目录。
1.2 cd命令cd命令用来改变所在目录。
cd / 转到根目录中
cd ~ 转到/home/user用户目录下
1.3 ls命令
ls命令用来查看目录的内容。
1.4 cat命令
cat命令可以用来合并文件,也可以用来在屏幕上显示整个文件的内容。
8.如何调用第三方的接口?
SpringBoot-RestTemplate
public User doGetWith2(String url){
User user = restTemplate.getForObject(url, User.class);
return user;
}
9.分布式、集群、微服务的理解?
分布式是指将不同的业务分布在不同的地方。分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。
而集群指的是将几台服务器集中在一起,实现同一业务,集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
10.分布式事务的处理逻辑?怎么实现的?
这些小操作分布在不同服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败。
现在的分布式事务实现方案有多种,有些已经被淘汰,如基于XA的两段式提交、TCC解决方案,还有本地消息表、MQ事务消息,还有一些开源的事务中间件,如LCN、GTS。
11.事务的特性?分布式如何保证数据一致性?
特性:原子性,一致性,隔离性,持续性。
原子性:事物是数据库的逻辑工作单位,事物中包括的操作要么都做,要么都不做。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其它事物干扰。即一个事物内部的操作及使用的数据对其它并发事物是隔离的,并发执行的各个事物之间不能互相烦扰。
持续性:也称永久性,只一个事物一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响
分布式如何保证数据一致性
当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。
12. docker的常用命令有哪些?
基础操作:
1.docker images查看镜像信息列表 镜像是静态的
2.docker ps -a查看运行中的所有容器
3.docker pull [images]:[version]从dockerhub拉取指定镜像
4.docker rm [containerID]删除容器
5.docker rmi [imageID]删除镜像
13.模板引擎的了解和使用?
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。
使用
1、导入文件
2、定义模板
3、准备对象(需要填充的数据)
4、将数据填充到模板
template(模板ID,填坑的数据)
14.项目中定时任务怎么写的?
1、实现了Runnable接口。run方法中,先打印一个当前系统时间,然后呢,接着执行sleep方法,休眠30秒
2、实现TimerTask接口。
15.如何实现邮箱和短信的发送?
邮箱:用163或者腾讯邮箱的smtp服务 创建一个第三方邮件客户端的专用密码
在邮箱工具类里把专用密码 SMTP服务器的地址 和要发送的内容 以及发送对象的邮箱地址填上即可
短信 可以用阿里云的云通信服务 在控制台里的国内消息中设置一个短信模板
把模板code和个人中心的accesskey填进工具类即可
16.两个异构项目之间的实时数据互通你会怎么做?
ESB
17. nginx的了解和使用?
nginx是一个使用c语言开发的高性能的http服务器及反向代理服务器。
反向代理方式实际上就是一台负责转发的代理 服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。
使用
下载后解压
打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start nginx ,回车即可
直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功
nginx的配置文件是conf目录下的nginx.conf,默认配置的nginx监听的端口为80,如果80端口被占用可以修改为未被占用的端口即可
18. maven如何解决jar包冲突?
1.可以借助Maven Helper插件中的Dependency Analyzer分析冲突的jar包,然后在对应标红版本的jar包上面点击execlude,就可以将该jar包排除出去
2.手动排除 在pom.xml中使用标签去排除冲突的jar包
版本锁定原则:一般用在继承项目的父项目中
正常项目都是多模块的项目,如moduleA和moduleB共同依赖X这个依赖的话,那么可以将X抽取出来,同时设置其版本号,这样X依赖在升级的时候,不需要分别对moduleA和moduleB模块中的依赖X进行升级,避免太多地方(moduleC、moduleD…)引用X依赖的时候忘记升级造成jar包冲突,这也是实际项目开发中比较常见的方法。
19.树形结构的表怎么设计的?
左右值算法
20.如何实现菜单及增删改查的功能权限管理?
在admin登录时,将登录时生成的token保存到vue组件。然后查询对应的角色信息,根据角色id查询role_permission表所关联的菜单权限信息,返回给vue里面控制管理系统左侧菜单栏导航的显示
后端使用自定义注解和AOP的方式实现增删改查权限的控制
21.开发程序需要哪些文档?
可行性研究报告、需求规格说明书、项目计划、软件测试计划、概要设计说明书、详细设计说明书、编程规范、软件测试用例、软件测试报告、用户手册、安装手册、项目总结报告