1. MVC的各个部分都有哪些技术来实现?如何实现?
M:model代表的是应用的业务逻辑,通过Javabeen,EJB实现,
V:view代表的是应用的表示面,有jsp页面产生
C:controller提供应用的处理过程机制,一般是一个servlet,通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用
2. J2EE常用的设计模式有哪些?说明工厂模式?
Java中的23种设计模式:
Factory(工厂模式),Builder(建造模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),Adapter(适配器模式),Bridge(桥梁模式), Composite(合成模式),Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),Observer(观察者模式), State(状态模式), Strategy(策略模式),Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
3. 什么是java虚拟机?为什么java被称作是“平台无关的编程语言?”
Java虚拟机是指在实际的计算机上仿真模拟各种计算机功能实现的,java虚拟机有自己完善的硬体架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。
Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
4. JDK和JRE的区别是什么?
JDK包含了JRE,但是JRE是可以独立安装的
JDK是Java Development Kit的缩写,是Java的开发工具包,主要包含了各种类库和工具
JRE是Java Runtime Environment的缩写,是Java程序的运行环境。既然是运行,当然要包含JVM,也就是所谓的Java虚拟机,还有所以的Java类库的class文件,都在lib目录下,并且都打包成了jar。
5. String、StringBuffer、StringBuilder之间的区别?
运行速度方面:StringBuilder > StringBuffer > String String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。
线程安全方面:StringBuilder是不安全的,运行速度快,而StringBuffer是线程安全的,运行速度慢。
6. List、map、set三个接口,存取元素时,各有什么特点?
List特点:元素有放入顺序,元素可重复。
Set特点:元素无放入顺序,元素不可以重复。(元素虽然无放入顺序,但是元素在set中的位置是有该元素的hashcode决定的,其位置其实是固定的)
Map特点:元素按键值对存储(key-value),无放入顺序
List接口有是三个实现类:linkedlist,ArrayList,vector
LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢
ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低
Set接口有两个实现类:hashset(底层由hashmap实现),linkedhashset
Map接口有三个实现类:HashMap,HashTable,LinkeHashMap
7. Forward和redirect的区别?
Forward请求转发
request.getRequestDispatcher().forward(request,response);
Redirect重定向response.sendRedirect();
请求转发是在服务器端完成的,重定向是在客户端完成的
请求转发的速度快,重定向速度慢
转发是同一次请求,重定向是两次请求
转发的地址栏没有变化,重定向地址栏有变化
转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成。
8. Jsp有哪些内置对象,作用分别是什么?
|
名称 |
数据类型 |
说明 |
|
request |
javax.servlet.http.HttpServletRequest |
客户端的请求信息 |
|
response |
javax.servlet.http.HttpServletResponse |
服务器对客户端的响应 |
|
out |
javax.servlet.jsp.JspWriter |
Web浏览器内输出信息 |
|
page |
java.lang.Object |
page 对象代表JSP本身 |
|
pageContext |
javax.servlet.jsp.PageContext |
页面属性范围,可以获取其他属性范围对象 |
|
session |
javax.servlet.http.HttpSession |
会话对象 |
|
application |
javax.servlet.ServletContext |
应用程序范围 |
|
config |
javax.servlet.ServletConfig |
Servlet初始化配置信息 |
|
exception |
java.lang.Throwable |
异常处理对象 |
9. 两张表,student(sid,sname,did),dep(did,tname)。学生表和院系表。
(1)请按系号升序,学号降序列出学生的系号、学号、姓名
select did,sid,sname from student order by did asc, sid desc;
(2)请分别用(1)不包含in和exists(2)包含in(3)包含exists的sql语句,查询出所有系名等于工商院的学生。
10. 请列举三个以上Oracle索引失效的情况。
|
1,<> |
11. 请描述Oracle数据库启动的三个阶段?
|
1、startup nomount -- 启动实例,不加载数据库 nomount:在这一阶段,只需要读取initSID.ora文件,启动数据库实例,创建后台进程。在initSID.ora文件中,可以定位SPFILEORAC.ora文件,这是参数文件,通过它可以初始化SGA和启动后台进程。并可以定位控制文件位置。在此阶段,可以执行的操作有:重建控制文件,重建数据库。 2、alter database mount -- 加载数据库 mount:在nomount阶段,可以通过读取控制文件来转换到mount阶段。在数据库加载阶段(mount),所有的数据文件和联机日志文件的名称和位置都从控制文件中读取,但是并没有真正查找这些文件。在此阶段,可以执行的操作有:数据库日志归档、数据库介质恢复、使数据文件联机或脱机、重定位数据文件和联机日志文件。 3、alter database open -- 打开数据库 open:通过查找定位并打开数据文件和联机日志文件来切换到open阶段。此时数据库可用,可以建立会话。 |
12. 使用递归函数计算一个阶乘 如 :5!=5*4*3*2*1=120
|
public class JieCheng { public static int run(int n){ if (n == 1) { return n; }else { return n * run( n - 1 ); } } } |
13. 编写一段代码,将字符串’abcdefg’倒叙输出为’gfedcba’;
|
public static void main(String[] args) { String temp= ""; String str = "abcdefg"; char[] strs = str.toCharArray();
for(int i = strs.length-1; i>=0; i--){ temp += strs[i]; } System.out.print(temp); } |
15. 请说明sysnchronized(锁、线程)关键字的作用,在什么情况下使用?
synchronized修饰方法和synchronized修饰代码块。
主要是用来处理java中的同步机制,用来防止同一个资源被用户并发访问时,会出现并发问题。
16. 接口和抽象类有什么区别?两者分别在什么情况下使用?
|
接口是对动作的抽象,抽象类是对根源的抽象。 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。 1、抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。 2、抽象类要被子类继承,接口要被类实现。 3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现 4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。 5、抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。 6、抽象方法只能申明,不能实现,接口是设计的结果 ,抽象类是重构的结果 7、抽象类里可以没有抽象方法 8、如果一个类里有抽象方法,那么这个类只能是抽象类 9、抽象方法要被实现,所以不能是静态的,也不能是私有的。 10、接口可继承接口,并可多继承接口,但类只能单根继承。
|
17. 从代码编码(采用Hibernate技术)和数据库设计两个层面,说出一些数据库操作与优化方面的经验?
a) 降低关联的复杂性;
b) 尽量不使用联合主键
c) ID的生成机制,不同的数据库所提供的机制并不完全一样
d) 适当的冗余数据,不过分追求高范式
HQL优化:HQL如果抛开它同HIBERNATE本身一些缓存机制的关联,HQL的优化技巧同普通的SQL优化技巧一样,可以很容易在网上找到一些经验之谈。
延迟加载:a) 实体延迟加载:通过使用动态代理实现b) 集合延迟加载:通过实现自有的SET/LIST,HIBERNATE提供了这方面的支持c) 属性延迟加载;
18. 类的加载过程?
1)通过一个类的全限定名来获取定义此类的二进制字节流。
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构
3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口。
19. 多线程有哪几种实现方法?同步有哪几种实现方法?
|
Java实现多线程有两种方法:
共同点:都必须用Thread产生线程,然后再调用start()方法。 不同点:
|
|
同步的实现方面有两种:分别是synchronized,wait和notity |
20. 不通过new语句创建对象有哪几种方式?
Java中创建对象有四种方式:
- 用new语句创建对象
- 运用反射机制,调用java.lang.class 或者java.lang.reflect.Constructor类的newInstance()实例方法
- 调用对象的clone()方法
- 运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法
- 写一个java正则表达式,用于匹配email地址(填写表达式即可);
|
public static void main (String[] args) { String str = "sdfsdfsd23232323@baidu.com2323sdf@sdfs.comddd"; String reg = "([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,6})"; Pattern pattern = Pattern.compile (reg); Matcher matcher = pattern.matcher (str); while (matcher.find()) { System.out.println (matcher.group()); } } |
21. Java中的基本类型?
四类八种:数值型(整数型:byte、short、int、long
浮点型:float、double)
字符型:char
布尔型:boolean
引用类型(类class、接口interface、数组)
22. 什么是cookie?Session和cookie有什么区别?
Cookie是web服务器发送数据到客户端并且将信息保存在客户端的一种机制,用来记录用户的信息。
Session是服务端记录用户状态时用于标识具体用户的机制。
|
区别:1.cookie在客户端,session在服务器端 2.cookie的安全性一般,他人可以通过分析存放在本地的cookie并进行cookie欺骗。Session的安全性高于cookie。
|
23. 写出几点java最佳编程实践?
- Jsp中引用资源永远使用绝对路径src=””
- URL编码永远使用utf-8
- Finally 语句中不要return xx
|
finally语句只能做如下事件:
|
24. 写一个Singleton(单例模式)出来
|
懒汉模式: class Singleton { } public static Singleton getSigleton(){ s=new Singleton(); } } |
|
恶汉模式: Public calss Singleton{ Private singleton(){} Private static singleton instance = new singleton(); Public static singleton gettlnstance(){ Return instance; } } |
25. Static和final关键字可以用来修饰什么,分别起什么作用?
Static可以修饰方法、属性和代码块
--1)Static关键字修饰方法称为静态方法,静态方法不依赖对象就可以访问,所以对于静态方法是没有this的
在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的
--2)static变量也被称为静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
--3)static关键字用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
Final关键字可以修饰类,变量,方法
修饰类不可以被继承,但是可以继承其他类
修饰的方法不能被子类重写
修饰变量:a. 修饰局部变量,变为常量,只能被赋值一次
b. 修饰引用变量,变量保存的是内存的地址,被修饰后就不能再重新创建。
26. Java有哪些异常类,请写出最少三个,并说明他们在什么情况下产生的?
输入不匹配异常:InputMisMatchException
空指针异常:NullPointerException
类型强制转换异常:ClassCastExceptin/NumberFormatExction
数组索引(下标越界异常):ArrayIndexOfBoundsExction
文件已经结束异常:EOFException
不合法参数异常:IllagalArgumentException
文件未找到异常:FileNotFoundException
操作数据库异常:SQLException
输入输出异常:IOException
算数异常(除数为0):ArithmaticException
27. Jsp页面是如何执行的?Jsp执行的效率比servlet低吗?
创建jsp页面,将jsp页面部署在Tomcat服务器下
用户第一次访问jsp页面时,将jsp页面转译成servlet
Jspc对转译的servlet文件编译成servlet.class文件
服务器访问servlet.class文件并将响应结果响应到客户端
28. Servlet api 中的forWord() 与 redirect() 的区别?
请求转发(内部跳转、服务器跳转):
request.getRequestDispather("地址").forward(request,response);
a、服务器端完成跳转,地址栏地址不会变化;
b、效率高,能继续访问request中的数据;
c、客户端只发一个请求,最后获得一个响应;
d、只能跳转到该web应用程序的内部页面地址;
重定向(客户端的跳转):response.sendRedirect("地址");
a、服务器与客户端共同参与跳转,跳转最终客户端发出,地址栏地址发生改变;
b、效率较低,不能继续访问原请求中的数据;
c、客户端发送两个请求,获得两个响应;
d、可以跳转到网络上的任何可以访问的地址;
29. 同步请求和异步请求有什么不同?请描述一个使用同步请求和异步请求的场景。
同步:发送方发出数据后,等待收方发回响应后才发下一个数据包的通讯方式。
异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。