2010、10、12 湖南华诺集团面试题集
1、Double、Class是final类,不能被继承;Math、Thread可以被继承
2、 当前类 同一package 子孙类 其它package
Public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
3、Collection的4个主要接口:List、Set、BeanContext、SortedSet
4、Error和Exception的区别
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
5、多线程和同步的几种实现方式
多线程:主要有两种 一种是继承Thread类,一种是实现Runnable接口
同步有两种方法。一种同步方法,一种同步代码!分别是synchronized,wait与notify
6、打印昨天的当前时间 long today = System.currentTimeMillis(); long yestory = today - 1000*60*60*24 ; Date time = new Date( yestory ) ; System.out.println(time.getDate()+"号"+time.getHours()+"时"+time.getMinutes()+"分"+time.getSeconds()+"秒") 7、Jsp重定向的方法
服务器端的重定向可以有两种方式,一是使用HttpServletResponse的
sendRedirect()方法,一是使用RequestDispatcher的forward()方法。
8、Jsp页面间数据如何传递
a.设置session变量,session.setAttribute("a","b");b.地址方式传值:show.jsp?id=变量值
9、Jsp的内置对象:request、response、session、application、out、
java.lang.Object、config、exception、pageContext 10、forward、redirect的区别 forward仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,forward更加高效,在forward可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。
在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的
URL,把那个URL的响应内容读取过来,然后把这些内容 再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。 11、多态的概念
多态是面向对象的重要特性,简单点说:"一个接口,多种实现",就是同一种事物表现出的多种形态 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 12、Application的生命周期
application对象是一个特别重要的JSP对象,它存在于服务器的内存空间中,服务器一旦启动,就会自动产生一个application对象,除非服务器被关闭,否则这个application对象将一直保持下去。在application对象的生命周期中,在当前服务器上运行的每一个JSP程序都可以任意存取和这个application对象绑定的参数(或者Java对象)的值。application对象的这些特性为我们在多个JSP程序中、多个用户共享某些全局信息(如当前的在线人数等)提供了方便。由此我们可以不借助数据库就实现聊天室的功能。
13、list、set的区别 list是列表(接口),是可以允许出现重复值的,
set是集合,不允许出现重复值
ArrayList和HashMap是异步的,
Vector和HashTable是同步的,
所以Vector和HashTable是线程安全的,
而ArrayList和HashMap并不是线程安全的。
因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于ArrayList和HashMap。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
14、如何区别set中的元素
在比较时先调用hashCode方法,如果不相同,证明不相等。
如果相同,再调用equals方法,如果equals方法相同,证明相等,不相同,证明不相等。
==:主要用在基本数据类型及引用
Equals:主要是对象或对象引用的比较。
15、抽象类与接口的区别
1,抽象类里可以有构造方法,而接口内不能有构造方法。
2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
4,抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5,抽象类中可以包含静态方法,接口内不能包含静态方法。
6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。
7,一个类可以实现多个接口,但只能继承一个抽象类。
再补充点两者在应用上的区别:
接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用
16、为什么要用Class.forName方法
从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。
现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
最后用最简单的描述来区分new关键字和newInstance()方法的区别: newInstance: 弱类型。低效率。只能调用无参构造。 new: 强类型。相对高效。能调用任何public构造。
17、java连接池的使用
18、数据库的实例与用户的概念
一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成
19、RMI的基类有哪些
20、如何访问不同的数据库
2010、10、18 湖南龙通科技有限公司
1、Hibernate对象的几种状态,以及Session的不同操作对对象的影响
临时态:通过new实例化的对象,在Session中不存在
持久化状态:sava、savaOrUpdate、update可将临时状态转为持久化状态 数据库存在缓存中对应的数据
游离状态:delete、clear、close 数据库中不存在 Session中存在 2、static{ System.out.println("java静态块,启动时就会加载"); } { System.out.println("初始化块"); } 3、Dictionary实现的不是Collection接口,而是继承了Object
4、ZipInputStream类的对象可作为InputStreamReader类构造方法的参数,但不能作为FileInputStream类构造方法的参数
5、HQL与SQL的区别 sql 面向数据库表查询
hql 面向对象查询
hql : from 后面跟的 类名+类对象 where 后用 对象的属性做条件
sql: from 后面跟的是表名 where 后 用表中字段做条件
6、Spring中Bean的作用域:singleton、prototype、request、session、global session
、自定义bean装配作用域(在spring 2.0中作用域是可以任意扩展的,你可以自定义作用域,甚至你也可以重新定义已有的作用域(但是你不能覆盖singleton和prototype),spring的作用域由接口org.springframework.beans.factory.config.Scope来定义,自定义自己的作用域只要实现该接口即可)
7、用SSH设计一个用户登录的案例,画出类图和时序图
8、Flex 9、抽象工厂
2010、10、16 上海群硕
1、屋里三盏灯,屋外三个开关,一个开关仅控制一盏灯,屋外看不到屋里,只进一次屋,就知道哪个开关控制那盏灯 3个先开一盏开久点然后马上关了开另一盏然后进去一个灯是亮的摸另外两个都是灭的一个热的一个灯凉的。
4个先开两盏过30秒关一个再过30秒关另一个然后开第3个然后进去一个亮的另外3个一个烫手一个热的一个冷的
2010、10、20 恒生电子
1、java标识符 在Java语言中,标识符是以字母、下划线(…)或美元符($)开头,由字母、数字、下划线(一)或美元符($)组成的字符串。标识符区分大小写,长度.
在Java语言中,标识符是以字母、下划线(…)或美元符($)开头,由字母、数字、下划线(一)或美元符($)组成的字符串。标识符区分大小写,长度没有限制。除以上所列几项之外,标识符中不能含有其他符号,当然也不允许插入空格。在程序中,标识符可用作变量名、方法名、接口名、类名等。 2、数据库表间连接方式
Table A
aid adate
1 a1
2 a2
3 a3
TableB
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指: (就是left outer join,默认的就是outer)
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join (就是right outer join,默认的就是outer)
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
3、class A{
A(String string){
System.out.println("HS");
}
}
class B extends A{
B(){
System.out.println("Hello");
}
}
class SubTest{
public static void main(String[]args){
B b = new B();
}
}
这道题考察输出,实际编译出错,有这个选项!父类没有默认的构造函数,子类会编译通不过
4、若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
(A) 单链表 (B) 仅有头指针的单循环链表
(C) 双链表 (D)仅有尾指针的单循环链表
5、索引、增加列(长度、非空、类型)
数据查询 select
数据定义 create drop alter
数据操纵 insert update delete
数据控制 grant revoke
2010、10、25 拓维
1、class MyTest extends Test{
int count;
public MyTest(int cnt,int num){
super(num);
count = cnt;
}
//插入代码块
}
public class Test{
int number;
public Test(int i){
number = i;
}
} 答案:C
A、MyTest(){}
B、MyTest(int cnt){count = cnt;}
C、MyTest(int cnt){this(cnt,cnt);}
D、MyTest(int cnt){super(cnt);this(cnt,0);}
2、UNIX是著名的分时系统
3、子类可以继承父类的非私有方法和状态
4、Java语言中,复杂并发管理的机制是:多线程
5、接口是由常量和抽象方法组成的特殊类
6、URL URL由两个主要的部分构成:协议(Protoco1)和目的地(Destination)。 "协议"部分告诉我们自己面对的是何种类型的Internet资源。 web中最常见的协议是http,它表示从Web中取回的是HTML文档。其他协议还有gopher,ftp和telnet等。 目的地可以是某个文件名、目录名或者某台计算机的名称。例如。这样的一个URL能让浏览器知道HTML文档的正确位置以及文件名是什么。假如URL是ftp://ftp.netscape.com/,浏览器就知道自己该登录进入一个FTP站点,这个站点位于名为
2、int a =10,b=20,c=11,d=17; intK = a>b?a:c>d?d:ba+c?d:b;(这后面整个都是一个表达式) 3、以下定义的类,可以包外继承的有:
a. public final Class One
b. class Two
c. protected Class Three
d. Public Class Four
4、int i= 5/0; 编译没错,运行有错
5、public abstract class A{
public abstract void operation_1();
public void operation_2();
}
能符合以下类图的选项有:A B C E a.publicclass A_1 extends A{ publicvoid operation_1(){} } b.publicabstractclass A_2 extends A{ publicvoid operation_1(){} } c.publicabstractclass A_3 extends A{ } d.publicclass A_4 extends A{ } e.publicclass A_5 extends A{ publicvoid operation_1(){} publicvoid operation_2(){} } f.publicclassA_6{ private A a ; } 6、 String[] arr1 ={"a","b","1","c","b"}; List lst1 = new ArrayList(); lst1.add("d"); Collections.addAll(lst1,arr1); System.out.println(lst1); Set set1 = new HashSet(); set1.add("d"); Collections.addAll(set1, arr1); System.out.println(set1); 运行结果: [d, a, b, 1, c, b] [d, a, c, b, 1] 7、Short a = new Short(45); 编译有错 8、int[] arr = {1,3,3,2,8}; String str = ""; inti=0; publicvoid doIt(){ for(;iarr[i+1]){ str=arr[i]+arr[i+1]+str; break; } elseif(arr[i]truncate>delete
3、视图中的select可以存在order by、group by
4、创建只读视图:with read only
5、to_date('05-20-2009 11:56:56','MM-DD-YYYY HH24:MI:SS')
6、修改列类型,修改列值
update sala set salary=+90000
altertable sala modify job_cat number(
7、oracle中having关键字:通过group by进行分组后,然后筛选出满足having子句条件的组
8、多线程
在一个程序中,这些独立运行的程序片段叫作线程,利用它进行编程的概念叫作"多线程处理"。多线程处理的一个常见例子就是用户界面。利用线程,用户可按下一个按钮,程序会立即作出反应,而不是等待整个程序执行完了才进行响应。
在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。
为什么使用多线程:
线程是为了能同步完成完成多项任务,而不是为了提高运行效率,是为了提高资源使用率来提高系统的效率,线程是在同一时间需要完成多项任务的时候实现的。 线程的好处:.
使用线程可以把占据长时间的程序中的任务放到后台去处理 .用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
.程序的运行速度可能加快 .在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
线程的缺点:争用条件、死锁、活动锁、资源耗尽
9、协议
网络的七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
ppp(公私合作关系,public-private partnership):数据链路层
ICMP(Internet控制信息协议):网络层
Http:应用层
2010、11、5 广州金鹏
1、数据流图是需求分析阶段的成果
2、设计一个包含用户、角色、权限和用户组数据库表结构,并画出它们之间的关系图
1 一个用户只属于一个用户组
2 一个角色包含多个权限,
3 一个用户自身(非继承)可以有多个角色,也可以有多个权限
4 一个用户组可以有多个角色,也可以有多个权限
5 一个权限也可以属于多个角色。
6 一个用户的角色和权限来自两部分,一部分继承于所有父用户组的角色和权限,另一部分来自特别为其分配的角色和权限
7 一个用户组可以排除(exclude)一个角色, 而一旦在其子用户组或者在某个用户身上加入(include)这个角色, 那这个用户或者用户组将重拾这个角色
8 一个用户或用户组可以拒绝(disallow)一个权限, 一旦拒绝以后, 不管在什么地方再允许(allow)这个权限都于事无补
9 管理员可以做任何事情, 不受任何约束
3、unix,输入/输出设备看作普通文件
4、依赖
关联
泛化
聚集
共享聚集:部分可以参加多个整体,菱形为空
组合聚集:整体不存在,那么部分也不存在,菱形为黑色实体
5、测试
黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
逻辑覆盖:
1、语句覆盖:设计若干个测试用例,运行被测程序,使得每一条可执行语句至少执行一次
2、判定覆盖:设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少执行经历一次
3、条件覆盖:设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次
4、判定-条件覆盖:设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次
5、条件组合覆盖:设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次
6、路径覆盖:设计足够多的测试用例,覆盖程序中所有可能的路径
6、线程几种状态的转换
2010、11、6 湖南科创
1、静态变量与实例变量的区别 类的成员变量有两种:一种是被static关键字修饰的变量,叫类变量或静态变量,一种是没有被static修饰的,叫做实例变量
静态变量和实例变量的区别在于:
类静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享,静态变量可以通过类名直接访问。静态变量的生命周期取决于类的生命周期,当类被加载的时候,静态变量被创建并分配内存空间,当类被卸载时,静态变量被摧毁,并释放所占有的内存。
类的每一个实例都有相应的实例变量,每创建一个类的实例,java虚拟机为实例变量分配一次内存,实例变量位于堆区中,实例变量的生命周期取决于实例的生命周期,当创建实例时,为实例变量背创建,并分配内存,当实例被销毁时,实例 变量被销毁,并释放所占有的内存空间。
假如成员变量时引用变量,该成员变量结束生命周期时,并不意味着它所引用对象也结束生命周期。变量的生命周期和对象的生命周期是不同的概念。 2、java的23中设计模式
Factory(工厂模式)、Builder(建造模式)、Factory Method(工厂方法模式)、Prototype(原始模型模式)、Singleton(单例模式)、Fa??ade(门面模式)、Adapter(适配器模式)、Bridge(桥梁模式)、Composite(合成模式)、Decorator(装饰模式)、Flyweight(享元模式)、Proxy(代理模式)、Command(命令模式)、Interpreter(解释器模式)、Visitor(访问者模式)、Iterator(迭代子模式)、Mediator(调停者模式)、Memento(备忘录模式)、Observer(观察者模式)、State(状态模式)、Strategy(策略模式)、Template Method(模板方法模式)、Chain of Responsibility(责任链模式)
3、软件生存周期模型
瀑布模型:也称线性顺序模型或软件生存周期模型。瀑布模型遵循软件生存周期的划分,明确规定各个阶段的任务,各个阶段的工作自上而下顺序展开,如同瀑布流水,逐级下落。特征:阶段间的顺序性和依赖性;推迟实现的观点;质量保证的观点。缺点:缺乏灵活性,无法解决软件需求不明确或不准确的问题
快速原型模型:快速原型是快速建立起来的可以在计算机上运行的程序,他能完成的功能往往是最终产品能完成功能的一个子集。快速原型的关键是在于能尽可能"快速"地构造原型,一旦确定了用户的真正需求,所构造的原型将被丢弃,快速原型模式不符合主流的发展。
增量模型:是瀑布模型的顺序特性与快速原型法的迭代特征相结合的产物。使用增量模型是,第一个增量构件往往实现软件的基本需求,提供最核心的功能。缺点:各个构件的并入会产生一定的冲突;容易出现边做边改的方式,从而使软件过程控制失去整体性
螺旋模型:是将瀑布模型和原型模型结合起来,并且加入两种模型均忽略了的风险分析,弥补了两者的不足。分为四个部分:制定计划、风险分析、实施工程、客户评估。缺点:客户不能接受这中分析方法;进行项目风险分析,会降低项目利润。
4、编码的转换
String str = new String(strInput.getBytes("ISO8859_1"),"GBK");
5、js中的正则表达式
匹配输入的内容不为空格:txtName.replace(/(^\s*)|(\s*$)/,"")==""
验证邮箱的格式:var p2 = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
if(!p2.exec(email)) {alert('邮箱格式不对!'); return false;}
6、JDBC访问数据库的一个基本流程
①加载驱动 Class.forName("oracle.jdbc.driver.OrcaleDriver")
②使用DriverManager类,创建连接对象
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@主机IP:端口号:服务器名",用户,口令)
③创建query语句,通过连接对象获取PrepareStatement,执行query语句
④处理结果
⑤释放资源(关闭连接)
7、Struts是如何实现MVC,它的工作流程是怎样的
Model是由Action(应该属于c)和ActionForm等构成。Action对象封装了具体的处理逻辑,调用业务逻辑模块,可以用JavaBean和EJB等组件技术来处理数据库的访问,并且把响应提交到合适的View组件中。
View部分是通过JSP技术实现的。Struts还提供了自定义的标记库,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,完成对用户数据的封装
Controller功能由ActionServlet和ActionMapping对象构成,核心是ActionServlet,它用来接受客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分中Action处理器对象之间的映射。
对于采用Struts框架的Web应用,在Web应用时就会启动加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把他们存放到各种配置对象中,例如ActionServlet接收到一个客户请求时,将执行如下流程.
1).检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息.
2).如果ActionForm实例不存在,就创建一个ActionFrom对象,把客户提交的表单数据保存到ActionForm对象中.
3).根据配置信息决定是否需要表单验证,如果需要就调用ActionForm的validate()方法.
4).如果ActionForm的对象返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功.
5).ActionServlet根据ActionMapping实例包含的映射信息决定将转发给哪个Action.如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法.
6).Action的execute()方法返回一个ActionForwd对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件.
7).ActionFoward对象指向的JSP组件生成动态网页,返回给客户.
对于以上流程的(4),如果ActionForm的validate()方法返回一个包含一个或多哥ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件.在这种情况下,不会在创建Action对象并调用Action的execute()方法.
8、SSH2的优点
①开发效率:j2ee采用分层架构,这可以提高开发效率
②需求的变更:在项目的实施过程中,需求的变更是在所难免的,j2ee采用优秀的解耦合框架,在优秀的分层架构里,控制层依赖于业务逻辑层,但绝不与任何具体的业务逻辑组件耦合,只与接口耦合
9、==与equals的区别
==比较的是==两边引用数据类型的对象在内存中的地址是不是相同,如何相同表示是同一对象,否则不是同一对象;而equals比较是对象的类型和值是否都相同,如何都相同则返回true
10、java本身性能的优化
For()循环外层循环要少,内层循环可以多
1、Double、Class是final类,不能被继承;Math、Thread可以被继承
2、 当前类 同一package 子孙类 其它package
Public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
3、Collection的4个主要接口:List、Set、BeanContext、SortedSet
4、Error和Exception的区别
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
5、多线程和同步的几种实现方式
多线程:主要有两种 一种是继承Thread类,一种是实现Runnable接口
同步有两种方法。一种同步方法,一种同步代码!分别是synchronized,wait与notify
6、打印昨天的当前时间 long today = System.currentTimeMillis(); long yestory = today - 1000*60*60*24 ; Date time = new Date( yestory ) ; System.out.println(time.getDate()+"号"+time.getHours()+"时"+time.getMinutes()+"分"+time.getSeconds()+"秒") 7、Jsp重定向的方法
服务器端的重定向可以有两种方式,一是使用HttpServletResponse的
sendRedirect()方法,一是使用RequestDispatcher的forward()方法。
8、Jsp页面间数据如何传递
a.设置session变量,session.setAttribute("a","b");b.地址方式传值:show.jsp?id=变量值
9、Jsp的内置对象:request、response、session、application、out、
java.lang.Object、config、exception、pageContext 10、forward、redirect的区别 forward仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
redirect则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。
所以,forward更加高效,在forward可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。
在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。
从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的
URL,把那个URL的响应内容读取过来,然后把这些内容 再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.所以redirect等于客户端向服务器端发出两次request,同时也接受两次response。 11、多态的概念
多态是面向对象的重要特性,简单点说:"一个接口,多种实现",就是同一种事物表现出的多种形态 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 12、Application的生命周期
application对象是一个特别重要的JSP对象,它存在于服务器的内存空间中,服务器一旦启动,就会自动产生一个application对象,除非服务器被关闭,否则这个application对象将一直保持下去。在application对象的生命周期中,在当前服务器上运行的每一个JSP程序都可以任意存取和这个application对象绑定的参数(或者Java对象)的值。application对象的这些特性为我们在多个JSP程序中、多个用户共享某些全局信息(如当前的在线人数等)提供了方便。由此我们可以不借助数据库就实现聊天室的功能。
13、list、set的区别 list是列表(接口),是可以允许出现重复值的,
set是集合,不允许出现重复值
ArrayList和HashMap是异步的,
Vector和HashTable是同步的,
所以Vector和HashTable是线程安全的,
而ArrayList和HashMap并不是线程安全的。
因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于ArrayList和HashMap。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
14、如何区别set中的元素
在比较时先调用hashCode方法,如果不相同,证明不相等。
如果相同,再调用equals方法,如果equals方法相同,证明相等,不相同,证明不相等。
==:主要用在基本数据类型及引用
Equals:主要是对象或对象引用的比较。
15、抽象类与接口的区别
1,抽象类里可以有构造方法,而接口内不能有构造方法。
2,抽象类中可以有普通成员变量,而接口中不能有普通成员变量。
3,抽象类中可以包含非抽象的普通方法,而接口中所有的方法必须是抽象的,不能有非抽象的普通方法。
4,抽象类中的抽象方法的访问类型可以是public ,protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5,抽象类中可以包含静态方法,接口内不能包含静态方法。
6,抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static类型,并且默认为public static类型。
7,一个类可以实现多个接口,但只能继承一个抽象类。
再补充点两者在应用上的区别:
接口更多的是在系统框架设计方法发挥作用,主要定义模块之间的通信,而抽象类在代码实现方面发挥作用,可以实现代码的重用
16、为什么要用Class.forName方法
从JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类已经加载;2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。
现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
最后用最简单的描述来区分new关键字和newInstance()方法的区别: newInstance: 弱类型。低效率。只能调用无参构造。 new: 强类型。相对高效。能调用任何public构造。
17、java连接池的使用
18、数据库的实例与用户的概念
一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成
19、RMI的基类有哪些
20、如何访问不同的数据库
2010、10、18 湖南龙通科技有限公司
1、Hibernate对象的几种状态,以及Session的不同操作对对象的影响
临时态:通过new实例化的对象,在Session中不存在
持久化状态:sava、savaOrUpdate、update可将临时状态转为持久化状态 数据库存在缓存中对应的数据
游离状态:delete、clear、close 数据库中不存在 Session中存在 2、static{ System.out.println("java静态块,启动时就会加载"); } { System.out.println("初始化块"); } 3、Dictionary实现的不是Collection接口,而是继承了Object
4、ZipInputStream类的对象可作为InputStreamReader类构造方法的参数,但不能作为FileInputStream类构造方法的参数
5、HQL与SQL的区别 sql 面向数据库表查询
hql 面向对象查询
hql : from 后面跟的 类名+类对象 where 后用 对象的属性做条件
sql: from 后面跟的是表名 where 后 用表中字段做条件
6、Spring中Bean的作用域:singleton、prototype、request、session、global session
、自定义bean装配作用域(在spring 2.0中作用域是可以任意扩展的,你可以自定义作用域,甚至你也可以重新定义已有的作用域(但是你不能覆盖singleton和prototype),spring的作用域由接口org.springframework.beans.factory.config.Scope来定义,自定义自己的作用域只要实现该接口即可)
7、用SSH设计一个用户登录的案例,画出类图和时序图
8、Flex 9、抽象工厂
2010、10、16 上海群硕
1、屋里三盏灯,屋外三个开关,一个开关仅控制一盏灯,屋外看不到屋里,只进一次屋,就知道哪个开关控制那盏灯 3个先开一盏开久点然后马上关了开另一盏然后进去一个灯是亮的摸另外两个都是灭的一个热的一个灯凉的。
4个先开两盏过30秒关一个再过30秒关另一个然后开第3个然后进去一个亮的另外3个一个烫手一个热的一个冷的
2010、10、20 恒生电子
1、java标识符 在Java语言中,标识符是以字母、下划线(…)或美元符($)开头,由字母、数字、下划线(一)或美元符($)组成的字符串。标识符区分大小写,长度.
在Java语言中,标识符是以字母、下划线(…)或美元符($)开头,由字母、数字、下划线(一)或美元符($)组成的字符串。标识符区分大小写,长度没有限制。除以上所列几项之外,标识符中不能含有其他符号,当然也不允许插入空格。在程序中,标识符可用作变量名、方法名、接口名、类名等。 2、数据库表间连接方式
Table A
aid adate
1 a1
2 a2
3 a3
TableB
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指: (就是left outer join,默认的就是outer)
select * from a left join b on a.aid = b.bid
首先取出a表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
同样的也有right join (就是right outer join,默认的就是outer)
指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。
交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
3、class A{
A(String string){
System.out.println("HS");
}
}
class B extends A{
B(){
System.out.println("Hello");
}
}
class SubTest{
public static void main(String[]args){
B b = new B();
}
}
这道题考察输出,实际编译出错,有这个选项!父类没有默认的构造函数,子类会编译通不过
4、若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
(A) 单链表 (B) 仅有头指针的单循环链表
(C) 双链表 (D)仅有尾指针的单循环链表
5、索引、增加列(长度、非空、类型)
数据查询 select
数据定义 create drop alter
数据操纵 insert update delete
数据控制 grant revoke
2010、10、25 拓维
1、class MyTest extends Test{
int count;
public MyTest(int cnt,int num){
super(num);
count = cnt;
}
//插入代码块
}
public class Test{
int number;
public Test(int i){
number = i;
}
} 答案:C
A、MyTest(){}
B、MyTest(int cnt){count = cnt;}
C、MyTest(int cnt){this(cnt,cnt);}
D、MyTest(int cnt){super(cnt);this(cnt,0);}
2、UNIX是著名的分时系统
3、子类可以继承父类的非私有方法和状态
4、Java语言中,复杂并发管理的机制是:多线程
5、接口是由常量和抽象方法组成的特殊类
6、URL URL由两个主要的部分构成:协议(Protoco1)和目的地(Destination)。 "协议"部分告诉我们自己面对的是何种类型的Internet资源。 web中最常见的协议是http,它表示从Web中取回的是HTML文档。其他协议还有gopher,ftp和telnet等。 目的地可以是某个文件名、目录名或者某台计算机的名称。例如。这样的一个URL能让浏览器知道HTML文档的正确位置以及文件名是什么。假如URL是ftp://ftp.netscape.com/,浏览器就知道自己该登录进入一个FTP站点,这个站点位于名为
2、int a =10,b=20,c=11,d=17; intK = a>b?a:c>d?d:ba+c?d:b;(这后面整个都是一个表达式) 3、以下定义的类,可以包外继承的有:
a. public final Class One
b. class Two
c. protected Class Three
d. Public Class Four
4、int i= 5/0; 编译没错,运行有错
5、public abstract class A{
public abstract void operation_1();
public void operation_2();
}
能符合以下类图的选项有:A B C E a.publicclass A_1 extends A{ publicvoid operation_1(){} } b.publicabstractclass A_2 extends A{ publicvoid operation_1(){} } c.publicabstractclass A_3 extends A{ } d.publicclass A_4 extends A{ } e.publicclass A_5 extends A{ publicvoid operation_1(){} publicvoid operation_2(){} } f.publicclassA_6{ private A a ; } 6、 String[] arr1 ={"a","b","1","c","b"}; List lst1 = new ArrayList(); lst1.add("d"); Collections.addAll(lst1,arr1); System.out.println(lst1); Set set1 = new HashSet(); set1.add("d"); Collections.addAll(set1, arr1); System.out.println(set1); 运行结果: [d, a, b, 1, c, b] [d, a, c, b, 1] 7、Short a = new Short(45); 编译有错 8、int[] arr = {1,3,3,2,8}; String str = ""; inti=0; publicvoid doIt(){ for(;iarr[i+1]){ str=arr[i]+arr[i+1]+str; break; } elseif(arr[i]truncate>delete
3、视图中的select可以存在order by、group by
4、创建只读视图:with read only
5、to_date('05-20-2009 11:56:56','MM-DD-YYYY HH24:MI:SS')
6、修改列类型,修改列值
update sala set salary=+90000
altertable sala modify job_cat number(
7、oracle中having关键字:通过group by进行分组后,然后筛选出满足having子句条件的组
8、多线程
在一个程序中,这些独立运行的程序片段叫作线程,利用它进行编程的概念叫作"多线程处理"。多线程处理的一个常见例子就是用户界面。利用线程,用户可按下一个按钮,程序会立即作出反应,而不是等待整个程序执行完了才进行响应。
在计算机编程中,一个基本的概念就是同时对多个任务加以控制。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。
为什么使用多线程:
线程是为了能同步完成完成多项任务,而不是为了提高运行效率,是为了提高资源使用率来提高系统的效率,线程是在同一时间需要完成多项任务的时候实现的。 线程的好处:.
使用线程可以把占据长时间的程序中的任务放到后台去处理 .用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
.程序的运行速度可能加快 .在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
线程的缺点:争用条件、死锁、活动锁、资源耗尽
9、协议
网络的七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
ppp(公私合作关系,public-private partnership):数据链路层
ICMP(Internet控制信息协议):网络层
Http:应用层
2010、11、5 广州金鹏
1、数据流图是需求分析阶段的成果
2、设计一个包含用户、角色、权限和用户组数据库表结构,并画出它们之间的关系图
1 一个用户只属于一个用户组
2 一个角色包含多个权限,
3 一个用户自身(非继承)可以有多个角色,也可以有多个权限
4 一个用户组可以有多个角色,也可以有多个权限
5 一个权限也可以属于多个角色。
6 一个用户的角色和权限来自两部分,一部分继承于所有父用户组的角色和权限,另一部分来自特别为其分配的角色和权限
7 一个用户组可以排除(exclude)一个角色, 而一旦在其子用户组或者在某个用户身上加入(include)这个角色, 那这个用户或者用户组将重拾这个角色
8 一个用户或用户组可以拒绝(disallow)一个权限, 一旦拒绝以后, 不管在什么地方再允许(allow)这个权限都于事无补
9 管理员可以做任何事情, 不受任何约束
3、unix,输入/输出设备看作普通文件
4、依赖
关联
泛化
聚集
共享聚集:部分可以参加多个整体,菱形为空
组合聚集:整体不存在,那么部分也不存在,菱形为黑色实体
5、测试
黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。这一方法是把测试对象看作一个打开的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试,通过在不同点检查程序的状态,确定实际的状态是否与预期的状态一致。
逻辑覆盖:
1、语句覆盖:设计若干个测试用例,运行被测程序,使得每一条可执行语句至少执行一次
2、判定覆盖:设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少执行经历一次
3、条件覆盖:设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次
4、判定-条件覆盖:设计足够的测试用例,使得判断中每个条件的所有可能取值至少执行一次,同时每个判断本身的所有可能判断结果至少执行一次
5、条件组合覆盖:设计足够的测试用例,运行被测程序,使得每个判断的所有可能的条件取值组合至少执行一次
6、路径覆盖:设计足够多的测试用例,覆盖程序中所有可能的路径
6、线程几种状态的转换
2010、11、6 湖南科创
1、静态变量与实例变量的区别 类的成员变量有两种:一种是被static关键字修饰的变量,叫类变量或静态变量,一种是没有被static修饰的,叫做实例变量
静态变量和实例变量的区别在于:
类静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享,静态变量可以通过类名直接访问。静态变量的生命周期取决于类的生命周期,当类被加载的时候,静态变量被创建并分配内存空间,当类被卸载时,静态变量被摧毁,并释放所占有的内存。
类的每一个实例都有相应的实例变量,每创建一个类的实例,java虚拟机为实例变量分配一次内存,实例变量位于堆区中,实例变量的生命周期取决于实例的生命周期,当创建实例时,为实例变量背创建,并分配内存,当实例被销毁时,实例 变量被销毁,并释放所占有的内存空间。
假如成员变量时引用变量,该成员变量结束生命周期时,并不意味着它所引用对象也结束生命周期。变量的生命周期和对象的生命周期是不同的概念。 2、java的23中设计模式
Factory(工厂模式)、Builder(建造模式)、Factory Method(工厂方法模式)、Prototype(原始模型模式)、Singleton(单例模式)、Fa??ade(门面模式)、Adapter(适配器模式)、Bridge(桥梁模式)、Composite(合成模式)、Decorator(装饰模式)、Flyweight(享元模式)、Proxy(代理模式)、Command(命令模式)、Interpreter(解释器模式)、Visitor(访问者模式)、Iterator(迭代子模式)、Mediator(调停者模式)、Memento(备忘录模式)、Observer(观察者模式)、State(状态模式)、Strategy(策略模式)、Template Method(模板方法模式)、Chain of Responsibility(责任链模式)
3、软件生存周期模型
瀑布模型:也称线性顺序模型或软件生存周期模型。瀑布模型遵循软件生存周期的划分,明确规定各个阶段的任务,各个阶段的工作自上而下顺序展开,如同瀑布流水,逐级下落。特征:阶段间的顺序性和依赖性;推迟实现的观点;质量保证的观点。缺点:缺乏灵活性,无法解决软件需求不明确或不准确的问题
快速原型模型:快速原型是快速建立起来的可以在计算机上运行的程序,他能完成的功能往往是最终产品能完成功能的一个子集。快速原型的关键是在于能尽可能"快速"地构造原型,一旦确定了用户的真正需求,所构造的原型将被丢弃,快速原型模式不符合主流的发展。
增量模型:是瀑布模型的顺序特性与快速原型法的迭代特征相结合的产物。使用增量模型是,第一个增量构件往往实现软件的基本需求,提供最核心的功能。缺点:各个构件的并入会产生一定的冲突;容易出现边做边改的方式,从而使软件过程控制失去整体性
螺旋模型:是将瀑布模型和原型模型结合起来,并且加入两种模型均忽略了的风险分析,弥补了两者的不足。分为四个部分:制定计划、风险分析、实施工程、客户评估。缺点:客户不能接受这中分析方法;进行项目风险分析,会降低项目利润。
4、编码的转换
String str = new String(strInput.getBytes("ISO8859_1"),"GBK");
5、js中的正则表达式
匹配输入的内容不为空格:txtName.replace(/(^\s*)|(\s*$)/,"")==""
验证邮箱的格式:var p2 = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
if(!p2.exec(email)) {alert('邮箱格式不对!'); return false;}
6、JDBC访问数据库的一个基本流程
①加载驱动 Class.forName("oracle.jdbc.driver.OrcaleDriver")
②使用DriverManager类,创建连接对象
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@主机IP:端口号:服务器名",用户,口令)
③创建query语句,通过连接对象获取PrepareStatement,执行query语句
④处理结果
⑤释放资源(关闭连接)
7、Struts是如何实现MVC,它的工作流程是怎样的
Model是由Action(应该属于c)和ActionForm等构成。Action对象封装了具体的处理逻辑,调用业务逻辑模块,可以用JavaBean和EJB等组件技术来处理数据库的访问,并且把响应提交到合适的View组件中。
View部分是通过JSP技术实现的。Struts还提供了自定义的标记库,通过使用这些自定义标记创建的JSP表单,可以实现和Model部分中的ActionForm的映射,完成对用户数据的封装
Controller功能由ActionServlet和ActionMapping对象构成,核心是ActionServlet,它用来接受客户端的请求。ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分中Action处理器对象之间的映射。
对于采用Struts框架的Web应用,在Web应用时就会启动加载并初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把他们存放到各种配置对象中,例如ActionServlet接收到一个客户请求时,将执行如下流程.
1).检索和用户请求匹配的ActionMapping实例,如果不存在,就返回用户请求路径无效的信息.
2).如果ActionForm实例不存在,就创建一个ActionFrom对象,把客户提交的表单数据保存到ActionForm对象中.
3).根据配置信息决定是否需要表单验证,如果需要就调用ActionForm的validate()方法.
4).如果ActionForm的对象返回null或返回一个不包含ActionMessage的ActionErrors对象,就表示表单验证成功.
5).ActionServlet根据ActionMapping实例包含的映射信息决定将转发给哪个Action.如果相应的Action实例不存在,就先创建这个实例,然后调用Action的execute()方法.
6).Action的execute()方法返回一个ActionForwd对象,ActionServlet再把客户请求转发给ActionForward对象指向的JSP组件.
7).ActionFoward对象指向的JSP组件生成动态网页,返回给客户.
对于以上流程的(4),如果ActionForm的validate()方法返回一个包含一个或多哥ActionMessage的ActionErrors对象,就表示表单验证失败,此时ActionServlet将直接把请求转发给包含客户提交表单的JSP组件.在这种情况下,不会在创建Action对象并调用Action的execute()方法.
8、SSH2的优点
①开发效率:j2ee采用分层架构,这可以提高开发效率
②需求的变更:在项目的实施过程中,需求的变更是在所难免的,j2ee采用优秀的解耦合框架,在优秀的分层架构里,控制层依赖于业务逻辑层,但绝不与任何具体的业务逻辑组件耦合,只与接口耦合
9、==与equals的区别
==比较的是==两边引用数据类型的对象在内存中的地址是不是相同,如何相同表示是同一对象,否则不是同一对象;而equals比较是对象的类型和值是否都相同,如何都相同则返回true
10、java本身性能的优化
For()循环外层循环要少,内层循环可以多