Java EE

Java 最常见的 208 道面试题:第十一模块答案

烈酒焚心 提交于 2020-10-24 00:46:21
十一、Spring Boot / Spring Cloud 104. 什么是 spring boot? 在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心内容在于控制反转(IOC)和依赖注入(DI),所谓控制反转并非是一种技术,而是一种思想,在操作方面是指在spring配置文件中创建<bean>,依赖注入即为由spring容器为应用程序的某个对象提供资源,比如 引用对象、常量数据等。 SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。 105. 为什么要用 spring boot? Spring Boot使编码变简单 Spring Boot使配置变简单 Spring Boot使部署变简单 Spring Boot使监控变简单 Spring的不足 106. spring boot 核心配置文件是什么? Spring Boot提供了两种常用的配置文件: properties文件 yml文件 107. spring boot 配置文件有哪几种类型?它们有什么区别? Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件

一篇文章彻底搞懂Tomcat热部署与热加载

大憨熊 提交于 2020-10-23 15:55:24
热部署和热加载是类似的,都是在不重启Tomcat的情况下,使得应用的最新代码生效。 热部署表示重新部署应用,它的执行主体是Host,表示主机。 热加载表示重新加载class,它的执行主体是Context,表示应用。 Tomcat中的后台线程 热部署和热加载都需要监听相应的文件或文件夹是否发生了变化。它们都是由Tomcat的后台线程触发的。 BackgroundProcessor 就表示后台线程。 每个容器都可以拥有一个BackgroundProcessor,但是默认情况下只有Engine容器会在启动的时候启动一个BackgroundProcessor线程。 该线程会每隔一段时间(可以设置,单位为秒),去执行后台任务,先执行本容器定义的后台任务,然后再执行子容器的定义的后台任务,子容器的任务执行完成后会继续执行其子容器的任务,直到没有子容器为止。 从这里可以看出就算每个容器自己开启一个BackgroundProcessor,也只不过是多了一个执行相同任务的线程而已,执行任务的效率有所提升。 对于后台任务,所有容器会有一些统一的任务需要执行: 1. 集群服务器心跳 2. 如果一个容器拥有自己的类加载器,那么查看是否需要进行热加载 3. 检查Session是否过期 4. 执行每个容器对于的Realm对应的后台任务 5. 执行每个容器中pipeline中的每个valve的后台任务 6.

ajax在线咨询

徘徊边缘 提交于 2020-10-23 12:55:57
之前听说过别人使用ajax制作一个在线聊天室,对ajax也不熟悉,但是最近有一个需求,做一个在线咨询。也去网上查过n次资料,下过文档,但是一直找不到我想要的。花费了三天终于是做完了。也没写过博客,解决了问题,现在记录一下。 技术上用的是jsp+servlet+ajax。 数据库 数据库用到4张表,用户表,客服表,用户咨询表,聊天记录表。用户状态有3个状态,分别为1,2,3,分别代表在线,请求咨询,正在咨询。 1、用户user表,主要字段有username,pwd,status; 2、客服表contact主要字段有contactname,pwd; 3、用户咨询表record_user字段有recordid,username; 4、聊天记录表record_content字段有recordid,username,usercontent,contactname,contactcontent,tim。 每张表的主键为id,用户表和客服表中的pwd主要是用来登录用。 设计思路 : 1、一个用户只有一个咨询号,用户第一次点击咨询的时候,添加咨询号,如果用户 有咨询号,那么无需添加咨询号。 2、客服端首页将用户处于2,3状态的用户展示出来,每10秒进行刷新一次界面,将2状态的前端展示位请求咨询,3状态的展示位正在咨询。正在咨询的颜色为黄色,请求咨询的颜色为红色,点击红色可进入聊天

Java中文乱码总结

纵然是瞬间 提交于 2020-10-23 05:46:36
1.html 乱码 1 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 2.jsp 乱码 页面开头加入 <%@ page language="java" import ="java.util.*" contentType ="text/html; charset=utf-8" pageEncoding ="utf-8"%> 3.xmlHttpRequest 乱码 <%@ page contentType ="text/html;charset=GBK"%> 4.Servlet 乱码 在方法中 加入这两句 request.setCharacterEncoding("utf-8" ); response.setContentType( "text/html;charset=utf-8"); 5.中文注释乱码 原因:Eclipse中对Text file encoding的默认编码是GBK 解决: Eclipse->右击"工程",将Info中的"Text file encoding"中的Other改为UTF-8 MyEclipse ->pro -> Text file encoding ->Other utf-8 来源: oschina 链接: https://my.oschina.net/u

原生态Spring MVC代码实战

狂风中的少年 提交于 2020-10-23 04:00:06
目录 一 代码 二 运行结果 三 问题原因 四 解决方法 五 再次测试 一 代码 1 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!-- 配置DispatchServlet:这个是Spring MVC的核心,请求分发器,或者叫前端控制器--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- DispatchServlet要绑定Spring的配置文件 --> <init-param> <param-name>contextConfigLocation</param

要去面试,先刷完这16道高频面试题,阿里,字节跳动,美团任你选

