Java面试题整理(内容来源于网络)

多线程有几种实现方法?同步有几种实现方法?

多线程有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口。同步的实现方面有两种,分别是 synchronized,wait 与 notify

JDBC中的 PreparedStatement 相比 Statement 的好处?

预编译语句 java.sql.PreparedStatement,扩展自Statement,不但具有 Statement 的所有能力而且具有更强大的功能。不同的是,PreparedStatement 是在创建语句对象的同时给出要执行的sql 语句。这样,sql 语句就会被系统进行预编译,执行的速度会有所增加,尤其是在执行大语句的时候,效果更加理想

Java中实现多态的机制是什么?

重写,重载
方法的重写 Overriding 和重载 Overloading 是父类与之类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型

说出ArrayList,Vector,LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以
索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快

Collection和Collections的区别

Collection是集合类的上级接口,继承于它的接口主要有Set 和 List。Collections是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作

HashMap 和 Hashtable 的区别

HashMap是Hashtable的轻量级实现(非线程安全的实现),它们都完成了Map接口,主要区别在于HashMap允许空(null)键值(HashMap允许将null作为一个entry的key或者value),由于非线程安全,效率上可能高于Hashtable。
HashMap把Hashtable的contains方法去掉了,改成了containskey 和 containsvalue。因为contains方法容易让人引起误解。Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异

线程的基本概念、线程的基本状态以及状态之间的关系

一个程序中可以有多条执行线索同时执行,一个线程就是程序中的一条执行线索,每个线程上都关联有要执行的代码,即可以有多段程序代码同时运行,每个程序至少都有一个线程,即main方法执行的那个线程。
线程的基本状态包括:就绪、运行、synchronize阻塞,wait和sleep挂起,结束。wait必须在synchronized内部调用。调用线程的start方法后线程就进入就绪状态,线程调度系统将就绪状态的线程转为运行状态,遇到synchronized语句时,由运行状态转为阻塞,当synchronized获得锁后,由阻塞转为运行,在这种情况可以调用wait方法转为挂起状态,当线程关联的代码执行完后,线程变为结束状态

abstract class 和 interface 有什么区别

声明方法的存在而不去实现它的类叫抽象类。不能创建抽象类的实例;然后可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法
接口是抽象类的变体,接口中所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口只可以定义 static final 成员变量

String、StringBuffer、StringBuilder的区别

String是不可变的对象,每次对String类型进行改变的时候其实是产生了一个新的String对象,然后指针指向新的String对象
StringBuffer是线程安全的可变字符序列,不需要同步
StringBuilder线程不安全,速度更快,单线程使用

String是一个类,但却是不可变的,所以String创建的算是一个字符串常量,StringBuffer和StringBuilder都是可变的。所以每次修改String对象的值都是新建一个对象再指向这个对象。而使用StringBuffer则是对StringBuffer对象本身进行操作。所以在字符串经常改变的情况下,使用StringBuffer要快得多

heap 和 stack 有什么区别

栈(stack)是一种线性集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆(heap)是栈的一个组成元素

同步和异步有何异同,在什么情况下分别使用它们?请举例说明

如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率

java中用什么关键字修饰同步方法?stop() 和 suspend() 方法为何不推荐使用?

用synchronized关键字修饰同步方法;反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在;suspend() 方法容易发生死锁。调用suspend() 的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被“挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。故不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程

比如 100 个用户同时来访,要采取什么技术解决?

可采用连接池。步骤如下:

  1. 装载数据库驱动程序
  2. 通过jdbc建立数据库连接
  3. 访问数据库,执行sql语句
  4. 断开数据库连接

forward 和 redirect 的区别

forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以它的地址栏中还是原来的地址
redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址
前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如需要跳转到一个其他服务器上的资源,则必须使用sendRedirect() 方法

数据连接池的工作机制是什么

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于次数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其标记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接标记为空闲,其他调用就可以使用这个连接。

JSP 有哪些动作?作用分别是什么

JSP 共有以下6种基本动作:

  • jsp:include 在页面被请求的时候引入一个文件
  • jsp:userBean 寻找或者实例化一个JavaBean
  • jsp:setProperty 设置JavaBean的属性
  • jsp:getProperty 输出某个JavaBean的属性
  • jsp:forward 把请求转到一个新的页面
  • jsp:plugin 根据浏览器类型为Java插件生成OBJECT 或 EMBED 标记

JSP 有哪些内置对象?作用分别是什么

JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):

  • request:用户端请求,此请求会包含来自GET / POST 请求的参数
  • response:网页传回用户端的回应
  • pageContext:网页的属性在这里管理
  • session:与请求有关的会话期
  • application:servlet正在执行的内容
  • out:用来传送回应的输出
  • config:servlet的构架部件
  • page:JSP网页本身
  • exception:针对错误网页,未捕捉的例外

