目录
-
-
- 常考题
-
-
- 1、抽象类和接口的区别
- 2、什么时候用抽象类或接口
- 3、Java跨平台怎么实现
- 4、软件工程的各阶段及需求分析的任务和作用
- 5、进程与线程
- 6、主存的分类
- 7、SRAM和DRAM的区别
- 8、多线程通信如何保证
- 9、c++静态成员的作用?你写过的代码怎么使用的?
- 10、c++构造方法的具体过程?
- 11、c/s架构和b/s架构的区别?微信和QQ哪个是B/S架构,哪个是C/S架构,为什么?
- 12、中断的具体过程
- 13、以太网和无线网介质访问控制协议
- 14、传输层的作用
- 15、传输层与网络层的区别
- 16、以太网最小帧长的影响因素
- 17、数据库中的事务了解吗?事务的四大特性?
- 18、如何理解数据库的范式?
- 19、什么叫视图?游标是什么?
- 20、视图的优缺点
- 21、谈谈对TCP/IP协议的理解
- 22、TCP的三次握手和四次挥手
- 23、TCP和UDP的区别
- 24、拥塞控制和流量控制都是什么,两者的区别?
- 26、操作系统的特点?
- 27、操作系统发展过程?
- 28、死锁
- 29、死锁与饥饿的区别?
- 30、面向对象的三个要素(基本特征)?
- 31、软件工程的主要模型?
-
- 前沿知识
-
常考题
1、抽象类和接口的区别
①抽象类是用来捕捉子类的通用特性的
接口是抽象方法的集合
②抽象类不能被实例化,只能被用作子类的超类,是被用来创建继承层级里子类的模板
接口只是一种形式,接口自身不能做任何事情
③抽象类可以有默认的方法实现,子类使用extends关键字来继承抽象类,如果子类不是抽象类的话,它需要提供抽象类中所有声明方法的实现
接口完全是抽象的,它根本不存在方法的实现,子类使用关键字implements来实现接口,它需要提供接口中所有声明方法的实现
④抽象类可以有构造器,除了不能实例化抽象类之外,它和普通Java类没有任何区别,抽象方法可以有public、protected和default这些修饰符
接口不能有构造器,是完全不同的类型,接口方法默认修饰符是public,不可以使用其它修饰符
2、什么时候用抽象类或接口
如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,即接口中的方法必须全部是抽象方法(即只有方法标识符,而没有方法体)。
PS:抽象方法只能存在于抽象类或接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类
抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。
3、Java跨平台怎么实现
跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)。
JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种.class文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。
而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一“中间层”就能在不同平台上运行,真正实现了“一次编译,到处运行”的目的。
PS:编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。
PS:跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。
4、软件工程的各阶段及需求分析的任务和作用
五个阶段:
①问题定义:弄清“用户需要计算机解决什么样的问题”,提出“系统目标和范围的说明”,
②可行性分析:把待开发系统的目标以明确的语言描述出来,并从经济、技术、法律等多个方面进行可行性分析;
③需求分析:弄清用户对软件系统的全部需求,编写需求规格说明书和初步的用户手册,提交评审;
④开发阶段:设计、实现(完成源程序的编码)、测试;
⑤维护:改正性维护(由于开发测试的不彻底、不完全),适应性维护(适应环境变化),完善性维护(使用过程中提出的一些建设性意见),预防性维护(改善软件系统的可维护性和可靠性)。
软件需求分析的任务:
深入描述软件的功能和性能、确定软件设计的约束和软件同其它系统元素的接口细节、定义软件的其它有效性需求,总之,需求分析的任务就是借助于当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的 “做什么”的问题。
5、进程与线程
进程:进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程一般由程序、数据集合和进程控制块三部分组成。
程序用于描述进程要完成的功能,是控制进程执行的指令集;
数据集合是程序在执行时所需要的数据和工作区;
程序控制块包含进程的描述信息和控制信息是进程存在的唯一标志。
线程:线程是程序执行中一个单一的顺序控制流程,是程序执行流的最小单元,是处理器调度和分派的基本单位。一个进程可以有一个或多个线程,各个线程之间共享程序的内存空间(也就是所在进程的内存空间)。一个标准的线程由线程ID,当前指令指针PC,寄存器和堆栈组成。而进程由内存空间(代码,数据,进程空间,打开的文件)和一个或多个线程组成。
进程具有的特征:
动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
并发性:任何进程都可以同其他进行一起并发执行;
独立性:进程是系统进行资源分配和调度的一个独立单位;
结构性:进程由程序,数据和进程控制块三部分组成
进程与线程的区别:
①线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
②CPU切换一个线程比切换进程要快得多;
③进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;
④多进程程序更安全,生命力更强,一个进程死掉不会对另一个进程造成影响(源于有独立的地址空间),多线程程序更不易维护,一个线程死掉整个进程就死掉(因为共享地址空间);
6、主存的分类
随机存取存储器(Random Access Memory,RAM):是与CPU直接交换数据的内部存储器。可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)
只读存储器(Read Only Memory,ROM):ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,断电后所存数据也不会丢失
7、SRAM和DRAM的区别
SRAM(静态随机存储器):不需要刷新电路就能够保存数据,所以具有静止存取数据的作用。SRAM的存取速度快,但集成度低,功耗较大,所以一般用来组成高速缓冲存储器。
DRAM(动态随机存储器):需要不停地刷新电路,否则内部的数据将会消失,而且不停刷新电路的功耗是很高的。DRAM具有容易集成、位价低、容量大和功耗低等优点,但DRAM的存取速度比SRAM的慢,一般用来组成大容量主存系统
8、多线程通信如何保证
多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。
wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。这三个方法最终调用的都是JVM级的native方法。随着JVM运行平台的不同可能有些许差异。
①如果对象调用了wait方法就会使持有该对象的线程把该对象的控制权交出去,然后处于等待状态。
②如果对象调用了notify方法就会通知某个正在等待这个对象的控制权的线程可以继续运行。
③如果对象调用了notifyAll方法就会通知所有等待这个对象控制权的线程继续运行。
9、c++静态成员的作用?你写过的代码怎么使用的?
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。
PS:①静态成员函数中不能调用非静态成员。
②非静态成员函数中可以调用静态成员(因为静态成员属于类本身,在类的对象产生之前就已经存在)
③静态成员变量使用前必须先初始化
10、c++构造方法的具体过程?
一个类必须有构造函数,要么用户自己定义&#x