Java SE进阶知识

一、集合

不管使用什么语言编程,编程在做的事情(编程的本质)都是一样的,那就是设计算法和数据结构(程序 = 算法 + 数据结构),算法是一个程序的操作步骤(即这个进程在CPU上的计算和执行顺序),数据结构是一个程序的存储方式(即数据在内存中以怎样的形式存放),从物理的角度看,内存中的数据结构只有两种:①连着的,顺序存储结构;②分开的,链式存储结构,但是,从数据元素之间的关系来讲,可分为三种数据结构,①线性表;②树;③图,在Java的util包中,存放了一些基本数据结构类,这就是集合,主要有:

①List:ArrayList(C++里的vector),LinkedList(使用起来和ArrayList一样,区别在于内存上);

②Set:HashSet;(List是有序的、不唯一的,Set是无序的,唯一的,与List正好相反)

③Map:HashMap。(key:value)

另需谈论两个问题:

①迭代器:iterator

一个例子:

// 获取迭代器
Iterator<String> it = sites.iterator();   // sizes是一个ArrayList<String>

②泛型:数据类型参数化

java 中泛型标记符:

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  •  - 表示不确定的 java 类型

二、IO:根本问题:输出output(内存到外面(硬盘,显示器,网络等等)),这是在写write呢,输入input(外面(硬盘,键盘,网络等等)到内存),这是在读read呢

有三个类是常用的:(网络编程和序列化都是字节流)

①有关于File的类:

FileOutputStream fileOut = new FileOutputStream("文件路径名");

序列化:

ObjectOutputStream out = new ObjectOutputStream(fileOut);   // File类对象常作为其他对象构造函数的参数

out.writeObject(e);

反序列化:

FileInputStream fileIn = new FileInputStream("文件路径名");

ObjectInputStream in = new ObjectInputStream(fileIn);

e = (类名) in.readObject();

③网络编程:

网络编程中的IO结构经常以这样一种形式存在:

OutputStream outToServer = 连接套接字.getOutputStream();

DataOutputStream out = new DataOutputStream(outToServer);

out.writeUTF("信息");

三、网络编程

这个网络编程是狭义上的网络编程,指基于TCP或者UDP进行的socket网络编程,网络编程不是只有socket,其实Java web就是网络编程的一种,只不过它是基于HTTP而不是socket,socket编程也不只是基于TCP这样的传输层协议,也可以基于其他的协议,比如你可以使用原始套接字,但是TCP确实是用的最多的网络协议。

下面简单介绍一下Java的TCP网络编程:

经典的LinuxTCP网络编程的模式(4 + 2):

Java网络编程(2 + 1):

server端的2:

ServerSocket serverSocket = new ServerSocket(port);   // 监听套接字,合socket和bind为一

Socket server = serverSocket.accept();   // 连接套接字,合listen和accept为一

client端的1:

Socket client = new Socket(serverName, port);   //客户端套接字,合socket和connect为一

四、多线程

网络编程由于其良好的封装,并不复杂,但是一个符合企业标准的网络服务器绝不可能是单线程的,因为单线程对CPU的利用率太低,因而网络编程总离不开多线程编程,在学习Java的多线程之前,我们先得弄清楚这几个概念,在《对编程的认识》一文中浅谈过:

①串行(网络传输就是串行的)、并行(多个CPU多个进程)、并发(虚拟化的并行,一个CPU多个进程);

②阻塞、非阻塞:这两个概念是针对单个进程而言的,阻塞就是该进程在等,等什么呢?这个就说不准了,至于说它是在CPU上等,还是离开了CPU等,这也是说不准的,一般OS不会让它在CPU上等,因为这是在白白浪费CPU的时间,非阻塞就是该进程也在等,但是它不断轮询;

③同步、异步:这两个概念是针对多个进程而言的,同步指多个进程如同单个进程一样执行,这需要进程间通信,异步就是随机,多线程的最初摸样就是异步的,各个线程各执行各的,谁也不管谁,在优先级控制下,谁先执行谁后执行一切随缘(意思是说看操作系统的具体情况)。

Java的线程如何创建有哪些API,看菜鸟吧:Java 多线程编程 | 菜鸟教程

下面我们着重了解几个Java的服务器模型:(我的整个学习过程分为两个部分,一个是Java web即学习如何开发web系统,目前正在该部分的第一阶段Java SE,第二部分是网络编程即学习如何开发高性能服务器,现在我们先简单了解几个Java的服务器模型)

(待补充)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值