高级Internet复习大纲.docx

上传人:b****6 文档编号:5988394 上传时间:2023-01-02 格式:DOCX 页数:31 大小:47.34KB
下载 相关 举报
高级Internet复习大纲.docx_第1页
第1页 / 共31页
高级Internet复习大纲.docx_第2页
第2页 / 共31页
高级Internet复习大纲.docx_第3页
第3页 / 共31页
高级Internet复习大纲.docx_第4页
第4页 / 共31页
高级Internet复习大纲.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

高级Internet复习大纲.docx

《高级Internet复习大纲.docx》由会员分享,可在线阅读,更多相关《高级Internet复习大纲.docx(31页珍藏版)》请在冰豆网上搜索。

高级Internet复习大纲.docx

高级Internet复习大纲

二问答题

1.基于Socket的通信的原理是什么?

答:

Socket通信的原理还是比较简单的,它大致分为以下几个步骤。

服务器端的步骤如下。

(1)建立服务器端的Socket,开始侦听整个网络中的连接请求。

(2)当检测到来自客户端的连接请求时,向客户端发送收到连接请求的信息,并建立与客户端之间的连接。

(3)当完成通信后,服务器关闭与客户端的Socket连接。

客户端的步骤如下。

(1)建立客户端的Socket,确定要连接的服务器的主机名和端口。

(2)发送连接请求到服务器,并等待服务器的回馈信息。

(3)连接成功后,与服务器进行数据的交互。

(4)数据处理完毕后,关闭自身的Socket连接。

2如何实现多个客户端的Socket的通信

3种方式:

1.不断循环accept()方法2.多线程3.线程池。

3.Socket通讯的阻塞会发生在什么地方?

客户端可能发生阻塞的地方:

1请求与服务器建立连接时,会进入阻塞状态,直到连接成功。

2线程从Socket的输入流读入数据时,如果没有足够的数据,就会进入阻塞状态,直到读到了足够的数据,或者到达输入流的末尾,或者出现了异常,才从输入流的read()方法返回或异常中断。

3线程向Socket的输出流写一批数据时,可能会进入阻塞状态,等到输出了所有的数据,或者出现异常,才从输出流的write()方法返回或异常中断。

4当调用Socket的setSoLinger()方法设置了关闭Socket的延迟时间,那么当线程执行Socket的close()方法时,会进入阻塞状态,直到底层Socket发送完所有剩余数据,或者超过了setSoLinger()方法设置的延迟时间,才从close()方法返回。

服务器端可能发生阻塞的地方:

1线程执行ServerSocket的accept()方法,等待客户的连接,直到接收到了客户连接,才从accept()方法返回。

2线程从Socket的输入流读入数据时,如果输入流没有足够的数据,就会进入阻塞状态。

3线程向Socket的输出流写一批数据时,可能会进入阻塞状态,等到输出了所有的数据,或者出现异常,才从输出流的write()方法返回或异常中断。

4.java的TCP和UDP如何实现,各有什么优缺点。

1,Java编写UDP网络程序

1.1,DatagramSocket

DatagramSocket有如下构造方法:

1,DatagramSocket():

构造数据报套接字并将其绑定到本地主机上任何可用的端口。

2,DatagramSocket(intport):

创建数据报套接字并将其绑定到本地主机上的指定端口。

3,DatagramSocket(intport,InetAddressladdr):

创建数据报套接字,将其绑定到指定的本地地址。

即指定网卡发送和接收数据.

如果在创建DatagramSocket对象时,没有指定网卡的IP地址,在发送数据时,底层驱动程序会自动选择一块网卡去发送,在接收数据时,会接收所有的网卡收到的与端口一致的数据.

发送信息时,可以不指定端口号,接收信息时,要指定端口号,因为要接收指定的数据.

发送数据使用DatagramSocket.send(DatagramPacketp)方法,接收数据使用DatagramSocket.receive(DatagramPacketp)方法.

1.2,DatagramPacket

DatagramPacket类有如下构造方法:

1,DatagramPacket(byte[]buf,intlength):

构造DatagramPacket,用来接收长度为length的数据包。

2,DatagramPacket(byte[]buf,intlength,InetAddressaddress,intport):

构造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。

接收数据时使用第一次构造方法,发送数据时使用第二种构造方法.

1.3,InetAddress

Java中对IP地址进行包装的类,

DatagramPacket.getAddress()可以获取发送或接收方的IP地址.DatagramPacket.getPort()可以获取发送或接收方的端口.

2,Java编写TCP网络程序

2.1,ServerSocket

编写TCP网络服务程序,首先要用到.ServerSocket类用以创建服务器Socket.它的常用构造方法有:

