java面试问题

2024-10-25

java面试问题(精选7篇)

java面试问题 篇1

随着人们对网络程序的安全性要求越来越高,Java以其高安全性的特点迅速成为现代最流行的高级编程语言之一。尤其是它特有的内存管理机制———垃圾收集器 (Gargbage Collector, GC) ,减轻了程序员的负担,减少了许多内存泄露的可能性,提高了程序的安全性。然而,这并不是说在Java中不存在内存泄露的问题,只是Java的内存泄露比较隐蔽,为了提高程序的安全性和稳定性,Java中的内存泄露是值得我们深刻分析一下的。

2 Java内存泄露

内存泄露,通常是指分配出去后却无法回收的内存空间。

2.1 传统语言中的内存泄露

在传统语言(如C/C++等)中内存泄露的范围和发生的可能性是十分大的,程序员需要自行管理内存,如果程序中为变量或对象申请了内存空间,则在不需要时必须调用相应的函数进行显式释放它们占用的内存空间,即使超出变量或对象的作用域,否则这块内存将永远得不到回收直至系统重启。因此可见,传统语言中一旦发生内存泄露,其危害性是不言而喻的。

2.2 Java中的内存泄露

针对传统语言的不足,Java中一个很大的改进就是引入了垃圾回收器(GC)的机制,它使程序员从传统语言复杂的内存管理中解放出来,将更多的精力关注于业务逻辑的开发,程序员只需要用关键字new或者用Java的反射机机制为对象开辟一块内存空间,在对象不再使用时,而不需要进行显式的释放,这块空间会被GC自动回收,这种收支两条线的内存管理机制有效地解决了传统语言中的内存泄露问题,极大地提高了编程的效率。尽管如此,GC的引入并不能完全避免Java中的内存泄露。Java中的内存泄露和传统语言中的内存泄露是十分不同的,它是指对象不再被需要时,但却仍被程序无意识地、错误地保持或引用而导致GC无法回收对象所占用的内存空间。因为在GC看来,它们还是“有用”的,即Java中的内存泄露是主观的内存泄露,大多是由于程序员的一时大意而造成的。

可以用图论来描述Java中的内存泄露。把对象看成是有向图的顶点,引用关系看成是有向图的有向边,有向边从引用对象指向被引用对象,线程对象作为有图的起始顶点,如图1所示。

注:执行o2=mull欲释放对象2, 但还被数组对象引用着, 于是被泄了

通过图1可知,Java中的内存泄露的对象具有以下两个特点:首先,这些对象是可达的,即在有向图中存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。

3 表现形式

由于有了GC的帮助,那些“不可达”的对象将不会再被泄露,Java中内存泄露的机率降到了很低。因此,Java中内存泄露往往并不像传统语言中那样表现得很明显,使程序很快出现致命地错误,但往往会在系统运行一段时间后就会暴露出来。

3.1 瞬间泄露

瞬间泄露是指由于程序在短时间内保持了大量的无用对象的引用而导致堆内存不存或耗尽。它对应用程序来说是致命的,在软件开发过程中一般都能被检测出来,因为不解决它,程序是无法正常运行的。其很明显的表现形式就是操作过程中程序瞬间抛出java.lang.OutOfMemoryError,即内存溢出。虽然可以通过扩大堆内存空间的方式解决瞬间泄露的出现,但内存的增长毕竟是有限的,而且这种解决方式很有可能把瞬间泄露转成下面将说的另一种更为隐蔽的泄露形式———缓慢泄露。

3.2 缓慢泄露

缓慢泄露是指程序每次只泄露少量对象,短时间内不足以影响程序的正常运行,但运行时间一长,程序必定会因为内存不足出现java.lang.OutOfMemoryError错误。它具有隐蔽性、泄露周期长的特点,所以在开发过程中最容易被忽视,这部分内存泄露也是Java内存泄露中的最主要形式。下面是一段缓慢泄露的程序。

在上面的例子中,EmulateStack类模拟数据结构中的栈,使用intoStack和outStack方法进行进栈和出栈,pointer指向栈顶位置,在main方法中,初始化了一个大小为5的栈,然后把一个Object对象入栈,接着又把它出栈,这时Object对象占用的空间就被回收,事实上并非如此,outStack方法只是减少了栈顶指针pointer的值,栈中仍然保持着对Object对象的引用,该程序每执行一次,都会泄露一个Object对象。实际上,我们只要修改outStack方法,即可解决内存泄露的问题。修改如下:

4 原因

4.1 客观原因

主要是由于GC的机制所决定的,GC和程序员对垃圾的认知角度是不一样的。在GC看来,凡是不可达的对象都是垃圾,凡是有句柄指向的对象都是正在使用的对象,不应该被回收;而在程序员看来,程序不再需要使用的对象都是垃圾,而实际上,这些“所谓的垃圾”还是被某些正在使用的对象引用着的,程序员认为它应该被回收,而GC却不会回收它们。另外,GC参数的设置不当,也会增大内存泄露的可能性。

4.2 主观原因

主要是由于程序员的编程水平或疏忽大意,而错误地、无意识地保持着某些无用对象的引用而造成的,这在Java内存泄露中十分常见。

