1.Hibernate中怎么实现批量删除

在我们的Java项目中,批量更新是指在一个事务中更新大批量数据,批量删除是指在一个事务中删除大批量数据。批量删除虽然在Hibernate里也可以实现,但因Hibernate的实现机制是一个一个删除,在数量大的情况下很影响效率;其实 Hibernate提供的JDBC接口,可以方便的进行批量的更新和删除

占用大量内存,必须把1万个Customer对象先加载到内存,

为了迅速释放1万个Customer对象占用的内存,可以在更新每个Customer对象后,就调用Sessionevict()方法立即释放它的内存:



2.一个返回类型是数组的方法没有数据返回时,返回长零数组合适还是返回null合适,请说明理由?

假设一个方法返回一个数组,如果它返回null,则调用方法必须先判断是否返回null,才能对放回数组进一步处理,而如果返回空数组,则无须null用检查。鉴于此,返回数组的方法在没有结果时我们通常返回空数组,而不是null,这样做对于函数调用者的处理比较方便。


3.说说你常用的设计模式并用代码实现其中的一种

工厂方法模式

适配器模式Adapter

桥接模式 Bridge

外观模式 Facade

策略模式 Strategy

观察者模式 Observer

工厂方法模式代码

///<summary>    

/// 抽象产品类

///</summary>    

publicclass Product{  

public Product(){  

       Console.Write("newProduct");  

   }  

}  


///<summary>    

/// 具体产品类A

///</summary>  

publicclass ConcreteProductA:Product {  

   public ConcreteProduct(){  

       Console.Write("创建了一个 ConcreteProductA");  

   }  

}  

///<summary>    

/// 具体产品类B

///</summary>  

publicclass ConcreteProductB:Product {  

   public ConcreteProduct(){  

       Console.Write("创建了一个 ConcreteProductB");  

   }  

}  


///<summary>    

/// 抽象的创建者

///</summary>  

abstractpublic class Creator{  


   //抽象的工厂方法

   public abstract ProductFactoryMethod();  


}  

///<summary>    

/// 具体方法工厂A

///</summary>  

publicclass ConcreteCreatorA:Creator{  

   //返回一个产品A的对象

   public override ProductFactoryMethod(){  

       return new ConcreteProductA();  

   }  

}  


///<summary>    

/// 具体方法工厂B

///</summary>  

publicclass ConcreteCreatorB:Creator{  

   //返回一个产品B的对象

   public override ProductFactoryMethod(){  

       return new ConcreteProductB();  

   }  

}  


//client

staticvoid Main(string[] args)    

{    

   Creator c = new ConcreteCreatorA();  

   Product p = c.FcatoryMethod();  


   c = new ConcreteCreatorB();  

   p = c.FcatoryMethod();  


   Console.ReadLine();  

}    


4.linux 怎么让一个进程在后台运行

一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:
$ ./test.sh &

还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便:

$ screen -dmS screen_test



5.XML包括哪些解释技术,区别是什么?

:DOM,SAX,STAX
DOM:
处理大型文件时其性能下降的非常厉害。这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问SAX:不现于DOM,SAX是事件驱动型的XML解析方式。它顺序读取XML文件,不需要一次全部装载整个文件。当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理XML文件,适合对XML的顺序访问
STAX:Streaming API for XML (StAX)


6.sleepwait有什么区别收藏

第一种解释:

功能差不多,都用来进行线程控制,他们最大本质的区别是:sleep()不释放同步锁,wait()释放同步缩.  

还有用法的上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断;wait()可以用notify()直接唤起.

第二种解释:

sleepThread类的静态方法。sleep的作用是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执行,例如:

try{
System.out.println("I'm going to bed");
Thread.sleep(1000);
System.out.println("I wake up");
}
catch(IntrruptedException e) {
}


wait
Object的方法,也就是说可以对任意一个对象调用wait方法,调用wait方法将会将调用者的线程挂起,直到其他线程调用同一个对象的notify方法才会重新激活调用者,例如:


//Thread 1

try{
obj.wait();//suspend thread until obj.notify() is called
}
catch(InterrputedException e) {
}

