软件构件技术期末复习

软件构件技术期末复习,第1张

软件构件技术期末复习

1.在Java中,NIO和BIO的区别主要体现在那三个方面?
答: 在Java中,BIO是面向流的,NIO是面向缓冲区(块)的;
BIO的各种流是同步阻塞的,而NIO是同步非阻塞的。
BIO没有选择器,NIO有,
NIO会等待数据全部传输过来以后再开辟一个线程去处理,而BIO会一有请求就开辟一个线程,如果数据没有完成传输,就让它等待

在Java中,NIO和OIO的区别主要体现在三个方面:
(1)BIO是面向流(Stream Oriented)的,NIO是面向缓冲区(Buffer Oriented)的。
在一般的BIO *** 作中,面向字节流或字符流的IO *** 作总是以流式的方式顺序地从一个流(Stream)中读取一个或多个字节,因此,我们不能随意改变读取指针的位置。在NIO *** 作中则不同,NIO中引入了Channel和Buffer的概念。面向缓冲区的读取和写入只需要从通道读取数据到缓冲区中,或将数据从缓冲区写入通道中。NIO不像BIO那样是顺序 *** 作,它可以随意读取Buffer中任意位置的数据。
(2)BIO的 *** 作是阻塞的,而NIO的 *** 作是非阻塞的。
BIO *** 作都是阻塞的。例如,我们调用一个read方法读取一个文件的内容,调用read的线程就会被阻塞,直到read *** 作完成。
在NIO模式中,当我们调用read方法时,如果此时有数据,则read读取数据并返回;如果此时没有数据,则read也会直接返回,而不会阻塞当前线程。
NIO的非阻塞是如何做到的呢?其实在上一章已经揭晓答案,即NIO使用了通道和通道的多路复用技术。
(3)BIO没有选择器(Selector)的概念,而NIO有选择器的概念。
NIO的实现是基于底层选择器的系统调用的,所以NIO需要底层 *** 作系统提供支持;而BIO不需要用到选择器。

2.RESTful架构风格背后的主要思想是什么?
答:统一接口:组件之间有统一的接口。
RESTful web服务是基于客户机/服务器的,不存储状态。从客户机到服务器的请求的结果可以缓存在客户机中。它具有基于超媒体的统一接口,具有自描述消息。而且客户机和服务器并不知道它们之间的中间连接。

3.AJAX中包括哪些技术?
Ajax即Asynchronous Javascript And XML(异步Javascript和XML),是一种Web数据交互方式,一种支持异步请求的技术。

  • 基于Web标准(XHTML + CSS)的展示
  • 使用DOM进行动态显示和交互
  • 使用XMLHttpRequest进行数据交换和相关 *** 作
  • 用JS可以控制XMLHttpRequest对象向服务器提出请求并处理响应,而不影响用户对页面的正常访问。

4.请简述HTTP/1.1协议300型响应码中几个重要的响应码,含义是什么?
3xx: 重定向 - 为完成请求,需要进一步的行动。我们常见的301 Redirect就是这个分类内的。

3xx系列的响应涉及的状态码除了304 Not Modified 之外都是用于重定向的。我们首先查看3xx系列的重定向状态码和描述:
300 Multiple Choices 客户端请求了实际指向多个资源的URL。
301 Moved Permanently 请求的 URL 已移走。
302 Found 请求的URL临时移走
303 See Other 客户端应该使用指定URL
307 Temporary Redirect 客户端应该临时定位到指定URL
于是,看起来并不复杂的重定向,稍微对比就会感到很混淆的。特别是301/302 ,303/307 一组,好像根本就是重复的。

300 multiple choices
含义在于——同样的一个URI,可以对应多个实际的资源。比如同样的软件下载可以有多个平台的版本,或者多种打包压缩格式。又比如,同样的文档可以有不同的文档格式 。客户端可以在这些结果中,根据自己的情况作出自动的选择(比如中文用户就自动选择中文文档),或者给出列表,提交给最终用户选择。
标准内并没有给出具体的多个选择项的格式。因此,该状态码很少被标准的web服务器和用户代理使用。

301 Moved Permanently
说的是客户端请求的 URI 对应的资源已经被挪到其他位置,这个新位置已经在响应消息的LOCATION 头字段内指定。如果你的书签使用了这个URI,那么应该由用户代理自动更新到新的位置。下次访问也希望使用新的URI。

  • 客户端请求: GET /abc HTTP/1.1 Host: www.example.org
  • 服务器响应: HTTP/1.1 301 Moved Permanently Location:
    http://www.example.org/def

302 Found
说的是你当前访问的URI对应的资源暂时被移动到一个新位置
这个新位置在Location头内指定。
和301不同的是
302并不影响你的书签
你也不必下次访问新的URI,因为这个变化是暂时的
实际上,这个状态码在HTTP 1.0引入
本来命名就是 302 Moved Temporarily,以便和301对照使用

