贵州大学计算机考研复试机试面试辅导资料.docx
- 文档编号:12773443
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:57
- 大小:3.77MB
贵州大学计算机考研复试机试面试辅导资料.docx
《贵州大学计算机考研复试机试面试辅导资料.docx》由会员分享,可在线阅读,更多相关《贵州大学计算机考研复试机试面试辅导资料.docx(57页珍藏版)》请在冰点文库上搜索。
贵州大学计算机考研复试机试面试辅导资料
贵州大学计算机考研复试辅导资料
1第一章、综合专业问答题
1.1面向对象编程
定义一个抽象类和两个子类,分别求出圆形的面积和矩形的面积。
要求类中的变量必须是私有的,打印的规则是,如果是矩形,打印矩形的长宽和面积,如果是圆形,打印圆的半径和面积语言可以是java或者C++体现面向对象的特性。
基类:
BaseShap.java:
packagecn.liuning.test;
publicabstractclassBaseShap{
abstractdoublecalArea();
}
Circle.java:
packagecn.liuning.test;
publicclassCircleextendsBaseShap{
privatedoubler;//半径
publicCircle(doubler){
this.r=r;
}
@Override
doublecalArea(){
System.out.println("半径为:
"+this.r);
System.out.println("面积为:
"+3.14*this.r*this.r);
return0;
}
}
Rectangle.java:
packagecn.liuning.test;
publicclassRectangleextendsBaseShap{
privatedoublex,y;
publicRectangle(doublex,doubley){
this.x=x;
this.y=y;
}
@Override
doublecalArea(){
System.out.println("长为:
"+this.x+",宽为:
"+this.y);
System.out.println("面积为:
"+this.x*this.y);
return0;
}
}
测试Main函数:
packagecn.liuning.test;
publicclassTestMain{
publicstaticvoidmain(String[]args){
BaseShapcircle=newCircle(10);//圆形
circle.calArea();
BaseShaprectangle=newRectangle(4,5);//矩形
rectangle.calArea();
}
}
输出:
半径为:
10.0
面积为:
314.0
长为:
4.0,宽为:
5.0
面积为:
20.0
1.2SQL题
1.2.1SQL学习路线
数据库原理教材
网上练习SQL语句,牛客网有在线SQL练习部分
历年题目搞明白
1.2.2根据题意画出E-R图
练习题1:
(1)
练习题2:
(1)
1.2.3根据描述建表/写SQL
参考答案:
CREATETABLE`store_t`(
`store_id`bigint(20)NOTNULLAUTO_INCREMENT,
`store_name`varchar(50)DEFAULTNULLCOMMENT'仓库名',
`store_location`varchar(50)DEFAULTNULLCOMMENT'仓库地点',
PRIMARYKEY(store_id)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
CREATETABLE`goods_t`(
`goods_id`bigint(20)NOTNULLAUTO_INCREMENT,
`goods_name`varchar(50)DEFAULTNULLCOMMENT'物品名称',
`goods_price`varchar(50)DEFAULTNULLCOMMENT'单价',
PRIMARYKEY(goods_id)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
CREATETABLE`store_goods_re`(
`store_id`bigint(20)NOTNULL,
`goods_id`bigint(20)NOTNULL,
`num`int(11)DEFAULTNULLCOMMENT'出入库数量',
`added_time`datetimeDEFAULTNULLCOMMENT'添加时间',
constraintpkPRIMARYKEY(store_id,goods_id),
constraintfk1foreignkey(`store_id`)references`store_t`(`store_id`),
constraintfk2foreignkey(`goods_id`)references`goods_t`(`goods_id`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
1.3数据库原理
1.3.1什么是索引?
有没有使用过,了解哪些索引,如何进行索引优化?
文章:
上述结构,先以基本概念是什么引入,再逐层深入,面试官最想听到的是你有没有这个思路,对底层了不了解,因此整个目录要先回答上来,每个点回答概要,如果有深入问再进一步回答。
基本概念
索引是帮助MySQL高效查询数据的一种数据结构,在数据之外,数据库系统还维护着某种数据结构以满足特定的查找需求,这些数据结构以某种方式指向数据,这个数据结构就是所谓的索引。
索引的优势就是能够提高对数据的检索效率;劣势是索引会占据空间,对于表的更新操作同时也会更新索引。
创建及删除索引的命令就是create、alter、drop;
showindex可以查看在表上的索引。
createindexPersonIndexonPerson(LastName,FirstName)//创建普通索引
什么条件下使用索引?
因为索引虽然加快了查询速度,但索引也是有代价的:
索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。
一般两种情况下不建议建索引。
第一种情况是表记录比较少,例如一两千条甚至只有几百条记录的表,没必要建索引,让查询做全表扫描就好了。
至于多少条记录才算多,这个个人有个人的看法,我个人的经验是以2000作为分界线;超过2000条记录,可以酌情考虑建立索引。
第二种是索引的选择性较低;
所谓索引的选择性是指不重复的索引值与表记录数的比值,显然选择性的取值范围为(0,1],选择性越高的索引价值越大,因此性别列不适合建立索引,这是由B+Tree的性质决定的。
可以使用下面的语句得到这个列上的索引选择性:
SELECTcount(DISTINCT(title))/count(*)ASSelectivityFROMemployees.titles;
有一种与索引选择性有关的索引优化策略叫做前缀索引,就是用列的前缀代替整个列作为索引key,当前缀长度合适时,可以做到既使得前缀索引的选择性接近全列索引,同时因为索引key变短而减少了索引文件的大小和维护开销。
前缀索引兼顾索引大小和查询速度,但是其缺点是不能用于ORDERBY和GROUPBY操作。
1.3.2视图的作用是什么?
2014年
视图(子查询):
是从一个或多个表导出的虚拟的表。
具有普通表的结构,但是不保存数据。
使用户只关心它感兴趣的某些特定数据;
视图的好处:
1、在做报表的程序中,如果是内嵌的编码,用户需求有改动,查询更改了,就需要编译程序重新上线,而如果合理使用视图(还有存储过程),仅需要修改数据库即可立即生效。
2、简化操作,把经常使用的数据、查询定义为视图,比如多表关联的数据,sql很复杂,定义视图后select*fromview即可。
3、安全性和逻辑上的独立性,用户只能查询和修改能看到的数据,视图是虚拟表,不直接操作物理表,一定程度上提高了安全性。
实际:
除了特定的做报表的产品会用到视图,其他业务基本不使用视图,因为性能差,而且现在有个趋势,存储容量是廉价的,一般会设计的冗余,而不是完全满足关系型数据库的范式要求,基本在业务层解决关联问题。
注意视图跟提高查询速度无关,视图是子查询,有时候子查询并不高效。
1.3.3什么是关系型数据库?
关系型数据库的作用?
关系型数据库的应用范围很广泛,用于组织有一定关系的数据,基于统一的SQL标准进行查询,MySQL数据库几乎各行各业都在使用。
SQL的查询语法使得查询统计数据相对于非关系型数据库来说非常方便,尤其是功能强大的关联查询。
关系型数据库更容易与上层面向对象的语言相结合,Hibernate框架对关系型数据库支持的很好,能够实现上层语言的实体类到数据表的映射。
关系型数据库:
是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据。
关系模型是指用二维表的形式表示实体和实体间联系的数据模型。
常见的关系型数据库:
MySQL、Oracle、SQLServer等
非关系型:
redis、mongodb、es
关系型数据库的设计原则有以下几点,满足这些原则,可以提高数据库的存储效率、数据完整性和可扩展性。
1)命名规范化
在概念模型设计中,对于出现的实体、属性及相关表的结构要统一,反应到建表语句上,就是每个字段的类型、范围等要统一。
2)数据的一致性和完整性
在关系型数据库中可以采用域完整性、实体完整性和参照完整性等约束条件来满足其数据的一致性和完整性,反应到建表语句上就是非空约束、主键约束、外键约束等。
3)数据冗余
在数据库设计中要尽可能减少不必要的冗余。
4)范式理论
在关系数据库设计时,一般是通过设计满足某一范式来获得一个好的数据库模式,通常认为3NF在性能、扩展性和数据完整性方面达到了最好的平衡,因此,一般数据库设计要求达到3NF,消除数据依赖中不合理的部分,最终实现使一个关系仅描述一个实体或者实体间一种联系的目的。
1.3.4数据库设计的基本步骤。
(1)需求分析阶段:
需求收集和分析,得到数据字典和数据流图。
(2)概念结构设计阶段:
对用户需求综合、归纳与抽象,形成概念模型,用E-R图表示。
(3)逻辑结构设计阶段:
将概念结构转换为某个DBMS所支持的数据模型。
(4)数据库物理设计阶段:
为逻辑数据模型选取一个最适合应用环境的物理结构。
(5)数据库实施阶段:
建立数据库,编制与调试应用程序,组织数据入库,程序试运行。
(6)数据库运行和维护阶段:
对数据库系统进行评价、调整与修改。
1.3.5保障数据库安全性的常用方法和技术。
(1)用户标识、用户权限控制
该方法由系统提供一定的方式让用户标识自己的名字或身份。
每次用户要求进入系统时,由系统进行核对,通过鉴定后才能提供系统的使用权
与Linux的用户管理类似,不同用户的权限不一样,可操作的表不一样,对表可执行的操作也不一样,只有Root用户才拥有最高权限,其他用户则按需提供,目前最常用的安全性控制方法。
(2)视图机制
(3)备份机制
(4)审计日志
把用户对数据库的所有操作自动记录下来放入审计日志中,DBA可以利用审计跟踪的信息,重现导致数据库现有状况的一系列事件,找出非法存取数据的人,时间和内容等。
(5)数据加密
对存储和传输的数据进行加密处理,从而使得不知道解密算法的人无法获知数据的内容。
zip、md5、hash等。
1.3.6关系代数语言
SQL语句和关系代数需要找题目练习一下。
并交差,选择投影笛卡尔积连接。
几个符号要记住。
关系代数优化中指出,尽可能先做选择操作,使得关联时的集合要小。
笛卡尔积:
表示为:
RXS
等值连接非常常用,或者说后面的自然连接。
1.3.7关系代数例题
作业:
1.3.8范式理论
要掌握范式理论,需要从最开始的概念逐层深入理解。
多读几遍!
用例子模拟。
这个笔记不错,总结的,可以用来多读几遍。
函数依赖:
设R(U)是一个关系模式,U是R的属性集合,X和Y是U的子集。
对于R(U)的任意一个可能的关系r,如果r中不存在两个元祖,它们在X上的属性值相同,而在Y上的属性值不同,则称“X函数依赖Y”或者“Y函数依赖于X”,记作X→Y。
PS:
一个关系对应一张表,一行即为一个元组,一列即为一个属性。
函数依赖是最基本的一种数据依赖,也是最重要的一种数据依赖,函数依赖是属性之间的一种联系,体现在属性值是否相等。
由上面的定义可以知道,如果X→Y,则r中任意两个元祖,若它们在X上的属性值相同,那么在Y上的属性值也一定相同。
完全依赖的例子:
学生基本信息表R(学号,班级,姓名)。
假设不同的班级学号有相同的,班级内学号不相同。
则在R关系中,(学号,班级)->(姓名),但是(学号)->(姓名)不成立,(班级)->(姓名)不成立,所以姓名完全函数依赖于(学号,班级)。
例子:
{a,b}->{c}同时{a}->{c}或者{b}->{c},则{c}部分依赖于{a,b}。
闭包就是由一个属性直接或间接推导出的所有属性的集合。
求最小函数依赖集:
关系模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC}
求F的最小函数依赖集。
(1)单一化:
F={B->D,DG->C,BD->E,AG->B,ADG->B,ADG->C}
(2)去掉左边多余属性。
B->D保留
DG->C判断(DG)+=DG,不包含C,保留
BD->E:
判断(BD)+=BD,不包含E,保留
AG->B:
判断(AG)+=AG,不包含B,保留
ADG->B:
判断(ADG)+=ABCDG,包含B,或者说与AG->B等价,删除
ADG->C:
判断(ADG)+=ABCDG,或者说与DG->C等价,删除
所以结果是F={B->D,DG->C,BD->E,AG->B}
(3)对于F中每一个左端包含多个属性的X->A,选择X的每个子集Z,如果A属于Z的闭包,则用Z->A代替X->A
所以上述最终结果为:
F={B->D,DG->C,B->E,AG->B}
1.4SQL练习网站
关于SQL的练习
书上最基本的例题看懂,会写,着重于聚集函数的应用,关联查询(JOIN).
有基础之后再进行练习。
需要注意的是,有些源数据描述的不够清楚,不要把他理解复杂了,另外每道题目下面可以看讨论,讨论区有很多其他解法也可以学习。
SQL对于找工作来说几乎是必备的技能,提前学习下对自己以后的发展也是有帮助的。
希望大家做好笔记,形成自己的手册。
用云笔记:
印象、有道都可以,用word记录也可以。
举例子:
网易交互设计微专业的笔记。
在系统学习某个知识的时候,希望大家养成做笔记的习惯。
2第二章、历年机试真题
3
4
4.114年1
1、从键盘输入一个数字,判断是否是素数,如果是就打印出来,不是的话就打印后面的离这个数最近的素数输入14输出17,输入17输出17。
#include
#include
intjudgeFunc(intx){
intk=(int)sqrt(x);
intflag=1;
for(inti=2;i<=k;i++){
if(x%i==0){
flag=0;
break;
}
}
returnflag;
}
constintMAX=999999;
intmain(){
intx;
scanf("%d",&x);
intflag=judgeFunc(x);
if(flag==1){
printf("%d\n",x);
}else{
for(inti=x+1;i<=MAX;i++){
flag=judgeFunc(i);
if(flag==1){
printf("%d\n",i);
break;
}
}
}
return0;
}
4.211年
字符串合并之后去掉相同的再排序
如果在JAVA里,字符串操作比较简单,因为jdk封装好了很多方法。
如果是C里,考察字符处理,合并、删除重复字符、排序,一个题相当于三个题。
删除重复字符循环写法1
#include
#include
#defineMAX_LEN200
intmain(){
charch[MAX_LEN];
scanf("%s",ch);
intlen=strlen(ch);
for(inti=0;i for(intj=i+1;j if(ch[i]==ch[j]&&ch[j]! ='\0'){ //前移 for(intk=j;k ch[k]=ch[k+1]; } }else{ j++; } } } printf("%s",ch); return0; } 删除重复字符循环写法2 #include #include intmain(void) { chars[100]; inti,j,n,k; gets(s); n=strlen(s); for(i=0;i { k=i+1; for(j=k;j ='0';j++) if(s[j]! =s[i]) s[k++]=s[j]; s[k]='\0';//如果上述循环都等于s[i],则已经找到结尾。 } puts(s); } 特殊解法1: 一个整型变量32位,正好可以将状态标记压缩到一个整形变量里标识,因为所有的小写字母一共26个,如果是大写小写一起,用long型即可,注意此时位置需要做一下转变,'a'用第0位,'b'用第1位,'A'用0+26位,'B'用1+26位。 //比特位表示字母是否出现 importjava.util.*; publicclassMain{ publicstaticvoidmain(String[]args){ Scannersc=newScanner(System.in); Strings=sc.nextLine(); Stringres=""; intflag=0; for(inti=0;i inttemp=1<<(s.charAt(i)-'a'); if((temp&flag)==0){//第一次出现 res+=s.charAt(i); flag|=temp; } } System.out.print(res); } } 类似于hash的思像C语言类似于上述二进制的某一位来存储 #include #include usingnamespacestd; intmain() { stringstr; cin>>str; boolisRepeated[26]={false}; for(unsignedi=0;i { if(! isRepeated[str[i]-'a']) cout< //输出第一次出现的字符后将标志位置位 isRepeated[str[i]-'a']=true; } cout< } 4.312年1链表操作 #include #include typedefstructNode{ intnum; structNode*next; }Node,*LINK; Node*initLink(intarr[],intn){ Node*head=(Node*)malloc(sizeof(Node)); head->num=arr[0]; head->next=NULL; Node*tail=head; for(inti=1;i Node*p=(Node*)malloc(sizeof(Node)); p->num=arr[i]; p->next=NULL; tail->next=p; tail=tail->next; } tail->next=head;// returnhead; } Node*findAndDelete(Node*head,intx){ if(head==NULL) returnNULL; if(head->num==x) returnNULL; if(head->next==head) returnhead; Node*p=head; Node*q=head->next; while(q! =head){ Node*tmp=q->next; if(q->num==x){ p->next=tmp; free(q); }else{ p=p->next; } q=tmp; } returnhead; } voidoutputLink(Node*head){ if(head==NULL) return; Node*p=head->next; while(p! =head){ p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 贵州 大学计算机 考研 复试 面试 辅导资料