java基础-java网络编程课程简单题

1) 程序、进程和线程的概念及其之间的关系。

线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

程序是含有指令和数据的文件,被存储在磁盘或其他的数据存储设备中,也就是说程序是静态的代码。

进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。

线程 是 进程 划分成的更小的运行单位。线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。从另一角度来说,进程属于操作系统的范畴,主要是同一段时间内,可以同时执行一个以上的程序,而线程则是在同一程序内几乎同时执行一个以上的程序段。

2)什么是阻塞通信?非阻塞通信?

Socket通信有阻塞和非阻塞两者模式;

阻塞模式:

阻塞模式从某种意义上来说也是一种同步模式,当发送消息一端,未收到服务器确认收到消息的返回时,线程会被一直挂起,直到接收到反馈;所以,当Socket处于阻塞模式时,如果创建连接或者发送消息放在主线程,则主线程会一直处于挂起状态;如果不想主线程一直等待,就需要创建新的线程处理;

非阻塞模式:

同阻塞模式相反,类似于异步模式,当一端发送消息时,发出消息的线程不会挂起,而是继续执行;

3)C/S 模式通信的一般过程。

1.启动服务器端,监听指定端口,等待客户端的连接请求。

2.启动客户端,发起请求连接服务器的指定端口。

3.服务器端收到连接请求,建立与客户端通信的socket连接。

4.之后两端都打开两个流,建立流连接之后就可以双向通信。

5.当通信完毕之后就可以各自断开连接。

4)Java 流被分为字节流、字符流两大流类,两者有什么区别?

字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。 字节流默认不使用缓冲区;字符流使用缓冲区。 字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。

5)什么是节点流?什么是处理流?如何区分节点流和处理流?

(1)节点流可以从或向一个特定的地方(节点)读写数据;处理流是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写

(2)处理流的构造方法总是以一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

6)并行与并发?

并发(Concurrent),**在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。**

并行(Parallel),**当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。**决定并行的因素不是CPU的数量,而是CPU的核心数量,比如一个CPU多个核也可以并行。

并发不是真正意义上的“同时进行”,只是CPU把一个时间段划分成几个时间片段(时间区间),然后在这几个时间区间之间来回切换,由于CPU处理的速度非常快,只要时间间隔处理得当,即可让用户感觉是多个应用程序同时在进行。如:打游戏和听音乐两件事情在同一个时间段内都是在同一台电脑上完成了从开始到结束的动作。那么,就可以说听音乐和打游戏是并发的。

并发是在一段时间内宏观上多个程序同时运行,并行是在某一时刻,真正有多个程序在运行。

并行和并发的区别:

并发,指的是多个事情,在同一时间段内同时发生了。
并行,指的是多个事情,在同一时间点上同时发生了。

并发的多个任务之间是互相抢占资源的。
并行的多个任务之间是不互相抢占资源的、

只有在多CPU或者一个CPU多核的情况中,才会发生并行。否则,看似同时发生的事情,其实都是并发执行的。

7) 线程为什么需要调度?为什么引入优先级?

应用程序中的多个线程能够并发执行,但从系统的内部来看,所有线程仍然是串行的一个一个地执行,那么如何来决定哪一个线程先执行,哪一个线程后执行呢?

Java引入了优先级的概念,优先级就是线程获得CPU而执行的优先程度,优先级越高,获得CPU的权力越大,执行的机会越多,执行的时间也越长

8) 线程的生命期内包括哪些状态?(框图)

img

9) 创建线程的两种方式。

(1)创建Thread子类

实现多线程的一种方式:

* 第一步:继承Java.lang.Thread

* 第二步:重写run方法

生成Thread类的子类。

class MyThread extends Thread

在子类中重写run()方法。

public void run()

生成子类的对象,并且调用start()方法启动新线程。

MyThread thread = new MyThread();

thread.start();

start()方法将调用run()方法执行线程。

(2)生成一个类,声明实现Runnable接口

实现多线程的一种方式:

* 第一步:实现Java.lang.Runnable

* 第二步:实现run方法

实现Runnable接口的主要步骤:

定义一个类实现Runnable接口,

class FirstThread implements Runnable

并且在该类中实现run()方法。

public void run()

生成这个类的对象。

FirstThread first = new FirstThread();

用Thread(Runnable target)构造函数生成Thread对象,然后调用start()方法启动线程。

Thread thread1 = new Thread(first);

thread1.start();

10) 对象锁、sleep、wait、notify、notifyall 概念。

对象锁也叫方法锁,是针对一个对象实例的,它只在该对象的某个内存位置声明一个标识该对象是否拥有锁,所有它只会锁住当前的对象,而并不会对其他对象实例的锁产生任何影响,不同对象访问同一个被synchronized修饰的方法的时候不会阻塞

Sleep():静态方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”。当线程睡眠时,它睡在某个地方,在苏醒之前不会返回到可运行状态。

