1.awt中的MouseEvent类中的方法
isPopupTrigger() 返回此鼠标事件是否为该平台的弹出菜单触发的事件
InputEvent中的consume()的作用是 以便不会按照默认的方式由产生此事件的源代码处理此事件。
2.javax.swing 类JToolBar
方法setFloatable(boolean b)
设置floatable属性,如果要移动工具栏,此属性必须设置为 true。
3.Set,因为Set 不允许包括重复的元素而且排序和我们无关。
4.什么是JMX JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标
准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。
5.JCA 是一个Java 标准体系机构,用来连接和访问后端系统,例如应用程序包和技术。 必须根据JCA
规范编写适配器。任何符合JCA 的适配器都能够插入支持JCA 的J2EE 应用程序服务器。
6.类的修饰
abstract不能直接产生属于这个类的对象
final不能被其他任何类继承
public不但能被同一程序包的类所调用,而且也能被其他程序包的类所调用
friendly(缺省)只能被本包中的其他类所调用
变量和方法的修饰
public 任何其他类和对象 只要能看到这个类的话。
protected 同一类和同一包可以使用。不同的包的类要使用,必须是该类的子类
可以存取变量和调用
private 不允许任何其他类存取和调用
friendly 同一程序包中出现的类才可以直接使用他的数据和方法
7.只有对象的方法可以访问对象的变量
8.利用接口可以实现多重继承(可以同时实现多个接口)
9.RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机
上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接
口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚
拟机的参数为 "unmarshalled")上。该方法终止时,将编组来自远程机的结果并将结果发送到调用方的
虚拟机。如果方法调用导致抛出异常,则该异常将指示给调用方。
10.CORBA是对象管理集团(OMG,http://www.omg.org/)开发的一系列的规范,CORBA的目标达到平台无
关、编程语言无关、以及网络传输协议无关的互操作,它被认为是最主要的分布对象的体系结构之一。
11.JFrame类中的 setDefaultLookAndFeelDecorated(boolean defaultLookAndFeelDecorated) 提供
一个关于新创建的JFrame是否应该具有当前外观为其提供的Window装饰(如边框、关闭窗口的小部件,
标题等等)的提示。
12.javax.sound.sampled中的类 AudioInputStream
音频输入流是具有指定音频格式和长度的输入流。长度用示例帧表示,不用字节表示。提供几种方法
,用于从流读取一定数量的字节,或未指定数量的字节。音频输入流跟踪所读取的最后一个字节。可以
跳过任意数量的字节以到达稍后的读取位置。音频输入流可支持标记。设置标记时,会记住当前位置,
以便可以稍后返回到该位置。
13.主要的声音文件类型
AU-扩展名为Au或snd,适用于短的声音文件。
wav-扩展名为WAV。能被所有支持声音的windows应用程序播放。
AIFF——扩展 名为AIF或IEF音频互换文件格式
MIDI——扩展名为MID,乐器数字接口 MIDI是为音乐制造业所认可的标准,主要用于控制诸如合成器
和声卡之类的设备。
14.JMF java媒体框架
该核心框架支持不同媒体(如:音频 视频输出)间的时间同步。它是一个标准的扩展框架。允许用
户制作纯音频和视频流。
15.Java虚拟机(JVM)是java Virtual Machine的缩写,它是一个虚拟出来的计算机,是通过在实际计
算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬件架构,如处理器,堆栈,
寄存器等,还具有相应的指令系统。
java语言最重要的特点就是可以在任何操作系统中运行。使用Java虚拟机就是为了支持与操作系统无关
,在任何系统中都可以运行。
Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行
的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,实际上最终还
是把字节码解释成具体平台上的机器指令执行。
JRE 是Java运行环境 (Java Runtime Enviroment) 的缩写。它基本上就和Java虚拟机是同一个概念。
一般说来,在谈论一个具体的产品的时候,可以说“JRE”,而说到理论中的一个模型的时候,我们常用
的是“Java虚拟机”。
要使用Java程序,JRE是必不可少的环境。
16.RAM(Random-Access Memory)-随机存取存储器,一种存储单元结构,用于保存CPU处理的数据信息。
“随机”存取是与“顺序(serial)”存取相对而言的,意思是CPU可以从 RAM中任意地址中直接读取所
需的数据,而不必从头到尾一一查找
17.栈(stack)与堆(heap)
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与
生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内
存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是
,由于要在运行时动态分配内存,存取速度较慢。
基本类型(除string)存于栈中;包装类数据如:Integer,String,Double等将相应的基本数据类型包
装起来的类。这些类数据全部存在于堆中。
==号,根据JDK的说明,只有在两个引用都指向了同一个对象时才返回真值。
String str1 = new String("abc");
String str2 = "abc";
System.out.println(str1==str2); //false
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
18.AbstrctAction 此类提供JFC Action接口的默认实现。它定义了一些标准行为,比如Action对象属性
(icon,text和enabled)的get和set方法。开发人员只需为此抽象类创建子类并定义actionPerformed方
法即可。
19. JPopupMenu.add(Action a) 将指派指定 Action 对象的新菜单项追加到菜单的末尾。
Action inviteAction = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
ConferenceUtils.inviteUsersToRoom(groupChatRoom.getConferenceService(),
groupChatRoom.getRoomname(), null);
}
};
inviteAction.putValue(Action.NAME, Res.getString("menuitem.invite.users"));
inviteAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon
(SparkRes.CONFERENCE_IMAGE_16x16));
popup.addSeparator();
popup.add(inviteAction);
20.正则表达式
Pattern对象,被Known as patterns, 是编译的正则表达式
Mattcher对象,或者matchers,在实现了java.lang.CharSequence接口并作为文本source的字符序列中
定位解释matchers的引擎。
PatternSyntaxException 对象描述非法的regex patterns
(1).句点符号--通配符 t.n--tan,ten,tin,ton
(2).方括号符号--之内只能匹配单个字符t[aeio]n--tan,ten,tio,ton
(3)."或 "符号-- t(a|e|i|o|oo)n-tan,ten,tin,toon
(4).表示匹配次数的符号---用来确定紧靠该符号左边的符号出现的次数。
*--0次或者多次
+--一次或者多次
?--0次或者一次
{n}--恰好n次
{n,m}--从n次到m次
- 表示一个范围,比如从0到9
比如999-99-9999
[0-9]{3} /-[0-9]{2} /-[0-9]{4} /-连字符
[0-9]{3} /-?[0-9]{2} /-?[0-9]{4} /-? 可选的连字符
(5).“否”符号
“^”在方括号内,表示不想要匹配的字符。
(6). 圆括号和空白符号
“/s”符号是空白符号 必需的空格
“/s*”可选的空格
(7)其他符号
/d=[0-9]
/D=[^0-9]
/w=[A-Z0-9]
/W=[^A-Z0-9]
/s=[/t/n/r/f]
/S=[^/t/n/r/f]
Matcher方法如下:
Matcher appendReplacement(StringBuffer sb, String replacement)
将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添
加到一个StringBuffer对象里。
StringBuffer appendTail(StringBuffer sb)
将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。
boolean find()
尝试在目标字符串里查找下一个匹配子串。
int groupCount()
返回当前查找所获得的匹配组的数量。
string group(int group)
返回当前查找而获得的与指定的组匹配的子串内容
21.java.awt.Toolkit 此类是Abstract Window Toolkit的所有实际实现的抽象超类。Toolkit的子类被
用于将各种组件绑定到特定本机工具包实现
22.java.awt.point表示(x,y)坐标空间中的位置的点,以整数精度来指定
23.java.swing.JList 该组件允许用户从列表中选择一个或多个对象。单独,模型ListModel表示列表的
内容。使用构建ListModel实例的JList构造方法,可以方便地显示对象的数组或向量。
24.DefaultListModel此类以松散方式实现java.util.Vector API,它实现1.1.x版本的
java.util.Vector,没有Collection类的支持,并且在发生更改时通知ListDataListener
25.javax.swing.AbstractButton
定义按钮和菜单项的一般行为
setMnemonic(int mnemonic)设置当前模型上的键盘助记符
25.定义菜单和按钮的
26.java.lang.String中的方法replaceFirst(String regex,String replacement) 使用给定的
replacement字符串替换此字符串匹配给定的正则表达式的第一个子字符串。
27。异常处理问题
结论一:既然捕获了异常,就要对它进行适当的处理。不要捕获异常之后又把它丢弃,不予处理。
结论二:在catch语句中应尽可能指定具体的异常类型,必要时使用多个catch.不要试图处理所有可能出
现的异常
结论三: 保证所有的资源都能被正确的释放。充分运用finally关键词。
结论四:在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读。
结论五:尽量减小try块的体积。
结论六:全面考虑可能出现的异常以及这些异常对执行流程的影响。
28.javax.swing.JDesktopPane
用于创建多文档界面或虚拟桌面的容器。用户可创建JInternalFrame对象并将其添加到
JDesktopPane.JDesktopPane扩展了JLayeredPane,管理可能的重叠内部窗体。它还维护了对
DesktopManager 实例的引用,这是由 UI 类为当前的外观 (L&F) 所设置的。注意,JDesktopPane 不支
持边界。
29.Java程序性能和速度优化实例
(1)应用具有I/O Buffer功能的CLass
(2)字符串运算处理。运用BUFFER和append()方法,避免使用String class的“+=”操作,以减少JVM在
内存中创建新的对象,占用资源,增加JVM回收资源负担。
(3)处理昂贵的数据库初始化
30.方法javax.swing.JComponent.setDoubleBuffered()
设置此组件是否应该使用缓冲区进行绘制
31.ArrayList,Vector,LinkedList的存储性能和特性
ArrayList和Vector都使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素
,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而
插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向和后向遍历,但是插入数据时只需要
记录本项的前后项即可,所以插入速度较快。
32.Collection和Collections的区别
Collection是集合类的上级接口,继承欲它的接口主要有Set和List
Collections是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安
全化等操作
33.HashMap和Hashtable的区别
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap
允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
HashMap把Hashtable的Contains方法去掉了,改成containsvalue和containsKey。因为Contains方法容
易让人引起误解
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不
需要自己为它的方法实现同步,而HashMap就必须为之提供同步
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
34. DCOM概述
Microsoft的分布式COM(DCOM)扩展了组件对象模型技术(COM),使其能够支持在局域网、广域网甚至
Internet上不同计算机的对象之间的通讯。使用DCOM,你的应用程序就可以在位置上达到分布性,从而
满足你的客户和应用的需求。
因为DCOM是世界上领先的组件技术COM的无缝扩展,所以你可以将你现在对基于COM的应用、组件、工具
以及知识转移到标准化的分布式计算领域中来。当你在做分布式计算时,DCOM处理网络协议的低层次的
细节问题,从而使你能够集中精力解决用户所要求的问题。
回答
35.DAO(Data Access Object):数据访问对象。
36.ORM(Object/Relation Mapping):对象关系映射
37.类与类之间存在以下关系:
(1)泛化(Generalization):继承关系,实现关系 ———》
(2)关联(Association):局部变量,方法的参数,以及静态方法的调用-------->
(3)依赖(Dependency): 使用实例变量实现————
(4)聚合(Aggregation):较强的关联关系,强调的是整体与部分的关系。——<>
38.一个完整的RMI实例
(1)创建远程接口及声明远程方法
远程接口必须扩展接口java.rmi.Remote;
远程接口方法必须抛出java.rmi.RemoteException
(2)实现远程接口及远程方法(继承UnicastRemoteObject)
(3)启动RMI注册服务,并注册远程对象
(4)客户端查找远程对象,并调用远程方法
(5)执行程序:启动服务;运行客户端
创建RMI程序的6个步骤
(1) 定义一个远程接口的接口,该接口的每一个方法必须声明它将产生一个 RemoteException
(2)定义一个实现该接口的类
(3)使用RMIC程序生成远程实现所需的残根和框架
(4)创建一个服务器,用于发布2中写好的类
(5)创建一个客户程序进行RMI调用
(6)启动rmiRegistry并运行自己的远程服务器和客户程序。
(6)
39.sleep()和wait()的区别
sleep()是使县城停止一段时间的方法.时间间隔期满后,线程不一定立即恢复执行
wait()是线程交互时,如果线程对一个同步对象X发出一个wait()调用,该线程会暂停执行,被调对象进
入等待状态,直到被唤醒或等待时间到.
sleep()不释放同步锁,wait()释放同步锁
40.java.lang.reflect.Field
Field提供有关类或接口的单个字段的信息,以及对它的动态访问权限.反射的字段可能是一个类(静态)
字段或实例字段.
41.线程学习
Volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值.而且,当成员
变量发生变化时.强迫线程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成员
变量的同一个值.
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定要在必要的时候才使用
此关键字.
yield()使得线程放弃当前分得的CPU时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次
分得CPU时间.
Thread.Interrupt实事上并没有立即中断一个正在运行的线程.采用 Thread.interrupt()方法并没有中
断一个正在运行的线程。此方法事实上做的只是如果线程被封锁则抛出一个中断信号,由此线程退出了
封锁状态。
线程的四种状态:
(1)新状态
(2)可执行状态
(3)死亡状态
(4)阻塞状态
wait()和notify()方法必须在synchronized方法或块中调用.因为只有在synchrinized方法或块中当前
线程才占有锁,才有锁可以释放
join()这个函数的作用是使得目前正在运行的线程假如为a停下来,一直到调用join()方法的这个线程b
被执行完毕,在继续开始线程a
42.javax.swing.JSplitPane
用于分隔两个(只能两个)Component .
43.Collection和Collections的区别
Collection是集合类的上级接口,继承于他的接口主要有Set和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索,排序,线程安
全化等操作
44. HashMap和Hashtable的区别
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap
允许空键值(key),效率上可能高于Hashtable
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容
易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不
需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
45.、abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本
行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例。然而
可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽
象静态方法。 Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取
而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口
而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。
接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即
将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法
。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接
口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
46.JOptionPane有助于方便地弹出要求用户提供值或是向其发出通知的标准对话框.
47.java调用可执行文件
Runtime.getRumtime().exec("所在目录");
48.逻辑的端口分类
按端口号分布划分
(1)知名端口(0-1023)
(2)动态端口(1024-65535)
按协议类型划分
(1)TCP端口
(2)UDP端口
49.脚本语言
(1).脚本语言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。
HTML通常用于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。
(2).脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程
语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.
(3).与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。
注:脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。
JAVASCRIPT,ASP,PHP,PERL都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。
(4).脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c/c++
等可以编译成二进制代码,以可执行文件的形式存在.
脚本语言不需要编译,可以直接用,由解释器来负责解释。
(5).脚本语言一般都是以文本形式存在,类似于一种命令.
50.观察者模式
被观察者继承Observable类
观察者继承Observer接口
在被观察者之上添加观察者对象
当被观察者的值发生变化是通知观察者进行更新
一个 observable 对象可以有一个或多个观察者。观察者可以是实现了 Observer 接口的任意对象。一
个 observable 实例改变后,调用 Observable 的 notifyObservers 方法的应用程序会通过调用观察者
的 update 方法来通知观察者该实例发生了改变。
事件监听就是用这种模式
51.用Porperites文件来保存实际上就是创建一个Properites文件,在程序关闭的时候,将数据写入文件
,再等程序启动的时候,从这个Properties文件中读出数据。
52.Object serialization的定义
Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被
完全存储以备以后重新生成原来的对象。
有实现Serializable借口的对象才能写入ObjectOutputStream,用这个stream可以直接传输Java对象,
不管是通过 socket在网络上传还是写入本地文件系统。这个接口没有方法,其存在的意义就是识别能通
过ObjectOutputStream传送的对象。至于为什么这样在RMI的FAQ中有解释,主要是防止程序员无意或胡
乱的用ObjectOutputStream写对象。
Serializable这个接口只是一个标识接口,没有任何方法,主要是用于实例的序列化。只要有类实现了
这个接口,就等于告诉jvm这个实例可以被序列化,只是起到一个标识的作用。在分布式系统中基本被要
求实现这个接口。"
53.java.lang.Class.getResource(String name)
查找带有给定名称的资源
java.lang.Thread.getContextClassLoader()
getContextClassLoader()
返回该线程的上下文 ClassLoader。
得到Classpath和当前类的绝对路径的一些方法
1,FileTest.class.getResource("")
得到的是当前类FileTest.class文件的URI目录。不包括自己!
2,FileTest.class.getResource("/")
得到的是当前的classpath的绝对URI路径。
3,Thread.currentThread().getContextClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
4,FileTest.class.getClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
5,ClassLoader.getSystemResource("")
得到的也是当前ClassPath的绝对URI路径。
54.abstract class和interface的区别
一:从语法定义的层面看
抽象类可以有自己的数据成员,也可以有非abstract的成员方法
而interface,只能有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一
般不定义数据成员),所有的成员方法都是abstract的.
从某种意义上说,interface是一种特殊形式的abstracr class.
二:从编程角度看
首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一
个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一
种折中考虑吧。
其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却
不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的
麻烦。
三:从设计理念层面看abstract class和interface
前面已经提到过,abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和
派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的(参考文献〔3〕中有关于
"is a"关系的大篇幅深入的论述,有兴趣的读者可以参考)。对于interface 来说则不然,并不要求
interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。
为了使论述便于理解,下面将通过一个简单的实例进行说明。
abstract class表示的是"is a"关系,interface表示的是"like a"关系
55.SOA
又称面向服务的框架(Service oriented architecture),
56.java.awt.MediaTracker
MediaTracker类是一个跟踪多种媒体对象状态的实用工具类.媒体对象可以包括音频剪辑和图像,但目前
仅支持图像
要使用媒体跟踪器,需要创建一个 MediaTracker 实例,然后对每个要跟踪的图像调用其 addImage 方
法。另外,还可以为每个图像分配一个惟一的标识符。此标识符可控制获取图像的优先级顺序。它还可
用于标识可单独等待的惟一图像子集。具有较低 ID 的图像比具有较高 ID 的图像优先加载。
由于动画图像加载和绘制的多部分特性,跟踪动画图像可能不是始终可用的,但这一功能的确受支持。
MediaTracker 在完成加载动画图像的第一帧之后就会认为动画图像已经加载完毕。这时,MediaTracker
会向所有等待者发出图像已完全加载的信号。如果在第一帧加载完之后没有 ImageObserver 查看此图像
,则该图像可能会自我刷新来保存资源(
waitForID(int id)
开始加载由此媒体跟踪器跟踪且具有指定标识符的所有图像。
57. java.awt.Window
addNotify()
通过创建到其本机屏幕资源的连接,使此窗口变得可显示。
58.java.awt.Container
paint(Graphics g)绘制容器
update(Graphics g)更新容器
59.java.awt.point
translate(int dx,int dy)平移(x,y)位置的点,沿x轴平移dx,沿Y轴平移dy,移动后得到(x+dx,y+dy)
60.java.awt.Component
createImage(int width,int height)
创建一幅用于双缓冲的,可以在屏幕外绘制的图像.
java.awt.Image
getGraphics()创建供绘制闭屏图像使用的图形上下文
61.轻量级(Lightweight)
轻量级的形容是相对于一些重量级的容器(如EJB 容器)来说的,Spring 的核心包在文件容量上只有不
到1MB 的大小,而使用Spring 核心包所需要的资源负担也是很小的,您甚至可以在小型设备中使用
Spring 的核心包。
非侵入性(No intrusive)
框架原来的用意是提供一个架构的实现,让开发人员可以在基于框架的基础上,快速地开发出遵循架构
的所需的应用程序,然而有些框架一旦被使用,应用程序就与框架发生了依赖,例如大量使用了框架的
API,或直接继承API 的某些类型等,都会使应用程序组件与框架发生依赖,而无法从框架中独立出来,
更别说当中的组件可以直接重用到另一个应用程序之中。
容器(Container)
Spring 提供容器功能,容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配
置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪
个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用
编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
换个更直白点的说明方式:容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,现
在容器都会自动帮您作好
62.典型地,一个java运行时刻以下面顺序查找和加载类:
(1):在bootstrap列表中的类-这些是体现java平台的类,例如在rt.jar中的类
(2):出现在扩展类列表中的类--这些类使用扩展机制框架来扩展java平台,使用位于运行时刻环境
的/lib/ext目录下的档案文件
(3):这些类不使用-classpath命令行选项或CLASSPATH环境变量标识的扩展机制框架.
63.java.util.concurrent.atomic
类Atomic
getAndSet(long newValue)设置为给定值,并返回旧值
64.JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样, Bootstrap ClassLoader
是用本地代码实现的,它负责加载核心Java Class(即所有java.*开头的类)。另外JVM还会提供两个
ClassLoader,它们都是用Java语言编写的,由Bootstrap ClassLoader加载;其中 Extension
ClassLoader负责加载扩展的Java class(例如所有javax.*开头的类和存放在JRE的ext目录下的类),
Application ClassLoader负责加载应用程序自身的类。
在Java 1.2后,java class的加载采用所谓的委托模式(Delegation Modle),当调用一个
ClassLoader.loadClass()加载一个类的时候,将遵循以下的步骤:
1)检查这个类是否已经被加载进来了?
2)如果还没有加载,调用父对象加载该类
3)如果父对象无法加载,调用本对象的findClass()取得这个类
65.深层复制与浅层复制
将句柄传入一个方法时,指向的仍然是相同的对象.
通常,我们调用一个方法是为了产生返回值,或者用它改变为其调用方法的那个对象的状态(方法其
实就是我们向那个对象“发一条消息”的方式)。很少需要调用一个方法来处理它的参数;这叫作利用
方法的“副作用”(Side Effect)。
克隆时要注意的两个关键问题是:几乎肯定调用super.clone().以及注意将克隆设为public
Object.clone()会检查原先的对象有多大,再为新对象腾出足够多的内存,将所有二进制位从原来的对
象复制到新对象。这叫作“按位复制”,而且按一般的想法,这个工作应该是由clone()方法来做的。但
在Object.clone()正式开始操作前,首先会检查一个类是否Cloneable,即是否具有克隆能力——换言之
,它是否实现了Cloneable接口。若未实现,Object.clone()就掷出一个CloneNotSupportedException违
例,指出我们不能克隆它。
Java对“是否等价”的测试并不对所比较对象的内部进行检查,从而核实它们的值是否相同。==和!=运
算符只是简单地对比句柄的内容。若句柄内的地址相同,就认为句柄指向同样的对象,所以认为它们是
“等价”的。所以运算符真正检测的是“由于别名问题,句柄是否指向同一个对象?”
只要没有新增需要克隆的句柄,对Object.clone()的一个调用就能完成所有必要的复制--无论clone()是
在层次结构多深的一级定义的。
对Vector进行深层复制的先决条件:在克隆了Vector后,必须在其中遍历,并克隆由Vector指向的每个
对象。
66.javascript的作用
页面中的某个事件(点击、选择等)被JavaScript代码捕捉到,JavaScript对事件涉及到的数据进行封
装,封装完成后以XML形式发送到服务器端,服务器端根据所给数据执行相应的查询处理封装出一份结果
返回给客户端,客户端JavaScript接收到返回结果后解析并展现在客户端。
67.mysql 常识和基本操作
字段类型
1.INT[(M)]
正常大小整数类型
2.DOUBLE[(M,D)] [ZEROFILL]
正常大小(双精密)浮点数字类型
3.DATE
日期类型。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示
DATE值,但是允许你使用字符串或数字把值赋给DATE列
4.CHAR(M)
定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOB TEXT
BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。
6.VARCHAR
变长字符串类型。
68.hibernate知识
当没有设定column attribute的时候,hibernate缺省地使用JavaBean的属性名作为字段名.
69.
检查违例(Checked Exceptions)和不检查违例(Unchecked Exceptions)
在Exception 的子类中有一个非常重要的类:RuntimeException(2)。Java中将自它或者它的子类衍生
出来的任何违例都称作“不检查违例” (Unchecked Exceptions),自其他Exception子类衍生出来的
违例都称作“检查违例”(Checked Exceptions)(3)。不检查违例包括的问题主要有:造型错误,数
组越界存取,空指针访问等,这些问题一般来说都是你程序编写的问题。简单地说,不检查违例就是那
些由编译器来检查而无需你程序中控制的违例。而检查违例是指那些你必须处理的违例,否则编译时会
产生一个编译错误。你可以选择下面任意一种方法来处理它:
70.aop.oop
OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑
单元划分.
AOP(面向切面编程)针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,
以获得逻辑过程中各部分之间的低耦合性的隔离效果
71.Java 动态代理
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到一下两个类
(1).Interface.InvocationHandler:该接口中仅定义了一个方法:invoke(Object obj,Method
method,Object[] args).第一个参数一般是指代理类,method是被代理的方法,args为该方法的参数数组.
这个抽象方法在代理中动态实现.
(2).Proxy:该类即为动态代理类,作用类似于上例中的ProxySubject,其中主要包含以下内容:
Protected Proxy(InvocationHandler h):构造函数,估计用于给内部的h赋值。
Static Class getProxyClass (ClassLoader loader, Class[] interfaces):获得一个代理类,其中
loader是类装载器,interfaces是真实类所拥有的全部接口的数组。
Static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)
:返回代理类的一个实例,返回后的代理类可以当作被代理类使用(可使用被代理类的在Subject接口中
声明过的方法)。
72. MYSQL学习
/0 一个ASCII 0(NUL)字符
/n 一个新行符
/t一个定位符
/r 一个回车符
/b 一个退格符
/' '
/" "
// /
/% %
/_ _
十六进制数
在字符串上下文,它们表现类似于一个二进制字符串,这里每一对十六进制数字被变换为一个字符。
mysql> select 0x5061756c;
-> Paul
当使用文本文件导入或导出格式(LOAD DATA INFILE, SELECT ... INTO OUTFILE)时,NULL可以用/N表示
。见7.16 LOAD DATA INFILE句法。
列类型
如果指定了ZEROFILL 会自动地增加UNSIGNED属性
类型 有符号范围 无符号范围
TINYINT -128--127 0-255
SMALLINT -32768--32767 0-65535
MEDIUMINT -8388608--8388607 0-16777215
INT -2147483648-2147483647 0-4294967295
INTEGER INT的一个同义词
BIGINT -9223372036854775808 18446744073709551615
FLOAT -3.402823466E+38到-1.175494351E-38 1.175494351E-38到3.402823466E+38
DOUBLE -1.7976931348623157E+308到-2.2250738585072014E-308 0和2.2250738585072014E-308到
1.7976931348623157E+308
DOUBLE PRECISION[(M,D)] [ZEROFILL]
REAL DOUBLE的同义词
DECIMAL 一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列
NUMERIC(M,D) [ZEROFILL] 这是DECIMAL的一个同义词。
DATE '1000-01-01'到'9999-12-31' 以'YYYY-MM-DD'格式来显示DATE值
DATETIME '1000-01-01 00:00:00'到'9999-12-31 23:59:59' 'YYYY-MM-DD HH:MM:SS'
TIMESTAMP '1970-01-01 00:00:00'到2037年的某时 以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或
YYMMDD格式来显示TIMESTAMP值
TIME 一个时间。范围是'-838:59:59'到'838:59:59'
YEAR[(2|4)] MySQL以YYYY格式来显示YEAR值
CHAR(M) [BINARY] M的范围是1 ~ 255个字符
[NATIONAL] VARCHAR(M) [BINARY] M的范围是1 ~ 255个字符
TINYBLOB
TINYTEXT 一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。
BLOB
TEXT
MEDIUMBLOB
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。见7.7.1 隐式列指定变化。
LONGBLOB
LONGTEXT
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。见7.7.1 隐式列指定变化
ENUM('value1','value2',...) 一个ENUM最多能有65535不同的值。
SET('value1','value2',...) 一个SET最多能有64个成员。
一个表最多可有16个索引,一个索引可以由最多15个列组成
运算符
mysql> SELECT 0 = 'x6';
-> 1
<> != 不等于
<=> 安全等于Null
INTERVAL(N,N1,N2,N3,...)
如果N< N1,返回0,如果N< N2,返回1等等。所有的参数被当作整数。为了函数能正确地工作,它要求
N1<N2<N3< ...<Nn。这是因为使用二进制搜索(很快)。
expr REGEXP pat
expr RLIKE pat
执行一个字符串表达式expr对一个模式pat的模式匹配。模式可以是一个扩充的正则表达式。见MySQL 正
则表达式句法的 H 描述.如果expr匹配pat,返回1,否则返回0。RLIKE是REGEXP的一个同义词,提供了
与mSQL的兼容性。注意:因为MySQL在字符串中使用C转义语法(例如,“/n”), 你必须在你的REGEXP字
符串重复任何“/”。在MySQL3.23.4中,REGEXP对于正常的(不是二进制)字符串是忽略大小写。
STRCMP(expr1,expr2) 比较
如果字符串相同,STRCMP()回来0,如果第一参数根据当前的排序次序小于第二个,返回-1,否则返回1
。
BINARY
BINARY操作符强制跟随它后面的字符串为一个二进制字符串。即使列没被定义为BINARY或BLOB,这是一
个强制列比较区分大小写的简易方法
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决
于它被使用的上下文环境。
IF(expr1,expr2,expr3)
如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数
字或字符串值,取决于它被使用的上下文。
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE
result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
第一个版本返回result,其中value=compare-value。第二个版本中如果第一个条件为真,返回result。
如果没有匹配的result值,那么结果在ELSE后的result被返回。如果没有ELSE部分,那么NULL被返回。
数学函数
所有的数学函数在一个出错的情况下返回NULL。
FLOOR(X) 返回不大于X的最大整数值
CEILING(X) 返回不小于X的最小整数值
ROUND(X) 返回参数X的四舍五入的一个整数。
EXP(X) 返回值e(自然对数的底)的X次方。
RAND()
RAND(N)
返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
LEAST(X,Y,...)
有2和2个以上的参数,返回最小(最小值)的参数。参数使用下列规则进行比较:
如果返回值被使用在一个INTEGER上下文,或所有的参数都是整数值,他们作为整数比较。
如果返回值被使用在一个REAL上下文,或所有的参数是实数值,他们作为实数比较。
如果任何参数是一个大小敏感的字符串,参数作为大小写敏感的字符串被比较。
在其他的情况下,参数作为大小写无关的字符串被比较。
TRUNCATE(X,D)
返回数字X,截断为D位小数。如果D为0,结果将没有小数点或小数部分。
字符串函数
如果结果的长度大于服务器参数max_allowed_packet,字符串值函数返回NULL
对于针对字符串位置的操作,第一个位置被标记为1
ASCII(str)
返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
ORD(str)
如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second
byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码。
如果最左面的字符不是一个多字节字符。返回与ASCII()函数返回的相同值
CONV(N,from_base,to_base)
在不同的数字基之间变换数字。返回数字N的字符串数字,从from_base基变换为to_base基,如果任何参
数是NULL,返回NULL。参数N解释为一个整数,但是可以指定为一个整数或一个字符串。最小基是2且最
大的基是36。如果to_base是一个负数,N被认为是一个有符号数,否则,N被当作无符号数。 CONV以64
位点精度工作。
BIN(N)
返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果N是
NULL,返回NULL。
OCT(N)
返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,
返回NULL。
HEX(N)
返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果
N是NULL,返回NULL。
CHAR(N,...)
CHAR()将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。NULL值被跳过。
CONCAT(str1,str2,...)
返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数
被变换为等价的字符串形式。
LENGTH(str)
OCTET_LENGTH(str)
CHAR_LENGTH(str)
CHARACTER_LENGTH(str)
返回字符串str的长度
LOCATE(substr,str)
POSITION(substr IN str)
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
LOCATE(substr,str,pos)
返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。
INSTR(str,substr)
返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被
颠倒。
LPAD(str,len,padstr)
返回字符串str,左面用字符串padstr填补直到str是len个字符长。
RPAD(str,len,padstr)
返回字符串str,右面用字符串padstr填补直到str是len个字符长。
LEFT(str,len)
返回字符串str的最左面len个字符。
RIGHT(str,len)
返回字符串str的最右面len个字符。
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)
MID(str,pos,len)
从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。
SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
从字符串str的起始位置pos返回一个子串
SUBSTRING_INDEX(str,delim,count)
返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到
左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
LTRIM(str)
返回删除了其前置空格字符的字符串str。
RTRIM(str)
返回删除了其拖后空格字符的字符串str。
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
返回字符串str,其所有remstr前缀或后缀被删除了。如果没有修饰符BOTH、LEADING或TRAILING给出,
BOTH被假定。如果remstr没被指定,空格被删除。
SOUNDEX(str)
返回str的一个同音字符串。听起来“大致相同”的2个字符串应该有相同的同音字符串。一个“标准”
的同音字符串长是4个字符,但是SOUNDEX()函数返回一个任意长的字符串。你可以在结果上使用
SUBSTRING()得到一个“标准”的 同音串。所有非数字字母字符在给定的字符串中被忽略。所有在A-Z之
外的字符国际字母被当作元音
SPACE(N)
返回由N个空格字符组成的一个字符串。
REPLACE(str,from_str,to_str)
返回字符串str,其字符串from_str的所有出现由字符串to_str代替。
REPEAT(str,count)
返回由重复countTimes次的字符串str组成的一个字符串。如果count <= 0,返回一个空字符串。如果
str或count是NULL,返回NULL
REVERSE(str)
返回颠倒字符顺序的字符串str。
INSERT(str,pos,len,newstr)
返回字符串str,在位置pos起始的子串且len个字符长得子串由字符串newstr代替。
ELT(N,str1,str2,str3,...)
如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是
FIELD()反运算。
FIELD(str,str1,str2,str3,...)
返回str在str1, str2, str3, ...清单的索引。如果str没找到,返回0。FIELD()是ELT()反运算。
FIND_IN_SET(str,strlist)
如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被“,”分隔的子
串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为SET的列,
FIND_IN_SET()函数被优化而使用位运算!如果str不是在strlist里面或如果strlist是空字符串,返回0
。如果任何一个参数是NULL,返回NULL。如果第一个参数包含一个“,”,该函数将工作不正常
MAKE_SET(bits,str1,str2,...)
返回一个集合 (包含由“,”字符分隔的子串组成的一个字符串),由相应的位在bits集合中的的字符串
组成。str1对应于位0,str2对应位1,等等。在str1, str2, ...中的NULL串不添加到结果中。
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])
返回一个字符串,在这里对于在“bits”中设定每一位,你得到一个“on”字符串,并且对于每个复位
(reset)的位,你得到一个“off”字符串。每个字符串用“separator”分隔(缺省“,”),并且只有
“bits”的“number_of_bits” (缺省64)位被使用。
LCASE(str)
LOWER(str)
返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成小写。该函数对
多字节是可靠
UCASE(str)
UPPER(str)
返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成大写。该函数对
多字节是可靠的。
LOAD_FILE(file_name)
读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,
而且你必须有file权限。文件必须所有内容都是可读的并且小于max_allowed_packet。如果文件不存在
或由于上面原因之一不能被读出,函数返回NULL。
日期和时间函数
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内。
DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内。
MONTH(date)
返回date的月份,范围1到12。
DAYNAME(date)
返回date的星期名字。
MONTHNAME(date)
返回date的月份名字。
QUARTER(date)
返回date一年中的季度,范围1到4
WEEK(date)
WEEK(date,first)
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式
WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二
个参数是1,从星期一开始。
YEAR(date)
返回date的年份,范围在1000到9999。
HOUR(time)
返回time的小时,范围是0到23。
MINUTE(time)
返回time的分钟,范围是0到59。
SECOND(time)
回来time的秒数,范围是0到59。
PERIOD_ADD(P,N)
增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
PERIOD_DIFF(P1,P2)
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值
TIME_FORMAT(time,format)
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修
饰符。其他修饰符产生一个NULL值或0
CURDATE()
CURRENT_DATE
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用
NOW()
SYSDATE()
CURRENT_TIMESTAMP
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还
是在数字的上下文被使用。
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果
UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可
以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一
个数字。
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在
一个字符串还是或数字上下文中被使用。
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函
数列出的条目同样的修饰符。
SEC_TO_TIME(seconds)
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符
串还是在数字上下文中被使用
TIME_TO_SEC(time)
返回time参数,转换成秒。
其他函数
DATABASE()
返回当前的数据库名字
USER()
SYSTEM_USER()
SESSION_USER()
返回当前MySQL用户名。
ENCRYPT(str[,salt])
使用Unix crypt()系统调用加密str。salt参数应该是一个有2个字符的字符串。(MySQL 3.22.16中,
salt可以长于2个字符。)
ENCODE(str,pass_str)
使用pass_str作为口令加密str。为了解密结果,使用DECODE()。结果是一个二进制字符串,如果你想要
在列中保存它,使用一个BLOB列类型。
DECODE(crypt_str,pass_str)
使用pass_str作为口令解密加密的字符串crypt_str。crypt_str应该是一个由ENCODE()返回的字符串。
MD5(string)
对字符串计算MD5校验和。值作为一个32长的十六进制数字被返回可以,例如用作哈希(hash)键。
LAST_INSERT_ID([expr])
返回被插入一个AUTO_INCREMENT列的最后一个自动产生的值。见20.4.29 mysql_insert_id()。
FORMAT(X,D)
格式化数字X为类似于格式'#,###,###.##',四舍五入到D为小数。如果D为0,结果将没有小数点和小数
部分。
VERSION()
返回表明MySQL服务器版本的一个字符串。
GET_LOCK(str,timeout)
试图获得由字符串str给定的一个名字的锁定,第二个timeout为超时。如果锁定成功获得,返回1,如果
尝试超时了,返回0,或如果发生一个错误,返回NULL(例如从存储器溢出或线程用mysqladmin kill被杀
死)。当你执行RELEASE_LOCK()时、执行一个新的GET_LOCK()或线程终止时,一个锁定被释放。该函数可
以用来实现应用锁或模拟记录锁,它阻止其他客户用同样名字的锁定请求;赞成一个给定的锁定字符串
名字的客户可以使用字符串执行子协作建议的锁定。
RELEASE_LOCK(str)
释放字符串str命名的通过GET_LOCK()获得的锁。如果锁被释放,返回1,如果锁没被这个线程锁定(在此
情况下锁没被释放)返回0,并且如果命名的锁不存在,返回NULL。如果锁从来没有通过调用GET_LOCK()
获得或如果它已经被释放了,锁将不存在
BENCHMARK(count,expr)
BENCHMARK()函数重复countTimes次执行表达式expr,它可以用于计时MySQL处理表达式有多快。结果值
总是0。意欲用于mysql客户,它报告查询的执行时间。
与GROUP BY子句一起使用的函数
COUNT(expr)
返回由一个SELECT语句检索出来的行的非NULL值的数目。
COUNT(DISTINCT expr,[expr...])
返回一个不同值的数目。
AVG(expr)
返回expr的平均值。
MIN(expr)
MAX(expr)
返回expr的最小或最大值。MIN()和MAX()可以有一个字符串参数;在这种的情况下,他们返回最小或最
大的字符串值
SUM(expr)
返回expr的和。注意,如果返回的集合没有行,它返回NULL!
STD(expr)
STDDEV(expr)
返回expr标准差(deviation)。这是对 ANSI SQL 的扩展。该函数的形式STDDEV()是提供与Oracle的兼容
性。
BIT_OR(expr)
返回expr里所有位的位或。计算用 64 位(BIGINT)精度进行。
BIT_AND(expr)
返回expr里所有位的位与。计算用 64 位(BIGINT)精度进行。
mysql> SELECT 0 = 'x6';
-> 1
扩展正则表达式的一些字符是:
“.”匹配任何单个的字符。
一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命
名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。
“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的
任何数量的数字,而“.*”匹配任何数量的任何东西。
正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹
配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。
如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。
为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“
$”。
69.在JavaSE程序中,我们一般使用classpath来作为存放资源的目的地。但是,在Web应用程序中,我们
一般使用classpath外面的WEB-INF及其子目录作为资源文件的存放地。
相对路径:相对与某个基准目录的路径.包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"
代表Web应用的根目录,和物理路径的相对表示,例如:"./"代表当前目录,"../"代表上级目录.这种类似的
表示,也属于相对路径.
70.关于JSP/Servlet中的相对路径和绝对路径
2.1服务器端的地址
服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的
(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候
在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。
其用到的地方有:
forward:servlet中的request.getRequestDispatcher(address);这个address是
在服务器端解析的,所以,你要forward到a.jsp应该这么写:
request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,
其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。
sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>
2.22、客户端的地址
所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的,
而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。
Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的,
所以,如果提交到a.jsp为:action="/webapp/user/a.jsp"或action="<%=request.getContextPath
()%>"/user/a.jsp;
提交到servlet为actiom="/webapp/handleservlet"
Javascript也是在客户端解析的,所以其相对路径和form表单一样。
因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上
<%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。
另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样
当文件移动时,很容易出问题。
71.XHTML是The Extensible HyperText Markup Language(可扩展超文本标识语言)的缩写。HTML是一种
基本的WEB网页设计语言,XHTML是一个基于XML的置标语言,看起来与HTML有些相象,只有一些小的但重
要的区别,XHTML就是一个扮演着类似HTML的角色的XML,所以,本质上说,XHTML是一个过渡技术,结合
了部分XML的强大功能及大多数HTML的简单特性。
XSLT是一种把XML文件转换成XHTML文档或者其他的XML文档的语言
XPath是一种由于操作XML文档的语言。
72.内连接时,返回查询结果集合中的仅是符合查询条件和连接条件的行.而采用外连接时,它返回到查询
结果集合中不仅包含符合连接条件的行,而且还包含左表(左外连接时),右表(右外连接时)或两个边接表(
全外连接)中的所有数据行.
交叉连接不带where子句,它返回被连接的两个表所有数据行的笛卡尔积.返回到结果集合中的数据行等于
第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数.
73.所有的双向关联需要有一端被设置为inverse,在一对多中是多的一端,多对多任意
74.put方法
put方法的作用是将一个对象(value)加入到map中,它的key为(key)。如果key重复了,将替换掉旧的值
,并将旧值返回。如果key没有重复,将新的值插入。该部分代码如下(有删节):
75.
1、 MAP
特点:同键的新值将覆盖旧值。
2、Set
特点:无序排列,不会存在重复的值,添加重复值也不会报错.Set可以加入null值
3、List
特点:有序排序,可以加入重复的元素
4、Collections
特点:Collections.class是集合的工具方法类
5、Properties
特点:Properties继承自Hashtable,是Map的一个实现。不过它在读取Properties文件方法特别方便
76.frame跳转
java.io.PrintWriter out1 = response.getWriter();
out1.println("<html>");
out1.println("<script>");
out1.println("window.open ('../login.jsp', '_top')");
out1.println("</script>");
out1.println("</html>");
77.
把Putty下载到机器上,双击putty.exe,就出现如图1的配置界面。选择“Session”,在“Host
Name(or IP address)”输入框中输入欲访问的主机名或IP,比如server1或192.168.9.4。端口号(Port
)根据使用的协议有所区别,ssh 默认使用22,telnet默认使用23,rlogin默认使用513。在“Protocol
”单选栏中选择使用的协议,一般是telnet或ssh,这取决于服务器提供的服务。在“Saved Session”
输入栏中输入任务的名字,单击“Save”按钮,就可以把任务配置保存起来了。
78.中断线程的方法:1.共享变量 2.interrupt
79.在Java中,一个类用其完全匹配类名(fully qualified class name)作为标识,这里指的完全匹配类
名包括包名和类名。但在JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识。因此,
如果一个名为Pg的包中,有一个名为Cl的类,被类加载器KlassLoader的一个实例kl1加载,Cl的实例,
即C1.class在JVM中表示为 (Cl, Pg, kl1)。这意味着两个类加载器的实例(Cl, Pg, kl1) 和 (Cl, Pg,
kl2)是不同的,被它们所加载的类也因此完全不同,互不兼容的。那么在JVM中到底有多少种类加载器的
实例?下一节我们揭示答案。
1.JDBC事务
事务是将一些SQL语句作为一个整体来很执行,要么所有语句全部完成,要么一条语句都不执行。当调用方法commit或rollback时,当前事务即告结束,另一个事务随即开始。
缺省情况下,新连接将于自动提交的模式,也就是说,当执行完语句后,将自动对那个语句调用commit方法。这种情况下,由于每个语句都是被单独提交的,因此,一个事务只由一个语句组成。如果禁用自动提交模式,事务将要等到commit或rollback方法被显式调用才结束,因此,它将包括上一次调用commt或 rollback方法以来所有执行过的语句。对于第二种情况,事务中的所有语句将作为组来提交或还原。
isPopupTrigger() 返回此鼠标事件是否为该平台的弹出菜单触发的事件
InputEvent中的consume()的作用是 以便不会按照默认的方式由产生此事件的源代码处理此事件。
2.javax.swing 类JToolBar
方法setFloatable(boolean b)
设置floatable属性,如果要移动工具栏,此属性必须设置为 true。
3.Set,因为Set 不允许包括重复的元素而且排序和我们无关。
4.什么是JMX JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标
准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理。
5.JCA 是一个Java 标准体系机构,用来连接和访问后端系统,例如应用程序包和技术。 必须根据JCA
规范编写适配器。任何符合JCA 的适配器都能够插入支持JCA 的J2EE 应用程序服务器。
6.类的修饰
abstract不能直接产生属于这个类的对象
final不能被其他任何类继承
public不但能被同一程序包的类所调用,而且也能被其他程序包的类所调用
friendly(缺省)只能被本包中的其他类所调用
变量和方法的修饰
public 任何其他类和对象 只要能看到这个类的话。
protected 同一类和同一包可以使用。不同的包的类要使用,必须是该类的子类
可以存取变量和调用
private 不允许任何其他类存取和调用
friendly 同一程序包中出现的类才可以直接使用他的数据和方法
7.只有对象的方法可以访问对象的变量
8.利用接口可以实现多重继承(可以同时实现多个接口)
9.RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机
上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接
口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚
拟机的参数为 "unmarshalled")上。该方法终止时,将编组来自远程机的结果并将结果发送到调用方的
虚拟机。如果方法调用导致抛出异常,则该异常将指示给调用方。
10.CORBA是对象管理集团(OMG,http://www.omg.org/)开发的一系列的规范,CORBA的目标达到平台无
关、编程语言无关、以及网络传输协议无关的互操作,它被认为是最主要的分布对象的体系结构之一。
11.JFrame类中的 setDefaultLookAndFeelDecorated(boolean defaultLookAndFeelDecorated) 提供
一个关于新创建的JFrame是否应该具有当前外观为其提供的Window装饰(如边框、关闭窗口的小部件,
标题等等)的提示。
12.javax.sound.sampled中的类 AudioInputStream
音频输入流是具有指定音频格式和长度的输入流。长度用示例帧表示,不用字节表示。提供几种方法
,用于从流读取一定数量的字节,或未指定数量的字节。音频输入流跟踪所读取的最后一个字节。可以
跳过任意数量的字节以到达稍后的读取位置。音频输入流可支持标记。设置标记时,会记住当前位置,
以便可以稍后返回到该位置。
13.主要的声音文件类型
AU-扩展名为Au或snd,适用于短的声音文件。
wav-扩展名为WAV。能被所有支持声音的windows应用程序播放。
AIFF——扩展 名为AIF或IEF音频互换文件格式
MIDI——扩展名为MID,乐器数字接口 MIDI是为音乐制造业所认可的标准,主要用于控制诸如合成器
和声卡之类的设备。
14.JMF java媒体框架
该核心框架支持不同媒体(如:音频 视频输出)间的时间同步。它是一个标准的扩展框架。允许用
户制作纯音频和视频流。
15.Java虚拟机(JVM)是java Virtual Machine的缩写,它是一个虚拟出来的计算机,是通过在实际计
算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬件架构,如处理器,堆栈,
寄存器等,还具有相应的指令系统。
java语言最重要的特点就是可以在任何操作系统中运行。使用Java虚拟机就是为了支持与操作系统无关
,在任何系统中都可以运行。
Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行
的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,实际上最终还
是把字节码解释成具体平台上的机器指令执行。
JRE 是Java运行环境 (Java Runtime Enviroment) 的缩写。它基本上就和Java虚拟机是同一个概念。
一般说来,在谈论一个具体的产品的时候,可以说“JRE”,而说到理论中的一个模型的时候,我们常用
的是“Java虚拟机”。
要使用Java程序,JRE是必不可少的环境。
16.RAM(Random-Access Memory)-随机存取存储器,一种存储单元结构,用于保存CPU处理的数据信息。
“随机”存取是与“顺序(serial)”存取相对而言的,意思是CPU可以从 RAM中任意地址中直接读取所
需的数据,而不必从头到尾一一查找
17.栈(stack)与堆(heap)
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与
生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内
存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是
,由于要在运行时动态分配内存,存取速度较慢。
基本类型(除string)存于栈中;包装类数据如:Integer,String,Double等将相应的基本数据类型包
装起来的类。这些类数据全部存在于堆中。
==号,根据JDK的说明,只有在两个引用都指向了同一个对象时才返回真值。
String str1 = new String("abc");
String str2 = "abc";
System.out.println(str1==str2); //false
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
18.AbstrctAction 此类提供JFC Action接口的默认实现。它定义了一些标准行为,比如Action对象属性
(icon,text和enabled)的get和set方法。开发人员只需为此抽象类创建子类并定义actionPerformed方
法即可。
19. JPopupMenu.add(Action a) 将指派指定 Action 对象的新菜单项追加到菜单的末尾。
Action inviteAction = new AbstractAction() {
public void actionPerformed(ActionEvent actionEvent) {
ConferenceUtils.inviteUsersToRoom(groupChatRoom.getConferenceService(),
groupChatRoom.getRoomname(), null);
}
};
inviteAction.putValue(Action.NAME, Res.getString("menuitem.invite.users"));
inviteAction.putValue(Action.SMALL_ICON, SparkRes.getImageIcon
(SparkRes.CONFERENCE_IMAGE_16x16));
popup.addSeparator();
popup.add(inviteAction);
20.正则表达式
Pattern对象,被Known as patterns, 是编译的正则表达式
Mattcher对象,或者matchers,在实现了java.lang.CharSequence接口并作为文本source的字符序列中
定位解释matchers的引擎。
PatternSyntaxException 对象描述非法的regex patterns
(1).句点符号--通配符 t.n--tan,ten,tin,ton
(2).方括号符号--之内只能匹配单个字符t[aeio]n--tan,ten,tio,ton
(3)."或 "符号-- t(a|e|i|o|oo)n-tan,ten,tin,toon
(4).表示匹配次数的符号---用来确定紧靠该符号左边的符号出现的次数。
*--0次或者多次
+--一次或者多次
?--0次或者一次
{n}--恰好n次
{n,m}--从n次到m次
- 表示一个范围,比如从0到9
比如999-99-9999
[0-9]{3} /-[0-9]{2} /-[0-9]{4} /-连字符
[0-9]{3} /-?[0-9]{2} /-?[0-9]{4} /-? 可选的连字符
(5).“否”符号
“^”在方括号内,表示不想要匹配的字符。
(6). 圆括号和空白符号
“/s”符号是空白符号 必需的空格
“/s*”可选的空格
(7)其他符号
/d=[0-9]
/D=[^0-9]
/w=[A-Z0-9]
/W=[^A-Z0-9]
/s=[/t/n/r/f]
/S=[^/t/n/r/f]
Matcher方法如下:
Matcher appendReplacement(StringBuffer sb, String replacement)
将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添
加到一个StringBuffer对象里。
StringBuffer appendTail(StringBuffer sb)
将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。
boolean find()
尝试在目标字符串里查找下一个匹配子串。
int groupCount()
返回当前查找所获得的匹配组的数量。
string group(int group)
返回当前查找而获得的与指定的组匹配的子串内容
21.java.awt.Toolkit 此类是Abstract Window Toolkit的所有实际实现的抽象超类。Toolkit的子类被
用于将各种组件绑定到特定本机工具包实现
22.java.awt.point表示(x,y)坐标空间中的位置的点,以整数精度来指定
23.java.swing.JList 该组件允许用户从列表中选择一个或多个对象。单独,模型ListModel表示列表的
内容。使用构建ListModel实例的JList构造方法,可以方便地显示对象的数组或向量。
24.DefaultListModel此类以松散方式实现java.util.Vector API,它实现1.1.x版本的
java.util.Vector,没有Collection类的支持,并且在发生更改时通知ListDataListener
25.javax.swing.AbstractButton
定义按钮和菜单项的一般行为
setMnemonic(int mnemonic)设置当前模型上的键盘助记符
25.定义菜单和按钮的
26.java.lang.String中的方法replaceFirst(String regex,String replacement) 使用给定的
replacement字符串替换此字符串匹配给定的正则表达式的第一个子字符串。
27。异常处理问题
结论一:既然捕获了异常,就要对它进行适当的处理。不要捕获异常之后又把它丢弃,不予处理。
结论二:在catch语句中应尽可能指定具体的异常类型,必要时使用多个catch.不要试图处理所有可能出
现的异常
结论三: 保证所有的资源都能被正确的释放。充分运用finally关键词。
结论四:在异常处理模块中提供适量的错误原因信息,组织错误信息使其易于理解和阅读。
结论五:尽量减小try块的体积。
结论六:全面考虑可能出现的异常以及这些异常对执行流程的影响。
28.javax.swing.JDesktopPane
用于创建多文档界面或虚拟桌面的容器。用户可创建JInternalFrame对象并将其添加到
JDesktopPane.JDesktopPane扩展了JLayeredPane,管理可能的重叠内部窗体。它还维护了对
DesktopManager 实例的引用,这是由 UI 类为当前的外观 (L&F) 所设置的。注意,JDesktopPane 不支
持边界。
29.Java程序性能和速度优化实例
(1)应用具有I/O Buffer功能的CLass
(2)字符串运算处理。运用BUFFER和append()方法,避免使用String class的“+=”操作,以减少JVM在
内存中创建新的对象,占用资源,增加JVM回收资源负担。
(3)处理昂贵的数据库初始化
30.方法javax.swing.JComponent.setDoubleBuffered()
设置此组件是否应该使用缓冲区进行绘制
31.ArrayList,Vector,LinkedList的存储性能和特性
ArrayList和Vector都使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素
,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而
插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而
LinkedList使用双向链表实现存储,按序号索引数据需要进行前向和后向遍历,但是插入数据时只需要
记录本项的前后项即可,所以插入速度较快。
32.Collection和Collections的区别
Collection是集合类的上级接口,继承欲它的接口主要有Set和List
Collections是针对集合类的一个帮助类,它提供一系列静态方法实现对各种集合的搜索、排序、线程安
全化等操作
33.HashMap和Hashtable的区别
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap
允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
HashMap把Hashtable的Contains方法去掉了,改成containsvalue和containsKey。因为Contains方法容
易让人引起误解
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不
需要自己为它的方法实现同步,而HashMap就必须为之提供同步
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
34. DCOM概述
Microsoft的分布式COM(DCOM)扩展了组件对象模型技术(COM),使其能够支持在局域网、广域网甚至
Internet上不同计算机的对象之间的通讯。使用DCOM,你的应用程序就可以在位置上达到分布性,从而
满足你的客户和应用的需求。
因为DCOM是世界上领先的组件技术COM的无缝扩展,所以你可以将你现在对基于COM的应用、组件、工具
以及知识转移到标准化的分布式计算领域中来。当你在做分布式计算时,DCOM处理网络协议的低层次的
细节问题,从而使你能够集中精力解决用户所要求的问题。
回答
35.DAO(Data Access Object):数据访问对象。
36.ORM(Object/Relation Mapping):对象关系映射
37.类与类之间存在以下关系:
(1)泛化(Generalization):继承关系,实现关系 ———》
(2)关联(Association):局部变量,方法的参数,以及静态方法的调用-------->
(3)依赖(Dependency): 使用实例变量实现————
(4)聚合(Aggregation):较强的关联关系,强调的是整体与部分的关系。——<>
38.一个完整的RMI实例
(1)创建远程接口及声明远程方法
远程接口必须扩展接口java.rmi.Remote;
远程接口方法必须抛出java.rmi.RemoteException
(2)实现远程接口及远程方法(继承UnicastRemoteObject)
(3)启动RMI注册服务,并注册远程对象
(4)客户端查找远程对象,并调用远程方法
(5)执行程序:启动服务;运行客户端
创建RMI程序的6个步骤
(1) 定义一个远程接口的接口,该接口的每一个方法必须声明它将产生一个 RemoteException
(2)定义一个实现该接口的类
(3)使用RMIC程序生成远程实现所需的残根和框架
(4)创建一个服务器,用于发布2中写好的类
(5)创建一个客户程序进行RMI调用
(6)启动rmiRegistry并运行自己的远程服务器和客户程序。
(6)
39.sleep()和wait()的区别
sleep()是使县城停止一段时间的方法.时间间隔期满后,线程不一定立即恢复执行
wait()是线程交互时,如果线程对一个同步对象X发出一个wait()调用,该线程会暂停执行,被调对象进
入等待状态,直到被唤醒或等待时间到.
sleep()不释放同步锁,wait()释放同步锁
40.java.lang.reflect.Field
Field提供有关类或接口的单个字段的信息,以及对它的动态访问权限.反射的字段可能是一个类(静态)
字段或实例字段.
41.线程学习
Volatile 修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值.而且,当成员
变量发生变化时.强迫线程将变化值回写到共享内存.这样在任何时刻,两个不同的线程总是看到某个成员
变量的同一个值.
由于使用volatile屏蔽掉了VM中必要的代码优化,所以在效率上比较低,因此一定要在必要的时候才使用
此关键字.
yield()使得线程放弃当前分得的CPU时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次
分得CPU时间.
Thread.Interrupt实事上并没有立即中断一个正在运行的线程.采用 Thread.interrupt()方法并没有中
断一个正在运行的线程。此方法事实上做的只是如果线程被封锁则抛出一个中断信号,由此线程退出了
封锁状态。
线程的四种状态:
(1)新状态
(2)可执行状态
(3)死亡状态
(4)阻塞状态
wait()和notify()方法必须在synchronized方法或块中调用.因为只有在synchrinized方法或块中当前
线程才占有锁,才有锁可以释放
join()这个函数的作用是使得目前正在运行的线程假如为a停下来,一直到调用join()方法的这个线程b
被执行完毕,在继续开始线程a
42.javax.swing.JSplitPane
用于分隔两个(只能两个)Component .
43.Collection和Collections的区别
Collection是集合类的上级接口,继承于他的接口主要有Set和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索,排序,线程安
全化等操作
44. HashMap和Hashtable的区别
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap
允许空键值(key),效率上可能高于Hashtable
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容
易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不
需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
45.、abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本
行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例。然而
可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽
象静态方法。 Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取
而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口
而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。
接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即
将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法
。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接
口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
46.JOptionPane有助于方便地弹出要求用户提供值或是向其发出通知的标准对话框.
47.java调用可执行文件
Runtime.getRumtime().exec("所在目录");
48.逻辑的端口分类
按端口号分布划分
(1)知名端口(0-1023)
(2)动态端口(1024-65535)
按协议类型划分
(1)TCP端口
(2)UDP端口
49.脚本语言
(1).脚本语言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。
HTML通常用于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。
(2).脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程
语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.
(3).与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。
注:脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。
JAVASCRIPT,ASP,PHP,PERL都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。
(4).脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c/c++
等可以编译成二进制代码,以可执行文件的形式存在.
脚本语言不需要编译,可以直接用,由解释器来负责解释。
(5).脚本语言一般都是以文本形式存在,类似于一种命令.
50.观察者模式
被观察者继承Observable类
观察者继承Observer接口
在被观察者之上添加观察者对象
当被观察者的值发生变化是通知观察者进行更新
一个 observable 对象可以有一个或多个观察者。观察者可以是实现了 Observer 接口的任意对象。一
个 observable 实例改变后,调用 Observable 的 notifyObservers 方法的应用程序会通过调用观察者
的 update 方法来通知观察者该实例发生了改变。
事件监听就是用这种模式
51.用Porperites文件来保存实际上就是创建一个Properites文件,在程序关闭的时候,将数据写入文件
,再等程序启动的时候,从这个Properties文件中读出数据。
52.Object serialization的定义
Object serialization 允许你将实现了Serializable接口的对象转换为字节序列,这些字节序列可以被
完全存储以备以后重新生成原来的对象。
有实现Serializable借口的对象才能写入ObjectOutputStream,用这个stream可以直接传输Java对象,
不管是通过 socket在网络上传还是写入本地文件系统。这个接口没有方法,其存在的意义就是识别能通
过ObjectOutputStream传送的对象。至于为什么这样在RMI的FAQ中有解释,主要是防止程序员无意或胡
乱的用ObjectOutputStream写对象。
Serializable这个接口只是一个标识接口,没有任何方法,主要是用于实例的序列化。只要有类实现了
这个接口,就等于告诉jvm这个实例可以被序列化,只是起到一个标识的作用。在分布式系统中基本被要
求实现这个接口。"
53.java.lang.Class.getResource(String name)
查找带有给定名称的资源
java.lang.Thread.getContextClassLoader()
getContextClassLoader()
返回该线程的上下文 ClassLoader。
得到Classpath和当前类的绝对路径的一些方法
1,FileTest.class.getResource("")
得到的是当前类FileTest.class文件的URI目录。不包括自己!
2,FileTest.class.getResource("/")
得到的是当前的classpath的绝对URI路径。
3,Thread.currentThread().getContextClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
4,FileTest.class.getClassLoader().getResource("")
得到的也是当前ClassPath的绝对URI路径。
5,ClassLoader.getSystemResource("")
得到的也是当前ClassPath的绝对URI路径。
54.abstract class和interface的区别
一:从语法定义的层面看
抽象类可以有自己的数据成员,也可以有非abstract的成员方法
而interface,只能有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一
般不定义数据成员),所有的成员方法都是abstract的.
从某种意义上说,interface是一种特殊形式的abstracr class.
二:从编程角度看
首先,abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一
个类却可以实现多个interface。也许,这是Java语言的设计者在考虑Java对于多重继承的支持方面的一
种折中考虑吧。
其次,在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却
不能拥有默认行为,为了绕过这个限制,必须使用委托,但是这会 增加一些复杂性,有时会造成很大的
麻烦。
三:从设计理念层面看abstract class和interface
前面已经提到过,abstarct class在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和
派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的(参考文献〔3〕中有关于
"is a"关系的大篇幅深入的论述,有兴趣的读者可以参考)。对于interface 来说则不然,并不要求
interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。
为了使论述便于理解,下面将通过一个简单的实例进行说明。
abstract class表示的是"is a"关系,interface表示的是"like a"关系
55.SOA
又称面向服务的框架(Service oriented architecture),
56.java.awt.MediaTracker
MediaTracker类是一个跟踪多种媒体对象状态的实用工具类.媒体对象可以包括音频剪辑和图像,但目前
仅支持图像
要使用媒体跟踪器,需要创建一个 MediaTracker 实例,然后对每个要跟踪的图像调用其 addImage 方
法。另外,还可以为每个图像分配一个惟一的标识符。此标识符可控制获取图像的优先级顺序。它还可
用于标识可单独等待的惟一图像子集。具有较低 ID 的图像比具有较高 ID 的图像优先加载。
由于动画图像加载和绘制的多部分特性,跟踪动画图像可能不是始终可用的,但这一功能的确受支持。
MediaTracker 在完成加载动画图像的第一帧之后就会认为动画图像已经加载完毕。这时,MediaTracker
会向所有等待者发出图像已完全加载的信号。如果在第一帧加载完之后没有 ImageObserver 查看此图像
,则该图像可能会自我刷新来保存资源(
waitForID(int id)
开始加载由此媒体跟踪器跟踪且具有指定标识符的所有图像。
57. java.awt.Window
addNotify()
通过创建到其本机屏幕资源的连接,使此窗口变得可显示。
58.java.awt.Container
paint(Graphics g)绘制容器
update(Graphics g)更新容器
59.java.awt.point
translate(int dx,int dy)平移(x,y)位置的点,沿x轴平移dx,沿Y轴平移dy,移动后得到(x+dx,y+dy)
60.java.awt.Component
createImage(int width,int height)
创建一幅用于双缓冲的,可以在屏幕外绘制的图像.
java.awt.Image
getGraphics()创建供绘制闭屏图像使用的图形上下文
61.轻量级(Lightweight)
轻量级的形容是相对于一些重量级的容器(如EJB 容器)来说的,Spring 的核心包在文件容量上只有不
到1MB 的大小,而使用Spring 核心包所需要的资源负担也是很小的,您甚至可以在小型设备中使用
Spring 的核心包。
非侵入性(No intrusive)
框架原来的用意是提供一个架构的实现,让开发人员可以在基于框架的基础上,快速地开发出遵循架构
的所需的应用程序,然而有些框架一旦被使用,应用程序就与框架发生了依赖,例如大量使用了框架的
API,或直接继承API 的某些类型等,都会使应用程序组件与框架发生依赖,而无法从框架中独立出来,
更别说当中的组件可以直接重用到另一个应用程序之中。
容器(Container)
Spring 提供容器功能,容器可以管理对象的生命周期、对象与对象之间的依赖关系,您可以使用一个配
置文件(通常是XML),在上面定义好对象的名称、如何产生(Prototype 方式或Singleton 方式)、哪
个对象产生之后必须设定成为某个对象的属性等,在启动容器之后,所有的对象都可以直接取用,不用
编写任何一行程序代码来产生对象,或是建立对象与对象之间的依赖关系。
换个更直白点的说明方式:容器是一个Java 所编写的程序,原先必须自行编写程序以管理对象关系,现
在容器都会自动帮您作好
62.典型地,一个java运行时刻以下面顺序查找和加载类:
(1):在bootstrap列表中的类-这些是体现java平台的类,例如在rt.jar中的类
(2):出现在扩展类列表中的类--这些类使用扩展机制框架来扩展java平台,使用位于运行时刻环境
的/lib/ext目录下的档案文件
(3):这些类不使用-classpath命令行选项或CLASSPATH环境变量标识的扩展机制框架.
63.java.util.concurrent.atomic
类Atomic
getAndSet(long newValue)设置为给定值,并返回旧值
64.JVM本身包含了一个ClassLoader称为Bootstrap ClassLoader,和JVM一样, Bootstrap ClassLoader
是用本地代码实现的,它负责加载核心Java Class(即所有java.*开头的类)。另外JVM还会提供两个
ClassLoader,它们都是用Java语言编写的,由Bootstrap ClassLoader加载;其中 Extension
ClassLoader负责加载扩展的Java class(例如所有javax.*开头的类和存放在JRE的ext目录下的类),
Application ClassLoader负责加载应用程序自身的类。
在Java 1.2后,java class的加载采用所谓的委托模式(Delegation Modle),当调用一个
ClassLoader.loadClass()加载一个类的时候,将遵循以下的步骤:
1)检查这个类是否已经被加载进来了?
2)如果还没有加载,调用父对象加载该类
3)如果父对象无法加载,调用本对象的findClass()取得这个类
65.深层复制与浅层复制
将句柄传入一个方法时,指向的仍然是相同的对象.
通常,我们调用一个方法是为了产生返回值,或者用它改变为其调用方法的那个对象的状态(方法其
实就是我们向那个对象“发一条消息”的方式)。很少需要调用一个方法来处理它的参数;这叫作利用
方法的“副作用”(Side Effect)。
克隆时要注意的两个关键问题是:几乎肯定调用super.clone().以及注意将克隆设为public
Object.clone()会检查原先的对象有多大,再为新对象腾出足够多的内存,将所有二进制位从原来的对
象复制到新对象。这叫作“按位复制”,而且按一般的想法,这个工作应该是由clone()方法来做的。但
在Object.clone()正式开始操作前,首先会检查一个类是否Cloneable,即是否具有克隆能力——换言之
,它是否实现了Cloneable接口。若未实现,Object.clone()就掷出一个CloneNotSupportedException违
例,指出我们不能克隆它。
Java对“是否等价”的测试并不对所比较对象的内部进行检查,从而核实它们的值是否相同。==和!=运
算符只是简单地对比句柄的内容。若句柄内的地址相同,就认为句柄指向同样的对象,所以认为它们是
“等价”的。所以运算符真正检测的是“由于别名问题,句柄是否指向同一个对象?”
只要没有新增需要克隆的句柄,对Object.clone()的一个调用就能完成所有必要的复制--无论clone()是
在层次结构多深的一级定义的。
对Vector进行深层复制的先决条件:在克隆了Vector后,必须在其中遍历,并克隆由Vector指向的每个
对象。
66.javascript的作用
页面中的某个事件(点击、选择等)被JavaScript代码捕捉到,JavaScript对事件涉及到的数据进行封
装,封装完成后以XML形式发送到服务器端,服务器端根据所给数据执行相应的查询处理封装出一份结果
返回给客户端,客户端JavaScript接收到返回结果后解析并展现在客户端。
67.mysql 常识和基本操作
字段类型
1.INT[(M)]
正常大小整数类型
2.DOUBLE[(M,D)] [ZEROFILL]
正常大小(双精密)浮点数字类型
3.DATE
日期类型。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示
DATE值,但是允许你使用字符串或数字把值赋给DATE列
4.CHAR(M)
定长字符串类型,当存储时,总是是用空格填满右边到指定的长度
5.BLOB TEXT
BLOB或TEXT类型,最大长度为65535(2^16-1)个字符。
6.VARCHAR
变长字符串类型。
68.hibernate知识
当没有设定column attribute的时候,hibernate缺省地使用JavaBean的属性名作为字段名.
69.
检查违例(Checked Exceptions)和不检查违例(Unchecked Exceptions)
在Exception 的子类中有一个非常重要的类:RuntimeException(2)。Java中将自它或者它的子类衍生
出来的任何违例都称作“不检查违例” (Unchecked Exceptions),自其他Exception子类衍生出来的
违例都称作“检查违例”(Checked Exceptions)(3)。不检查违例包括的问题主要有:造型错误,数
组越界存取,空指针访问等,这些问题一般来说都是你程序编写的问题。简单地说,不检查违例就是那
些由编译器来检查而无需你程序中控制的违例。而检查违例是指那些你必须处理的违例,否则编译时会
产生一个编译错误。你可以选择下面任意一种方法来处理它:
70.aop.oop
OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑
单元划分.
AOP(面向切面编程)针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,
以获得逻辑过程中各部分之间的低耦合性的隔离效果
71.Java 动态代理
Java动态代理类位于Java.lang.reflect包下,一般主要涉及到一下两个类
(1).Interface.InvocationHandler:该接口中仅定义了一个方法:invoke(Object obj,Method
method,Object[] args).第一个参数一般是指代理类,method是被代理的方法,args为该方法的参数数组.
这个抽象方法在代理中动态实现.
(2).Proxy:该类即为动态代理类,作用类似于上例中的ProxySubject,其中主要包含以下内容:
Protected Proxy(InvocationHandler h):构造函数,估计用于给内部的h赋值。
Static Class getProxyClass (ClassLoader loader, Class[] interfaces):获得一个代理类,其中
loader是类装载器,interfaces是真实类所拥有的全部接口的数组。
Static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)
:返回代理类的一个实例,返回后的代理类可以当作被代理类使用(可使用被代理类的在Subject接口中
声明过的方法)。
72. MYSQL学习
/0 一个ASCII 0(NUL)字符
/n 一个新行符
/t一个定位符
/r 一个回车符
/b 一个退格符
/' '
/" "
// /
/% %
/_ _
十六进制数
在字符串上下文,它们表现类似于一个二进制字符串,这里每一对十六进制数字被变换为一个字符。
mysql> select 0x5061756c;
-> Paul
当使用文本文件导入或导出格式(LOAD DATA INFILE, SELECT ... INTO OUTFILE)时,NULL可以用/N表示
。见7.16 LOAD DATA INFILE句法。
列类型
如果指定了ZEROFILL 会自动地增加UNSIGNED属性
类型 有符号范围 无符号范围
TINYINT -128--127 0-255
SMALLINT -32768--32767 0-65535
MEDIUMINT -8388608--8388607 0-16777215
INT -2147483648-2147483647 0-4294967295
INTEGER INT的一个同义词
BIGINT -9223372036854775808 18446744073709551615
FLOAT -3.402823466E+38到-1.175494351E-38 1.175494351E-38到3.402823466E+38
DOUBLE -1.7976931348623157E+308到-2.2250738585072014E-308 0和2.2250738585072014E-308到
1.7976931348623157E+308
DOUBLE PRECISION[(M,D)] [ZEROFILL]
REAL DOUBLE的同义词
DECIMAL 一个未压缩(unpack)的浮点数字。不能无符号。行为如同一个CHAR列
NUMERIC(M,D) [ZEROFILL] 这是DECIMAL的一个同义词。
DATE '1000-01-01'到'9999-12-31' 以'YYYY-MM-DD'格式来显示DATE值
DATETIME '1000-01-01 00:00:00'到'9999-12-31 23:59:59' 'YYYY-MM-DD HH:MM:SS'
TIMESTAMP '1970-01-01 00:00:00'到2037年的某时 以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或
YYMMDD格式来显示TIMESTAMP值
TIME 一个时间。范围是'-838:59:59'到'838:59:59'
YEAR[(2|4)] MySQL以YYYY格式来显示YEAR值
CHAR(M) [BINARY] M的范围是1 ~ 255个字符
[NATIONAL] VARCHAR(M) [BINARY] M的范围是1 ~ 255个字符
TINYBLOB
TINYTEXT 一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。
BLOB
TEXT
MEDIUMBLOB
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。见7.7.1 隐式列指定变化。
LONGBLOB
LONGTEXT
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。见7.7.1 隐式列指定变化
ENUM('value1','value2',...) 一个ENUM最多能有65535不同的值。
SET('value1','value2',...) 一个SET最多能有64个成员。
一个表最多可有16个索引,一个索引可以由最多15个列组成
运算符
mysql> SELECT 0 = 'x6';
-> 1
<> != 不等于
<=> 安全等于Null
INTERVAL(N,N1,N2,N3,...)
如果N< N1,返回0,如果N< N2,返回1等等。所有的参数被当作整数。为了函数能正确地工作,它要求
N1<N2<N3< ...<Nn。这是因为使用二进制搜索(很快)。
expr REGEXP pat
expr RLIKE pat
执行一个字符串表达式expr对一个模式pat的模式匹配。模式可以是一个扩充的正则表达式。见MySQL 正
则表达式句法的 H 描述.如果expr匹配pat,返回1,否则返回0。RLIKE是REGEXP的一个同义词,提供了
与mSQL的兼容性。注意:因为MySQL在字符串中使用C转义语法(例如,“/n”), 你必须在你的REGEXP字
符串重复任何“/”。在MySQL3.23.4中,REGEXP对于正常的(不是二进制)字符串是忽略大小写。
STRCMP(expr1,expr2) 比较
如果字符串相同,STRCMP()回来0,如果第一参数根据当前的排序次序小于第二个,返回-1,否则返回1
。
BINARY
BINARY操作符强制跟随它后面的字符串为一个二进制字符串。即使列没被定义为BINARY或BLOB,这是一
个强制列比较区分大小写的简易方法
IFNULL(expr1,expr2)
如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决
于它被使用的上下文环境。
IF(expr1,expr2,expr3)
如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数
字或字符串值,取决于它被使用的上下文。
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE
result] END
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
第一个版本返回result,其中value=compare-value。第二个版本中如果第一个条件为真,返回result。
如果没有匹配的result值,那么结果在ELSE后的result被返回。如果没有ELSE部分,那么NULL被返回。
数学函数
所有的数学函数在一个出错的情况下返回NULL。
FLOOR(X) 返回不大于X的最大整数值
CEILING(X) 返回不小于X的最小整数值
ROUND(X) 返回参数X的四舍五入的一个整数。
EXP(X) 返回值e(自然对数的底)的X次方。
RAND()
RAND(N)
返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
LEAST(X,Y,...)
有2和2个以上的参数,返回最小(最小值)的参数。参数使用下列规则进行比较:
如果返回值被使用在一个INTEGER上下文,或所有的参数都是整数值,他们作为整数比较。
如果返回值被使用在一个REAL上下文,或所有的参数是实数值,他们作为实数比较。
如果任何参数是一个大小敏感的字符串,参数作为大小写敏感的字符串被比较。
在其他的情况下,参数作为大小写无关的字符串被比较。
TRUNCATE(X,D)
返回数字X,截断为D位小数。如果D为0,结果将没有小数点或小数部分。
字符串函数
如果结果的长度大于服务器参数max_allowed_packet,字符串值函数返回NULL
对于针对字符串位置的操作,第一个位置被标记为1
ASCII(str)
返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
ORD(str)
如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second
byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码。
如果最左面的字符不是一个多字节字符。返回与ASCII()函数返回的相同值
CONV(N,from_base,to_base)
在不同的数字基之间变换数字。返回数字N的字符串数字,从from_base基变换为to_base基,如果任何参
数是NULL,返回NULL。参数N解释为一个整数,但是可以指定为一个整数或一个字符串。最小基是2且最
大的基是36。如果to_base是一个负数,N被认为是一个有符号数,否则,N被当作无符号数。 CONV以64
位点精度工作。
BIN(N)
返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果N是
NULL,返回NULL。
OCT(N)
返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,
返回NULL。
HEX(N)
返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果
N是NULL,返回NULL。
CHAR(N,...)
CHAR()将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。NULL值被跳过。
CONCAT(str1,str2,...)
返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数
被变换为等价的字符串形式。
LENGTH(str)
OCTET_LENGTH(str)
CHAR_LENGTH(str)
CHARACTER_LENGTH(str)
返回字符串str的长度
LOCATE(substr,str)
POSITION(substr IN str)
返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
LOCATE(substr,str,pos)
返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。
INSTR(str,substr)
返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被
颠倒。
LPAD(str,len,padstr)
返回字符串str,左面用字符串padstr填补直到str是len个字符长。
RPAD(str,len,padstr)
返回字符串str,右面用字符串padstr填补直到str是len个字符长。
LEFT(str,len)
返回字符串str的最左面len个字符。
RIGHT(str,len)
返回字符串str的最右面len个字符。
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)
MID(str,pos,len)
从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。
SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
从字符串str的起始位置pos返回一个子串
SUBSTRING_INDEX(str,delim,count)
返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到
左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
LTRIM(str)
返回删除了其前置空格字符的字符串str。
RTRIM(str)
返回删除了其拖后空格字符的字符串str。
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
返回字符串str,其所有remstr前缀或后缀被删除了。如果没有修饰符BOTH、LEADING或TRAILING给出,
BOTH被假定。如果remstr没被指定,空格被删除。
SOUNDEX(str)
返回str的一个同音字符串。听起来“大致相同”的2个字符串应该有相同的同音字符串。一个“标准”
的同音字符串长是4个字符,但是SOUNDEX()函数返回一个任意长的字符串。你可以在结果上使用
SUBSTRING()得到一个“标准”的 同音串。所有非数字字母字符在给定的字符串中被忽略。所有在A-Z之
外的字符国际字母被当作元音
SPACE(N)
返回由N个空格字符组成的一个字符串。
REPLACE(str,from_str,to_str)
返回字符串str,其字符串from_str的所有出现由字符串to_str代替。
REPEAT(str,count)
返回由重复countTimes次的字符串str组成的一个字符串。如果count <= 0,返回一个空字符串。如果
str或count是NULL,返回NULL
REVERSE(str)
返回颠倒字符顺序的字符串str。
INSERT(str,pos,len,newstr)
返回字符串str,在位置pos起始的子串且len个字符长得子串由字符串newstr代替。
ELT(N,str1,str2,str3,...)
如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是
FIELD()反运算。
FIELD(str,str1,str2,str3,...)
返回str在str1, str2, str3, ...清单的索引。如果str没找到,返回0。FIELD()是ELT()反运算。
FIND_IN_SET(str,strlist)
如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被“,”分隔的子
串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为SET的列,
FIND_IN_SET()函数被优化而使用位运算!如果str不是在strlist里面或如果strlist是空字符串,返回0
。如果任何一个参数是NULL,返回NULL。如果第一个参数包含一个“,”,该函数将工作不正常
MAKE_SET(bits,str1,str2,...)
返回一个集合 (包含由“,”字符分隔的子串组成的一个字符串),由相应的位在bits集合中的的字符串
组成。str1对应于位0,str2对应位1,等等。在str1, str2, ...中的NULL串不添加到结果中。
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])
返回一个字符串,在这里对于在“bits”中设定每一位,你得到一个“on”字符串,并且对于每个复位
(reset)的位,你得到一个“off”字符串。每个字符串用“separator”分隔(缺省“,”),并且只有
“bits”的“number_of_bits” (缺省64)位被使用。
LCASE(str)
LOWER(str)
返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成小写。该函数对
多字节是可靠
UCASE(str)
UPPER(str)
返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成大写。该函数对
多字节是可靠的。
LOAD_FILE(file_name)
读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,
而且你必须有file权限。文件必须所有内容都是可读的并且小于max_allowed_packet。如果文件不存在
或由于上面原因之一不能被读出,函数返回NULL。
日期和时间函数
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
DAYOFMONTH(date)
返回date的月份中日期,在1到31范围内。
DAYOFYEAR(date)
返回date在一年中的日数, 在1到366范围内。
MONTH(date)
返回date的月份,范围1到12。
DAYNAME(date)
返回date的星期名字。
MONTHNAME(date)
返回date的月份名字。
QUARTER(date)
返回date一年中的季度,范围1到4
WEEK(date)
WEEK(date,first)
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式
WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二
个参数是1,从星期一开始。
YEAR(date)
返回date的年份,范围在1000到9999。
HOUR(time)
返回time的小时,范围是0到23。
MINUTE(time)
返回time的分钟,范围是0到59。
SECOND(time)
回来time的秒数,范围是0到59。
PERIOD_ADD(P,N)
增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
PERIOD_DIFF(P1,P2)
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值
TIME_FORMAT(time,format)
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修
饰符。其他修饰符产生一个NULL值或0
CURDATE()
CURRENT_DATE
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215
CURTIME()
CURRENT_TIME
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用
NOW()
SYSDATE()
CURRENT_TIMESTAMP
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还
是在数字的上下文被使用。
UNIX_TIMESTAMP()
UNIX_TIMESTAMP(date)
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果
UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可
以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一
个数字。
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在
一个字符串还是或数字上下文中被使用。
FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函
数列出的条目同样的修饰符。
SEC_TO_TIME(seconds)
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符
串还是在数字上下文中被使用
TIME_TO_SEC(time)
返回time参数,转换成秒。
其他函数
DATABASE()
返回当前的数据库名字
USER()
SYSTEM_USER()
SESSION_USER()
返回当前MySQL用户名。
ENCRYPT(str[,salt])
使用Unix crypt()系统调用加密str。salt参数应该是一个有2个字符的字符串。(MySQL 3.22.16中,
salt可以长于2个字符。)
ENCODE(str,pass_str)
使用pass_str作为口令加密str。为了解密结果,使用DECODE()。结果是一个二进制字符串,如果你想要
在列中保存它,使用一个BLOB列类型。
DECODE(crypt_str,pass_str)
使用pass_str作为口令解密加密的字符串crypt_str。crypt_str应该是一个由ENCODE()返回的字符串。
MD5(string)
对字符串计算MD5校验和。值作为一个32长的十六进制数字被返回可以,例如用作哈希(hash)键。
LAST_INSERT_ID([expr])
返回被插入一个AUTO_INCREMENT列的最后一个自动产生的值。见20.4.29 mysql_insert_id()。
FORMAT(X,D)
格式化数字X为类似于格式'#,###,###.##',四舍五入到D为小数。如果D为0,结果将没有小数点和小数
部分。
VERSION()
返回表明MySQL服务器版本的一个字符串。
GET_LOCK(str,timeout)
试图获得由字符串str给定的一个名字的锁定,第二个timeout为超时。如果锁定成功获得,返回1,如果
尝试超时了,返回0,或如果发生一个错误,返回NULL(例如从存储器溢出或线程用mysqladmin kill被杀
死)。当你执行RELEASE_LOCK()时、执行一个新的GET_LOCK()或线程终止时,一个锁定被释放。该函数可
以用来实现应用锁或模拟记录锁,它阻止其他客户用同样名字的锁定请求;赞成一个给定的锁定字符串
名字的客户可以使用字符串执行子协作建议的锁定。
RELEASE_LOCK(str)
释放字符串str命名的通过GET_LOCK()获得的锁。如果锁被释放,返回1,如果锁没被这个线程锁定(在此
情况下锁没被释放)返回0,并且如果命名的锁不存在,返回NULL。如果锁从来没有通过调用GET_LOCK()
获得或如果它已经被释放了,锁将不存在
BENCHMARK(count,expr)
BENCHMARK()函数重复countTimes次执行表达式expr,它可以用于计时MySQL处理表达式有多快。结果值
总是0。意欲用于mysql客户,它报告查询的执行时间。
与GROUP BY子句一起使用的函数
COUNT(expr)
返回由一个SELECT语句检索出来的行的非NULL值的数目。
COUNT(DISTINCT expr,[expr...])
返回一个不同值的数目。
AVG(expr)
返回expr的平均值。
MIN(expr)
MAX(expr)
返回expr的最小或最大值。MIN()和MAX()可以有一个字符串参数;在这种的情况下,他们返回最小或最
大的字符串值
SUM(expr)
返回expr的和。注意,如果返回的集合没有行,它返回NULL!
STD(expr)
STDDEV(expr)
返回expr标准差(deviation)。这是对 ANSI SQL 的扩展。该函数的形式STDDEV()是提供与Oracle的兼容
性。
BIT_OR(expr)
返回expr里所有位的位或。计算用 64 位(BIGINT)精度进行。
BIT_AND(expr)
返回expr里所有位的位与。计算用 64 位(BIGINT)精度进行。
mysql> SELECT 0 = 'x6';
-> 1
扩展正则表达式的一些字符是:
“.”匹配任何单个的字符。
一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命
名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。
“ * ”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的
任何数量的数字,而“.*”匹配任何数量的任何东西。
正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹
配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。
如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。
为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“
$”。
69.在JavaSE程序中,我们一般使用classpath来作为存放资源的目的地。但是,在Web应用程序中,我们
一般使用classpath外面的WEB-INF及其子目录作为资源文件的存放地。
相对路径:相对与某个基准目录的路径.包含Web的相对路径(HTML中的相对目录),例如:在Servlet中,"/"
代表Web应用的根目录,和物理路径的相对表示,例如:"./"代表当前目录,"../"代表上级目录.这种类似的
表示,也属于相对路径.
70.关于JSP/Servlet中的相对路径和绝对路径
2.1服务器端的地址
服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的
(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候
在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。
其用到的地方有:
forward:servlet中的request.getRequestDispatcher(address);这个address是
在服务器端解析的,所以,你要forward到a.jsp应该这么写:
request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,
其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。
sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>
2.22、客户端的地址
所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的,
而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。
Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的,
所以,如果提交到a.jsp为:action="/webapp/user/a.jsp"或action="<%=request.getContextPath
()%>"/user/a.jsp;
提交到servlet为actiom="/webapp/handleservlet"
Javascript也是在客户端解析的,所以其相对路径和form表单一样。
因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上
<%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。
另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样
当文件移动时,很容易出问题。
71.XHTML是The Extensible HyperText Markup Language(可扩展超文本标识语言)的缩写。HTML是一种
基本的WEB网页设计语言,XHTML是一个基于XML的置标语言,看起来与HTML有些相象,只有一些小的但重
要的区别,XHTML就是一个扮演着类似HTML的角色的XML,所以,本质上说,XHTML是一个过渡技术,结合
了部分XML的强大功能及大多数HTML的简单特性。
XSLT是一种把XML文件转换成XHTML文档或者其他的XML文档的语言
XPath是一种由于操作XML文档的语言。
72.内连接时,返回查询结果集合中的仅是符合查询条件和连接条件的行.而采用外连接时,它返回到查询
结果集合中不仅包含符合连接条件的行,而且还包含左表(左外连接时),右表(右外连接时)或两个边接表(
全外连接)中的所有数据行.
交叉连接不带where子句,它返回被连接的两个表所有数据行的笛卡尔积.返回到结果集合中的数据行等于
第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数.
73.所有的双向关联需要有一端被设置为inverse,在一对多中是多的一端,多对多任意
74.put方法
put方法的作用是将一个对象(value)加入到map中,它的key为(key)。如果key重复了,将替换掉旧的值
,并将旧值返回。如果key没有重复,将新的值插入。该部分代码如下(有删节):
75.
1、 MAP
特点:同键的新值将覆盖旧值。
2、Set
特点:无序排列,不会存在重复的值,添加重复值也不会报错.Set可以加入null值
3、List
特点:有序排序,可以加入重复的元素
4、Collections
特点:Collections.class是集合的工具方法类
5、Properties
特点:Properties继承自Hashtable,是Map的一个实现。不过它在读取Properties文件方法特别方便
76.frame跳转
java.io.PrintWriter out1 = response.getWriter();
out1.println("<html>");
out1.println("<script>");
out1.println("window.open ('../login.jsp', '_top')");
out1.println("</script>");
out1.println("</html>");
77.
把Putty下载到机器上,双击putty.exe,就出现如图1的配置界面。选择“Session”,在“Host
Name(or IP address)”输入框中输入欲访问的主机名或IP,比如server1或192.168.9.4。端口号(Port
)根据使用的协议有所区别,ssh 默认使用22,telnet默认使用23,rlogin默认使用513。在“Protocol
”单选栏中选择使用的协议,一般是telnet或ssh,这取决于服务器提供的服务。在“Saved Session”
输入栏中输入任务的名字,单击“Save”按钮,就可以把任务配置保存起来了。
78.中断线程的方法:1.共享变量 2.interrupt
79.在Java中,一个类用其完全匹配类名(fully qualified class name)作为标识,这里指的完全匹配类
名包括包名和类名。但在JVM中一个类用其全名和一个加载类ClassLoader的实例作为唯一标识。因此,
如果一个名为Pg的包中,有一个名为Cl的类,被类加载器KlassLoader的一个实例kl1加载,Cl的实例,
即C1.class在JVM中表示为 (Cl, Pg, kl1)。这意味着两个类加载器的实例(Cl, Pg, kl1) 和 (Cl, Pg,
kl2)是不同的,被它们所加载的类也因此完全不同,互不兼容的。那么在JVM中到底有多少种类加载器的
实例?下一节我们揭示答案。
1.JDBC事务
事务是将一些SQL语句作为一个整体来很执行,要么所有语句全部完成,要么一条语句都不执行。当调用方法commit或rollback时,当前事务即告结束,另一个事务随即开始。
缺省情况下,新连接将于自动提交的模式,也就是说,当执行完语句后,将自动对那个语句调用commit方法。这种情况下,由于每个语句都是被单独提交的,因此,一个事务只由一个语句组成。如果禁用自动提交模式,事务将要等到commit或rollback方法被显式调用才结束,因此,它将包括上一次调用commt或 rollback方法以来所有执行过的语句。对于第二种情况,事务中的所有语句将作为组来提交或还原。