在上面的例子中,程序循环申请Object对象,然后将对象加入一个List容器中,然后试图通过o=null将对象所占用的空间释放掉,其实这是不可行的。因为List容器还持有对Object对象的引用,所以GC不会回收这些Object对象,只有用list=null或list.remove (o) 才能释放这些对象。

5 解决方法

5.1 提早预防内存泄露(1) GC调优

不同的JVM采用了不同的垃圾回收机制和启动参数,有的GC是定时启动,有的是当CPU资源空闲时开始收集垃圾,有的是当堆内存不足时才开始收集。因此,优化GC配置对预防内存泄露十分重要。GC的算法和参数对应用程序的影响是十分大的,不适当的垃圾回收机制和参数可能为程序的内存泄露埋下了隐患。

下面将以最流行的JVM———SUN公司的HotSpot虚拟机为例来说明一下GC如何调优。

HotSpot是用“分代”方式来管理堆空间的,它将整个堆空间分成了三块:永久代(Permanent Generation)、年老代(Old Generation)、年轻代(Young Generation)。年老代保存反射创建的对象,年轻代保存刚刚实例化的对象,当年轻代被填满时,GC会将一部分仍存活的年代代对象移入年老代。针对Hotspot的GC,以下几条优化的原则:

1)最好将-Xms和-Xmx设为相同值,让-Xmn的值等于-Xmx的1/3。

2)一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒内完成。

3)增加Heap空间的大小虽然会降低GC的频率,但也增加了每次GC的时间,并且GC运行时所有的用户线程被暂停,也就是GC期间,Java应用程序不做任何工作。

4)尽可能增大Heap空间,除非应用程序遇到了较长的响应时间。

(2)良好的编程习惯

高效优质的代码可以在很大程度上减少内存泄露的可能性。为了避免内存泄露,最主要的原则就是尽早释放对“无用”对象的引用,即在对象不再需要时,用“对象=null”的方式显式释放对象,以便GC能尽早回收它所占用的内存空间。许多程序员在使用临时变量时,总是让它在退出作用域后自动释放所引用的对象,这对于一些逻辑结构简单的程序可能影响并不大,但对引用关系较为复杂的大型应用,就有可能对临时变量还持用一些错误引用而导致临时对象不能被释放。下面给出几条提高编码效率的建议。

1)尽量少用临时对象

临时对象的存活周期非常短,很快就会变成垃圾,它会使GC频繁启动,从而降低应用程序的性能。

2)尽量不要显式调用System.gc ()

因为此方法只是建议JVM进行垃圾回收,至于什么时候回收还是不确定的,JVM可能会在不该进行回收时而启动GC,导致应用程序临时中断。

3)尽量少用finalize方法,它会使GC的收集时间增长。

4)对象在使用时再实例化,无用时尽早释放对象的引用,即对象句柄=null。

5)尽量避免在类的构造函数中创建大量对象,防止在调用其自类的构造方法时造成不必要的内存资源占用。

6)尽量不要显式申请数组空间,这样会造成堆空间浪费。

7)能用基本类型的就不要用封装类型,如能用int型的,就不要用Integer类型。

8)避免过深的类层次结构和过深的方法调用,因为这两者都是十分耗内存的。

9)对于字符串的操作,尽量用StringBuffer类的appand方法,不要使用String及+,因为对String的每次操作都会产生新的对象。

10)尽量少用static变量,因为它属于全局变量,直到应用程序退出才会被GC回收。

5.2 内存泄露的检测

(1)代码走查

它是安排有经验的开发人员或对整个程序代码很了解的人员对系统进行仔细排查,找到内存泄露的地方。它对于引用关系不是太复杂的小型系统往往十分有效。

(2)利用专业工具

市场上检测Java内存泄露的工具十分多,如JDK6.0的命令行工具JPS, Borland公司的OptimizeIt, Ej-technologies公司的Jprofiler等,它们的工作原理大同小异,都是通过监测Java程序运行时所有对象的创建、释放等动作,将内存管理的所有信息进行统计、分析、可视化,开发人员将根据这些信息判断程序是否有内存泄露的问题。下面简单介绍一下Jprofiler查找内存泄露的基本思路。

Jprofiler 5.1.3是一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序,它直觉式的GUI让你可以找到效率瓶颈,抓出内存泄露,并解决执行绪的问题。Jprofiler的内存视图就是用来观察系统运行时堆内存的大小,实际使用的大小和各个类的实例分配个数。如图2所示,各列自左到右分别为类名称、当前实例个数、自上次标记点增长或减少的实例个数、占用内存的大小,最下一行是当前JVM的汇总数据。

在现实生产中,可以分别在系统运行2小时为间隔点,点击“快照”按钮,记录消退时的内存状态,抓取当时的内存快照,找出对象个数增长比较靠前的类,记录这些类的当前对象个数,记录数据后,点击上面的“标记”按钮,将该点的状态作为下一次记录数据的比较点,一个正常的系统其运行时的内存占用量一般是比较稳定的,不会随着时间的增长而增长,同样,一个类的对象也是有一个上限值的,不会无限制地增长,可以通过得到的内存快照,对这些快照进行综合全面的分析,如果有某类对象的内存占用空间一直都在增长,那么就可以初略认定该类对象可能存在内存泄露,接下来,再只对这些可疑对象进行仔细监控分析,必定会找到内存泄露的对象和地方。