1,ServerSocket(intport):

创建绑定到特定端口的服务器套接字。

2,ServerSocket(intport,intbacklog):

利用指定的backlog(服务器忙时保持连接请求的等待客户数量),创建服务器套接字并将其绑定到指定的本地端口号。

3,ServerSocket(intport,intbacklog,InetAddressbindAddr):

使用指定的端口、侦听backlog和要绑定到的本地IP地址创建服务器。

2.2,Socket

客户端要与服务器建立连接,必须先创建一个Socket对象,它的常用构造方法有:

1,Socket(Stringhost,intport):

创建一个流套接字并将其连接到指定主机上的指定端口号。

2,Socket(InetAddressaddress,intport):

创建一个流套接字并将其连接到指定IP地址的指定端口号。

3,Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort):

创建一个套接字并将其连接到指定远程端口上的指定远程地址。

4,Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort):

创建一个套接字并将其连接到指定远程主机上的指定远程端口。

对于通常情况的应用,使用第1个构造方法来创建客户端的Socket对象,并与服务器建立连接,是非常简单和方便的.

服务器端程序调用ServerSocket.accept方法等待客户端的连接请求,一旦accept接收了客户端连接请求,该方法返回一个与该客户端建立了专线连接的Socket对象,不用程序去创建这个Socket对象.建立了连接的两个Socket是以IO流的方式进行数据交换的,Java提供了Socket.getInputStream返回Socket的输入流对象,Socket.getOutputStream返回Socket的输出流对象.

优缺点:

可以答网络上学习的

5无阻塞通信的原理是什么?

阻塞通信和无阻塞通信的区别是什么?

使用无限线循环策略

–采用阻塞模式,用线程池中的工作线程处理每个客户连接。

–采用非阻塞模式,单个线程同时负责接收多个客户连接,以及与多个客户交换数据的任务。

–由一个线程负责接收多个客户连接,采用阻塞模式;由另一个线程负责与多个客户交换数据,采用非阻塞模式。

阻塞调用是指调用结果返回之前,当前线程会被挂起。

函数只有在得到结果之后才会返回。

非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

6NIO的主要优点是什么?

速度相对较快,面向块,提供了buffer,来解决数据的传送和处理

块读写,而非字节读写,读写速度快。

NIO弥补了原来的I/O的不足,它在标准Java代码中提供了高速的、面向块的I/O。

NIO的创建目的是为了让Java程序员可以实现高速I/O而无需编写自定义的本机代码。

NIO将最耗时的I/O操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。

NIO提供了Buffer,Channel来解决数据的传送和处理中的问题。

7缓冲区所有的缓冲区都有以下属性:

容量(capacity)极限(limit)位置(position):

表示什么,其大小关系是什么

容量(capacity):

表示该缓冲区可以保存多少数据。

极限(limit):

表示缓冲区的当前终点,不能对缓冲区中超过极限的区域进行读写操作。

极限是可以修改的,这有利于缓冲区的重用。

例如,假定容量为100的缓冲区已经填满了数据,接着程序在重用缓冲区时,仅仅将10个新的数据写入缓冲区中从位置0到10的区域,这时可以将极限设为10,这样就不能读取先前的数据了。

极限是一个非负整数,不应该大于容量。

位置(position):

表示缓冲区中下一个读写单元的位置,每次读写缓冲区的数据时,都会改变该值,为下一次读写数据作准备。

位置是一个非负整数,不应该大于极限。

以上三个属性的关系为:

容量>=极限>=位置>=0

8JDBC3.0有哪些新的特性?

元数据API,CallableStatements中已命名的参数,数据类型的改变,检索自动产生的关键字,连接器关系,ResultSet可保持性,返回多重结果,预备语句池,连接池。

9为什么产生Hibernate?

Hibernate的ORM指的是什么?

如何使一个对象持久化?

1.hibernate是一种ORM(objectrelationmapping,对象关系映射)框架,所谓的对象关系映射,通俗的说,就是把JAVA对象保存到关系型数据库中,即进行持久化的框架。

2.hibernate进行持久化首先要建立对象到关系数据库的映射。

3.hibernate根据定义的映射规则将对象持久化(保存到)数据库存中。

这就实现了对象持久化。

使用session与sessionfactory对象,Session接口提供增、删、改、查功能。

Session中有一个缓存,位于缓存中对象处于持久化状态,他和数据库中的记录相对

应。

Sessionsession=sessionFactory.openSession();

Transactiontx=session.beginTransaction();

另一种回答:

Hibernate是一种运用DAO(DataAccessObject)设计模式来实现对象和关系数据库之间映射(O/RMapping)的开源框架。

