百度
360搜索
搜狗搜索

java软件开发面试题,关于JAVA软件工程师的面试(java开发工程师面试)详细介绍

本文目录一览: java编程程序员技术面试常见面试?

随着互联网的不断发展,java开发成为了众多开发工程师使用的主流编程开发语言。今天,java课程培训机构就一起来了解一下,在java程序员面试过程中,有哪些比较常见的技术面试问题需要我们了解。
1、什么是线程?
线程是操作系统能够进行运算调度的小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。
2、线程和进程有什么区别?
线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程使用不同的内存空间,而所有的线程共享一片相同的内存空间。每个线程都拥有单独的栈内存用来存储本地数据。
3、如何在Java中实现线程?
两种方式:java.lang.Thread类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,由于线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread类或者直接调用Runnable接口来重写run()方法实现线程。
4、有哪些不同的线程生命周期?
当我们在Java程序中新建一个线程时,它的状态是New。当我们调用线程的start()方法时,状态被改变为Runnable。线程调度器会为Runnable线程池中的线程分配CPU时间并且讲它们的状态改变为Running。其他的线程状态还有Waiting,Blocked和Dead。
5、你对线程优先级的理解是什么?
每一个线程都是有优先级的,一般来说,高优先级的线程在运行时会具有优先权,但这依赖于线程调度的实现,这个实现是和操作系统相关的(OSdependent)。我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个int变量(从1-10),1代表低优先级,10代表高优先级。
6、什么是死锁(Deadlock)?如何分析和避免死锁?
死锁是指两个以上的线程永远阻塞的情况,这种情况产生至少需要两个以上的线程和两个以上的资源。
分析死锁,我们需要查看Java应用程序的线程转储。我们需要找出那些状态为BLOCKED的线程和他们等待的资源。每个资源都有一个唯一的id,用这个id我们可以找出哪些线程已经拥有了它的对象锁。

javaMVC架构面试题

  model:模型层
  view:视图层
  controller:控制层
  mvc (modal view controler)本来是存在于desktop程序中的,m是指数据模型,v是指用户界面,c则是控制器。使用mvc的目的是将m和v的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据你可以分别用柱状图、饼图来表示。c存在的目的则是确保m和v的同步,一旦m改变,v应该同步更新。
  模型-视图-控制器(mvc)是xerox parc在八十年代为编程语言smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为sun公司j2ee平台的设计模式,并且受到越来越多的使用 coldfusion 和 php 的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
   mvc如何工作
  mvc是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用mvc应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
  视图
  视图是用户看到并与之交互的界面。对老式的web应用程序来说,视图就是由html元素组成的界面,在新式的web应用程序中,html依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括macromedia flash和象xhtml,xml/xsl,wml等一些标识语言和web services.
  如何处理应用程序的界面变得越来越有挑战性。mvc一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
  模型
  模型表示企业数据和业务规则。在mvc的三个部件中,模型拥有最多的处理任务。例如它可能用象ejbs和coldfusion components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
  控制器
  控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击web页面中的超链接和发送html表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。
  现在我们总结mvc的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
   为什么要使用 mvc
  大部分web应用程序都是用像asp,php,或者cfml这样的过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像html这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的, 它需要精心的计划和不断的尝试。mvc从根本上强制性的将它们分开。尽管构造mvc应用程序需要一些额外的工作,但是它给我们带来的好处是无庸质疑的。
  首先,最重要的一点是多个视图能共享一个模型,正如我所提及的,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用mvc,无论你的用户想要flash界面或是 wap 界面;用一个模型就能处理它们。由于你已经将数据和业务规则从表示层分开,所以你可以最大化的重用你的代码了。
  由于模型返回的数据没有进行格式化,所以同样的构件能被不同界面使用。例如,很多数据可能用html来表示,但是它们也有可能要用macromedia flash和wap来表示。模型也有状态管理和数据持久性处理的功能,例如,基于会话的购物车和电子商务过程也能被flash网站或者无线联网的应用程序所重用。
  因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变你的应用程序的数据层和业务规则。如果你想把你的数据库从mysql移植到oracle,或者改变你的基于rdbms数据源到ldap,只需改变你的模型即可。一旦你正确的实现了模型,不管你的数据来自数据库或是ldap服务器,视图将会正确的显示它们。由于运用mvc的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松偶合的构件。
  对我来说,控制器的也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。
   mvc的缺点
  mvc的缺点是由于它没有明确的定义,所以完全理解mvc并不是很容易。使用mvc需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。
  你将不得不花费相当可观的时间去考虑如何将mvc运用到你的应用程序,同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试,你就可以毫无顾忌的重用它们了。
  根据我个人经验,由于我们将一个应用程序分成了三个部件,所以使用mvc同时也意味着你将要管理比以前更多的文件,这一点是显而易见的。这样好像我们的工作量增加了,但是请记住这比起它所能带给我们的好处是不值一提。
  mvc并不适合小型甚至中等规模的应用程序,花费大量时间将mvc应用到规模并不是很大的应用程序通常会得不偿失。
   mvc是一条创建软件的好途径
  mvc设计模式是一个很好创建软件的途径,它所提倡的一些原则,像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控制器的构件,你可能需要重新思考你的应用程序,尤其是应用程序的构架方面。如果你肯接受mvc,并且有能力应付它所带来的额外的工作和复杂性,mvc将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。