6 结语

综上所述,Java的内存泄露主要是由于一些无用对象被错误地保持着,导致它们的空间不能被GC回收造成的。因此,它经常并不容易被发现,本文旨在帮助大家更容易地找出内存泄露,解决性能瓶颈,提高程序的稳定性。

参考文献

[1]陈小玉.Java内存泄漏泄露问题的改进与研究[J].微型电脑应用, 2005, 21 (7) .

[2]关锋, 卢铁, 关威.关于Java的内存泄漏[J].信息技术, 2003, 27 (6) .

[3]Jonathan Knudsen, Patrick Niemeyer.Learning Java, 3rd Edition[M].O’Reilly, 2005.

[4]于海雯, 刘萍等.Java的内存管理与垃圾收集机制分[J].电脑知识与技术, 2006, 20.

java面试问题 篇2

销售技能(Sales Skills)

应聘者应具备的主要销售技能包括了解客户需求的能力、现场推销能力、销售演讲能力、遭遇客户拒绝时的应对能力、销售成交能力等。下面笔者就通过分析与以上能力相对应的四道销售面试问题,来为应聘者提供可参考的应答思路。

1.Sell me this pencil. (考察应聘者了解客户需求的能力和现场推销能力)

应答思路:主考官提这一问题的主要目的是考察应聘者对客户需求的了解能力,同时也考察应聘者的现场推销能力及应变能力。在回答这一问题前,应聘者可以设想主考官是自己的客户,向其询问对欲购买的这支铅笔有哪些具体的需求或要求。然后,根据主考官的具体需求,应聘者可介绍该铅笔的主要特征,并着重强调这些特征会给客户带来哪些益处,以及如何满足客户的具体需求等。

参考回答:This pencil can benefit you by allowing you to easily correct errors, write quick, neat notes, and keep your shirts from getting ruined from leakage (渗漏). It is also the least expensive investment, and it is lightweight as well. Besides, you can have your name embossed (雕饰) on it for promotional purposes.

2.How do you make a sales presentation? (考察应聘者的销售演讲能力)

应答思路:对于这一问题,应聘者可以从销售演讲结构的构思、对听众的了解、PPT的制作以及在实际演讲过程中应该注意的事项(如视线交流、语速、语调等)等方面来组织自己的应答思路。

参考回答:First, I will prepare the structure of my presentation carefully and logically by identifying the objective and main points of the presentation. Then, I will try to find out how much or how little the audience knows about the subject, and what they expect from the talk. After that, I will prepare a well-designed PPT for the talk. Finally, during the presentation I will speak clearly, maintain eye contact with the audience, and try to make the presentation interesting by changing my speaking speed and pitch of voice (音调).

3.What techniques are most successful in handling objections? (考察应聘者应对客户拒绝的能力)

应答思路:应聘者在回答这一问题时,首先应说明在销售过程中遭到客户的拒绝并非坏事,销售者应把这一过程看做是了解客户需求、获取更多客户信息的关键步骤;然后再说明哪些具体策略能有效地应对客户拒绝,譬如认真倾听并解决客户所关心的问题等。

参考回答:First of all, I view an objection from a customer as an opportunity to engage in a conversation about something the customer is interested in. About the specific techniques in handling an objection, they may include: listening to and acknowledging the customer’s concern; asking questions to clarify things and ensuring you have got to the real objection; empathizing (移情) with the objection; putting forward a proposal to overcome the concern; confirming that you have addressed the concern.

4.What do you consider are the key skills in closing a sale? (考察应聘者的销售成交能力)

应答思路:这一问题涉及销售中常见的成交技巧,主要包括有效应对客户拒绝的技巧,以及通过观察客户的身体语言和说话的语气来判断客户是否真正想购买产品的能力。一旦客户同意购买某一商品,销售者应立即以书面形式确定交易,并进一步抓住机会向客户推销新产品,安排将来和客户见面的日期和时间等。

参考回答:The common skills in closing a sale include: overcoming the client’s objections by addressing his or her concerns; recognizing buying signals both verbal (言语的) and nonverbal (非言语的); allowing the client the appropriate time and silence to respond to the close; getting it documented as soon as possible once the client agrees to buy; having some friendly talk and giving some useful information to the client like new products or new plans of introducing new product lines; fixing the next appointment time and date.

在实际面试过程中,以上问题也可能会以行为面试问题(behavior interview questions)的形式出现,例如:关于销售演讲方面的问题(Describe the sales presentation you made last time.); 关于遭遇客户拒绝时的应对能力问题(Tell me about a time when you successfully handled rejections from a client.);关于销售成交能力的问题(Give me an example of a recent difficult sale and how you closed the deal.)。这三种行为面试问题同样也可以参考上文所述的应答思路进行回答。