它对JDBC进行了轻量级的对象封装,使得Java程序员可以完全使用面向对象的编程思维来操作关系数据库,是持久层的一项实现技术。

相比于其它持久层实现技术如JDBC、EJB(EntityBeans)、JDO(JavaDataObject)等,Hibernate易于掌握,更加符合编程人员的面向对象思维,Hibernate拥有自己的一种查询语言(HQL),它是完全面向对象的。

Hibernate通过创建与数据库中的表对应的持久化对象,然后再通过影射文件将持久化对象中的属性与数据库表中的字段对应起来。

为Java程序员提供了面向对象的API和接口来操纵数据库,从而避免了在业务逻辑中嵌入大量的JDBC访问和事物控制代码。

ORM(Object/RelationMapping)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据库中。

本质上就是将数据从一种形式转换到另外一种形式。

10Hibernate有哪些查询方式?

OID检索

HQL检索

QBC检索

本地SQL检索

11Hibernate工作原理及为什么要用ORM?

对象与关系的桥梁

原理:

1.读取并解析配置文件

2.读取并解析映射信息,创建SessionFactory

3.打开Sesssion

4.创建事务Transation

5.持久化操作

6.提交事务

7.关闭Session

8.关闭SesstionFactory

原因:

1、繁琐的代码问题:

用JDBC的API编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错,

2、数据库对象连接问题

关系数据对象之间,存在各种关系,包括1对1、1对多、多对1、多对多、级联等。

在数据库对象更新的时候,如果采用JDBC编程,程序员必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程是一个很痛苦的过程。

ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。

3、系统架构问题

现在的应用系统,一般由展示层、业务逻辑层、数据访问层、数据库层等组成,各层次功能划分非常清晰。

JDBC属于数据访问层,但是使用JDBC编程时,程序员必须知道后台是用什么数据库、有哪些表、各个表有有哪些字段、各个字段的类型是什么、表与表之间什么关系、创建了什么索引等等与后台数据库相关的详细信息。

相当于软件程序员兼职数据库DBA。

使用ORM技术,可以将数据库层完全隐蔽,呈献给程序员的只有Java的对象,程序员只需要根据业务逻辑的需要调用Java对象的Getter和Setter方法,即可实现对后台数据库的操作,程序员不必知道后台采用什么数据库、有哪些表、有什么字段、表与表之间有什么关系。

于是,系统设计人员把ORM搭建好后,把Java对象交给程序员去实现业务逻辑,使数据访问层与数据库层清晰分界。

4、性能问题

12Hibernate中怎样实现类之间的关系?

(如:

一对多、多对多的关系)

类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、

13.Hibernate对象的三种状态是什么?

(1)瞬态:

表示该实体对象在内存中是自由存在的,也就是说与数据库中的数据没有任何的关联即,该实体从未与任何持久化上下文联系过,没有持久化标识(相当与主键)。

瞬态实体的特征有:

              与数据库中的记录没有任何关联,也就是没有与其相关联的数据库记录 与Session没有任何关系,也就是没有通过Session对象的实例对其进行任何持久化的操作。

(2)持久态:

指该实体对象处于Hibernate框架所管理的状态,也就是说这个实体对象是与Session对象的实例相关的。

处于持久态的实体对象的最大特征是对其所作的任何变更操作都将被Hibernate持久化到数据库中。

处于持久态的对象具有的特征为:

             

 每个持久态对象都于一个Session对象关联

              处于持久态的对象是于数据库中的记录相关联的

              Hibernate会根据持久态对象的属性的变化而改变数据库中的相应记录

(3)游离态:

处于持久态的实体对象,当他不再与Session对象关联时,这个对象就变成了游离态。

游离态对象的特征有:

               游离态对象一定是由持久态对象转换而来

               游离态实体不再于Session关联

             游离态实体对象与数据库中的数据没有直接联系,主要表现在对其进行的修改不再影响到数据库中的数据

              游离态实体对象在数据库中有相应的数据记录(如果该记录没有被删除)

14动态代理是什么,如何实现类的动态代理

动态代理是java.lang.reflect包的一部分,它允许程序创建代理对象,代理对象能实现一个或多个已知接口,并用反射代替内置的虚方法分派,编程地分派对接口方法的调用。

实现:

publicclassSetProxyFactory{

  publicstaticSetgetSetProxy(finalSets){

    return(Set)Proxy.newProxyInstance

     (s.getClass().getClassLoader(),

        newClass[]{Set.class},

        newInvocationHandler(){

          publicObjectinvoke(Objectproxy,Methodmethod,

           Object[]args)throwsThrowable{

            returnmethod.invoke(s,args);}});}}

15Spring的IOC的主要目的?

