计算机/软件 考研专业面试

一.专业问题:

1.数据库:

 1>三大范式+bc范式

在设计数据库时,为了使其冗余较小、结构合理,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则被称为范数。范数是符合某一设计规则的总结。

第一范式(1NF)数据库表中的所有字段值都是不可分割的原子值

不符合第一范式举例:某数据是"中国的河北",这个是可以分割的,不符合原子性

第二范式(2NF)数据库表中的每一列都与主键完全相关,而不能只与主键的部分相关。

第三范式(3NF)数据库表中的每一列和主键直接相关,而不是间接相关。也就是属性不能传递依赖于主属性。

 

 2>说两种优化数据库的方式

  例如:

  1. 使用索引:索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显。
  2. 优化的查询语句:绝大多数情况下,使用索引可以提高查询的速度,但如果SQL语句使用不恰当的话,索引将无法发挥它应有的作用。
  3. 选取最适用的字段属性:  MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。例如,在定义邮政编码这个字段时,如果将其设置为CHAR(255),显然给数据库增加了不必要的空间,甚至使用VARCHAR这种类型也是多余的,因为CHAR(6)就可以很好的完成任务了。

 

3>数据库设计的基本步骤

按照规范设计的方法,同时考虑数据库及其应用系统开发的全过程,可以将数据库设计分为以下 6 个阶段:

1.需求分析阶段

需求分析是数据库设计的第一步,也是整个设计过程的基础,本阶段的主要任务是对现实世界要处理的对象(公司、部门及企业)进行详细调查,在了解现行系统的概况、确定新系统功能的过程中,收集支持系统目标的基础数据及其处理方法

需求分析是在用户调查的基础上,通过分析,逐步明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求

2.概念结构设计阶段

概念结构设计阶段是整个数据库设计的关键,通过对用户需求进行综合、归纳与抽象,形成一个独立于具体 DBMS 的概念模型

3.逻辑结构设计阶段

逻辑结构设计阶段将概念结构转换为某个 DBMS 所支持的数据模型,并将其性能进行优化

4.数据库物理设计阶段

数据库物理设计阶段是利用数据库管理系统提供的方法和技术,对已经确定的数据逻辑结构,以较优的存储结构、数据存取路径、合理的数据存储位置及存储分配,设计出一个高效的、可实现的无力数据结构

5.数据库实施阶段

在数据库实施阶段运用 DBMS 提供的数据语言(如 SQL)及宿主语言(如 C),根据逻辑设计和物理设计的结果建立数据库,编制与调试应用程序,组织数据入库,并进行试运行

6.数据库运行与维护阶段

数据库应用系统经过试运行后即可投入正式运行,在运行过程中需要不断对其进行调整、修改与完善

 

2.软件工程

1.软件开发模式举例

边做边改模型  瀑布模型 增量模型 迭代模型

https://blog.csdn.net/xi_gua_gua/article/details/53107283

2.软件测试的基本流程:

  1. 需求分析阶段:阅读需求,理解需求,分析需求点,参与需求评审会议。
  2. 测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围,进度安排,人力物力分配,整体测试策略的制定。
  3. 编写测试用例:适当的了解设计,搭建测试用例框架,根据需求和设计编写测试用例。
  4. 测试执行阶段:搭建环境准备数据,执行冒烟测试(预测试)然后进入正式测试(系统测试、回归测试、交叉测试、自由测试),bug管理直到测试结束。

 

3.软件开发一般分为五个阶段:
问题的定义规划
此阶段是软件开发与需求放共同讨论,主要确定软件的开发目标及其可行性
需求分析
在确定软件开发可行性的情况下,对软件需要实现的各个功能进行详细需求分析。需求分析阶段是一个很重要的阶段,这一阶段做的好,将为整个软件项目的开发打下良好的基础。“唯一不变的是变化本身”,同样软件需求也是在软件爱你开发过程中不断变化和深入的,因此,我们必须定制需求变更计划来应付这种变化,以保护整个项目的正常进行。
软件设计
此阶段中偶要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计、数据库设计等。软件设计一般分为总体设计和详细设计。还的软件设计将为软件程序编写打下良好的基础。
程序编码
此阶段是将软件设计的结果转化为计算机可运行的程序代码。在程序编码中必定要制定统一符合标准的编写规范。以保证程序的可读性、易维护性。提高程序的运行效率
软件测试
在软件设计完成之后要进行严密的测试,一发现软件在整个软件设计过程中存在的问题并加以纠正。整个测试阶段分为单元测试、组装测试、系统测试三个阶段进行。测试方法主要有白盒测试黑盒测试

 

 