除了上述列举的四类问题外,关于销售技能的面试问题还有可能涉及应聘者对销售过程的理解(What is a typical selling process?)、对销售总体技巧的理解(What do you think are the most important skills in succeeding in sales?)、对销售态度的理解(What do you like and dislike about the sales process?/What aspect of sales do you find the most rewarding?/How do you keep yourself motivated?)、应聘者的谈判能力(Describe a recent situation where you negotiated terms with a tough customer./Tell me about an important negotiation that failed. What went wrong and why?)、应聘者的说服力(Give an example of when you had to overcome strong resistance from a customer and persuade the customer to buy your product.)、应聘者在销售方面的弱点(What is your biggest difficulty in selling?)等。应聘者在参加销售面试前应充分准备好这些问题的应答思路。

销售目标与业绩(Sales Targets and Performance)

在销售面试中,主考官通常会针对销售目标的设置、销售目标的实现状况以及所完成的具体销售额等方面提问。通过提问这些问题,主考官主要想了解应聘者是否具备销售动力和激情、明确的工作方向、迎接挑战的能力以及完成销售目标的能力。

1.关于销售目标的设置

关于这类问题,应聘者在回答时可主要涵盖以下几个方面:确定目标市场对自己产品的需求情况;了解竞争者的产品对市场的占有情况;挖掘目标市场可能接受自己产品的原因;估计目标市场可能有多少客户会接受并使用自己的产品;制定自己的月度销售目标和年度销售目标。

2.关于销售业绩

关于这类问题,应聘者要如实回答。如果应聘者以往的销售业绩不是很理想,应聘者可以简要说明原因,并表明自己有能力和信心提高自己的销售业绩。以下列举一些有关销售目标与业绩的常见面试问题,供应聘者自行练习回答用。

☆How do you set your sales targets?

☆ What was the size of the territory you covered in your last job and what was the sales volume?

☆How have your sales figures compared to your peers?

☆ Did you meet the goals set by your sales manager during the previous year?

新客户开发能力(New Client Development Skills)

开发新客户是销售工作永恒的主题,销售人员一定要时时刻刻努力寻找潜在的客户。因此,在销售面试中通常少不了关于新客户开发的问题。在回答这类问题前,应聘者应了解开发新客户的常见方式,通常包括以下几种:①通过参加老乡会、同学会、战友会,加入企业家协会,或参加培训课程等方式结识潜在客户;②让现有客户帮助介绍新客户;③参加各种展览会、信息交流会、信息发布会、订货会、技术交流会等,从中开发新客户;④通过查阅各种资料寻找新客户,包括电话簿、专业书报、杂志、当地报纸、各类广告等;⑤把产品或服务信息发到网上,吸引新客户;⑥通过打推销电话(cold calls)寻找新客户;⑦通过群发邮件开发新客户;⑧上门拜访潜在客户并推销产品。

除了要了解以上常见的新客户开发途径外,应聘者还应了解应聘公司所属行业的常见的新客户开发途径。例如,房产租赁和销售行业的销售人员经常会打推销电话。以下列举一些常见的该类面试问题,供应聘者自行练习回答用。

☆What methods do you use to get prospects (潜在客户)?

☆ What is your best source of new accounts (客户)?

☆ Do you like cold calling?

☆ Do you use networking to get clients?

☆How much of your time is spent in serving old accounts versus generating new ones?

☆ How many new accounts did you get last year?

☆ Tell me how you developed your largest account.

☆ Tell me about a recent sale that you failed to get.

☆ What difficulties do you think you would experience if you had to establish a new territory?

客户维护能力(Client Retention Skills)

应聘者的客户维护能力也是主考官考察的重要方面。在参加面试前,应聘者应了解客户维护的常见方式和技巧,包括以下几个方面:①建立客户档案,充分了解并把握客户的详细信息;②通过节假日问候客户、给客户寄送礼物、宴请客户等方式,向客户表示关心和问候;③以良好的服务质量和业务水平满足客户的需求,服务要热情周到、细致全面、有针对性;④与客户加强业务以外的沟通,努力与客户建立起朋友般的关系,获取客户的信任;⑤多做些销售之外的事情,在自己力所能及的范围内帮助客户解决一些问题;⑥尊重客户并真诚对待客户。以下列举一些常见的该类面试问题,供应聘者自行练习回答用。

☆What do you think are the most effective ways of retaining clients?

☆How do you entertain clients?

☆How many appointments did you have in a typical week?

☆ How much time do you spend directly with a customer on an average day?

☆ Tell me about a time when a customer was dissatisfied and how you dealt with him or her.

☆Tell me about the most difficult customer you have ever handled.

JAVA架构师面试后的问题 篇3

今天被架构师问了一连串的问题,估计问了有一个多小时吧,有很多问题都答不上来,突然发现原来自己没有掌握的知识太多了,原来我觉得技术是用来解决问题的,而不是用来研究的,但现在觉得要更快捷的解决问题,还得好好的研究他们的原理,凡事多问个“他的原理是什么,底层是怎么实现的”,回来好好整理了一下知识点,我想就每一个知识点展开学习,

JDK1.5新增的功能

字符流和字节流的区别,使用场景,相关类

线程安全的概念,实现线程安全的几种方法

抽象类和接口的区别,使用场景

hash算法的实现原理,hashcode的实现原理

error和exception的区别,RuntimeException和非RuntimeException的区别

继承与组合的区别,使用场景

使用静态工厂方法的好处和坏处