Get和Post的区别

Form中的Get和Post方法,在数据传输过程中分别对应了HTTP协议中的Get和Post方法
二者主要区别如下:

  • Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据
  • Get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用”?“连接,而各个变量之间使用”&“连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL
  • Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的
  • Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post
  • Get限制Form表单的数据集必须为ASCII字符,而Post支持整个ISO10646字符集
  • Get是Form的默认方法

JSP 和 Servlet有哪些相同点和不同点,它们之间的联系是什么

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑

JSP的四种范围?

  • page是代表与一个页面相关的对象和属性。一个页面由一个编译好的JavaServlet类(可以带有任何的include指令,但是没有include动作)表示。这既包括servlet又包括被编译成servlet的JSP页面
  • request是代表与Web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个Web组件(由于forward执行和include动作的关系)
  • session是代表与用于某个Web客户机的一个用户体验相关的对象和属性。一个Web会话可以也经常会跨越多个客户机请求
  • application是代表与整个Web应用程序相关的对象和属性。这实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域

请详细描述一下什么是MVC

基于Java的Web应用系统采用MVC架构模式,即model(模型)、view(视图)、control(控制)分离设计:这是目前Web应用服务系统的主流设计方向

  • Model:即处理业务逻辑的模块,每一种处理一个模块
  • View:负责页面显示,显示Model处理结果给用户,主要实现数据到页面转换过程
  • Control:负责每个请求的分发,把Form数据传递给Model处理,把处理结果的数据传递给View显示

B/S 与 C/S 的联系与区别

C/S 是Client/Server的缩写,是客户机与服务器结构的应用程序,必须电脑本地安装程序,C/S的开发成本高
B/S是Browser/Server 的缩写,是浏览器和服务器结构的应用程序,是用浏览器打开的系统,B/S的开发成本低

简述 HttpSession 的作用、使用方法,可用代码说明

HttpSession中可以跟踪并存储用户信息,把值设置到属性中,有两个方法:setAttribute(),getAttribute()
使用方法:在一个方法中用session.setAttribute(“student”,student);在session中设置一个属性名为student,值为一个名为student的对象。而后可在同一session范围内用getAttribute(“student”)取出该属性,得到student对象

介绍在JSP中如何使用JavaBeans

在JSP中使用JavaBean常用的动作有:

  1. <jsp:useBean />:用来创建和查找bean对象
  2. <jsp:setProperty />:用来设置bean的属性,即调用其setXxx()方法
  3. <jsp:getProperty />:用来获得bean的属性,即调用其getXxx()方法

JSP和Servlet中的请求转发分别如何实现

  • JSP中的请求转发可利用forward动作实现:<jsp:forward />
  • Servlet中实现请求转发的方式为:getServletContext().getRequestDispatcher(path).forward(req,resp)

Web.xml的作用

用于配置web应用的信息:如Listener、Filter及Servlet的配置信息等

写出熟悉的JSTL标签

  • <c:if>
  • <c:choose>
  • <c:when>
  • <c:otherwise>
  • <c:forEach>
  • <c:set>

JSP标签的作用是什么?如何定义?

作用:

  • 分离JSP页面的内容和逻辑
  • 业务逻辑开发者可以创建自定义标签
  • 封装业务逻辑
  • 可重用并且易维护
  • 易于手工修改、易于工具维护
  • 提供简洁的语法
    定义:
  1. 写标签处理器
  2. 写tld文件
  3. 将标签处理器和tld文件放到同一个包里面
  4. 把jsp页面和标签库配置部署在一起

什么是懒加载?懒加载用什么技术实现,如何解决session关闭导致的懒加载问题?解决的方案有缺点吗

懒加载就是延迟加载,采用代理技术实现,采用openSessionInViewFilter,openSessionInViewFilter其实上就是一个过滤器。页面打开时开启session,页面访问结束时关闭session。当访问用户过多,而且网速过慢的时候,会挤爆系统。事务扩大了,加锁导致资源等待时间过长,session范围变大,如果加载页面的时间过长,如网速比较慢,session内存时间过长,导致系统性能下降,数据库连接不能及时释放

Spring工作原理

内部最核心的就是IOC(控制反转),动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,根据xml Spring的配置文件来动态的创建对象,和调用对象里的方法。还有一个核心就是AOP。这个就是面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的

  • Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置内部通过反射去动态的组装对象)
  • Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能

ActionContext、ServletContext、pageContext的区别是什么?

  • ActionContext是Struts2的API,表示当前的Action的上下文环境
  • ServletContext 和PageContext是Servlet的API

