关于java:Java面试题实用技术

32次阅读

共计 6912 个字符,预计需要花费 18 分钟才能阅读完成。

文件上传和下载如何实现?

数据较大时必须用文件上传,文件上传的实质是 IO 流的从操作;
客户端:
1)必须应用 post,post 能力携带大数据
2)必须设置 type=“file”name=“f”必须要有名字;
3)必须要设置 enctype=“multlpart/form-data”
服务器端:
1)通过 request.getInputStream()获取字节输出流读取申请注释内容;
将上传内容失去, 保留在服务器端, 就实现了文件上传;
2)理论应用间接用框架中的 api 就能够,commons-fileupload 是 apache 提供的一套文件上传工具;
文件上传实现:
导入 commons-io 包和 commons-fileupload 包; 放在 WEB_INF 下的 lib 文件夹下。
文件下载有两种办法:
1. 超链接下载: 如果文件能被浏览器解析,点击就会关上文件,如果要下载,须要应用右键另存为,不能被浏览器解析的文件,点击就下载;
⒉. 通过服务器流回写到浏览器下载; 要设置 MIME,即设置 setcontentType(String mimeType); 浏览器能解析的间接显示,不能解析的间接下载;
获取文件的 mimeType 类型: String mimeType=this.getServletContext().getMimeType(filename);
如果设置响应头 respponse.setHeader(“content-disposition”,”attachment;flename= 下载的文件名称 ”); 不论浏览器能不能解析,都是下载操作;

第三方的工作流有哪些? 如何应用?


Activiti 和 JBPM:
JBPM5(Java Business Process Management)和 Activiti 都反对 BPMN2.0 标准。
jBPM5 颠覆了 jBPM3 和 jBPM4 的架构, 应用了 Drools Flow 作为工作流的架构,而 Activiti 更像是 jBPM4 的连续。
jBPM5 采纳LGPL 开源协定(如果批改 LGPL 协定的代码或者衍生,则所有批改的代码,波及批改局部的额定代码和衍生的代码都必须采纳 LGPL 协定,因 此 LGPL 协定的开源 代码很适宜作为第三方类库被商业软件援用,但不适宜心愿以 LGPL 协定代码为根底,通过批改和衍生的形式做二次开发的商业软件采纳);
Activiti 采纳宽松的 Apache License2.0 协定(激励代码共享并尊重原作者的著作权,容许对代码进行批改和公布而不论其用处)。
Git 工作流:
Workflow.Net、NetBpm、OSWorkflow

对 activemq、rabbitmq、kafuka 的理解和应用?音讯发送失败如何解决?如何预防音讯的反复生产?



订阅形式:
ActiveMQ:点对点 (p2p)、播送(公布 - 订阅);
RabbitMQ:work queue(工作队列)、Publish/Subscribe(公布订阅模式)、Routing(路由模式)、Topic(通配符模式)、Hreader()、RPC();
Kafka:点对点(p2p);
应用:
1)ActiveMQ:
在我的项目中,咱们应用的是 SpringJMS 操作 activeMQ,已 maven 操作为例, 首先先援用 SpringJMS 的依赖 及 activeMQ 的依赖,而后在 spring 的配置中,
如果要配置音讯的生产者的话,须要配置 springjms 的连贯工厂,通过连贯工厂配置 jmsTemplate 实例,咱们能够应用 jmsTemplate 进行音讯的相干操作,另外咱们也须要配置音讯的目的地,也是在 spring 的配置文件中配置配置队列 或者 主题。
音讯的消费者和生产者配置差不多,不同的是须要配置一个音讯的监听器,监听器外面实现 onMessage 办法,在这个办法外面解决音讯
2)RabbitMQ:
在咱们秒杀抢购商品的时候,零碎会揭示咱们稍等排队中,而不是像几年前一样页面卡死或报错给用户。
像这种排队结算就用到了音讯队列机制,放入通道外面一个一个结算解决,而不是某个工夫断忽然涌入大批量的查问新增把数据库给搞宕机,所以 RabbitMQ 实质上起到的作用就是削峰填谷,为业务保驾护航。
服务间异步通信
程序生产
定时工作
申请削峰
Kafka:
日志收集:一个公司能够用 Kafka 能够收集各种服务的 log,通过 kafka 以对立接口服务的形式凋谢给各种 consumer,例如 hadoop、HBase、Solr 等。
音讯零碎:解耦和生产者和消费者、缓存音讯等。
用户流动跟踪:Kafka 常常被用来记录 web 用户或者 app 用户的各种流动,如浏览网页、搜寻、点击等流动,这些流动信息被各个服务器公布到 kafka 的 topic 中,而后订阅者通过订阅这些 topic 来做实时的监控剖析,或者装载到 hadoop、数据仓库中做离线剖析和开掘。
经营指标:Kafka 也常常用来记录经营监控数据。包含收集各种分布式应用的数据,生产各种操作的集中反馈,比方报警和报告。
流式解决:比方 spark streaming 和 Flink
音讯发送失败如何解决:
1. 主动重发
2. 零碎预警人工解决等