排序算法,他们是时间复杂度是多少

数据库设计原则、范式

数据库常用的编码方式有哪几种

如果有10万条学生成绩信息,怎么获取成绩最高的那一条数据,怎么获取成绩第三的那一条数据,列举你认为性能最好的.方式

序列化的作用,应用场景,除了网路传输

spring的IOC、AOP的使用场景

ajax是否能跨域请求,解决的办法

解析xml的几种方法,他们的原理

怎么样实现高性能的代码

如果有和其他系统有接口调用,但其他系统还没开发完成,怎么进行单元测试

防止重复提交有哪几种方式 (这个网上很多,可以google下)

怎么样运用样式设计一个DIV浮出层

数据库连接池的实现原理,请求怎么样去获取连接,,关闭连接时,连接池是销毁连接还是回收连接

tomcat、weblogic、jboss的区别,容器的作用

apache是容器么,它的作用是什么

内部跳转和外部跳转的区别,底层实现原理

http和https的区别

宕机的原因有哪几种,怎么样分析宕机的原因,如:数据库的长连接,

。。

在velocity页面,为什么不推荐不推荐使用宏定义

webx的核心原理,webx框架和velocity的优缺点

页面上如果有一个screen和两个control,那么他们有几个context

一个含有layout、screen和control的页面,他们的加载顺序是什么,是等所有的加载完一起显示,还是其他。。。

#if($!a==’true’)会出问题么,为什么

支付宝怎么样保证他的安全,他的调用异常分哪几种

java面试问题 篇4

一些Java软件工程师求职者们,可能因为种种原因,对Java语言及其深层原理掌握不牢固,以至于在面试中犯各种错误。本期乔布简历小编将为大家带来的主题是java程序员面试经验,一起来了解一下java程序员面试宝典吧~

关键词:java程序员面试宝典,java程序员面试经验

以下是一些java程序员面试需要注意的地方:

1、对于此类岗位而言,具体的项目是用人单位招聘时最看重的参考因素。即便是没有工作经验的应届生,也要准备可作为自己能力参考的具体作品。如果从未参加过任何项目,可以准备自己在相关领域的课程设计,如有必要还可以将其修改为完整的项目。对于这份具体作品,求职者要有相当的了解。通过求职者对于该作品的讲解,招聘官会判断求职者的技术能力到底如何。

2、Java程序员要求掌握的技能会比较多,求职者在简历上可以分类依次列举出自己所掌握的专业技能,有证书的列出自己所持有的证书名称。在面试的时候,可以对自己所掌握的技能做出介绍,并辅以实例证明,这样会更具有说服力。

3、基础很重要,不要生疏了。不管应聘什么程序员岗位,基础永远都是最重要的。只有有了踏实的基础,再辅以较好的学习能力,这样才不会被互联网日新月异的变化甩开。很多程序员在面试时往往是因为答不出最基础的问题才会错失工作机会。面试前巩固一下基础知识,永远不要轻视了基础。

程序员要时刻关注技术前沿,将新技术与自己所从事的工作联系到一起,做一些深入思考,面试时谈谈这样的问题也是向面试官展现自己学习能力的好机会~

Java面试题 篇5

1、注册Jdbc驱动程序的三种方式

1、用JDBC如何调用存储过程

1、JDBC中的preparedStatement相比Statement的好处

1. 写一个用jdbc连接并访问oracle数据的程序代码

2、Class.forName的作用?为什么要用?

答:调用该访问返回一个以字符串指定类名的类的对象。

3、大数据量下的分页解决方法。

4、用 JDBC 查询学生成绩单, 把主要代码写出来.

5、这段代码有什么不足之处?

try {

Connection conn = ...;

Statement stmt = ...;

ResultSet rs = stmt.executeQuery(“select * from table1”);

while(rs.next()) {

}

} catch(Exception ex) {

}

36、说出数据连接池的工作机制是什么?

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

4、为什么要用 ORM? 和 JDBC 有何不一样?

5. XML部分

1、xml有哪些解析技术?区别是什么?

答:有DOM,SAX,STAX等

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

STAX:Streaming ApI for XML (StAX)

讲解这些区别是不需要特别去比较,就像说传智播客与其他培训机构的区别时,我们只需说清楚传智播客有什么特点和优点就行了,这就已经间接回答了彼此的区别。

2、你在项目中用到了xml技术的哪些方面?如何实现的?

答:用到了数据存贮,信息配置两方面。在做数据交换平台时,将不能数据源的数据组装成XML文件,然后将XML文件压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再同XML文件中还原相关信息进行处理。在做软件配置时,利用XML可以很方便的进行,软件的各种配置参数都存贮在XML文件中。

3、用jdom解析xml文件时如何解决中文问题?如何解析?

答:看如下代码,用编码方式加以解决

package test;

import java.io.*;

public class DOMTest

