java 面试指南_Java面试参考指南–第1部分

java 面试指南

JAVA面向对象的概念

Java in基于面向对象的概念,它允许更高级别的抽象以实际方式解决任何问题。

面向对象的方法将实际对象中的问题解决方案概念化,更易于在整个应用程序中重用。 例如椅子,风扇,狗,电脑等。

在Java中,类是定义同类对象的常见行为的蓝图,模板或原型。 实例是特定类的实现,并且类的所有实例都具有类似的属性,如类定义中所述。 例如,您可以定义一个名为House with room number的类作为属性,并创建实例,例如2个房间的房子,3个房间的房子等。

优点:

以下是面向对象软件开发的一些优点:

  • 维护成本较低,主要是因为它是模块化的。
  • 由于具有继承等功能,因此可以更快地进行开发,从而具有更好的代码可重用性。
  • 改进的代码可靠性和灵活性
  • 由于真实世界的建模而易于理解。
  • 在对象级别更好的抽象。
  • 从一个开发阶段过渡到另一阶段的过程中降低了复杂性。

OOPS有四个主要功能:

  • 封装形式
  • 遗产
  • 多态性
  • 抽象化

封装形式:

封装为其他对象提供了隐藏和暴露对象的契约,可以访问其他对象。 在Java中,我们使用私有访问修饰符来隐藏方法和变量以限制外部环境。 Java还提供了不同的访问修饰符,例如public,default,protected和private,它们用于隐藏不同级别的可见性,但最终目标是封装不需要更改的事物。 按照最佳实践,一个班级应该只有一个理由进行更改,而封装将现实带入实现“ 一个道理 ”的设计原则。

按照封装中的最佳实践,意味着要隐藏经常更改的内容,以避免破坏其他类。

好处:以下是封装的一些优点:  

  • 我们可以通过隐藏对象的属性来保护对象的内部状态。
  • 它通过防止对象以意外方式彼此交互来提高代码模块化。
  • 增加可用性
  • 维护特定对象的合同
  • 封装促进维护
  • 可以独立进行代码更改

多态性:

多态性是(在编程中)针对不同底层形式(数据类型)呈现相同接口的能力。 这意味着类在共享公共接口时具有不同的功能,并且可以通过传递特定的类引用来动态调用。

经典示例是Shape类以及可以从中继承的所有类(正方形,圆形,十二面体,不规则多边形,splat等)。

在此示例中,每个类都有其自己的Draw()函数,并且客户端代码可以简单地执行以下操作:

Shape shape=new Square ();Shape.area() to get the correct behavior for any shape.

多态的好处在于,使用不同类的代码不需要知道正在使用哪个类,因为它们都以相同的方式使用。

面向对象的编程语言用来实现运行时多态性的过程称为动态绑定。

注意 :多态性是在运行时根据用于调用它的对象选择更多专门方法的能力。 不涉及抽象类的情况下可能会发生多态。

优点:

  • 创建可重用代码:这意味着一旦创建,实现和测试了类,就可以轻松使用它而无需关心类中编写的内容。
  • 它提供了更通用且松散耦合的代码。
  • 编译时间要短得多,并且可以加快开发速度。
  • 动态绑定:
  • 相同的接口可用于创建具有不同实现的方法
  • 可以通过使用相同的方法签名替换完整的实现

方法重载以实现多态性:重载处理两种方法: 一个在父类中,另一个在子类中,并且具有相同的名称和签名。

通过覆盖,您可以针对不同的对象类型以不同的方式定义相同的操作

例如

