当前位置:文档之家› 华为外包java面试题

华为外包java面试题

华为外包java面试题
华为外包java面试题

SSH篇(后台)

一、SSH概述

1.1 SSH的含义

当前J2EE企业级应用分为三层:表现层-业务层-数据源层,而SSH代表了每一层的具体实现,它是三种流行的开源框架的缩写,S-Struts,S-Spring,H-Hibernate。这三者的组合是当前J2EE开发的标准模式,也代表了J2EE正在朝着简化复杂性,轻量化方向发展,最新J2EE 6已证明了这种趋势。

1.2 J2EE开发模式的演变

J2EE应用一直采用三层加构,即表现层-业务层-数据源层。

旧石器时代:J2EE应用采用表现层-远程EJB-实体EJB(或JDBC),这是最为正宗也是最复杂的J2EE开发,适用于银行等小部分项目;随后由于微软.NET的兴起以及其对J2EE的挑战,正宗的J2EE出现了一个变种:表现层-本地EJB-Ibatis,在这种模型中业务层选择了本地EJB,同时数据源层也改为Ibatis,这种模式极大的提高性能,华为大部分项目采用这种构架。在这两种架构中,由于采用了EJB组件模型,从而依赖于EJB容器,而EJB容器以一种全无或全有的方式提供服务,同时业务实现也受制于容器。这种开发模式导致了以下复杂性:依赖于应用服务器,不可移植,开发困难,无法在容器外测试,部署复杂,效率低下。

新石器时代:在新石器时代依然采用了三层加构,只是抛弃了EJB,而采用了Spring等轻量级容器,同时持久化由全自动的Hibernate承担。在这种架构中,由于放弃了EJB,放弃了全功能的应用服务器,在节省了软件许可费用的同时也大大提高了软件开发效率。由于web服务器的可移植也好于应用服务器,从而使得J2EE应用可顺利移植。

1.3 SSH与传统开发的比较

从上面所述可以看出传统J2EE开发和SSH开发的不同。简言之,传统J2EE开发采用EJB组件在限制了业务实现的同时也极其复杂,只适用银行等一部分应用;SSH不强制采用应用服务器,不限制业务实现,透明的持久化从而减化了开发的复杂度,提高了开发效率。

二、Struts-WEB层开发的标准

2.1 Struts简介

Struts是Apache软件基金会的一个开源项目。采用Servlet/JSP技术,实现了基于J2EE Web应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。使用标准的JSP以外,还提供了大量的标签库使用,同时也可以与其他表现层组件技术(产品)进行整合。Struts出现之前J2EE Web层没有统一标准,各个公司都是自有框架,给从业者,企业带来了诸多不便。Struts采用了经典MVC设计,从而事实上成为WEB层开发的标准

2.2 Struts的原理

在谈到Struts前,简单讲下MVC设计模式。MVC即Model-View-Controller的缩写,MVC减弱了业务逻辑接口和数据接口之间的耦合,同时让视图层更富于变化。

MVC的工作原理,如下图1所示:

控制器(Controller)-负责转发请求,对请求进行处理。

视图(View)- 界面设计人员进行图形界面设计。

模型(Model)- 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理

和数据库设计(可以实现具体的功能)。

Struts 是MVC的一种实现,它将Servlet和JSP 标记用作实现的一部分。Struts继承了MVC 的各项特性,并根据J2EE的特点,做了相应的变化与扩展。Struts的体系结构与工作原理如下图2所示:

从图2中我们可以知道,Struts的体系结构包括模型(Model),视图(View)和控制器(Controller)三部分。

下面让我们从用户发出请示角度来看看struts的体系结构(Model 2)与工作原理:

(1)首先,用户(通常通过浏览器,如IE)发出请求,Struts的控制器(Controller Servlet)得到请求。

(2)Struts控制器通过配置文件得到业务逻辑处理Action,并调用Action的处理用户请求。(3)Action处理业务业务逻辑(可能查找数据库或调用别的系统),处理完成后,填充相关的Model对象,并把控制权返回控制器。

(4)控制器选择相应的视图(视图从模型里取出数据),并返回给用户。

2.3 Struts2简介

Struts2提供了对MVC的一个清晰的实现,这一实现包含了很多参与对所以请求进行处理的关键组件,如:拦截器、OGNL表达式语言、堆栈。下图是Struts2的处理流程。

一个请求在Struts2框架中的处理大概分为以下几个步骤

1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp 的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)

3 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action

4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给

ActionProxy

5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6 ActionProxy创建一个ActionInvocation的实例。

7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

2.4 Struts,Struts2的比较

在Action 实现类方面的对比:Struts 1 要求Action 类继承一个抽象基类;Struts 1 的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action 类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts2 提供一ActionSupport 基类去实现常用的接口。即使Action 接口不是必须实现的,只有一个包含execute 方法的POJO 类都可以用作Struts 2 的Action 。

线程模式方面的对比:Struts 1 Action 是单例模式并且必须是线程安全的,因为仅有Action 的一个实例来处理所有的请求。单例策略限制了Struts 1 Action 能做的事,并且要在开发时特别小心。Action 资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。

Servlet 依赖方面的对比:Struts 1 Action 依赖于Servlet API,因为Struts 1 Action 的execute 方法中有HttpServletRequest 和HttpServletResponse 方法。Struts 2 Action 不再依赖于Servlet API,从而允许Action 脱离Web 容器运行,从而降低了测试Action 的难度。当然,如果Action 需要直接访问HttpServletRequest 和HttpServletResponse 参数,Struts 2 Action 仍然可以访问它们。但是,大部分时候,Action 都无需直接访问HttpServetRequest 和HttpServletResponse,从而给开发者更多灵活的选择。

可测性方面的对比:测试Struts 1 Action 的一个主要问题是execute 方法依赖于Servlet API,

这使得Action 的测试要依赖于Web 容器。为了脱离Web 容器测试Struts1 的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock 对象(模拟了HttpServetRequest 和HttpServletResponse 对象),从而可以脱离Web 容器测试Struts 1 的Action 类。Struts 2 Action 可以通过初始化、设置属性、调用方法来测试。