{

private String inFile = “c:people.xml”

private String outFile = “c:people.xml”

public static void main(String args[])

{

new DOMTest();

}

public DOMTest()

{

try

{

javax.xml.parsers.DocumentBuilder builder =

javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();

org.w3c.dom.Document doc = builder.newDocument();

org.w3c.dom.Element root = doc.createElement(“老师”);

org.w3c.dom.Element wang = doc.createElement(“王”);

org.w3c.dom.Element liu = doc.createElement(“刘”);

wang.appendChild(doc.createTextNode(“我是王老师”));

root.appendChild(wang);

doc.appendChild(root);

javax.xml.transform.Transformer transformer =

javax.xml.transform.TransformerFactory.newInstance().newTransformer();

transformer.setOutputproperty(javax.xml.transform.OutputKeys.ENCODING, “gb2312”);

transformer.setOutputproperty(javax.xml.transform.OutputKeys.INDENT, “yes”);

transformer.transform(new javax.xml.transform.dom.DOMSource(doc),

new

javax.xml.transform.stream.StreamResult(outFile));

}

catch (Exception e)

{

System.out.println (e.getMessage());

}

}

}

4、编程用JAVA解析XML的方式.

答:用SAX方式解析XML,XML文件如下:

王小明

信息学院

6258113

男,1955年生,博士,95年调入海南大学

事件回调类SAXHandler.java

import java.io.*;

import java.util.Hashtable;

import org.xml.sax.*;

public class SAXHandler extends HandlerBase

{

private Hashtable table = new Hashtable();

private String currentElement = null;

private String currentValue = null;

public void setTable(Hashtable table)

{

this.table = table;

}

public Hashtable getTable()

{

return table;

}

public void startElement(String tag, AttributeList attrs)

throws SAXException

{

currentElement = tag;

}

public void characters(char[] ch, int start, int length)

throws SAXException

{

currentValue = new String(ch, start, length);

}

public void endElement(String name) throws SAXException

{

if (currentElement.equals(name))

table.put(currentElement, currentValue);

}

}

JSp内容显示源码,SaxXml.jsp:

<%@ page errorpage=Errpage.jsp

contentType=text/html;charset=GB2312 %>

Java教学中存在的问题及建议 篇6

关键词:官方文档,实践教学,学习效率

Java语言是面向对象编程技术集大成者, 其跨平台特性及其他优点使其成为目前IT业界应用最广泛的语言, 从服务端到桌面端及移动平台, 尤其是安卓平台上得到了普遍的支持, 很多高校计算机专业围绕Java语言都设置了课程群。但在教学过程中也存在教学内容更新赶不上Java技术的节奏、学习目标及路径混乱、学生学习效率较低等比较突出的问题。

一、教学内容组织及更新

Java技术不断更新, 新标准与新技术不断涌现, 教学内容也需要不断更新以跟上技术的发展。但是目前教学内容的问题主要体现在教材内容更新慢, 往往滞后于Java技术标准的发展。目前Java课程的内容基本上是以Java 6版本为主, 而Java 6到后期的各个版本中的更新内容较多, 更新的部分往往又是比较重要的部分。新版本不断推出, 其中一个重要主题就是通过新增一些特性来简化开发, 如Java 5版中新增了泛型、for-each循环、自动装包/拆包、枚举、可变参数、静态导入等新特性;Java 6中新增了Desktop类和System Tray类、St AX、Compiler API、轻量级Http Server API、插入式注解处理API、对脚本语言的支持 (如:Ruby, Groovy, Java Script, Common Annotations等) ;Java 7中新增了Modularization模块化、对动态语言的支持、更多新的I/O APIs、对XML本地语言支持、Safe rethrow、Null dereference expressions、更好的类型推断、多重捕获Multi-catch、Swing应用框架等新特性, 使用这些特性有助于我们编写更加清晰、安全的代码。当前最新的Java 8包含两个主要的新特性:一个是新增的Lambda表达式, 该技术可以使多核处理器环境下的编程更高效, 提高开发人员的效率, 更好地利用多核处理器;另外一个是新加入了Jigsaw, 该技术可以使大块的代码更易于管理, 同时可以促进大型运算的代码重用。此外, Java 8还升级了Java核心库以增强对并行运算的支持, 同时还支持传感器, 增加了代码的部署选项。Java官方表示, 在后续推出的Java 9和Java 10中将加入大数据、多语言的互操作性、云计算和移动, 预期分别于2015年和2017年发布[1]。

二、学习目标及路径

