1、BIO、NIO和AIO之间的区别
BIO即同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。
NIO即同步非阻塞,一个线程不断的轮询买个输入输出的状态改变,如果有状态发生了改变,则进行下一步的操作。
AIO即异步非阻塞I/O模型,无需一个线程去轮询所有的IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处理。
2、深浅克隆的区别
1,浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的
成员对象并没有复制。
2,深克隆中,除了对象本身被复制外,对象所包含的所有成员变量也将复制
3、什么是序列化,如何实现Java序列化
Java序列化就是将一个对象转化为一个二进制表示的字节数组,通过保存或则转移这些二进制数组达到持久化的目的。
要实现序列化,需要实现java.io.Serializable接口
4、编码实现一个任意文件夹的拷贝
5.统计一个文件calcCharNum.txt中各个字符出现次数:A(8),B(16),C(10)...,a(12),b(10),c(3)....,括号内代表字符出现次数,要求按照出现次数从小到达排序输出。如果是回车符则按照空格符处理。
面向对象写法
App类
package com.zjh1; import java.io.FileReader; import java.io.Reader; public class App { public static void main(String[] args)throws Exception { ArrayList list=new ArrayList(); try(Reader r=new FileReader("data/calcCharNum.txt")){ int kk=-1; while(true){ kk=r.read(); if(kk==-1) break; if(kk=='r'||kk=='n'||kk=='t') kk=' '; list.add((char)kk); } list.sort(); list.show(); } } }
ArrayList类
package com.zjh1; public class ArrayList { private CharNum[] arr; private int count; public ArrayList() { this(10); } public ArrayList(int length) { arr = new CharNum[length]; } public void show() { for(int i=0;i=0) { arr[exists].addNum(); }else { arr[count++]=new CharNum(ch); if(count>=arr.length) resize(); } } private void resize() { CharNum[] res=new CharNum[arr.length*3/2]; for(int i=0;i CharNum类
package com.zjh1; public class CharNum { private char ch; private int num; public CharNum(char ch) { this.ch=ch; this.num=1; } @Override public String toString() { return ch+"("+num+")"; } public char getCh() { return ch; } public void addNum() { this.num++; } public boolean big(CharNum charNum) { boolean res=false; if(this.num>charNum.num) res=true; else if(this.num==charNum.num) { res=this.ch>charNum.ch; } return res; } }