CoreJava
部分:
1.
简述一下
java
基本数据类型及所占位数
, java
基本数据类型:
4
类
8
种
逻辑型:
boolean false/true 1byte
文本型:
char 2byte
整数型:
byte(1byte)
,
short(2byte)
,
int(4byte)
,
long(8byte)
浮点数型:
float(4byte)
,
double(8byte)
2.
说出
5
个的启动时异常:
RunTimeException-----------------------运行时异常
NullPointerException--------------------空指针异常
ArrayIndexOutOfBoundsException--数组越界异常
ArithmeticException---------------------算术运算异常
ClassCastException---------------------类型转换异常
NumberFormatException---------------数字格式异常
3. HashMap
和
HashTable
的区别:
(1).HashMap
允许空键值对,
HashTable
不允许
(2).HashMap 不是线程安全的,
HashTable
是
(3).HashMap 直接实现
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
的方法是否可以改变返回值的类型
?
方法的重写
Overriding
和重载
Overloading
是
Java
多态性的不同表现。
重写
Overriding
是父类与子类之间多态性的一种表现
,
方法名,参数列表,
返回值类型都得与父类的方法一致
.
重载
Overloading
是一个类中多态性的一种表现。重载的方法是可以改变返回值的类型。
9.
用一句话总结一下冒泡排序:
依次比较相邻的两个数,将小数放在前面,大数放在后面
.
10.
实现线程安全的两种方式:
(1).synchronized
方法:通过在方法声明中加入
synchronized
关键字来声明synchronized 方法。
(2).synchronized
块:通过
synchronized
关键字来声明
synchronized
块。
11
.说一下
“==”
和
equals()
方法在字串变量操作中的不同
?
”==”
比较的是两个字符串对象的地址,
equals()
是比较的两个字符串的具体值。
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.
什么是回调函数?
某个程序
S(Student.main)
调用服务程序
A(Arrays)
中的某个方法
(sort),
服务程序A
的
sort
方法在某个时候反过来调用
S
的某个方法
(compareTo),
这种情况下,compareTo
叫做
S
的回调方法。
例如:
public class Student implements Comparable{
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,"x",22,94);
Student s3 = new Student(3,"w",19,78);
Student [] arrs = {s1,s2,s3};
Arrays.sort(arrs);
19
.遍历文件夹下所有
.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.println(file.getName());
}
}
20.
线程的基本概念、线程的本状态以及状态之间的关系:
新建
(Born) :
新建的线程处于新建状态
就绪
(Ready) :
在创建线程后,它将处于就绪状态,等待
start()
方法被调用
运行
(Running) :
线程在开始执行时进入运行状态
睡眠
(Sleeping) :
线程的执行可通过使用
sleep()
方法来暂时中止。在睡眠后,线程将进入就绪状态
等待
(Waiting) :
如果调用了
wait()
方法,线程将处于等待状态。用于在两个或多个线程并发运行时。
挂起
(Suspended) :
在临时停止或中断线程的执行时,线程就处于挂起状态。
恢复
(Resume) :
在挂起的线程被恢复执行时,可以说它已被恢复。
阻塞
(Blocked) –
在线程等待一个事件时(例如输入
/
输出操作),就称其处于阻塞状态。
死亡
(Dead) –
在
run()
方法已完成执行或其
stop()
方法被调用之后,线程就处于死亡状态。
串行化的注意事项以及如何实现串行化答:如果有循环引用是不可以串行化的。对象输出流的 WriteObject
方法和 对象输入流的
ReadObect
方法
21.
描述一下
JVM
加载
class
文件的原理机制
?
JVM
中类的装载是由
ClassLoader
和它的子类来实现的
,Java ClassLoader
是一个重要的
Java运行时系统组件。它负责在运行时查找和装入类文件的类。
22.
什么是触发器和存储过程?
触发器是存储在数据库中的块,这些块一旦被构造后,就可以多次执行,当触发它的事件发生时调用该触发器。触发事件是指对表中数据的操作,如插入、删除和修改。
存储过程是将常用的或很复杂的工作,预先用
SQL
语句写好并用一个指定的名称存储起来,
那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时
,
只需调用
execute,
即可自动完成命令。我的理解就是一堆
sql
的集合,可以建立非常复杂的查询,编译运行,所以运行一次后,以后再运行速度比单独执行 SQL
快很多。
UML 方面:
标准建模语言
UML
。用例图
,
静态图
(
包括类图、对象图和包图
),
行为图
,
交互图
(
顺序图
,
合作图),
实现图
Servlet&Jsp
部分:
1.MVC
的各个部分都有那些技术来实现
?
如何实现
?
MVC
是
Model
-
View
-
Controller
的简写。
"Model"
代表的是应用的业务逻辑(通过
JavaBean,
EJB 组件实现),
"View"
是应用的表示面(由
JSP
页面产生),
"Controller"
是提供应用的处
理过程控制(一般是一个
Servlet
),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。
2.servlet
的生命周期:
web
容器加载
servlet
,生命周期开始。
通过调用
servlet
的
init()
方法进行
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
参数都可以获取。
7.Jsp
的四种范围:
page 否是代表与一个页面相关的对象和属性。作用域在当前页。
request 是是代表与Web 客户机发出的一个请求相关的对象和属性。
session 只要访问的浏览器不关闭,作用域就一直存在。
application 只要访问的服务器不关闭,作用域就一直存在。
8.
什么是
B/S
结构
,C/S
结构?
C/S
是
Client/Server
的缩写。服务器通常采用高性能的
PC
、工作站或小型机,并采用大型数据库系统,如 Oracle
、
Sybase
、
Informix
或
SQLServer
。客户端需要安装
专用的客户端软件。
B/S
是
Brower/Server
的缩写,客户机上只要安装一个浏览器
(Browser)
,如:
Netscape Navigator
或
Internet Explorer
,服务器安装
Oracle
、
Sybase
、
Informix
或
SQLServer 等数据库。在这种结构下,用户界面完全通过
WWW
浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server
同数据库进行数据交互。
9.
编码格式转换问题:
String str=new String("
中国
".getBytes("ISO-8859-1"),"GBK").trim();
JDBC&XML
1.说说 jdbc 连接数据库的步骤
1.注册驱动
2.获得连接
3.执行 sql 语句
4.获得结果集,进行结果集的处理
5.关闭结果集
6.关闭连接,释放资源
statement 和 preparedstatement 的区别
1.statement
是
preparedstatemnet
的父类。
2.statement
是直接发送
sql
语句到数据库,事先没有进行预编译。prepatedstatement 会将
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 等。
Oracle 数据库部分:
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 ename,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是
DLL
操作,不产生
rollback
,速度会快一些。
3.
用一条
sql
语句取出所有姓名有重复的学员姓名和重复的记录数
.
select name, count(*) from student group by name having count(*) > 1 order by count(*) desc;
4.
去除 oracle 数据库 表中重复数据应有如下两种方法:
方法一:创建新表删除旧表法
(1)create table student1 as select distinct id, name, score from student;
(2)drop table student;
(3)rename student1 to student;
方法二:使用 rowid(地址)伪列:
删除伪列地址除了最大地址值以外的记录
delete from temp where rowid not in (select max(rowid) from temp group by id);
删除伪列地址除了最大地址值以外的记录
delete from temp where rowid not in (select min(rowid) from temp group by id);
三大框架部分:
1.
应用服务器有哪些:
weblogic
,
jboss
,
tomcat。
2. Hibernate
优于
JDBC
的地方:
(1).
对
jdbc
访问数据库进行了封装,简化了数据访问层的重复代码。
(2).Hibernate
操作数据库是面向对象的操作。
3.
hibernate工作原理:
(1).读取并解析配置文件
(2).读取并解析映射信息,创建SessionFactory
(3).打开Sesssion
(4).创建事务Transation
(5).持久化操作
(6).提交事务
(7).关闭Session
(8).关闭 SesstionFactory。
为什么要用:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作。
3. hibernate 的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
4. J2EE
共有
23
中设计模式,说出其中几种常用的:
工厂模式(
Factory
)单例模式(
Singleton
)
适配器模式(
Adapter
)代理模式(
Proxy
)
模板方法模式(
Template Method
)
5. Hibernate
对象状态有哪几种,并简单介绍一下。
1.
临时状态:内存对象,并没有保存在数据库
2.
持久化状态 已经保存在数据库并纳入了
session
缓存中
3.
游离状题啊 已经保存在数据库中,但没有纳入
session
缓存中
6.spring 的优点?
(1).降低了组件之间的耦合性 ,实现了软件各层之间的解耦
(2).可以使用容易提供的众多服务,如事务管理,消息服务等
(3).容器提供单例模式支持
(4).容器提供了 AOP 技术,利用它很容易实现如权限拦截,运行期监控等功能
(5).容器提供了众多的辅助类,能加快应用的开发
(6).spring 对于主流的应用框架提供了集成支持,如 hibernate,JPA,Struts 等
(7).spring 属于低侵入式设计,代码的污染极低
(8).独立于各种应用服务器
(9).spring 的 DI 机制降低了业务对象替换的复杂性
(10).Spring 的高度开放性,并不强制应用完全依赖于 Spring,开发者可以自由选择 spring
的部分或全部;
7.介绍一下Struts的工作原理?
(1).
读取配置。加载
struts
控制器。
(2).
用户请求 用户提交表单或调用
URL
向
WEB
应用程序服务器提交一个请求,请求的数据用 HTTP
协议上传给
WEB
服务器。
(3).
通过
struts
控制器进行处理。
(4).
经过一系列的拦截器处理。
(5).
进行业务逻辑的处理。
(6).
响应用户
JSP
将结果展现给用户。
为什么要用:
1. JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱。
2. 基于Struts开发的应用:
不用再考虑公共问题
专心在业务实现上
结构统一,易于学习、维护
新手也可写出好程序
8.什么是 DI 机制?
依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在 spring 中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring 来完成,然后注入调用者因此也称为依赖注入。spring 以动态灵活的方式来管理对象 , 注入的两种方式,设置注入和构造注入。设置注入的优点:直观,自然构造注入的优点:可以在构造器中决定依赖关系的顺序。
9.什么是 AOP?
面向切面编程(AOP)完善 spring 的依赖注入(DI),面向切面编程在 spring 中主要表现为两个方面:
(1).面向切面编程提供声明式事务管理。
(2).spring 支持用户自定义的切面,面向切面编程(aop)是对面向对象编程(oop)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,是对应用执行过程中的步骤进行抽象,从而获得步骤之间的逻辑划分。
AOP 框架具有的两个特征:
(1).各个步骤之间的良好隔离性。
(2).源代码无关性。
10.什么是Hibernate延迟加载?
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在 Hibernate 中提供了对实体对象的延迟加载以及
对集合的延迟加载,另外在 Hibernate3 中还提供了对属性的延迟加载。
11.Hibernate中类之间的关联关系有几种?(如:一对多、多对多的关系)
many-to-one、one-to-many、many-to-many、 one-to-one
12.
说下Hibernate的缓存机制
一、hibernate一级缓存
(1).hibernate支持两个级别的缓存,默认只支持一级缓存;
(2).每个Session内部自带一个一级缓存;
(3).某个Session被关闭时,其对应的一级缓存自动清除;
二、hibernate二级缓存:
(1). 二级缓存独立于 session,默认不开启;
13.
Hibernate的查询方式:
本地
SQL
查询
、Criteria、Hql
14.
为什么要用spring?
Spring是一个轻量级的IOC和AOP框架。
IOC(控制反转)意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这称为控制反转
AOP(面向切面),它将那些影响多个类的行为封装到可重用的模块中,面向对象是把问题从同类事物中抽象出来,面向切面是把问题从不同类问题中抽象出来。
15. struts 框架提供了哪些辅助功能
1.自动收集数据(成员变量)
2.支持类型转换
3.国际化
4.异常处理
5.标签
16. struts1 和 struts2 的区别
1.struts1 控制器 servlet
struts2 控制器 filter
2.struts 收集数据时 ActionForm Struts2 成员变量
3.struts1 execute(Resquest,Response)
struts2 execute()
4.struts1 与 ServletAPI 耦合性强
struts2 与 ServletAPI 耦合性低
5.struts1 没有拦截器 struts2 有拦截器(可以使代码各司其职)
6.struts1 只能使用 jstl 标签,而 struts2 提供了 OGNL 表达式