如何避免音讯的反复生产:
​ 保障音讯的唯一性,就算是屡次传输,不要让音讯的屡次生产带来影响;保障音讯等幂性;
​ 比方:在写入音讯队列的数据做惟一标示,生产音讯时,依据惟一标识判断是否生产过;

svn 和 git 抵触如何解决?

SVN 解决抵触有三种抉择:
​A、放弃本人的更新,应用 svn revert(回滚),而后提交。在这种形式下不须要应用 svn resolved(解决)
B、放弃本人的更新,应用他人的更新。应用最新获取的版本笼罩指标文件,执行 resolved filename 并提交 (抉择文件—右键—解决)。
C、手动解决:抵触产生时,通过和其余用户沟通之后,手动更新指标文件。而后执行 resolved filename 来解除抵触,最初提交。
Git
1)间接批改文件:
第一步,抉择文件鼠标右击抉择 Git-commit – 提交到本地仓库
第二部,在文件同级空白处鼠标右击抉择 tortoisGit –> pull,文件产生扭转。
间接批改文件中数据,最初保留文件
第三步,抉择文件鼠标右击抉择 Git Commit –> 提交 — >push 公布。
2)通过 edit conflicts 批改
选中文件,右击菜单选项 tortoiseGit –> Edit conflict
批改编辑区:将 Theirs- 或者 Local- 中须要的数据增加到 Meged 中。
保留时 标记抵触解决。

如何测试本人的接口?

postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary 等

poi 导入 excel 时如果数据溢出如何解决?


POI 官网举荐解决内存溢出的形式应用 CSV 格局解析

linux 常用命令有哪些?

如何调用第三方的接口?

ajax(会呈现跨域问题)
from 表单(此办法在 Android 端不实用),form 的提交不存的跨域的问题,所以能够思考应用 form 的 action 办法来解决。)
通过 Java 代码调用(Android 端实用,导入 HttpClientUtil 这个工具类,或者也能够应用 Spring 框架的 restTemplate 来调用,下面有调用接口的办法,分为 Get 和 Post 形式的有参和无参调用)

分布式、集群、微服务的了解?

分布式:一个业务分拆多个子业务,部署在不同的服务器上;
集群:同一个业务,部署在多个服务器上;
微服务是一种架构格调,一个大型简单软件应用由一个或多个微服务组成。零碎中的各个微服务可被独立部署,各个微服务之间是松耦合的,通过接口来实现数据的交互。每个微服务仅关注于实现一件工作并很好地实现该工作。在所有状况下,每个工作代表着一个小的业务能力。
分布式属于微服务
分布式:散布压力 (集群)
微服务:散布能力

事务的个性?分布式如何保证数据一致性?

ACID
数据的一致性协定有:
​1. 两阶段提交协定 2PC
​2. 三阶段提交协定 3PC
​3. RWN 协定
​4. raft 协定
​5. Paxos 协定

分布式事务的解决逻辑? 怎么实现的?

分布式事务是将各个模块都是独自独立进去的微服务,进行了分布式部署,单零碎里的事务将不能保障各个数据库操作的一致性。
基于 XA 的两阶段提交计划:

  1. XA 它蕴含两个局部:事务管理器和本地资源管理器。其中本地资源管理器往往由数据库实现,而事务管理器作为全局的协调者,负责各个本地资源的提交和回滚。
  2. 两阶段提交计划开发简单、锁定资源工夫长,对性能影响很大,根本不适宜解决微服务事务问题。

