1. MVC的各个部分都有哪些技术来实现?如何实现?

Mmodel代表的是应用的业务逻辑,通过JavabeenEJB实现,

Vview代表的是应用的表示面,有jsp页面产生

Ccontroller提供应用的处理过程机制,一般是一个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. JDKJRE的区别是什么?

JDK包含了JRE,但是JRE是可以独立安装的

 JDKJava Development Kit的缩写,是Java的开发工具包,主要包含了各种类库和工具

 JREJava Runtime Environment的缩写,是Java程序的运行环境。既然是运行,当然要包含JVM,也就是所谓的Java虚拟机,还有所以的Java类库的class文件,都在lib目录下,并且都打包成了jar

5. StringStringBufferStringBuilder之间的区别?

运行速度方面:StringBuilder > StringBuffer > String   String为字符串常量,而StringBuilderStringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

线程安全方面:StringBuilder是不安全的,运行速度快,而StringBuffer是线程安全的,运行速度慢。

6. Listmapset三个接口,存取元素时,各有什么特点?

List特点:元素有放入顺序,元素可重复。

Set特点:元素无放入顺序,元素不可以重复。(元素虽然无放入顺序,但是元素在set中的位置是有该元素的hashcode决定的,其位置其实是固定的)

Map特点:元素按键值对存储(key-value),无放入顺序

List接口有是三个实现类:linkedlistArrayListvector

LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢

ArrayListVector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低

Set接口有两个实现类:hashset(底层由hashmap实现),linkedhashset

Map接口有三个实现类:HashMapHashTableLinkeHashMap

7. Forwardredirect的区别?

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. 两张表,studentsidsnamedid),depdidtname)。学生表和院系表。

(1)请按系号升序,学号降序列出学生的系号、学号、姓名

select did,sid,sname from student order by did asc, sid desc;

(2)请分别用(1)不包含inexists2)包含in3)包含existssql语句,查询出所有系名等于工商院的学生。

10. 请列举三个以上Oracle索引失效的情况。

1,<>
2,单独的>,<,(有时会用到,有时不会)
3,like "%_" 百分号在前.
4,表没分析.
5,单独引用复合索引里非第一位置的索引列.
6,字符型字段为数字时在where条件里不添加引号.
7,对索引列进行运算.需要建立函数索引.
8,not in ,not exist.
9,当变量采用的是times变量,而表的字段采用的是date变量时.或相反情况。
10, 索引失效。
11,基于cost成本分析(oracle因为走全表成本会更小):查询小表,或者返回值大概在10%以上
12,有时都考虑到了 但就是不走索引,drop了从建试试在
13,B-tree索引 is null不会走,is not null会走,位图索引 is null,is not null   都会走
14,联合索引 is not null 只要在建立的索引列(不分先后)都会走
in null   必须要和建立索引第一列一起使用,当建立索引第一位置条件是is null ,其他建立索引的列可以是is null(但必须在所有列都满足is null的时候),或者=一个值;
当建立索引的第一位置是=一个值时,其他索引列可以是任何情况(包括is null =一个值),以上两种情况索引都会走。其他情况不会走。

 11. 请描述Oracle数据库启动的三个阶段?

1startup nomount -- 启动实例,不加载数据库

       nomount:在这一阶段,只需要读取initSID.ora文件,启动数据库实例,创建后台进程。在initSID.ora文件中,可以定位SPFILEORAC.ora文件,这是参数文件,通过它可以初始化SGA和启动后台进程。并可以定位控制文件位置。在此阶段,可以执行的操作有:重建控制文件,重建数据库。

2alter database mount -- 加载数据库

       mount:在nomount阶段,可以通过读取控制文件来转换到mount阶段。在数据库加载阶段(mount),所有的数据文件和联机日志文件的名称和位置都从控制文件中读取,但是并没有真正查找这些文件。在此阶段,可以执行的操作有:数据库日志归档、数据库介质恢复、使数据文件联机或脱机、重定位数据文件和联机日志文件。