4.软件测试方法

   1、从是否关心内部结构来看

(1)白盒测试:又称为结构测试或逻辑驱动测试,是一种按照程序内部逻辑结构和编码结构,设计测试数据并完成测试的一种测试方法。

(2)黑盒测试:又称为数据驱动测试,把测试对象当做看不见的黑盒,在完全不考虑程序内部结构和处理过程的情况下,测试者仅依据程序功能的需求规范考虑,确定测试用例和推断测试结果的正确性,它是站在使用软件或程序的角度,从输入数据与输出数据的对应关系出发进行的测试。

(3)灰盒测试:是一种综合测试法,它将“黑盒”测试与“白盒”测试结合在一起,是基于程序运行时的外部表现又结合内部逻辑结构来设计用例,执行程序并采集路径执行信息和外部用户接口结果的测试技术。

2、从是否执行代码看

(1)静态测试:指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。

(2)动态测试:是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。

3、从开发过程级别看

(1)单元测试:又称模块测试,是针对软件设计的最小单位----程序模块或功能模块,进行正确性检验的测试工作。其目的在于检验程序各模块是否存在各种差错,是否能正确地实现了其功能,满足其性能和接口要求。

(2)集成测试:又叫组装测试或联合,是单元测试的多级扩展,是在单元测试的基础上进行的一种有序测试。旨在检验软件单元之间的接口关系,以期望通过测试发现各软件单元接口之间存在的问题,最终把经过测试的单元组成符合设计要求的软件。

(3)系统测试:是为判断系统是否符合要求而对集成的软、硬件系统进行的测试活动、它是将已经集成好的软件系统,作为基于整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、人员、数据等其他系统元素结合在一起,在实际运行环境下,对计算机系统进行一系列的组装测试和确认测试。

 

3.编程语言

1.java和C++的区别 

  首先应该清楚,Java 是由 C++发展而来的,保留了 C++的大部分内容,其编程方式类似于 C++。但 Java 的句法更清晰、规模更小、更易学。Sun 公司曾对多种程序设计语言进行分析研究,取其精华去其糟粕,最终推出了 Java。Java从根本上解决了C++的固有缺陷,形成了新一代面向对象的程序设计语言。

Java 和 C/C++的相似之处多于不同之处,有 C 基础的读者,学习 Java 会更容易。相较而言,Java 的编程环境更为简单。在此,给大家列举以下Java与C/C++之间的区别之处。

一、指针

Java 没有指针的概念。在 C/C++中,指针操作内存时,经常会出现错误。而在Java中是没有指针这一概念的,因此也有效地防止了一系列由指针引起的操作层失误(如指针悬空所造成的系统崩溃),更有利于 Java 程序的安全。

二、多重继承

Java不支持多重继承。多重继承,它允许多父类派生一个子类。也就是说,一个类允许继承多个父类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。所以 Java 不支持多重继承,但允许一个类实现多个接口。可见,Java 既保留了 C++多重继承的功能,又避免了 C++的许多缺陷。

三、数据类型

Java 是完全面向对象的语言,所有方法和数据都必须是类的一部分。除了基本数据类型之外,其余类型的数据都作为对象型数据。例如,对象型数据包括字符串和数组。类将数据和方法结合起来,把它们封装在其中,这样每个对象都可实现具有自己特点的行为。而 C++将函数和变量定义为全局的,然后再来调用这些函数和变量,从而增加了程序的负担。此外,Java 还取消了 C/C++中的结构和联合,使编译程序更加简洁。

四、自动内存管理

Java 自动进行无用内存回收操作,不再需要程序员进行手动删除。Java 程序中所有的对象都是用 new 操作符建立在堆栈上的,这个操作符类似于 C++的“new”操作符。当 Java 中一个对象不再被用到时,无须使用内存回收器,只需要给它添加删除标签,无用内存的回收器便利用空闲时间在后台运行。而 C++中必须由程序释放内存资源,这就增加了程序员的负担。