while(it.hasNext()) {Shape s = (Shape) it.next();totalArea += s.area(dim); //polymorphic method call. Will call right object method}

多态性

方法重载或临时多态性或静态多态性:

重载处理同一个类中具有相同名称但具有不同方法签名的多个方法。 通过重载,您可以以不同的方式为不同的数据定义相同的操作。 有时它说是静态多态性,但实际上不是多态性。

方法重载无非就是拥有两个名称相同但参数列表不同的方法。 它与继承和多态性无关。 重载方法与重载方法不同。 [ Head First Java ]

Java中通过泛型进行的参数多态性:

在类声明中,字段名称可以与不同类型关联,而方法名称可以与不同参数和返回类型关联。 Java通过泛型支持参数多态性。

列表就是一个例子,它可以接受泛型所包含的数据类型。

List<String> list = new ArrayList<String>();

为什么我们不能在Java中覆盖静态方法?

覆盖取决于拥有类的实例。 多态性的关键是您可以对一个类进行子类化,并且实现那些子类的对象对于在超类中定义的相同方法(在子类中被重写)将具有不同的行为。 静态方法未与类的任何实例关联,因此该概念不适用。

影响Java设计的因素有两个。 一个是对性能的关注:Smalltalk对其速度太慢提出了很多批评(垃圾收集和多态调用是其中的一部分),Java的创建者决心避免这种情况。 另一个决定是Java的目标受众是C ++开发人员。 使静态方法按其实际方式工作对C ++程序员来说是很有益的,而且非常快,因为无需上层类层次结构即可确定要调用的方法,您可以直接进入类并调用指定的方法。 [堆栈溢出]

遗产:

它是在派生类中包含基类的行为(即方法)和状态(即变量),以便它们可以在该派生类中访问。 继承的主要优点是它提供了代码重用的正式机制,并且避免了重复

继承的类通过重用父行为并添加新功能来扩展应用程序的功能。 这将使设计紧密耦合,因为如果要更改超类,则必须知道子类的所有详细信息,以免破坏

它是软件可重用性的一种形式,其中从现有类(超类)创建新类(子类),从而增强功能,同时使用超类的某些属性。

因此,如果您有一个Parents类,那么您就有一个扩展Parent的Child类,Child继承了Person拥有的所有东西。

优点:

  • 提高可重用性
  • 在逻辑上建立“是”关系:例如,狗是动物
  • 模块化代码
  • 避免重复

退税:

  • 紧密耦合 :子类取决于父类的实现,这就是紧密耦合的原因。

抽象:

抽象意味着根据其接口和功能而不是其实现细节来开发类。 抽象类公开接口,不包括实际实现。 它将对象实现与其行为或实现分开。 通过隐藏无关的细节,抽象降低了复杂性。

优点:

  • 通过使用抽象,我们可以将可以分组的事物分离为另一种类型。
  • 可以将经常更改的属性和方法分组为一个单独的类型,以便不必对主要类型进行更改。 这为OOAD原则增加了力量-“代码应为扩展而开放,而为修改而封闭”。
  • 简化域模型的表示。

抽象与封装之间的区别

封装是用作抽象的一部分的策略。 封装是指对象的状态–对象封装其状态并将其从外部隐藏起来; 类的外部用户通过其方法与之交互,但无法直接访问类的状态。 因此,该类将与状态相关的实现细节抽象出来。

抽象是一个更通用的术语。 也可以通过(以及其他)子分类来实现。 例如,标准库中的List类是对一系列项目的抽象,这些项目按其位置索引。List的具体示例是ArrayList或LinkedList。 与列表进行交互的代码抽象出它正在使用哪种列表的详细信息[堆栈溢出]

如果不通过封装隐藏基础状态,那么通常不可能进行抽象–如果一个类公开其内部状态,则它无法更改其内部工作方式,因此无法抽象

什么是抽象类和抽象方法?

在设计中,您希望基类仅为其派生类提供一个接口。 这意味着,您不希望任何人实际实例化基类的对象。 您只需要对其进行上载(隐式上载,这将为您提供多态行为),以便可以使用其接口。 这可以通过使用abstract关键字使该类抽象化来实现。

对不实例化抽象类提供了一些限制,无论谁使用,都应实现抽象方法。 并提供多态性

抽象类可以包含抽象方法和具体方法。 在类中,如果一个方法被声明为抽象,则该类必须被声明为抽象。 但是,与此相反不一定是正确的。 如果将class声明为abstract class,则其中可能没有abstract方法。

如果一个方法不提供实际的实现,而仅提供方法签名,则称为抽象方法。 扩展抽象类的子类留有实际的实现。

抽象方法无法实例化; 另一个类只能扩展它。

什么时候使用抽象类?

抽象类使您可以定义一些默认行为,并强制子类提供任何特定行为。

例如:List是接口,而AbstractList提供List的默认行为,可以按原样使用或在子类(例如ArrayList)中完善它。

什么是接口?

interface关键字通过完全避免任何方法或函数的实现,使抽象类的这一概念更进一步。 您只能声明方法或函数,而不能提供实现。 实现接口的类应提供实际的实现。 接口是OO设计中非常有用且常用的方面,因为它提供了接口和实现分离,并使您能够

界面优势:

  1. 多重继承
  2. 松耦合定义的抽象操作作为单独的下划线实现可以是JDBC,JPA,JTA等
  3. 接口程序未实现
  4. 具有动态绑定的多态性 在不透露对象实际实现的情况下显示对象的编程接口。
  5. 抽象层:分离问题

接口和抽象类之间的区别:

  • 接口是要求类(无论要实现接口的人)以其在接口中定义的方式实现接口的契约。 它是带有方法声明的空外壳。
  • 抽象类定义一些常见的行为,并要求子类为该类定义不常见或特定的行为
  • 可以以任何可见性定义抽象类的方法和成员,而接口的所有方法都必须定义为public
  • 继承抽象类时,子类必须定义抽象方法,而一个接口可以扩展另一个接口,而不必定义方法
  • 子类只能扩展一个抽象(或任何其他)类,而一个接口可以扩展或一个类可以实现多个其他接口。
  • 子类可以定义具有相同或更少限制性可见性的抽象方法,而实现接口的类必须定义具有完全相同的可见性的方法
  • 接口不包含构造函数,而抽象类包含构造函数。
  • 在Java接口中声明的变量默认为final。 抽象类可能包含非最终变量
  • 默认情况下,Java接口的成员是公共的。 Java抽象类可以具有类成员的常用风格,例如private,protected等。

组成:

通过实现继承或组合可以实现代码的可重用性,但是用于代码重用的组合方法比继承提供了更强的封装性,因为对后端类的更改不必破坏任何仅依赖于前端类的代码。

组合是在类中实现具有关系的设计技术。 我们可以使用Java继承或对象组合进行代码重用

合成是关于表达对象之间的关系。 想想椅子的例子。 椅子有座位。 椅子有靠背。 椅子有一组腿。 短语“具有”表示椅子拥有或至少使用另一个对象的关系。 正是这种“有”的关系才是构成的基础

优点:

  • 控制可见度
  • 实现可以代替运行时间
  • 松耦合作为接口类不依赖于实现。

组成与继承之间的区别?

没有。 组成(有) 继承(是)
1个 提倡多态和代码重用 提倡多态和代码重用
2 在运行时完成时获取对象 在编译时动态获取对象
3 可以在运行时替换实现 可以在编译时替换实现
4 子类不依赖于父类,而是支持松散耦合(特别是在接口驱动下) 子类取决于父类的实现,这就是为什么紧密耦合的原因
5 在房屋设有浴室时使用。 说房子是浴室是不正确的 继承是单向的。 例如,房屋是建筑物。 但是建筑物不是房子

注意:不要仅使用继承来获得代码重用。 如果没有“存在”关系,则使用组合进行代码重用。

对象关系中组合和聚合之间的差异

聚合:聚合是一个类别属于一个集合的关联。 这是整体关系的一部分,其中一部分可以没有整体而存在。 这是较弱的关系。 无循环依赖性。 示例:订单和产品

组合:组合是一个类别属于一个集合的关联。 这是整体关系的一部分,其中没有整体就不可能存在一部分。 如果整体被删除,则所有部分都被删除。 这是更牢固的关系。 例如多边形和点,订单和订单详细信息  

参考文献:

  • http://stackoverflow.com/
  • http://en.wikipedia.org/
  • 有效的Java™

参考: Java面试参考指南–第1部分,来自我们的JCG合作伙伴 Nitin Kumar,位于Tech My Talk博客上。

翻译自: https://www.javacodegeeks.com/2014/02/java-interview-reference-guide-part-1.html

java 面试指南

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 提交的内存_Java使用内存映射实现大文件的上传

在处理大文件时&#xff0c;如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作&#xff0c;都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。package test;import java.io.BufferedInputStream;import java.io.FileIn…

【渝粤题库】陕西师范大学210006幼儿园课程作业(高起专)

《幼儿园课程》&#xff08;专科&#xff09;作业 一、单选题 1、活动课程是以&#xff08; &#xff09;为中心来组织学习内容的。 A 学科 B 问题 C 概念 D 儿童 2、&#xff08; &#xff09;指的是幼儿园教师根据实际情况灵活的将课程方案转化为生动的课程实践&#xff08;现…

创建一个安全的Spring REST API

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 “如果有用&#xff0c;它将被修改。” 这些智慧之言来自我的QA老师&#xff0c;他们…

【渝粤题库】陕西师范大学292071社会统计学作业(高起专)

《社会统计学》作业 一、单项选择题 1、从历史上看&#xff0c;在社会经济统计学的形成过程中&#xff0c;首先使用“统计学”这一术语的是&#xff08; &#xff09;。 A. 政治算术学派 B. 国势学派 C. 数理统计学派 D. 社会经济统计学派 2、社会统计的研究对象是&#xff08;…

java并发编程十 原子累加器和Unsafe

文章目录 原子累加器cas 锁原理之伪共享 UnsafeUnsafe CAS 操作 原子累加器 累加器性能比较 private static <T> void demo(Supplier<T> adderSupplier, Consumer<T> action) {T adder adderSupplier.get();long start System.nanoTime();List<Thread…

mysql select 返回列_SQL / mysql – selectdistinct / UNIQUE,但返回所有列?

你正在寻找一个组&#xff1a;select * from table group by field1偶尔可以写一个独特的声明&#xff1a;select distinct on field1 * from table然而&#xff0c;在大多数平台上&#xff0c;上述两者都不会起作用&#xff0c;因为其他列上的行为是未指定的。 (MySQL中的第一…

【渝粤题库】陕西师范大学300018 世界史(下)

《世界史&#xff08;下&#xff09;》作业 一、名词解释 1、三权分立 2、考迪罗 3、斯大林格勒会战 4、马歇尔计划 5、匈牙利事件 6、美第奇家族 7、明治维新 8、人文主义 9、古巴导弹危机 10、奴隶贸易 11、七年战争 12、大西洋宪章 13、重商主义 14、文官制度 15、《解放宣言…

【渝粤题库】陕西师范大学600002 物理化学(下) 作业(专升本)

《物理化学&#xff08;下&#xff09;》作业 一.选择题 1.已知298 K时&#xff0c;(NH4)2SO4.NaOH.Na2SO4的 分别为3.064 10-2. 2.451 10-2.2.598 10-2 Sm2 mol-1&#xff0c;则NH4OH的为 ( ) A. 1.474 10-2 B. 2.684 10-2 C. 2.949 10-2 D. 5.428 10-2 2.质量摩尔浓度…

java中的规范是什么意思_Java中的异常规范有什么好处?

我从C来到Java.在Java和C中,我们都可以指定异常.看起来像这样&#xff1a;void function_name() throw(Exception){...if (error){throw Exception("Error");}...}据我所知,在C中编写异常规范被认为是一种不好的做法.与C不同,在Java中,我们必须这样做.所以,我的问题是…

jpa中::::_项目学生:JPA标准查询

jpa中::::这是Project Student的一部分。 其他职位包括带有Jersey的Webservice Client&#xff0c;带有Jersey的 Webservice Server &#xff0c; 业务层 &#xff0c; 具有Spring Data的持久性 &#xff0c;分片集成测试数据和Webservice Integration 。 我们已经介绍了CRUD的…

【渝粤题库】陕西师范大学800011 专题地图制图

《专题地图制图》作业 一、名词解释 1、专题地图 2、范围法 3、绝对比率符号 4、电子地图 5、普通地图 6、质底法 7、分级统计图法 8、条件比率符号 9、视觉重力 10、定位图表法 11、连续比率符号 12、互补色 二、填空 1、专题地图按照内容的概括程度可以分为 、 、 。 2、专题…

国家开放大学2021春1098中学数学教学研究题目

教育 教育 试卷代号&#xff1a;1098 2021年春季学期期末统一考试 中学数学教学研究 试题 2021年7月 一、填空题&#xff08;本题共20分&#xff0c;每个空2分&#xff09; 1&#xff0e;布卢姆把认知领域的目标分为 、 、 、________4个等级目标。 2&#xff0e;中学数学教学…

java 注解scheduler_使用spring的@Scheduled注解执行定时任务,启动项目不输出警告

在applicationContext.xml中添加&#xff1a;xmlns:task"http://www.springframework.org/schema/task"xsi:schemaLocation"http://www.springframework.org/schema/taskhttp://www.springframework.org/schema/task/spring-task-4.0.xsd">java代码&…

具有ELK的APIGEE API网关日志管理(Elastic Search,Logstash和Kibana)

在本文中&#xff0c;我们将看到如何使用 Elastic Search &#xff0c; Logstash 和 Kibana 管理APIGEE API网关生成的日志 。 下图突出显示了日志数据如何流经ELK堆栈以进行数据可视化和监视。 作为API网关的一部分&#xff0c;我们将使用MessageLogging策略在代理流&#xf…

【渝粤题库】陕西师范大学209010 现代教育战略 作业 (专升本)

《现代教育战略》作业 一、辨析题 1.战术是战略的具体表现形式&#xff0c;二者是一般和特殊的关系。 2.政治品德素质是一个人对国家、民族的政治意识、立场&#xff0c;是一个人的道德好感&#xff0c;是不可教的。 3.创新的新就一般意义的新事物。 4.能力就是一个所拥有的知识…

【渝粤教育】电大中专混凝土结构题库作业 题库

1.题结构试验时&#xff0c;试件的就位型式最符合实际受力状态而应优先采用的是() A.反位试验 B.正位试验 C.卧位试验 D.异位试验 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;B 2.非破损检测技术可应用于混凝土、钢材和砖石砌体等各种材料组成的结构构件的结构试验…

java中PL层_安装pljava - RuralHunter的个人空间 - OSCHINA - 中文开源技术交流社区

pljava是pgsql跟java的桥接&#xff0c;安装以后就可以在pgsql里面调用java了。这里记录一下我在ubuntu server下安装的过程1. 下载源码编译很简单&#xff0c;下载&#xff0c;解压&#xff0c;设置一下JAVA_HOME(如果没设的话)&#xff0c;然后make2. 把生成的build目录里面的…

【渝粤题库】广东开放大学 民事诉讼法学 形成性考核

选择题 题目&#xff1a;在仲裁裁决具有可撤销的法定理由时&#xff0c;仲裁当事人可以向法院申请撤销该仲裁裁决&#xff0c;法院认为当事人的申请具有法定撤销理由的&#xff0c;可以&#xff08; &#xff09;仲裁裁决。 答案&#xff1a; A、调解 B、裁定撤销 C、判决撤销…

java依赖注入_Java依赖注入选项

java依赖注入我想花一些时间来总结一些流行的Java依赖注入&#xff08;DI&#xff09;框架。 这是可用功能的高级概述。 首先&#xff0c;什么是依赖注入&#xff1f; “依赖注入是一种软件设计模式&#xff0c;可以删除硬编码的依赖&#xff0c;并可以在运行时或编译时更改它…

【渝粤教育】电大中专跨境电子商务理论与实务 (19)作业 题库

1.亚马逊的运营模式是M2C模式:平台招商。该说法&#xff08; &#xff09; A.错误 B.正确 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.B2C跨境电商或平台的代表企业有敦煌网&#xff0e;阿里巴巴国际站。该说法&#xff08; &#xff09; A.错误 B.正确 …