目录
- 常考题
- 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、什么是机器学习?讲讲具体的算法。
- 2、你认为你本科学的数学有哪些会用到机器学习中?
- 3、什么是大数据?
- 4、什么是数据挖掘?
- 5、数据挖掘和机器学习之间有什么联系?
- 6、什么是云计算?
- 7、什么是深度学习?
- 8、你对人工智能有什么了解?强人工智能可能实现吗?
- 9、什么是神经网络?
- 10、用过哪些搜索引擎,他们的区别是什么
- 11、什么是嵌入式系统
- 12、大数据发展的瓶颈?
- 13、大数据的特点
常考题
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++构造方法的具体过程?
一个类必须有构造函数,要么用户自己定义,要么编译器自动生成;
如果用户自己没有定义构造函数,那么编译器会自动生成一个默认的构造函数,只是这个构造函数的函数体是空的,没有形参,也不执行任何操作,
构造函数必须是public 属性的,否则创建对象时无法调用。当然设置为private,protected 属性也不会报错,但是没有意义。
构造函数没有返回值,因为没有变量来接收,这意味着,构造函数函数名前面不能出现返回值类型,void 也不行,函数体内也不能有return。
11、c/s架构和b/s架构的区别?微信和QQ哪个是B/S架构,哪个是C/S架构,为什么?
C/S架构(即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示与业务逻辑,第二层是通过网络结合了数据库服务器。简单的说就是第一层是用户表示层,第二层是数据库层。客户端和服务器直接相连。
C/S架构的优点
客户端和服务器直接相连。点对点的连接方式更安全,可以直接操作本地文本,比较方便。
客户端可以处理一些逻辑事务。可以进行数据处理和数据存储,提供一定的帮助。
客户端直接操作界面。
C/S架构的缺点
C/S架构适用于局域网,对网速的要求比较高。
客户端界面缺乏通用性,且当业务更改时就需要更改界面,重新编写。
随着用户数量的增多,会出现通信拥堵、服务器响应速度慢等情况
系统的维护也比较麻烦。
C/S架构的应用:从办公的OFFICE,WPS,WINRAR到杀毒软件如金山,瑞金再到我们的娱乐软件,如播放器,QQ,微信等。
B/S架构(浏览器/服务器结构)C/S架构的一种改进,可以说属于三层C/S架构。
第一层是浏览器(即客户端)只有简单的输入输出功能,处理极少部分的事务逻辑。由于客户不需要安装客户端,只要有浏览器就能上网浏览,所以它面向的是大范围的用户,所以界面设计得比较简单,通用。
第二层是WEB服务器,扮演着信息传送的角色。当用户想要访问数据库时,就会首先向WEB服务器发送请求,WEB服务器统一请求后会向数据库服务器发送访问数据库的请求,这个请求是以SQL语句实现的。
第三层是数据库服务器,它存放着大量的数据。当数据库服务器收到了WEB服务器的请求后,会对SQL语句进行处理,并将返回的结果发送给WEB服务器,接下来,WEB服务器将收到的数据结果转换为HTML文本形式发送给浏览器。
B/S架构的优点
浏览器和数据库服务器采用多对多的方式连接。因此适合在广域网里实现巨大的互联网,甚至是全球网,有着很强大的信息共享性。
浏览器只处理一些简单的逻辑事务,负担小。
数据都集中存放在数据库服务器,所以不存在数据不一致现象。
随着服务器负载的增加,可以平滑地增加服务器的个数并建立集群服务器系统,然后在各个服务器之间做负载均衡。
B/S建立在广域网上,所以需要的网速要求不高。
不需要安装客户端,只要能连上网,就能随时随地的浏览页面。
能有效地保护数据平台和管理访问权限,确保服务器数据库的数据安全。
B/S架构的缺点
服务器承担着重要的责任,数据负荷较重。一旦发生服务器“崩溃”等问题,后果不堪设想。
页面需要不断地动态刷新,当用户增多时,网速会变慢。
B/S架构的应用
比如WEBQQ,从WEBQQ名称中的WEB就不难看出它属于B/S架构,是一种浏览器服务器结构。事实上也是如此,因为WEBQQ根本不需要安装客户端,只需要有浏览器就可以进行聊天交互了。
C/S架构和B/S架构的区别:
建立基础不同:C/S是建立在局域网的基础上的;而B/S是建立在广域网的基础上的。
硬件环境不同:C/S一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务;B/S建立在广域网之上的,不必有专门的网络硬件环境。
对安全要求不同:C/S一般面向相对固定的用户群,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S 结构适宜,可以通过B/S发布部分可公开信息;B/S建立在广域网之上,对安全的控制能力相对弱,面向是不可知的用户群。
对程序架构不同:C/S 程序更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑;B/S对安全以及访问速度的多重考虑,建立在需要更加优化的基础之上。
系统维护不同:C/S 程序由于整体性,必须整体考察 处理出现的问题以及系统升级,升级难,可能是再做一个全新的系统;B/S构件组成,方面构件个别的更换,实现系统的无缝升级。系统维护开销减到最小,用户从网上自己下载安装就可以实现升级。
12、中断的具体过程
13、以太网和无线网介质访问控制协议
以太网(CSMA/CD)
无线网(CSMA/CA)
14、传输层的作用
- 传输层提供应用进程之间的逻辑通信(即端到端的通信),网络层提供的是主机之间的逻辑通信。从网络层来说,通信的双方是两台主机, IP 数据报的首部给出了这两台主机的IP 地址。但“两台主机之间的通信”实际上是两台主机中的应用进程之间的通信,应用进程之间的通信又称端到端的逻辑通信。
- 复用和分用。复用是指发送方不同的应用进程都可使用同一个传输层协议传送数据;分用是指接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程。
- 传输层还要对收到的报文进行差错检测(首部和数据部分)。而网络层只检查IP 数据报的首部,不检验数据部分是否出错。
- 提供两种不同的传输协议,即面向连接的TCP 和无连接的UDP 。而网络层无法同时实现两种协议(即在网络层要么只提供面向连接的服务,如虚电路;要么只提供无连接服务,如数据报,而不可能在网络层同时存在这两种方式)。
15、传输层与网络层的区别
在协议栈中,传输层位于网络层之上,传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点(点到点)
传输层则负责将数据可靠地传送到相应的端口(端到端)
16、以太网最小帧长的影响因素
以太网是无连接的,不可靠的服务,采用尽力传输的机制。以太网是不可靠的,这意味着它并不知道对方有没有收到自己发出的数据包,但如果他发出的数据包发生错误,他会进行重传。以太网的错误主要是发生碰撞,碰撞是指两台机器同时监听到网络是空闲的,同时发送数据,就会发生碰撞。
17、数据库中的事务了解吗?事务的四大特性?
作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。
简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。
数据库事务的四大特性(ACID):
(1) 原子性(Atomicity):对数据修改操作要么全部执行,要么完全不执行。
(2)一致性(Consistency) :事务执行前后数据库都必须处于一致性状态。
(3)分离性(Isolation):并发的事务是相互隔离的。即一个事务内部的操作及正在操作的数据必须封锁起来,不被其它企图进行修改的事务看到。假如并发交叉执行的事务没有任何控制,操纵相同的共享对象的多个并发事务的执行可能引起异常情况。
(4)持久性(Durability):当系统或介质发生故障时,确保已提交事务的更新不能丢失。即一旦一个事务提交,DBM保证它对数据库中数据的改变应该是永久性的,即对已提交事务的更新能恢复。持久性通过数据库备份和恢复来保证。
18、如何理解数据库的范式?
1NF:关系模式R的所有属性都是不可再分的基本数据项;
PS:1NF是对关系模式的最基本的要求
不满足1NF的数据库模式不能称为关系数据库
2NF: 符合1NF且非主属性完全依赖于码(即消除部分依赖);
3NF:符合2NF且消除传递依赖;
满足BCNF的关系模式的条件:①所有非主属性对每一个码都是完全函数依赖;②所有的主属性对每一个不包含它的码,也是完全函数依赖;③没有任何属性完全函数依赖于非码的任何一组属性
PS:若一个关系达到了第三范式,并且它只有一个候选码,或者它的每个候选码都是单属性,则该关系自然达到BC范式
19、什么叫视图?游标是什么?
视图是通过一个查询语句的查询结果来定义的。创建视图可在一张表上,也可以在多个表上创建。SQL-92只允许对基于一张表上的视图进行插入、修改和删除。对定义在多个基表之上的视图,不允许进行更新操作。
游标:使用游标的一个主要的原因就是把集合操作转换成单个记录处理方式。用SQL语言从数据库中检索数据后,结果放在内存的一块区域中,且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL server内逐行地访问这些记录,按照用户自己的意愿来显示和处理这些记录。
20、视图的优缺点
优点:
①使用视图,可以定制用户数据,聚焦特定的数据;
②使用视图,可以简化数据操作;
③使用视图,基表中的数据就有了一定的安全性;
PS:因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图,不可以随意的更改和删除,可以保证数据的安全性。
④可以合并分离的数据,创建分区视图;
PS:随着社会的发展,公司的业务量的不断的扩大,一个大公司,下属都设有很多的分公司,为了管理方便,我们需要统一表的结构,定期查看各公司业务情况,而分别看各个公司的数据很不方便,没有很好的可比性,如果将这些数据合并为一个表格里,就方便多啦,这时我们就可以使用union关键字,将各分公司的数据合并为一个视图。
缺点:
①性能差:sql server必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,sql server也要把它变成一个复杂的结合体,需要花费一定的时间。
②修改限制:当用户试图修改试图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但是,对于比较复杂的视图,可能是不可修改的。
21、谈谈对TCP/IP协议的理解
TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。
TCP/IP协议族按照层次分为链路层、网络层、传输层、应用层四个层次。
22、TCP的三次握手和四次挥手
三次握手建立连接
第一步:客户机的TCP首先向服务器的TCP发送一个连接请求报文段。
第二步:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并为该TCP连接分配TCP缓存和变量。
第三步:当客户机收到确认报文段后,还要向服务器给出确认,并且也要给该连接分配缓存和变量。
成功进行以上三步后,就建立了TCP 连接,接下来就可以传送应用层数据。TCP 提供的是全双工通信,因此通信双方的应用进程在任何时候都能发送数据。另外,值得注意的是,服务器端的资源是在完成第二次握手时分配的,而客户端的资源是在完成第三次握手时分配的,这就使得服务器易于受到SYN 洪泛攻击。
四次握手释放连接
第一步:客户机打算关闭连接时,向其TCP发送一个连接释放报文段,并停止发送数据,主动关闭TCP 连接。
TCP 是全双工的,即可以想象为一条TCP 连接上有两条数据通路。发送FIN报文时,发送FIN的一端不能再发送数据,即关闭了其中一条数据通路,但对方还可以发送数据。
第二步:服务器收到连接释放报文段后即发出确认。此时,从客户机到服务器这个方向的连接就释放了, TCP 连接处于半关闭状态。但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个方向的连接并未关闭。
第三步:若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时其发出FIN= 1的连接释放报文段。
第四步:客户机收到连接释放报文段后,必须发出确认。此时TCP连接还未释放,必须经过时间等待计时器设置的时间2MSL后,客户机才进入连接关闭状态。
23、TCP和UDP的区别
(1)TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
(2)TCP提供可靠的服务。通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付
PS:TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。
(3)UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
(4)每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
(5)TCP对系统资源要求较多,UDP对系统资源要求较少。
24、拥塞控制和流量控制都是什么,两者的区别?
流量控制是端到端的控制,例如A通过网络给B发数据,A发送的太快导致B没法接收(B缓冲窗口过小或者处理过慢),这时候的控制就是流量控制,原理是通过滑动窗口的大小改变来实现。
拥塞控制是A与B之间的网络发生堵塞导致传输过慢或者丢包,来不及传输。防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。
26、操作系统的特点?
共享:资源可被多个并发执行的进程使用
并发:可以在同一时间间隔处理多个进程,需要硬件支持
虚拟:将物理实体映射成为多个虚拟设备
异步:进程执行走走停停,每次进程执行速度可能不同,但OS需保证进程每次执行结果相同
27、操作系统发展过程?
无操作系统(人工操作方式):特点:①用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低;②CPU 等待手工操作。CPU的利用不充分。
单道批处理系统:内存中仅有一道程序运行。
多道批处理系统:用户所提交的作业都先存放在外存上并排成一个队列,称为后备队列,然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享 CPU 和系统中的各种资源。
分时系统:在一台主机上连接了多个带有显示器和键盘的终端,同时允许多个用户通过自己的终端,以交互方式使用计算机,共享主机中的资源;
实时系统:功能:①实现实时控制:用于进行实时控制的系统称为实时系统。②实时信息处理:该系统由一台或多台主机通过通信线路连接到成百上千个远程终端上,计算机接收从远程终端上发来的服务请求,根据用户提出的请求对信息进行检索和处理,并在很短的时间内为用户做出正确的响应。
28、死锁
什么是死锁?是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 产生原因:①系统资源不足(对不可剥夺资源的竞争);②进程推进顺序不当(P1拥有A申请B,P2拥有B申请A)
产生死锁的四个必要条件:
①互斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为一个进程所占用。
②请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。
③不剥夺条件:进程已获得的资源在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
④环路等待条件:在发生死锁时,必然存在一个进程资源的环形链。
处理死锁的基本方法:
①预防死锁:通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。
②避免死锁:在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
③检测死锁:允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。
④解除死锁:这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。
29、死锁与饥饿的区别?
饥饿:当等待时间给进程推进和响应带来明显影响时,称发生了进程饥饿,饥饿到一定程度的进程所赋予的使命即使完成也不再具有实际意义时称该进程被饿死
区别:①进入饥饿的进程可以只有一个,但是死锁必须大于等于两个;②出于饥饿状态的进程可以是一个就绪进程,但是死锁状态的进程必定是阻塞进程
30、面向对象的三个要素(基本特征)?
封装:将客观事物封装成类,隐藏实现细节,模块化代码。
多态:同一消息被不同的对象接受时可产生完全不同的行动,这种现象称为多态性。
实现多态的两种方式——覆盖(重写)和重载。
①覆盖是子类重新定义父类的虚函数,与多态真正相关。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。
②重载是存在多个同名函数,但是函数的参数个数不同。这些函数实际上成为了不同的函数,对它们的调用在编译期间就已经确定,属于早绑定,与多态无关。
继承:子类继承父类功能,对父类功能进行扩展。
31、软件工程的主要模型?
①瀑布模型。是将软件生存周期中的各个活动规定为依线性连接的若干阶段的模型,包括需求分析、设计、编码、测试、运行与维护。由前至后、相互衔接的固定次序,如同瀑布流水逐级下落。
瀑布模型是以文档作为驱动、适合于软件需求很明确的软件项目的模型。
瀑布模型的优点:a.容易理解,管理成本低;
b.强调开发的阶段性早期计划及需求调查和产品测试。
瀑布模型的缺点:
a.客户必须能够完整、正确和清晰地表达他们的需要;
b.开始2个或3个阶段,很难评估真正的进度;
c.项目结束时,出现大量的集成和测试工作;
e.需求或设计中的错误往往只有到了项目后期才能够被发现,对于项目风险的控制能力较弱,从而导致项目常常延期完成,开发费用超出预算。
②V模型:是瀑布模型的一个变体。V模型提供了一种将验证确认活动应用于早期软件工程工作中的方法。
③增量模型:融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一系列增量产品,每一增量可以分别开发。
增量模型的优点:a.容易理解,管理成本低。
b.强调开发的阶段性早期计划及需求调查和产品测试。
c. 开发由增量表示的小系统所承担的风险不大。
d.减少用户需求的变更。
增量模型的缺点:a.若没有对用户的变更需求进行规划,则产生的初始增量可能会造成后来增量的不稳定
b. 若需求不像早期思考的那样稳定和完整,则一些增量就可能需要重新开发,重新发布
c.管理发生的成本、进度和配置的复杂性可能会超出组织的能力
④演化模型:是迭代的过程模型,使得软件开发人员能够逐步开发出更完整的软件版本。演化模型特别适用于对软件需求缺乏准确认识的情况。典型的演化模型有原型模型和螺旋模型等。
⑤喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。喷泉模型使开发过程具有迭代性和无间隙性。
喷泉模型的优点:提高软件项目的开发效率,节省开发时间。
喷泉模型的缺点:a.开发阶段是重叠的,开发过程中需要大量的开发人员,不利于项目的管理。
b.需要严格的管理文档,使得审核的难度加大。
前沿知识
1、什么是机器学习?讲讲具体的算法。
从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。但从实践的意义上来说,机器学习是种通过利用数据,训练出模型,然后使用模型预测的种方法。
PS:机器学习是研究如何使用机器来模拟人类学习活动的一门学科。稍为严格的提法是:机器学习是一门研究机器获取新知识和新技能,并识别现有知识的学问。这里所说的“机器”,指的就是计算机;现在是电子计算机,以后还可能是中子计算机、光子计算机或神经计算机等等。
机器学习的方法:回归算法、神经网络、聚类算法、降维算法、推荐算法、牛顿法等
成功的机器学习应用不是拥有最好的算法,而是拥有最多的数据!
2、你认为你本科学的数学有哪些会用到机器学习中?
高等数学/微积分、线性代数与矩阵论、概率论与信息论、最优化方法、图论/离散数学
3、什么是大数据?
大数据是指容量庞大的数据集,大到传统的数据处理软件产品无法在合理的时间内捕获、管理和处理数据。这些大数据集可以包括结构化数据、非结构化数据和半结构化数据。
4、什么是数据挖掘?
数据挖掘(Data Mining)是通过分析每个数据,从大量数据中寻找其规律的技术,主要有数据准备、规律寻找和规律表示3个步骤。数据挖掘的任务有关联分析、聚类分析、分类分析、异常分析、特异群组分析和演变分析等。
5、数据挖掘和机器学习之间有什么联系?
数据挖掘主要利用机器学习界提供的技术来分析海量数据,利用数据库界提供的技术来管理海量数据。
机器学习是数据挖掘的一种重要方法,但机器学习是另一门学科,并不从属于数据挖掘,二者相辅相成。
人工智能与机器学习、深度学习的关系
严格意义上说,人工智能和机器学习没有直接关系,只不过目前机器学习的方法被大量的应用于解决人工智能的问题。目前机器学习是人工智能的一种实现方式,也是最重要的实现方式。
早期的机器学习实际上是属于统计学,而非计算机科学的;而二十世纪九十年代之前的经典人工智能跟机器学习也没有关系。
深度学习是机器学习现在比较火的一个方向,其本身是神经网络算法的衍生,在图像、语音等富媒体的分类和识别上取得了非常好的效果。
6、什么是云计算?
云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云计算早期,简单地说,就是简单的分布式计算,解决任务分发,并进行计算结果的合并。因而,云计算又称为网格计算。通过这项技术,可以在很短的时间内(几秒种)完成对数以万计的数据的处理,从而达到强大的网络服务。
现阶段所说的云服务已经不单单是一种分布式计算,而是分布式计算、效用计算、负载均衡、并行计算、网络存储、热备份冗杂和虚拟化等计算机技术混合演进并跃升的结果。
7、什么是深度学习?
人工智能是一门科学,机器学习是目前最主流的人工智能实现方法,而深度学习则是机器学习的一个分支,也是当下最流行的机器学习的一种。
深度学习是机器学习中一种基于对数据进行表征学习的方法,是一种能够模拟出人脑的神经结构的机器学习方法。深度学习的概念源于人工神经网络的研究。而人工神经网络是从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络,简称为神经网络或类神经网络。因此,深度学习又叫深层神经网络,是从之前的人工神经网络模型发展而来的。
深度学习是机器学习研究中的一个新领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,比如图像,声音和文本等。深度学习,能让计算机具有人一样的智慧,其发展前景必定是无限的。
8、你对人工智能有什么了解?强人工智能可能实现吗?
“人工智能”一词最初是在1956年的达特茅斯学院的夏季研讨会提出的。
人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用
强人工智能又称通用人工智能或完全人工智能,指的是可以胜任人类所有工作的人工智能,人可以做什么,强人工智能就可以做什么
9、什么是神经网络?
人工神经网络(artificial neural network,ANN),简称神经网络(neural network,NN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统。现代神经网络是一种非线性统计性数据建模工具,常用来对输入和输出间复杂的关系进行建模,或用来探索数据的模式。
10、用过哪些搜索引擎,他们的区别是什么
搜索引擎是什么?
是指根据一定的策略,运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后为用户提供检索服务,将用户检索相关的信息展示给用户的系统。
用过哪些搜索引擎:百度、谷歌
浏览器和搜索引擎之间的区别:
①性质不同:浏览器:是一种用于查看网页的工具软件,是一个程序,
搜索引擎:是在浏览器中以网站形式提供服务的网站。
②目的不同:浏览器:预测人们将共享文本,图像和其他信息。
搜索引擎:可以提高人们提前获取和收集信息的速度,并为人们提供更好的网络环境。
③用途不同:浏览器:通过浏览器,您可以连接到Internet,浏览Web并在服务器上获取信息。
搜索引擎:通过搜索引擎,使用某些算法为用户提供在网站上收集的信息。
11、什么是嵌入式系统
嵌入式系统是以应用为中心,以计算机技术为基础,且 软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。
12、大数据发展的瓶颈?
没有成熟的方法采集和处理大数据。
数据涉及到隐私,法律法规还没有完善。
大量不同类别的数据不知道怎么存储。
数据的独占性:有价值的数据别人不一定会分享
13、大数据的特点
IBM提出了大数据“5V”特点:
①Volume:数据量大,包括采集、存储和计算的量都非常大。
②Variety:种类和来源多样化。包括结构化、半结构化和非结构化数据,具体表现为网络日志、音频、视频、图片、地理位置信息等等,多类型的数据对数据的处理能力提出了更高的要求。
③Value:数据价值密度相对较低,或者说是浪里淘沙却又弥足珍贵。随着互联网以及物联网的广泛应用,信息感知无处不在,信息海量,但价值密度较低,如何结合业务逻辑并通过强大的机器算法来挖掘数据价值,是大数据时代最需要解决的问题。
④Velocity:数据增长速度快,处理速度也快,时效性要求高。比如搜索引擎要求几分钟前的新闻能够被用户查询到,个性化推荐算法尽可能要求实时完成推荐。这是大数据区别于传统数据挖掘的显著特征。
⑤Veracity:数据的准确性和可信赖度,即数据的质量。