封装请求参数的对比:Struts 1 使用ActionForm 对象封装用户的请求参数,所有的ActionForm 必须继承一个基类:ActionForm。普通的JavaBean 不能用作ActionForm,因此,开发者必须创建大量的ActionForm 类封装用户请求参数。虽然Struts 1 提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;Struts2 直接使用Action 属性来封装用户请求属性,避免了开发者需要大量开发ActionForm 类的烦琐,实际上,这些属性还可以是包含子属性的Ric对象类型。如果开发者依然怀念Struts 1 ActionForm 的模式,Struts2 提供ModelDriven 模式,可以让开发者使用单独的Model 对象来封装用户请求参数,但该Model 对象无需继承任何Struts 2 基类,是一个POJO,从而降低了代码污染。

表达式语言方面的对比:Struts1 整合了JSTL,因此可以使用JSTL 表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts 2 可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2 下的表达式语言功能更加强大。绑定值到视图的对比:Struts1 使用标准JSP 机制把对象绑定到视图页面;Struts2 使用“ValueStack ”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。

类型转换的对比:Struts1 ActionForm 属性通常都是String 类型。Struts 1 使用commons-Beanutils 进行类型转换,每个类一个转换器,转换器是不可配置的;Struts 2 使用OGNL 进行类型转换,支持基本数据类型和常用对象之间的转换。

数据校验的对比:Struts1 支持在ActionForm 重写validate 方法中手动校验,或者通过整合Commons-validator 框架来完成数据校验。Struts 2 支持通过重写validate方法进行校验,也支持整合XWork 校验框架进行校验。

Action 执行控制的对比:Struts 1 支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action 必须共享相同的生命周期。Struts 2 支持通过拦截器堆栈(Interceptor Stacks)为每一个Action 创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action 一起使用。经过上面简要介绍,不难发现,Struts 2 确实在Struts 1 上做出了巨大的改进,的确是一个非常具有实用价值的MVC 框架。

三、Spring-轻量级容器

3.1 Spring简介

Spring是新一代的J2EE框架,核心在于对受其管理的对象提供所需服务,而不要求对象做出任何改变,具体包括:注入协作对象或依赖对象,声明性事务,同现有大量框架的无缝集成。

3.2 Spring的原理

Spring核心可用两句话概括:自动注入某一对象或组件所需要的服务而不用修改对象;通过AOP为POJO对象提供声明性的企业级服务。

3.3 Spring与EJB容器

Spring容器与EJB容器一样提供了大量企业级服务,但不要求受管理的对象知道容器的存在,即对象不需要实现Spring特有的东西。与些同时,Spring提供的服务是可选择的,即可以使用也可以不使用。

EJB容器是一种重量级容器,要么接受其提供的所有服务(即使不用),要么任何服务都不接受,并且求受其管理的对象要实现EJB特有的东西,从而干扰了业务实现。

3.4 Spring在开发中的应用

Spring有完整的Web层MVC,同时提供了Hibernate,Ibatis的集成。由于Struts是事实上Web层开发的标准,尽管Spring MVC更先进,开发效率更高,现阶段Spring在开发中提供

SPRING 七大模块图:

四、Hibernate-持久化的标准

4.1 Hibernate简介

Hibernate是一种Java语言下的对象关系映射解决方案。它的设计目标是在JDBC之上提供一层薄薄的封装,同时提供完善的透明的持久化;为应用程序增加O/R映射,但又不脱离底层的关系数据库。

4.2 Hibernate原理和功能

Hibernate采用CGLIB以动态字节码生成的方式为持久化对象创建运行时代理,执行变更侦测来提供透明的持久化,动态的在POJO(老式JA V A对象),PO(持久化对象)之间自动转换。新建的POJO或托管POJO调用Session对象保存后自动成为PO,而PO与Session 脱离干系之后又变成托管POJO,可以充当数据传输对象而不用再额外的对象。同时Hibernate提供了延迟加载与缓存功能提供更好的性能。

4.3 Hibernate的缓存机制

Hibernate支持两级缓存,一级Session内缓存,不可选,强制使用;二级进程间或集群间,可选的。一级Session缓存主要提供在同一个事务内部的缓存,保持事物唯一性(确保事务内两次加载数据库同一行时,返回的对象为同一个内存对象),不存在并发访问。二级缓存可以为进程间或集群间,二级缓存需要提供并发访问机制(数据库同一行在内存对应不同的JA V A对象),二级缓存可以把JA V A对象缓存到内存中,虚拟内存,磁盘上等。

4.4 Hibernate,Ibatis的比较

相对Hibernate "一站式"ORM解决方案而言,ibatis 是一种"半自动化"的ORM实现,仅提供SQL映射,SQL参数输入输出绑定到POJO上,而把SQL语句定义留给开发人员。Ibatis 提供了缓存查询结果,缓存策略也是可插拔的。Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握,Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。iBATIS虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合。系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。

4.5 Hibernate进行大数据量处理时的优化操作

1) 在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数据量的,可以使用session.clear()或者session. Evict(Object) 在处理过程中,清除全部的缓存或者清除某个对象。

2) 对大数据量查询时,慎用list()或者iterator()返回查询结果,

1. 使用List()返回结果时,Hibernate会所有查询结果初始化为持久化对象,结果集较大时,会占用很多的处理时间。

2. 而使用iterator()返回结果时,在每次调用iterator.next()返回对象并使用对象时,Hibernate 才调用查询将对应的对象初始化,对于大数据量时,每调用一次查询都会花费较多的时间。当结果集较大,但是含有较大量相同的数据,或者结果集不是全部都会使用时,使用iterator()才有优势。

3. 对于大数据量,使用qry.scroll()可以得到较好的处理速度以及性能。而且直接对结果集向前向后滚动。

3) 对于关联操作,Hibernate虽然可以表达复杂的数据关系,但请慎用,使数据关系较为简单时会得到较好的效率,特别是较深层次的关联时,性能会很差。

4) 对含有关联的PO(持久化对象)时,若default-cascade="all"或者“save-update”,新增PO时,请注意对PO中的集合的赋值操作,因为有可能使得多执行一次update操作。

5) 在一对多、多对一的关系中,使用延迟加载机制,会使不少的对象在使用时方会初始化,这样可使得节省内存空间以及减少数据库的负荷,而且若PO中的集合没有被使用时,就可减少互数据库的交互从而减少处理时间。

