软件开发应试人员考试试题(Java)
姓名:___________ 电话:___________
以下信息有工作经验人员如实填写,应届毕业不填(时间从毕业参加工作算起)
从事 Java 开发时间____月
熟悉 JavaScrip 时间____月
熟悉 EXT 开发时间____月
熟悉 PDM 开发时间____月
熟悉的数据库及时间(如 SQLServer 3 个月,可多填)___________________
一、 JAVA 基础
1、简述你所知道的 JAVA 修饰符及各自的使用机制?(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、静态变量和实例变量的区别?能在静态方法中调用非静态变量吗?
静态变量属于类,该类不生产对象,通过类名就可以调用静态变量。实例变量属于该类的对象,必须产生
该类对象,才能调用实例变量
静态方法及变量属于整个类,数据将会被存储在公共区域,非静态方法及变量属于对象
静态方法中无法调用实例变量,而实例方法却可以调用静态变量
2、继承和接口是什么?以及他们的区别?
1 接口定义一个类需要实现的方法 属性 索引 事件和可能的参数 返回值类型,具体的实现交由相应的类
或结构,从而实现多态;而继承用于在一个现有父类基础上的功能扩展,把几个类中相同的成员提取出来 放
在一个父类中,在子类中添加独特的方法 即继承 扩展
2 接口能够实现多接口继承,而继承只能实现单继承
3 继承能够获得父类方法的实现,而接口只能获得方法的定义,所以必须获得所有的方法
4 在继承中 为父类添加方法不影响子类的继承,但在接口中 为父类添加一个方法定义 必须在子类中添加
此方法的实现
3、HashMap 和 Hashtable 的区别?
1,Hashtable 是基于陈旧的 Dictionary 类的,HashMap 是 Map 接口的一个实现。
2,Hashtable 的方法是同步的,而 HashMap 的方法不是
3,只有 HashMap 可以让你将空值作为一个表的条目的 key 或 value
4、抽象类(abstract class)和接口(interface)有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的
类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建 abstract 类的实例。然而可以创建一
个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。
Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中
实现该方法。知道其行为的其它类可以在类中实现这些方法
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获
得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义 static final 成员变量。接口的实
现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给
予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象
类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口
类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口
5、重载(Overload)和重写(Override)的区别。Overloaded 的方法是否可以改变返回值
的类型?
Overload 是重载,是有相同的方法名,但参数类型或个数彼此不同
Override 是重写,是在子类与父类中,子类中的方法的方法名,参数个数、类型都与父类中的完全一样,
在子类中覆盖掉了父类的改方法。
6、你所知道的集合类都有哪几类?主要区别有哪些并简单描述?
集合类型主要有 3 种:set(集)、list(列表)和 map(映射)
集 Set
它的对象不按特定方式排序,只是简单的把对象加入集合中
对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。
列表 List
List 接口与其实现类是容量可变的列表,可以按照索引访问集合中的元素,是有序的集合
列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。常用的有 ArrayList vector
映射 Map
映射中每个项都是成对的,Map 是把键对象和值对象进行关联的容器。
映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,关
键字应该是唯一的,常用的有 HashMap,HashTable
7、JAVA SERVLET API 中 forward() 与 redirect()的区别?
使用 forward 的时候浏览器不知道它所请求的具体资源来源,所以地址栏不会变;
使用 redirect,服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的
URL。
forward,转发页面和转发到的页面可以共享 request 里面的数据.redirect,不能共享数据.
8、写出 JSP 的常用内置对象?以及每个内置对象的简单介绍?
1.request 对象
客户端 的请求信 息被封装在 request 对象中 ,通过它 才能了解到 客户的需 求,然后做 出响应。 它是
HttpServletRequest 类的实例。
2.response 对象
response 对象包含了响应客户请求的有关信息,但在 JSP 中很少直接用到它。它是 HttpServletResponse 类
的实例。
3.session 对象
session 对象指的是客户端与服务器的一次会话,从客户连到服务器的一个 WebApplication 开始,直到客户
端与服务器断开连接为止。它是 HttpSession 类的实例。
4.out 对象
out 对象是 JspWriter 类的实例,是向客户端输出内容常用的对象
5.page 对象
page 对象就是指向当前 JSP 页面本身,有点象类中的 this 指针,它是 java.lang.Object 类的实例 。
6.application 对象
application 对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,
在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属
性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决
定了 application 对象的生命。它是 ServletContext 类的实例。
7.exception 对象
exception 对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个 JSP 页
面要应用此对象,就必须把 isErrorPage 设为 true,否则无法编译。他实际上是 java.lang.Throwable 的对象。
8.pageContext 对象
pageContext 对象提供了对 JSP 页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的
SESSION,也可以取本页面所在的 application 的某一属性值,他相当于页面中所有功能的集大成者,它的
本类名也叫 pageContext。
9.config 对象
config 对象是在一个 Servlet 初始化时,JSP 引擎向它传递信息用的,此信息包括 Servlet 初始化时所要用到
的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一 ServletContext 对象) 。
9、JAVA 解析 XML 有哪几种方法?并简述各自的优缺点
DOM:
是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准,分析该结构通常需要加载整个文档和构造
层次结构,然后才能做任何工作。是基于信息层次的
优点有:由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在
任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。
SAX :
对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更
好。这些基于事件的模型,比如 SAX。这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而
不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在
内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个
条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。
JDOM
目的是成为 Java 特定文档模型,它简化与 XML 的交互并且比使用 DOM 实现更快。
DOM4J:
它是 JDOM 的一种智能分支。它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML
Schema 支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,
API,具有性能优异、功能强大和极端易用使用的特点,同时它
DOM4J 是一个非常优秀的 Java
也是一个开放源代码的软件。如今你可以看到越来越多的 Java 软件都在使用 DOM4J 来读写 XML,特别
值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
9、概述 MVC 体系结构及优点
M:模型(Model),V:视图(View),C:控制 Controller)。
MVC 模式的目的就是实现 Web 系统的职能分工。
Model 层实现系统中的业务逻辑。 View 层用于与用户的交互。Controller 层是 Model 与 View 之间沟通的
桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射
XML
为模型层可执行的操作。
概括一下吧,用户浏览,由 URL 路由解析地址,如何指定对应的控制器(C)去处理,结合业务逻辑层(M),处理数
据,比方说增\删\改\查,完成之后,在调用指定的 视图(V),把处理的结果回传给用户.
意义就是:职能分工
10、介绍你所知道的 J2EE 中常用的设计模式,并简单介绍工厂模式
Builder(建造模式),
Factory(工厂模式),
Prototype(原始模型模式),Singleton(单例模式),
Adapter(适配器模式),
Decorator(装饰模式),
Command(命令模式),
Iterator(迭代子模式), Mediator(调停者模式),
Observer(观察者模式), State(状态模式),
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类
Interpreter(解释器模式), Visitor(访问者模式),
Memento(备忘录模式),
Strategy(策略模式),
Factory Method(工厂方法模式),
Facade(门面模式),
Bridge(桥梁模式),
Flyweight(享元模式),
Composite(合成模式),
Proxy(代理模式),
中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同
的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然
后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以
调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
11. 线程和进程的区别?实现多线程的方式有哪几种?如何实现多线程同步?
区别:
线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共
享;而 线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同的线程之间可以在进程
范围内共享数据。也就是说进程有自己独立的存储空间,而线程是 和它所属的进程内的其他线程共享一个
存储空间。
实现多线程的方法:
1、 继承 java.lang.Thread,并重写它的 run()方法,将线程的执行主体放入其中。
2、 实现 java.lang.Runnable 接口,实现它的 run()方法,并将线程的执行主体放入其中。
如何实现线程同步:
给一个方法增加 synchronized 修饰符之后就可以使它成为同步方法,这个方法 可以是静态方法和非静态方
法,但是不能是抽象类的抽象方法,也不能是接口中的接口方法
12:中的异常处理机制的简单和应用。
当 Java 程序违反了 Java 的语义规则时,Java 虚拟机就会将发生的错误表示为一个异常。违反语义规则
包括 2 种情况。一种是 Java 类库内置的语义。例如数组下标越界,会引发 IndexOutOfBoundsException;访问
null 的对象时会引发 NullPointerException。另一种情况就是 Java 允许程序员扩展这种语义检查,程序员可
以创建自己的异常,并自由选择在何时用 throw 关键字引发异常。所有的异常都是 java.lang.Thowable 的子
类
13:线程同步的方法(类里有哪些方法来支持线程同步)。
wait():使一个线程处于等待状态,并且释放所持有的对象的 lock。
sleep():使一个正在运行的线程处于睡眠状态,是静态方法,调用此方法要捕捉 InterruptedException 异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切地唤醒某一个等待状态
的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。
Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
14. Error 与 Exception 有什么区别
Error 表示系统级的错误和程序不必处理的异常,
Exception 表示需要捕捉或者需要程序进行处理的异常。
15.谈谈 final, finally, finalize 的区别。
final—修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作为父类被继
承。因此一个类不能既被声明为 abstract 的,又被声明为 final 的。将变量或方法声明为 final,可以保证它
们在使用中不被改变。被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修
改。被声明为 final 的方法也同样只能使用,不能重载。
finally—异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子
句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必
要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object
类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。
finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的
二、 Javascript 相关
1. 如何弹出带确认取消按钮的提示框,如”确定保存吗?”,以及如何实现带输入框的提示框?
2.
confirm(“确定保存吗?”)
prompt(“输入意见”)
Javascript 有哪些打开一个页面的方式?
window.open(sURL [, vArguments] [,sFeatures]) 新页面
window. showmodaldialog(sURL [, vArguments] [,sFeatures]) 模态对话框
window.showModelessDialog(sURL [, vArguments] [,sFeatures]) 非模态对话框
3. 页面加载完后调用 js 方法如何实现?
body 标签加 onload 事件,如
4.
5.
6.
7.
Javascript 如何做到在子页面中调用父页面的 js 函数或全局变量(如 test()函数,test 变量)?
window.opener.test();
Window.opener.test = “abc”;
Javascript 中定时执行如何实现?
setTimeout();定时执行,执行一次。clearTimeout(定时器对象名)结束
setInterval();定时执行,一直执行。clearInterval(定时器对象名)结束
两种区别:
setTimeout();定时执行,执行一次。clearTimeout(定时器对象名)结束;
setInterval();定时执行,一直执行。clearInterval(定时器对象名)结束
innerHTML 和 outerHTML 的区别是什么?
innerHTML 取 页 面 元 素 标 签 内 部 的 内 容 , outerHTML 取 包 含 元 素 标 签 的 内 容 , 如
test,innerHTML 取到 test,outerHTML 取到
test.
javascript 如何做到页面局部刷新?
使用 AJAX。原理:获取一个请求对象,向指定 url 发送请求,当请求完成时(状态 4),获取到请求返
回内容,并将内容填充到页面局部。
8. 有如下表格,如何通过这个按钮取到该格所在的表,以及如何取到该表格的第二行中的 hello 值?
通过按钮取到表格:table = button.parentElement.parentElement.parentElement; (主要看是否掌握元素的
parentElement 方法)。
通过表格取到 hello 值:str = table.childNodes[1].childNodes[0].innerHTML;(主要看是否掌握元素
的 childNodes 方法)。
三 数据库相关
1. 存储过程和函数的区别?
存储过程是用户定义的一系列 sql 语句的集合,涉及特定表或其它对象的任务,用户可以调
用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉
及特定用户表。
2. oracle 中 truncate 和 delete 命令有何区别?
delete 将在回滚段中产生回滚信息,truncate 不产生,因此无论表中的记录多少,truncate 执
行都很快
truncate 是 DDL,执行隐含的 commit,truncate 不能回滚
3. Oracle 中 char 和 varchar2 数据类型有什么区别?有数据”test”分别存放到 char(10)和
varchar2(10)类型的字段中,其存储长度及类型有何区别?
A:char 是定长字符类型,varchar2 是变长字符类型。“test”在 char(10)中被补齐空格,存储
长度是 10 字节,在 varchar2(10)中存储长度是 4 字节
4. 假如系统中有如下四张表:
1)文档表(DOC):编号(docid)、名称(docname)、描述(docdesc);docid 为主键,docname
有索引;
2)学生表(XS):学生代码(XSDM)、学生名称(XSMC);
3)学科表(XK):学科代码(XKDM)、学科名称(XKMC)、最高分数(ZGF);
4)成绩表(CJ):学生代码(XSDM)、学科代码(XKDM)、成绩(CJ)。
问题 1 写出您最常用 SQL 语句的关键字
问题 2 以下查询的处理速度(返回数据量相同)从高到低排列?
A、select * from doc where docname=’test’
B、select * from doc where docid=50
C、select * from doc where docdesc=’test’
问题 3 列出有不及格(<底于 60 分)的学生姓名(SQL 语句)
问题 4 统计每个学生的总分(SQL 语句):
问题 5 列出没有不及格(>=60 分)的学生姓名及平均分(SQL 语句):
Select b.XSMC,avg(a.CJ) FROM CJ a left join XS b on a.XSDM = b.XSDM group by a.XSDM