标签:质量管理 回归算法 analysis 应用 任务 应用程序 维护成本 函数 聚类算法
博主在准备研究生复试时,整理了一些面试容易被问到的问题。知识点涵盖内容较多,对于丰富计算机知识也有一定帮助。赠人玫瑰,手留余香~~~
*************************************?爱旌旌?*********************************
【软件工程】
软件工程是指导计算机软件开发维护的一门工程学科。
NATO定义:为了经济地获得可靠、高效运行软件,而建立使用完善的工程原理
软件工程是为了解决软件危机,即如何开发软件、如何维护数量不断膨胀的已有软件。
涵盖知识点:软件过程(过程模型、敏捷开发),建模(需求建模方法及原则、设计概念、体系结构、构件、界面、设计模式),质量管理(质量定义、评审技术、质量保证、软件测试),软件配置管理,软件项目管理。
开发原则:大卫·胡克:
①存在价值:这确实能为系统增加真正的价值吗?
②保持简洁:尽可能简洁使之易于维护、错误少
③保持愿景:保证系统实现与愿景保持一致
④关注使用者:时刻想到用户
⑤面向未来:系统必须能适应这样那样的变化
⑥计划复用:为达到面向对象程序设计所能提供的复用性,需要有前瞻计划
⑦认真思考:在行动之前清晰定位,完整思考能产生更好的结果
文档:
◇ 可行性分析报告:说明该软件开发项目的实现在技术上、经济上和社会因素上的可行性,评述为了合理地达到开发目标可供选择的各种可能实施方案,说明并论证所选定实施方案的理由。
◇ 软件需求说明书(软件规格说明书):对所开发软件的功能、性能、用户界面及运行环境等作出详细的说明。它是在用户与开发人员双方对软件需求取得共同理解并达成协议的条件下编写的,也是实施开发工作的基础。该说明书应给出数据逻辑和数据采集的各项要求,为生成和维护系统数据文件做好准备。
◇ 概要设计说明书:该说明书是概要实际阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。
◇ 详细设计说明书:着重描述每一模块是怎样实现的,包括实现算法、逻辑流程等。
◇ 项目开发计划:为软件项目实施方案制订出具体计划,应该包括各部分工作的负责人员、开发的进度、开发经费的预算、所需的硬件及软件资源等。
◇ 开发进度月报:该月报系软件人员按月向管理部门提交的项目进展情况报告,报告应包括进度计划与实际执行情况的比较、阶段成果、遇到的问题和解决的办法以及下个月的打算等。
◇ 项目开发总结报告:软件项目开发完成以后,应与项目实施计划对照,总结实际执行的情况,如进度、成果、资源利用、成本和投入的人力,此外,还需对开发工作做出评价,总结出经验和教训。
◇ 测试计划:为做好集成测试和验收测试,需为如何组织测试制订实施计划。计划应包括测试的内容、进度、条件、人员、测试用例的选取原则、测试结果允许的偏差范围等。
◇ 测试分析报告:测试工作完成以后,应提交测试计划执行情况的说明,对测试结果加以分析,并提出测试的结论意见。
◇ 用户操作手册:本手册详细描述软件的功能、性能和用户界面,使用户对如何使用该软件得到具体的了解,为操作人员提供该软件各种运行情况的有关知识,特别是操作方法的具体细节。
◇ 软件维护手册:主要包括软件系统说明、程序模块说明、操作环境、支持软件的说明、维护过程的说明,便于软件的维护。
◇ 软件问题报告:指出软件问题的登记情况,如日期、发现人、状态、问题所属模块等,为软件修改提供准备文档。
◇ 软件修改报告:软件产品投入运行以后,发现了需对其进行修正、更改等问题,应将存在的问题、修改的考虑以及修改的影响作出详细的描述,提交审批。
软件工程项目开发中的作用:1、定义项目成功的标准;2、识别项目的驱动、约束和自由程度;3、定义产品发布标准;4、与用户沟通;5、制定计划;6、任务分解;7、为通用的大任务开发计划工作表;8、计划中,在质且控制活动后应证百赐改工作;9、为过程改进安排时间;10、管理项目的风险;11、根据工作计划而不是日历来作估计
软件开发过程:规定了完成各项任务的工作步骤,通常使用生命周期模型(问题定义→可行性研究→需求分析→总体设计→详细设计→编码和单元测试→综合测试→软件维护)。典型的(抽象、通用、按阶段划分)软件过程模型有:瀑布、快速原型、增量、螺旋、喷泉、Rational统一过程、敏捷过程与极限编程、微软过程
软件开发趋势:一、软趋势:对连接和协作、全球项目、知识转让、新兴经济的影响以及人类文化本身的影响力等不断增长的需要,导致跨越管理复杂性和意外需求的一系列挑战,需要调整分散在各地的软件开发团队不断变化的人才结构。
二、硬趋势:技术变化的步伐在日益加快——决定软趋势,并影响软件结构、过程范围和表示过程框架特色的方式。
软件开发的方法有几种?对比优势。
面向过程的方法(结构化):
特点:功能分解,自顶向下,逐步分解,简单实用
缺点: 用户功能常变 → 框架结构不稳定,
数据流到软件结构有断层 → 设计回溯到需求有困难,
面向数据的方法:
Warnier方法:在构造程序框架时,Warnier方法仅考虑输入数据结构
Jackson方法:Jackson方法不仅考虑输入数据结构,而且还考虑输出数据结构
特点:从输入/输出数据结构入手,导出基本框架,对细节进行设计
面向对象的方法:
优点:将现实世界问题向面向对象解空间直接映射,实现对现实世界的直接模拟以数据为中心,而不是基于对功能的分解使得软件结构相对稳定,软件的重用、可靠、可维护性都较好
缺点:较难掌握
软件项目如何进行测试?
测试从小范围开始,并逐步过渡到软件整体。
传统:单元测试(构件模块内部处理逻辑和数据结构)→集成测试(利用测试好的构件建立设计中描述的程序结构,旨在发现接口相关的错误)
面向对象:类测试(封装的类,类中包含的方法,相当于单元测试)→集成测试(①基于线程;②基于使用)
集成测试→确认测试(定义满足需求的特定测试用例)→系统测试(对整个基于计算机的系统进行一些列不同考验的测试,eg:恢复、压力、安全、性能、部署)
获取测试需求→撰写测试用例→执行测试→回归测试(修复后)→撰写测试报告
单元测试的策略:
逻辑覆盖:语句覆盖、判断覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖及路径覆盖、循环覆盖、同行评审、桌前检查(自己)、代码走查(与架构师集中讨论)、代码评审、景泰数据流分析。
对象、功能、动态模型是什么?异同?
面向对象的分析方法(OOA)是相当于软件开发过程中的问题定义和需求分析阶段,是用面向对象的概念和方法为软件需求建造模型。分析的过程就是提取和确定需求的过程。
OOA的需求规格说明主要包括:对象模型、动态模型和功能模型。
对象模型:描述系统的静态结构,包括类和对象,属性和操作以及之间的关系(数据结构);[最基础、最核心、最重要]
动态模型:描述系统的交互次序,即控制结构;------状态图、事件追踪图
功能模型:描述系统的数据变换(系统功能);------数据流图
三种模型都涉及到数据、控制、操作的概念,各自描述的侧重点不同。
对象模型:
状态图:
事件追踪图:
数据流图:
桩模块和驱动模块是什么?
eg:你负责的是B模块,第一个完成了编码工作,现在需要开展单元测试工作。由于B模块不是最顶层模块,所以它一定不包含main函数(A模块包含main函数),也就不能独立运行。另外,B模块调用了D模块和E模块,而目前D模块和E模块都还没有开发好,那么想让B模块通过编译器的编译也是不可能的。那么怎样才能测试B模块呢?需要做:1、写两个模块Sd和Se分别代替D模块和E模块,这样B模块就可以通过编译了。Sd模块和Se模块就是桩模块。2、写一个模块Da用来代替A模块,里面包含main函数,可以在main函数中调用B模块,让B模块运行起来。Da模块就是驱动模块。
即:桩模块的使命:①使得程序能够通过编译,②模拟返回被代替的模块的各种可能返回值。
驱动模块的使命:①调用被测试模块,②判断被测试模块的返回值是否与测试用例的预期结果相符
软件设计的优劣:高内聚低耦合
【计算机网络】
七层结构和功能
物:实现比特流在传输介质上透明传输
数:有差错的物理线路变成无差错的数据链路,实现相邻结点的传输
网:控制报文通过网络的路由选择
传:实现进程到进程数据传输
会:管理不用主机间进程的对话
表:数据加密解密压缩格式转换
应:提供用户和网络接口
TCP和UDP异同
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的。UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节。
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。(无连接不考虑全双工还是其他,只有面向连接到的才会考虑 )
视频点播使用使用TCP还是UDP
UDP实时应用:RIP选路表的更新,DNS、 SNMP等都是运行在UDP之上。
三次握手(略)
无线网络怎样划分?有哪些协议标准
无线广域网:通过移动通信卫星进行的数据通信
无线城域网:IEEE 802.20
无线局域网:IEEE 802.11(局域路由器有两个柱子所以是11)
无线个域网:IEEE 802.15
无线体域网:人体传感器进行通信
电子邮件协议内容:
常用的电子邮件协议有SMTP、POP3、IMAP4,它们都是基于TCP协议。
小明要发送邮件,他的用户代理(Foxmail应用程序)就通过SMTP协议将邮件发送到他的邮件服务器,邮件服务器将此邮件加入到邮件服务器的发送邮件队列中。然后小明的邮件服务器再通过SMTP协议将此邮件发送到小红的邮件服务器中。小红的邮件服务器接收到来自小明的邮件之后,但是这个时候,小红的电脑处于关机状态,如果使用SMTP协议,邮件服务器发送请求,但是没有响应,过一段时间再发请求,一直没有响应,这样会造成资源的浪费,也很不合理。所以就需要用到POP3和IMAP协议。POP3先是发送用户的信息进行登录,然后通过邮件的具体情况决定是看邮件呢,还是删邮件,最后是结束会话。但是POP3不是双向的。当用户用用户代理将邮件存储在本地之后,在本地所进行的对邮件的删除等操作,不会对用户的邮件服务器造成影响。但是IMAP解决了这样的问题。
ARP协议,地址解析协议,是根据IP地址获取物理地址的一个TCP/IP协议。
【操作系统】
操作系统是什么,功能包括哪些
操作系统是管理计算机硬件与软件资源的计算机程序。大致包括5个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理
冯诺依曼计算机的特点
1计算机有运算器、存储器、控制器、输入设备和输出设备五大部件组成
2指令和数据以同等地位存放于存储器内。并可按地址访问。
3指令和数据均可用二进制表示。
4指令由操作码和地址吗组成。操作码表示操作的性质、地址码表示操作数在存储器中的位置。
5指令在存储器中按顺序存放。通常,指令时顺序执行的。在特殊情况下,可根据运算结果或指定的条件来改变运算顺序。
6机器以运算器为中心,输入输出设备和存储器之间的数据传送通过运算器完成。
进程和线程的区别
①进程:是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。
②线程:是进程的一个执行单元,是进程内的调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。
一个程序至少一个进程,一个进程至少一个线程。
进程线程的区别:
地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
健壮性:一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩 溃整个进程都死掉。所以多进程要比多线程健壮。
效率:进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
执行过程:每个独立的进程都有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程 执行控制。线程执行开销小,但是不利于资源的管理和保护。进程执行开销大,但是能够很好的进行资源管理和保护线程是处理器调度的基本单位,但是进程不是。
两者均可并发执行。
什么是程序局部性:
程序局部性原理,是指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。
局部性原理又表现为:时间局部性和空间局部性。
①时间局部性是指如果程序中的某条指令一旦执行,则不久之后该指令可能再次被执行;如果某数据被访问,则不久之后该数据可能再次被访问。
②空间局部性是指一旦程序访问了某个存储单元,则不久之后。其附近的存储单元也将被访问。
什么是嵌入式系统:
嵌入式系统由硬件和软件组成,是能够独立进行运作的器件。其软件内容只包括软件运行环境及其操作系统。硬件内容包括信号处理器、存储器、通信模块等在内的多方面的内容。
堆栈的区别:
1、栈内存存储的的是局部变量,堆内存存储的是实体。
2、栈内存的更新的速度会更快些(局部变量),堆内存的更新速度相对更慢。
3、栈内存的访问直接从地址读取数据到寄存器,然后放到目标地址,而堆内存的访问更麻烦,先将分配的地址放到寄存器,在读取地址的值,最后再放到目标文件中,开销更大。
4、栈内存是连续的空间,堆内存一般情况不是连续的,频繁地开辟空间,释放空间容易产生内存碎片(外碎片)。
【计组】
计算机总线:
系统总线是一个单独的计算机总线,是连接计算机系统的主要组件。用来降低成本和促进模块化。
数据总线是CPU与存储器、CPU与I/O接 口设备之间传送数据信息(各种指令数据信息)的总线
地址总线是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取电脑内存元件/地方的实体位址。
控制总线:主要用来传送控制信号和时序信号。
系统总线结合数据总线的功能来搭载信息,地址总线来决定将信息送往何处,控制总线来决定如何动作。
指令执行和五级流水
指令流水线的特点:流水线的每个阶段完成一条指令执行过程的一部分,不同阶段并行完成不同指令执行过程的不同部分;多条指令同时运行,占用CPU不同的资源;流水线没有缩短单条指令的时间,但提高了整个系统的吞吐率。连续不断地提供指令才能发挥流水线的效率。
五级流水阶段:取指令、指令译码、指令执行、读存储器、写回
Cache原理,堆排序为何对Cache不友好,命中率低
原理:
①大容量主存一般采用DRAM,相对SRAM速度慢,而SRAM速度快,但价格高。
②程序和数据具有局部性,即在一个较短的时间内,程序或数据往往集中在很小的存储器地址范围内。
因此,在主存和CPU之间可设置一个速度很快而容量相对较小的存储器。在其中存放CPU当前正在使用以及一个较短的时间内将要使用的程序和数据,这样,可大大加快CPU访问存储器的速度,提高机器的运行效率。Cache与主存都分成块(常常将Cache块说成Cache行),每块由多个字节组成,大小相等。在一个时间段内,Cache的某块中放着主存某块的全部信息,即Cache的某一块是主存某块的副本(或叫映像)。
堆排序对Cache不友好:在读取一个单位的数据(比如1个字节)之后,不光单个字节会被存入cache,与之内存地址相邻的几个字节,都会以一个block为单位存入cache中。另外,cache相比内存小得多,当cache满了之后,会将旧的数据剔除,将新的数据覆盖上去。在进行堆排序的过程中,由于我们要比较一个数组前一半和后一半的数字的大小,而当数组比较长的时候,这前一半和后一半的数据相隔比较远,这就导致了经常在cache里面找不到要读取的数据,需要从内存中读出来,而当cache满了之后,以前读取的数据又要被剔除。
IP核:是一段具有特定电路功能的硬件描述语言程序,该程序与集成电路工艺无关,可以移植到不同的半导体工艺中去生产集成电路芯片。分为软核、硬核以及固核。
缺页中断是一种特殊的中断,它与一般的中断的区别是:
(1)在指令执行期间产生和处理中断信号,CPU通常在一条指令执行完后检查是否有中断请求,而缺页中断是在指令执行时间,发现所要访问的指令或数据不在内存时产生和处理的。
(2)一条指令在执行期间可能产生多次缺页中断。如一条读取数据的多字节指令,指令本身跨越两个页面,若指令后一部分所在页面和数据所在页面均不在内存,则该指令的执行至少产生两次缺页中断。
GPU和CPU的区别:CPU主要是解释计算机指令以及处理计算机软件中的数据,相当于是一台计算机的“大脑”,而GPU是一个专门的图形核心处理器,是显示卡的“大脑”,决定显卡的档次和大部分性能。
【数据库】
视图作用,视图和表的区别
定义:
视图是从一个或几个基本表(或视图)中导出的虚拟的表。在系统的数据字典中仅存放了视图的定义,不存放视图对应的数据。
作用:
①提高了重用性,视图就像一个函数。
②对数据库重构,却不影响程序的运行。
③提高了安全性能。可以对不同的用户,设定不同的视图。
④让数据更加清晰。想要什么样的数据,就创建什么样的视图。
区别:
1、视图是已经编译好的sql语句。而表不是
2、视图没有实际的物理记录。而表有。
3、表是内容,视图是窗口
4、表只用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能有创建的语句来修改
5、表是内模式,视图是外模式
6、视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度说,视图可以不给用户接触数据表,从而不知道表结构。
7、表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
8、视图的建立和删除只影响视图本身,不影响对应的基本表。
建索引是不是越多越好:
大多数情况下索引能大幅度提高查询效率,但是: 数据的变更(增删改)都需要维护索引,因此越多意味着维护成本越高;更多的索引意味着需要更多的空间;过小的表,建索引可能会更慢;
数据操纵语言是什么:数据操纵语言是指通过对表中的数据进行插入、删除和修改等操作,实现对数据库的基本操作。
数据库技术是什么:数据库技术是研究数据库的结构、存储、设计、管理和应用的一门软件科学
DROP和DELETE的区别:drop主要用于删除结构,delete主要用于删除数据
范式及其应用:范式是符合某一种级别的关系模式的集合。
闭包的含义:闭包就是由一个属性直接或间接推导出的所有属性的集合。
触发器的类型,干嘛的
触发器是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发。就SQL Server 它有DML 触发器[数据]、DDL 触发器[结构]和登录触发器[login]。
触发器经常用于加强数据的完整性约束和业务规则等
事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
死锁是什么,四要素,和饥饿的区别
死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,
四要素:
①互斥条件:一个资源每次只能被一个进程使用。此时若有其他进程请求该资源,则请求进程只能等待。
②请求与保持条件:进程请求新的资源,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
③不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,只能是主动释放。
④循环等待条件: 若干进程间形成首尾相接循环等待资源的关系
死锁:多个并发进程相互等待对方占用的资源而产生的错误现象。
饥饿: 在系统中, 由于系统采用的资源分配算法不当,虽然每个资源占有者都在有限时 间内释放它所占的资源,但仍然使一些进程永远得不到资源的一种错误现象
先写日志WAL为什么?作用?
Write-Ahead Logging: 是一种保证数据完整性的标准方法。。简单来说就是,对数据文件的改变(包括表和索引)必须先写入日志,即日志记录刷新到永久储存之后,才能被写。
【数据结构】
算法和程序的区别
算法是解决问题的步骤;程序是算法的代码实现;算法要依靠程序来实现功能;程序需要算法作为灵魂。同样编写一个功能的程序,使用不同的算法可以让程序的体积、效率差很多。所以算法是编程的精华所在。
函数和映射的区别
(1)通常函数一定是映射,映射不一定是函数。
(2)函数是一种特殊的映射,通常是指非空数集之间的映射;映射是建立在任意非空集合上的对应。
(3)对于函数来说有先后关系,即定义域根据对应关系产生的值域,而对于映射来说没有先后关系,两个集合同时存在,所以函数值域中的每个数都有定义域中的数和它对应,而映射像中的元素则不一定有原像中的元素与他对应。
结构化和非结构化数据的定义,举例
结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。与结构化数据相对的是不适于由数据库二维表来表现的非结构化数据,包括所有格式的办公文档、XML、HTML、各类报表、图片和音频、视频信息等。
值传递,指针,引用的区别
值传递:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数
的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传
出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值
传递。
指针传递:形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本
身进行的操作
引用传递:形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在
引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了
内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调
函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问
主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影
响了主调函数中的实参变量。
外排序和内排序的区别
内部排序:待排序记录存放在计算机随机存储器中(说简单点,就是内存)进行的排序过程。
外部排序:待排序记录的数量很大,以致于内存不能一次容纳全部记录,所以在排序过程中需要对外存进行访问的排序过程。
对复杂度的理解,各排序算法复杂度,时空优缺点
时间复杂度实际上是一个函数,代表基本操作重复执行的次数,进而分析函数随变量的变化来确定数量级,数量级用O表示,所以算法的时间复杂度表示为T(n)。
空间复杂度:是对一个算法在运行过程中临时占用存储空间的度量,用O(n)表示。
贪婪算法是什么:指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。
【安全】
什么是网络安全:是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠的运行、网络服务不中断。
软件安全由哪些因素决定:
网络安全威胁主要包括两类:渗入威胁和植入威胁。
渗入威胁主要有:假冒、旁路控制、授权侵犯;
植入威胁主要有:特洛伊木马、陷门。
【语言 】
面向过程和面向对象的区别
短路(编译器短路效应)
指针和引用的区别
JAVA回收机制
动态绑定和静态绑定
C和C++ :
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。
C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制。 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”。
JAVA和C++:
C++空类所占空间大小
首先,声明的类只是一种类型定义,它本身是没有大小可言的。 因此,如果用sizeof运算符对一个类型名操作,那得到的是具有该类型实体的大小。
计算一个类对象的大小时的规律:
重写和重载的区别
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!也就是说子类能够根据需要实现父类的方法。
重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
【ML和AI】
什么是ML:机器学习是一门多领域交叉学科,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径。
什么是AI:人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
衡量分类器的标准:
几种常用的指标:精度,召回率,Fmeasure值,针对二元分类器的ROC曲线;
可以通过混淆矩阵比较容易的计算出分类器的精度和召回率,以及综合二者优势的综合性指标Fmeasure值,三个都是越高越好。ROC曲线下的面积AUC(area under curve) 越大, 正确率越高。
举例说明一个数据挖掘的算法
一般来说,数据挖掘的算法包含四种类型,即分类、预测、聚类、关联。前两种属于有监督学习,后两种属于无监督学习,属于描述性的模式识别和发现。
有监督的学习,即存在目标变量,需要探索特征变量和目标变量之间的关系,在目标变量的监督下学习和优化算法
分类算法和预测算法的最大区别在于,前者的目标变量是分类离散型(例如,是否逾期、是否肿瘤细胞、是否垃圾邮件等),后者的目标变量是连续型。一般而言,具体的分类算法包括,逻辑回归、决策树、KNN、贝叶斯判别、SVM、随机森林、神经网络等。
预测类算法,其目标变量一般是连续型变量。常见的算法,包括线性回归、回归树、神经网络、SVM等。
无监督学习,即不存在目标变量,基于数据本身,去识别变量之间内在的模式和特征。
聚类分析的目的就是实现对样本的细分,使得同组内的样本特征较为相似,不同组的样本特征差异较大。常见的聚类算法包括kmeans、系谱聚类、密度聚类等。
关联分析的目的在于,找出项目(item)之间内在的联系。常常是指购物篮分析,即消费者常常会同时购买哪些产品(例如游泳裤、防晒霜),从而有助于商家的捆绑销售。
神经网络MALP:
神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术
经典的三层神经网络,包含输入层,输出层,以及中间层(也叫隐藏层)
模型中,圆圈代表“神经元”,而连接线代表“神经元”之间的连接。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。
PCA主成分分析是用来降维的
PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。
多变量大数据的问题:增加了数据采集的工作量,许多变量之间可能存在相关性,从而增加了问题分析的复杂性。所以需要,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。
PCA相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。(第一个新坐标轴选择是原始数据中方差最大的方向,同样的,第K个选取是与前K-1个坐标轴正交的平面中使得方差最大的)
SVM: 支持向量机算法从某种意义上来说是逻辑回归算法的强化:通过给予逻辑回归算法更严格的优化条件,支持向量机算法可以获得比逻辑回归更好的分类界线。但是如果没有某类函数技术,则支持向量机算法最多算是一种更好的线性分类技术。但是,通过跟高斯“核”的结合,支持向量机可以表达出非常复杂的分类界线,从而达成很好的的分类效果。“核”事实上就是一种特殊的函数,最典型的特征就是可以将低维的空间映射到高维的空间。
线性回归:是回归问题中的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w和b。
最小二乘:求解 w 和 b 是使损失函数最小化的过程,在统计中,称为线性回归模型的最小二乘“参数估计”。我们可以将 L(w,b) 分别对 w 和 b 求导, 令上述两式为0,可得到 w 和 b 最优解的闭式解。
梯度下降:核心内容是对自变量进行不断的更新(针对w和b求偏导),使得目标函数不断逼近最小值的过程
【前沿方向】
大数据是什么,近年的应用:
"大数据"是一个体量特别大,数据类别特别大的数据集,并且这样的数据集无法用传统数据库工具对其内容进行抓取、管理和处理。对企业而言,大数据可提高工作效率,降低企业成本,精准营销带来更多客户。对政府而言,可以利用大数进行统筹分析、提高管理效率、管理抓获犯罪分子等。
云计算(cloud computing)是分布式计算的一种,指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。云是一种全新的网络应用概念。
大数据与云计算的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式架构。它的特色在于对海量数据进行分布式数据挖掘。但它必须依托云计算的分布式处理、分布式数据库和云存储、虚拟化技术。
VR和应用AR:
AR即增强现实,需要将现实与虚拟场景结合,只要是带摄像头的电子产品都能通过安装AR软件,实现AR技术。
VR是纯虚拟场景, 更多的使用是位置跟踪器、数据手套、动捕系统、数据头盔等等。VR设备往往是浸入式的
3D打印:即快速成型技术的一种,又称增材制造,它是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术。
计算机视觉(Computer vision):是一门研究如何使机器“看”的科学,更进一步的说,就是指用摄影机和计算机代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图像处理,用计算机处理成更适合人眼观察或进行仪器检测的图像。
图形和图像的区别
概念的区别:
图形是指由外部轮廓线条构成的矢量图。即由计算机绘制的直线、圆、矩形、曲线、图表等;而图像是由扫描仪、摄像机等输入设备捕捉实际的画面产生的数字图像,是由像素点阵构成的位图。
数据描述区别:
图形:用一组指令集合来描述图形的内容,如描述构成该图的各种图元位置维数、形状等。描述对象可任意缩放不会失真。
图像:用数字任意描述像素点、强度和颜色。描述信息文件存储量较大,所描述对象在缩放过程中会损失细节或产生锯齿。
屏幕显示区别:
图形:使用专门软件将描述图形的指令转换成屏幕上的形状和颜色。
图像:是将对象以一定的分辨率分辨以后将每个点的信息以数字化方式呈现,可直接快速在屏幕上显示。
适用场合区别:
图形:描述轮廓不很复杂,色彩不是很丰富的对象,如:几何图形、工程图纸、CAD、3D造型软件等。
图像:表现含有大量细节(如明暗变化、场景复杂、轮廓色彩丰富)的对象,如:照片、绘图等,通过图像软件可进行复杂图像的处理以得到更清晰的图像或产生特殊效果。
图像处理,用计算机对图像进行分析,以达到所需结果的技术。一般指数字图像处理,经过拍摄得到的一个大的二维数组。
图像锐化,是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。
区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。
【数学,TMD都是些什么乱七八糟的】
雅克比矩阵
离散数学:
群
阿贝尔群
欧拉图和哈密顿图
完全图
图同构和图同态
高斯函数
傅里叶变换
泰勒展开式/级数
贝叶斯公式
条件概率独立性
泊松分布和概率密度
矩阵的秩和迹
集合并和差表示交是可以的
整数多自然数多
罗尔柯西中值定理
线性方程组求解和个数
同构集
平面图和平面图欧拉定理
集合论的二元论
**********************************?爱旌旌?******************************
标签:质量管理 回归算法 analysis 应用 任务 应用程序 维护成本 函数 聚类算法
原文地址:https://www.cnblogs.com/goudongxi/p/12731969.html