简述一下拦截器的生命周期和工作过程

每个拦截器都是需要实现Interceptor接口

  • init():在拦截器被创建后立即被调用,它在拦截器的生命周期內只被调用一次,可以在该方法中对相关资源进行必要的初始化
  • intercept(ActionInvocation invocation):每拦截一个动作请求,该方法就会被调用一次
  • destroy:该方法将在拦截器被销毁之前被调用,它在拦截器的生命周期内也只被调用一次

解释一下IOC,以及Spring的举例

IOC称为控制反转,也叫依赖注入。IOC是Spring的核心组件,它通过配置文件,将需要创建的对象以池的方式管理,将实例注入到需要的对象中去,是对象依赖于注入而不依赖于实现,解决了各个组件的耦合度问题,使得项目在后期的维护和扩展上非常方便

谈谈你对Spring AOP思想的理解

AOP可以说是OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能,日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。这种散布在各处的无关的代码被称为横切代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖揭开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。
AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。而剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天工的妙手将这些剖开的切面复原,不留痕迹。
使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,它们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。
AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。实现AOP技术,主要分为两大类:

  • 采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行
  • 采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码

Spring 有哪几种注入方式?

  • 构造注入
  • 属性注入
  • 接口注入

请简述一下SpringMVC 的工作机制

  1. 客户端所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块,让它们对请求进行真正的处理
  2. DispatcherServlet 查询一个或多个HandlerMapping,找到处理请求的Controller
  3. DispatcherServlet 将请求提交到目标Controller
  4. Controller 进行业务逻辑处理后,会返回一个ModelAndView
  5. Dispatcher 查询一个或多个 ViewResolver 视图解析器,找到ModelAndView 对象指定的视图对象
  6. 视图对象负责渲染返回给客户端

比较 SpringMVC 与 Struts2

  • 在数据封装方面,SpringMVC是方法级别,Struts2是类级别,所以SpringMVC开发效率要高于Struts2
  • SpringMVC注解版基本上是零配置
  • SpringMVC与Spring是一家人,兼容性好
  • Struts2存在安全漏洞(可以通过ongl表达式,格式化硬盘;使用重定向定位到钓鱼网站)

简述一下mybatis框架的优缺点

优点:

  • 易于上手和掌握
  • sql写在xml里,便于统一管理和优化
  • 解除sql与程序代码的耦合
  • 提供对象关系映射标签,支持对象关系组建维护
  • 提供xml标签,支持编写动态sql
    缺点:
  • 可读性低
  • 调试非常困难
  • 非常受限,无法像jdbc那样在代码里根据逻辑实现复杂动态sql拼接

简述Spring的事务传播行为和隔离级别

Spring的事务传播行为:Spring在TransactionDefinition 接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生在嵌套调用时事务如何进行传播:

  • PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择
  • PROPAGATION_SUPPORTS:支持当前事务。如果当前没有事务,就以非事务方式执行
  • PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
  • PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
  • PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
  • PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常
  • PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作

Spring的隔离级别:

  • Serializable:最严格的级别,事务串行执行,资源消耗最大
  • REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(或者回滚)的数据。避免了“脏读”和“不可重复读”的情况,但是带来了更多的性能损失
  • READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了”脏读“。该级别适用于大多数系统
  • READ UNCOMMITTED:保证了读取过程总不会读取到非法数据

谈谈你对Spring的理解

  1. Spring实现了工厂模式的工厂类,这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationContext。Spring相当于一个大的工厂类,在其配置文件中通过元素配置用于创建实例对象的类型和实例对象的属性
  2. Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦。IOC也称为DI(Depency Injection)
  3. Spring提供了对AOP技术的良好封装,AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码。例如,加入日志、权限判断、异常处理等,这种应用称为AOP。实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明。有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类,在JDK中采用Proxy类产生动态代理的方式,为某个接口生成实现类,如果要为某个类生成子类,则可以用CGLIB,在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice对象进行提供,显然要创建出代理对象,至少需要目标类和Advice类

Spring 中 bean 的配置 scope 表示什么含义?可以有哪几种取值?

scope 表示 Bean 的生命周期或者叫 Bean 的作用域。scope的值有两个:

  • singleton,为单例属性,即Spring IOC容器只会创建该Bean的唯一一个实例。这是scope的默认值
  • prototype,为原型属性,即每一次请求都会产生一个新的Bean实例

软件开发的流程是怎么样的

需求分析、概要设计、详细设计、编码、测试、交付、验收、维护