五、操作符重载

Java 不支持操作符重载,操作符重载被认为是 C++的突出特征。操作符重载,就是把操作符(比如'+,-,*,/'这些运算符)赋于新的意义, 来完成更为细致具体的运算等功能。要实现操作符重载,就要使用操作符重载函数,而运用函数就肯定会存在各种限制条件以及特殊情况。特殊情况就需特殊处理,因此操作符重载还是比较繁琐的。

而根据上述二、三两点,我们可以了解到Java语言是走“简洁风”的,因此为了保持Java语言的简洁性,便毅然抛弃了操作符重载这一功能,但是为了避免舍本逐末的情况,Java语言还是可以通过类来实现操作符重载所具有的功能的。

六、预处理功能

C/C++在编译过程中都有一个预编译阶段,即预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。Java 允许预处理,但不支持预处理器功能,因为 Java 没有预处理器,所以为了实现预处理,它提供了引入语句(import),但它与 C++预处理器的功能类似。

七、缺省参数函数

Java 不支持缺省参数函数,而 C++支持 。在 C 语言中,代码组织在函数中,函数可以访问程序的全局变量。后来C++增加了类,提供了类算法,该算法是与类相连的函数,C++类方法与 Java 类方法十分相似。由于 C++仍然支持 C语言,所以 C++程序中仍然可以使用 C 的函数,结果导致函数和方法混合使用,使得 C++程序混乱,而Java 没有函数。作为一个比 C++更纯的面向对象的语言,Java 强迫开发人员把所有例行程序包括在类中。事实上,用方法实现例行程序可激励开发人员更好地组织编码。

八、字符串

C 和 C++不支持字符串变量,在 C 和 C++程序中使用“Null”终止符代表字符串的结束。在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的,在整个系统中建立字符串和访问字符串元素的方法是一致的。Java 字符串类是作为 Java 语言的一部分定义的,而不是作为外加的延伸部分。此外,Java 还可以对字符串用“+”进行连接操作。

九、goto 语句

“可怕”的 goto 语句是 C 和 C++的“遗物”,它是该语言技术上的合法部分。goto语句也称为无条件转移语句,通常与条件语句配合使用,用来实现条件转移, 构成循环,跳出循环体等功能。但是,在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使程序的可读性变差,增加程序调试的难度。 Java 不提供 goto 语句,虽然Java指定 goto 作为关键字,但不支持它的使用,这使程序更简洁易读。

十、类型转换

在 C 和 C++中,有时会出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在 C++中可将一个浮点值赋予整型变量,并去掉其尾数。Java 不支持 C++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。

 

  1. C++的特点是什么?

封装,继承,多态。支持面向对象和面向过程的开发。

11.c和c++,java的区别?

c是纯过程,c++是对象加过程,java是纯面向对象的

12.java怎么处理对象分配和释放的?

java把内存分为堆和栈空间存储,在堆中new的空间不用自己收回,自动垃圾收回。

  1. Java的特点

    1> 面向对象

2> 平台无关性

平台无关性的具体表现在于,Java 是“一次编写,到处运行(Write Once,Run any Where)”的语言,因此采用 Java 语言编写的程序具有很好的可移植性,而保证这一点的正是 Java 的虚拟机机制。在引入虚拟机之后,Java 语言在不同的平台上运行不需要重新编译。

3>简单性

Java 语言不使用指针,加入了垃圾回收机制,解决了程序员需要管理内存的问题,使编程变得更加简单。

 

4.数据结构:

1.顺序结构和链式结构的区别?

顺序结构是指内存连续的存储单元进行存储,而链式结构是指 内存不连续的结构,通过一个节点指向另外一个节点的地址。

2.栈和队列的区别?

栈是先进后出的特殊线性表,队列是先进先出的线性表。

3.复杂度是什么?

复杂度包括时间复杂度和空间复杂度,用来评价一个算法的好坏。

4.头节点的作用是什么?

头节点是指向初始地址的一个节点,它本身数据段没有内容,通过它可以标识这个链表。

5介绍以下各种树

树,二叉树:有左右子树的区分和度不超过2.

二叉排序树:左子树均小于根,根均小于右节点。。

线索二叉树:设置两个标识标记左右指针指向的是孩子还是前躯节点。

