• java常见面试基础题2


    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类

    1. package com.zjh1;
    2. import java.io.FileReader;
    3. import java.io.Reader;
    4. public class App {
    5. public static void main(String[] args)throws Exception {
    6. ArrayList list=new ArrayList();
    7. try(Reader r=new FileReader("data/calcCharNum.txt")){
    8. int kk=-1;
    9. while(true){
    10. kk=r.read();
    11. if(kk==-1)
    12. break;
    13. if(kk=='\r'||kk=='\n'||kk=='\t')
    14. kk=' ';
    15. list.add((char)kk);
    16. }
    17. list.sort();
    18. list.show();
    19. }
    20. }
    21. }

    ArrayList类

    1. package com.zjh1;
    2. public class ArrayList {
    3. private CharNum[] arr;
    4. private int count;
    5. public ArrayList() {
    6. this(10);
    7. }
    8. public ArrayList(int length) {
    9. arr = new CharNum[length];
    10. }
    11. public void show() {
    12. for(int i=0;i
    13. System.out.print(arr[i]+",");
    14. }
    15. }
    16. public void sort() {
    17. for(int i=1;i
    18. for(int k=0;k
    19. if(arr[k].big(arr[k+1])) {
    20. CharNum tmp=arr[k];
    21. arr[k]=arr[k+1];
    22. arr[k+1]=tmp;
    23. }
    24. }
    25. }
    26. }
    27. public void add(char ch) {
    28. int exists=indexOf(ch);
    29. if(exists>=0) {
    30. arr[exists].addNum();
    31. }else {
    32. arr[count++]=new CharNum(ch);
    33. if(count>=arr.length)
    34. resize();
    35. }
    36. }
    37. private void resize() {
    38. CharNum[] res=new CharNum[arr.length*3/2];
    39. for(int i=0;i
    40. res[i]=arr[i];
    41. this.arr=res;
    42. }
    43. private int indexOf(char ch) {
    44. int pos=-1;
    45. for(int i=0;i
    46. CharNum cn=arr[i];
    47. if(cn.getCh()==ch) {
    48. pos=i;
    49. break;
    50. }
    51. }
    52. return pos;
    53. }
    54. }

    CharNum类

    1. package com.zjh1;
    2. public class CharNum {
    3. private char ch;
    4. private int num;
    5. public CharNum(char ch) {
    6. this.ch=ch;
    7. this.num=1;
    8. }
    9. @Override
    10. public String toString() {
    11. return ch+"("+num+")";
    12. }
    13. public char getCh() {
    14. return ch;
    15. }
    16. public void addNum() {
    17. this.num++;
    18. }
    19. public boolean big(CharNum charNum) {
    20. boolean res=false;
    21. if(this.num>charNum.num)
    22. res=true;
    23. else if(this.num==charNum.num) {
    24. res=this.ch>charNum.ch;
    25. }
    26. return res;
    27. }
    28. }

  • 相关阅读:
    SAP FICO银行账户余额查询表开发说明书(包括开发源代码、测试样例及FS)
    因特网中的电子邮件系统(SMTP)
    【JUC】ThreadPoolExecutor构造函数及拒绝策略
    【初识 Docker | 基础篇】 Docker 镜像
    通过S2B2C供应链电商平台网站解决方案,实现大宗商品万亿产业数字化转型
    uniapp开发的微信小程序如何上传至微信小程序平台-完整简单步骤
    SentinelResource注解详解
    git提交错了?别慌,直接删除提交记录
    线搜索方法
    [SpringBoot系列]SpringBoot如何整合SSMP
  • 原文地址:https://blog.csdn.net/zjh0101/article/details/126256256