当睡眠时间到期,则返回到可运行状态。

wait():让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。“直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法”,当前线程被唤醒(进入“就绪状态”)

notify()和notifyAll():唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程。

11.为什么需要线程同步?

线程有可能和其他线程共享一些资源,比如内存,文件,数据等等。当多个线程同时读写的时候可能会发生冲突,这时候需要引入线程同步机制,即各个线程都得有个先来后到。同步的含义也就是排队的意思,一个一个对资源进行操作

\12. 如何使用 NetworkInterface 获取本机网络接口的 IPV4 地址?

通过 API 文档可知,使用 getNetworkInterfaces 方法即可得到当前机器上所有的网络接口。getInetAddresses 方法返回绑定到该网卡的所有的 IP 地址。(虽然一个网络接口确实可以绑定多个 IP 地址,然而通常情况下,一个网络接口都是只对应一个 IP 地址)

l NetworkInterface可以获取本机网络接口的相关信息,包括硬件地址,MTU,所有的IP地址等信息,需要获取本机IP时,最好使用NetworkInterface对配置的IP地址进行筛选。

\13. 如何实现 IP 地址分类识别?

img

img)

所有的IP地址划分为 A,B,C,D,E五类。

使用InetAddress类的四个静态方法创建InetAddress对象后,可以通过getAddress返回的byte数组判断是IPv4还是IPv6。如果是IPV4地址,提取byte数组address【0】的值分别于0x80,0Xc0,0XE0,0XF0,0XF8做与运算。

0x80=1000 0000 ,0xc0 = 1100 0000 0xE0 = 1110 0000 0Xf0=1111 0000 0XF8= 1111 1000

(具体如上图)

\14. 什么是 URL?URL 由哪些部分组成? URL 与 URI 有何异同

URL**统一资源定位符**,是Internet上用来描述信息资源的字符串,是具体的URI。
一个完整的URL包括:协议部分、域名部分、端口部分、虚拟目录部分、文件名部分、参数部分、锚部分

img

img)

16.什么是 cookie?cookie 有什么作用?

类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。

作用:

cookie文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。

1、记录用户的登录状态,譬如你登录了一个界面会显示“记住我”或者“自动登录的选项”。2、cookie起到识别用户身份的作用。3、保存客户的信息,起到简单缓存的作用。

17)URLConnection 类与 URL 类有何异同?利用 URLConnection 从网络中获取 网页数据。

在 java.net 包中包含专门用来处理 URL 的类 URL,可以获得 URL 的相关信息,例如 URL 的协议名和主机名等。

完成了 URL 的定义,接下来就可以获得 URL 的通信连接。在 java.net 包中,定义了专门的 URLConnection 类来表示与 URL 建立的通信连接,URLConnection 类的对象使用 URL 类的 openConnection() 方法获得。

利用 URLConnection 从网络中获取 网页数据:

1) 构造一个 URL 对象;

2) 调用这个 URL 对象的 openConnection()方法,获取对应该该 URL 的

URLConnection 对象;

3) 调用这个 URLConnection 的 getInputStream()方法;

4) 使用通常的流 API 读取输入流;getInputStream()方法返回一个通用

InputStream,可以读取和解析服务器发送的数据

18) Java 提供了流 socket 和数据报 socket,流 socket 和数据报 socket 各自的作用?

流 socket:实现面向连接的TCP通信

数据包 socket: 实现无连接的UDP通信

19)用一个 Java 建立一个简单的服务器需要几个步骤?

20) URLConnection 类的 doInput 属性和 doOutput 属性含义及使用方法

doInput属性:如果取值为true,表示允许获得输入流,读取远程服务器发送的数据。该属性的默认值为true。程序可通过getDoInput()和setDoInput()方法来读取和设置该属性。

doOutput属性:如果取值为true,表示允许获得输出流,向远程服务器发送数据。该属性的默认值为false。程序可通过getDoOutput()和setDoOutput()方法来读取和设置该属性。

21)JDBC 概念及其作用。JDBC 主要 API 接口功能

JDBC是Java程序操作数据库的API,也是Java程序与数据库相交互的一门技术。JDBC是Java操作数据库的规范,由一组用Java语言编写的类和接口组成,它对数据库的操作提供基本方法,但对于数据库的细节操作由数据库厂商进行实现,使用JDBC操作数据库,需要数据库厂商提供数据库的驱动程序。

其主要作用概括起来有如下3个方面:
建立与数据库的连接。
向数据库发起查询请求。
处理数据库返回结果。

JDBC API中的重要接口,接口作用:

java.sql.DriverManager 处理驱动程序的加载和建立新数据库连接

java.sql.Connection 处理与特定数据库的连接

java.sql.Statement 在指定连接中处理SQL语句

java.sql.ResultSet 处理数据库操作结果集