TCC 解决方案:

  1. TCC 计划其实是两阶段提交的一种改良。其将整个业务逻辑的每个分支显式的分成了 Try、Confirm、Cancel 三个操作。
  2. Try 阶段次要是对业务零碎做检测及资源预留,实现业务的筹备工作。
  3. Confirm 阶段次要是对业务零碎做确认提交,Try 阶段执行胜利并开始执行 Confirm 阶段时,默认 Confirm 阶段是不会出错的。即:只有 Try 胜利,Confirm 肯定胜利。
  4. Cancel 阶段次要是在业务执行谬误,须要回滚的状态下执行的业务勾销,预留资源开释。
  5. TCC 计划中很多事务的解决逻辑须要利用本人编码实现,简单且开发量大。

本地音讯表(异步确保)

  1. 重大依赖于数据库的音讯表来治理事务,这样在高并发的状况下难以扩大,同时要在数据库中额定增加一个与理论业务无关的音讯表来实现分布式事务,繁琐

MQ 事务音讯:

  1. 间接基于 MQ 来实现事务,不再用本地的音讯表。毛病就是实现难度大,而且支流 MQ 不反对。

LCN 分布式事务框架:

  1. 创立事务组:是指在事务发起方开始执行业务代码之前先调用 TxManager 创立事务组对象,而后拿到事务标示 GroupId 的过程。
  2. 增加事务组:增加事务组是指参与方在执行完业务办法当前,将该模块的事务信息增加告诉给 TxManager 的操作。
  3. 敞开事务组:是指在发起方执行完业务代码当前,将发起方执行后果状态告诉给 TxManager 的动作。当执行完敞开事务组的办法当前,TxManager 将依据事务组信息来告诉相应的参加模块提交或回滚事务。
  4. 应用:搭建 tx-manager 服务 批改 application.properties 配置文件,提供本地微服务利用的 Eureka 注册核心配置、redis 配置。配置文件打包, 启动微服务,java -jar tx-manager-x.x.x.jar; 胜利的话, 间接在微服务中应用 LCN 实现分布式事务管理~~~~

其中 @Transactional 用于治理本地事务,而 @TxTransaction 治理分布式事务,当须要回滚时,调用本地自带的事务管理器进行回滚。

docker 的常用命令有哪些?


模板引擎的理解和应用?

模板引擎(这里特指用于 Web 开发的模板引擎)是为了使用户界面与业务数据(内容)拆散而产生的,它能够生成特定格局的文档,用于网站的模板引擎就会生成一个规范的 HTML 文档。
模板引擎有哪些:jsp、Velocity、FreeMarker、Thymleaf、Beetl、Enjoy。
FreeMarker:
创立 Configuration 实例, 该实例负责管理 FreeMarker 的模板加载门路, 负责生成模板实例;
应用 Configuration 实例来生成 Template 实例, 同进须要指定应用的模板文件;
填充数据模型, 数据模型就是一个 Map 对象;
调用 Template 实例的 process 办法实现合并。
Thymleaf:
特点:
动静联合:页面采纳模板 + 数据的形式,在前端美工手中,能够展现动态页面。在后盾开发人员手中,也能够展现数据返回到页面后的界面。这是因为 thymeleaf 反对 html 原型,能够在原型上增加额定的属性,浏览器在解释 html 时会漠视未定义的属性,当定义的属性有值时就会动静替换动态页面,来实现动静展现。
开箱即用:提供规范和 spring 规范两种方言,能够间接套用模板实现 JSTL、OGNL 表达式成果,
防止每天套模板、改 jstl、改标签的困扰。同时开发人员也能够扩大和创立自定义的方言。
多方言反对:
Thymeleaf 提供 spring 规范方言和一个与 SpringMVC 完满集成的可选模块,能够疾速的实现表单绑定、属性编辑器、国际化等性能。
与 springboor 完满整合:SpringBoot 提供了 Thymeleaf 的默认配置,并且为 Thymeleaf 设置了视图解析器,咱们能够像以前操作 jsp 一样来操作 Thymeleaf。代码简直没有任何区别,就是在模板语法上有区别。
应用:

  1. 创立一个 sprinboot 我的项目
  2. 增加 thymeleaf 的起步依赖
  3. 增加 spring web 的起步依赖
  4. 编写 html 应用 thymleaf 的语法获取变量对应后盾传递的值
  5. 编写 controller 设置变量的值到 model 中

我的项目中定时工作怎么写的?

