首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

十/19/2011 - 一些面试题

2013-11-08 
10/19/2011 - 一些面试题String / StringBuffer / StringBuilder1. String 是不可变的, 实例化之后是final

10/19/2011 - 一些面试题
String / StringBuffer / StringBuilder
1. String 是不可变的, 实例化之后是final类型的,可以尝试 String 的 replace 方法, String 本身的值是不会变的, 而是返回一个新的 String 的 instance.
2. StringBuffer 则是可变的。StringBuffer 解决了 String 的拼接需要重新分配内存的问题, 而且StringBuffer 是线程安全的:

public StringBuilder append(Object obj) {return append(String.valueOf(obj));    }

一般情况下,拼接 论效率, StringBuilder > StringBuffer > String


Vector / ArrayList / LinkedList
1. Vector 基于数组的实现, 其是线程安全的,所以效率上比 ArrayList 稍差。
2. ArrayList 也是基于数组的实现。
3. LinkedList 是基于双向链表的实现。
1 和 2  VS 3, 数组的查询方便, 插入需要进行移位; 而链表 方便插入, 查询稍慢。


Hashtable / HashMap / TreeMap extends Map (Key 都要重写 equals 和 hashCode 方法)
1. Hashtable 的 key/value 不能是 null, 并且 Hashtable 是线程安全的
2. HashMap 的 key 可以是 null, 其不是线程安全的
3. TreeMap key/value 不能为 null, 非线程安全, 存储是有序的, 即按照put的先后顺序。 而Hashtable和HashMap则是无序的。
4. ConcurrentHashMap, 线程安全, key/value 不能为null.

Session / Cookie
1. Cookie 是为了解决 HTTP 传输无状态而产生的。 Cookie 在客户端保留了用会的session信息, 如 SEEEIONID
2. Session则是客户保留在Server端的信息。 但客户向Server发出请求的时候,Server会检测是否包含Session相关信息。如不包含,则需要重新建立连接。

Servlet 生命周期
1. 容器实例化Servlet, 调用init()方法
2. 当请求到来的时候, 调用service()方法, service方法自动转到doGet()/doPost()方法。
3. 容器销毁Servlet, 调用destroy()方法。

HTTP 报文格式
1. 请求行 (请求方法 + URL + 版本)
2. Header (Params key:value, 如:host)
3. 空行 (代表 header 结束)
4. 数据 (get 没有, post 的时候用来放Post的表单数据)

Statement / PreparedStatement
1. Statement 只能执行一次
2. PreparedStatement 采取预编译, 之后可以多次执行(set 1, 2变量的值就可以了)

forward / redirect
1. Forward 是 服务器内部重定向 (Forward 的target不能是相对路径)
2. Redirect 则是 Server 先把 Response 返回 Client 端, 有 Client 断再进行一次请求。

hibernate / iBasis
1. hibernate 数据库无关性好, ORMapping强大,代码少
2. iBatis 门槛低, SQLMAP配置为主, 数据自动绑定。

rownumber / rowid
1. rownumber 是表结构上的物理意义上的id, 这个是递增的,先有1后有2。
2. rowid 则是表数据定义上的一个id, 可以是UUID或其他
所以在进行分页查询的时候,应该用rownumber来制定分页的区间。

SQL 优化
1. 避免使用 select *
2. Where 字句中过滤最多数据的条件应该写在最尾, 因为解析器是从右到左处理的。
3. 使用alias代替表名,解析可以省时
4. 使用Exists/Not Exist 代替 In/Not In. 比如: Not In会对子表进行一个全表的遍历,所以不要用NOT IN。
5. 还有很多不懂的。。。(索引。。。)

Struts
1. 发送 HttpServletRequest 请求
2. Filter(ApplictionContextCleanUp, Other Filter, FilterDispatcher)
3. FilterDispatcher 询问 ActionMapper 是否有匹配的 Action
4. 若有则将 Action 交给 ActionProxy, ActionProxy 先通过 ConfigurationManager 从配置文件struts.xml中找到对应的 Actin, 然后创建一个 ActionInvocation 实例来动态执行 Action (也就是动态代理 AOP)
5. 在 Action 被执行之前, 配置的所有 Invocation 都会被加载并执行
6. Action 执行完毕之后, 通过 ConfigurationManager 到struts.xml中找出执行该Action后返回结果并返回。

热点排行