促进松耦合,面向接口编程。

非侵入的以及类的注入。

16Spring的AOP的功能是什么?

将一个共同的功能从不同的类中分离出来,然后将其封装使之可以被其他类使用。

面向方面的编程,它是类的织入,即把日志记录,性能分析,安全性分析,持久化等等织入到业务逻辑中。

17Spring框架的优点都有什么?

■轻量——从大小与开销两方面而言Spring都是轻量的。

完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。

■Spring是非侵入式的:

典型地,Spring应用中的对象不依赖于Spring的特定类;

■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合;

■面向切面——Spring提供了面向切面编程的丰富支持;

■容器——Spring包含并管理应用对象的配置和生命周期;

■框架——Spring可以将简单的组件配置、组合成为复杂的应用。

在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。

Spring也提供了很多基础功能(事务管理、持久化框架集成等等)

18简述你对IoC(InversionofControl)的理解

一个类需要用到某个接口的方法,我们需要将类A和接口B的实现关联起来,最简单的方法是类A中创建一个对于接口B的实现C的实例,但这种方法显然两者的依赖(Dependency)太大了。

而IoC的方法是只在类A中定义好用于关联接口B的实现的方法,将类A,接口B和接口B的实现C放入IoC的容器(Container)中,通过一定的配置由容器(Container)来实现类A与接口B的实现C的关联。

19简述你对AOP(AspectOrientedProgramming)的理解

AOP是OOP的补充,是GOF的延续。

我们知道设计模式是对于面向对象设计中经验的总结,它孜孜不断追求的就是调用者与被调用者之间的解耦。

有了设计模式我们可以更有效的利用面向对象的特性,使得整个软件设计更加灵活、优雅。

但是设计模式是基于面向对象的思想而形成的,更多的时候关注的是对象层次的东西,在解决对象行为内部问题方面却有些不足。

AOP的出现恰恰就是对面向对象思想做出了完美的补充。

20什么是分布式技术?

JAVA实现分布式技术有什么优越性?

一种基于网络的计算机处理技术,与集中式相对应。

由于个人计算机的性能得到极大的提高及其使用的普及,使处理能力分布到网络上的所有计算机成为可能。

分布式计算是和集中式计算相对立的概念,分布式计算的数据可以分布在很大区域,Java实现动态性的优越性,例如对类的动态加载,快速访问。

跨平台动态加载数据的分布与操作的分布逻辑与物理位置的不同负载均衡

21什么是RMI?

RMI的对象调用过程是什么?

远程方法调用

Java的RMI(RemoteMethodInvocation,远程方法调用)允许运行在一个Java虚拟机上的对象调用动行在另一个Java虚拟机上的对象的方法。

这两个Java虚拟机可以是运行在相同的机器上的不同进程里,也可以是通过TCP/IP连接的不同计算机上。

rmi简单的说就可以使用远程对象的方法,通过给定的方法名字和方法的参数可以构建一个方法。

RMI采用客户/服务器通信方式。

在服务器上部署了提供各种服务的远程对象,客户端请求访问服务器上远程对象的方法。

22RMI实现的步骤是什么?

1创建远端接口,需要继承java.rmi.remoteinterface

2定义一个实现远端接口的类

3服务器端完成对远端对象的注册

4编译之后再用rmic生成Stub在jdk1.2以后,利用java的reflect机制,就不需要skeleton文件了。

5启动rmiregister,任何目录都可以。

注意是rmiregistry.exe

6启动server:

7启动client:

三程序题

1Socket的单客户端实现。

客户端:

publicclassChatClient

{

Sockets=null;

publicChatClient()throwsException

{

s=newSocket("127.0.0.1",8888);

}

publicvoidsend(Stringstr)throwsException

{

DataOutputStreamdos=newDataOutputStream(s.getOutputStream());

dos.writeUTF(str);

}

publicvoiddisconnect()throwsException

{

s.close();

}

publicstaticvoidmain(String[]args)throwsException

{

BufferedReaderbr=newBufferedReader(

newInputStreamReader(System.in));

ChatClientcc=newChatClient();

Stringstr=br.readLine();

while(str!

=null&&str.length()!

=0)

{

cc.send(str);

str=br.readLine();

}

cc.disconnect();

}

}

服务器端:

import.*;

importjava.util.*;

importjava.io.*;

publicclassChatServer

{

ServerSocketserver=null;

CollectioncClient=newArrayList();

publicChatServer(intport)throwsException

{

server=newServerSocket(port);

}

publicvoidstartServer()throwsException

{

while(true)

{

Sockets=server.accept();

cClient.add(newClientConn(s));

}

}

classClientConnimplementsRunnable

{

Socke

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1