Java面试题?

一般来说面试我都记下印象深刻的面试题,其他感觉都没什么好记的,但是今天这个面试的过程感觉是我职业生涯中比较有意思的一次面试,遂分享出来。
  今天顶着大太阳出去面试,找了好久终于找到了这家公司的位置,貌似是集体办公区域,就是一层楼有N个公司在办公,也没什么隔断。心想创业公司吧,这样也正常。在这之前已经面过三家公司都挺顺利,公司规模都还可以,还有一家一面也是过了等二面。之所以来这家公司面呢是因为对公司的产品还挺感兴趣的,想来看看。
  然后到地方后面试官先给了我一份卷子做,都是些很简单的题,写完后等了好久面试官来了,开始进行面试。面试官先看了下我的简历,然后说你怎么两年才做这么4个项目,尤其是第一家才1个项目。我说外包公司项目多,没必要挨个写上,写上最近一家公司的项目,和之前公司代表性的项目就行了。然后他就教育了我一番,说怎么写这么点儿呢,很容易让人觉得你啥都没做,做过的都得写上。我之前一直以为我这种两年多经验的写一页简历足够了,不过他说了下我觉得确实可以考虑考虑多写一些。。。不过老实说我在想。。难道他毕业四五年了还把刚毕业的项目往简历上写?
  吐槽完项目。面试官不知道为什么看着我的简历以为是培训班出来的,然后就旁敲侧击的问我毕业是否有参加过什么培训啊。我满脸黑线,我简历写的我第一份工作毕业就进去的,而且我项目都是专业领域性很强的项目,这是从哪儿看出来的。然后这面试官又问我那你大学都学什么课程啊,我又耐着性子解释了一圈。然后他看问不出啥的就没问了。然后就问了一个项目有关的正常问题。开始问我技术了。
  第一个技术就问我spring框架,然后问我spring主要注重哪些技术,我说了就依赖注入和自动化配置,然后这人问我如何学习spring,我说看了spring实战,深入理解spring架构,然后还看了源码,然后这人说你看了官方文档吗,我说看了小部分,然后他说你怎么不多看官方说明文档呢,我说我更多喜欢直接看看源码设计,而且官方文档更多就是说明书的意思,我觉得用来入门还行,要真正了解肯定还是要深入底层去看下。然后争论了一番后他问我springboot自动化配置如何实现的。我从实现原理,源码流程说了一圈,我估计他应该不懂这块儿,然后我说完后他和我说你觉得看这些东西用处大吗,你为什么不看官方文档。我当时真是满脸黑线,合着这官方文档在他眼中是圣经啊。然后又问我springboot如何实现的tomcat启动,我源码解释了一圈后我估计他还是不懂源码这块儿,所以又和我死磕说你这些东西为什么不看官方文档说明呢。。嗨,我第一次看到对官方文档如此执着的人..。。当然了他举了个有意思的例子,说比如你买了个冰箱,你不看说明书你怎么知道如何使用呢。。我真的很想说我看过这台冰箱深入介绍的几本书并且连内部零件构造都了解你觉得我不会用这台冰箱吗。。
  然后框架就没问了,老实说我觉得可能是他也不太了解。。然后就问我sql了,说有没有用过索引,sql优化。我说了一些,然后他说下mysql索引类型呢? 我说你指的哪种类型,是hash/b+tree ,还是聚集索引/非聚集索引,还是普通索引/唯一索引/主键索引/..... 这种。然后我估计他对前两个应该不了解,然后恼羞成怒的来了句你觉得我问的是哪个? 我去,这个我哪能知道。然后我就说了下 hash/b+树索引,然后这个人来了句b+树你觉得是什么,是一种算法,还是xxx,我当时很无语,名字都叫树了这难道不应该是一种数据结构吗。 然后又解释了一圈我感觉他可能也不了解这块也就没问了。然后问我算法。
  其实就简单的问了句,你了解哪些排序,我说冒泡排序,插入排序,快排,堆排序.....,然后这面试官嘲讽的笑了一声,我赶紧回想了哪个有问题,结果想了下没想到哪个字说的有问题我就问 你为什么笑,然后他说堆排序是什么东西。老实说听到这句话我是真的很想直接走的,但是想下这对不起我请的一上午假。然后我很克制的说了句,你不知道不代表没有,这是任何一本讲数据结构与算法的书都应该会讲到的东西,建议去百度下。然后这个时候我估计他本就有点儿恼羞成怒的心情被彻底点着了,然后开始问我jmm。哦对了,他看着我写笔试题的时候排序那儿说了句这是什么排序。(我觉得快排方法应该还是挺好认的)
  jmm问我五大数据区域,我说了后最后我提了一下直接内存,然后这人我估计也不懂,然后就开始说我问你这个了吗?我让你说五大区域你为什么提这个? 你有听清楚我的问题吗? 我当时就???,合着我这多提了一嘴直接给戳高潮了。。。然后赶紧闭嘴了,让他接着问后面的问题。
  然后问了我期望薪资,我说了个期望薪资,结果这人说,你觉得你在项目中能承担部门负责人? 还是项目经理? 合着我期望的薪资在这家公司是部门负责人才有的待遇,看这意思应该是觉得我漫天要价。我觉得我要再说我已经有的三个offer都比我刚提的要多怕不是能让他当场爆炸。。当然了,为了不自讨没趣我就说我只能承担个中级开发吧。。。
  最后问我有什么想问的,我就照例问了下公司技术栈,然后他说后端用java nodeJs ,我就问为什么后端会用两种技术栈? 然后他回答道,这么用肯定是处于公司技术考量啊,巴拉巴拉的,反正最后也没说个明白为啥会用两种技术。。然后这个时候提了一嘴既然采用nodeJs是觉得更加方便为什么不考虑考虑使用Python。老实说我觉得我这句话作为大家都是技术人员,技术探讨性的问题应该很正常吧,结果这句话不知道为什么又把他戳高潮了,他直接回到 为什么要用Python?我在严肃的和你讲公司技术栈,你觉得这样好吗? 你觉得这样提问好吗?你这样随意的一问觉得合适吗?
  最后伴随着这几个疑问,面试结束了。。。老实说我被面的有点稀奇古怪的,尽管他问的问题我觉得我应该全都回答上了,但看他的样子似乎很不高兴

