首页 > 编程语言 > 详细

java面试题目

时间:2019-12-16 12:31:32      阅读:67      评论:0      收藏:0      [点我收藏+]
  1. String s = new String("xyz"); 创建了几个StringObject?是否可以继承String类?
    String s=new String("xyz")究竟对象个数分为两种情况:
    1.如果String常理池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象new String("xyz");
    2.如果String常理池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String("xyz")。
    
    不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。
    

      

  2. StringBuffer 和 StringBuilder的区别
    当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
    和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
    StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
    由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。
    小结:(1)如果要操作少量的数据用 String;
         (2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;
         (3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。
    

      

  3. error 和exception有什么区别
    首先Exception和Error都是继承于Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。
    
    Exception和Error体现了JAVA这门语言对于异常处理的两种方式。
    
    Exception是java程序运行中可预料的异常情况,咱们可以获取到这种异常,并且对这种异常进行业务外的处理。
    
    Error是java程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况。所以这种异常不可能抓取到,比如OutOfMemoryError、NoClassDefFoundError等。
    
    其中的Exception又分为检查性异常和非检查性异常。两个根本的区别在于,检查性异常 必须在编写代码时,使用try catch捕获(比如:IOException异常)。非检查性异常 在代码编写使,可以忽略捕获操作(比如:ArrayIndexOutOfBoundsException),这种异常是在代码编写或者使用过程中通过规范可以避免发生的。
    

      

  4. 什么是java序列化,如何实现java序列化?或者解释Serializable接口的作用
    .序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(将对象转换成二进制)。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间,序列化是为了解决在对对象流进行读写操作时所引发的问题。把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。
    .序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。
    .对象的序列化主要有两种用途:
     1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;
     2) 在网络上传送对象的字节序列。
           在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对象,当有10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
           当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
    

     

  5. 描述一下JVM加载class文件的原理机制,反射机制是如何拿到对应的class对象?

    JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:
    
    1) 装载:查找并加载类的二进制数据;
    2)链接:
      验证:确保被加载类的正确性;
      准备:为类的静态变量分配内存,并将其初始化为默认值;
      解析:把类中的符号引用转换为直接引用;
    3)初始化:为类的静态变量赋予正确的初始值;
              那为什么我要有验证这一步骤呢?首先如果由编译器生成的class文件,它肯定是符合JVM字节码格式的,但是万一有高手自己写一个class文件,让JVM加载并运行,用于恶意用途,就不妙了,因此这个class文件要先过验证这一关,不符合的话不会让它继续执行的,也是为了安全考虑吧。
            准备阶段和初始化阶段看似有点矛盾,其实是不矛盾的,如果类中有语句:private static int a = 10,它的执行过程是这样的,首先字节码文件被加载到内存后,先进行链接的验证这一步骤,验证通过后准备阶段,给a分配内存,因为变量a是static的,所以此时a等于int类型的默认初始值0,即a=0,然后到解析,到初始化这一步骤时,才把a的真正的值10赋给a,此时a=10。
    
    反射最大的好处是解耦。
    获取Class对象的三种方式:
      1):通过对象的getClass方法进行获取。这种方式需要具体的类和该类的对象,以及调用getClass方法。
      2):任何数据类型(包括基本数据类型)都具备着一个静态的属性class,通过它可直接获取到该类型对应的Class对象。这种方式要使用具体的类,然后调用类中的静态属性class完成,无需调用方法,性能更好。
      3):通过Class.forName()方法获取。这种方式仅需使用类名,就可以获取该类的Class对象,更有利于扩展。
    

      

  6. Servlet API 中 forward() 与 redirect()的区别?

    1、 forward是服务器端的转向也就是请求转发而redirect是客户端的跳转也就是重定向
    2、 使用forward浏览器的地址不会发生改变。而redirect会发生改变。
    3、 forward是一次请求中完成。而redirect是重新发起请求。
    4、 forward是在服务器端完成,而不用客户端重新发起请求,效率较高。
    

      

  7. request.getAttribute()  和 request.getParameter() 有何区别?

    getParameter 是用来接受用post和get方法传递过来的参数的.
    getAttribute 必须先setAttribute.
    
    (1)request.getParameter() 取得是通过容器的实现来取得通过类似post,get等方式传入的数据,request.setAttribute()和getAttribute()只是在web容器内部流转,仅仅是请求处理阶段。
    
    (2)request.getParameter() 方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据。request.getParameter()方法返回String类型的数据。
    
    request.setAttribute() 和 getAttribute() 方法传递的数据只会存在于Web容器内部
    
    还有一点就是,HttpServletRequest 类有 setAttribute() 方法,而没有setParameter() 方法。
    

      

  8. 什么是Cookie? Session和cookie有什么区别?
    首先一种场景, 在一个网站上面, 我发起一次请求,那服务器怎么知道我是谁?是谁发起的这次请求呢,  HTTP协议是无状态的协议, 浏览器的每一次请求,服务器都当做一次新请求, 但是在实际应用中我们需要知道这个请求来自于谁,需要查找哪些信息返回给访问者,
    
    这个时候就引入了COOKIE机制, COOKIE机制是什么呢? 
    Cookie实际上是一小段的文本信息。其实就是服务器给客户端返回数据的时候,中间加了一个标识, 然后客户端再次请求数据的时候,数据中带上这个标识, 那么服务器接收到请求消息时就知道这个请求来自于谁了(相当于服务器接收到请求时,如果没有带识别码,生成一个识别码给客户端, 如果有识别码,就把这个识别码需要的对应内容返回给客户端)
    
    
    cookie保存在客户端,比较不安全;session保存在服务器端,比较安全。
    
    cookie目的可以跟踪会话,也可以保存用户喜好或者保存用户名密码,session用来跟踪会话。
    

      

  9. tomcat 容器是如何创建servlet 类实例? 用到了什么原理?
  10. 数据库连接池的原理,为什么要使用连接池?
  11. 使用spring框架的好处是什么?
  12. springMVC的开发模式,执行流程
  13. 简单的说一下MyBatis的一级缓存和二级缓存
  14. redis和数据库的同步时如何实现的?

java面试题目

原文:https://www.cnblogs.com/ityangshuai/p/12048414.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!