说一下Spring的优点

  • 降低了组件之间的耦合性,实现了软件各层之间的解耦
  • 可以使用提供的众多服务,如事务管理,消息服务等,提供了众多的辅助类,能加快应用的开发
  • 容器提供单例模式支持
  • 容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
  • Spring对主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
  • Spring属于低侵入式设计,代码的污染极低
  • Spring的DI机制降低了业务对象替换的复杂性
  • Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择Spring的部分或全部

简述一下Java中访问数据库的步骤

导入驱动包、获得连接、获取语句对象、获得结果集、关闭结果集、关闭语句对象、关闭连接

说一下Statement,PreparedStatement,CallableStatement的功能和特点

Statement:用于执行静态SQL语句并返回它所生成结果的对象;(只执行一次的语句用这个)
PreparedStatement:表示预编译的SQL语句的对象,执行前可以进行赋值操作;(反复使用的语句用这个,另外它还可以有效地防止SQL注入)
CallableStatement:执行存储过程,预编译的,带参数的

Servlet的生命周期

初始化、实例化、服务、销毁
服务器加载servlet、服务器创建servlet实例、调用servlet实例的init方法、收到请求、调用service方法、调用doXxx方法处理请求并将输出结果返回客户端、等待下一个请求或由服务器卸载、调用destroy方法后被卸载

MVC的各个部分都有哪些技术来实现?如何实现?

MVC是Model-View-Controller的简写。Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),View 是应用的表示面(由JSP页面产生),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用

说一下Web容器里面的对象存活周期

由web容器进行创建管理的对象主要有application,session,request,page这4个级别的对象,而这4种级别的对象根据他们自身的特点来管理所持的对象。如:request中的对象的生命周期就是在请求范围内,Session的是在会话周期内,page的是在当前JSP Page内,Application的是在服务器启动,停止的周期内

说一下 join 与 left join 的区别

  • inner join(等值连接)只返回两个表中联结字段相等的行
  • left join(左联接)返回包括左边中的所有记录和右表中联结字段相等的记录
  • right join(右联接)返回包括右边中的所有记录和左表中联结字段相等的记录

你觉得JQuery 中的 Ajax好用吗,为什么?

好用。因为JQuery提供了一些日常开发中需要的快捷操作,例如load,ajax,get,post等等,所以使用JQuery开发Ajax将变得极其简单,就可以集中精力在业务和用户的体验上,而不需要去理会那些繁琐的XMLHttpRequest 对象了

Jquery 中 $.get()提交和$.post()提交有区别吗?

  • $.get() 方法使用 GET方法来进行异步请求。$.post()方法使用Post方法来进行异步请求
  • Get请求会将参数跟在URL后进行传递,而Post请求则是将参数作为Http消息的实体内容发送给Web服务器,这种传递对用户是不可见的
  • Get方式传输的数据大小不能超过2KB 而 Post要大得多
  • Get方式请求的数据会被浏览器缓存起来,因此有安全问题

JQuery 是如何处理缓存的?

处理缓存也就是禁用缓存:

  • 通过$.post() 方法来获取数据,那么默认就是禁用缓存的
  • 通过$.get()方法来获取数据,可以通过设置时间戳来避免缓存。可以在URL后面加上+(+new Date) 举例:$.get(‘ajax.xml?’+(+new Date),function () {// 内容})
  • 通过$.ajax方法来获取数据,只要设置cache:false即可

JQuery能做什么?

  • 获取页面的元素
  • 修改页面的外观
  • 改变页面的内容
  • 响应用户的页面操作
  • 为页面添加动态效果
  • 无需刷新页面,既可以从服务器获取信息
  • 简化常见的javascript任务

说一下Ajax的工作原理

Ajax的工作原理相当于在用户和服务器之间加了一个中间层,使用户操作与服务器响应异步化。这样把以前的一些服务器负担的工作转嫁到客户端,利用客户端闲置的处理能力来处理,减轻服务器和带宽的负担,从而达到节约ISP的空间以及带宽租用成本的目的。比较典型的就是类似于桌面应用程序的动态、快速响应、高交互性的体验

简述 JSON 和 XML 的优缺点

  • 在可读性方面,JSON和XML的数据可读性基本相同。JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,很难分出高下
  • 在可扩展性方面,XML有很好的扩展性,JSON也有,XML能扩展的,JSON都可以
  • 在编码难度方面,XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,反之XML有一定的难度
  • 在解码难度方面,XML的解析得考虑子节点父节点,而JSON的解析难度几乎为0
  • 在流行度方面,XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON
  • JSON相对于XML来讲,数据的体积小
  • JSON与Javascript的交互更加方便
  • JSON对数据的描述性比XML更差
  • JSON的速度要远远快于XML
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值