数据库
1.设计过程/设计步骤
1.需求分析:明确客户需求,确定系统边界,生成数据字典
2.概念结构设计:将用户需求抽象为概念模型,绘制e-r图
3.逻辑结构设计:将e-r图转化为dbms相符合的逻辑结构,dbms就是数据库管理系统
4.物理结构设计:他的内容包括关系模式选择存取方法,设计关系,索引等数据库文件的物理存储结构
5.数据库实施:建立实际数据库结构,试运行,装入数据
6.数据库运行和维护:维护数据库的安全性,完整性控制以及数据的转存和恢复
需求-概念-逻辑-物理-实施-运行和维护
2.事务概念以及四个特征
事务是:
数据库操作序列,要么全做要么全不做,是不可分割的工作单位,它可以是一句spl也可以是一组spl语句或者是整个程序
四个特性:
原子性:一个事务要么全做,要么全不做,
一致性:事务执行结果必须一致
隔离性:事务的执行不能被其他事物干扰
持久性:一个事务一旦提交,他对数据库中数据的改变应该是永久的
3.完整性约束
是一组完整性规则的集合,是对数据模型及其联系所具有的制约和依赖规则,用来保证数据的正确性,有效性和兼容性。
实体完整性 是指一个关系中所有主属性不能取空值参照完整性 要求关系中不允许引用不存在的shiti,也叫引用完整性
用户定义完整性 用户定义某个具体数据库所涉及的数据必须满足的约束条件,是由具体应用环境来决定的
4.数据库比文件系统的优点
1.提高了数据的共享性
2.减少了数据的冗余度
3.数据独立性更高
5.关系代数
是一种抽象的查询语言,用对关系的运算来表达查询,作为研究关系数据语言的数学工具。
关系代数的运算对象时关系,运算结果也是关系。
专门的关系运算包括选择,投影,连接,除等。
6.范式
第一范式:保证了列的原子性
第二范式:属性完全依赖于主键
第三范式:属性不能传递依赖于主属性
7.数据库的数据模型
层次模型
网络模型
关系模型
对象关系模型
对象模型
8.关系形数据库有哪些操作
选择,投影,连接,除法
9.数据库的数据保护
四个方面:
安全性控制,完整性控制,并发性控制和数据恢复
10.视图
作用:
简化查询语句使用户能从多个角度看到同一数据
提高了数据的安全性
提供了一定程度的逻辑独立性
是:
一种虚拟代表,允许用户看到或者更新特定部分的数据
11.存储过程
是在大型数据库系统中,一组为了完成特定功能的sql语句集。
存储在数据库中,经历了第一次遍历后,再次调用不需要再次编译。
类似与c语言的函数
事务是保存在项目里的,存储过程是保存在数据库里的
事务是高级数据库编程语言是一件事序列化存储过程是sql语句
12.自主存储控制和强制存储控制的区别
自主存储控制允许用户自主决定数据的访问权限,灵活共享资源,但存在安全风险;而强制存储控制则由系统决定用户的访问权限,确保数据的安全性和完整性,相对更为严格。
13.公共密钥和传统密钥的区别和优势
公共密钥技术:(非对称加密)
利用两个密钥取代常规的一个密钥:一个公共密钥用来加密数据,另一个私人密钥用来解密数据。数字上他俩相关,但几乎很难破译
传统密码的缺点:(对称加密)
1.收发双方密钥相同,密钥分配困难
2.不能方便实现数字签名,应用不方便
传统加密相比,公共有三个优点:
1.用户可以用于加密的密钥公开的分发给任何用户2.允许公共密钥的公开
3.有数字签名的公开鉴定系统
14.orm是啥
对象关系映射
object relational mapping是一种程序技术,用于实现面向对象编程语言理不同类型系统的数据之间的转换
15.码
软件工程
1.黑盒白盒
黑盒测试:
也叫功能测试,用来测试每个功能是否能正常使用。在测试时,是完全不考虑程序内部结构和内部特性的情况下进行测试
白盒测试:结构测试,他知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正确运行
2.α和β测试
α测试:
是由一个用户在开发环境下进行测试,不能有程序员或者测试员进行(内测)
β测试:
是软件的多个用户在一个或多个用户环境下进行的测试,开发者一般不参与(公测)
区别:
α测试有开发或者测试人员在场,可以随时记录错误,β测试一般不在场
3.介绍模块化软件开发
模块化软件开发是一种将软件系统划分为独立模块的方法,每个模块负责特定功能,可独立开发、测试并组合成完整软件。这种开发方式提高了软件的可维护性、可扩展性和可重用性,降低了耦合度,提高了开发效率。模块化软件开发通过灵活架构、焦点分离和并行开发,实现了高效、高质量的软件开发过程。
4.软件形似化
是指严格数据基础上的软件开发方法。
形式化方法的本质是基于数学的方法来描述目标软件系统属性的一种技术。
5.软件工程的重构和设计模式
重构是指在不改变软件功能和外部可见性的情况下,对软件内部结构进行调整,旨在改善软件的结构,提高清晰性、可扩展性和可重用性。重构是软件开发循环的一部分,通过对代码进行有序的整理,减少出错,使代码更易于理解和维护
而设计模式则是一种解决在软件设计中经常出现的问题的最佳实践。设计模式提供了一种在特定上下文中解决一般设计问题的方案,有助于开发者快速解决常见的设计问题,提高代码的重用性、可读性和可靠性。常见的设计模式包括模块化设计、封装、抽象等,它们都是为了提高软件的可维护性和可扩展性。
在软件工程实践中,重构和设计模式常常相互结合使用。重构为设计模式的应用提供了基础,使得设计模式能够更好地融入现有代码中。而设计模式则为重构提供了指导和支持,使得重构过程更加有序和高效。通过结合使用重构和设计模式,软件工程师能够创建出更加健壮、灵活和易于维护的软件系统。
6.UML
统一建模语言是面向对象软件的标准化建模语言。
五种类图定义:1.用例图:从用户角度描述系统功能,并指各功能的操作者
2.静态图:
类图:描述系统中类的静态结构
包图:包和类组成的,表式包与包之间的关系,暴徒描述系统的分层结构
对象图:类图的实例
3.行为图:描述系统动态模型和对象组成的交换关系,有状态图和活动图
活动图:业务实现用例的工作流程
状态图:描述状态到状态控制流,常用于动态建模
4.交互图:描述对象之间的交互关系
顺序图:对象之间的动态合作关系合作图:描述对象之间的协作关系
5.实现图
配置图:定义系统中软硬件的物理体系结构
7.er模型/实体关系图
e-r模型由实体,属性,联系,三部分组成
实体:考虑问题的对象
属性:实体或联系的某一特性
联系:实体之间的联系
e-r用来干嘛:
表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
联系是三种:
1对多1对一
n对m
8.软件危机
是指落后的软件生产方式无法满足迅速增长的计算机需求,导致软件开发和维护过程中出现一系列严重问题的现象
形成:
1.硬件生产率大幅度提升,生产能力过剩2.软件生产随着规模增大复杂度增大
3.软件生产率很低4.软硬件供需失衡
5.矛盾引发软件危机
具体表现
1.软件开发进度难以预测2.软件开发成本难以控制
3.用户对产品功能难以满足4.软件产品质量无法保证
5.软件产品难以维护
6.软件缺少适当的文献资料
软件工程是研究如何以系统性的,规范化的,可定量的过程化方法去开发和维护软件,以及如何把经过时间考研而证明正确的管理技术和当代能够得到最好的技术方法结合起来的学科
9.软件模型的定义
指软件开发全部过程,活动和任务的结构框架
包括需求,设计,编码和测试等阶段
典型的模型有:
1.边做边改模型2.瀑布
3.快速原型
4.增量模型
5.螺旋模型
6演化模型
7.喷泉模型
8.智能模型
9.混合模型
19.rad模型
10.设计模式
设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结
比如单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点
工厂模式,定义一个用于创建对象的借口,让子类决定实例化哪一类
目的,为了代码可重用性,让代码更容易让人理解,保证代码可靠性
设计模式分三类
创建型模式结构模式
行为型模式
11.介绍结构优化设计
结构化设计是软件开发中一种重要的方法,通过自顶向下、逐步求精的方式,将软件划分为多个独立的功能模块,并确定模块间的接口和交互方式,从而提高软件的可读性、可维护性和可重用性。
12.完全测试有可能吗?
完全测试是不可能的。由于软件系统的复杂性、输入量的巨大以及时间和资源的限制,无法对所有可能的输入和情况进行测试。因此,测试只能尽可能覆盖关键功能和场景,以确保软件的质量和稳定性。
13.介绍瀑布模型
瀑布模型是一种线性软件开发过程模型,按阶段顺序执行需求分析、设计、编码、测试和维护,各阶段成果经严格验证后传递给下一阶段,确保软件质量,但缺乏灵活性,难以应对需求变更。
14.介绍结构优化设计
结构优化设计是通过对产品结构的形状、尺寸、材料等进行综合分析和改进,以达到提高产品性能、降低成本、增强可靠性等目标的设计方法。它利用数学优化算法和工程分析技术,寻找最优的设计方案,使产品更加高效、可靠和经济。
15.软件生命周期
简而言之,就是软件从构思到废弃的完整过程。它涵盖了问题定义、需求分析、设计、编码、测试、部署及后期维护等多个阶段。每个阶段都有其特定目标和任务,确保软件有序、高效开发,提高软件质量和用户体验
16.可行性研究
用最小的代价在最短的时间内确定问题是否能解决
17.数据流图
描绘系统的逻辑模型,图中没有具体的物理元素,只是描绘信息在系统中流动和处理的情况
18.数据字典
DD是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合是“关于系统数据的数据库
19.软件维护
软件维护旨在确保软件稳定运行、适应变化需求、修复潜在缺陷、优化性能,从而延长软件生命周期,提升用户体验,保障系统安全。
20.关键字
结构清晰,可重用性高,可维护性强,适应性强
操作系统
1.进程和线程区别,线程是什么,什么时候用
区别:
进程是拥有资源的基本单位,线程是调度和分派的基本单位
进程有资源,而线程没有资源
创建或者撤销进程时os所付出的开销明显大于线程创建或者撤销时的开销
线程:
线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
进程:
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础
2.作业调度和进程调度区别:
作业调度:
又称为高级调度,频度较低。其主要工作是将位于外存后备队列中的某个(或某几个)作业调入内存,排在就绪队列上。注意了,这个时候仅仅是将作业调入内存,并为作业创建进程、分配资源,此时进程处于就绪态,并没有执行。
进程调度:又称为低级调度,是最基本的、频度最高的调度方式。其主要任务是从就绪队列中选取一个(或几个)进程,并分配处理机的过程,这时候才可以理解为“执行”
区别:作业调度和进程调度最主要的区别在于,前者是为作业建立进程的过程,是将作业由外存调入内存的过程;而后者整个过程并没有跑出内存的范围,是将就绪态的进程变为运行态的过程
3.操作系统的功能,基本特征,常见操作系统
1.存储器管理功能
2.处理机管理功能
3.设备管理功能
4.文件管理功能
5.用户接口管理
基本特征:
并发性,共享性,虚拟性,异步性
常见操作系统:单道批处理系统
多道批处理系统
分时系统(交互性强)
实时系统(可靠)
4.逻辑地址和相对地址
逻辑地址:
再有地址变化功能的计算机中,访问指令给出的地址
每个用户进程所看到的独立的地址空间
物理地址:
实际的存储器对应的地址空间
相对地址:
相对于某个基准量编址时所使用的地址
5.系统调用
系统调度本质上是一种特殊的过程调度,提供了用户程序与操作系统内核之间的接口,系统调度不仅可以供所有应用程序使用,也可以供操作系统使用
与一般调度的区别:运行态不同:系统的在不同的状态
调用方法不同:系统调用必须通过软中断机制首先进入系统核心,才能转向相应的命令处理程序
返回问题:在抢占式调用的系统中,当系统调用返回时,要重新进行调度分析
6.二进制文本和文本文件存储区别
二进制是将内存里的数据读写入文本,文本则是将数据转化为字符,再写入文本
7.死锁条件环路等待是怎么打破
1.撤销陷入死锁的全部进程
2.逐个撤销陷入死锁的进程直到死锁不存在
3.从陷入死锁的进程中逐个强迫放弃所占用资源,直到死锁消失
4.从另一些进程中强行剥夺足够数量的资源分配给四锁进程
如何产生:
1.互斥2.请求和保持条件(进程已经至少保存了一个资源,又提出了新的资源,该资源又被其他程序占有)
3.不剥夺条件(以获取的资源在未使用完之前不能被剥夺)
4.环路等待(必然存在一个进程---资源等待的环形链)
8.指令和数据一起存储,计算机是怎么区别指令和算法的?
1.通过不同的时间段来区分指令和数据,即在取指令阶段取出的为指令
2.通过地址来源区分,由pc提供存储单元地址的取出的是指令,由指令地址码部分提供存储单元地址的是操作数
编码
1.面向对象和面向过程
面向过程:
分析出解决问题所需要的步骤,然后用函数把步骤一步一步实现,使用的时候一个一个调用
面向对象:
将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
2.链表和数组的优缺点
链表:便于插入和删除,扩展性高,内存利用率高
数组:占用空间少,可以随机访问
3.算法的基本特征和概念
算法是对特定问题求解步骤的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作
五个特征:
有穷,确定,可行,输入和输出
有穷:在有穷步后结束
确定:每一个指令都要有明确的含义,不能有二义性
可行:可以运行
输入:有0个or多个输入
输出:有0个or多个输出
4.时间复杂度和空间复杂度
时间复杂度:
定量描述了算法的运行时间
空间复杂度:
在运行中临时占用存储空间大小的量度
5.排序算法
直接插入,冒泡,堆,归并,快速,希尔,基数,选择排序
6.动态规划和贪心算法的分治法的相同和区别
7.动态规划,贪心算法
8.词法分析器
也叫扫描器,是指将我们编写的文本代码流解析为一个一个的极好,分析得到的记号以供后续语法分析使用
9.java和c的区别
c语言是底层语言,java可以看作c上再封装起来的一种语言。
就像一座高塔一样,c语言更像砖块沙子等基础的东西,java可以看作砖块和砂石这些组合起来的一面可以搬来搬去的墙
10.四色定理
每个平面地图都可以只用四种颜色来染色,而且没有两个临界的区域颜色相同。
其本质是在平面或者球面无法构造五个或者五个以上两两连接的区域。
11.指针变量占几个字节
占四个,32位编译器下4个,64位编译器8个
12.纯函数和虚函数,抽象函数
纯函数,不依赖于且不改变它作用域之外的变量状态的函数
虚函数,没有实现的,可以由子类继承并且重写的函数
抽象函数,规定其非虚子类必须实现的函数必须被重写
13.局部变量和全局变量可以同名嘛?
可以,当局部变量和全局变量同名,在函数内引用这个变量,是局部变量,除非特别指明
14.面向对象程序设计的三个基本特征
封装,继承,多态
封装:把客观事物封装成抽象类
继承:可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对功能进行扩展
多态:向不同对象发送同一个消息,不同对象在接收时产生不同行为
15.迷宫生成算法
递归回溯即深度优先算法
16.平衡二叉树高度差
空树或者,左右两个字数的高度差的绝对值不超过1,左右子树也是平衡二叉树
17.指针和引用
指针:是一个变量,存储的是一个地址
引用:和原来的变量是一个东西,只不过时原变量的另一个别名
引用不可以为空,当被创建,必须初始化,而指针可以是控制,任何时候可以初始化
引用只能一级,指着可以多级
18.栈的原理
先入后出
19.弗洛伊德算法
求最短路径
20.heap和stack的概念和区别
heap是堆,stack是栈
stack的空间由操作系统自动分配和释放,heap需要手动申请和释放,heap常用new关键字来分配
stack空间有限,heap空间有很大的自由区间
21.类
类:类定义了事物的属性和它可以做到的(它的行为)。一个类的方法和属性被称为“成员”。一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例
22.宏定义与操作符的区别?
宏定义是C++的预处理命令之一,它是一个替换操作,不做计算和表达式求解,不占内存和编译时间
计算机网络
1.ip-mac/ip到物理地址的转变/arp协议
使用arp协议,中文名是地址解析协议,在TCP/IP网络环境下,ARP协议负责将32位的IP地址转换为对应的48位物理地址(MAC地址),实现IP地址到MAC地址的解析。
2.ipv6-ipv4的区别
ipv4的地址位是32,ipv6的地址位是128
ipv6有更小的路由表,地址分配一开始就遵循聚类原则,使得路由器能在路由表中使用一条记录表示一片子网,大大减少了路由器中路由表的长度,提高了路由器的转发数据包速度,增强了组播支持以及对流的支持。
ipv6比ipv4更安全,在使用ipv6的网络中的用户可以对网络层的数据进行加密并且对ip报文进行校验
3.短信和微信的区别
短信--通讯--指电话,电报--通过通讯网络从a-b,主要由电子设备系统和无线电组成,传输和处理的信号是模拟的
微信--通信--仅指数据通信,即通过计算机网络系统和数据通信系统实现数据的端到端传输
4.b/s结构基本原理
客户端的浏览器通过url访问web服务器,web服务器请求数据库服务器,并将得到的结果用html形式返回客户端。
5.物联网和云计算的关系
物联网是向物理世界的延申,云计算是基于物联网it资源的使用和交互模式。两者是一个优势互补的关系。
6.报文握手--三次握手
报文握手是网络通信中双方建立连接的关键步骤,其中包括三次握手过程。首先,发起方发送请求报文,其次接收方收到后回复确认报文;最后,发起方再发送一个确认报文,确保双方连接建立成功。这一过程确保了通信的可靠性和安全性。
7.tcp/udp,传输层协议
TCP/UDP是传输层的两种主要协议。TCP提供可靠的、面向连接的通信,确保数据完整无误;
而UDP则是无连接的、不可靠的通信,速度快但可能丢失数据。两者各有优缺点,适用于不同场景。
8.蓝军和白军解释没有可靠通信
不停的在发送,收到,请确认
9.带宽
在计算机系统中,用带宽作为标识总线和内存性能的指标之一
总线带宽:指的是总线在单位时间内可以传输的数据总量内存带宽:指的是内存总线所能提供的数据传输能力
10.云计算
云计算是基于互联网的计算方式,用户可按需获取共享的计算资源,如网络、服务器、存储等,无需管理底层设施,实现便捷高效的计算服务
11.信号量克服忙等问题
进程如果不能进入互斥区,则会一直原地等待。这个时候通过信号量将处理及释放给其他进程
12.以太网,无线局域网的发送数据是否确认
以太网不需要,无线局域网要
因为无线局域网的mac协议不进行碰撞检测,以太网有线网络中很容易实现碰撞检测
13.香农定理和奈奎斯特定律(奈氏准则)
香农定理:
给出了信道信息传递速率的上限和信道信噪比以及带宽的关系
奈奎斯特定律:(香农采样定理)
提供了一种计算信道极限速率的方法,也揭示了信息传输速率与信道带宽之间的基本关系
14.tcp/ip协议可以说成3层,4层,5层,怎么理解
TCP/IP协议可理解为不同层次的通信模型。三层指网络层、传输层和应用层,关注核心通信机制;四层则加入数据链路层,关注数据在链路中的传输;五层再细分网络层为网络接口层和网络层,更细致地描述数据如何接入网络。这些层次共同协作,确保数据的准确传输。
15.广域网和局域网的主流技术
广域网,通常跨很大的物理范围,能连接多个城市或者国家
通信子网主要使用分组交换技术
局域网,是指在某一区域内由多台计算机互联成的计算机机组,可以实现文件管理,打印机共享等功能
16.交换机,路由器,网关的概念
交换机负责数据包在局域网内的转发,确保数据准确送达指定设备;路由器连接不同网络,选择最佳路径转发数据包,实现跨网络通信;网关是不同网络间通信的门户,可以转换协议,促进数据交流。三者共同协作,保障网络畅通无阻。
17.网卡的功能
网卡是计算机与局域网之间的桥梁,负责数据的封装与解封、链路管理以及编码与译码,确保数据在局域网中的准确传输,并实现与计算机之间的串行/并行转换,是网络连接的关键组件。
杂项
1.普适计算
通过在日常环境中广泛部署微笑的计算设备,人们能够在任何时间和任何地点获取并且处理信息,计算最终将和环境融为一体。
面向对象
1.重载
同名函数,参数不同,调用的结果不同
2.类
public class student
对象: student aa
3.构造函数
可以用来进行类的初值快速赋予
4.const/常函数成员
只读不写,可以不加,加了更安全,防止乱改数据
加上之后他就不能修改数据
5.静态成员
static
加上绑定类,一般不绑定对象
它们属于类而不是实例,所有该类的实例共享同一个类变量的值
6.派生
把studem类,细分成本科生和研究生本科生和研究生也是学生,是学生的子类,学生是父类,也叫基类或者超类
所谓派生,是相对于父类而言的。
所谓继承,是相对子类而言的
子类除了父类的特点,也可以自己添加新的
7.protect与继承
保护
用来继承的
private的属性不会继承,protect可以,且不能公开访问
子类不能继承构造函数,只能调用
继承的子类的构造函数
如果没有参数,则会先调用父类再调用子类
有参数,则需要再后面多加一些东西
视频
8.多态
c++有三种方法
重载,隐藏,覆盖,也就是c++的多态
重载就是同名函数不同参数
隐藏就是子类和父类有同名函数,参数不重要,父类的会被隐藏
c++的多态大部分都依赖于指针
1.父类的指针可以指向子类,子类的指针不能指向父类但父类指向子类后,也只能调用父类中的方法
不过用virtual关键字可以进行多态的表现,即,一个父类指针指向不同的子类,产生的函数也不同
9.抽象类
10.总结
11. 什么是封装
信息隐蔽
四种级别
- public:对外公开,访问级别最高
- protected:只对同一个包中的类或者子类公开
- 默认:只有当父类和子类在同一个包内时,子类才能继承父类中默认访问修饰符(也就是没有修饰符)的方法和变量。如果子类和父类不在同一个包内,这些成员对子类不可见。
- private:不对外公开,只能在对象内部访问,访问级别最低
12.数据库判断好不好
1.冗余
2.增删改查有没有异常
为啥有问题可能是数据依赖关系的问题
java处理
1.math类
math类有很多参数可以调用,都是和数学有关的,比如你可以math.cos
math.sin
math.atan(反正切)
math.PI
还有个强制转化的方法:xxxvalue(数据类型) xxx是前缀,intvalue就是转化成int类型的
比较函数 comparedto 返回bool int 3小于a,返回1 等于0 大于-1
调用的话,int a=5 a.comparedto(3);
tostring()强制转化成字符串类型
随机数,math.random()random随机返回0-1的值,可以用*+-/等手段放大倍数
2.创建对象三步
对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字 new 来创建一个对象。
- 初始化:使用 new 创建对象时,会调用构造方法初始化对象。
3.构造器
赋初值
4.抽象类
可以包括抽象方法和非抽象方法
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
抽象类可以不包含抽象方法
是用来继承的