303 See Other
此状态码也是重定向。但是它不管之前的请求方法是什么,都强制要求转换请求方法为GET

307 Temporary Redirect
此状态码也是重定向响应。但是它和303不同,它要保持新的请求方法和之前发起请求的请求方法一致。就是说,如果之前是 GET 方法,那么这次重定向也需继续使用GET 方法;之前使用POST方法,这次依然需要保持使用POST 方法。

304 Not Modified
此状态码其实和重定向无关。但是总不至于单独为它一个而增加一个分类,所以就放到了300系列内。当用户代理发起GET请求并设置了修改时间的前条件,而服务器发现被请求的资源并没有在给出的时间后被修改,就会返回这个状态码。这个状态码的存在是为了性能上的考量。不必传递用户代理有的、服务器也没有修改的资源。案例:

  • 客户端请求: GET /sample.html HTTP/1.1 Host: example.com If-Modified-Since:
    Wed, 01 Sep 2004 13:24:52 GMT
  • 服务器响应: HTTP/1.1 304 Not Modified Date: Tue, 27 Dec 2005 05:25:19 GMT

5.数据库连接接缓冲池的实现代码。
实现原理其实很简单,当首次建立的时候,根据配置的最小的连接缓冲数,自动创建规定的数据库连接connection,以备访问中间件的应用调用,这里建立起来的连接放在idealpool中,每次有数据库连接请求查看一下idealpool有没有可用连接,如果有则将最后一个返回即可,如果没,看一下inServingPool超过缓冲池的最大值否,没有则创建一个con返回,并放入inServingPool,应用关闭连接的时候不是真正关闭,而是从inServingPool移动到idealpool,等待服务下一个连接请求。

public class DBPool {
	
	private List idealpool;//空闲缓冲池
	private List inServingPool;//在服务缓冲池
	
	private static final int POOL_MAX_SIZE = DBManager.getConfiguration().getPoolMaxSize();
	private static final int POOL_MIN_SIZE = DBManager.getConfiguration().getPoolMinSize();
	
	public void initPool() {
		if (idealpool == null) {
			idealpool = new ArrayList();
		}
		inServingPool = new ArrayList();
		while (idealpool.size() < DBPool.POOL_MIN_SIZE) {
			idealpool.add(DBManager.createConnection());
			System.out.println("初始化池,池中连接数:" + idealpool.size());
		}
	}
	