平衡二叉树:左右子树高度差绝对值小于等于1。

哈夫曼树:压缩用的。权值大小排列。

完全二叉树:只能从右边为空。

 

 

6.度为2的树和二叉树的区别:

二叉树有左右子树的定义。

7.树的存储结构

孩子链存储结构和双亲存储结构。

8.树的遍历

先序中序后序三种。递归实现。

9.图的存储

邻接矩阵和邻接表,是多对多的关系,分为有向图和无向图。

10线性表.查找有那几类?

直接查找和有序表的二分查找 

10.排序算法的介绍?

插入排序有直接插入和折半插入。都是在有序表里插入进去的。

交换排序:冒泡,快速:以一个数字划分两个区域,然后分别对两个区域继续划分,直到区间为一。注意快排是不稳定。

选择排序:简单的选择排序,堆排序

归并排序:将两个有序表归并到一个有序表。将两个有序表放到一起进行各个比较,比较完之后放回原来数组内。

11.什么是稳定的算法?

5. OS,操作系统 

   传送

二.前沿知识

  1. 你认为计算机/软工方向在未来5年发展最好的领域是什么?
  2.  你对人工智能有什么了解?强人工智能可能实现吗?
  3.  什么是机器学习?讲讲具体的算法。
  4.  什么是大数据?你接触到的最大的数据有多大?
  5.  什么是数据挖掘?
  6.  大数据和机器学习之前有什么联系?
  7.  什么是云计算?
  8.  什么是深度学习?

 

三.生活问题

1.如果你能顺利的考入我校研究生,你对今后2年/3年的学习规划是什么?

2.你为什么选择我们学校?/为什么选择这座城市?

3.你本科成绩怎么样?本科排名怎么样?为什么这门课挂科了?

4.准备考研的过程中,你认为在哪个方面提升最大?

5.你在过去的编程中,遇到的最困难的事是什么?你是如何解决的?

6.本科毕设做的怎么样了?请详细说明。

7.你今后想从事什么方向的学习?为什么?

8.你怎么看待你今后研究的方向与发展前途?

9.你想研究的方向与你本科所学有什么相关吗?

10.你认为研究生相对于本科会有什么改变?

11.你想出去实习找工作,但实验室不允许,你会怎么做?

12.你认为一个计算机/软工专业的学生应该具备哪些能力?

13.你有没有读博士的打算?

14.你认为你最大的优势/缺点是什么?

15.你本科学的最好的一门课是什么?说一说你对这个课程一些自己的理解。

    数据结构/os/计网 提前准备下

16.你学习过什么编程语言?你为什么学习该编程语言?

17.你是否有过竞赛获奖经历?

18.你高考成绩是多少(巨坑 !!!)

 

 

 

 

 

 

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
计算机研究生面试是一个相对较重要的环节,能够展示我们的综合能力和潜力。在面试中,我们需要准备一些常见的相关知识和技巧。 首先,我们需要对计算机的基本概念和原理有一定的了解。我们要熟悉计算机的组成结构和工作原理,了解常见的计算机体系结构和运算方式,掌握计算机操作系统、数据库和网络等相关知识。 其次,我们需要了解C和C++两种编程语言。C语言是一种非常常用且基础的编程语言,掌握C语言的基本语法和常见代码结构是必要的。对于C++语言,我们要了解其面向对象的概念和相关特性,包括类、对象、继承、多态等。此外,了解C和C++的区别也是面试中常问的问题,因此需要做好相关准备。 除了语言本身,我们还需熟悉常用的数据结构和算法。了解线性表、树、图等数据结构的特性和应用场景,熟悉各种排序和查找算法,并能够分析其时间和空间复杂度。在面试中,可能会有相关的问题和编程题目,需要能够灵活运用所学知识解决问题。 在面试过程中,我们还应展示自己的项目经验和实践能力。通过介绍自己在学习过程中进行的项目或者实习经历,可以展示自己的独立思考能力、解决问题的能力以及团队合作精神。 总之,在计算机研究生面试中,我们需要全面准备,不仅要有扎实的基础知识,还需有丰富的实践经验和解决问题的能力。通过积极学习和实践,我们可以提高自己的竞争力,为面试取得好的结果做好准备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值