6) 对于大数据量新增、修改、删除操作或者是对大数据量的查询,与数据库的交互次数是决定处理时间的最重要因素,减少交互的次数是提升效率的最好途径,所以在开发过程中,请将show_sql设置为true,深入了解Hibernate的处理过程,尝试不同的方式,可以使得效率提升。

7) Hibernate是以JDBC为基础,但是Hibernate是对JDBC的优化,其中使用Hibernate的缓冲机制会使性能提升,如使用二级缓存以及查询缓存,若命中率较高明,性能会是到大幅提升。

8) Hibernate可以通过设置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等属性,对Hibernate进行优化。

前台篇

1.1 Ajax A原理

ajax并不是一个新生的语言,它是一系列语言的结合体:HTML/XHTML、CSS、DOM、XML、XSLT、XMLHttp、JavaScript。Ajax的工作原理如下图,由此用户可以不用为提交了Form 而长时间等待服务器应答,而且通过Ajax也可以开发出华丽的Web交互页面。

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。

在使用Ajax时,需要创建XMLHttpRequest对象,由XMLHttpRequest对象代表用户提交数据给后台服务器,不同浏览器的创建方式略有不同。在利用Ajax向服务器提交请求时,需要先确定三点:

?使用GET或POST方式提交请求?

?请求的url地址和传递的参数。?

?传输方式,false为同步,true为异步。默认为true。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。

例如:

request = new XMLHttpRequest();

var url="http://localhost/test/ajax.do?method=list&time=" + Math.random();

request.open("GET", url, true);

request.onreadystatechange = updatePage;

request.send(null);

//更新页面

function updatePage() {

//检测返回状态,并更新页面

}

1.2 ajax的优点

1、最大的一点是页面无刷新,在页面内与服务器通信,给用户的体验非常好。

2、使用异步方式与服务器通信,不需要打断用户的操作,具有更加迅速的响应能力。

3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻

服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。

1.3常用AJAX框架比较

jQuery是一个优秀的Javascrīpt框架,其宗旨是——WRITE LESS,DO MORE,写更少的代码,做更多的事情。快速、简洁,能够很轻易地处理HTML文档、控制事件、给页面添加动画和Ajax效果。它是轻量级的js库,它兼容CSS3,还兼容各种浏览器。DWR(Direct Web Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR 可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码),对于不熟悉JavaScrip 的开发人员也用DWR也可以开发出很好的效果。

1.4 JS,DOM

DOM是W3C标准(Document Object Model for HTML)。DOM 定义了用于HTML 的一系列标准的对象,以及访问和处理HTML 文档的标准方法。DOM的原理是将XML/XHTML 文档装入内容,并以节点的形式解析为一棵节点树。DOM提供相应的API,可以对节点树进行增删改查,通过DOM,可以访问所有的HTML 元素,连同它们所包含的文本和属性。可以对其中的内容进行修改和删除,同时也可以创建新的元素。DOM能被JavaScript使用,从而动态的更新页面内容。

下面举一些用法

//查找节点:三种方式。

//1:getElementById(); --比较常用,根据id获取节点,缺陷:如果要获取一个相同的节点,每个节点都需要加上一个id。所以引发了另一种。getElementsByTagName();

//2:getElementsByTagName(); --根据标签名称获取元素。

//3:getElementByName(); --专门争对单选框和多选框。因为单选框和多选框他们的name

值都是一样的。

//var node = document.getElementById("emnode"); //获取一个元素

//var nodeName = document.getElementsByTagName("li"); //获取整个文档中的li标签

//var nodeName1 = node.getElementsByTagName("li"); //只获取node节点下面的li标签

//var name = document.getElementByNmae("radioName"); //获取选中框的name属性。用于单选框和多选框

//争对dom文档中的增删改查

//增加元素

//创建元素

//document.createElement("标签名称"); 如:document.createElement("div");

//创建文本节点

//document.createTextNode("文本内容");

//追加到元素中。

//div.appendChild(p); //往div标记里面追加一个p标记

//从前面进行插入元素

//p.insertBefore("插入的节点","放在谁都前面"); 如:p.insertBefore("p","p"); //克隆第一个节点

//p.firstChild.cloneNode(); //潜克隆(只有本身)

//p.firstChild.cloneNode(true); //深克隆(本身和他里面的元素)

//修改元素

//设置文本元素的属性

// text.setAttribute("属性值","内容"); 如:text.setAttribute("value","ok");

// text.getAttribute("属性值"). 如:text.getAttribute("value").

// text.value="ok" 最常用

//删除元素

//p.parendNode.removeChild(p);

//判断是否有子节点

//div.hasChilldNodes();

数据库优化篇

数据库优化:常用优化手段有

1)Shared pool的优化应该放在优先考虑,因为一个cache miss在shared pool中发生比在data buffer中发生导致的成本更高

2)尽可能避免排序;尽可能在内存中排序;分配合适的临时空间以减少空间分配调用。3)建立Indexes,但索引的层次越多,效率越低,索引所包含的字段不超过4个。

4)表分区

例子:假设有一个CUSTOMER表,表中有数据200000行,我们将此表通过CUSTOMER_ID进行分区,每个分区存储100000行,我们将每个分区保存到单独的表空间中,这样数据文件就可以跨越多个物理磁盘。下面是创建表和分区的代码,如下:

CREATE TABLE CUSTOMER

(

CUSTOMER_ID NUMBER NOT NULL PRIMARY KEY,

FIRST_NAME VARCHAR2(30) NOT NULL,

LAST_NAME VARCHAR2(30) NOT NULL,

PHONE VARCHAR2(15) NOT NULL,

EMAIL VARCHAR2(80),

STATUS CHAR(1)

)

PARTITION BY RANGE (CUSTOMER_ID)

(

PARTITION CUS_PART1 VALUES LESS THAN (100000) TABLESPACE CUS_TS01, PARTITION CUS_PART2 VALUES LESS THAN (200000) TABLESPACE CUS_TS02 )

5)使用where过滤行

Select id from dual where id = 1

6)使用表连接而不是多个查询

使用:

Select a.id,https://www.doczj.com/doc/1716548160.html,,b.app_name from A a,B b where a.id=b.id

而不是:

