阿里电话面试

来源:互联网 发布:Java毫秒和日期的换算 编辑:程序博客网 时间:2024/05/18 22:54

1 hibernate Mybatis的区别:

 1.1  Mybatis可以进行更为细致的SQL优化;

 1.2  Hibernate对数据库的移植性好。Mybatis的数据库的移植性不好。不同的数据库需要不同的SQL语句。

 1.3  hibernate 有更好的二级缓存机制,可以使用第三方的缓存库,Mybatis本身提供的缓存机制不佳。

2 深度优先算法和广度优先算法的区别?

  深度优先算法的策略是尽可能”深”的搜索图的策略。基本原则是:按照某种条件往前试探搜索,如果遇到前进中遭遇失败,则退回到上一个路口,另选通路进行搜索,直到找到条件的目标为止。深度优先算法可能找不到

3 冒泡排序和快排的效率?

 冒泡排序的平均复杂度是O(n2)

 快排的平均复杂度是O(nlogN);

4 什么是IOC

   可以把IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用Java的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

5 什么是反射?

   JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

   JAVA反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

6 什么是解耦?在那块用过?

  使模块之间的联系降低到最大的限度。比如MVC模式的设计:model主要负责JavaBean组件,view主要负责逻辑视图,controller主要负责的是接收数据和进行数据的请求转发,业务逻辑则交给model层来处理。Model层此时将业务逻辑分为Servicedao来处理。Dao层则是对数据库的操作,基本的操作就是增删改查,此时,可以基于解耦的思想,来实现,将数据的操作层定义一个泛型的类。这样,当不同的对象进行底层的数据操作的时候,则可以共用底层的基类,这样实现了解耦合的设计思想。增加功能的时候可以调用底层的基类。

7 什么是工厂模式?具体怎么用?

public class BMW320 {  

    public BMW320(){  

        System.out.println("制造-->BMW320");  

    }  

}  

public class BMW523 {  

    public BMW523(){  

        System.out.println("制造-->BMW523");  

    }  

}  

public class Customer {  

    public static void main(String[] args) {  

        BMW320 bmw320 = new BMW320();  

        BMW523 bmw523 = new BMW523();  

    }  

}  

客户需要知道怎么去创建一款车,客户和车就紧密耦合在一起了.为了降低耦合,就出现了工厂类,把创建宝马的操作细节都放到了工厂里面去,客户直接使用工厂的创建工厂方法,传入想要的宝马车型号就行了,而不必去知道创建的细节.这就是工业革命了:简单工厂模式。

8  sessioncookie的区别?

cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。

cookie机制

正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。然而纯粹的客户端脚本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的。浏览器检查所有存储的cookie,如果某个cookie所声明的作用范围大于等于将要请求的资源所在的位置,则把该cookie附在请求资源的HTTP请求头上发送给服务器。cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。若不设置过期时间,则表示这个cookie的生命期为浏览器会话期间,关闭浏览器窗口,cookie就消失。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。

session机制

session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表(哈希表))来保存信息。当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(检索不到,会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session idsession id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存(心得:相当于用户把钱放在银行的保险柜(session)里,银行把保险柜的钥匙(session id)交给用户保管。你有钥匙,就可以取钱;没有钥匙,就不能取钱)。

 

保存这个session id的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发送给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的禁止,则必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时够把session id传递回服务器。比如:

<form name="testform" action="/xxx">

<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">

<input type="text">

</form>

实际上这种技术可以简单的用对action应用URL重写来代替。 

总结,cookie session的区别:

1cookie数据存放在客户的浏览器上,session数据放在服务器上。

2cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session

3session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的资源。考虑到减轻服务器负担,应当使用COOKIE

4、单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K

5、所以,将登陆信息等重要信息存放为SESSION,其他信息如果需要保留,可以放在COOKIE中。

 

 

原创粉丝点击