java基础面试题有哪些?

下面是10道java基础面试题,后附答案
1.什么是 Java 虚拟机?为什么 Java 被称作是“平台无关的编程语言”?
Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。
Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。
2.“static”关键字是什么意思?Java 中是否可以覆盖(override)一个 private 或者是static 的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java 中 static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。
3.JDK 和 JRE 的区别是什么?
Java 运行时环境(JRE)是将要执行 Java 程序的 Java 虚拟机。它同时也包含了执行 applet 需要的浏览器插件。Java 开发工具包 (JDK)是完整的 Java 软件开发包,包含了 JRE,编译器和其他的工具(比如:JavaDoc,Java 调试器),可以让开发者开发、编译、执行 Java 应用程序。
4.是否可以在 static 环境中访问非 static 变量?
static 变量在 Java 中是属于类的,它在所有的实例中的值是一样的。当类被 Java 虚拟机载入的时候,会对 static 变量进行初始化。如果你的代码尝试不用实例来访问非 static 的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
5.Java 支持的数据类型有哪些?什么是自动拆装箱?
Java 语言支持的 8 中基本数据类型是:
?byte
?short
?int
?long
?float
?double
?boolean
?char
自动装箱是 Java 编译器在基本数据类型和对应的对象包装类型之间做的一个转化。比如:把 int 转化成 Integer,double 转化成 double,等等。反之就是自动拆箱。
6.Java 支持多继承么?
不支持,Java 不支持多继承。每个类都只能继承一个类,但是可以实现多个接口。
7.Java 中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java 编译器会为这个类创建一个默认的构造函数。
Java 中构造函数重载和方法重载很相似。可以为一个类创建多个构造函数。每一个构造函数必须有它自己唯一的参数列表。
Java 不支持像 C++中那样的复制构造函数,这个不同点是因为如果你不自己写构造函数的情况下,Java 不会创建默认的复制构造函数。
8.Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
Java 中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
9.接口和抽象类的区别是什么?
Java 提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:
?接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
?类可以实现很多个接口,但是只能继承一个抽象类
?类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
?抽象类可以在不提供接口方法实现的情况下实现接口。
?Java 接口中声明的变量默认都是 final 的。抽象类可以包含非 final 的变量。
?Java 接口中的成员函数默认是 public 的。抽象类的成员函数可以是 private, protected 或者是 public。
?接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含 main 方法的话是可以被调用的。
10.什么是值传递和引用传递?
对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。
对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。
最后祝你面试顺利!

