面试题

  • JAVA面向对象的特点,封装,继承,多态?

        继承:父与子的关系,子类可以继承父类所以的属性与方法,子类的可以根据实际需要来扩展自己需要的代码复用性,子类父类用extends关联,父类也叫基类,超类,子类可以重写父类的方法,但是参数个数,方法名,返回值必须一样,修饰词必须大于父类,如果方法一样优先执行子类的方法。

       封装:把对象的属性和行为结合整理在一起,并隐藏内部的结构,在java中,对于对象的内部属性一般用private来实现隐藏,并通过set和get方法对外提供访问接口。用有统一对外的访问接口。

        多态:不修改源代码就能实现程序运行时所绑定的具体代码,让程序可以选择多个运行状态,

                   具体实现:接口实现,子类继承父类重写其方法实现,同一个类中进行方法的重载,

                   多态存在必要的三个条件,要有继承,要有重写,要有父类指向子类

  • final,finally,finalize的区别?

        final:用来修饰变量,方法,类,只要是它修饰的地方都是不能改,不能变,不能继承

        finally: 用在try/catch代码块里,不管是否抛出异常都会执行这个代码块,这个说法也不是肯定的,如出现,没有走到                                try/catch 就抛出异常等等   

       finalize:  它在obejct类中实现,也就是说每个对象都有一个finalize()方法,当gc(垃圾回收机制)启动时,就会执行这个方法,                       凡是new出来的对象,gc都能搞定

  • Exception,Error运行时异常与一般异常有和不同?

         Exception和Error都继承throwable类,在java中只有throwable类型的实例才能抛出和捕获异常,这是异常处理机制的基本            组成类型,

        Exception:在正常运行下,可以预料,并且可以捕获异常的。分为可以检查和不可以检查,可以检查就是(源代码下)在                              编译期就进行 , 捕获处理。不可检查就是运行时,捕获的异常,如:NullPointerException、                                                        ArrayIndexOutOfBoundsException(如空指针,数组越界)。

        Error:在正常情况下,不大可能出现的异常,绝大部分Error会导致程序处于非正常,不可恢复的状态,如:                                            OutOfMemoryError(内存溢出)

  • String、StringBuilder、StringBuffer?

        String是不可改变其值,StringBuilder和StringBuffer可以改变其值

        String是可以不用赋值,但是后两位必须赋值,StringBuilder是线程不安全,但是速度快,StringBuffer反之

  • 重载和重写的区别?

        重写:子类继承父类的属性与行为,但是子类不想用父类的本身方法,所以需要方法名,参数个数,返回值,

                    都不变的情况下,重写方法体,被重写的修饰词小于重写的修饰词

        重载:1.重载Overload是一个类中多态性的一种表现 
                   2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序) 
                   3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准

        答:方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。                   重 载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重                   载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,                 比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏代换原则)。重载对返回类型没有特殊的要                 求,不能根据返回类型进行区分。

  • 抽象类和接口有什么区别

     1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向             实现所有接口方法的类对象。

     2、抽象类要被子类继承,接口要被类实现。

     3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现

     4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

     5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一             个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。

     6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果

     7、抽象类里可以没有抽象方法

     8、如果一个类里有抽象方法,那么这个类只能是抽象类

     9、抽象方法要被实现,所以不能是静态的,也不能是私有的。

    10、接口可继承接口,并可多继承接口,但类只能单根继承。

  • 说说反射的用途及实现

反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。

一、Java反射框架主要提供以下功能:

1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
4.在运行时调用任意一个对象的方法
二、主要用途 :

1、反射最重要的用途就是开发各种通用框架。

三、基本反射功能的实现(反射相关的类一般都在java.lang.relfect包里):

1、获得Class对象

      使用Class类的forName静态方法

      直接获取某一个对象的class

     调用某个对象的getClass()方法

2、判断是否为某个类的实例

     用instanceof关键字来判断是否为某个类的实例

3、创建实例

      使用Class对象的newInstance()方法来创建Class对象对应类的实例。

      先通过Class对象获取指定的Constructor对象,再调用Constructor对象的newInstance()方法来创建实例。

4、获取方法

    getDeclaredMethods()

5、获取构造器信息

     getDeclaredMethods()

     getMethods()

     getMethod()

6、获取类的成员变量(字段)信息

     getFiled: 访问公有的成员变量
     getDeclaredField:所有已声明的成员变量。但不能得到其父类的成员变量
     getFileds和getDeclaredFields用法

7、调用方法

       invoke()

8、利用反射创建数组

    Array.newInstance()

四、注意:

      由于反射会额外消耗一定的系统资源,因此如果不需要动态地创建一个对象,那么就不需要用反射。
另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。

  • 说说自定义注解的场景及实现
  • HTTP请求的GET与POST方式的区别

       get:不安全,因为在路径上传递参数,而且路径也是有限制的,1024字节

       post:安全,用request body 传递参数,没有限制,一般2M

       上面这些只是HTTP规格而已,还有就是的限制都是服务器的限制,而不是本身的

       他俩其实本质上是没有区别的,Http的底层是TCP/IP,所以get和post的底层也是TCP,你要给GET加上request body,给           POST带上url参数,技术上是完全行的通的。 要说不同的话,get请求的时候只是发一个TCP数据包,而post发两个

  • Session与Cookie区别

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中

  • 列出自己常用的JDK包

        1、java.lang 这个是系统的基础类,比如String、Math、Integer、System和Thread, 提供常用功能。

        2、java.sql 这个是数据库操作的类,Connection, Statememt,ResultSet等

        3、java.io 这里面是所有输入输出有关的类,比如文件操作等

        4、java.math

        5、java.text

        6、java.net  这里面是与网络有关的类,比如URL,URLConnection等。

        7、java.util 这个是系统辅助类,特别是集合类Collection,List,Map等。

        8、java.awt

        9、java.applet

        10、java.nio

  • MVC设计思想
  • equals与==的区别​​​​​​​

 1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;

    如果作用于引用类型的变量,则比较的是所指向的对象的地址

  2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量

    如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;

    诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

  • hashCode和equals方法的区别与联系
  • 什么是Java序列化和反序列化,如何实现Java序列化?或者请解释Serializable 接口的作用
  • Object类中常见的方法,为什么wait  notify会放在Object里边?
  • Java的平台无关性如何体现出来的
  • JDK和JRE的区别
  • Java 8有哪些新特性
  • 1.2、Java常见集合
  • List 和 Set 区别
  • Set和hashCode以及equals方法的联系
  • List 和 Map 区别
  • Arraylist 与 LinkedList 区别
  • ArrayList 与 Vector 区别
  • HashMap 和 Hashtable 的区别
  • HashSet 和 HashMap 区别
  • HashMap 和 ConcurrentHashMap 的区别
  • HashMap 的工作原理及代码实现,什么时候用到红黑树
  • 多线程情况下HashMap死循环的问题
  • HashMap出现Hash DOS攻击的问题
  • ConcurrentHashMap 的工作原理及代码实现,如何统计所有的元素个数
  • 手写简单的HashMap
  • 看过那些Java集合类的源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值