第三种解释:

这两者的施加者是有本质区别的.
sleep()
是让某个线程暂停运行一段时间,其控制范围是由当前线程决定,也就是说,在线程里面决定.好比如说,我要做的事情是 "点火->烧水->煮面",而当我点完火之后我不立即烧水,我要休息一段时间再烧.对于运行的主动权是由我的流程来控制.

wait(),首先,这是由某个确定的对象来调用的,将这个对象理解成一个传话的人,当这个人在某个线程里面说"暂停!",也是thisOBJ.wait(),这里的暂停是阻塞,还是"点火->烧水->煮饭",thisOBJ就好比一个监督我的人站在我旁边,本来该线程应该执行1后执行2,再执行3,而在2处被那个对象喊暂停,那么我就会一直等在这里而不执行3,但正个流程并没有结束,我一直想去煮饭,但还没被允许, 直到那个对象在某个地方说"通知暂停的线程启动!",也就是thisOBJ.notify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处继续执行.


其实两者都可以让线程暂停一段时间,但是本质的区别是一个线程的运行状态控制,一个是线程之间的通讯的问题

java.lang.Thread类中,提供了sleep()
java.lang.Object类中提供了wait() notify()notifyAll()方法来操作线程
sleep()
可以将一个线程睡眠,参数可以指定一个时间。
wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
   wait
有两种形式wait()wait(milliseconds).
sleep
wait的区别有:
 1
,这两个方法来自不同的类分别是ThreadObject
 2
,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
 3
waitnotifynotifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
任何地方使用
  synchronized(x){
     x.notify()
    //
或者wait()
  }
  4,sleep
必须捕获异常,而waitnotifynotifyAll不需要捕获异常


7.请简单写出web应用调用ejb的步骤

一、设置JNDI服务工厂以及JNDI服务地址系统属性

二、查找Home接口

三、Home接口调用Create方法创建Remote接口

四、通过Remote接口调用其业务方法


8.请写出sql 查询id重复的记录以及重复次数

SELECT *,ROW_NUMBER() OVER(PARTITION BY id,ORDER BY name) AS RN

FROMTABLE_NAME


9.请写出sql删除表中id重复的记录,重复id的记录需要保留一条

deletefrom role

where   id in (select id    from role group by id      having count(id) > 1)

and   id not in (select min(id) from role group byid     having count(id)>1)



10.给定一个无序和无重复的int数组,怎么判断该数组中的数字是否能组成连续的数字


代码:

publicstatic boolean lianxu1(int []intArr){

    if(intArr==null)return false;

    int len=intArr.length;

    if(len<1)return false;

      Arrays.sort(intArr);  

      for(int i=0;i<len-1;i++){

     if(intArr[i+1]!=intArr[i]&&intArr[i+1]!=intArr[i]+1)

     return false;

    }

    return true;

}


11.栈和哈希表有什么区别

:是只能在某一端插入和删除的特殊线性表。它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

哈希表:若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表即哈希表。

两个应用是不同的,哈希用在对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。栈是允许在同一端进行插入和删除操作的特殊线性表,主要用在先进先出的数据情况

12.http协议的状态码和涵义


1**:请求收到,继续处理
2**
:操作成功收到,分析、接受
3**
:完成此请求必须进一步处理
4**
:请求包含一个错误语法或不能完成
5**
:服务器执行一个完全有效请求失败


100——客户必须继续发出请求
101——
客户要求服务器根据请求转换HTTP协议版本

200——交易成功

300——请求的资源可在多处得到

400——错误请求,如语法错误
401——
请求授权失败
402——
保留有效ChargeTo头响应
403——
请求不允许

414——请求的资源URL长于服务器允许的长度

500——服务器产生内部错误
501——
服务器不支持请求的函数
502——
服务器暂时不可用,有时是为了防止发生系统过载
503——
服务器过载或暂停维修
504——
关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长
505——
服务器不支持或拒绝支请求头中指定的HTTP版本


13.两个对象用equals方法比较为true,它们的Hashcode值相同吗?