Select a.id,https://www.doczj.com/doc/1716548160.html,,b.app_name from B b where a.id=b.id from A a

7)执行连接时使用完全限定的列引用

8)使用CASE表达式而不是多个查询

例如:SELECT col1, col2,

CASE

WHEN col3 > 1 AND col3 <2

THEN '1'

WHEN col3 > 2 AND col3 <3

THEN '2'

WHEN col3 > 3 AND col3 <4

THEN '3'

ELSE '4'

END mylevel

FROM table1

9)使用WHERE而不用HA VING

避免使用HAVING子句,HAVING 只会在检索出所有记录之后才对结果集进行过滤。

这个处理需要排序,总计等操作。如果能通过WHERE子句限制记录的数目,那就能减少这方面的开销。

例如:

低效:

SELECT REGION, AVG(LOG_SIZE)

FROM LOCATION

GROUP BY REGION

HAVING REGIONREGION != 'SYDNEY'AND REGION != 'PERTH'

高效:

SELECT REGION,AVG(LOG_SIZE)

FROM LOCATION

WHERE REGIONREGION != 'SYDNEY'

AND REGION != 'PERTH'

GROUP BY REGION;

10)使用exists而不用IN

11)使用相同的SQL,使用的SQL 必须绝对相同

a)所有字符必须相同

b)大小写要相同

c)空格要相同

例如:

SELECT * FROM EMP;

和下列每一个都不同

SELECT* from EMP;

Select* From Emp;

SELECT* FROM EMP;

12)WHERE子句中的连接顺序

ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

例如:

(低效,执行时间156.3秒)

SELECT *

FROM EMP E

WHERE SAL > 50000

AND JOB = 'MANAGER'

AND25 < (SELECT COUNT(*) FROM EMP WHERE MGR = E.EMPNO);

(高效,执行时间10.6秒)

SELECT *

FROM EMP E

WHERE25 < (SELECT COUNT(*) FROM EMP WHERE MGR = E.EMPNO)

AND SAL > 50000

AND JOB = 'MANAGER';

13)SELECT子句中避免使用‘ * ’

例如:person表包含4个字段(id,name,age,address)

Select id,name,age,address from person;

不用:select * from person

14)使用DECODE函数来减少处理时间

使用DECODE函数可以避免重复扫描相同记录或重复连接相同的表。

例如:

SELECT COUNT(*),

SUM(SAL) FROM emp e WHERE e.DEPTNO = 20

UNION ALL

SELECT COUNT(*),

SUM(SAL) FROM EMP WHERE DEPTNO = 30

你可以用DECODE函数高效地得到相同结果

SELECT SUM(DECODE(E.DEPTNO, 20, 1, 0)) AS CNT_D20,

SUM(DECODE(E.DEPTNO, 20, E.SAL, 0)) AS D20_SAL,

SUM(DECODE(E.DEPTNO, 30, 1, 0)) AS CNT_D30,

SUM(DECODE(E.DEPTNO, 30, E.SAL, 0)) AS D30_SAL FROM EMP E

类似的,DECODE函数也可以运用于GROUP BY 和ORDER BY子句中。15)减少对表的查询

在含有子查询的SQL语句中,要特别注意减少对表的查询。

例如:

低效

SELECT TAB_NAME

FROMTABLES

WHERETAB_NAME=(SELECTTAB_NAME

FROMTAB_COLUMNS

WHEREVERSION=604)

AND DB_VER=(SELECTDB_VER

FROMTAB_COLUMNS

WHEREVERSION=604)

高效

SELECT TAB_NAME

FROMTABLES

WHERE(TAB_NAME,DB_VER)

=(SELECTTAB_NAME,DB_VER)

FROMTAB_COLUMNS

WHEREVERSION=604)

低效:

UPDATEEMP

SETEMP_CAT=(SELECTMAX(CATEGORY)FROMEMP_CATEGORIES), SAL_RANGE=(SELECTMAX(SAL_RANGE)FROMEMP_CATEGORIES) WHEREEMP_DEPT=0020;

高效:

UPDATEEMP

SET(EMP_CA T,SAL_RANGE)

=(SELECTMAX(CA TEGORY),MAX(SAL_RANGE)

FROMEMP_CA TEGORIES)

WHEREEMP_DEPT=0020;

16) 使用表的别名(Alias)

Select p.id,https://www.doczj.com/doc/1716548160.html,, a.address

from person p,address a

where p.id=a.person_id

17)用EXISTS替代IN

在许多基于基础表的查询中,为了满足一个条件,往往需要对另一个表进行联接。在这种情况下,使用EXISTS(或NOT EXISTS)通常将提高查询的效率。

低效:

SELECT *

FROMEMP(基础表)

WHEREEMPNO>0

ANDDEPTNOIN(SELECTDEPTNO

FROMDEPT

WHERELOC=‘MELB’)

高效:

SELECT *

FROMEMP(基础表)

WHEREEMPNO>0

ANDEXISTS(SELECT‘X’

FROMDEPT

WHEREDEPT.DEPTNO=EMP.DEPTNO

ANDLOC=‘MELB’)

18)用NOT EXISTS替代NOT IN

华为笔试题:JAVA

一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machinecode B.Java程序经编译后会产生bytecode C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A.java.sqlB.java.awtC.https://www.doczj.com/doc/1716548160.html,ngD.java.swing 答案:A 5.下列运算符合法的是() A.&&B.<>C.ifD.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{

--c; a=a-1; }while(a>0); 后,C的值是() A.0B.1C.-1D.死循环 答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数D.形式参数不可以是对象 答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 答案:D https://www.doczj.com/doc/1716548160.html, 二、多项选择题 1.Java程序的种类有()

华为java面试题中的九道单选

