1,一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

  • 可以有多个类,但只能有一个 public 的类,并且 public 的类名必须与文件名相一致。

2,请说出作用域 public, private, protected,以及不写时的区别

JAVA经典面试题

3, 接口是否可继承接口?抽象类是否可实现接口?抽象类是否可继承具体类?抽象类中是否可以有静态的 main 方法?

  • 都可以

4, abstract class 和 interface 有什么区别?

  • 1.抽象类可以有构造方法,接口中不能有构造方法。
  • 2.抽象类中可以有普通成员变量,接口中没有普通成员变量
  • 3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的
  • 4.抽象类中的抽象方法的访问类型不唯一,但接口中的抽象方法只能是默认的 public 类型
  • 5.抽象类中可以包含静态方法,接口中不能包含静态方法
  • 6.一个类可以实现多个接口,但只能继承一个抽象类。

5.String s = “Hello”;s = s + " world!";这两行代码执行后,原始的 String对象中的内容到底变了没有?

  • 没有
  • String 被设计成不可变,也不可继承, 它的所有对象都是不可变对象。在本案例中,s指向变化并不会引起指向对象的改变,也就是说,之前指向的对象还在内存中,只是 s 这个引用变量不再指向它了。

6.String s = new String(“TOM”);创建了几个 String Object?二者之间有什么区别?

  • 一个或两个
  • ”TOM”对应一个对象,这个对象放在字符串常量缓冲区,常量”TOM”不管出现多少遍,都是缓冲区中的那一个。
  • New String 每写一遍,就创建一个新的对象
  • 如果以前就用过,就不会创建,直接从缓冲区拿。

7,数组有没有 length()这个方法? String 有没有 length()这个方法?

  • 数组没有 length()这个方法,有 length 的属性。 String 有有 length()这个方法。

8,heap 和 stack 有什么区别。

  • java 的内存分为两类,一类是栈内存,一类是堆内存。
  • 栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放。
  • 堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用 new
    创建的对象都放在堆里,所以,它不会随方法的结束而消失。
  • 方法中的局部变量使用 final修饰后,放在堆中,而不是栈中。

9,说一说 Servlet 的生命周期

  • Servlet 的生命周期包括加载和实例化、初始化、处理请求以及服务结束。
  • Servlet 生命周期 三大方法: init,service 和 destroy
  • Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service 方法, service
    方法自动派遣运行与请求对应的 doXXX 方法(doGet, doPost)等,当服务器决定将实例
    销毁的时候调用其 destroy 方法。

10,Request 对象的常用方法

  • setAttribute(String name,Object):设置名字为 name 的 request 的参数值
  • getAttribute(String name):返回由 name 指定的属性值
  • getAttributeNames():返回 request 对象所有属性的名字集合,结果是一个枚举的实例
  • getCookies():返回客户端的所有 Cookie 对象,结果是一个 Cookie 数组
  • getCharacterEncoding():返回请求中的字符编码方式
  • getContentLength():返回请求的 Body 的长度
  • getHeader(String name):获得 HTTP 协议定义的文件头信息
  • getHeaders(String name):返回指定名字的 request Header 的所有值,结果是一个枚举的
    实例
  • getHeaderNames():返回所以 request Header 的名字,结果是一个枚举的实例
  • getInputStream():返回请求的输入流,用于获得请求中的数据
  • getMethod():获得客户端向服务器端传送数据的方法
  • getParameter(String name):获得客户端传送给服务器端的有 name 指定的参数值
  • getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的
    实例
  • getParametervalues(String name):获得有 name 指定的参数的所有值
  • getRequestURI():获取发出请求字符串的客户端地址
  • getRemoteAddr():获取客户端的 IP 地址
  • getRemoteHost():获取客户端的名字
  • getSession([Boolean create]):返回和请求相关 Session
  • getServerName():获取服务器的名字
  • getServletPath():获取客户端所请求的脚本文件的路径
  • getServerPort():获取服务器的端口号
  • removeAttribute(String name):删除请求中的一个属性

11,jsp 有哪些内置对象?作用分别是什么?

JAVA经典面试题

12,Java 中的23种设计模式

  • Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式)
  • Prototype(原始模型模式), Singleton(单例模式), Facade(门面模式)
  • Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式)
  • Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式)
  • Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式)
  • Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式)
  • Observer(观察者模式), State(状态模式), Strategy(策略模式)
  • Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)

相关文章: