CoreJava部分
1 简述下java基本数据类型及所占位数,java基本数据类型:4类8种
整数类型:byte(1byte),short(2byte),int(4byte),long(8byte)
浮点类型:float(4byte),double(8byte)
字符类型:char(2byte)
逻辑类型:boolean(false/true 1byte)
2 说出5个启动时异常
RunTimeException
------NullPointerException
------ArrayIndexOutOfBoundsException
------ClassCastException
------NumberFormatException
3 HashMap 和HashTable的区别:
1HashMap 允许空键值对,HashTable不允许
2HashMap不是线程安全的,HashTable是
3HashMap直接实现Map接口,HashTable继承Dictionary类
4.ArrayList,Vector,LinkedList存储性能和区别
它们都实现了List接口
ArrayList和Vector都是基于数组实现的
LinkedList基于双向循环链表(查找效率低,添加删除容易)
ArrayList不是线程安全的而Vector是线程安全的,所有速度上ArrayList高于Vector
5.Collection和Collections的区别
Collection是集合类的上级接口,继承与他的接口主要有Set和List
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜 索、排序、线程安全等操作。
6 List、Map、Set三个接口,存取元素时,各有什么特点?
List以特定次序来持有元素,可有重复元素。
Set 无法持有重复元素,内部排序
Map保存key-value值,value可多值。
7 final,finally,finalize的区别
Final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承
Finally 是异常处理语句结构的一部分,表示总是执行
Finalize 是Object类的一个方法,在垃圾收集时的其他资源回收,例如关闭文件等。
8 Overload和Override的区别。Overload的方法是否可以改变返回值的类型?
方法的重写Override和重载Overload是Java多态的不同表现。
重写Overriding是父类与子类之间多态的一种表现,方法名,参数列表返回值类型都得与父类的方法一直。
重载Overloading是一种类中多态的一种表现。重载的方法是可以改变返回值类型的。
9用一句话总结一下冒泡排序
依次比较相邻的两个数,将小数放在前面,大数放在后面。
10 实现线程安全的两种方式
1)synchronized方法:通过在方法声明加入synchronized关键字来声明synchronized方法
2)Synchronized块:通过synchronized关键字来声明synchronized快
11 说一下"=="和equal()方法在字符串变量操作中的不同?
"=="比较的是两个字符串对象的地址,equal() 是比较两个字符串的具体值
12 sleep和wait方法有什么区别
Sleep是线程(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依然保持,到时会自动恢复。调用sleep不会释放对象锁。
Wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象进入运行状态。
13 &和&&的区别
&位运算符:非短路运算符,它会把所有条件执行完毕之后,才会返回结果
&&逻辑运算(and):短路运算符,遇到不符合条件,立即终止程序的执行
14 error和exception的区别
Error:表示恢复是不可能的一种严重的问题,比如:内存溢出,不指望程序处理
Exception 程序运行时的异常,如果程序设计合理不会出现的情况
15请说出你锁知道的线程同步的方法
Wait():使一个线程处于等待状态,并且释放所有持有的对象的lock;
Sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常;
Notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
notityAll():唤醒所有处于等待状态的线程,注意不是给所有唤醒线程一个对象的锁,而是让它们竞争。
16.网络编程中涉及并发服务器,使用多进程和多线程,请问有什么区别?
1)进程:子进程是父进程的复制品子进程获得父进程数据空间堆和栈的复制品
2)线程:相对于进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他进程共享数据,但拥有自己的栈空间,拥有独立的执行序列
两者都可以提高程序的并度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。
17 什么是反射?
在运行过程中:
1对于任意一个类,可以知道这个类的属性和方法。
2对于任意一个对象,可以调用这个对象的任意方法。
对于这种动态获取的信息,以及动态调用对象方法的功能成为反射。
Java反射机制提供的功能
1运行时判断任意对象的所属类
2运行时构造任意类的对象
3运行时判断和调用对象的成员变量和方法
4生成动态代理
18 线程的基本概念、线程的本状态及状态之间的关系
新建(Born)新建的线程处于新建状态
就绪(Ready)在创建线程后,它将处于就绪状态,等待start()方法被调用
运行(Running)线程在开始执行时进入运行状态
睡眠(Sleeping)线程的执行可通过sleep()方法来暂时中止。在睡眠后,线程将进入就绪状态
等待(Waiting):如果调用了wait()方法,线程将处于等待状态。用于在两个或多个线程并发运行时。
挂起(Suspended)在临时停止或中断线程的执行时,线程就处于挂起状态 。
阻塞(Blocked)在线程等待一个事件时(例如输入/输出操作),就称处于阻塞状态
死亡(Dead)在run()方法已经执行或其stop()方法被调用之后,线程就处于死亡状态
19 描述下JVM加载class文件的原理机制
JVM中类的装载是由ClassLoader和它的子类来实现的java ClassLoader是一个重要的java运行时系统组件。它负责在运行时查找和装入类文件的类。
20什么是触发器和存储过程
触发器是存储在数据库中的块,这个块一旦被构造后,就可以多次执行,当触发它的事件发生时调用该触发器。触发事件是指对表中数据的操作,如插入、删除和修改。
存储过程是将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来,那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令。我的理解就是一堆sql的集合,可以建立非常复杂的查询,编译运行,所以运行一次后,以后再运行速度比单独执行SQL快很多
21什么是回调函数
某个程序S(Student.main)调用服务程序A(Arrays)中的某个方法(sort),服务程序A的sort方法在某个时候反过来调用S的某个方法(compareTo),这种情况下,compare叫做S的回调方法。
例如:public class Student implements Compareble{
Private int id;
Private String name;
Private int age;
Private int score;
//构造器
//getter/setter方法
//回调方法
Public int compareTo(Object obj){
Return
This.id-((Student)obj).id;
}
}
Student s1 = new Student(1,"a",18,89);
Student s2 = new Student(2,"a",18,89);
Student s3 = new Student(3,"a",18,89);
Student [] arrs = {s1,s2,s3};
Arrays.sort(arrs);
22 遍历文件夹下所有.java的文件?
Public void listFiles(String path){
File dir = new File(path);
Files [] files = dir.listFiles(new FileFilter(){
Public boolean accept(File f){
Return f.getName().endWith(".java");
}
});
For(File file:files){
System.out.print(file.getName());
}
}
Servlet&JSP部分
1MVC的各个部分都有哪些技术来实现?如何实现?
MVC是Model-View-Controller的简写。“Model”代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),“View”是应用的表面(由JSP页面产生),Controller是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
2 servlet 的生命周期
Web 容器加载servlet,生命周期开始。
通过调用service()方法实现,根据请求的不同调用不同的doGet()或者doPost()方法。
结束服务,web容器调用servlet的destroy()方法。
3 jsp与servlet的区别及联系
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。Servlet和JSP主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离出来。而JSP的情况是Java 和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
4 数据库连接池的工作机制
J2EE服务器启动的时候,会创建一定数量的池连接,并维持不少于此数量的池连接。程序需要时,池驱动程序会返回一个未使用的池连接并将其标记为忙。
如果当前没有空闲连接,池驱动会新建一批,数量有配置参数决定。
当调用池连接完成后,池驱动将此连接标记为空闲,其他调用就可以使用这个连接。
5 jsp有哪些内置对象?作用分别是什么?
JSP共有以下9种内置组件(可与ASP的6种内部组件相对应):
Request:用户端请求,此请求会包含来自GET/POST请求的参数
Response:网页传回用户端的回应
pageContext 网页的属性是这里管理
Session 与请求有关的会话期
Application servlet 正在执行的内容
Out 用来传送回应的输出
Config servlet 的构架部件
Page JSP 网页本身
Exception 针对错误网页,为捕捉的例外
6.forward和redirect的区别
Forward 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以它的地址还是原来的地址。
Redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
7Jsp的四种范围
Page 不是代表与一个页面相关的对象和属性。作用域在当前页。
Request 是代表与web客户机发出的一个请求相关的对象和属性
Session 只要访问的浏览器不关闭,作用域就一直存在
Application 只要访问的服务器不关闭,作用域就一直存在
8 什么是B/S结构,C/S结构
C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle 、Sybase 、Informix或SQLServer。客户端需要安装专用的客户端软件。
B/S是Browser/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle 、Sybase 、Informix或SQLServer等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务在服务器端实现。浏览器通过Web Server同数据库进行数据交互。
9 编码格式转换问题
String str = new String("中国".getBytes("ISO-8859-1")).trim();
JDBC&XML
1说说jdbc连接数据库的步骤
1.注册驱动
2.获得连接
3.执行sql语句
4.获得结果集,进行结果集的处理
5.关闭结果集
6.关闭连接,释放资源
2 statement 和preparedstatement的区别
1 statement 是preparedstatement的父类
2 statement 是直接发送sql语句到数据库,事先没有进行预编译
Preparedstatement会将sql进行预编译,当sql语句要重复执行时,数据库会调用以前编译好的sql,所以preparedstatement在性能方面会更好
3 preparedstatement在执行sql时,对传入的参数进行强制类型转换,以保证数据格式与底层数据库格式一致。
3 解析一个XML文档有哪些方式?
解析有:dom和sax两种
Dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大
Sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会触发一个事件,适合对XML的顺序访问,占用内容资源稍小
4 XML文档定义有几种形式
A:两种形式 dtd schema
B:本质区别:schema本身是xml的,可以被xml解析器解析(这也是DTD上发展schema的根本目的),
C:有 DOM,SAX、STAX等
三大框架部分
1 应用服务器有哪些:weblogic,jboss,tomcat
2 Hibernate优于JDBC的地方
1)对jdbc访问数据库进行了封装,简化了数据访问层的重复代码
2)Hibernate 操作数据库是面向对象的操作
3介绍下Struts2的工作原理
1 读取配置文件。加载struts控制器
2 用户请求 用户提交表单或调用URL向WEB应用程序服务器提交请求,请求的数据用HTTP协议上传给WEB服务器。
3 通过struts控制器进行处理
4 经过一系列的拦截器处理
5 进行业务逻辑的处理
6 响应给用户JSP将结果展现给用户
为什么要用?
1)JSP,Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的烦乱
2)基于Struts开发的应用:
不用考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可以写出好程序
4 struts框架提供了哪些辅助功能
1)自动收集数据(成员变量)
2)支持类型转换
3)国际化
4)异常处理
5)标签
5 hibernate的工作原理
1 读取并解析配置文件
2 读取并解析映射信息,创建SessionFactory
3 打开Session
4 创建事务Transaction
5 持久化操作
6 提交事务
7 关闭Session
8 关闭SessionFactory
为什么要用?
1 对JDBC访问数据库的代码做了封装,大大简化了数据访问繁琐的重复性代码。
2 Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3 hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
6 hibernate的对象状态有哪几种,并简单介绍下
1临时状态:内存对象,并没有保存在数据库
2 持久化状态:已经保存在数据库并纳入了session缓存中
3 游离状态:已经保存在数据库中,但没有纳入session缓存中
7 J2EE 共有23种设计模式,说出其中几个常用的:
工厂模式(Factory)单例模式(Singleton)
适配器模式(Adapter) 代理模式(Proxy)
模板方法模式(Template Method)
8 spring 的优点
1.降低了组件之间的耦合性,实现了软件各层之间的解耦
2.可以使用容易提供的众多服务,如事务管理,消息服务等
3.容器提供单例模式支持
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能
5.容器提供了众多的辅助类,能加快应用的开发
6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等
7.spring属于低侵入式设计,代码的污染极低
8.独立于各种应用服务器
9.spring的DI机制降低了业务对象替换的复杂性
10.spring的高度开发性,并u强制应用完全依赖于spring,开发者可以自由选择spring 的部分或全部。
9什么是DI机制
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,
具体的讲:当某个角色
需要另一个角色协助的时候,在传统的程序设计过程中,通常调用者来创建被调用者的实例。但在spring中 创建被调用者的工作不再有调用者来完成,因此成为控制反转。创建被调用者的工作由spring来完成,然后注入调用者 因此称为依赖注入。
Spring以动态灵活的方式来管理对象,注入的两种方式,设置注入和构造注入。
设置注入的优点:直观,自然
构造注入的优点:可以在构造器中决定依赖关系的顺序。
10 什么是AOP
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面
1 面向切面编程提供声明式事务管理
2 spring支持多用户自定义的切面
面向切面编程(AOP)是对面向对象编程(oop)的补充,
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,AOP是动态的抽象,是对应用执行过程中的步骤进行抽象,从获得步骤之间的逻辑划分。
AOP 框架具有的两个特征:
1.各个步骤之间的良好隔离性
2.源代码无关性
11 为什么要用spring
Spring是一个轻量级的IOC和AOP框架
IOC(控制反转)意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这个称为控制反转
AOP(面向切面),它将那些影响多个类的行为封装到可重用的模块中,面向对象是把问题从同类事物中抽象出来,面向切面是把问题从不同类问题中抽象出来。
12 什么是Hibernate的延迟加载
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓的延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。
13 说下Hibernate 的缓存机制
一、hibernate的一级缓存
a) Hibernate支持两个级别的缓存,默认只支持一级缓存
b) 每个Session内部自带一个一级缓存;
c) 某个Session被关闭时,其对应的一级缓存自动清除;
二、hibernate的二级缓存
二级缓存独立于session,默认不开启;
14hibernate的查询方式
本地SQL查询、Criteria、Hql
15 Hibernate中类之间的关联关系有几种(如:一对多,多对多的关系)
Many-to-many one-to-many may-to-many one-to-one
16 struts1和struts2的区别
1 struts1控制servlet struts2控制Filter
2 struts1 收集数据是 ActionForm Struts2 成员变量
3 struts1 execute(Resquest,Response)
Struts2 execute()
4 struts1 与ServletAPI耦合性强
Struts2与ServletAPI耦合性低
5 struts1 没有拦截器 struts2有拦截器(可以使代码各司其职)
6 struts1只能使用jstl标签,二struts2提供了OGNL表达式
四 数据库部分
1 薪水排序后薪水排名在第3-5的员工
1)select * from(select ename,sal,rownum rn from
(select ename,sal from emp_44 where sal is not null order by sal desc)where rownum<6)where rn>2;
2) select * from (select ename,sal,rownum rn from (select enam,sal from emp_44 where sal is not null order by sal desc)) where rn between 3 and 5;
2 删除一张表中所有数据的方式
1 truncate table 命令将快速删除数据表中的所有记录
2 delete 产生 rollback ,如果删除在数据量的表速度会很慢,同时会占用很多的rollback,segments.truncate 是DDL操作,不产生rollback,速度会快些。
3 用一条sql语句取出所有姓名有重复的学员姓名和重复的记录数
Select name,count(*) from student group by name having count(*)>1order by count(*)desc;
4 去除oracle数据库 表中重复数据应有如下两种方法:
方法一:创建新表删除旧表法
1)create student1 as select distinct id,name,score from student;
2)drop table student;
3)rename strudent1 to student;
方法二:使用rowid(地址)伪列
删除伪列地址除了最大地址值以外的记录
delete from temp where rowid not in(select max(rowid) from temp group by id);
删除伪列地址除了最大地址值以外的记录
delete from temp where rowid not (select min(rowid) from temp group by id);