java——阶段性整理(三)集合、线程、网络编程

一、Vector和ArrayList、ArrayList和LinkedList的区别和联系

1)Vector和ArrayList的区别和联系

实现原理相同,功能相同,都是长度可变的数组结构,很多情况下可以互用

  1. Vector是早期JDK接口,ArrayList是替代Vector的新接口
  2. Vector线程安全,ArrayList重速度轻安全,线程非安全
  3. 长度需增长时,Vector默认增长一倍,ArrayList增长50%

2)ArrayList和LinkedList的区别和联系

  1. ArrayList和LinkedList都是List的实现类,元素具有有序,不唯一特点。
  2. ArrayList实现了长度可变的数组,在内存中分配连续空间。遍历元素和随机访问元素的效率比较高;
  3. LinkedList采用链表存储方式。插入、删除元素时效率比较高

二、面向对象设计原则有哪些。

面向对象设计原则是面向对象设计的基石,面向对象设计质量的依据和保障,设计模式是面向对象设计原则的经典应用

  1. 单一职责原则(SRP)
  2. 开闭原则(OCP)
  3. 里氏潜代原则(LSP)
  4. 依赖注入原则(DIP)
  5. 接口分类原则(ISP)
  6. 迪米特原则(LOD)
  7. 组合/聚合复用原则(CARP)

开闭原则具有理想主义的色彩,它是面向对象设计的终极目标。其他设计原则都可以看作是开闭原则的实现手段或方法。

三、HashSet采用了哈希表作为存储结构,哈希表的特点和实现原理。

哈希表的查询速度特比快,时间复杂度为0

  • HashMap、Hashtable、HashSet这些集合采用的是哈希表结构,需要用到hashCode哈希码,hashCode是一个整数值。
  • 系统类已经覆盖了hashCode方法,自定义如果要放入hash类集合,必须重写hashCode。如果不重写,调用的是Object的hashCode,而object的hashCode实际上是地址
  • 向哈希表中添加数据的原理:当向集合Set 中增加对象时,首先集合计算要增加对象的hashCode 码,根据该值来得到一个位置用来存放当前对象,如在该位置没有一个对象存在的话,那么集合Set 认为该对象在集合中不存在,直接增加进去。如果在该位置有一个对象存在的话,接着将准备增加到集合中的对象与该位置上的对象进行equals 方法比较,如果该equals 方法返回false,那么集合认为集合中不存在该对象,在进行一次散列,将该对象放到散列后计算出的新地址里。如果equals 方法返回true,那么集合认为集合中已经存在该对象了,不会再将该对象增加到集合中了。
  • 在哈希表中判断两个元素是否重复要使用到hashCode()和equals()。hashCode决定数据在表中的存储位置,而equals 判断是否存在相同数据。

四、实现java反射技术的主要类和作用。

在JDK中,主要由以下类来实现Java反射机制,这些类哦都为与java.lang.reflect包中

  • Class类:代表一个类
  • Field类:代表类的成员变量
  • Method类:代表类的成员方法
  • Constructor类:代表类的结构方法
  • Array类:提供了动态创建数组,以及访问数组的元素的静态方法

五、sleep()和wait()的区别

sleep是线程类(Thread)的方法。

  • 作用是导致次线程暂停执行指定时间给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复;
  • 用sleep()不会释放对象锁。

wait是Object类的方法。

  • 对此对象调用wait方法导致本现场放弃对象锁,进入等待此对象的等待锁定池。
  • 只有针对此对象发出notfiy方法(或notifyAll)后本线程才进入对象锁定池,准备获得对象锁进行运行状态。

六、HashMap和Hashtable的联系和区别

共同点:

  • 二者都实现了Map接口,是将惟一键映射到特定的值上
  • 底层都采用哈希表作为存储结构,查询速度快,在很多情况下可互用。

主要区别:

  • Hashtable继承Dictionary类,HashMap是java1.2引进的Map实现。
  • Hashtable的线程安全的,而HashMap不是。在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须位置提供外同步。
  • HashMap没有排序,允许一个null键和多个null值,二Hashtable不允许。
  • HashMap把Hashtable的contains()去掉,改成containsValue和containsKey,因为contains方法容易让人引起误解。  