	public synchronized Connection getConnection() {
		int last_index = idealpool.size() - 1;
		Connection conn = null;
		if (last_index >= 0) {
			conn = idealpool.get(last_index);
			idealpool.remove(last_index);
			inServingPool.add(conn);
		}else if (inServingPool.size()= POOL_MAX_SIZE) {
			try {
				if (conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} else {
			idealpool.add(conn);
			inServingPool.remove(conn);
		}
	}
	public DBPool() {
		this.initPool();
	}
}

6.反射的定义和注解的相关概念

  • 反射(Reflection)是程序的自我分析能力,通过反射可以确定类有哪些方法、有哪些构造方法以及有哪些成员变量。Java语言提供了反射机制,通过反射机制能够动态读取一个类的信息;能够在运行时动态加载类,而不是在编译期。反射可以应用于框架开发,它能够从配置文件中读取配置信息动态加载类、创建对象,以及调用方法和成员变量。
  • Java5之后可以在源代码中嵌入一些补充信息,这种补充信息称为注解(Annotation),例如在方法覆盖中使用过的@Override注解,注解都是@符号开头的。
  • 注解并不能改变程序运行的结果,不会影响程序运行的性能。有些注解可以在编译时给用户提示或警告,有的注解可以在运行时读写字节码文件信息。
  • 元注解包括:@documented、@Target、@Retention、@Inherited、@Repeatable和@Native。元注解是为其他注解进行说明的注解,当自定义一个新的注解类型时,其中可以使用元注解。其中@documented:如果在一个自定义注解中引用@documented注解,那么该注解可以修饰代码元素(类、接口、成员变量和成员方法等),javadoc等工具可以提取这些注解信息。

7.NIO的核心组件和相关概念
Java NIO类库包含以下三个核心组件:

  • Channel(通道)
    在BIO中,同一个网络连接会关联到两个流:一个是输入流(Input Stream),另一个是输出流(Output Stream)。Java应用程序通过这两个流不断地进行输入和输出的 *** 作。
    在NIO中,一个网络连接使用一个通道表示,所有NIO的IO *** 作都是通过连接通道完成的。一个通道类似于BIO中两个流的结合体,既可以从通道读取数据,也可以向通道写入数据。
  • Buffer(缓冲区)
    应用程序与通道的交互主要是进行数据的读取和写入。为了完成NIO的非阻塞读写 *** 作,NIO为大家准备了第三个重要的组件——Buffer。所谓通道的读取,就是将数据从通道读取到缓冲区中;所谓通道的写入,就是将数据从缓冲区写入通道中。缓冲区的使用是面向流进行读写 *** 作的BIO所没有的,也是NIO非阻塞的重要前提和基础之一。
  • Selector(选择器)
    首先回顾一下前面介绍的基础知识——IO多路复用指的是一个进程/线程可以同时监视多个文件描述符(含socket连接),一旦其中的一个或者多个文件描述符可读或者可写,该监听进程/线程就能够进行IO就绪事件的查询。
    在Java应用层面,如何实现对多个文件描述符的监视呢?需要用到一个非常重要的Java NIO组件——选择器。选择器可以理解为一个IO事件的监听与查询器。通过选择器,一个线程可以查询多个通道的IO事件的就绪状态。
    从编程实现维度来说,IO多路复用编程的第一步是把通道注册到选择器中,第二步是通过选择器所提供的事件查询(select)方法来查询这些注册的通道是否有已经就绪的IO事件(例如可读、可写、网络连接完成等)。
    由于一个选择器只需要一个线程进行监控,因此我们可以很简单地使用一个线程,通过选择器去管理多个连接通道。
    与BIO相比,NIO使用选择器的最大优势是系统开销小。系统不必为每一个网络连接(文件描述符)创建进程/线程,从而大大减少了系统的开销。总之,一个线程负责多个连接通道的IO处理是非常高效的,这种高效来自Java的选择器组件Selector及其底层的 *** 作系统IO多路复用技术的支持。

8.HTTP处理多事务的连接方式

  • 域名解析
  • 发起TCP三次握手
  • 建立TCP连接以后发起http请求
  • 服务器端响应请求,浏览器得到html代码
  • 浏览器解析html代码并请求html中的资源
  • 浏览器对页面进行渲染呈现给用户

9.HTTP协议的request和reponse的格式

  • http 协议规定,http request部分报文分三部分。第一部分是请求行,第二部分是请求头,第三部分是请求实体。
  • http request中规定第一行为请求行,请求行中第一个单词为请求的方法。比如GET(请求服务端数据),post(更新数据到服务端),DELETE(删除服务端数据),PUT(新增数据到服务端) OPTION,TRACE等等。
  • 第二个单词为请求的相对路径
  • 第三个单词为http版本。
  • http response报文协议结构和http request报文协议结构几乎相同,第一部分为响应状态行,第二部分为应答头,第三部分为应答实体
  • http response报文规定第一行为响应状态行,第一个单词为http协议值,比如http/0.9 http/1.0 htpp/1.1
  • 第二个单词为响应的状态码。比如 200表示服务端处理该请求成功,4XX开头是客户端发的http resquest有问题,5XX为服务端内部处理出错。3XX为页面转发

10.HTTP/1.1协议200型和300型响应码中几个重要的响应码,含义是什么?
2xx: 成功。请求被成功的接受或者理解,或者执行。我们常见的200 OK就是这个分类内的。

  • 200 OK
    可能是最常用的状态。它指明请求已经成功完成。
  • 201 Created
    201 Created 会比200 OK 有更加具体的语义。201指明请求成功且创建了一个资源,因此201常常配合PUT方法使用,因为PUT方法的语义上就是创建一个资源。
  • 202 Accepted
    202 Accepted 会比200 OK 有更加具体的语义。202表明请求成功被接受,但不一定已经完成资源创建或者修改,而只是被接受,可能还有服务器的后续的处理。
  • 204 No Content
    表明请求处理成功,但是作为服务器并不想要提供消息在消息主体内,或者并没有什么消息主体需要提供。 比如使用DELETE请求情况下,如果服务成功完成,可以返回204 No Content。此场景下就是告诉客户端:“你的DELETE请求已经完成,但是因为这个资源已经被删除,所以,也就没有什么需要返回的消息”。
  • 205 Reset Content
    此状态码告诉客户端请求已经成功执行。不同于204,它的意图是要告诉客户应该清除Form的内容或者刷新用户界面。具体说,我们可以填写Form,提交后,如果接到了205响应,就应该重设Form,然后初始化一个新的输入。
    事实上,并没有什么浏览器支持这样的意图:浏览器要么把205当成204,要么当成200。然而,对于ajax应用就可以实现这样的意图:ajax应用接到205码,用户界面应该把数据设置到默认值。如果是 Restful App ,在数据输入场景下,204响应适合对一条记录做一系列的编辑;205更适合输入一系列的记录;故而,Restful App的建议更加尊重http的设计本意。
  • 206 Partical Content
    它的存在目的是为了支持大文件的分段下载。当客户端发起资源范围请求,服务器就可以返回206型响应,告知客户端 *** 作成功并且返回部分内容。

3xx: 重定向 - 为完成请求,需要进一步的行动。我们常见的301 Redirect就是这个分类内的。(同上)

11.RPC的相关概念
RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,而不需要了解底层网络技术的协议。RPC它假定某些协议的存在,例如TPC/UDP等,为通信程序之间携带信息数据。在OSI网络七层模型中,RPC跨越了传输层和应用层,RPC使得开发,包括网络分布式多程序在内的应用程序更加容易。
+++++++++

12.Java i/o的标准实现方式

13.Java8 的标准注解

  • 基本注解包括:@Override、@Deprecated、@SuppressWarnings、@SafeVarargs和@FunctionalInterface。
  • @Override只能用于方法,子类覆盖父类方法(或者实现接口的方法)时可以@Override注解。编译器会检查被@Override注解的方法,确保该方法父类中存在的方法,否则会有编译错误。
    使用@Override注解示例代码见工程。
    当然如果该方法前面不加@Override注解,即便是方法写错误了,也不会有编译错误,但是Object父类的toString()方法并没有被覆盖。这会引起程序出现Bug(缺陷)。
  • @Deprecated用来指示API已经过时了,@Deprecated可以用来注解类、接口、成员方法和成员变量。
    不仅代码中有删除线,而且还有编译警告。
  • @SuppressWarnings注解用来抑制编译器警告,如果你确认程序中的警告没有问题,可以不用理会。但是就是不想看到这些警告,可以使用@SuppressWarnings注解消除这些警告。
    @SuppressWarnings({ “deprecation”
    })-@SuppressWarnings注解中的deprecation表示要抑制API已经过时。使用了@SuppressWarnings注解后会发现程序代码的警告没有了。
  • @FunctionalInterface注解是Java 8增加的,用于接口的注解,声明接口是函数式接口,主要用于Lambda表达式。

14.HTTP协议的标准Method

  • HTTP方法 HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。每条HTTP请求报文都包含一个方法。
  • GET 表示我们要请求一个由URI指定的在服务器上的资源。
  • PUT方法 表示如果指定URL资源不存在就创建它,否则就修改它。
  • POST方法 表示要创建一个新的子资源,或者更新一个存在的资源。
  • DELETE表示我们要删除一个由URI指定的资源。
  • HEAD 和GET一样,但是仅仅返回指定资源响应的头部分,而不必返回响应主体
  • OPTIONS 查询目标资源支持method的清单。
  • TRACE 查询到目标资源经过的中间节点。用于测试。
  • ConNECT 建立一个到URI指定的服务器的隧道。

15.ORM中间件实现的关键点

  • 实现ORM的关键点在于解决“对象–关系”之间的映射

16.软件的三大类型

  • 单机类型、BS类型、CS类型

17.目前市面上常见的实现Java Servlet的产品和框架

  • Struts1 Struts2 SpringMVC

18.Java AIO的核心组件
Java AIO处理API中,重要的三个类分别是:

  • AsynchronousServerSocketChannel(服务端)

  • AsynchronousSocketChannel(客户端)

  • CompletionHandler(用户处理器)
    CompletionHandler接口实现应用程序向 *** 作系统发起I/O请求,当完成后处理具体逻辑,否则做自己该做的事情,“真正”的异步I/O需要 *** 作系统更强的支持。

19.HTTP1.1协议的头的标准关键字
++++++++++++++++++++++
20.HTML DOM模型中,获取网页中元素的方法

  • 根据ID获取 : document.getElementById(id);
  • 根据标签名获取 : document.getElementsByTagName(name);
  • 通过元素的name属性值:getElementsByName(name):
  • 根据类名返回元素对象集合 (H5新增)
  • 通过选择器返回指定选择器的第一个元素对象 (H5新增)

21.Netty的通道类型

  • Channel:是对网络Socket的封装,抽象了网络I/O的读、写、连接与绑定。
  • AbstractChannel:实现了Channel接口的大部分功能,一次连接用到的Channel、ChannelId、eventLoop、pipelIne、unsafe都会保存在这里。
  • AbstractNioChannel:通过select的方式对读写事件进行监听。
  • 客户端Channel:主要注册read与write事件,关注于具体数据的读写。
  • 服务端Channel:主要注册accept事件,关注于具体连接的接入,这也是与客户端Channel的read事件最主要的区别。

22.HTTP事务的组成
23.Reactor模式的核心组成
24.常见的五种基本I/O模型
25.HTTP协议请求的八个方法的名称及其功能
26.java.lang.reflect包中提供反射处理能力的几个类并说明其作用
27.目前Java中常见的几种实现RESTful技术方案
28.简述java.lang.Class类和java.lang.Object的作用和区别
29.RESTful架构风格背后的主要思想是什么
30.HTTP Response类程序和HTTP Request的类的实现代码
31.RPC架构中每个部分的功能作用

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5685036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存