限于喜欢 提交于 2020-10-23 02:30:55
1.JDK8 新特性 Lambda 表达式-也是函数编程的一种方式(将函数做为参数) 方法的应用,应用已有的java类对象的方法或者构造器。与Lambda表达式相结合,方法应用使得语言构造更加简洁,从而减少代码的冗余 默认方法,默认方法就是一个在接口里边有了一个实现的方法 新工具-新的编译工具,如:Nashorn引擎jjs,类依赖分析器jdeps Stream API - 把真正的函数式编程风格引入到Java中。 Date Time API - 加强对日期与时间的处理 Optional 类 - Optional 类已经成为Java 8 类库的一部分,用来解决空指针异常 Base64 Java8 内置了Base64 编码的编码器和解析器 2.hashMap 底层实现?当你put一个元素时,在底层结构是如何执行的? 首先需要知道在不同的JDK版本上面hashMap 的实现是有区别的: JDK8之前: 数组 + 链表 JDK8之后:数组 + 链表 + 红黑树 当你put元素时: #### 执行步骤: a.计算该元素的hashCode 值 b.通过计算它的hashCode 值去确定数组下标,数组的初始化16大小,增长因子为0.75 c.当存在哈希冲突是,相同的hashCode 值得到的数组下标就是会一样的,则单纯的数组则不满足,需要链表的支持 d.链表满足长度大于8时转成红黑树,那为啥8呢

Web大文件分片上传/多线程上传

為{幸葍}努か 提交于 2020-10-22 23:28:04
众所皆知,web上传大文件,一直是一个痛。上传文件大小限制,页面响应时间超时.这些都是web开发所必须直面的。 本文给出的解决方案是:前端实现数据流分片长传,后面接收完毕后合并文件的思路。 实现文件夹上传,要求:服务端保留层级结构,支持10w级别的文件夹上传。 大文件上传及断点续传,要求:支持50G级的单个文件上传和续传。续传要求:在刷新浏览器后能够续传上传,在重启浏览器后能够继续上传上(关闭浏览器后重新打开),在重启电脑后能够继续上传。 支持PC端全平台,Windows,Mac,Linux 浏览器要求支持全部浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox 下面贴出简易DEMO源码分享: 前端页面: 后端代码,此Demo是基于MVC架构的: 后端代码我进行了模块划化,而不是网上的将所有的模块放在一个类中,这样对于以后的维护和升级来说都是一个灾难。 文件块处理逻辑 文件块保存逻辑如下 web.xml配置如下 整个项目的截图 依赖的JAR包如下 运行效果如下: 在此分享!希望多多指正~ 后端代码逻辑大部分是相同的,目前能够支持MySQL,Oracle,SQL。在使用前需要配置一下数据库,可以参考我写的这篇文章: http://blog.ncmem.com/wordpress/2019/08/07/java超大文件上传与下载/ 欢迎入群一起讨论

零基础要怎么学JAVA?

瘦欲@ 提交于 2020-10-22 18:11:42
零基础要怎么学Java ?相信这是很多初学者入门Java都需要考虑担心的问题,根据我自己过来的学习经验,我的看法是这样的: 一:先作为初学者,我们要了解Java能做什么? 1、web开发,应用场景最多的一个分支。具体有哪些呢,最常见的就是淘宝,京东等等 2、安研发,应用排行第二。具体的应用有哪些?所有的安手机上的app应用。 3、桌面应用开发,应用场景第三。具体的有哪些呢?你们现在用的eclipse就是。当然也有其他的比如,大数据,但用在大数据上非常少,没一门语言有他的优势,也有他的不足,没有任何事情是完美的嘛。 二.作为-个Java初学者,应该怎么学Java ? 我给出的ava学习路线是这样的: JavaSE/数据库/Jdbc/前端基础/Javaweb/Spring/Mybatis/Maven/Springboot/Reids/Springcloud/Linux/Git.JavaSE:java基础,既然是基础,那肯定是最重要的,所以学习的时候也是需要重点学习的地方。 数据库:为什么要学数据库呢,因为我们的web数据需要持久化到磁盘上统一管理 ,而数据库无疑就是最好工具。目前主流的关系型数据库有mysql 和oracle。我建议先学mysql。为什么呢mysql相比Oracle难度要低,而在国内应用场景又最多的。 学会了mysq可以开发出一一个完整的产品了,再学oracle都可以的

Mock测试学习

不想你离开。 提交于 2020-10-22 14:15:03
Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。 比如说你需要调用C服务,可是C服务还没有开发完成,那么你就可以将调用C服务的那部分给Mock掉,并编写你想要的返回结果。使得自动化测试提前。 单元测试 SSH框架下的单元测试 对Action进行了单元测试 需要用到的jar包: junit,mockito-core,struts2-junit-plugin,spring-test 大概原理应该是模拟action,设置request 对Service 进行了单元测试,通过mock的方式实现。 需要用到的jar包: powermock-module-junit4,powermock-api-mockito Service类是spring ioc 容器生成并注入的,@InjectMocks注解来mock我们需要测试的业务类。 Spring Boot框架下的web项目单元测试 需要的jar包: spring-boot-starter-test,spring-boot-starter-parent Service 层 使用@Autowired注解来自动注入被测试类

IDEA创建Servlet并配置web.xml

主宰稳场 提交于 2020-10-22 12:23:13
module与project区别 IntelliJ IDEA 中,project相当于eclipse的WorkSpace,module相当于eclipse的project; IntelliJ中一个 Project 可以包括多个 Module ; Eclipse中一个 Workspace 可以包括多个 Project。 创建module 创建一个 module 选择Java项目 输入项目名称,选择存储空间,点击 finish 完成创建 添加框架 选中创建的module,右键选择 Add Framework Support 选中 Web Application 点击 OK ,这时module下面就会出现相关的web文件 配置Tomcat 点击顶部的 Add Configuration... 点击 “ + ” 号,下拉找到 Tomcat Server ,点击 Local 注意:不是TomEE Server 找到 Deployment 找到右边 “ + ” 号,选择 Artifact... 最后点击OK,完成配置 创建Servlet并配置web.xml 新建一个servlet 点击 OK 这时候应该会报错,点击 Add Java EE 6 JARs to module dependencies 如果有的话导入就行了;没有的话点击 Download ,会自动下载一个。 在上面加上下面这句代码