华为java面试题中的九道单选1.Java是从( )语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC答案:B 2.下列语句哪一个正确( ) A. Java程序经编译后会产生machine code B. Java程序经编译后会产生byte code C. Java程序经编译后会产生DLL D. 以上都不正确答案:B 3.下列说法正确的有( ) A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D. 一个class只能定义一个constructor答案:C 4.提供Java存取数据库能力的包是( ) A.java.sql B.java.awt https://www.doczj.com/doc/1716548160.html,ng D.java.swing答案:A 5.下列运算符合法的是( ) A.&& B.<> C.if D.:=答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1;

}while(a>0); 后,C的值是( ) A.0 B.1 C.-1 D.死循环答案:C 7.下列哪一种叙述是正确的( ) A. abstract修饰符可修饰字段、方法和类 B. 抽象方法的body部分必须用一对大括号{ }包住 C. 声明抽象方法,大括号可有可无 D. 声明抽象方法不可写出大括号答案:D 8.下列语句正确的是( ) A. 形式参数可被视为local variable B. 形式参数可被字段修饰符修饰 C. 形式参数为方法被调用时,真正被传递的参数 D. 形式参数不可以是对象答案:A 9.下列哪种说法是正确的( ) A. 实例方法可直接调用超类的实例方法 B. 实例方法可直接调用超类的类方法 C. 实例方法可直接调用其他类的实例方法 D. 实例方法可直接调用本类的类方法答案:D 二、多项选择题 1.Java程序的种类有( ) A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有( )

JAVA面试题(_华为)(答案)

软件开发应试人员考试试题(Java) 姓名:___________ 电话:___________ 以下信息有工作经验人员如实填写,应届毕业不填(时间从毕业参加工作算起) 从事Java开发时间____月熟悉JavaScrip时间____月 熟悉EXT开发时间____月熟悉PDM开发时间____月 熟悉的数据库及时间(如SQLServer 3个月,可多填)___________________ 一、JAVA基础 1、简述你所知道的JA V A修饰符及各自的使用机制?(public、abstract、final、synchronized、super…) public :允许所有客户访问 protected:只能在本包内被该类的子类所使用 private:只允许在本类内使用 abstract:没有提供实现,需要子类提供 static:与整个类相关,与单个对象无关 final:你只能定义一个实体一次,以后不能改变它或继承它。一个final修饰的类不能被子类化,一个final 修饰的方法不能被重写,一个final修饰的变量不能改变其初始值 synchronized:方法获得对对象监控的访问权;如果该方法是static类型的,获得是对类本身的访问权。super:构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。 2. String、StringBuffer与StringBuilder之间区别?别简述各自的执行效率? 区别:String 类型和StringBuffer 类型的主要性能区别其实在于String 是不可变的对象, 因此在每次对String 类型进行改变的时候其实都等同于生成了一个新的String 对象,然后将指针指向新的String 对象,所以经常改变内容的字符串最好不要用String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM 的GC 就会开始工作,那速度是一定会相当慢的, 执行速度:三者在执行速度方面的比较:StringBuilder > StringBuffer > String 使用场景:1.如果要操作少量的数据用= String 2.单线程操作字符串缓冲区下操作大量数据= StringBuilder 3.多线程操作字符串缓冲区下操作大量数据= StringBuffer 2、静态变量和实例变量的区别?能在静态方法中调用非静态变量吗? 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。实例变量属于该类的对象,必须产生该类对象,才能调用实例变量 静态方法及变量属于整个类,数据将会被存储在公共区域,非静态方法及变量属于对象 静态方法中无法调用实例变量,而实例方法却可以调用静态变量

华为外包java面试题

SSH篇(后台) 一、SSH概述 1.1 SSH的含义 当前J2EE企业级应用分为三层:表现层-业务层-数据源层,而SSH代表了每一层的具体实现,它是三种流行的开源框架的缩写,S-Struts,S-Spring,H-Hibernate。这三者的组合是当前J2EE开发的标准模式,也代表了J2EE正在朝着简化复杂性,轻量化方向发展,最新J2EE 6已证明了这种趋势。 1.2 J2EE开发模式的演变 J2EE应用一直采用三层加构,即表现层-业务层-数据源层。 旧石器时代:J2EE应用采用表现层-远程EJB-实体EJB(或JDBC),这是最为正宗也是最复杂的J2EE开发,适用于银行等小部分项目;随后由于微软.NET的兴起以及其对J2EE的挑战,正宗的J2EE出现了一个变种:表现层-本地EJB-Ibatis,在这种模型中业务层选择了本地EJB,同时数据源层也改为Ibatis,这种模式极大的提高性能,华为大部分项目采用这种构架。在这两种架构中,由于采用了EJB组件模型,从而依赖于EJB容器,而EJB容器以一种全无或全有的方式提供服务,同时业务实现也受制于容器。这种开发模式导致了以下复杂性:依赖于应用服务器,不可移植,开发困难,无法在容器外测试,部署复杂,效率低下。 新石器时代:在新石器时代依然采用了三层加构,只是抛弃了EJB,而采用了Spring等轻量级容器,同时持久化由全自动的Hibernate承担。在这种架构中,由于放弃了EJB,放弃了全功能的应用服务器,在节省了软件许可费用的同时也大大提高了软件开发效率。由于web服务器的可移植也好于应用服务器,从而使得J2EE应用可顺利移植。

华为java笔试面试题

华为Java笔试题+数据库题 一、单项选择题 1.Java是从( B)语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确(B ) A. Java程序经编译后会产生machine code B. Java程序经编译后会产生byte code C. Java程序经编译后会产生DLL D.以上都不正确 3.下列说法正确的有(C ) A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor 4.提供Java存取数据库能力的包是( A) A.java.sql B.java.awt C.https://www.doczj.com/doc/1716548160.html,ng D.java.swing 5.下列运算符合法的是( A) A.&& B.<> C.if D.:= 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是(C ) A.0 B.1 C.-1 D.死循环 7.下列哪一种叙述是正确的( D) A. abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 8.下列语句正确的是( C) A.形式参数可被视为local variable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 9.下列哪种说法是正确的(A ) A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 二、多项选择题 1.Java程序的种类有(BCD ) A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有( BCD) A.环境变量可在编译source code时指定

华为JAVA编程规范试题

