1. String 和 StringBuilder、StringBuffer 的区别?
Java中定义了string和stringbuffer两个类封装字符串,提供了一系列操作字符串的方法。
string是final类型所以使用string定义字符串是一个常量,一旦创建了string它的内容和长度是不可变的,如果想要修改字符串,需要创建新的字符串。stringbuffer类(字符串缓冲区)它的内容和长度都是变化的,stringbuffer相当于字符容器,在添加或删除操作不会产生的新的buffer对象。
string类可以重写object类的equals方法,而stringbuffer类没有重写object类的方法。
string类对象用操作符 + 连接,stringbuffer类没有重写equals方法。
stringbuild也可以操作字符串,stringbuffer是线程安全的,stringbuild是没有实现线程安全功能。通常创建一个内容可变的字符串对象优先考虑stringbuild类。stringbuild 也是提供了插入(insert),删(delete),添加(append),替换(replace)。
2. 方法的重载,方法的递归?方法的重写?
Java中允许在一个程序中定义多个名称相同,但是参数的类型或个数不同的方法就是方法的重载。
方法的重载与返回值无关需要满足两个条件:1. 方法名相同 2.参数个数或参数类型不同。
构造方法的重载在一个类中可以定义一个多个构造方法,只需要每个方法的参数类型或参数个数不同。创建对象时,通过调用不同的构造方法为不同属性进行赋值。
子类继承父类方法,子类需要对父类方法进行修改,即对父类的方法进行重写。子类重写的方法具有相同的方法名、参数列表以及返回值类型。子类在重写父类方法时不能使用比父类被重写的的方法更严格的访问权限。比如父类的方法用public,那么子类重写父类方法不能是private
3. 字节流的缓冲区?
字节流可以一次性读取多个字节的数据,将这些数据先保存在字节数组中,然后将数组中的数据一次性的写入到新文件中,使用缓冲区读写文件可以提高程序的传输效率。程序的缓冲区就是一块内存,该内存主要用于存放暂时输入输出的数据,由于使用缓冲区减少了对文件的操作次数,提高读写数据效率。
字节缓冲流:bufferinputstream和 bufferoutputstream,创建两个缓冲流对象,这两个流内部定义了一个大小8192的字节数组,当调用read()和write() 读写数据,首先将读写数据存入到定义好的字节数组将字节数组的数据一次性读写到文件中。
字符缓冲流:提供了两种缓冲区的缓冲流bufferreader和bufferwriter 分别进行字符输入流的操作和字符输出流操作。buffereader的readline方法,该方法用于一次读取一行文本。
4.inputstreamreader 和outputstreamwriter 实现字节流转换字符流。
Java改进的用于处理输入输出的新功能NIO。NIO采用的是内存映射文件来处理输入输出,将文件或文件的一段区域映射到内存中。在NIO中使用通道(channel)和缓冲区(buffer)。数据总是从通道读入缓冲区或从缓冲区写入通道。buffer类似于一个数组它可以保存多个类型数据。
capacity(容量):缓冲的容量表示该buffer的最大数据容量
limit(界限):表示buffer容器不可读取的区域的第一个索引
position(位置):用于指定下一个可以被读写的缓冲区位置索引。
5.数据结构和算法部分
从时间复杂度的平均情况来看,直接插入排序、折半插入排序、冒泡排序和简单选择排序的速度较慢,快速排序和堆排序的速度较快。从实现角度来看,速度较慢的算法是简单的排序算法。
当待排序的记录个数较小时,n^2 和nlog2n的差别不大,可选用简单排序算法;当关键字基本有序,可选用直接插入排序或冒泡排序,排序速度很快。当n较大时从平均时间性能而言,快速排序最佳。如果关键字分布随机,稳定性不做要求时,采用快速排序,当关键字基本有序时,稳定性不做要求时,可采用堆排序
当关键字基本有序时,内存允许且要求排序稳定是采用归并排序。
6.查找分为3种:线性表查找、树表查找、折半查找和分块查找。
线性表查找:分为顺序查找、折半查找和分块查找
顺序查找时间复杂度O(n) 对表的结构无任何要求,效率低 不做经常的插入和删除
折半查找时间复杂度O(log2n)适用于有序的顺序表
分块查找适用于块间有序、块内无序的顺序表
树表查找:二叉排序树、平衡二叉树、B-树 、 B+树
关注关注,主页更多的java课程学习路线,笔记,面试等架构资料