2021-03-21

Java基础-面试题收集整理一

  1. 请用文字描述super()和this()的区别

    1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
    2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
    3)super()和this()均需放在构造方法内第一行。
    4)尽管可以用this调用一个构造器,但却不能调用两个。
    5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
    6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
    7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
    
  2. 什么是java序列化,如何实现java序列化?

    序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(将对象转换成二进制)。
    可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间,序列化是为了解决在对对象流进行读写操作时所引发的问题。
    把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。
    序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,
    implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,
    接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
    
  3. Overload(重载)和Override(重写)的区别,Overloaded的方法是否可以改变返回值的类型?

    1) 方法的重写Override和重载Overload是Java多态性的不同表现。
    2) 重写Override是父类与子类之间多态性的一种表现。
    3) 重载Overload是一个类中多态性的一种表现。
    4) 如果在子类中定义某方法与其父类有相同的名称和参数,那么我们说该方法被重写了。子类的对象使用这个方法时,将调用子类中的定义。对子类而言,父类中的定义如同被“屏蔽”了一样。
    5) 关于重载,如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,也就是参数签名不同,这种情况出现方法的重载。重载的方法是可以改变返回值的类型
    
  4. 请问&和&&的区别

    同:两者都是逻辑与运算符,当运算符两边的表达式的结果都为true时,整个运算结果才为true,只要一方为false,则结果为false
    异:&是非短路运算符,当运算符左边的结果为false时,任然会计算运算符右边表达式的结果,&&则不会再计算右边表达式的结果;
        &也可作为位运算符,&&不可。&&在运用时可以避免null指针异常
    
  5. ArrayList和LinkedList的区别

    ArrayList:底层采用数组实现,遍历速度快,中间插入删除元素速度慢。线程不安全
    LinkedList:采用双向链表实现,空间不连续。每个元素不仅仅存储数据,还要存储上一个和下一个元素的引用。中间插入和删除元素速度快,遍历速度慢
    
  6. char型变量能不能存贮一个中文汉字?为什么?如果能,申明一个char型变量并赋一个中文汉字的值。

    char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储汉字。
    不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
    补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。
    char value = ‘中’;
    
  7. 什么是数据库连接池,描述原理

    概念:数据库连接池是负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。
    原理:传统的持久层操作,由持久层组件访问数据库,每一次数据操作都要建立连接,使用完后需要关闭连接。
         由于建连接和关连接是流操作,频繁建立关连接,会增加额外的消耗,导致响应速度下降。
    	 同时在高并发时,发亮用户同时访问,会导致连接对象无限制的分配,可能会引起服务器内存崩溃。
      	 为数据库连接建立一个缓冲池。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从缓冲池中取出一个,使用完后再放回去。
         通过设定连接池最大连接数来防止系统无休止的数据库连接。
    
  8. 为什么我们需要编码规范?

    1)好的编码bai规范可以尽du可能的减少一个软件的维zhi护成本,并且几乎dao没有任何一个软件,在zhuan其整个生命shu周期中,均由最初的开发人员来维护;
    2)好的编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码;
    3)好的编码规范可以最大限度的提高团队开发的合作效率;
    4)长期的规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维;
    
  9. Collection 和 Collections的区别

    Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。
    Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
    Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。 
    
  10. final, finally, finalize的区别?

    final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
    finally 是异常处理语句结构的一部分,表示总是执行(注意是在return之前执行哦,这个也常常会在代码执行结果中问到)。
    finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用要被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
    

空闲时间收集整理的一些题目,不成体系仅供参考
以后有时间会慢慢更新,继续收集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值