全双工、DNS、Ping与ICMP、香农定理、Qos服务质量、PPP信息帧格式、集合框架、java线程状态转换、垃圾回收标准、HashMap与HashTable的区别、布尔类型在if语句中的赋值使用、优化Hibernate所鼓励的7大措施、类加载器、处理流与节点流。
一、单工模式、半双工模式、全双工模式
1、单工模式
A发送请求,B接收请求,但B并不能发送请求。
2、半双工模式
A发送请求过程中B不可以发送请求,当B发送请求时,A不能发送请求。
3、全双工模式
A和B可以同时发送请求,同时接受请求。
二、DNS的作用
1、作用
(1)将主机名翻译到指定的IP地址;
(2)将IP地址反解成主机名;
(3)解析特定类型的服务的地址,如MX,NS;
2、补充知识
(1)DNS是域名解析协议;
(2)IP地址转为MAC地址是ARP协议的作用,RARP协议的作用刚好相反;
(3)DNS解析域名到IP地址为双向的,此外还可以解析特定类型的服务的地址;
(4)DNS查询是双向,递归,迭代,多功能的有直接IP解析,别名解析,记录解析等等。
三、Ping与ICMP
ping用来测试网络可达性。
主机A通过ping建立一个固定格式的ICMP请求包逐层包装传递给主机B,主机B收到数据帧处理后构建一个ICMP发送给主机A。
ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网络的连线情况,也能确保连线的准确性。其ICMP类型中包含各种代码以及对应的响应报告(Ping通以及Ping不同的差错报告)。
四、香农定理
C = Blb(1 + S / N)
其中:C是信道支持的最大速度或者叫信道容量;B是信道的带宽;S是平均信号功率;N是平均噪声功率;S/N即信噪比。
信噪比越高,数据传输率也越高。
五、QoS服务质量
QoS(Quality of Service),中文名为“服务质量”。它是指网络提供更高优先服务的一种能力,包括专用带宽、抖动控制和延迟(用于实时和交互式流量情形)、丢包率的改进以及不同WAN、LAN和MAN技术下的指定网络流量等,同时确保为每种流量提供的优先权不会阻碍其它流量的进程只要涉及到带宽分配和对业务服务质量有要求的地方,就会有QoS设计。QoS技术多应用于广域网络和语音、视频等媒体业务系统。
六、PPP信息帧格式
A: 信息字段的长度是可变的,不超过1500字节;
B、PPP帧的首部和尾部分别为四个字段和两个字段 ;首部:标志字段F、地址字段A、控制字段C、协议字段 尾部:帧校验序列 FCS、标志字段 F;
C、D: 首部第一个字段和尾部第二个字段都是标志字段F 规定为0x7E 标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。首部的地址字段A规定为0xFF,控制字段C规定为0x03 这两个字段实际上并没有携带PPP帧的信息。
D:PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报
当协议字段为0xC021,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示网络层的控制数据。
七、集合框架
八、java线程状态的转换
九、垃圾回收器收集的标准
java中,判断一块内存空间是否符合垃圾收集器收集标准的标准为:
1、给对象赋值为null,以下没有调用过;
2、给对象赋了新的值,重新分配了内存空间。
十、类、接口与.class文件的关系
一个.java文件中定义多个类:
注意一下几点:
(1) public权限类只能有一个(也可以一个都没有,但最多只有一个);
(2)这个.java文件名只能是public 权限的类的类名;
(3)倘若这个文件中没有public 类,则它的.java文件的名字是随便的一个类名;
(4)当用javac命令生成编译这个.java 文件的时候,则会针对每一个类生成一个.class文件。
十一、字符串创建对象
十二、布尔类型在if语句中的赋值运算
注意的是上面的if语句中是赋值语句,if的语句比较,除boolean外的其他类型都不能使用赋值语句,否则会提示无法转成布尔值。
十三、线程安全的map集合讲解
HashMap,TreeMap 未进行同步考虑,是线程不安全的。
HashTable 和 ConcurrentHashMap 都是线程安全的。区别在于他们对加锁的范围不同,HashTable 对整张Hash表进行加锁,而ConcurrentHashMap将Hash表分为16桶(segment),每次只对需要的桶进行加锁。
Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合。比如,
List list = Collections.synchronizedList(new ArrayList());
Set set = Collections.synchronizedSet(new HashSet());
十四、java中的数组
数组是一种引用数据类型,那么他肯定是继承Object类的,所以里面有equals() 方法,但是肯定没有重写过, 因为他并不是比较数组内的内容。使用Arrays.equals() 是比较两个数组中的内容。
十五、HashTable和HashMap区别
1、继承不同
1 | public class Hashtable extends Dictionary implements Map |
2、线程安全性不同
Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
3、Hashtable中,key和value都不允许出现null值
在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
4、两个遍历方式的内部实现上不同
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
5、哈希值的使用不同
HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
6、Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式
HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
十六、接口中的成员
接口,比抽象类还要抽象的类。
- 接口中每一个方法也是隐式抽象的,接口中的方***被隐式的指定为 public abstract (只能是 public abstract,其他修饰符都会报错)。
- 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误。)
- 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
注:
接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
接口中的方法都是公有的。public
十七、优化Hibernate所鼓励的7大措施
1、尽量使用many-to-one,避免使用单项one-to-many;
2、灵活使用单向one-to-many;
3、不用一对一,使用多对一代替一对一;
4、配置对象缓存,不使用集合缓存;
5、一对多使用Bag,多对一使用Set;
6、继承使用显示多态 HQL:from object polymorphism=”exlicit” 避免查处所有对象;
7、消除大表,使用二级缓存。
十八、io流
java采用的uincode编码,两个字节表示一个字符,因此 char型在java中占两个字节,而int型占四个字节,故总共占六个字节。
补充:
- byte 1个字节
- short 2个字节
- int 4个字节
- long 8个字节
- float 4个字节
- double 8个字节
- char 2个字节
- boolean 1个字节或4个字节,在java规范2中,如果boolean用于声明一个基本类型变量时占4个字节,如果声明一个数组类型的时候,那么数组中的每个元素占1个字节
十九、类加载器
类的加载是由类加载器完成的,类加载器包括:根加载器( BootStrap )、扩展加载器( Extension )、系统加载器( System )和用户自定义类加载器( java.lang.ClassLoader 的子类)。从 Java 2 ( JDK 1.2 )开始,类加载过程采取了父亲委托机制( PDM )。 PDM 更好的保证了 Java 平台的安全性,在该机制中, JVM 自带的 Bootstrap 是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。 JVM 不会向 Java 程序提供对 Bootstrap 的引用。下面是关于几个类加载器的说明:
Bootstrap :一般用本地代码实现,负责加载 JVM 基础核心类库( rt.jar );
Extension :从 java.ext.dirs 系统属性所指定的目录中加载类库,它的父加载器是 Bootstrap ;
system class loader :又叫应用类加载器,其父类是 Extension 。它是应用最广泛的类加载器。它从环境变量 classpath 或者系统属性 java.class.path 所指定的目录中记载类,是用户自定义加载器的默认父加载器。
用户自定义类加载器: java.lang.ClassLoader 的子类
父类委托机制是可以修改的,有些服务器就是自定义类加载器优先的。
二十、处理流与节点流
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
- 节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
- 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
JAVA常用的节点流:
- 文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流。
- 字符串 StringReader StringWriter 对字符串进行处理的节点流。
- 数 组 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
- 管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter对管道进行处理的节点流。
常用处理流(关闭处理流使用关闭里面的节点流)
缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter 增加缓冲功能,避免频繁读写硬盘。
转换流:InputStreamReader OutputStreamReader 实现字节流和字符流之间的转换。
数据流 DataInputStream DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来.
流的关闭顺序
- 一般情况下是:先打开的后关闭,后打开的先关闭
- 另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b。例如,处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b
- 可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法。
简单来说,处理流就是需要传入节点流对节点流进行封装的流。