Java课程不是孤立的一门语言课, 在教学过程中必须要向学生指明今后的学习方向, 还以上述网上选课系统为例, 教师要向学生指明开发这样一套系统都需要掌握哪些知识, 像html、Java Script、Servlet、JSP、Struts、多层架构理论、JSTL、XML、Hibernate、Spring等。面对如此庞杂的技术体系, 难免会走弯路, 很多人往往感到无从下手, 教师可以向学生推荐经典的参考书籍和学习资料, 指出明确的学习路线图。根据官方的指南Java学习路径包括初始阶段 (New To Java) 、巩固基础阶段 (Building On Foundation) 、进阶阶段 (Developing Client or Server applications) 三个递进的组成部分: (1) 在初始阶段的主要任务是了解和掌握Java语言的特点及开发环境的搭建, 对面向对象编程中有关类和对象、继承和泛型、打包和各种数据类型知识要有深刻的认识, 同时还要了解Java的异常处理机制、基本输入输出、多线程技术、正则表达式等各种知识点。 (2) 在基础阶段主要的知识内容为集合框架、国际化、Java平台的安全机制、扩展机制、泛型编程技术。 (3) 在进阶阶段分为两个学习方向, 如果对桌面端程序开发或富客户端程序开发比较有兴趣, 可以优先选择Swing、2D Graphics Full-screen Exclusive Mode API等技术进行学习;如果更侧重于中间件及服务端软件开发或web应用程序开发, 可以选择JDBC、JMX、JNDI、JAXP、RMI、Concurrency等技术专题深入学习。在教学过程中必须让学生对Java的整个技术体系有所了解, 明确所学的知识点在系统开发中的作用和地位。同时最好举一些实际的案例, 比如, 现在很多高校教务部门都开通了网上选课系统, 学生都使用过, 可以基于此系统对学生进行启发, 提出以下问题来启发学生:这样一套系统是怎样开发的?都涉及哪些知识?我们还要掌握哪些知识才能够开发这样的系统?Java在其中处于什么样的地位?我们的学习内容在其中发挥了什么样的作用?如果系统是基于MVC模式开发的则可以向学生进一步介绍Java在控制层、模型层以及视图层是怎样起作用的, 通过学生比较熟悉的实例分析, 学生就能够对Java的作用有一个感性的认识。

三、学习效率的提升

1. 充分利用各类建模及开发工具软件。

一种程序设计语言辅以强大、高效的开发工具才会取得成功[2]。作为一门面向对象的课程, 可用的教学工具软件很多, 在教学过程中要引导学生善于利用已有的IDE以及其他的建模工具, 这样可以加强学习效果, 提示学习效率。基于Java的工具软件有很多, 在教学工具的选取方面有几个参考意见: (1) 要选择在业界应用比较广泛的IDE, 其功能和性能往往是经过长期的检验, 另外也方便学生走向工作岗位以后能够顺利开展工作; (2) 在同等条件下, 要选择开源的开发工具, 开源的开发工具大多支持使用者自主开发插件, 以扩充工具的功能, 有一定的拓展空间, 又没有软件许可的限制; (3) 开发工具的选用要根据课程的进展分阶段选择, 比如刚开始的时候要求学生对配置开发环境有比较清晰的认识, 可以选用比较简单的如JCreator, 学生需要动手做一些基础的配置工作, 如需要用到的jar包导入、jre路径和class path设置等, 在后期可以选用功能较强、配置自动化程度较高、编译环境较好的工具, 如Net Beans、Eclipse; (4) 教学工具不能只局限于IDE, 软件设计时常用的建模工具也要向学生引荐, 如Rational Rose等工具。在课堂上举例时, 通过建立类图和对象图可以清晰地描述对象间的关系, 有助于学生加深面向对象的理解。在涉及到数据库编程时, 可以使用Power Designer等建模工具, 工具的使用可以使学生对开发的规范有更清晰地认识, 在学习过程中好用的工具可以使开发工作事半功倍, 在好用的开发工具的帮助下, 学生会增强对Java课程学习的兴趣与信心。

2. 以培养动手能力为核心的教学方法。

Java课程有比较强的实践性, 有人提出采用“项目导向”[3]以及“任务驱动”[4]的教学方法, 其核心都是要提高学生的动手能力。目前大多院校采用课堂讲课, 以理论知识讲述为主, 辅以少量的练习, 上机时间安排较少, 在有限的上机时间内学生只能验证课本上的例题, 加深一下对知识点的了解, 但是形不成完整的知识体系, 动手能力严重不足, 经过实际考察发现在课程结束后, 学生能够独立完成教材例题外新任务的人少之又少。造成这个问题的原因有以下几个: (1) 首先学生对面向对象的概念理解的不够深刻, 面向过程的思维在解决问题的时候占据主导地位; (2) 学生上机实践时间太少, 书写代码量远远不够; (3) 由于Java课程内容较多, 教学内容重介绍, 学生往往觉得听懂了, 但是面对实际问题时还是觉得无从下手。以下这些方法可以改善上述问题: (1) 教师在课堂授课时多动手写代码, 坚持边写代码边讲, 不要讲到一个概念的时候, 把写好的代码直接调出来, 要向学生演示程序模块从无到有、从小到大的编写过程; (2) 把分析问题时所采用的面向对象的思路描述清楚, 然后再着手实现, 这样学生不但能够“知其然”还能“知其所以然”; (3) 教师在课堂编写代码的过程中遇到程序抛出异常和运行错误时, 要针对具体问题当堂调试, 整个调试和修改的过程也是学生最希望看到的; (4) 在课时的设置方面要多给学生分配上机时间, 有条件的可以在机房上课, 学生可以边学边做。本课程最核心的目的是学生通过课程的学习, 能够掌握面向对象方法, 练就面向对象分析问题和解决问题的动手能力, 教师在教学的过程中要着重培养学生这方面的能力。

针对Java教材内容滞后于Java技术标准更新的问题, 要求教师要实时关注跟踪新标准, 及时的吐故纳新, 向学生传授最新的知识。很多学生往往存在不清楚学习Java之后能够做什么的困惑, 教师要及时全面的把Java技术体系介绍给学生, 指明学生的后续学习方向, 充分利用各类建模与开发工具, 让学生少走弯路, 激发学生的学习热情和把课程学好的信心。在整个教学过程中要以提高学生动手能力为核心, 教师课堂上多动手, 学生实验室多动手。