最简略的一种:在线程中执行 Thread.sleep(),休眠挂起线程,期待一段时间后再执行;
借助 Timer 和 TimerTask 实现定时工作;
借助调度线程池 Executors.newScheduledThreadPool() 实现定时工作;
借助第三方工具,如 spring 的定时工作;Quartz;

如何实现邮箱和短信的发送?

短信:阿里云 SMS,百度云 SMS,七牛云 SMS 等
邮件:
进入邮箱设置,将其开启 POP3/SMTP 服务,以容许咱们通过第三方客户端发送邮件。并且获取受权码(不是登录明码)
应用 JavaMail 发送邮件非常简单,也是三步曲:
​ 创立连贯对象 javax.mail.Session
​ 创立邮件对象 javax.mail.Message
​ 发送邮件

两个异构我的项目之间的实时数据互通会怎么做?

Web Service 就能够解决异构零碎的通信的整合。
web Service 技术失去了 Java 的反对,在 JDK6 当前都给出了相干标准的实现:
JAX-WS(XML web services 的 Java API)是 SOAP 形式:简略对象拜访协定,他是用于替换 XML 编码信息的轻量级协定;
JAX-RS 即 restful 形式格调。

nginx 的理解和应用?

Nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供 IMAP/POP3/SMTP 服务;
次要性能:反向代理,通过配置文件能够实现集群和负载平衡,动态资源虚拟化

maven 如何解决 jar 包抵触?

移除依赖:
用于排除某项依赖的依赖 jar 包;
能够借助 Maven Helper 插件中的 Dependency Analyzer 剖析抵触的 jar 包,而后在对应标红版本的 jar 包下面点击 execlude,就能够将该 jar 包排除进来。
手动排除:
手动在 pom.xml 中应用 <exclusion> 标签去排除抵触的 jar 包(下面利用插件 Maven Helper 中的 execlude 办法其实等同于该办法):
mvn dependency:tree
版本锁定准则:
个别用在继承我的项目的父我的项目中;
失常我的项目都是多模块的我的项目,如 moduleA 和 moduleB 独特依赖 X 这个依赖的话,那么能够将 X 抽取进去,同时设置其版本号,这样 X 依赖在降级的时候,不须要别离对 moduleA 和 moduleB 模块中的依赖 X 进行降级,防止太多中央(moduleC、moduleD…)援用 X 依赖的时候遗记降级造成 jar 包抵触,这也是理论我的项目开发中比拟常见的办法。

树形构造的表怎么设计?

设计 1: 邻接表, 是最常见的设计,能正确的表白菜单的树状构造且没有冗余数据,但在跨层级查问须要递归解决。长处构造简略; 毛病: 不应用递归状况下无奈查问某节点所有父级, 所有子集
设计 2: 门路枚举; 在设计 1 根底上新增一个父部门 id 集字段,用来存储所有父集,多个以固定分隔符分隔,比方逗号。长处: 不便查问所有的子集; 也能够因而通过比拟字符串 dept_parent_ids 长度获取以后节点层级。毛病: 新增节点时须要将 dept_parent_ids 字段值解决好;dept_parent_ids 字段的长度很难确定,无论长度多大,都存在不可能无线扩大的状况;节点挪动简单,须要同时变更所有子集中的 dept_parent_ids 字段值。
设计 3:闭包表 是解决分级存储的一个简略而优雅的解决方案,是一种通过空间换取工夫的形式;须要额定创立一张 TreePaths 表,它记录了树中所有节点间的关系;蕴含两列,先人列与后辈列,即便这两个节点之间不是间接的父子关系;同时减少一行指向节点本人;长处:非递归查问缩小冗余的计算工夫;不便非递归查问任意节点所有的父集;不便查问任意节点所有的子集;能够实现有限层级;反对挪动节点;毛病:层级太多状况下挪动树节点会带来关系表多条操作;须要独自一张表存储对应关系,在新增与编译节点时操作绝对简单;

如何实现菜单及增删改查的性能权限治理?

SpringSecurity
Shiro

开发程序须要哪些文档?

可行性剖析报告;
我的项目开发计划;
软件需要说明书(软件规格说明书);
概要设计说明书;
具体设计说明书;
用户操作手册;
测试计划;
测试剖析报告;
开发进度月报;
软件维护手册;
软件问题报告;
软件批改报告。

正文完
 0