目录
选择题
- 第一个delete删除成功,第二能够成功执行,只不过是没有删除数据
- 两个select也不会发生冲突
MySQL实现了四种通信协议
- TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接模块
- Unix Socket协议,这个通常我们登入MySQL服务器中使用这个协议,因为要使用这个协议连接MySQL需要一个物理文件,文件的存放位置在配置文件中有定义,值得一提的是,这是所有协议中最高效的一个。
- Share Memory协议,这个协议一般人不知道,肯定也没用过,因为这个只有windows可以使用,使用这个协议需要在配置文件中在启动的时候使用–shared-memory参数,注意的是,使用此协议,一个host上只能有一个server,所以这个东西一般没啥用的,除非你怀疑其他协议不能正常工作,实际上微软的SQL Sever也支持这个协议
- Named Pipes协议,这个协议也是只有windows才可以用,同shared memory一样,使用此协议,一个host上依然只能有一个server,即使是使用不同的端口也不行,Named Pipes 是为局域网而开发的协议。内存的一部分被某个进程用来向另一个进程传递信息,因此一个进程的输出就是另一个进程的输入。第二个进程可以是本地的(与第一个进程位于同一台计算机上),也可以是远程的(位于联网的计算机上)。正因为如此,假如你的环境中没有或者禁用TCP/IP环境,而且是windows服务器,那么好歹你的数据库还能工作。使用这个协议需要在启动的时候添加–enable-named-pipe选项
- 不能重复读:一个事务t1修改,另一个事务t2分别再t1修改前后读取数据,两次读取的数据值不一样
- 一个事务t1先修改值,然后另一个事务t2读取值,t1事务rollback回滚,这时t2就是读取脏数据
- 一个事务获取排他锁,对数据能够做任何操作,其他事务对该数据不能做任何操作
编程题
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //将求约数和求完全数放一起 Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int count=0; for (int i = 2; i <=n ; i++) { int sum=0; for (int j = 2; j*j <=i ; j++) { if(i%j==0){ if(i/j==j){ sum+=j; }else { sum+=j+i/j; } } } if(sum+1==i){ count++; } } System.out.println(count); } }
- 将求完全数和求约数放在一起算
import java.util.*; public class Main{ public static void main(String args[]){ String num[]=new String[2]; Scanner sc=new Scanner(System.in); String str=sc.nextLine(); num=str.split("-"); num[0]=num[0].replaceAll("10","1"); num[1]=num[1].replaceAll("10","1"); String s="34567891JQKA2"; String result=null; if(num[0].equals("joker JOKER") ||num[1].equals("joker JOKER")){ result="joker JOKER"; //因为王王炸最大 }else if(num[0].length()==num[1].length()){ //如果两个牌的长度一样 //可能是两个炸弹 那么比较谁的牌大就行 //可能是两个顺子,比较谁的第一种排大就行 //如果是个子,也是比较第一张排 //如果是对子,也是第一张排 if(num[0].length()==5){ int n1=s.indexOf( num[0].charAt(0))+s.indexOf( num[0].charAt(2))+s.indexOf( num[0].charAt(4)); int n2=s.indexOf( num[1].charAt(0))+s.indexOf( num[1].charAt(2))+s.indexOf( num[1].charAt(4)); if(n1>n2){ result=num[0]; }else { result=num[1]; } }else { //如果两个牌的长度一样 //可能是两个炸弹 那么比较谁的牌大就行 //可能是两个顺子,比较谁的第一种排大就行 //如果是个子,也是比较第一张排 //如果是对子,也是第一张排 if (s.indexOf((num[0].charAt(0))) > s.indexOf(num[1].charAt(0))) { result=num[0]; } else { result=num[1]; } } } //还需要比较炸弹跟别人的情况 else if(num[0].length()==7){ result=num[0]; }else if(num[1].length()==7){ result=num[1]; }else { //此时两个牌不是一种类型,且没有炸弹 result="ERROR"; } System.out.println(result.replace("1","10")); } }
- 第一个点就是关于怎么处理排之间的大小问题,用字符串来处理用一个字符在字符串的位置对应它牌的大小
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc=new Scanner(System.in); String str=sc.nextLine(); String[] pp=str.split("-"); String[] p1=pp[0].split(" "); String[] p2=pp[1].split(" "); String p="34567891JQKA2"; if(pp[0].equals("joker JOKER") || pp[1].equals("joker JOKER")){ System.out.println("joker JOKER"); }else if(p1.length==p2.length){ if(p.indexOf(p1[0].substring(0,1))>p.indexOf(p2[0].substring(0,1))){ System.out.println(pp[0]); }else{ System.out.println(pp[1]); } }else if(p1.length==4){ System.out.println(pp[0]); }else if(p2.length==4){ System.out.println(pp[1]); }else{ System.out.println("ERROR"); } } }
- 这种写法用split来讲空格去掉