3alter 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/LISTHIBERNATE提供了这方面的支持c) 属性延迟加载;

18. 类的加载过程?

1)通过一个类的全限定名来获取定义此类的二进制字节流。

2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构

3)Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口。

19. 多线程有哪几种实现方法?同步有哪几种实现方法?

Java实现多线程有两种方法:

  1. 继承Thread
  2. 实现runnable接口

共同点:都必须用Thread产生线程,然后再调用start()方法。

不同点:

  1. 继承Thread类有一个缺点就是单继承,而实现Runnable接口则可以实现多继承。
  2. 继承Thread类如果产生Runnable实例对象,就必须产生多个Runnable实例对象,然后再用Thread产生多个线程。而试下了Runnable接口,只需要建立一个实现这个类的实例,然后用这一个实例对象产生多个线程,即实现了资源的共享性。

同步的实现方面有两种:分别是synchronized,waitnotity
public synchronized void save(){}

 20. 不通过new语句创建对象有哪几种方式?

Java中创建对象有四种方式:

  1. new语句创建对象
  2. 运用反射机制,调用java.lang.class 或者java.lang.reflect.Constructor类的newInstance()实例方法
  3. 调用对象的clone()方法
  4. 运用反序列化手段,调用java.io.ObjectInputStream对象的readObject()方法
  5. 写一个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中的基本类型?

四类八种:数值型(整数型:byteshortintlong

浮点型:floatdouble

字符型:char

布尔型:boolean

引用类型(类class、接口interface、数组)

22. 什么是cookieSessioncookie有什么区别?

Cookieweb服务器发送数据到客户端并且将信息保存在客户端的一种机制,用来记录用户的信息。

Session是服务端记录用户状态时用于标识具体用户的机制。

区别:1.cookie在客户端,session在服务器端

2.cookie的安全性一般,他人可以通过分析存放在本地的cookie并进行cookie欺骗。Session的安全性高于cookie

  1. 单个的额cookie保存的数据不能超过4k,很多浏览器限制一个站点最多保存20cookie
  2. Session可以放在文件、数据库或者内存中,在一定时间内他是保存在服务器上的,当访问增多时,会较大的占用服务器的性能。
  3. Session的运行依赖session IDsession ID存放在cookie中,如果浏览器禁用了cookiesession也会失效。
  4. 用户验证一般会用session,因此,维持一个会话的核心就是在客户端的唯一标识,即session ID

 23. 写出几点java最佳编程实践?

  1. Jsp中引用资源永远使用绝对路径src=””
  2. URL编码永远使用utf-8
  3. Finally 语句中不要return xx

finally语句只能做如下事件
-(1)关闭io资源,比如关闭inputstreamsocket; 
-(2)只做打印错误信息,捕获异常,不要抛出异常;

  1. 存储在数据库中的必须是原内容,而不是转义之后的

 24. 写一个Singleton(单例模式)出来

懒汉模式:

class Singleton {
private static Singleton s;
private Singleton(){
System.out.println("A Singleton Model example");

}

public static Singleton getSigleton(){
if(s==null){

s=new Singleton();
return s;

}

}

恶汉模式:

Public calss Singleton{

     Private singleton(){}

Private static singleton instance = new singleton();

Public static singleton gettlnstance(){

Return instance;

}   

}

 

25. Staticfinal关键字可以用来修饰什么,分别起什么作用?

Static可以修饰方法、属性和代码块

--1Static关键字修饰方法称为静态方法,静态方法不依赖对象就可以访问,所以对于静态方法是没有this

在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法/变量的

--2static变量也被称为静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

--3static关键字用来形成静态代码块以优化程序性能。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. 同步请求和异步请求有什么不同?请描述一个使用同步请求和异步请求的场景。

同步:发送方发出数据后,等待收方发回响应后才发下一个数据包的通讯方式。

异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。