Java后端面试题总结(1)

  • 在Java中,内存泄漏就是存在一些被分配的对象,这些对象存在以下一些特点:1)对象是可达的,即在有向图中,存在通路与其相连;2)对象是无用的,即程序以后不会再使用这些对象。这些对象不会被gc回收,然而他们却占用内存。发生内存泄漏的第一个迹象通常是:在应用程序中出现了OutOfMemoryErroe(OOM)

  • ArrayList和LinkedList的remove和contains方法都依赖equals方法。
  • HashSet:底层hash表,若两个元素的hash值不同,则一定不是同一个元素,若hash值相同,则判断equals。若equals相同,则是同一个对象,若equals不同,则不是同一个对象(hashset的contains和remove依赖于equals方法)。
  • TreeSet:集合的特点是可以对其中的元素进行排序,换句话说,一种情况是放进treeset中的元素必须具有比较性,集合的底层结构是二叉树,保证元素唯一性的方法是compareTo方法还回0。另一种情况是元素没有比较性,但是集合有比较性,定义一个类,实现conparator接口,实现一个比较器。



  • IOC控制反转:容器控制程序对象之间的关系,而不是传统实现中,有程序代码之间控制,又名依赖注入。All类的创建,销毁都是由Spring来控制,也就是是控制对象生命周期的不是引入他的对象,而是Spring。对于某个对象而言,以前是他控制其他对象,现在是All对象都被spring控制,这就叫控制反转。
  • 依赖注入的思想:通过反射机制实现的。在实例化一个对象时,它通过反射调用类中的set方法将事先保存在hashmap中的类属性注入到类中。
  • spring实现aop:JDK动态代理,cglib动态代理。
  • JDK动态代理:其代理对象必须是某一个接口的实现,他是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。核心类有:InnovactionHandler,Proxy。
  • Cgib动态代理:实现原理类似于JKD动态代理,只是他在运行期间生产的代理对象是针对目标类扩展的子类。MethodInterceptor。

  • final定义的常量,一旦初始化,不能被修改,对基本类型来说是其值不可变,而对引用来说是其引用不可变。其初始化只能在两个地方 1、其定义处 2、构造函数中,二者只能选其一,不能在定义时给了值,又在构造函数中赋值。
  • 不管有无异常发生,finally总会执行,若catch中有return语句,也执行,在return语句之前执行。
  • 一个类不能既被声明为abstract,也被声明为final
  • finalize方法定义在object中


  • Object类的方法:
  • 构造函数 ,
  • hashCode和equale函数用来判断对象是否相同,
  • wait(),wait(long),wait(long,int),notify(),notifyAll() 
    • 这几个函数体现的是Java的多线程机制
    • 在使用的时候要求在synchronize语句中使用
    • wait()用于让当前线程失去操作权限,当前线程进入等待序列
    • notify()用于随机通知一个持有对象的锁的线程获取操作权限
    • notifyAll()用于通知所有持有对象的锁的线程获取操作权限
    • wait(long) 和wait(long,int)用于设定下一次获取锁的距离当前释放锁的时间间隔

  • toString()和getClass, 
  • clone() :clone()函数的用途是用来另存一个当前存在的对象。
  • finalize()用于在垃圾回收(点击)


  • Error和exception的区别?
  • Error类一般指与虚拟机相关的问题,比如系统崩溃,虚拟机错误,内存空间不足,对于这种错误导致的应用程序中断,仅靠程序本身无法恢复和预防,遇到这样的错误,建议让程序终止。
  • Exception表示程序可以处理的异常,遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。


  • https其实是由两部分组成:http+ssl/tls,也就是在http上又加了一层处理加密信息的模块,服务端和客户端的信息传输都会通过tls加密,传输的数据都是加密后的数据。加密过程:
  • 1)客户端发起https请求(就是用户在浏览器里面输入一个https网址,然后连接到server的443端口)
  • 2)服务端的配置(采用https协议的服务器必须要有一塔数字证书,可以自己制作,也可以向组织申请,这套证书就是一对公钥和私钥)。
  • 3)传输证书(这个证书就是公钥,只是包含了很多信息)
  • 4)客户端解析证书(由客户端tls完成,首先验证公钥是否有效,若发现异常,则弹出一个警示框,提示证书存在的问题,若无问题,则生成一个随机值,然后用证书对随机值进行加密)
  • 5)传输加密信息(这里传输的是加密后的随机值,目的是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来加密了)
  • 6)服务端解密信息(服务端用私钥解密后得到了客户端传来的随机值,then把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混在一起,这样除非知道私密,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全)
  • 7)传输加密的信息
  • 8)客户端解密信息,用随机数来解。







猜你喜欢

转载自blog.csdn.net/oqkdws/article/details/80662815