想面试Java开发岗位,请问过来人要准备的专业面试题都有哪些

首先确认,你是java行业的新手。
面试题。
java基础部分(常见的):
1、java有几种基本数据类型。
2、冒泡排序,(笔试常出现)
3、解释什么是类的成员变量,局部变量,实例成员变量,类成员变量?
4、最狠得就是——什么是面向对象,这个只能自己组织语言,按自己的理解来回答,根本找不到具体答案。
5、抽象类与接口的区别。
6、线程有几种实现方式,分别是什么?
7、如何使线程同步?
8、什么是GC?
9、构造方法是否能被重写?为什么?
10、java关键字是否区分大小写?
11、for循环里的三个表达式的执行顺序是什么?
12、简述什么是关系型数据库?
13、arrayList与linkedList的区别?
14、String与StringBuffer的区别?
数据库部分(常见):
1、组函数,2、having和where的区别,3、伪列,4、怎么实现数据分页?5、表链接6、事务(ACID)7、数据安全8、序列9、索引10、你所参与过的项目用了几个表?
JDBC部分(常见):
1、JDBC的六个步骤。
2、JDBC分页。
Servlet(常见):
1、客户端发送请求的几种方式。
2、servlet的生命周期的几个阶段。
3、forward跳转与redirect跳转的区别。
4、cookie与session的区别。
5、三大作用域。
6、连接池。
JSP(常见):
1、jsp的九大内置对象。
2、EL表达式。
3、JSTL标签库。
javaScript(很少会问,了解即可):
1、DOM:对象,文档,模型
2、鼠标点击事件:
AJAX(了解):
1、ajax请求与传统请求的区别。
框架相关:
1、Struts2数据处理机制。
2、OGNL表达式。
3、了解下值栈。
4、MVC开发模式的好处。
5、Hibernate与MyBatis的区别。
6、连接池
7、struts2与SpringMVC的区别。
8、IOC,DI。
9、AOP。
10、运用框架的好处。
11、用到过的开发模式有哪些?
注:以上内容只要会一大部分,面试基本都会通过,如果全部会的话,就可以挑offer了,会一半就有很大的可能了(手都敲麻了.。。。)。

阅读更多 >>>  shiro框架漏洞,java和网络安全沾边吗?

关于JAVA软件工程师的面试(java开发工程师面试)

一般面试先是自我介绍,这个就不给你写了,简单说几句就行,不是重点。
接下来会让你介绍一下你做过的项目,这绝对是一个非常关键的问题,面试官一眼就能看出来你的能力,如果觉得你行,后面才会问细节技术问题,否则就开始应付你了。
这个问题该怎么答?一定要以技术和架构为主,业务逻辑为辅。说的越底层越好,比如你们公司项目底层是通过什么连接数据库的?哪种方法?为什么这么选择?
是否用到了spring的DI?是否将action也交给spring托管了?都在哪些地方使用了spring的事务?其实这种问题多了去了,最主要的是你一定要非常了解你做过的项目,别说业务逻辑,那都没用。
去看看hibernate的面试题,网上有。如果你的项目没用这个技术,就别提,否则一问你就傻了,对技术经理的面试千万别装
struts的原理?spring的原理?hibernate的save和方法有什么不同?这些都必须清楚,如果我上面提到的任何一点你不清楚,那就别去面试了,绝不夸张,这些都是基础。

Java常见的面试问题(带答案),自己答出来多少

