第一次(第一轮)java面试的问题【浪潮集团】

1. cookie与session的区别(不会)

(1)cookie数据存放在客户端的浏览器上,session数据放在服务器上。
(2)cookie不是很安全,别人可以分dao析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
(4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

2. jdbc与odbc的区别与联系(不精通)

JDBC简介

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,它是Java十三个规范之一。可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

ODBC简介

开放数据库互连(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。开放数据库互连(ODBC)是Microsoft提出的数据库访问接口标准。开放数据库互连定义了访问数据库API的一个规范,这些API独立于不同厂商的DBMS,也独立于具体的编程语言(但是Microsoft的ODBC文档是用C语言描述的,许多实际的ODBC驱动程序也是用C语言写的。)ODBC规范后来被X/OPEN和ISO/IEC采纳,作为SQL标准的一部分,具体内容可以参看《ISO/IEC 9075-3:1995 (E) Call-Level Interface (SQL/CLI)》等相关的标准文件。

两者之间的联系

JDBC和ODBC都是用来连接数据库的启动程序,JDBC和ODBC由于具有数据库独立性甚至平台无关性,因而对Internet上异构数据库的访问提供了很好的支持。

两者之间的区别

(1)JDBC比ODBC更容易理解

从事编程工作的朋友都知道Java比C语言更好学,主要是因为Java语言是面向对象的更接近人的思维认识,更容易被人接受。而C语言就较为抽象,跟人的认识思维相差较大,其开发出来的产品也具有类似特点。在ODBC中一个的简单的查询,也需求分为好几块内容;而在ODBC驱动程序内部再去整合,做一些复杂的操作。这不仅降低了数据库启动程序的性能,而且也给程序开发者开发实际运用程序带来了确定的负面效果。而JDBC数据库启动程序在设计的时间就包含了大部份基本数据操作功能,为此在编写一些常规的数据库操作语句时,如查询、更新等等,其所需求的源代码比 ODBC要少的多。故从这方面来说,JDBC数据库启动程序要比ODBC简易理解。

(2)JDBC数据库驱动程序是面向对象的

JDBC完全遵循Java语言的优良特性。通常情况下,只要有Java功能需设计基础的用户都能在最短时间内了解JDBC驱动程序的架构,较量简易上手,能轻而易举的开发出强悍的数据库实际运用程序。而ODBC的话,由于其内部功能复杂,源代码编写要求高。为此即使是一个的C语言的高手,仍然需求花费不少的时间去了解那个数据库启动程序;在编写源代码的时间,还离不开有关的参考书本。

(3)JDBC的移植性要比ODBC要好。

通常情况下,安装完ODBC驱动程序之后,还需求经过确定的配置才能够应用。而不相同的配置在不相同数据库服务器之间不能够通用。也那是说,装一次需求配置一次。但是JDBC数据库驱动程序则不相同。假如采用JDBC数据库驱动程序的话,则只需要选取适当的 JDBC数据库驱动程序,就不需要额外的配置。在安装过程中,JDBC数据库驱动程序会自己完成有关的配置。为此JDBC的移植性要比ODBC要好。

从ODBC向JDBC过度

也许数据库编程以前采用的是ODBC驱动程序,而假如数据库编程目前需要采用JDBC驱动程序,那么能否出现顺利过渡呢?答案是肯定的。在JDBC驱动程序中有一类叫作JDBC-ODBC桥接启动程序。这种类别的JDBC数据库驱动程序其底层是经过ODBC驱动程序来连接数据库的。假如原先的实际运用程序是基于ODBC数据库驱动程序的,或者数据库没有帮助对应的JDBC驱动程序,则数据库编程能利用JDBC-ODBC桥接驱动程序来实现。也那是说,桥接驱动程序能利用现有的ODBC驱动程序来存取联系型数据库。为此者不仅能保留先前的开发架构(经过ODBC来存取数据),还能立即应用Java作为新的开发环境,从而出现ODBC数据库驱动程序到JDBC的顺利转型。
不过在采用这种桥接驱动程序的时间,需求留意几个难点。一是那个桥接驱动程序仍然需要用到ODBC数据库驱动程序。由于桥接驱动程序直接联系的对象是ODBC驱动程序,然后再经过ODBC驱动程序去访问数据库。为此在客户端必需先安装并配置好ODBC驱动程序。假如采用的是三层式的开发框架,也需求安装ODBC驱动程序。其次,在这种模式下,实际运用程序先调用JDBC,然后再经过JDBC调用ODBC,最后再跟数据库通信。显然其中间多了几个环节。由于其中间环节较量多,但数据访问出现难点的时候,就不太好查难点。这就好像一道水管,假如中间的接口多了的话,则除了漏水的几率就较量高。假如真的除了漏水的话,则查询漏水点的时间也会较量困难。为此笔者以为,采用桥接类别的JDBC驱动程序只是权宜之计。在适当的时间,数据库开发还是需要调整原先的开发架构,全部都转到JDBC驱动程序上来。桥接程序只是为数据库开发争取确定的时间。虽然那个转型过程中的阵痛是较痛的,但确是不可避免的。长痛不如短痛,笔者意见数据库开发还是及早停止过渡为好。并在估计的情况下,把以前的开发架构也停止调整,以采用真正意义上的JDBC驱动程序。

3. public static void main(String [ ] args){ } 的写法(必会)

4. 乐观锁与悲观锁(不会)

●悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。它指的是对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制(也只有数据库层提供的锁机制才能真正保证数据访问的排他性,否则,即使在本系统中实现了加锁机制,也无法保证外部系统不会修改数据)。
●乐观锁(Optimistic Lock),顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
● 对比:两种锁各有优缺点,不可认为一种好于另一种,像乐观锁适用于写比较少的情况下,即冲突真的很少发生的时候,这样可以省去了锁的开销,加大了系统的整个吞吐量。但如果经常产生冲突,上层应用会不断的进行retry,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。

5. ==与equal的区别(一般)

equals和==最大的区别是一个是方法一个是运算符。
● ==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象的地址值是否相等。
● equals():用来比较方法两个对象的内容是否相等。equals方法不能用于基本数据类型的变量,如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。

6. Spring和Springmvc(Spring不了解)

●Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。简单点的话可以将SpringMVC类比于Struts。
●Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。
●Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称,spring mvc是其中一个开源项目,所以简单走个流程的话,http请求一到,由容器(如:tomact)解析http搞成一个request,通过映射关系(路径,方法,参数啊)被spring mvc一个分发器去找到可以处理这个请求的bean,那tomcat里面就由spring管理bean的一个池子(bean容器)里面找到,处理完了就把响应返回回去。

扩展:

SpringMVC是一个MVC模式的WEB开发框架;
Spring是一个通用解决方案, 最大的用处就是通过Ioc/AOP解耦, 降低软件复杂性, 所以Spring可以结合SpringMVC等很多其他解决方案一起使用, 不仅仅只适用于WEB开发

SSH:
SSH 为 struts+spring+hibernate 的一个集成框架,是目前较流行的一种JAVA Web应用程序开源框架。

Struts

Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。
  官方地址:http://struts.apache.org

Spring
  Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IOC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务–如果你需要–还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IOC容器集成的强大而灵活的MVC Web框架。
  官方地址:spring: http://www.springsource.org

7. IOC和Aop的区别(不大会)

●IOC:
控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。简单来说就是不需要NEW一个对象了。
●AOP:
面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。

8. ==与===的区别?(不会)

Java中=是赋值运算,而==判断值是否相等,===是判断的是值及类型是否完全相等,而===只在JavaScript中有

9.介绍一下登录程序的流程(一般)

10.final和static的作用(不大会)

●final修饰符的作用
final修饰的类不能被继承;
final修饰的方法不可重写;
final修饰的变量最多只能赋值一次,值不可变。
●static修饰符作用
static修饰的成员方法表示静态方法,可以直接通过类名来访问;
static修饰的程序代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块;
static所修饰的成员变量和成员方法标明归某个类所有,它不依赖于类的特定实例,被类的所有实例共享。

11.HashMap与Hashtable的区别(不大会)

●HashMap是Hashtable的轻量级实现(非线程bai安全的实du现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全dao,效率上可能高于Hashtable。
●HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
●HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
●Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步
(如果是ArrayList:List lst = Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

最终,失败!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容