百度2017面试题自测11-20

 

 

    • IOC的优势是什么
    • IO 和 NIO的区别,NIO优势
    • Java 8 / Java 7 为咱们提供了什么新功能
    • 什么是竞态条件? 举个例子说明。
    • JRE、JDK、JVM 及 JIT 之间有什么不一样
    • MVC的各个部分都有那些技术来实现?如何实现?
    • RPC 通讯和 RMI 区别
    • 什么是 Web Service(Web服务)
    • JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。
    • WEB容器主要有哪些功能? 并请列出一些常见的WEB容器名字。

11,IOC,Inversion of Control控制反转,html

spring的三大核心:IOC控制反转,DI依赖注入,AOP面向切面编程java

通俗的理解是:日常咱们new一个实例,这个实例的控制权是咱们程序员,而控制反转是指new实例工做不禁咱们程序员来作而是交给spring容器来作。linux

 反转控制的优势:实现组件之间的解耦,提升程序的灵活性和可维护性程序员

IOC的缺点:复杂不利于理解,执行效率有损耗, 缺乏IDE支持web

一、建立对象的步骤变复杂了,不直观,固然这是对不习惯这种方式的人来讲的。
二、由于使用反射来建立对象,因此在效率上会有些损耗。但相对于程序的灵活性和可维护性来讲,这点损耗是微不足道的。
三、缺乏IDE重构的支持,若是修改了类名,还需到XML文件中手动修改,这彷佛是全部XML方式的缺憾所在

 

12 ,Java中I/O操做主要是指使用Java进行输入,输出操做spring

java.nio全称java non-blocking IO,是指jdk1.4 及以上版本里提供的新api(New IO) ,为全部的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它能够提供非阻塞式的高伸缩性网络。apache

咱们在写java程序的时候,为了进行优化,把所有的精力用在了处理效率上,可是对IO的关注却不多。这也多是由之前java早期时JVM在解释字节码时速度慢,运行速率大大低于本地编译代码,所以之前每每忽视了IO的优化。可是如今JVM在运行时优化已前进了一大步,如今的java应用程序更多的是受IO的束缚,也就是将时间花在等待数据传输上。如今有了NIO,就能够减小IO的等待时间,从而提高IO的效率编程

java io 和java nio的区别:有三点主要区别:IO面向流,是阻塞IO,无选择器。NIO面向缓冲,是非阻塞IO,有选择器。设计模式

一、面向流与面向缓冲api

     Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取全部字节,它们没有被缓存在任何地方。此外,它不能先后移动流中的数据。若是须要先后移动从流中读取的数据,须要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不一样。数据读取到一个它稍后处理的缓冲区,须要时可在缓冲区中先后移动。这就增长了处理过程当中的灵活性。可是,还须要检查是否该缓冲区中包含全部您须要处理的数据。并且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里还没有处理的数据。

二、阻塞与非阻塞IO

     Java IO的各类流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据彻底写入。该线程在此期间不能再干任何事情了。Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,可是它仅能获得目前可用的数据,若是目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,因此直至数据变的能够读取以前,该线程能够继续作其余的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不须要等待它彻底写入,这个线程同时能够去作别的事情。 线程一般将非阻塞IO的空闲时间用于在其它通道上执行IO操做,因此一个单独的线程如今能够管理多个输入和输出通道(channel)。

三、选择器(Selectors)

     Java NIO的选择器容许一个单独的线程来监视多个输入通道,你能够注册多个通道使用一个选择器,而后使用一个单独的线程来“选择”通道:这些通道里已经有能够处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。

注意:JVM 是把双刃剑。它提供了统一的操做环境,让 Java 程序员不用再为操做系统环境的区别而烦恼。与特定平台相关的细枝末节大都被隐藏了起来,于是代码写得又快又容易。可是隐藏操做系统的技术细节也意味着某些个性鲜明、功能强大的特性被挡在了门外。

1三、

JAVA5的新功能简介:

