Java面试题准备(掌握)

1、使用什么方式进行文件上传?

一般使用FormData对象,ajax异步上传。

为什么使用?

1、FormData对象
Mozilla上的介绍的,XMLHttpRequest Level 2添加了一个新的接口FormData.利用FormData对象,我们可以通过方法来异步的提交这个”表单”.比起普通的ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件.

2、ajax方式(关键是设置:processData 和 contentType )

告诉jQuery不要去处理请求的数据,用于对data参数进行序列化处理 这里必须false

processData:false

// 告诉jQuery不要去设置Content-Type请求头

contentType : false, //必须

2、 Spring IoC

IoC (控制反转)不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。

DI(依赖注入)

 2、针对与Spring AOP理解

AOP面向切面,切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来,减少了系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。

实现策略JAVA SE动态代理、CGLib

代理模式:代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,

代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等

代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。

静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。

spring aop通知(advice)分成五类: 
前置通知[Before advice]

在连接点前面执行,前置通知不会影响连接点的执行,除非此处抛出异常。 
正常返回通知[After returning advice]

在连接点正常执行完成后执行,如果连接点抛出异常,则不会执行。 
异常返回通知[After throwing advice]

在连接点抛出异常后执行。 
返回通知[After (finally) advice]

在连接点执行完成后执行,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。 
环绕通知[Around advice]

环绕通知围绕在连接点前后,比如一个方法调用的前后。这是最强大的通知类型,能在方法调用前后自定义一些操作。环绕通知还需要负责决定是继续处理join point(调用ProceedingJoinPoint的proceed方法)还是中断执行。 

3、多线程

一个程序至少有一个进程一个进程至少有一个线程,进程是程序的基本单位,线程是进程的一个实体

是共享内存资源,减少切换次数,提高效率。

多线程,多个线程同时执行多个任务

4、Spring MVC

SpringMvc是spring的一个模块 基于MVC的一个框架 无需中间整合层来整合 

什么是MVC ?mvc在b/s下的应用:

MVC的全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种软件设计典范。

它是用一种业务逻辑、数据与界面显示分离的方法来组织代码,将众多的业务逻辑聚集到一个部件里面,

在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,达到减少编码的时间。

首先请求发送request请求到C(control 接收用户请求响应用户) 然后控制器到M模型(pojo、action、service、dao)层处理

处理结果完了返回控制器 控制器要经过视图渲染  最后返回终端(response)

5、Redis基本数据类型:

String(字符串)

Hash(哈希)

List(列表)

Set(集合)

Zset(有序集合)

 6、对于前后端分离的理解

针对于业务逻辑来划分

所有针对业务逻辑去实现的部分是后端,用来展现数据和用户交互的部分属于前端。

7、JDK和JRE的区别

 JDK是Java的开发工具,它不仅提供了Java程序运行所需的JRE,还提供了一系列的编译,运行等工具,如javac,java,javaw等。

JRE只是Java程序的运行环境,它最核心的内容就是JVM(Java虚拟机)及核心类库。

 8、Java数据类型

(2)Java数据类型在内存中的存储:

1)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,

数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型;

2)引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,

使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;

区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念),

9、Java中final关键字的作用

final关键字可以用于三个地方。用于修饰类、类属性和类方法。

     被final关键字修饰的类不能被继承,被final关键字修饰的类属性和类方法不能被覆盖(重写);

     对于被final关键字修饰的类属性而言,子类就不能给他重新赋值了,如果重新赋值,会报错:

10、GET和POST的区别

HTTP(超文本传输协议)是什么?HTTP是基于TCP(传输控制协议)IP(互联网协议)的关于数据如何在万维网中如何通信的协议。

HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

get和post底层都是TCP/IP,所以get和post都是TCP链接

GET传输渠道:method为GET,把数据存放到URL。进行传输。他的优点方便记录,缺点不太安全

POST传输渠道:method为POST,数据会在request body中。

大小限制:(大多数)浏览器通常都会限制url长度在2K个字节,post就比较大了。

GET和POST还有一个区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包

长的说:

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

11、简单的解释一下垃圾回收

Java 垃圾回收机制最基本的做法是分代回收。内存中的区域被划分成不同的世代,对象根据其存活的时间被保存在对应世代的区域中。

一般的实现是划分成3个世代:年轻、年老和永久。内存的分配是发生在年轻世代中的。当一个对象存活时间足够长的时候,它就会被复制到年老世代中。

对于不同的世代可以使用不同的垃圾回收算法。

垃圾回收算法

1、标记-清楚

2、标记整理

3、标记复制

4、分代回收

原文地址:https://www.cnblogs.com/dzcici/p/10467252.html