参考文献

[1]http://www.iteye.com/news/24631/[DB/OL]

[2]周贤善.Java课程教学的探析[J].教育与教学研究, 2009, (2) .

[3]孙阳.浅析项目教学法在Java编程教学中的应用[J].硅谷, 2009, (7) .

java面试问题 篇7

关于应聘者的领导能力

Tell me how you went about setting the goals for your team members and gaining commitment from them.

通过这一问题,主考官主要想了解应聘者是如何通过设置团队目标来领导自己的团队,以及采取了何种方法或手段来引导团队成员实现目标。在回答这一问题时,应聘者应当使用恰当的例子,充分说明自己擅长制定团队目标并领导团队成员实现目标。以下回答针对的是如何成功地为销售团队制定目标,以及制定目标会带来怎样的好处。

[具体任务] I needed to set the sales team objectives for the next year. [执行步骤] I referred to the sales department goals for the next year to decide which activities and tasks our team should concentrate on. I clearly communicated the relationship between our team goals and the department goals to my team members and explained which activities would best result in achieving these goals. [完成结果] The members really benefited from having a clear idea of the team goals and how we could contribute to achieving them. Having clear goals meant they were able to see how each of them was an essential part of the team’s success, and this motivated them towards achieving the goals.

关于应聘者的决策能力

Tell me about an important decision you made in your previous job.

通过这一问题,主考官想要了解的是应聘者能否作出思维缜密的决策,是否具备果断的决策能力。在回答这一问题时,应聘者首先应该分析各种影响自己决策的因素,然后权衡各种选择,最后作出最妥当的决策。以下参考回答是关于如何更经济地为公司采购原材料。

[具体任务] I was in charge of the purchase of raw materials for our company. [执行步骤] We always ordered a month’s supply at a time to keep inventory costs low. I had to decide whether to keep doing this or buy six months’ supply and get a discount for ordering such a big volume and escape possible future price increases. I did some research and figured out that we could reduce our costs by buying for six months, especially since the amount we used remained practically unchanged month on month. [完成结果] It turned out that I was right, and the prices increased quite a lot during those six months.

关于应聘者解决问题的能力

Describe a thorny problem you had to solve in your last job.

这个问题旨在考查应聘者识别问题、分析问题和解决问题的能力。应聘者首先应从自己的工作经历中寻找一个与所应聘职位密切相关的实例,然后说明自己是如何处理这一问题的,并对处理结果加以描述。此外,应聘者选择的实例最好是自己成功解决的问题。以下参考回答是关于如何成功处理客户对质量低劣产品的投诉。

[具体问题] Last July, we were receiving a lot of complaints about the poor quality of our products. [解决措施] I met with the staff concerned in the Quality Control Department and discovered that the problem seemed to be with the poor raw materials from our vendors. I investigated and found that the system for checking the quality of raw materials was outdated. Then, an up-to-date system for checking the quality of raw materials was quickly introduced. [处理结果] This sorted out the problem and we had fewer complaints from our clients.

关于应聘者的创新能力

Tell me about a suggestion that you have recently made to your manager.

这一问题是用来了解应聘者是否具备积极主动的创新思维能力,是否能够为公司提供一些有益的创意。应聘者从过去的工作经历中搜寻的相关案例,要能说明自己能够积极主动地为公司提供有益于公司发展的建议。以下参考回答是关于如何说服上司为采购部的员工提供一次有关即将上市的新产品的培训。

[具体问题] I worked in the Purchasing Department and the company was launching a new product. The Sales Department had in-depth training on it, but we had none. [解决建议] I suggested that the Purchasing Department should also receive the training so that we would better understand what components should be purchased and be able to ask our vendors some wise questions. It was agreed that we would all undergo a short version of the training. [处理结果] This meant that we could deal professionally with our vendors and it also motivated us, feeling part of the launch excitement.

关于应聘者的沟通能力

Describe a situation where you negotiated with your manager to reach an agreement.

通过这一问题,主考官想要了解应聘者是否具备明确传递信息的能力以及为获得双赢结果的沟通能力。回答该问题时,应聘者应首先简单介绍具体问题,然后详细阐释自己如何以合作的方式和态度与对方一起商讨问题,以及自己如何以充分的论据说服对方接受自己提出的解决方案;最后简述一下处理的结果。以下参考回答是关于如何说服主管为其下属完成项目任务提供更多的时间。

[具体问题] My supervisor gave me an unreasonable deadline to complete a project. [解决方案] I asked him how he had come up with the deadline. He said that it was based on his deadline to present the project to his line manager. Then, I detailed every step that needed to be taken to complete the project and how long each step would realistically take. After that, we discussed possible ways of reducing these time frames, and I suggested allocating more resources to the project. Finally, I was asked to put together a project proposal that covered what we had discussed and he would use this to negotiate with his line manager for a more realistic time line. [处理结果] The result was that we were able to settle on a plan that worked for both of us.

上一篇:奉天寨小学2013年安全教育日活动总结下一篇:野心的演讲稿