- MySQL实现多表更新
UPDATE a SET a.name = b.name from a,b where a.age = b.age; 或者 UPDATE a SET a.name = b.name from a join in b on a.age = b.age;
- Switch 怎么判定字符串?
通过将需要判定的字符串内容封装到一个枚举类中,然后调用枚举的属性.这里其实是错误的.现在可以直接使用字符串进行swicth判断.
- jar包和war包的区别?
war包
:是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。
jar包
:通常是开发时要引用的通用类,打成包便于存放管理。简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。
- 通过以下数据表返回各科成绩都大于80分的学生?
name course score 张三 语文 75 张三 数学 81 李四 语文 80 李四 数学 82 王五 语文 81 王五 数学 85 王五 英语 65
- 第一种方法:先查询出一个有至少一科成绩小于80分的学生的去重临时表
(select distinct s.name from list s where s.score<80;
)
然后在全表的去重学生查询中排除掉这个临时表的数据
(select distinct l.name from list l where l.name not in(select distinct s.name from list s where s.score<80);
)
或者
(select distinct l.name from list where not exists(select 1 from list s where s.score<80 and s.name = l.name);
).关于exists及not exists的用法,以前的理解一直很模糊并不清楚怎么用.通过这个方法,可以加深理解.
https://www.cnblogs.com/beijingstruggle/p/5885137.html
配合这个链接方便理解其中的定义.- 第二种方法:
select distinct l.name from list l group by l.name having(min(l.score)>80);
- 第三种方法:
SELECT D.name FROM ( SELECT S.name,S.score AS ITEM1,S1.score AS ITEM2,S2.score AS ITEM3 FROM Student S inner join Student S1 on S.name = S1.name and S.course <> S1.course inner join Student S2 on S.name = S2.name and S.course <> S2.course WHERE S.score>=80 and S1.score>=80 and S2.score>=80 ) D GROUP BY D.name
- 插入排序,并删除其中重复的数字
5,3,10,15,12,20,10,8,13,18
关于插入排序,我之前有一个理解错误的地方,可能是网上代码的理解错误.
在需要插入的数据对其前面有序数据的大小判定后,不是交换数据.而是将前一个的数据赋值给当前需要插入的数据.然后往前循环,不断将有序部分比该数据大的数据往后移动一位,当前循环结束后将该值插入到判定结束时的位置.
//插入排序
public static void sort(int[] arr, int l) {
for (int i = 1; i < l; i++) {//设定arr[0]为有序数组,从1位开始循环.
int temp = arr[i];//将i的值复制出来备用
int j = i - 1;//将有序数组的最大下标赋值复制出来用于循环
//并在循环结束后将i的值赋给循环最后j的j+1下标.
for (; j >= 0 && temp < arr[j]; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = temp;
}
System.out.println(Arrays.toString(arr));
}
这里顺便也想重新学习下归并排序.
- 以下代码的执行结果
(在父类构造器中引用它的两个方法,在子类构造器中引用它实现的两个方法).
主函数中创建一个子类对象.
public class FatherAndSon {
public static void main(String[] args) {
Father f = new Son();
}
}
class Father {
String FNAME = "Father name@" + this.getClass() + " ";
public Father() {
call();
print();
}
public void call() {
System.out.println("Father call:" + FNAME);
}
public void print() {
System.out.println("Father print:" + FNAME);
}
}
class Son extends Father {
String SNAME = "Son name@" + this.getClass() + " ";
public Son() {
call();
print();
}
public void call() {
System.out.println("Son call:" + SNAME + FNAME);
}
public void print() {
System.out.println("Son print:" + SNAME + FNAME);
}
}
输出结果:
Son call:nullFather name@class interview.Son
Son print:nullFather name@class interview.Son
Son call:Son name@class interview.Son Father name@class interview.Son
Son print:Son name@class interview.Son Father name@class interview.Son
这里父类构造器调用到子类call()方法后,SNAME变量是null,是因为父类中并没有这个成员变量.
- 1G的文件,每行一个词,每个词最多16个字节,内存为1M,返回出现频率最高的100个词.
- 关于switch 的default的执行情况。
- 以下这两段代码的区别?
short s = 1; s = s + 1 ; short s = 1; s += 1;
前一段会出现incompatible types的错误信息.第二段则不会出现错误.