下午接了阿里巴巴B2B的电话面试,问了若干个Java基础问题.我感觉我答的不好,因为比较突然.摘要如下:
1.Java 当中所有的对象都是默认继承与Object类,请问该类中常用的方法有哪些?
java.lang.Object类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。
public native int hashCode();//返回该对象的哈希码值
public String toString() //返回该对象的字符串表示。{
return getClass().getName() + ”@” + Integer.toHexString(hashCode());
}public boolean equals(Object obj) //返回其他某个对象是否与此对象“相等”。 注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
String类重写了equals()和hashCode()方法,可以参考protected void finalize() throws Throwable {}
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除。protected native Object clone() throws CloneNotSupportedException;
创建并返回此对象的一个副本.所有要进行”克隆”的对象所属的类必须实现java.lang.Cloneable接口
2.Java 中的反射机制实现原理、常用方法?
在Java运行环境中,对于任意的一个类,能否知道这个类有哪些属性和方法?对于任意一个类,能否调用它的任意一个方法?可以。这种动态的获取类的基本信息以及动态的调用对象方法的功能来自于java语言的反射(Reflection)机制.
java reflection 主要提供如下功能:
1.在运行时,判断任意一个对象所属的类.
2.在运行时,构造任意一个类的对象.
3.在运行时,判断任意一个类所具有的成员变量和方法.
4.在运行时,调用任意一个对象的方法.
在JDK中,由以下类来实现Reflection,这些类位于java.lang.reflect包中:
1.Class类:代表一个类.
2.Filed类:代表类的成员变量(成员变量也称为类的属性.)
3.Method类:代表类的方法。
4.Constructor类:代表了类的构造方法。
5.Array类:提供了动态创建数组,以及访问数组元素的静态方法。
(Reflection API的应用小例子,接下来会写.)
3.Struts1.2 or Struts 2 的实现原理,简单陈述一个请求的处理流程?
Struts 1.2 实现原理如下:
1.web应用启动时加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象中(Action的映射信息存放在ActionMapping对象中.)
2.检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息.
3.如果ActionForm实例不存在,创建一个ActionForm对象,把客户提交的表单信息保存到ActionForm对象中.
4.根据配置信息决定是否需要表单验证,如果需要验证,就调用ActionForm的validate()方法.
5.如果ActionForm的validate()方法返回null 或者一个不包含ActionMessage的ActionErrors对象,表示表单验证成功.
6.Action的execute()方法返回一个ActionForward对象,ActionServlet再把客户端请求转发给ActionFoward对象指向的jsp组件.
7.ActionForward对象指向jsp组件生成动态页面,返回客户端浏览器.
4.Struts1.x 和 Struts2.x 版本那一个是线程安全的?线程安全的定义是?
Struts 1.2 版本是线程安全的.原因如下:
1.Struts 1.2 的Action类是单例模式,因为只有一个实例来控制所有的请求.Action资源必须是线程安全或者同步的.
2.Struts 2.0的Action对象为每一次请求都生成新的对象,所以没有线程安全的问题.(据资料,Servlet容器产生对于每一个请求产生多个对象并不影响垃圾回收.)
Java线程安全(通俗描述):在线程中使用[共享资源]时,能够保证[共享资源]在任何时候都是原子的、一致的,这样的线程就是安全线程;反之则为非安全线程.
5.如果你来设置Session(前端的回话Session而非Hibernate中的Session),你将如何实现它?
6.Hibernate的优点有哪些?
7.Javascript Dom结构,常见的使用方法举例?
暂时将问题列出来,晚上回家后,再一一解答.其实回顾一下这些问题,都是最基本且应该掌握的问题, 可往往在项目当中为了实现而实现,而很少去考虑底层是如何实现,为什么要这么做? 不仅让我想起来前些日子在twitter上说的一句话:”架构师的道路其实也是”what”,”how”,”why”的过程.” 我还有很长的路要走.
Ps.在我写这篇日志之前,阿里的Hr来电话通知我下周一去滨江园区参加第二轮的面试.而此时我脑海当中不知道是喜还是忧,我想我的坦诚和虚心还是得到阿里技术面试官的认可了.但是我自己明白我基础是一个很薄弱的环节,这需要我尽快和努力弥补。
生活还在继续,未来捉摸不透…