java和c++复试面试题

Java与C++的区别:

(1)JAVA中没有显式的指针,但是C++中有

(2)JAVA只能支持单继承,但是C++支持多继承(一个类可以继承多个类)

(3)JAVA中有自动的垃圾回收机制,用完一个内存之后无需自己释放,但是C++需要自己delete或者free,所以可能出现内存泄漏

面向对象的三个/四个特征?

封装,继承,多态,抽象。

什么是类?

类是对象的模子,具有相同属性和方法的一组对象的集合,类是不存在的,是用来描述对象信息

什么是多态?

多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。多态的作用:消除类型之间的耦合关系。

多态的好处

1.允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。即父类型的引用指向子类型的对象。主要有以下优点:

2.可替换性:多态对已存在代码具有可替换性

3.可扩充性:增加新的子类不影响已经存在的类结构

4.更加灵活

面向对象和面向过程的区别?

面向过程

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源。比如,单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是最重要的因素。

缺点:没有面向对象易维护、易复用、易扩展。

面向对象

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。

缺点:性能比面向过程低。

C++的特点是什么?

封装,继承,多态。支持面向对象和面向过程的开发。

C++的异常处理机制?

抛出异常和捕捉异常进行处理。(实际开发)

c和c++,java的区别?

c是纯过程,c++是对象加过程,java是纯面向对象的

Java语言有哪些特点

1、简单易学、有丰富的类库

2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)

3、与平台无关性(JVM是Java跨平台使用的根本)

4、健壮和安全的语言

5、支持多线程

6、面向网络的语言

JDKJRE、JVM 有什么区别?

JDK:(Java Development Kit)即java的开发与运行环境,他除了包含完整的JRE之外,还包含了供开发者使用的工具包。

JRE:(Java Runtime Environment)即Java运行环境,非开发者只需要安装 JRE来运行程序, 它包含java运行的所需的类库+JVM(java虚拟机)。

JVM: (Java Virtual Machine) 即Java虚拟机, 当我们运行一个程序时,JVM 负责将字节码转换为特定机器代码,JVM 提供了内存管理/垃圾回收和安全机制等。这种独立于硬件和操作系统,正是 java 程序可以一次编写多处执行的原因。

三者的关系

作为程序员,就必须安装JDK,因为其中包含Java开发工具包,同时也包含了JRE。

作为使用者,运行已经开发好的Java程序,只需要安装JRE。

JVM和JRE的关系:JRE包含了JVM,JVM是运行Java程序的核心虚拟机,同时也包含了Java程序所需的环境支持

总结:JDK>JRE>JVM

字符流与字节流的区别?

1、字节流操作的基本单元字节字符流操作的基本单元Unicode码元

2、字节流默认不使用缓冲区;字符流使用缓冲区。

3、字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;

字符流通常处理文本数据,它支持写入及读取Unicode码元。

普通类和抽象类有哪些区别?(java)

抽象类不能被实例化;

抽象类可以有抽象方法,只需申明,无须实现;

有抽象方法的类一定是抽象类;

抽象类的子类必须实现抽象类中的所有抽象方法,否则子类仍然是抽象类;

抽象方法不能声明为静态、不能被static、final修饰。

接口和抽象类有什么区别?(java)

(1)接口

接口使用interface修饰

接口不能实例化

类可以实现多个接口

①java8之前,接口中的方法都是抽象方法,省略了public abstract。②java8之后;接口中可以定义静态方法,静态方法必须有方法体,普通方法没有方法体,需要被实现;

(2)抽象类

抽象类使用abstract修饰

抽象类不能被实例化

抽象类只能单继承

抽象类中可以包含抽象方法和非抽象方法,非抽象方法需要有方法体

如果一个类继承了抽象类,①如果实现了所有的抽象方法,子类可以不是抽象类;②如果没有实现所有的抽象方法,子类仍然是抽象类。

Java的内存划分

Java内存划分:栈,堆,代码区,数据区
栈:主要存储变量(局部变量或基本数据类型的变量),内容使用完毕立即清除(不会对内容赋初值)
堆:主要存储对象,使用完毕后在某个时间进行回收(对存储的内容进行赋初值)
代码区:存放类和方法
数据区:常量池和静态变量

访问权限java

1.public 公共的,所有人都可访问

2.Private 私有的,只能通过类中成员函数访问,类外不允许访问。

3.Protect 保护的,这种权限是为继承而设计的,保护所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问。

4.Default 包访问权限,在自己包内可以随意访问。

final关键字及其作用

1.被final修饰的变量不可以被改变,又被称为常量(修饰字符时,自负的地址不能改变)
2.被final修饰的方法不可以被重写
3.被final修饰的类不可以被继承
总结就是不可变

C++和JAVA

解释对编译

Java 是一种解释性(或者说半解释半编译)语言,意味着其在执行时会被 翻译 为二进制形式,也就是 java跑得时候 必须有人(jvm)去解释它 (现在的 Java 语言,其执行方式已经不仅仅是解释执行方式 了,即时编译器(JITC just-in-time compiler )技术和原型编译技术的出现大大提高了 JAVA 的运行效
率)。 C++ 则是编译语言,意味着程序只能在特定操作系统上编译并在特定系统上运行,也就是说 C++一步到位成机器语言的。