七、TCP/IP协议栈中,TCP协议和UDP协议的联系和区别

联系:

  TCP和UDP是TCP/IP协议栈中传输层的两个协议,它们使用网络层功能把数据包发送到目的地,从而为应用层提供网络服务。

区别:

  1. TCP是面向连接的传输。UDP是无连接的传输。
  2. TCP保证数据按照发送顺利到达,UDP无法保证。
  3. TCP是可靠性传输,而UDP则是不可靠传输。
  4. UDP因为少了很多控制信息,所以传输速度比TCP数据快
  5. TCP适合于传输大量数据,UDP适合用于传输小量数据。

比喻:

  TCP的server和client之间通信就好比两个人打电话。

  UDP的server中client之间的通信就像两个人发电报后者发短信。

八、List、Set、Collection、Map的区别和联系。

  1. List和Set是Collection接口的两个子接口
  2. Collection接口存储一组不唯一,无序的对象
  3. List接口存储一组不唯一,有序(插入顺序)的对象
  4. Set接口存储一组唯一,无序的对象
  5. Map接口存储一组键值对象,提供key到value映射。key无序,唯一。value不要求有序,允许重复。

九、进程和线程的联系和区别

进程和线程的联系:

  1. 线程是指进程内的一个执行单元,也是进程内的可调度实体
  2. 一个线程只能属于一个进程,一个进程可有多个线程,至少一个线程
  3. 进程和线程都可以并执行

线程与进程的区别:

  1. 根本区别:线程是调度和执行基本单位,进程执行时分配资源的基本单位。
  2. 开销:进程间切换开销大,线程间切换开销小
  3. 所处环境:在操作系统中能同时运行多个任务(进程)在同一应用程序中有多个顺序流(线程)同时执行

十、TCP的Socket编程的主要步骤

服务器端编程步骤:

  1. 构建一个ServerSocket实例,指定本地的端口
  2. 调用accept()方法来获得客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接
  3. 通过这个返回的socket实例获取InputStream和OutputStram,可以通过这两个stream来分别都和写数据。
  4. 结束的时候调用socket实例的close()方法关闭socket连接

客户端编程步骤:

  1. 构建Socket实例,通过指定的远程服务器地址和端口来建立连接。
  2. 通过Socket实例包含的InputStream和OutputStream来进行数据的读写。
  3. 操作结束后调用socket实例的close方法,关闭。

十一、常用字节输入流和输出流

  1. FileInputStream和FileOutputStream 节点流  以文件为数据源和目的地,提高读写效率
  2. BufferedInputStream 和 BufferedOutputStream 处理流 提供了缓冲功能,提高读写效率
  3. DataInputStream 和 DataOutputStream 处理流 提供了方便读写基本数据类型和String数据的方法。
  4. ObjectInputStream 和 ObjectOutputStream 处理流 不仅提供了方便读写基本数据类型和String数据的方法,也提供了读写引用类型数据的方法
  5. ByteArrayInputStream 和 ByteArrayOutputStream 节点流  以字节数组为数据源和目的地

十二、线程的两种创建方式及其优缺点。

方式一:继承java.lang.Thread类,并覆盖run()方法。

  • 优势:编写简单
  • 劣势:无法继承其他父类

方式二:实现java.lang.Runnable接口,并实现run()方法。

  • 优势:可继承其他类,多线程可共享同一个Thread对象
  • 劣势:编写方式稍微复杂,如许访问当前线程,需调用Thread.currentThread()方法

十三、UDP的Socket编程主要步骤

服务器端(server):

  1. 构造DatagramSocket实例。
  2. 创建数据包DatagramPacket,存取发送和接收的数据、IP和端口。
  3. 通过DatagramSocket实例的receive方法接收客户端数据。
  4. 通过DatagramSocket的send方法向客户端发出反馈信息。
  5. 关闭DatagramSocket。

客户端(client):

  1. 构造DatagramSocket实例。
  2. 创建数据包DatagramPacket,存取发送和接收的数据、IP和端口。
  3. 通过DatagramSocket实例的receive方法接收客户端数据。
  4. 通过DatagramSocket的send方法向服务端发送信息。
  5. 关闭DatagramSocket。