1、在java中如果声明一个类为final,表示什么意思?
答:final是最终的意思,final可用于定义变量、方法和类但含义不同,声明为final的类不能被继承。
父类的构造方法是否可以被子类覆盖(重写)?
答:父类的构造方法不可以被子类覆盖,因为父类和子类的类名是不可能一样的。
2、请讲述String 和StringBuffer的区别。
答:String 类所定义的对象是用于存放”长度固定”的字符串。
StringBuffer类所定义的对象是用于存放”长度可变动”的字符串。
3、如果有两个类A、B(注意不是接口),你想同时使用这两个类的功能,那么你会如何编写这个C类呢?
答:因为类A、B不是接口,所以是不可以直接继承的,但可以将A、B类定义成父子类,那么C类就能实现A、B类的功能了。假如A为B的父类,B为C的父类,此时C就能实现A、B的功能。
4、谈谈你对抽象类和接口的理解。
答:定义抽象类的目的是提供可由其子类共享的一般形式、子类可以根据自身需要扩展抽象类、抽象类不能实例化、抽象方法没有函数体、抽象方法必须在子类中给出具体实现。他使用extends来继承。
接口:一个接口允许一个类从几个接口继承而来,Java 程序一次只能继承一个类但可以实现几个接口,接口不能有任何具体的方法,接口也可用来定义可由类使用的一组常量。其实现方式是interface来实现。
5、Java中什么是竞态条件?
答:竞态条件会导致程序在并发情况下出现一些bugs。多线程对一些资源的竞争的时候就会产生竞态条件,如果首先要执行的程序竞争失败排到后面执行了,那么整个程序就会出现一些不确定的bugs。这种bugs很难发现而且会重复出现,因为线程间的随机竞争。
6、Java中如何停止一个线程?
答:Java提供了很丰富的API但没有为停止线程提供API。JDK 1.0本来有一些像stop(), suspend() 和 resume()的控制方法但是由于潜在的死锁威胁因此在后续的JDK版本中他们被弃用了,之后Java API的设计者就没有提供一个兼容且线程安全的方法来停止一个线程。当run() 或者 call() 方法执行完的时候线程会自动结束,如果要手动结束一个线程,你可以用volatile 布尔变量来退出run()方法的循环或者是取消任务来中断线程。点击这里查看示例代码。
7、 一个线程运行时发生异常会怎样?
答: 简单的说,如果异常没有被捕获该线程将会停止执行。Thread.UncaughtExceptionHandler是用于处理未捕获异常造成线程突然中断情况的一个内嵌接口。当一个未捕获异常将造成线程中断的时候JVM会使用Thread.getUncaughtExceptionHandler()来查询线程的UncaughtExceptionHandler并将线程和异常作为参数传递给handler的uncaughtException()方法进行处理。

Java开发面试题

1、面向对象的特征有哪些方面?
答:面向对象的特征主要有以下几个方面:
- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
- 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段(如果不能理解请阅读阎宏博士的《Java与模式》或《设计模式精解》中关于桥梁模式的部分)。
- 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。
- 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。多态性分为编译时的多态性和运行时的多态性。如果将对象的方法视为对象向外界提供的服务,那么运行时的多态性可以解释为:当A系统访问B系统提供的服务时,B系统有多种提供服务的方式,但一切对A系统来说都是透明的(就像电动剃须刀是A系统,它的供电系统是B系统,B系统可以使用电池供电或者用交流电,甚至还有可能是太阳能,A系统只会通过B类对象调用供电的方法,但并不知道供电系统的底层实现是什么,究竟通过何种方式获得了动力)。方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重写(override)实现的是运行时的多态性(也称为后绑定)。运行时的多态是面向对象最精髓的东西,要实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中已有的或抽象的方法);2). 对象造型(用父类型引用引用子类型对象,这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为)。
2、访问修饰符public,private,protected,以及不写(默认)时的区别?
答:
修饰符
当前类
同 包
子 类
其他包
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。Java中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。
3、String 是最基本的数据类型吗?
答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。
4、float f=3.4;是否正确?
答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。
5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
6、Java有没有goto?
答:goto 是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之父)编写的《The Java Programming Language》一书的附录中给出了一个Java关键字列表,其中有goto和const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保留字,其实保留字这个词应该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库中使用过的有特殊意义的单词或单词的组合都被视为保留字)
7、int和Integer有什么区别?
答:Java是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

Java编程常见面试题目,要求正确答案?