JAVA编程规范试题 一、判断题(每题2分,共28分) 1、if, for, do, while, case, switch, default 等语句自占一行,且if, for, do, while, switch, case等语句的执行语句无论多少都要加括号{}。 2、包的注释内容要求包括:简述本包的作用、详细描述本包的内容、产品模块 名称和版本、公司版权、生成日期等。 3、类注释部分,描述部分说明该类或者接口的功能、作用、使用方法和注意事 项,每次修改后增加作者、新版本号和当天的日期,@since 表示从那个版本开始就有这个类或者接口,@deprecated 表示不建议使用该类或者接口。4、对于方法内部用throw语句抛出的异常,必须在方法的注释中标明;对于所 调用的其他方法所抛出的异常,在注释中要求说明所有的异常;对于非RuntimeException,即throws子句声明会抛出的异常,必须在方法的注释中标明。 5、类名和接口使用完整的英文单词描述,每个英文单词的首字母使用大写、其 余字母使用小写的大小写混合法。 6、com.huawei.四级部门名称.项目名称,符合包命名规范。 7、不能用异常来做一般流程处理的方式,不要过多地使用异常,异常的处理效 率比条件分支低,而且异常的跳转流程难以预测。 8、划分类的时候,应该尽量把逻辑处理、数据和显示分离,实现类功能的多样 化。 9、一个方法不应抛出太多类型的异常,如果程序中需要分类处理异常,则将异 常根据分类组织成继承关系。 10、switch 语句中的 case 关键字要和后面的常量保持一个空格;如果有特殊 的需要要在switch语句中定义case以外的标签,需要在注释中说明。 11、没有被覆盖的友好方法和没有子类的友好类应该定义成final。 12、简单的类可以通过名字比较两个对象的类,推荐使用 getClass()或者 instanceof()。 13、不要调用 Thread 类的 resume(), suspend(),sleep(), stop() 方法。

华为的java电话面试10题

1、有哪些数据类型 Java定义了8种简单类型:byte、short、int、long、char、float、double和boolean 2、有几种访问机制? 同一个类同一个包不同包的子类不同包的非子类 private yes default yes yes protected yes yes yes public yes yes yes yes 3、JDBC的过程 1. 加载JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver");//MySQL的加载JDBC驱动程序的方法 Class.forName("org.postgresql.Driver");//PostgreSQL的加载JDBC驱动程序的方法 Class.forName("oracle.jdbc.driver.OracleDriver");//Oracle的加载JDBC驱动程序的方法Class.forName("https://www.doczj.com/doc/1716548160.html,.DB2Driver");//DB2的加载JDBC驱动程序的方法Class.forName("com.sybase.jdbc2.jdbc.SybDriver");//Sybase的加载JDBC驱动程序的方法Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//SQLServer的加载JDBC驱动程序的方法 2. 建立数据库连接 与MySQL数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:mysql://MyDbComputerNameOrIP:3306/myDBName",ID,Pwd); 与PostgreSQL数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:postgresql://MyDbComputerNameOrIP:3306/myDBName",ID,Pwd); 与Oracle数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL",ID,Pwd); 与Sybase数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:sybase:Tds:MyDbComputerNameOrIP:2638",ID,Pwd); 与SQL Server数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master",ID,Pwd); 与DB1数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:db2://MyDbComputerNameOrIP/myDBName",ID,Pwd); 3. 创建并执行SQL语句 用Connection.createStatement()方法来创建一个Statement对象。Statement对象执行一个查询并从DBMS返回一个包含响应结果的ResultSet对象。 4. 处理从DBMS返回的数据 查询处理后从DBMS收到的查询结果赋给java.sql.ResultSet对象,该对象包含一些用来从结果集中获取数据存到Java变量中的方法,以便进行进一步处理。 5. 关闭数据库连接 使用与数据库有关的对象所消耗的内存是很大的,因此在完成数据库访问后要及时关闭数据库连接,同时还应关闭Connection中返回的内容,包括Statement 对象和ResultSet对象。 4、preparStatement和普通statement的区? 5、servlet的生命周期 1. 加载/ 实例化:

华为java笔试题

华为Java笔试题 时间:2011-08-04 15:21来源:作者:点击: 9 次 本文Tag标签: 一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.PasacalD.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machinecode B.Java程序经编译后会产生bytecode C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A.java.sqlB.java.awtC.https://www.doczj.com/doc/1716548160.html,ngD.java.swing 答案:A 5.下列运算符合法的是() A.&&B.<>C.ifD.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0B.1C.-1D.死循环 答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类

B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为local variable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 答案:D 二、多项选择题 1.Java程序的种类有() A.类(Class)B.AppletC.ApplicationD.Servlet 2.下列说法正确的有() A.环境变量可在编译sourcecode时指定 B.在编译程序时,所能指定的环境变量不包括classpath C.javac一次可同时编译数个Java源文件 D.javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD 3.下列标识符不合法的有()A.newB.$UsdollarsC.1234D.car.taxi 答案:ACD 4.下列说法错误的有() A.数组是一种对象 B.数组属于一种原生类 C.intnumber=[]={31,23,33,43,35,63} D.数组的大小可以任意改变 答案:BCD 5.不能用来修饰interface的有() A.private B.public C.protected D.static 答案:ACD

2020年华为面试题(附答案)Oracle-DBA数据库管理员JAVA程序员架构师必看

DBA数据库管理员JAVA程序员架构师必看 一、技术问题部分(数据库部分) 1、表空间的管理方式有哪几种? 数据字典管理方式 本地文件管理方式 2、谈谈你对索引的理解? 索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定 位到要访问的记录所在的数据块,从而大大减少读取数据块的I/O次数,因此可以显著提高性能。 3、说说索引的组成? 索引列、rowid 4、分区表用过么?谈谈分区表的应用? 分区表在对表的DML的并行处理上有极大得优势,而且可以一部分设为只读,用 在销售记录,医院处方等地方!! 5、你对分区表的理解?怎样截断分区表一个分区的记录? 一个分区表有一个或多个分区,每个分区通过使用范围分区、散列分区、或组合分 区分区的行 分区表中的每一个分区为一个段,可各自位于不同的表空间中 对于同时能够使用几个进程进行查询或操作的大型表分区非常有用 alter table table_name truncate partition partition_name; 6、物理文件有哪几种?控制文件包含了什么信息? 1)数据文件2)控制文件3)日志文件 包含维护和验证有选举权据库完整性的必要信息、例如,控制文件用于识别数据文 件和重做日志文件,一个有选举权据库至少需要一个控制文件 7、表空间用完了如何增加? 三种种扩展方式: 1 增加数据文件alter tablespace name add datafile ,路径? size 4M; 2 扩展数据文件大小alter database datafile ,路径? resize 4M; 3 把数据文件设为自动增长 alter database datafile ,路径? autoextend on next 1M max size 20M; 8、SGA包含几部分? Shared pool(共享池),DataBase Buffer Cache(数据缓冲区) Redo Log Buffer(重做日志缓冲区), Large Pool,大池,JAVA池。 9、DECODE函数的用法? DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else),表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。初看一下,DECODE 只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使DECODE函数具备大于、小于或等于功能。还可以转化表结构! 10、DELETE和TRUNCATE的区别?

