下列题目是我们基础班几个提前参加社招的同学总结的问题,希望对大家有所帮助。答案是我个人的理解所以一定会有些不全面甚至不对的地方,但是是我自己的答案,所以你们觉得有问题可以提出来我纠正。
1,说一下堆和栈的区别?
栈的内存空间是由系统自动分配的。例如int a;系统就自动在栈里开辟个空间给a使用。
它存取速度比堆要快,而且栈里面的数据可以共享,存放的数据是一些基本类型的数据,特点是存放在栈里的数据被调用完立马消失。
堆的内存空间是由程序员自己申请(new)出来的。
堆内存主要用来存储引用类型,特点是堆里面的数据被调用完毕后不会马上消失,而是在某个不确定的时间后被垃圾回收器清理掉。
2,TreeSet的排序方式有几种,详细描述?
A.自然顺序
让对象所属的类去实现comparable接口,然后重写这个接口的comparto方法进行比较,根据这个比较的结果去进行排序。
B.比较器接口,comparator接口
在创建对象时使用带参构造传一个实现比较器接口的匿名内部类并重写它的方法就可以进行比较了。
3,线程生命周期,是怎么样的?
新建,就绪,运行,堵塞,死亡
新建是创建线程。
就绪是获得执行资格但是没有执行权。
运行不解释。
堵塞,就是当线程运行到符合某个我们定义的条件时,它会停止下来等待唤醒
死亡就是线程结束了。
4,线程死锁是什么,为什么有死锁,怎么解决死锁?
为了解决程序因占用资源,出现资源争抢,而出现的程序进入等待的状态(死锁)。
举例:有A和B两个线程,有CD 两把锁, A和B嵌套CD锁,A线程中有C,D锁,B线程中有D C两把锁,当两个线程运行时,就可能会出现死锁导致
程序停滞的情况。
怎么解决:真正意义上来说,死锁是不能被解决的,死锁是多线程中的一个需要避免的重大的问题,当我们在编写程序时,可以给共享的资源加上另外一
个把锁,控制资源的动态,同时可以设置线程的优先级使线程之间协调合理的利用CPU的时间。
5,类和对象是什么?
类是对某种事物的抽象统称,例如学生,是一个群体,他们有着共同的特征。
对象是类的实例,例如说在学生这个类里面有一个叫做小明的学生,他有着具体的特点,这个时候就把他叫做是这个学生类的对象。
6,集合包括哪些类?
list--|ArrayList
|Vector
|LinkedList
Set -| TreeSet
| HashSet
Map - |HashMap
|Hashtable
|Properties
|TreeMap
7,java有多继承吗?
有,接口可以多继承,因为接口只是一个功能的拓展,他多继承只是让本身具备更多的功能而已,而多继承之所以会出错的原因,比如说一个普
通类继承了多个类的时候,如果这多个类有些相同的方法时,这个类就不知道要去继承哪一个类的方法。而接口就没有这种错误,因为如果接口去继承其
他多个接口的话,哪怕其他接口有一些相同的方法,又因为接口中的方法都是抽象的没有方法体,所以在继承时也只会保留下来一个。
8、你是怎么理解面向对象的
他有3个特点:更符合思考习惯,让程序员从执行者变成指挥者,把复杂的事情简单化。
我是这样理解的,比如说我要得到某种结果或者完成某件事情的时候,我并不需要自己亲自的完成这一系列的过程,只需要找到能够帮助我完成
需求的工具就可以很高效的达成目标了,我觉得这个过程就叫面向对象。
9、接口跟抽象类的区别
成员特点 抽象类中可以有成员变量跟成员常量,有构造方法,除了抽象方法外也可以有非抽象方法。
接口中只有常量,默认修饰符是public static final,接口中只有抽象方法默认修饰符是public abstract。
关系特点 类跟类之间只能单继承跟多重继承。
类跟接口可以单实现、多实现,也可以在继承一个类的时候再实现一个或者多个接口。
接口跟接口可以单继承也可以多继承。
设计理念 继承体现的关系是is a 代表子类就是父类的一个延伸,就是说有地方用到父类的时候完全可以用子类替代。
接口体现的关系是like a 它定义的是整个体系的扩展内容。
10、说说你对异常的理解
异常就是在程序编译或者运行的时候会出现的一些错误,比如说我要往一个指定的文件写入数据,但是这个时候虚拟机又不敢确定在硬盘里有没
有这个文件,所以为了避免发生错误,就需要我们来指定当出现这种情况时虚拟机要做出什么动作。例如抛出异常让虚拟机处理,或者我们用try、catch
处理。
11、list跟set的区别
list是元素有序,并且可重复的。
这个有序说的是存放数据时的顺序是怎么样的那我们将来取出元素调用的时候就是怎么样的,而且多个相同的元素并不会影响储存。
set是元素无序,并且唯一的。
无序说的是我们在取出元素时不是按照我们当初存的顺序出来的,比如说我打印这些元素会发现每次打印,元素的位置都不一样。
但是通过实现comparable或者实现comparator接口也可以给元素排序。
12、基本的io流有哪些
字符流两种:FileWriter、FileReader
字节流两种:FileOutputStream、FileInputStream
高效字符流两种:BufferedWriter、BufferedReader
高效字节流两种:BufferedOutputStream、BufferedInputStream
打印流:printWriter、printReader
转换流:InputStreamReader、OutputStreamWriter
标准输入输出流:System.in、System.out
序列化流:ObjectInputStream、ObjectOutputStream
13、反射是什么?反射获取字节码文件的三种方式?反射的好处?
在运行状态下,通过class文件对象(Class的对象),去使用构造方法,成员变量,成员方法。就是反射。
3种方法:
A.用Object类的getClass方法得到。
B.用任意数据类型的静态class属性可以得到
C.用Class类的静态方法forName(String className)方法得到
好处:只要有一个类或者一个类的对象,就可以得到这个类或对象的所有属性和方法。包括私有的。
14、单例的两种模式
(这个我还没有透彻理解所以只给模式名)
饿汉式
懒汉式
16、内部类
(这个也是了解不深)
成员内部类,他是在class中又直接定义一个class
局部内部类,在方法中定义一个class
匿名内部类,他是没有名字的内部类,我用的最多的地方是在创建对象要带参的时候用到他。他是一次性的用完就不能用了。
17、map的特点,怎样获取键值
把数据按照键跟值的特点存储在集合里,使用的时候可以通过键得到值,键是唯一的,值却可以重复。
有个方法keySet可以得到集合里的键,有了键再遍历就可以获取值。
18、static的作用?
1.被static修饰的成员是被所有对象共享的。
2.随着类的加载而加载。
3.优先于对象存在。
4.可以直接被类名调用。
19、接口和抽象类的区别
1.接口里面都是抽象方法,只有常量;抽象类里面不一定都是抽象方法,可以有成员变量也可以有常量
2.接口是功能的扩展;而抽象类是抽取子类的共性功能,强制子类必须按照抽象类方法重写。
20、ArrayLIst和LinkedList的区别?为什么ArrayList查询快
ArrayList底层是数组结构,特点是查询快增删慢;LinkedList底层是链表结构,特点是增删块查询慢。
因为ArrayList底层是数组结构,通过数组的索引值我们就可以做到快速查询!
22、字节流和字符流的区别
字符流的底层是字节流,最早的时候只有字节流,后来为了能够支持文字所以开发出了字符流,字符流能更高效的处理文本数据;
同时如果要处理的是文本数据的话就可以用字符流,但如果要处理多媒体文件的时候就只能使用字节流。
因为java使用的编码是unicode编码,一个字符等于两个字节。
23、多线程的两种实现方式,它们有什么区别
两种,
1.对象对应的类继承Thread类,这种可以直接调用start方法开启多线程。
2.对象对应的类实现Runnable接口,这种要重新new一个Thread对象把对象作为参数传进去才能调用start方法。
开发一般用第二种,他避免单继承的局限性。实现资源与线程的分离
24、对网络通信协议的理解
(忘了)
25、线程开启调用什么方法
如果对象对应的类继承的是Thread类的话那么用对象调用start方法就可以开启线程;
如果对象对应的类是实现Runnable接口的话,就必须把这个对象转化成Thread类再调用start方法。转换方式就是new一个Thread对象并把实现Runnable接口的类的对象作为参数传进去就可以了。
编程题:
1.复制某盘下所有(包括子目录)“.java”后缀的文件到另一目录下。
2.把D盘下的所有.java文件改成.txt后缀并复制到另一个目录下,或者把绝对路径储存在.txt文档里
3.定义一个学生类,属性有名字,语文分数,数学分数,英语分数。键盘录入5个学生跟分数,按照总分先排序再写进txt文档,要求在文档里要清晰明了查看这些数据。
|