首页 > 学院 > 开发设计 > 正文

A电面_Andriod_Dian

2019-11-06 06:41:15
字体:
来源:转载
供稿:网友

1、C++和java的特点和区别

答:C++和JAVA都是面向对象语言,基于面向对象的思想,可重用性高。

JAVAC++
解释性语言所有代码都会翻译成统一的、与系统无关的bytecode,然后放到JVM上运行编译型语言代码要先通过编译器转换成与系统相关的中间代码,然后才能运行
定义一种公用静态的变量完成定义全局变量的功能可定义全局变量和全局函数
(接口)支持多重继承
自动回收(GC)程序员申请和释放内存
Java不支持系统调用,无法与操作系统进行交互。这也是为何Java中只有线程(Thread)概念而没有进程(PRocess)概念。可以调用系统中的指令,如dos命令
提供对注释文档的内建支持no
有很多标准库一般厂家提供库
no支持运算符重载
no支持预处理
必须显示的强转自动强制类型转换
没有指针的概念支持指针
不包含结构和联合,所有内容都封装在类里面结构和联合的所有成员均为公用,带来了安全性问题
纯面向对象语言,所有的代码必须在类中实现兼具面向对象和面向过程

2、C++和JAVA内存管理的区别

Java中对内存的分配是动态的,采用面向对象的机制,用运算符new为每个对象分配内存空间。然而Java无法对内存进行控制,也可以说实际内存会随着程序运行情况而改变。在程序运行中,每个Java系统自动对内存进行扫描,对长期不用的空间作为“垃圾”进行收集(采用Gabbage Collection机制),使得系统资源得到更充分地利用。按照这种机制,程序员不必关注内存管理问题,使得Java程序得编写变得简单明了,并且避免了由于内存管理方面的差错而导致系统出问题。

C++语言则是通过运算符new()和delete()来手动分配和释放内存。在C和C++的这种机制中,程序员必须非常仔细地处理内存的使用问题。若是对长期不用的或是不再使用的内存不释放,则会浪费系统资源。3、C++和JAVA各自多态的实现

多态性其实就是方法调用的机制,也就是说当在编译时无法确定一个对象的实际类型时,应当能够在运行时基于对象的实际类型来决定调用的具体方法(动态绑定)。

1、单继承情况下,两者实现在本质上相同,都是使用方法表,通过方法表的偏移量来调用具体的方法。

(具体而言:JAVA的某个方法被调用时,JVM首先要查找相应的常量池,得到方法的符号引用,并查找调用类的方法表以确定该方法的直接引用,最后才真正调用该方法。C++为所有的虚函数建立虚表,虚表里记录了函数指针。在编译时,会对对象插入一个变量vptr指向类的方法表。导致在运行时,传入不同的虚表,就可以执行不同的函数。)

2、Java 的方法表中包含 Java 类所定义的所有实例方法,而 C++ 的方法表则只包含需要动态绑定的方法 (virtual 修饰的方法 )。这样,在 Java 下所有的实例方法都要通过方法表调用,而 C++ 中的非虚方法则是静态绑定的。

3、任意 Java 对象只 “指向”一个方法表,而 C++ 在多重继承下则可能指向多个方法表,编译器保证这多个方法表的正确初始化。

4、多层继承中 C++ 面临的主要问题是 this 指针的调整,设计更精巧更复杂;而 Java 在接口调用时完全采用搜索的方式,实现更直观,但调用效率比实例方法调用要慢许多。

可以看到,两者之间既有相似之处,也有不同的地方。对于单继承的实现本质上是一样的,但也有细微的差别(如方法表);差别最大的是对于多重继承(多重接口)的支持。实际上,由于 C++ 是静态编译型语言,在编译时就可以确定要调用的方法在方法表的位置,没有JVM搜索常量池的过程。它无法像 Java 那样,在运行时刻动态的“查找”所要调用的方法。

根源:Java中所有的方法都是虚的,子类同签名方法无条件隐式重写(无数人吐槽过这一设定),除非父类声明final。

4、反射机制

1、是什么:反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;实现运行时对类进行装载。这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2、干嘛的:在运行时,判断对象所属的类&&构造任意类的对象&&判断类的成员变量和方法&&调用任意对象的方法

3、作用:在运行时动态的创建类的对象(工厂模式)

对于普通的工厂模式当我们在添加一个子类的时候,就需要对应的修改工厂类。 当我们添加很多的子类的时候,会很麻烦。 * Java 工厂模式可以参考 * http://baike.xsoftlab.net/view/java-factory-pattern  * 现在我们利用反射机制实现工厂模式,可以在不修改工厂类的情况下添加任意多个子类。 *   * 但是有一点仍然很麻烦,就是需要知道完整的包名和类名,这里可以使用properties配置文件来完成。  * java 读取 properties 配置文件 的方法可以参考 * http://baike.xsoftlab.net/view/java-read-the-properties-configuration-file

4、方法:反射机制是如何获得class类的?

1)class.forName("类的路径")

2)类名.class

3)实例.getClass()

5、TCP和UDP的区别

答:TCP就像打电话,UDP就像寄信。

TCP是传输控制协议,提供的是面向连接,可靠的字节流服务。

UDP是用户数据包协议,是一个简单的面向数据报的运输层协议。

TCP提供可靠的服务,当客户和服务器彼此交换数据前,双方必须先建立一个TCP连接才能传数据。TCP提供超时重发、丢弃重复数据、检验数据、流量控制等功能,保证数据从一端传到另一端。

UDP不提供可靠性,它只是把应用程序传给ip层的数据发送出去,并不保证到达。UDP没有超时重发机制,也不需要提前建立连接,故而传输速度很快。6、什么是三次握手和四次挥手

三次握手:A:“我想给你发数据可以不?” B:“可以,啥时候发?” A:“数据包,走你~”

第一次握手:建立连接时,客户端发送SYN包到服务器,进入SYN_SEND状态,等待服务器确认。第二次握手:服务器收到SYN包,确认客户的SYN(ack=j+1),自己也发送一个SYN包(syn=k),进入SYN_RECV状态。第三次握手:客户端收到ack+syn包,向服务器发送确认包(ack=k+1),发完之后,客户端和服务器都进入establelished状态,完成3次握手。

四次挥手:A:“我已无话可说(FIN=1),分手吧!” B:“你不爱我了(ACK=1)”  B:“我还不稀罕你嘞!(FIN=1)” A:“拜拜就拜拜,下一个更乖。(ACK=1)”1 当主机A完成数据传输后,将控制位FIN置1,提出停止TCP连接的请求2  主机B收到FIN后对其作出响应,确认这一方向上的TCP连接将关闭,将ACK置13 由B 端再提出反方向的关闭请求,将FIN置14 主机A对主机B的请求进行确认,将ACK置1,双方向的关闭结束.

7、windows和linux文件系统的区别

答:文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;说白了就是操作系统或软件对文件在存储设备上的一种组织、管理方式。Linux文件系统兼容POSIX规范的UNIX权限。一般使用UID和GID模式来设置权限,用户只能访问一个Group下的文件。Windows部分兼容POSIX,用NTFS(new techology file system)改进了FAT。 NTFS权限定义复杂,多用一个变长的安全描述符来定义多组属性。Linux只有一个单独的顶级目录,root。 通过加载的方法把所有分区都放置在根下目录里。使用 /Windows在启动时检测不同的分区,并赋予分区一个字母。 使用 /Windows的目录结构属于分区,而linux分区加载于目录结构。windows的文件名不区分大小写,linux要求最好创建时用小写字母。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表