华为java笔试题以及答案

最新华为java笔试题以及答案 华为作为世界500强企业之一,每年都会在各省市招募大量人才,因为其巨大的威望和声誉以及较好的薪酬,近年来华为成为很多学子争相进入的理想之地。尤其对于很多学计算机技术的人来说,更是一大吸引之地。然而,这么大的公司可不是想进就能进的。多年来,华为对人才的要求都很高,类别也多,已形成了完整的人才招聘体系。想进去,就需要各渠道想办法,首先要过笔试。本小编在此整理了华为java笔试题,以供大家参考: 一、单项选择题 1.下列运算符合法的是() A.&&B.<>C.ifD.:= 答案:A 2.下列语句哪一个正确() A.Java程序经编译后会产生machinecode B.Java程序经编译后会产生bytecode C.Java程序经编译后会产生DLL D.以上都不正确

答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A.java.sqlB.java.awtC.https://www.doczj.com/doc/1716548160.html,ngD.java.swing 答案:A 5.Java是从()语言改进重新设计。 A.AdaB.C++C.PasacalD.BASIC 答案:B 6.执行如下程序代码 a=0;c=0; do{

--c; a=a-1; }while(a>0); 后,C的值是() A.0B.1C.-1D.死循环 答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数

华为java笔试题目一

华为java笔试题目一 华为java题一单项选择题 1.java是从()语言改进重新设计。 a.ada b.c++ c.pasacal d.basic 答案:b 2.下列语句哪一个正确() a. java程序经编译后会产生machine code b. java程序经编译后会产生byte code c. java程序经编译后会产生dll d.以上都不正确答案:b 3.下列说法正确的有() a. class中的constructor不可省略 b. constructor 必须与class同名,但方法不能与class同名 c. constructor在一个对象被new时执 行 d.一个class只能定义一个constructor 答案:c 4.提供java存取数据库能力的包是() a.java.sql b.java.awt c.https://www.doczj.com/doc/1716548160.html,ng d.java.swing 答案:a 5.下列运算符合法的是() a.& b.<> c.if d.:= 答案:a 6.执行如下程序代码a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,c的值是() a.0 b.1 c.-1 d.死循环答案:c 7.下列哪一种叙述是正确的() a. abstract修饰符可修饰字段、方法和类 b.抽象方法的body部分必须用一对大括号{ }包住 c.声明抽象方法,大括号可有 可无 d.声明抽象方法不可写出大括号答案:d 8.下列语句正确的是() a.形式参数可被视为local variable b.形式参数可被字段修饰符修饰 c.形式参数为方法被调用时,真正被传递的参数 d.形式参 数不可以是对象答案:a 9.下列哪种说法是正确的() a.实例方法可直接调用超类的实例方法 b.实 例方法可直接调用超类的类方法 c.实例方法可直接调用其他类的实例方法 d.实例方法可直接调用本类的类方法答案:d 二、多项选择题1.java程序的种类有() a.类(class) b.applet c.application

华为java笔试面试题2014-_-

华为Java笔试题+数据库题123 一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC答案:B 2.下列语句哪一个正确() A. Java程序经编译后会产生machine code B. Java程序经编译后会产生byte code C. Java程序经编译后会产生DLL D.以上都不正确答案:B 3.下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C. constructor在一个对象被new时执行 D.一个class只能定义一个constructor答案:C 4.提供Java存取数据库能力的包是() A.java.sql B.java.awt C.https://www.doczj.com/doc/1716548160.html,ng D.java.swing答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:=答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环答案:C 7.下列哪一种叙述是正确的() A. abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号答案:D 8.下列语句正确的是() A.形式参数可被视为local variable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法答案:D 二、多项选择题 1.Java程序的种类有() A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有() A.环境变量可在编译source code时指定

华为与IBMJAVA面试题

JAVA面试题最全集 一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入bbbwlirbbb,输出bbbhhtccc。 3.数据类型之间的转换 如何将数值型字符转换为数字(Integer,Double) 如何将数字转换为字符 如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的最后一天 如何格式化日期 5.数组和集合 6.文件和目录(I/O)操作 如何列出某个目录下的所有文件 如何列出某个目录下的所有子目录 判断一个文件或目录是否存在 如何读写文件 7.Java多态的实现(继承、重载、覆盖) 8.编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选那些字符(< > & “”) 3.在JSP中如何读取客户端的请求,如何访问CGI变量,如何确定某个Jsp文件的真实路径。 4.描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。 5.列出Jsp中包含外部文件的方式,两者有何区别。 6.说明Jsp中errorPage的作用,应用范围。 7.介绍在Jsp中如何使用JavaBeans。 8.简单介绍JSP的标记库 9.Jsp和Servlet中的请求转发分别如何实现。 三、J2EE相关知识 1.介绍J2EE、J2SE、J2SE的区别。 2.J2EE是一种技术还是一种平台,他提供了那些技术。 3.什么是Application Server,它有什么功能和优点。

华为java笔试题

华为Java笔试题一单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C

4.提供Java存取数据库能力的包是() A.java.sql B.java.awt C.https://www.doczj.com/doc/1716548160.html,ng D.java.swing 答案:A 5.下列运算符合法的是() A.& B.<> C.if D.:= 答案:A 6.执行如下程序代码a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环答案:C ------------------ 这一题如果是while(a>0){ --c;a=a-1; }的话就是选A ------------------ 如题如果把题目中的--c 改成c--的话结果还是一

7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{ }包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是()------------------ A.形式参数可被视为local variable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A -------------- JAVA传递参数有两种方式:值传递和引用传递 值传递是传递数据:象基本数据类型都是值传递 引用传递是把形参和实参的指针指向了堆中的同一对象 ------------------------- 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误。但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。

华为java笔试题大全