1.
final关键字,修饰类,方法,或者成员变量为最终的,使其不可被修改
finally可跟在try catch语句或者try语句后使用,表示这个方法一定会被执行
finalize通知垃圾回收机制回收被finalize标示的对象,但不保证马上就会执行
2.
可以继承也可以实现接口
由于构造方法必须与类型一致,所以其没有构造方法,继承有参构造方法必须调用父类的
直接new interface就是实现接口
3.
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。
Java内部类与C++嵌套类最大的不 同就在于是否有指向外部的引用上
4.
&&短路与,当两个条件,如a>b&&b>c,中a>b为假时b>c这个语句不会被执行而直接返回false
&两个条件都会被执行
5.
最重要区别是hashtable是线程安全的(同步)而hashMap不是。。
6.
Collection 层次结构中的根接口,而Collections是一个工具类,它包含有各种有关集合操作的静态方法
7.
系统测试的时候
8.
垃圾回收机制,因为java不能手动清理内存,而内存不清理系统资源会被耗尽,所以要有GC
9.
两个,String pool一个"xyz",堆里面一个String 对象
10.
11 -11
11.
s1+1,s1自动转换成int类型,其结果返回一个int,所以报错
12.
sleep在睡眠一段时间后会自己醒来,而wait不能,它必须别的线程唤醒它(notify或者notifyAll)
13.
java有标签但是没goto
14.
数组没length()方法只有length这个属性,String有
15.
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
16.
用equals ==只判断内存地址是否一致,而equals判断是否引用的是同一个对象
17.
IndexOutOfBoundsException 数组越界
NullPointerException 空指针异常
SystemException 系统异常
18.
error表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况
19.
List,Set是 Map不是
20.
abstract class可以有实现方法interface不能
21.
都不能
22.
都可以
23.
start()
24.
可以
25.
不可以,String 是final
26.
不能
27.
会,先执行finally里的,再return
28.
2<<3
29.
如果不重写方法是不可以,但是重写了就难说
30.
引用
31.
byte可以,因为其可以自动转换成int类型,其他都不可以
32.
public class Singleton
{
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
你就开空头支票吧!我前天看了一个人总结的题,很不错的,可是忘记网址了!
1 final, finally, finalize
final 关键字,表明变量,方法的性质,不可修改
finally 表明这个方法一定会被执行。
finalize gc的一种垃圾回收方法。
2 都不能,因为没有类名!
3,4,5,6都有,搜一下。
7 测试的时候。
8 gc是垃圾收集器,因为java的对象销毁都是自动由gc完成的。
9 2个
10 s1 = s1 + 1其中s1 + 1的类型是int要显示的转化成short。
不写了,有事!
没提出的问题都有。。
第一,谈谈final, finally, finalize的区别。
final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize?方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: //www.frontfree.net/articles/services/view.ASP?id=704&page=1
注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象
第四,&和&&的区别。
&是位运算符。&&是布尔逻辑运算符。
第五,HashMap和Hashtable的区别。
都属于Map接口的类,实现了将惟一键映射到特定的值上。
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
Hashtable 类似于 HashMap,但是不允许 null 键和 null 值。它也比 HashMap 慢,因为它是同步的。
第六,Collection 和 Collections的区别。
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
Collection是个java.util下的接口,它是各种集合结构的父接口。
第七,什么时候用assert。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。如果表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:
assert(a > 0); // throws an AssertionError if a <= 0
断言可以有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该总是产生一个布尔值。
Expression2 可以是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认情况下是禁用的。要在编译时启用断言,需要使用 source 1.4 标记:
Javac -source 1.4 Test.java
要在运行时启用断言,可使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或者禁用断言。
可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。
第八,GC是什么? 为什么要有GC? (基础)。
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
第九,String s = new String("xyz");创建了几个String Object?
两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11;
第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
第十二,sleep() 和 wait() 有什么区别? 搞线程的最爱
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级,(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。
第十三,Java有没有goto?
Goto?java中的保留字,现在没有在java中使用。
第十四,数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
第十七,给我一个你最常见到的runtime exception。
ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException,
ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
第十八,error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
第十九,List, Set, Map是否继承自Collection接口?
List,Set是
Map不是。
第二十,abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
第二十三,启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
第二十四,构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
第二十五,是否可以继承String类?
String类是final类故不可以继承。
第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
有C背景的程序员特别喜欢问这种问题。
2 << 3
第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,有相同的hash code。
第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
第三十二,编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
第三十三 Hashtable和HashMap
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

阅读更多 >>>  java培训机构包就业,Java培训机构出来能找到好工作吗

网站数据信息

"java软件开发面试题,关于JAVA软件工程师的面试(java开发工程师面试)"浏览人数已经达到20次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:java软件开发面试题,关于JAVA软件工程师的面试(java开发工程师面试)的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!