目录
一、选择题
二、编程题
2.1扑克牌大小
2.2完全数计算
一、选择题
1.在关系型是数据库中,有两个不同的事务同时操作数据库中同一表的同一行,不会引起冲突的是:
A. 其中一个DELETE操作,一个是SELECT操作
B. 其中两个都是UPDATE
C. 其中一个是SELECT,一个是UPDATE
D. 其中一个SELECT E. 其中一个是DELETE,另一个是UPDATE
F. 两个都是DELETE
当要删除的记录在数据库中不存在的时候,是不会报错的。
所以正确答案是 F
2.计算每位学生的多学科加总成绩的SQL是_____
A. select sum(score) as total,stud_name from [成绩表](nolock)
B. select count(score) as total,stud_name from [成绩表](nolock)
C. select sum(score) as total,stud_name from [成绩表](nolock) group by stud_name
D. select count(score) as total,stud_name from [成绩表](nolock) group by stud_name
从成绩表中搜索from [成绩表](nolock)
查询学科总成绩则需要按照学生名字来分组 group by stud_name
则检索就是select count(score) as total,stud_name
所以正确答案是 C
3.以下哪个不是与Mysql服务器相互作用的通讯协议()
A. TCP/IP
B. UDP
C. 共享内存
D. Socket
MySQL实现了四种通信协议 :
TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接模块Unix Socket协议,这个通常我们登入MySQL服务器中使用这个协议,因为要使用这个协议连接MySQL需要一个物理文件,文件的存放位置在配置文件中有定义,值得一提的是,这是所有协议中最高效的一个。
Share Memory协议,这个协议一般人不知道,肯定也没用过,因为这个只有windows可以使用,使用这个协议需要在配置文件中在启动的时候使用–shared-memory参数,注意的是,使用此协议,一个host上只能有一个server,所以这个东西一般没啥用的,除非你怀疑其他协议不能正常工作,实际上微软的SQLSever也支持这个协议
Named Pipes协议,这个协议也是只有windows才可以用,同shared memory一样,使用此协议,一个host上依然只能有一个server,即使是使用不同的端口也不行,Named Pipes是为局域网而开发的协议。内存的一部分被某个进程用来向另一个进程传递信息,因此一个进程的输出就是另一个进程的输入。第二个进程可以是本地的(与第一个进程位于同一台计算机上),也可以是远程的(位于联网的计算机上)。正因为如此,假如你的环境中没有或者禁用TCP/IP环境,而且是windows服务器,那么好歹你的数据库还能工作。使用这个协议需要在启动的时候添加–enable-named-pipe选项
所以正确答案是 B
4.关系的键与完整性 公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是()
A. 1:1联系
B. m:1联系
C.1:m联系
D. m:n联系
一个部门对应的是多个职员,一个职员对应一个部门,所以实体部门和职员间的联系是1:m联系。
所以正确答案是 C
5.设有两个事务T1,T2,其并发操作如下所示,下面评价正确的是()
A. 该操作不能重复读
B. 该操作不存在问题
C. 该操作读"脏"数据
D. 该操作丢失修改
这两个事务的问题出在,原本两个事务的目的是T1先把A的值加10,A变为110,。然后T2把A的值再减10,即A变回100。
但是根据题目中的执行顺序,A的值变为90,即T2的修改覆盖了T1的修改,这种现象叫做丢失修改。
所以正确答案是 D
6.mysql 数据库有选课表 learn(student_id int,course_id int),字段分别表示学号和课程编号, 现在想获取每个学生所选课程的个数信息,请问如下的 sql 语句正确的是()
A. select student_id,sum(course_id)from learn
B. select student_id,count(course_id)from learn group by student_id
C. select student_id,count(course_id)from learn
D. select student_id,sum(course_id)from learn group by student_id
获取每个学生所选课程的个数信息 select student_id,sum(course_id)
从课程表中检索from learn
课程个数信息需要通过分组 group by student_id
所以正确答案是 B
7.如果事务T获得了数据项Q上的排它锁,则T对Q______。
A. 只能读不能写
B. 只能写不能读
C. 既可读又可写
D. 不能读不能写
排它锁意味着只有T能对Q进行操作,其他的事务都不可以对Q进行操作。
所以正确答案是 C
8.在关系模型中,实现“表示了两个关系之间的相关联系”的约束是通过()
A. 候选键
B. 主键
C. 外键
D. 超键
超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键 候选键(candidate key):不含有多余属性的超键称为候选键 主键(primary key):用户选作元组标识的一个候选键程序主键。外键(foreign key)实现“表示了两个关系之间的相关联系”的约束
所以正确答案是 C
9.关系的键与完整性 学生关系模式S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性“年龄”,可选用的SQL语句是()
A. ALTER TABLE S DROP Age
B. ALTER TABLE S ‘Age’
C. UPDATE S Age
D. DELETE Age from S
删除属性使用的关键字是drop,更改表使用的是alter,所以是 ALTER TABLE S DROP Age
所以正确答案是 A
10.下列选项中,不属于SQL约束的是:
A. UNIQUE
B. PRIMARY KEY
C. FOREIGN KEY
D.BETWEEN
unique是不能重复独一无二的约束,primarykey是主键约束,foreignkey是外键约束,between是where语句中的操作符 BETWEEN ... AND会选取介于两个值之间的数据范围。
所以正确答案是 D
二、编程题
2.1扑克牌大小
扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):) 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 输入两手牌,两手牌之间用“-”连接,每手牌的每张牌以空格分隔,“-”两边没有空格,如:4 4 4 4-joker JOKER 请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR
首先我们要把两组牌分割,然后再分别把两组牌中的每张牌都分割。
然后第一种情况就是两组排中有一组是joker JOKER,那么就直接输出即可。
第二种情况就是两种牌长度相等,这其中有两种情况,就是当有一组牌是JOKER那么比其他所有牌都大所以直接输出,除他之外就是joker,也是直接输出。然后其次就是比较两组牌的第一个元素,哪个大就输出哪一个。
第三种情况就是一组有炸弹时,一组有炸弹另一组正常并且非王炸,则直接输出炸弹那一组。
剩下的情况就是不合法情况输出ERROR即可。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String[] s = str.split("-");
String[] s1 = s[0].split(" ");
String[] s2 = s[1].split(" ");
String str2 = "34567891JQKA2";
if(s[0].equals("joker JOKER")||s[1].equals("joker JOKER")){
System.out.println("joker JOKER");
}else if(s1.length==s2.length){
if(s[1].equals("JOKER")||s[0].equals("JOKER")){
System.out.println("JOKER");
return;
}else if(s[1].equals("joker")||s[0].equals("joker")){
System.out.println("joker");
return;
}
int num1 = str2.indexOf(s1[0].charAt(0));
int num2 = str2.indexOf(s2[0].charAt(0));
if(num1>num2){
System.out.println(s[0]);
}else{
System.out.println(s[1]);
}
}else if(s2.length==4){
System.out.println(s[1]);
}else if(s1.length==4){
System.out.println(s[0]);
}else{
System.out.println("ERROR");
}
}
}
2.2完全数计算
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。 它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。 例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
创建嵌套循环,在第一层循环遍历小于n大于等于2的每个数,嵌套的循环用于将i的真因子全部想加起来。然后判断加起来的真因子和i是否相等,相等就有一个完全数。
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count = 0;
for (int i = 2; i <= n; i++) {
int sum = 1;
for (int j = 2; j <=i/2; j++) {
if(i%j==0){
sum+=j;
}
}
if(sum == i){
count++;
}
}
System.out.println(count);
}
}