华为java笔试题 QUESTION NO: 1 publicclass Test1 { public static void changeStr(String str) { str=”welcome”; } Public static void main(String[] args) { String str=”1234″; changeStr(str); System.out.println(str); } } //输出结果:1234 //这里虽然是一个静态方法,但是里面的变量是一个局部变量,

//所以这里不因为是静态方法,就误认为里面的变量也是静态变量了 QUESTION NO:2 Public class Test2 { Static boolean foo(char c) { System.out.print(c); Return true; } Public static void main(String[] argv) { int i = 0; //for(65;88&&(i<2);67) for (foo(‘A’);foo(‘B’)&& (i < 2) ; foo(‘C’)){ i++; foo(‘D’); } }

} /* What is the result? A. ABDCBDCB B. ABCDABCD C. Compilation fails. D. An exception is thrown at runtime. //输出结果是:ABDCBDCB 分析:FOR循环里面讲究的条件要为真,与你的判断式是什么没有关系 就像这里,虽然是打印的字母,但是却不是false,所以可以执行 第一次进行循环: foo(‘A’)打印字母A,(注:这里不是false条件就默认为true条件) foo(‘B’)打印字母B,i=0,比较(i < 2),条件为true,进行循环体,foo(‘D’)打印D foo(‘C’)打印字母C

华为java笔试题

华为java笔试题 单项选择题 1.java是从( )语言改进重新设计。 a.ada b.c c.pasacal d.basic 答案:b 2.下列语句哪一个正确( ) a. java程序经编译后会产生machine code b. java程序经编译后会产生byte code c. java程序经编译后会产生dll d. 以上都不正确答案:b 3.下列说法正确的有( ) a. class中的constructor不可省略 b. constructor必须与class同名,但方法不能与class同名 c. constructor在一个对象被new时执行 d. 一个class只能定义一个constructor 答案:c 4.提供java存取数据库能力的包是( ) a.java.sql b.java.awt https://www.doczj.com/doc/1716548160.html,ng d.java.swing 答案:a 5.下列运算符合法的是( ) a.& b.<> c.if d.:= 答案:a 6.执行如下程序代码a=0;c=0; do{ —c; a=a-1; }while(a>0); 后,c的值是( ) a.0 b.1 c.-1 d.死循环答案:c 7.下列哪一种叙述是正确的( ) a. abstract修饰符可修饰字段、方法和类 b. 抽象方法的body部分必须用一对大括号{ }包住 c. 声明抽象方法,大括号可有可无 d. 声明抽象方法不可写出大括号 答案:d 8.下列语句正确的是( ) a. 形式参数可被视为local variable b. 形式参数可被字段修饰符修饰 c. 形式参数为方法被调用时,真正被传递的参数 d. 形式参数不可以是对象答案:a 9.下列哪种说法是正确的( ) a. 实例方法可直接调用超类的实例方法 b. 实例方法可直接调用超类的类方法 c. 实例方法可直接调用其他类的实例方法 d. 实例方法可直接调用本类的类方法答案:d 二、多项选择题 1.java程序的种类有( ) a.类(class) b.applet c.application d.servlet 2.下列说法正确的有( ) a. 环境变量可在编译source code时指定 b. 在编译程序时,所能指定的环境变量不包括class path c. javac一次可同时编译数个java源文件 d. javac.exe能指定编译结果要置于哪个目录(directory) 答案:bcd

华为的java电话面试10题

华为的j a v a电话面试10 题 标准化文件发布号:(9312-EUATWW-MWUB-WUNN-INNUL-DQQTY-

1、有哪些数据类型 Java定义了8种简单类型:byte、short、int、long、char、float、double和boolean 2、有几种访问机制? 同一个类同一个包不同包的子类不同包的非子类 private yes default yes yes protected yes yes yes public yes yes yes yes 3、JDBC的过程 1. 加载JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver");//MySQL的加载JDBC驱动程序的方法 Class.forName("org.postgresql.Driver");//PostgreSQL的加载JDBC驱动程序的方法 Class.forName("oracle.jdbc.driver.OracleDriver");//Oracle的加载JDBC驱动程序的方法 Class.forName("https://www.doczj.com/doc/1716548160.html,.DB2Driver");//DB2的加载JDBC驱动程序的方法 Class.forName("com.sybase.jdbc2.jdbc.SybDriver");//Sybase的加载JDBC驱动程序的方法 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//SQLServer的加载JDBC驱动程序的方法 2. 建立数据库连接 与MySQL数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:mysql://MyDbComputerNameOrIP:3306/myDBName",ID,Pwd); 与PostgreSQL数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:postgresql://MyDbComputerNameOrIP:3306/myDBName",ID,Pwd); 与Oracle数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL",ID,Pwd); 与Sybase数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:sybase:Tds:MyDbComputerNameOrIP:2638",ID,Pwd); 与SQL Server数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master ",ID,Pwd); 与DB1数据库建立连接的方法:Connection con=DriverManager.getConnection ("jdbc:db2://MyDbComputerNameOrIP/myDBName",ID,Pwd); 3. 创建并执行SQL语句

java华为面试题

JA V A方面 1 面向对象的特征有哪些方面 2 String是最基本的数据类型吗? 3 int 和Integer 有什么区别 4 String 和StringBuffer的区别 5运行时异常与一般异常有何异同? 6 说出一些常用的类,包,接口,请各举5个 7 说出ArrayList,Vector, LinkedList的存储性能和特性 8设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 9.JSP的内置对象及方法。 10.用socket通讯写出客户端和服务器端的通讯,要求客户发送数据后能够回显相同的数据。 11说出Servlet的生命周期,并说出Servlet和CGI的区别。 12.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 13.EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的? 14.说出数据连接池的工作机制是什么? 15同步和异步有和异同,在什么情况下分别使用他们?举例说明。 16应用服务器有那些? 17你所知道的集合类都有哪些?主要方法? 18给你一个:驱动程序A,数据源名称为B,用户名称为C,密码为D,数据库表为T,请用JDBC检索出表T的所有数据。 19.说出在JSP页面里是怎么分页的? 数据库方面: 1.存储过程和函数的区别 2.事务是什么? 3.游标的作用?如何知道游标已经到了最后? 4.触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和 行级触发有何区别。

相关主题
文本预览
相关文档 最新文档