时间: 2024-08-29 13:30:40

java——阶段性整理(三)集合、线程、网络编程的相关文章

java复习整理之集合

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.ios培训..Net培训</a>.期待与您交流!------ java复习整理之集合: Collection:集合中的最顶层接口,提供了一些操作集合的共性方法添加:boolean add(E e)boolean addAll(Collection<? extends E> c)删除:void

Java 多线程(三) 线程的生命周期及优先级

Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处于创建状态. 处于创建状态的线程只是一个空的线程对象,系统不为它分配资源. 2.可运行状态: 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体——run()方法,这样就使得该线程处于可运行状态(Runnable). 这一

Java基础复习笔记系列 九 网络编程

Java基础复习笔记系列之 网络编程 1. 2.

Java笔记二十四.TCP网络编程

 TCP网络编程 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 从上面一节内容可以知道,利用UDP通信的两个程序是平等的,无主次之分,两个程序代码可以完全一样.但利用TCP协议进行通信的两个应用程序,是有主从之分的,一个称为服务器程序,另外一个称为客户机程序.Java中提供了ServerSocket类用于创建服务器端的socket,Socket类用于创建客户端socket. 一.APIs简介 java.net.ServerSocket (1

Java高级特性 第8节 网络编程技术

一.网络概述 1.网络的概念和分类 计算机网络是通过传输介质.通信设施和网络通信协议,把分散在不同地点的计算机设备互连起来,实现资源共享和数据传输的系统.网络编程就就是编写程序使联网的两个(或多个)设备(例如计算机)之间进行数据传输.Java语言对网络编程提供了良好的支持,通过其提供的接口我们可以很方便地进行网络编程.下面先对网络编程的一些基础知识进行介绍,最后给出使用Java语言进行网络编程的实例. 按照地理覆盖范围,计算机网络可以分为局域网(LAN).城域网(MAN).广域网(WAN). 2

第三模块:网络编程

1.基础知识 现有的软件,绝大多数是基于C/S结构,那么就需要介绍网络编程,毕竟现在的绝大多数数据还是在网络中传输.下面先说明一些网络的基础知识,不过对于从事网络工程的来说只是很简单的基础知识, 1.1 C/S架构 C/S架构中C指的是client(客户端软件),s指的是server(服务器端软件),而本章的主要学习目的是写一个基于C/S架构的软件,客户端软件与服务器端基于网络通信.现在基本的C/S架构基本是下图这样:客户端与服务器基于网络传输互相传输数据. 1.2 OSI的七层协议 了解了C/

JAVA笔试面试题系列之----②网络编程

1.网络编程概述 (1)网络模型 OSI参考模型 TCP/IP参考模型 (2)网络通讯要素 IP地址 端口号 传输协议 (3)网络通讯前提: **找到对方IP **数据要发送到指定端口.为了标示不同的应用程序,所以给这些网络应用程序都用数字进行标示 .这个表示就叫端口. **定义通信规则.这个规则称为通信协议,国际组织定义了通用协议TCP/IP (4)计算机网络: 是指将地理位置不同的具有独立功能的多台计算机及其外部设备, 通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和

Java知多少(104)网络编程之统一资源定位符URL

统一资源定位符URL(Uniform Resource Locator)是www客户机访问Internet时用来标识资源的名字和地址.超文本链路由统一资源定位符URL维持.URL的格式是: <METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE> 其中:Method是传输协议:HOSTNAME是文档和服务器所在的Internet主机名(域名系统中DNS中的点地址);PORT是服务端口号(可省略):PATH是路径名,FILE是文件名.例

Java多线程开启三个线程输出ABC10次

最近学多线程,搜了一下,满屏幕的问题都是类似标题那样的,所以就拿这个当开始吧,自己试了一下手, 多次把电脑CPU跑到100%,终于还是写出来了,大体思路为: 声明一个变量,标记三个线程该哪个线程输出,每次输出将该变量+1,判断方式为 变量对3的余数,如果为1-A,2-B, 3-C 1 public class ABC { 2 3 private static int mark = 0; 4 5 private static Object obj = new Object(); 6 7 publi