一、泛型。二、枚举。三、自动拆装箱。四、可变长参数。五、注释。六、静态导入。七、增强for循环(for(int n:numbers))
八、新的格式化方法(java.util.Formatter)
formatter.format("Remaining account balance: $%.2f", balance);
九、新的线程模型和并发库Thread Framework
HashMap的替代者ConcurrentHashMap和ArrayList的替代者CopyOnWriteArrayList在大并发量读取时采用java.util.concurrent包里的一些类会让你们满意BlockingQueue、Callable、Executor、Semaphore...

JAVA6的新功能简介:

一、引入了一个支持脚本引擎的新框架。二、UI的加强。三、对WebService支持的加强(JAX-WS2.0和JAXB2.0)。
四、一系列新的安全相关的加强五、JDBC4.0六、Compiler API七、通用的Annotations支持

JAVA7的新功能简介:

1,switch中可使用字串2,菱形泛型
1.switch能够接受string类型而不像之前仅仅是int;2.异常catch能够一次处理完而不像之前一层层的surround;3.泛型类实例化也不用繁琐的将泛型声明再写一遍;4.文件读写 会自动关闭流而不像之前那样须要在finally中显式close;5.数值可使用下划线分隔;6.文件读写功能加强,有更简单的api调用;7.文件改变的事件通知功能;8.多核 并行计算的支持增强 fork join 框架;9.还有一些动态特性的加入。

JAVA8的新功能简介:

1Lambda表达式2接口的默认方法与静态方法三、方法引用四、重复注解五、扩展注解的支持六、Optional七、Stream八、Date/Time API (JSR 310)九、JavaScript引擎Nashorn十、Base6411更好的类型推测机制、12编译器优化1三、并发(Concurrency)1四、Nashorn引擎jjs15类依赖分析器jdeps16JVM的PermGen空间被移除

1四、竞态条件(race condition)是指设备或系统出现不恰当的执行时序,而获得不正确的结果。

在java中竞态条件出如今多线程中。有两种状况:1,先检测后执行,而执行后的结果影响检测,2,延迟性初始化,两个线程同时执行单例初始化;

如对于main线程,若是文件a不存在,则建立文件a,可是在判断文件a不存在以后,Task线程建立了文件a,这时候先前的判断结果已经失效,(main线程的执行依赖了一个错误的判断结果)此时文件a已经存在了,可是main线程仍是会继续建立文件a,致使Task线程建立的文件a被覆盖、文件中的内容丢失等等问题。

线程a和线程b同时执行getInstance(),线程a看到instance为空,建立了一个新的Obj对象,此时线程b也须要判断instance是否为空,此时的instance是否为空取决于不可预测的时序:包括线程a建立Obj对象须要多长时间以及线程的调度方式,若是b检测时,instance为空,那么b也会建立一个instance对象

1五、首先对术语进行解释:JVM是java虚拟机,JRE是java运行环境,JDK是java开发工具箱,JIT是java的即时编辑器

JVM实现java的跨平台特性

JRE是java的运行环境,为java运行提供基础

JDK是封装了部分经常使用代码,使开发简化

JIT提升了JVM的编码效率

java虚拟机(JVM)
    使用java编程语言的主要优点就是平台的独立性。你曾经想知道过java怎么实现平台的独立性吗?对,就是虚拟机,它抽象化了硬件设备,开发者和他们的程序的得以操做系统。虚拟机的职责就是处理和操做系统的交流。java不一样的接口规范对任何平台都有良好的支持,由于jvm很好的实现了每一个平台的规范。jvm能够理解伪代码字节码,在用户和操做系统之间创建了一层枢纽。
java运行时环境(JRE)
    java运行时环境是JVM的一个超集。JVM对于一个平台或者操做系统是明确的,而JRE确实一个通常的概念,他表明了完整的运行时环境。咱们在jre文件夹中看到的全部的jar文件和可执行文件都会变成运行时的一部分。事实上,运行时JRE变成了JVM。因此对于通常状况时候使用JRE,对于明确的操做系统来讲使用JVM。当你下载了JRE的时候,也就自动下载了JVM。
java开发工具箱(JDK)
    java开发工具箱指的是编写一个java应用所须要的全部jar文件和可执行文件。事实上,JRE是JKD的一部分。若是你下载了JDK,你会看到一个名叫JRE的文件夹在里面。JDK中要被牢记的jar文件就是tools.jar,它包含了用于执行java文档的类还有用于类签名的jar包。
