一.专业问题:
1.数据库:
1>三大范式+bc范式
在设计数据库时,为了使其冗余较小、结构合理,设计数据库时必须遵循一定的规则。在关系型数据库中,这种规则被称为范数。范数是符合某一设计规则的总结。
第一范式(1NF)数据库表中的所有字段值都是不可分割的原子值
不符合第一范式举例:某数据是"中国的河北",这个是可以分割的,不符合原子性
第二范式(2NF)数据库表中的每一列都与主键完全相关,而不能只与主键的部分相关。
第三范式(3NF)数据库表中的每一列和主键直接相关,而不是间接相关。也就是属性不能传递依赖于主属性。
2>说两种优化数据库的方式
例如:
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.软件测试的基本流程:
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++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
封装,继承,多态。支持面向对象和面向过程的开发。
11.c和c++,java的区别?
c是纯过程,c++是对象加过程,java是纯面向对象的
12.java怎么处理对象分配和释放的?
java把内存分为堆和栈空间存储,在堆中new的空间不用自己收回,自动垃圾收回。
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.如果你能顺利的考入我校研究生,你对今后2年/3年的学习规划是什么?
2.你为什么选择我们学校?/为什么选择这座城市?
3.你本科成绩怎么样?本科排名怎么样?为什么这门课挂科了?
4.准备考研的过程中,你认为在哪个方面提升最大?
5.你在过去的编程中,遇到的最困难的事是什么?你是如何解决的?
6.本科毕设做的怎么样了?请详细说明。
7.你今后想从事什么方向的学习?为什么?
8.你怎么看待你今后研究的方向与发展前途?
9.你想研究的方向与你本科所学有什么相关吗?
10.你认为研究生相对于本科会有什么改变?
11.你想出去实习找工作,但实验室不允许,你会怎么做?
12.你认为一个计算机/软工专业的学生应该具备哪些能力?
13.你有没有读博士的打算?
14.你认为你最大的优势/缺点是什么?
15.你本科学的最好的一门课是什么?说一说你对这个课程一些自己的理解。
数据结构/os/计网 提前准备下
16.你学习过什么编程语言?你为什么学习该编程语言?
17.你是否有过竞赛获奖经历?
18.你高考成绩是多少(巨坑 !!!)