1.创建对象的几种方式?
1、使用 new 关键字
2、使用 Class 类的 newInstance 方法:这个 newInstance 方法调用无参的构造器创建对象
3、使用 Constructor 类的 newInstance 方法:这个 newInstance 方法调用有参数的和私有的构造函数
(Class 的 newInstance 方法内部调用 Constructor 的 newInstance 方法。这也是众多框架 Spring、Hibernate、Struts 等使用后者的原因)
4、使用 Clone 的方法:调用一个对象的 clone 方法,JVM 就会创建一个新的对象,将前面的对象的内容全部拷贝进去,
用 clone 方法创建对象并不会调用任何构造函数。需先实现 Cloneable 接口并实现其定义的 clone 方法。这也是原型模式的应用
5、使用反序列化:当序列化和反序列化一个对象,JVM 会创建一个单独的对象。
在反序列化时,JVM 创建对象并不会调用任何构造函数。需实现 Serializable 接口
2.Servlet,Listener,Filter 的生命周期?分别在什么时候创建、使用和销毁?
启动的顺序:context-param -> Listener -> Filter -> Servlet
生命周期:
Listener:从程序启动到程序停止运行
ServletRequestListener:用于监控 servlet 上下文 request
每次访问一个 Request 资源前,都会执行 requestInitialized() 方法,
访问完毕,都会执行 requestDestroyed() 方法
HttpSessionListener:用来监控 session 的创建销毁
每次调用 request.getSession(),都会执行 sessionCreated() 方法,
执行 session.invalidate() 方法,都会执行 sessionDestroyed() 方法
ServletRequestAttributeListener:用于监控 request 中的 attribute 的操作
每次调用 request.setAttribute(),都会执行 attributeAdded() 方法,
如果 set 的 key 在 request 里面存在,就会执行 attributeReplacerd() 方法,
调用 request.removeAttribute() 方法,都会执行 attributeRemoved() 方法
Filter:程序启动调用 Filter 的 init() 方法(只调用一次),程序停止调用 Filter 的 destroy() 方法(只调用一次)
doFilter() 方法每次的访问请求如果符合拦截条件都会调用
(程序第一次运行,会在 Servlet 调用 init() 方法以后调用,不管第几次,都在调用 doGet(),doPost() 方法之前)
Servlet:程序第一次访问,会调用 Servlet 的 init() 方法初始化(只执行一次)
每次程序执行都会根据请求调用 doGet() 或者 doPost() 方法,程序停止调用 destory() 方法
1、在 Tomcat(Servlet容器)启动时,Listener 和 ServletContext 最先初始化
2、Filter 在 Tomcat(Servlet容器)启动时初始化
3、如果某个 Servle t配置了 <load-on-startup >1 </load-on-startup >,该 Servlet 也是在 Tomcat(Servlet容器)启动时初始化
4、每次请求, Request 都会被初始化,响应请求后,请求被销毁
5、Filter 在请求执行前后,都能做一些处理
6、如果 Servlet 没有配置<load-on-startup >1 </load-on-startup >,该 Servlet 不会在 Tomcat 启动时初始化,而是在请求到来时初始化
7、Servlet 初始化后,将不会随着请求的结束而注销
8、关闭 Tomcat 时,Servlet、Filter、Listener 依次被注销
3.HashMap 和 HashTable 的区别?
HashMap
|
线程不安全
|
允许有 null 的键和值
|
效率高
|
方法不是 synchronized 的
|
有 containsValue 和 containsKey 方法
|
Java1.2 引进的 Map interface 的一个实现
|
HashTable
|
线程安全
|
不允许有 null 的键和值
|
效率低
|
方法是 synchronized 的
|
有 contains 方法方法
|
继承于 Dictionary 类
|
4.常用优化 SQL 语句执行效率的方法?
1、尽量选择较小的列
2、将 where 中用的比较频繁的字段建立索引
3、select 子句中避免使用‘*’
4、避免在索引列上使用计算、not in 和 <> 等操作
5、当只需要一行数据的时候使用 limit 1
6、保证单表数据不超过200W,适时分割表
7、不要在 where 中包含子查询,在过滤条件中,可以过滤掉最大数量记录的条件必须放在 where 子句的末尾,在 where 中尽量不要使用 or
8、用 exists 替代 in,用 not exists 替代 not in,用 in 来替代 or
9、避免在索引列上使用 is null 和 is not null,避免改变索引列的类型
10、避免带有 like 参数的通配符
针对查询较慢的语句,可以使用 explain 来分析该语句具体的执行情况
5.linux常用命令
ls 显示文件或目录
-l 列出文件详细信息l(list)
-a 列出当前目录下所有文件及目录,包括隐藏的a(all)
mkdir 创建目录
-p 创建目录,若无父目录,则创建p(parent)
cd 切换目录
touch 创建空文件
echo 创建带有内容的文件。
cat 查看文件内容
cp 拷贝
mv 移动或重命名
rm 删除文件
-r 递归删除,可删除子目录及文件
-f 强制删除
find 在文件系统中搜索某文件
wc 统计文本中行数、字数、字符数
grep 在文本文件中查找某个字符串
rmdir 删除空目录
tree 树形结构显示目录,需要安装tree包
pwd 显示当前目录
ln 创建链接文件
more、less 分页显示文本文件内容
head、tail 显示文件头、尾内容
ctrl+alt+F1 命令行全屏模式
规则引擎的设计思路?
使用到 jQuery 的哪些模块?具体说明。
集群部署环境下怎样保持数据的一致性?
服务器经常 down,怎样排查原因?