答:不一定相同。正常情况下,因为equals()方法比较的就是对象在内存中的值,如果值相同,那么Hashcode值也应该相同。但是如果不重写hashcode方法,就会出现不相等的情况。


14.Collection Collections的区别。
Collection是集合类的上级接口,继承与他的接口主要有Set List.
Collections
是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。



15.多线程有两种实现方法

分别是继承Thread类与实现Runnable接口


同步的实现方面有两种,分别是synchronized,waitnotify



16.overloadoverride的区别

override(重写)

1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

overload(重载)

1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。

3、存在于父类和子类、同类中。


17.redirectforward之区别

1.forward只能将请求转发给同一个web应用中的组件,redirect不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源.

2.redirect浏览器地址栏中显示的URL会发生改变,由初始URL地址变成重定向的目标URL,forward地址栏保持初始的URL地址不变

3.redirect对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求.forward在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为.

4.forward的调用者和被调用者之间共享相同的request对象和response对象,他们属于同一个访问请求和响应过程,redirect调用者和被调用者使用各自的request对象和response对象,他们属于两个独立的访问请求和响应过程.

5.forwardredirect在调用他们之前,都不能有内容已经被实际输出到客户端


18.什么是java序列化,如何实现java序列化

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

如何实现java序列化

序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流


19.请对以下在J2EE中常用的名词进行解释(或简单描述)

web容器:给处于其中的应用程序组件(JSPSERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接×××互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。

EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。

JNDI:(Java Naming & Directory InterfaceJAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

JMS:(Java Message ServiceJAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。

JTA:(Java Transaction APIJAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。

JAF:(Java Action FrameWorkJAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。

RMI/IIOP:Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMIJAVA特有的。

20.spring ioc aop 的原理是什么啊,面试时我怎么回答才好呢

IOC:控制反转也叫依赖注入。利用了工厂模式
将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用Asetter方法来注入,而不需要你在A里面new这些bean了。
注意:面试的时候,如果有条件,画图,这样更加显得你懂了
AOP:
面向切面编程。(Aspect-Oriented Programming
        AOP
可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日志功能。日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象(具体业务逻辑)中去。

实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建方面,从而使得编译器可以在编译期间织入有关方面的代码
简单点解释,比方说你想在你的biz层所有类中都加上一个打印你好的功能这你经可以用aop思想来做,你先写个类写个方法,方法经实现打印你好让后你Ioc这个类 ref“biz.*”让每个类都注入


21.JSP的操作指令包括哪些?各自能完成什么作用?

指令:
1
page指令:<%@ page 属性1="..."  属性2="..."    ...%>,应用于整个JSP页面,定义JSP页面的一些属性和属性值;
2
include指令:<%@include file="URL" %>,用来指定JSP被编译时,需要插入的文本或者代码;
3
taglib指令:<%@taglib prefix="..."uri="..." %>,JSP页面中声明并调用标签;

动作标记:
1
<jsp:useBean>,JSP页面中使用Bean
2
<jsp:getProperty>,获取Bean的属性;
3
<jsp:setProperty>,修改Bean的属性;
4
<jsp:include>,JSP运行时将文件加入;
5
<jsp:param>,与jsp:include,jsp:forward,jsp:plugin共同使用,以名字-的形式为这些标签提供附加信息;
6
<jsp:forward>,从该指令处停止页面执行,转向其他页面;
7
<jsp:plugin>,指定AppletJavaBean组件;


22.什么是数据结构,都有哪些数据结构

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。


在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。


数 据结构”作为一门独立的课程在国外是从1968年才开始设立的。 1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。“数据结构”在计算机科学中是一门综合性的专业基础课。数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。


常用的数据结构有:

数组 (Array)
在 程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。


栈 (Stack)
是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。


队列 (Queue)
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为队空。

链表 (Linked List)
是 一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

树 (Tree)
是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足以下条件:
1)有且仅有一个结点K0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。

2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。
3)K中各结点,对关系N来说可以有m个后继(m>=0)。

图 (Graph)
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。

堆 (Heap)
在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。

散列表 (Hash)
若结构中存在关键字和K相等的记录,则该记录必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。