即时编译器(JIT)
    即时编译器是种特殊的编译器,它经过有效的把字节码变成机器码来提升JVM的效率。JIT这种功效很特殊,由于他把检测到的类似的字节码编译成单一运行的机器码,从而节省了CPU的使用。这和其余的字节码编译器不一样,由于他是运行时(第一类执行的编译?)the firs of its kind to perform the compilation(从字节码到机器码)而不是在程序运行以前。正是由于这些,动态编译这个词汇才和JIT有那么紧密的关系。

1六、MVC是Model-View-Controller的缩写,是一种软件设计典范和依据。

M是指业务模型,V是指用户界面,C则是控制器。经过业务模型和用户界面的隔离,达到下降代码耦合度,提升代码重用性,容易部署,生命周期短,容易维护的目的

M:hibernate/mybatis/ibatis C:severlet/struts/spring action V:jsp/FreeMarker/tails/taglib/EL/Velocity
mvc是一种设计模式,许多框架都运用了这一思想
最典型的MVC就是JSP + servlet + javabean的模式
java中的struts2框架,spring框架,PHP中的ZF框架,微软的.NET框架
1七、
RPC(Remote Procedure Call Protocol)远程过程调用协议,经过网络从远程计算机上请求调用某种服务
RMI:远程方法调用(Remote Method Invocation)。可以让在客户端Java虚拟机上的对象像调用本地对象同样调用服务端java 虚拟机中的对象上的方法。
二者区别:
1. RPC 不支持对象, 采用http协议; RMI支持传输对象。采用tcp/ip 协议
2.RMI只限于JAVA语言,RPC跨语言
3方法调用方式不一样:
 RMI中是经过在客户端的Stub对象做为远程接口进行远程方法的调用。每一个远程方法都具备方法签名。若是一个方法在服务器上执行,可是没有相匹配的签名被添加到这个远程接口(stub)上,那么这个新方法就不能被RMI客户方所调用。
 RPC中是经过网络服务协议向远程主机发送请求,请求包含了一个参数集和一个文本值,一般造成“classname.methodname(参数集)”的形式。RPC远程主机就去搜索与之相匹配的类和方法,找到后就执行方法并把结果编码,经过网络协议发回。
四、调用结果的返回形式不一样:
    Java是面向对象的,因此RMI的调用结果能够是对象类型或者基本数据类型;
    RMI的结果统一由外部数据表示 (External Data Representation, XDR) 语言表示,这种语言抽象了字节序类和数据类型结构之间的差别。
1八、
Web Service,网络服务的本质,就是经过网络调用其余网站的资源。
计算机服务,能够分为本地服务和网络服务。是对计算机资源的调用,处理,展现
本地服务,具备安全性高,资源有限,成本高,平台移植性差的特色
网络服务,能够解决本地服务的缺点,并且容易维护升级,实现不一样技术的聚合
最广泛的一种说法就是,Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)协议是web service的主体,它经过HTTP或者SMTP等应用层协议进行通信,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不一样主机的异构系统间的计算服务处理。这里的WSDL(Web Services Description Language)web 服务描述语言也是一个XML文档,它经过HTTP向公众发布,公告客户端程序关于某个具体的 Web service服务的URL信息、方法的命名,参数,返回值等。
1九、
JSWDL开发包定义了网络服务规范,Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵照具体的技术规范,这些规范使得Web Service能与其余兼容的组件进行互操做。
 
JAXP(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你须要改变具体的实现时候也不须要修改代码。
JAXM(Java API for XML Messaging) 是为SOAP通讯提供访问方法和传输机制的API。
WSDL是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操做。这种格式首先对操做和消息进行抽象描述,而后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。
SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。
UDDI 的目的是为电子商务创建标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业可以发现的访问协议的实现标准。
20、
web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,
Web容器的功能:1.通讯支持。2.控制servlet生命周期。3.多线程支持,为每一个servlet请求建立一个线程,servlet运行完成后容器就会自动结束这个线程。
java 中的Web容器举例:通常本地开发的话建议使用tomcat。linux系统建议使用jetty或apache hpptd。大型的项目就用JBOSS或webloigc
相关文章
相关标签/搜索