指针

Java 没有指针的概念。 C/C++ 中,指针操作内存时,经常会出现错误。而在 Java 中是没有指针这一概 念的,因此也有效地防止了一系列由指针引起的操作层失误(如指针悬空所造成的系统崩溃),更有利于 Java 程序的安全。

内存安全

Java 是一种内存安全型语言,意味着大家可以为给定数组分配任意参数,即使超出范围也只会返回错误 提示。C++ 更为灵活,但代价是一旦分配的参数超出资源范围,则会引起错误甚至严重溃。

多重继承

Java 不支持多重继承。 多重继承,它允许多父类派生一个子类。也就是说,一个类允许继承多个父类。
尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。所以 Java 不支持多重继承,但允许一个类实现多个接口。可见,Java 既保留了 C++ 多重继承的功能,又避免了C++的许多缺陷。

数据类型

Java 是完全面向对象的语言 ,所有方法和数据都必须是 的一部分。除了 基本数据类型 之外,其余类型的数据都作为对象型数据 。例如,对象型数据包括字符串和数组。类将数据和方法结合起来,把它们封装在其中,这样每个对象都可实现具有自己特点的行为。而 C++ 将函数和变量定义为全局的,然后再来调用这些函数和变量,从而增加了程序的负担。此外,Java 还取消了 C/C++ 中的结构和联合,使编译程序更加简洁

自动内存管理

Java 自动进行无用内存回收操作,不再需要程序员进行手动删除。 Java 程序中所有的对象都是用 new 操作符 建立在堆栈上的,这个操作符类似于 C++ “new” 操作符。当 Java 中一个对象不再被用到时,无 须使用内存回收器,只需要给它添加删除标签,无用内存的回收器便利用空闲时间在后台运行。而 C++中必须由程序释放内存资源,这就增加了程序员的负担。

操作符重载

Java 不支持操作符重载 ,操作符重载被认为是 C++ 的突出特征。操作符重载,就是把操作符 (
'+ - * /' 这些运算符 ) 赋于新的意义, 来完成更为细致具体的运算等功能。要实现操作符重载,就 要使用操作符重载函数,而运用函数就肯定会存在各种限制条件以及特殊情况。特殊情况就需特殊处 理,因此操作符重载还是比较繁琐的。Java 语言是走 简洁风 的,因此为了保持 Java 语言的简洁性,便 毅然抛弃了操作符重载这一功能,但是为了避免舍本逐末的情况,Java 语言还是可以通过 来实现操作符重载所具有的功能的。

预处理功能

C/C++ 在编译过程中都有一个预编译阶段,即预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。Java 允许预处理,但不支持预处理器功能,因为 Java 没有预处理器,所以为了实现预处理,它提供了引入语句(import ),但它与 C++ 预处理器的功能类似

缺省参数函数

Java 不支持缺省参数函数,而 C++ 支持 。 C 语言中,代码组织在函数中,函数可以访问程序的全局变量。后来C++ 增加了类 ,提供了类算法,该算法是与类相连的函数, C++ 类方法与 Java 类方法十分相似。由于 C++ 仍然支持 C 语言,所以 C++ 程序中仍然可以使用 C 的函数,结果导致函数和方法混合使用,使得 C++ 程序混乱,而 Java 没有函数 ( 准确说叫方法 ) 作为一个比 C++ 更纯的面向对象的语言,Java 强迫开发人员把所有 例行程序包括在类中 。事实上,用方法实现例行程序可激励开发人员更好地组织编码。

字符串

C C++ 不支持字符串变量 ,在 C C++ 程序中使用 “Null” 终止符 代表字符串的结束。在 Java 中字符 串是用 类对象 ** String StringBuffffer )来实现的,在整个系统中建立字符串和访问字符串元素的方 法是一致的。Java 字符串类是作为 Java 语言的一部分定义的,而不是作为外加的延伸部分。此外,Java 还可以对字符串用 “+” 进行连接操作。

goto 语句

可怕 goto 语句是 C C++ 遗物 ,它是该语言技术上的合法部分。 goto 语句也称为无条件转移语句,通常与条件语句配合使用,用来实现条件转移, 构成循环,跳出循环体等功能。但是,在结构化程序设计中一般不主张使用goto 语句, 以免造成程序流程的混乱,使程序的可读性变差 , 增加程序调试的难度。 Java 不提供 goto 语句,虽然 Java 指定 goto 作为关键字,但不支持它的使用,这使程序更简 洁易读。

类型转换

C C++ 中,有时会出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在 C++ 中可将一个浮点值赋予整型变量,并去掉其尾数。Java 不支持 C++ 中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。

应用场景

java侧重于大型企业级应用开发,C++ 侧重于底层应用开发 Java Android 开发领域的王者,因此移动开发者无疑应该选择它作为项目基础。另外,Java 也常见于 Web 及桌面应用乃至服务器端应用。
C++更接近机器语言,因此其软件运行速度更快且能够直接与计算机内存、磁盘、 CPU 或者其它设备进行协作。另外,C++ 也能为游戏提供良好的运行性能。
  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值