1. 经常使用命令javascript
netstat –a 查看全部的监听端口css
netstat –an |find /i “listening/established”>c:\result.txt将监听/通讯端口结果保存到c盘html
-a 显示全部链接和监听端口java
-n 以数字形式显示地址和端口号。 此选项通常与 -a选项组合使用web
-o 显示与每一个链接相关的所属进程 ID。spring
开始 运行netstatsql
listening表示处于侦听状态 便是开放chrome
established表示创建链接数据库
time-wait表示结束链接,曾经有过访问,可是已经结束了apache
关闭某个端口
关闭某个端口方法先netstat –ao 查看端口所在的pid,再tasklist查看pid所对应的的进程,再经过任务管理器关闭该进程
tasklist查看pid所对应的的进程
mstsc/-console 打开远程桌面
ipconfig 查看ip
2. background:url(../images/my_19.jpg) 这里的两个点是什么路径?
在相对路径中./表示本文件所在的文件夹,../表示上一级../../表示上上一级的文件夹
3. document.createElement()的用法
document.createElement()是在对象中建立一个对象,要与appendChild() 或 insertBefore()方法联合使用。其中,appendChild() 方法在节点的子节点列表末添加新的子节点。insertBefore() 方法在节点的子节点列表任意位置插入新的节点
4. chrome开发者工具
5. wordPress
WordPress 是一种使用 PHP 语言开发的 Blog 引擎,用户能够在支持 PHP 和 MySQL 数据库的服务器上架设本身的 Blog。也能够认为 WordPress 就是一个我的信息发布平台。
6. 原子性
数据库事务:一个原子事务要么完整执行,要么干脆不执行。 这意味着,工做单元中的每项任务都必须正确执行。若是有任一任务执行失败,则整个工做单元或事务就会被终止。即此前对数据所做的任何修改都将被撤销。若是全部任务都被成功执行,事务就会被提交,即对数据所做的修改将会是永久性的。
7. 裸机备份和热备份区别
exp/imp是“拍照留念”
archivelog mode的物理backup是“录像记录”。
拍照只能是单点的,而“录像记录”容许你看到录像期间的任何一点
8. 页面打开和关闭时js加载的函数
< body onload = " SetupLeak() " onunload = " BreakLeak() " >
9. js中给dom对象添加属性
X<div id="test" class="hello"></div>
var test = document.getElementById("test");
test.adang = "adang";
alert(test.adang);
咱们会发现,已经给这个id为test的DOM元素添加了一个叫作adang的属性了,而后在js中,能够调用这个属性。我在写js的时候常常用到这种方法,能够很方便地对某个dom对象添加一些特殊的数据,感受DOM对象就像一个很好用的容器,能够放一堆数据进去。
script type="text/javascript">
window.onload=function(){
var test = document.getElementById("test");
alert(test.adang);
}
</script>
<body>
<div id="test" adang="adang"></div>
</body>
</html>
=====================================================
此次把扩展的属性写到了html标签上。IE下正常输出adang,FF下输出的是undefined。
可是很奇怪的,若是使用DOM提供的方法getAttribute(""),不管是在IE下,仍是FF下,均可以获得咱们写在标签中的自定义属性。
因此,为了兼容,咱们要使用getAttribute("")来获取自定义的标签属性的值。
10. sql中的执行顺序
(1).FROM 子句, 组装来自不一样数据源的数据
如left join on 先将两个表按照条件组成一个表,而后再进行where条件筛选
(2).WHERE 子句, 基于指定的条件对记录进行筛选
(3).GROUP BY 子句, 将数据划分为多个分组
(4).使用聚合函数进行计算
(5).使用 HAVING 子句筛选分组
(6).计算全部的表达式
(7).使用 ORDER BY 对结果集进行排序
11. 显示游标和隐式的区别
隐式游标:查询单行记录。
Oracle自动在后台使用的游标,用户不参与任何操做!因此对客户是隐藏的不显示的!
显示游标:查询多行记录。
在PL/SQL如何返回进行多行记录并族行进行读取,
在F:\数据库\基础知识\oracle显式和隐式游标.htm里面介绍了何时使用游标能够不打开关闭的状况
12. spring源代码分析
BeanFactory:Bean实例被IOC容器进行管理,有它本身的生命周期—>和普通java对象的区别
Typically used to validate method arguments rather than configuration properties 一般用来验证方法参数
详细用法可可参见F:\java学习\spring\Assert.docx
容器初始化 ServletContext
每一个登陆用户对应一个HtppSession
每次请求对应一个HttpRequest,HttpResponse
13. elipse泛型报错解决方法
首先将"Compiler compliance level”设置成1.5以上
而后将installed JRES换成1.5的()
14. JDK和JRE的区别 餐厅 vs 厨房+餐厅
JDK和JRE的区别,JDK包含了JRE和其余的一些类库,且多了server端的虚拟机
若是安装了jdk,会发现电脑上有两套JRE。JDK其实已经包括了JRE。
在jsk外层的bin里面包含有javac等lib里面包含有开发用的工具类tools.jar等
jdkJRE
server与client里面的jvm.dll这就是真正的jvm.dll所在(JVM), 在运行由jvm.cfg决定默认java.exe调用的jvm.dll,在jvm.cfg里面
-server KNOWN
-client KNOWN server排在前面就默认用server的jvm
client和server中的jvm.dll区别
%JAVA_HOME%/jre/bin/client/jvm.dll
%JAVA_HOME%/jre/bin/server/jvm.dll
Jvm动态库有client和server两个版本,分别针对桌面应用和服务器应用作了相应的优化,client版本加 载速度较快,server版本加载速度较慢但运行起来较快。
让Tomcat 使用Server版本的jvm吧 在开始菜单 tomcat5 ->tomcat config的java属性中 有一项 jvm路径 指向server目录下的jvm就好了。
15. 怎么将多余的电脑内存当成虚拟硬盘
详见http://itbbs.pconline.com.cn/diy/15907840.html
16. 为何eclipse不设置jdk也能打开
eclipse是出了名的自动化,他自己集成有JDK。
其实所谓环境变量就是一个路径,让程序在编译时可以经过这一变量找到java存在的路径。
因此通常要配置环境变量。
而eclipse本身带有JDK,编译时调用JDK是从它自带的JDK里调用,路径都是固定好的,因此就不存在配置环境变量的问题了。
假如你本身装了JDK,须要在命令提示行里编译你写的java文件,或者使用editplus编辑编译,则须要配置环境变量。
17. 关于java的反射及类加载的过程 class的获取
看了熔岩的博客http://lavasoft.blog.51cto.com/62575/15433/
深刻研究class类,获取class的三个方法,我以为不是很认同
首先 ClassName.class.getDeclareFields();//相似这种方法能够获得本类(不包括继承的字段)的字段,
可是并不会将类加载到jvm中,个人理解是他只是简单的获取这个类的字节码文件
其次,这个Class.forName(“完整类名”),这个才会加载类
最后,那个getClass()方法必须首先建立出来对象才可行 或者ClassName.class.getClass();跟第一个相似
直接 ClassName.class.getClass();相似这种,获取类的字段,方法,构造器,是不会加载类的
方法列表
Method |
.invoke(obj,Object[]args) |
从中调用底层方法的对象/用于方法调用的参数 静态方法能够省略obj |
返回方法处理结果 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
类加载
早上犯2的问题。SqlMapClientDaoSupport的实现类里面大量调用了getSqlMapClientTemplate()这个方法来得到ibatis的curd操做,而后我反编译了这个SqlMapClientDaoSupport类,发现这个方法是 public final修饰的,我就想了不是除了静态方法,别的方法不是不能在别的方法内部调用吗?尼玛,搞错了,只有main方法内部,在没有建立实例的状况下,才只能调用静态方法。
只有实例才能调用非静态方法,你调用这个实例的某个方法A,天然也能再A里面调用这个实例的方法B
18. 动态代理
virtual method invocation虚拟方法调用
public interface InvocationHandler
InvocationHandler is the interface implemented by the invocation handler of a proxy instance.
Each proxy instance has an associated invocation handler. When a method is invoked on a proxy instance, the method invocation is encoded and dispatched to the invokemethod of its invocation handler.//调用处理器是一个被一个调用处理的代理实例实现的接口。每一个代理实例都关联一个调用处理器,当一个方法被一个代理实例反射调用时,就会被其invoke方法处理
1.对于有经过接口定义业务方法的类,如何动态建立代理实例
Proxy provides static methods for creating dynamic proxy classes and instances, and it is also the superclass of all dynamic proxy classes created by those methods.
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
第二个传入的参数interfaces,代理实现的接口列表
经过如上方法建立一个代理,在代理里面传入 调用处理器,目标对象的接口
因此这个目标对象必须是接口的实现,且能够将目标对象传入处理器
1. 建立目标类target
2. 建立InvocationHandler实现类,即处理器handler,能够传入target
3. 由Proxy静态方法建立target的代理实例,须要传入target的全部接口及handler
4. 当代理实例执行方法时,handler就会调用年invoke方法
在invoke方法里面经过传入的targret,及执行方法和参数来进行,方法反射执行,及aop逻辑
2.对于没有经过接口定义业务方法的类,如何动态建立代理实例
Cglib动态代理
具体实例见F:\workspace\Test\src\com\spring\aop\proxy\CglibProxy.java
19. 堆栈问题
堆栈问题详见个人博客http://www.cnblogs.com/javahuang/articles/3054400.html
20. ibatis的sql中何时须要用到 <![CDATA[ ]]>
< > & 这三个符号的时候
21. equals == “”及null
今天extjs从前台穿过来的数据 我debug发现其值为””,而后咱们头给改为了 ==null,给哥改错了
我给改为了.equals(“”),才最终跑起来
22. eclipse打开报错
修改方法:eclipse.ini 将 -Xmx512m 改小
23. spring配置文件中id和name区别
通常bean都是对应的id,bean里面的property对应的就是name
24. ServletContext和ApplicationCcontext
一个是整个web容器,一个是spring容器,其中后者包含在前者里面
25. synchronized关键字
private final Map singletonCache = new HashMap();
synchronized (this.singletonCache) {
sharedInstance = this.singletonCache.get(beanName);
}
个人理解是synchronized关键字对这个map加锁,进行同步操做
26. 将当前对象放入属性构造器
public class XmlBeanFactory extends DefaultListableBeanFactory {
private final XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this);
}
27. elipse安装插件
将下载的插件jar包直接放入eclipse下面的plugins目录下面
28. eclipse是怎么编译的
eclipse中,不管是java文件仍是xml文件等等,假如你给classes目录中的编译文件删掉了,只须要将src随便修改下,按ctrl+s就会自动从新编译
29. java路径问题
http://www.cnblogs.com/javahuang/archive/2013/05/28/3103760.html
eclipes默认的当前目录就是你的工程目录
相对于当前用户目录的相对路径System.getProperty("user.dir")返回的路径,项目的根路径
咱们使用的相对路径,应该使用相对于当前classpath的相对路径
this.getClass().getClassLoader().getResourceAsStream("com/Book.xml") 这个相对路径是相对于当前的classpath
获取当前classpath的绝对路径获取方法
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));//类加载器的路径
System.out.println(ParseTest.class.getClassLoader().getResource(""));//获得当前classpath的绝对路径
个人理解:右键-项目-JavaBuildPath-Source-Default output folder这个路径就是当前的classpath路径
.表明当前目录..表明当前目录的上级目录
InputStream input = this.getClass().getClassLoader().getResourceAsStream("Book.xml");
这个book.xml是放在当前的classpath下面的(classes目录下面)个人理解是类加载器会到classpath下面加载类,因此相对路径默认的就是这个classpth
30. 加载类的两种方法ClassLoaderhttp://www.ibm.com/developerworks/cn/java/j-lo-classloader/
类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。通常来讲,Java 虚拟机使用 Java 类的方式以下:Java 源程序(.java 文件)在通过 Java 编译器编译以后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成 java.lang.Class
类的一个实例。每一个这样的实例用来表示一个 Java 类。经过此实例的 newInstance()
方法就能够建立出该类的一个对象。实际的状况可能更加复杂,好比 Java 字节代码多是经过工具动态生成的,也多是经过网络下载的。
ClassLoadUtil.class.getClassLoader().loadClass(String classname);得到类加载器而后加载类
Class.forName(String classname,boolean initialize,ClassLoader classLoader) 类名、是否初始化该类、使用的类加载器
31. String的方法
String.sunString(index);//返回的是从index开始的子字符串
source.contains(dest);//返回的是source里面里否含有dest
source.lastIndexOf(str,fromIndex);//从fromindex处开始反向搜索str第一次出现位置的索引值
32. 接口
为何电脑主板上还要有内存插槽,显卡插槽?多浪费机箱空间啊? 直接用电烙铁把显卡和内存的引脚一根一根焊到主板上不就得了。 若是你焊错位置了,说明你焊工很差。 每次拆装的的时候再继续用电烙铁。 请专家们指教
就像吃饭同样,你实现了吃饭的功能,具体你是怎么吃得,系统无论,系统只须要知道你想吃饭就好了。
public class JMSMessageListenerServlet extends HttpServlet implements ServletContextListener{
public void contextInitialized(ServletContextEvent arg0) {
}}
你实现了这个ServletContextListener,在ServletContext建立的时候就会调用这个初始化方法,而且可以得到ServletContext
33. Serializable,Cloneable
Serializable接口
http://blog.csdn.net/yakihappy/article/details/3979373
咱们有时候将一个java 对象变成字节流的形式传出去或者从一个字节流中恢复成一个
java 对象,例如,要将java 对象存储到硬盘或者传送给网络上的其余计算机,这个过程
咱们能够本身写代码去把一个java 对象变成某个格式的字节流再传输,可是,jre 自己
就提供了这种支持,咱们能够调用OutputStream的writeObject方法来作,若是要让java
帮咱们作,要被传输的对象必须实现serializable 接口,这样,javac 编译时就会进行特
殊处理,编译的类才能够被writeObject方法操做,这就是所谓的序列化。须要被序列化
的类必须实现Serializable 接口,该接口是一个mini 接口,其中没有须要实现的方法,
implements Serializable只是为了标注该对象是可被序列化的。
例如,在web 开发中,若是对象被保存在了Session 中,tomcat 在重启时要把Session
对象序列化到硬盘,这个对象就必须实现Serializable接口。若是对象要通过分布式系统
进行网络传输或经过rmi 等远程调用,这就须要在网络上传输对象,被传输的对象就必
须实现Serializable接口。
Clobeable接口
标记接口,
假设x是一个非空对象,应该有:
x.clone()!=x 为true,就是说他们不是同一个对象.
x.clone().getClass()==x.getClass() 为true,他们是同一个类型Class.
x.equals(x.clone()) 为true,逻辑上应该至关.
ShadowClone和DeepClone,都是调用super.clone(),可是后者作了强制类型转换
34. XML的解析
SAX JDOM DOM DOM4J
sax解析SimpleAPI for xml
思路:首先写业务类(处理器),须要继承处理器或者实现相应的处理接口,加载XMLReader驱动,获得解析器,将处理器注册到解析器上,而后解析器解析xml的时候就会触发相应处理器上面的方法
解析器:XMLReaderreader=XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser")
ContentHandler 是SAX最重要的接口,包含全系列方法。
咱们使用的时候只须要继承DefaultHandler,该类为4个接口提供了接口实现类
SAXParser和XMLReader
http://docs.oracle.com/javase/1.5.0/docs/api/org/xml/sax/XMLReader.html. take a look at the link for XML reader and have a look athe following link for sax parser.http://docs.oracle.com/javase/1.5.0/docs/api/javax/xml/parsers/SAXParser.html.
Using different parser's depends on what you want your parser to do. If your modifying, deleting contents in xml you can use W3C Dom parser. If you just want to parse and get elements you can use SAX parser. There are a few out there. So it really depends on what you want.
还有一个区别是 XMLReader能够直接parse(uri) SAXParser必须得带上parse(inputStream,defaultHandler);带上事件处理器
DOM解析
解析器 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
JDOM解析
JDOM使用起来比较简单是对DOM的封装,返回的对象通常都是java的collection,
区别:sax解析是从文档开始,解析每一个元素开始和结束,元素中间文本内容的时候都会触发相应的解析方法
dom解析先将整个xml所有加载,组成一颗dom树
35. StringBuffer和StringBuilder的区别
StringBuffer 与 StringBuilder 中的方法和功能彻底是等价的,只是
StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因
此是线程安全的,而 StringBuilder 没有这个修饰,能够被认为是线程
不安全的。
StringBuffer 始于 JDK 1.0
StringBuilder 始于 JDK 1.5
从 JDK 1.5 开始,带有字符串变量的链接操做(+),JVM 内部采用的是
StringBuilder 来实现的,而以前这个操做是采用 StringBuffer 实现的。
StringBuffer.append(char[],offset,len);//将字符数组从index=offset开始的len个字符插入到StringBuffer中
//the characters to be appended; the index of the first char to append; the number of chars to append
36. left outer join和 left inner join区别
left outer join 等价于left join
lef inner join是将两个表相匹配的记录出如今结果表中
37. 清掉firefox页面缓存(修改js刷新)
在FireFox 的地址栏目输入:about:config
network.http.use-cache
设置为false
在弹出的界面中找到以下项目:
browser.cache.check_doc_frequency
缺省设置为3,改成1
Set how often to check accuracy of cached documents 设定检查是否须要更新缓存文档的频率
0 : Once per session 每一个进程一次 每次启动Firefox时检查
1 : Each time 每次访问此页时检查
2 : Never 不检查
3 : When appropriate/automatically 自动
38. oracle外键
外键约束是表级约束
constraint 约束名foreign key(约束字段名)references 关联表名(关联字段名)
on delete cascade--级联删除,主表删除,从表跟着删除
on delete set null--主表数据删除,关联数据置空
39. oracle函数
decode/to_char函数 decode(biz.biz_type, 1, entity.msgtitle||'['||to_char(oper.created_time,'yyyy-MM-dd HH24:mi:ss')||']', entity.msgtitle) as msgtitle
40. varhchar,char,varchar2
在oralce中,例如name char(默认的长度是1)固定长度
varchar2(22)这个是可变长度,最大长度为22
oracle中不能直接用varchar和varchar2
41. session
Ibatis和Hibernate中的Session含义相似,均是表明了数据库的一个会话。在一个会话中,能够操做数据库。
而servlet中的session表明的是一个HTTP会话。它隐含了“面向链接”和/或“保持状态”这样两个含义,也能够理解为一类用来在客户端与服务器之间保持状态的存储结构,能够在session中存放相关会话数据
42. 类
匿名内部类 http://blog.csdn.net/liuzhidong123/article/details/6561521
new 父类构造器(参数列表)|实现接口()//匿名内部类实现一个接口或者继承一个类
{
//匿名内部类的类体部分
}
关于匿名内部类还有以下两条规则:
1)匿名内部类不能是抽象类,由于系统在建立匿名内部类的时候,会当即建立内部类的对象。所以不容许将匿名内部类
定义成抽象类。
2)匿名内部类不等定义构造器,由于匿名内部类没有类名,因此没法定义构造器,但匿名内部类能够定义实例初始化块,
经过实例初始化块来完成构造器须要完成的事情。
若是匿名内部类须要访问外部类的局部变量,则必须使用final修饰符来修饰外部类的局部变量
43. 线程Thread
多个线程同时调用同一个实例的方法,只要不共享这个实例的成员变量,不发生同步问题,各自完成各自的操做
对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式:访问串行化,对象共享化。而ThreadLocal采用了“以空间换时间”的方式:访问并行化,对象独享化。前者仅提供一份变量,让不一样的线程排队访问,然后者为每个线程都提供了一份变量,所以能够同时访问而互不影响
当多个线程使用同一个实例的成员变量,ThreadLocal的作法是将成员变量放到ThreadLocal里面,并能够经过initialValue()初始化值。
而后能够经过set()和get()方法直接获取值。。。当多个线程同时使用该变量时,每一个线程都会获得该变量的副本,因此相互之间是不会受到影响的。
用户能够根据本身须要,将一些非线程安全的变量以ThreadLocal存放
Service-Oriented Architecture 面向服务架构
ThreadLocal其实就是实例的成员变量能够初始化值,当多个线程同时使用这个实例时,使用的是这个成员变量的副本,因此每一个线程对这个变量副本进行操做时,不影响其余线程
44. HTPP报文
accept:接收什么类型的响应
cookie
referer:请求是从哪一个url传过来的
cache-control:请求但愿相应返回的内容在客户端缓存的时间
响应报文
相应报文头有个ETag属性,补充Cache-Control,若是这个ETag没有发生变化,那么浏览器能够直接从缓存获取输出,若是变化了,则能够从服务器重新获取输出页面。
45. 创建本身的异常处理类
建立一个类继承Throwable或者其子类
添加构造方法
public class MySecondException extends Throwable {
public MySecondException() {
super();
}
public MySecondException(String msg) {
super(msg);
}
public MySecondException(String msg, Throwable cause) {
super(msg, cause);
}
public MySecondException(Throwable cause) {
super(cause);
}
}
例如在项目中
public FrameworkAuthenticationException(String description,
Throwable rootException)
{
this(AUTHENTICATION_SESSION_LOST, description, rootException);
}
FrameworkException extends RuntimeException
只须要在定义的异常类中一直super(…)到FrameException就能抛出带有异常代码额异常描述的异常
最终目的是给这个FrameworkException的如上三个成员变量赋值
这个地方不知道是为何
只要在异常类中重写toString方法,就能够自定义最终显示页面上的异常信息
46. 存储过程当中的匿名块和命名块
使用declare或begin关键字开头的叫匿名块,每次使用均须要进行编译,不能存储在数据库中且不能被其余PL/SQL调用。而你所谓的存储过程,存储函数,触发器等叫命名块,一经编译后面就可直接调用,且能够存储在数据库中,被其余PL/SQL 调用。
47. 存储过程游标
create or replace procedure getcur(p_rc out sys_refcursor)
is
begin
open p_rc for 'select * from item';
end getcur;
sys_refcursor这个是oracle自带的返回游标的类型。
--Fetch游标
--使用的时候必需要明确的打开和关闭
declare
--类型定义
cursor c_job
is
select empno,ename,job,sal
from emp
where job='MANAGER';
--定义一个游标变量
c_row c_job%rowtype;
begin
open c_job;
loop
--提取一行数据到c_row
fetch c_job into c_row;
--判读是否提取到值,没取到值就退出
--取到值c_job%notfound 是false
--取不到值c_job%notfound 是true
exit when c_job%notfound;
dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
end loop;
--关闭游标
close c_job;
end;
declare
CURSOR
c_dept(p_deptNo number)
is
select * from emp where emp.depno=p_deptNo;
r_emp emp%rowtype;
begin --for in loop就不须要明确打开和关闭游标
for r_emp in c_dept(20) loop
dbms_output.put_line('员工号:'||r_emp.EMPNO||'员工名:'||r_emp.ENAME||'工资:'||r_emp.SAL);
end loop;
end;
fetch
48. 存储过程
在java代码中,PreparedStatement须要单个执行插入,executeUpdate().,executeQuery()
存储过程要用CallableStatement,,prepareCall(…),cs.rege….(index,type);
create or replace proname(…)
is
begin
….
end proname;
49. JDBC全解析
注册驱动,构造链接
具体的实例见我写的JDBC操做实例
statement每次执行sql语句,相关数据库都要执行sql语句的编译
preparedstatement是预编译得, preparedstatement支持批处理
statement执行update必须有参数
preparedStatement在建立时已经预编译了,没有参数
ResultSet能得到结果集的元数据,可以进行各类指针操做,假如在语句中设置了type和Concurrency能够在结果集中进行更新和插入操做
CallableStatement可以进行存储过程的执行
游标
ResultSet()结果集,能够当作结果的集合,rs.next();等每一个函数能够看作是对游标的操做,rs既能操做游标上下移动,又能对当前游标对应的记录进行操做,并且可以进行修改和插入、删除操做 注意:对游标进行删改操做时,必须设定(若是数据库记录改动了,不反映到rs里面;能用rs更新数据库中的表面;),同时取结果集的sql必须明确字段,不能用select*from(此sql默认结果集只读)conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
50. JVM内存结构和6大区域
PC Register(PC寄存器) 记录当前线程执行字节码的行号(线程私有)
JVM栈 线程私有,保存基本类型变量及对象的指针 -Xss
堆(Heap)JVM用来存储对象实例以及数组值的区域 -Xms(JVM可申请的最小heap内存) -Xmx(最大)
方法区域(MethodArea) 方法区域存放了所加载的类的信息(名称、修饰符等)、类中的静态变量、类中定义为final类型的常量、类中的Field信息、类中的方法信息 持久代XX:PermSize(最小)-XX:MaxPermSize
运行时常量池(RuntimeConstant Pool)类中的固定的常量信息、方法和Field的引用信息等 空间从方法区分配
本地方法堆栈(NativeMethod Stacks)JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每一个native方法调用的状态。
51. 用notepad++格式化xml
插件xmlTools,Pretty print(XML only - with line breaks) Ctrl+Alt+Shift+B
52. Collections
经常使用的方法,
53. 锁
wait(),notify(),notifyAll()不属于Thread类,而是属于Object基础类,也就是说每一个对像都有wait(),notify(),notifyAll()的功能。由于都个对像都有锁,锁是每一个对像的基础,固然操做锁的方法也是最基础了。
wait():
等待对象的同步锁,须要得到该对象的同步锁才能够调用这个方法,不然编译能够经过,但运行时会收到一个异常:IllegalMonitorStateException。
调用任意对象的 wait() 方法致使该线程阻塞,该线程不可继续执行,而且该对象上的锁被释放。
notify():
唤醒在等待该对象同步锁的线程(只唤醒一个,若是有多个在等待),注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM肯定唤醒哪一个线程,并且不是按优先级。
调用任意对象的notify()方法则致使因调用该对象的 wait()方法而阻塞的线程中随机选择的一个解除阻塞(但要等到得到锁后才真正可执行)。
notifyAll():
唤醒全部等待的线程,注意唤醒的是notify以前wait的线程,对于notify以后的wait线程是没有效果的。
1.有synchronized的地方不必定有wait,notify
2.有wait,notify的地方必有synchronized.这是由于wait和notify不是属于线程类,而是每个对象都具备的方法,并且,这两个方法都和对象锁有关,有锁的地方,必有synchronized。
54. CVS
Concurrent Version System版本控制系统
55. RMI
RMI说白了,就是提供了一种远程的方法调用。 这种调用简单方便,能够传递复杂java对象。如今流行的j2ee中的EJB的底层实现技术就是RMI,EJB的调用就是通过封装的,更高级的RMI调用。
cd到classpath目下到rmic classname 若是有包名记得带包名
四、建立一个服务器,用于发布2中写好的类。
5. 建立一个客户程序进行RMI调用。
六、启动rmiRegistry并运行本身的远程服务器和客户程序。
JRMP(java远程消息交换协议) java remote message protocol
1、RMI(远程方法调用)的组成
一个正常工做的RMI系统由下面几个部分组成:
·远程服务的接口定义
·远程服务接口的具体实现
·桩(Stub)和框架(Skeleton)文件
·一个运行远程服务的服务器
·一个RMI命名服务,它容许客户端去发现这个远程服务
·类文件的提供者(一个HTTP或者FTP服务器)
·一个须要这个远程服务的客户端程序
56. oracle删除用户和表空间
对于单个user和tablespace 来讲, 可使用以下命令来完成。
步骤一: 删除user
drop user ×× cascade
说明: 删除了user,只是删除了该user下的schema objects,是不会删除相应的tablespace的。
步骤二: 删除tablespace
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;
--删除空的表空间,可是不包含物理文件
drop tablespace tablespace_name;
--删除非空表空间,可是不包含物理文件
drop tablespace tablespace_name including contents;
--删除空表空间,包含物理文件
drop tablespace tablespace_name including datafiles;
--删除非空表空间,包含物理文件
drop tablespace tablespace_name including contents and datafiles;
--若是其余表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
57. Servlet中的response和request
javax.servlet.http.HttpServletResponse
response.addHeader("Pragma", "no-cache");向已存在的消息头添加值
response.setIntHeader("c-result-status", resultStatus);向消息头中新添加属性
58. web项目导入jar包
新建了web项目经过右键build path导入jar包能正常编译,可是当我部署到tomcat里面就报错classNotFoundException,打开tomcat部署目录,发如今web-info/lib下面没有我导入的jar包
里面eclipse引用library (即我build path的jar包)是为了编译代码生成WEB-INF/classes里面的class文件使用,使用eclipse j2ee IDE时,会将WEB-INF/lib中全部的lib自动加入到library中,而我bp的jar包不会到lib里面,因此须要手动拷贝
struts2须要导入的基础jar包
struts2-core-2.0.6.jar
xwork-2.0.4.jar
ognl-2.6.11.jar
freemarker-2.3.8.jar
commons-logging-1.0.4.jar
59. web.xml全解
url-pattern
精确路径匹配 /test /* /test会匹配前面
最长路径匹配 /test/* /test/a/* /test/a/会匹配后面
扩展匹配 *.action
路径映射以”/’开头和以”/*”结尾的
以”*.”开头拓展映射
“/” 是用来定义default servlet映射的
剩下的都是用来定义详细映射的。好比: /aa/bb/cc.action
/*.action 没法断定是路径映射仍是拓展映射 是指url-pattern包含/*.action的
/hello.action是能够的 /hello.*是不行的 /*/*也是不行的*只能出现一次 /test/*/haha/*也不行
若是同时配置了struts2和servlet,且url-pattern 为/*对全部链接进行拦截,那么servlet配置url-pattern就没有做用,能够指定struts2的url-pattern或者指定struts2的load-on-startup
|-- Context Path --|-- Servlet Path -|--Path Info--|
http://www.myserver.com /mywebapp /helloServlet /hello
|-------- Request URI ----------------------------|
60. 修改java文件不重启tomcat的方法
<Context docBase="E:\apache-tomcat-6.0.14\webapps\abs" path="/abs" reloadable="false" source="org.eclipse.jst.j2ee.server:abs"/></Host>
61. struts2
<package name="com.cdb" extends="struts-default,
继承以后能使用struts-default里面定义的拦截器
struts.xml 为Struts 2的核心配置文件。struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。
struts.xml中主要配置Struts项目的一些全局的属性,用户请求和响应Action之间的对应关系,以及配置Action中可能用到的参数,以及处理结果的返回页面。还包括各类拦截器的配置等。
AOP 栈结构,1.执行失败,返回resultCode给上层拦截器返回2.执行成功,返回invocation.invoke(),继续调用下一个拦截器3.若是已经到最内层action,执行action,返回resultCode,依次返回给拦截器返回 若是将R=invocation.invoke()写在result以前,那么R以前代码在执行action以前执行,R以后代码在执行action以后执行 PreResultListener 用法有待研究 |
struts-default.xml里面定义了一系列的拦截器
62. ibatis
spring集成ibatis
注:lobHandler必须配置,不然会报错;confiLocation里面的ibatis配置文件必须有sql-map的配置
见17类加载
SqlMapClientTempleate这个类是ibatis的真正具体curd操做类,该类已经存在setSqlMapClent()方法,这个类须要SqlMapClient,因此在spring配置时,须要在其实现类里面注入属性SqlMapClient,SqlMapClientTemplate的实现类就能经过getSqlMapClientTemplat()获得SqlMapClientTemplate来进行相应的curd操做
public final void setSqlMapClient(SqlMapClient sqlMapClient)
{
if (!(this.externalTemplate))
this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
},而后经过这个方法获得这个类,进行相应的curd操做
public final SqlMapClientTemplate getSqlMapClientTemplate()
{
return this.sqlMapClientTemplate;
}
因此须要配置好这个SqlMapClient,这个类须要注入以下3个属性,缺一不可,不然应用启动时会报错
须要在SqlMapClientTemplate的实现
ibatis中的SqlMapClient继承了SqlMapTran和SqlMapExecutor,后者包含curd方法
SqlMapClientTemplate是spring的方法,其CURD归根到底仍是调用SqlMapExecutor的方法
com.ibatis.sqlmap.client.SqlMapClient 这个是ibaisd的接口,继承了SqlMaoExecutor和SqlMapTransactionManager接口
我理解的resultClass和resultMap
前一段一直对ibatis的queryForList很迷茫,想一想
63. spring
org.springframework.core.io.Resource
加载文件资源
Spring 定义了一个 org.springframework.core.io.Resource 接口,Resource 接口是为了统一各类类型不一样的资源而定义的,Spring 提供了若干 Resource 接口的实现类,这些实现类能够轻松地加载不一样类型的底层资源,并提供了获取文件名、URL 地址以及资源内容的操做方法。
访问文件资源
假设有一个文件地位于 Web 应用的类路径下,您能够经过如下方式对这个文件资源进行访问:
注解
@scope等价于scope属性 @PostConstruct等价于init-method @PreDestroy等价于destory-method
@
Spring中BeanFactory与ApplicationContext的差异
后者是前者功能的拓展,如我今天使用的@autowire在前者一直报空指针异常。。。
ApplicationContext ctx = new ClassPathXmlApplicationContext("sayLanguage.xml");
64. spring整合srruts2
大概思路是:在web.xml里面配置struts2的fliter,配置spring的监听器,初始化spring容器
在spring配置文件中,能够用<context:component-scan base-package="com.yyl.rp,com.rp.yyl" />,该配置会扫描com.yyl.rp和com.rp.yyl下面的全部类,若是有相似service注解,就会将其初始化成spring容器的一个bean。当一个请求到达web容器时,建立了一个action实例,若是在action容器里面存在@Autowire注解,那么此时若是有插件spring-struts2-plugin.jar,该插件的做用是从spring容器中取得autowire类型对应的bean给它注入到action实例里面。
65. log4j.properties
log4j.rootLogger = [ level ] , appenderName1 定义根Logger,全部>=level级别的日志都会被输出
#set logger level and assign appenders
log4j.rootLogger=DEBUG, stdout, A1
#log4j.rootLogger=ERROR, A1
log4j.logger.JMSLOG=ALL, JMSLOG
log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.file=e:/abs_logs/abs_log-
log4j.appender.A1.MaxFileSize=10MB
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss.SSS}[%c]-[%p] %m%n
66. HTML中标签
link 标签是单独出现的
属性
href -- 指定须要加载的资源(CSS文件)的地址URI
media -- 媒体类型,参见CSS教程
rel -- 指定连接类型 告诉浏览器你link进来的是个样式表文件
rev -- 指定连接类型
type -- 包含内容的类型,通常使用type="text/css"
meta
<meta> 元素可提供有关页面的元信息(meta-information),好比针对搜索引擎和更新频度的描述和关键词。
<meta> 标签位于文档的头部,不包含任何内容。<meta> 标签的属性定义了与文档相关联的名称/值对。
<meta http-equiv="Content-Type" content="html/json; charset=utf-8" />
HTML中td元素的nowrap属性表示禁止单元格中的文字自动换行。
<p><span style="color:red;font-family:楷体">呵呵</span></p>p是段落
<table align=”left/right/center”> table位于左中右测试结果http://www.w3school.com.cn/tiy/t.asp?f=html_table_align2
67. oracle执行计划 sql优化
A update sta_ctrt a set a.loan_quty_type_cd=(select nvl(b.identlevel,0) identlevel from etr.etr_loan b where a.ctrt_no=b.loan_no) where exists(select 1 from etr.etr_loan c where a.ctrt_no=c.loan_no); |
B merge into sta_ctrt a using etr.etr_loan b on (a.ctrt_no=b.loan_no) when matched then update set a.loan_quty_type_cd=nvl(b.identlevel,13); |
A
Bmerge的语法是用表b中的每条记录来跟表a进行匹配,若是知足了就执行then操做
rownum 伪字段
1 Oracle executes your query. 执行query
2 Oracle fetches the first row and calls it row number 1. 将查询出来的第一行rownum设置为1
3 Have we gotten past row number meets the criteria? If no, then Oracle discards the row, If yes, then Oracle return the row.
判断rownum是否符合条件,若是符合则返回该行,不然丢弃
4 Oracle fetches the next row and advances the row number (to 2, and then to 3, and then to 4, and so forth).
将下一行的rownum+1
5 Go to step 3.
因此where rownum>n rownum=n返回的数据一直会为空 (n>1)
能够select * from(select rownum,a.* from tablename a) b
rowid在整个row的生命周期内是惟一的。
在Oracle的逻辑存储中,表空间由各类类型的段(Storage)组成,而段则由区(extent)组成,区是段分配存储的单位。当创建一个表段时,Oracle为该段分配初始区,若是以后因为数据的插入,初始区装满后,将继续分配下一个区。
68. java回调函数
a实现某个接口,b预留了该接口,建立b对象,将a放进去,执行b的方法,至关于执行a的
69. try catch finally
若是在try里面发生了异常,在异常开始的地方终止运行,而后执行finally里面的代码。
若是在try和finally里面都有return的话,先执行try里面的代码,而后执行finally里面的代码,最后返回值为finally里面的return
if()else if(){}else if(){}else{},若是第一个if语句知足了,后面的else都不会执行