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

52次阅读

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

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

数据较大时必须用文件上传,文件上传的实质是 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= 下载的文件名称 ”); 不论浏览器能不能解析,都是下载操作;

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


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. 零碎预警人工解决等

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

suv 和 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 端实用,结构一个字符流缓存)

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

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

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

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

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。代码简直没有任何区别,就是在模板语法上有区别。
应用:
增加依赖;
增加配置(敞开 thymeleaf 的缓存,不然在开发过程中批改页面不会立即失效须要重新启动,开发完之后能够改为 true,能够帮忙客户减速拜访)

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

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

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

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

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

Web Service 就能够解决异构零碎的通信的整合。

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