以下SQL语句是否存在优化空间?如需优化,请指出优化方案。(10分)
- select id from t where num in(1,2,3) – 查询连续数字
in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
- select id from t where num/2=100
应尽量避免在where子句中字段进行计算,这将导致引擎放弃使用索引而进行全表扫描
可替换为:select id from t where num = 200
- select num from a where num in(select num from b)
很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
- select * from t
根据alibaba的开发规划,我们一般会指定需要的字段,避免全字段查询导致的效率低下
- 请简述其余数据库查询/更新优化方案。
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
- Linux命令
- 利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息?
ps -aux
…
- 查看以及编辑文件内容有哪些命令可以使用?
1、vi 文件名 #编辑方式查看,可修
2、cat 文件名 #显示全部文件内容
3、more 文件名 #分页显示文件内容
4、less 文件名 #与 more 相似,更好的是可以往前翻页
5、tail 文件名 #仅查看尾部,还可以指定数
6、head 文件名 #仅查看头部,还可以指定数
- 打包并压缩,以及解压命令怎么使用?
压缩: zip -r [目标文件名].zip [原文件/目录名]
解压: unzip [原文件名].zip
打包:tar -cvf [目标文件名].tar [原文件名/目录名]
解包:tar -xvf [原文件名].tar
三. 编程题
请将代码复制到文档对应题目内,并附上代码及运行结果截图,禁止使用类似contains()这种已提供的工具实现!
I. 一个整形数组里除了两个数字之外,其他的数字都出现了多次。请写出程序找出只出现一次的数字。(示例:[2,3,2,9,] 结果:[3,9])
public class Demo1 {
public static void main(String[] args) {
int[] a = {2,3,2,9};
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < a.length; i++) {
map.put(a[i], map.getOrDefault(a[i], 0) + 1);
}
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
int value = entry.getValue();
if (value == 1) {
System.out.println(entry.getKey());
}
}
}
}
"C:\Program Files\Java\jdk1.8.0_241\bin\java.exe" "-javaagent:G:\IntelliJ IDEA 2021.1.3\lib\idea_rt.jar=54832:G:\IntelliJ IDEA 2021.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_241\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar;F:\ideaProject\untitled1\out\production\untitled1" Demo1
3
9
Process finished with exit code 0
II. 给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
import java.util.*;
public class Demo2 {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1};
int target = 13;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < a.length; i++) {
map.put(i, a[i]);
}
Set<Integer> set = new HashSet<>();
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
int key = entry.getKey();
int value = entry.getValue();
for (Map.Entry<Integer, Integer> entry1 : map.entrySet()) {
int key1 = entry1.getKey();
int value1 = entry1.getValue();
int result = value + value1;
if (result == target) {
System.out.println(key + " " + key1 + " " + result);
set.add(key);
set.add(key1);
}
}
}
int[] result = new int[set.size()];
int i = 0;
for (Integer integer : set) {
result[i] = integer;
i++;
}
//冒泡排序
for (int j = 0; j < result.length; j++) {
for (int k = 0; k < result.length - 1; k++) {
if (result[k] > result[k + 1]) {
int temp = result[k];
result[k] = result[k + 1];
result[k + 1] = temp;
}
}
}
System.out.println(Arrays.toString(result));
}
}
"C:\Program Files\Java\jdk1.8.0_241\bin\java.exe" "-javaagent:G:\IntelliJ IDEA 2021.1.3\lib\idea_rt.jar=51495:G:\IntelliJ IDEA 2021.1.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_241\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_241\jre\lib\rt.jar;F:\ideaProject\untitled1\out\production\untitled1" Demo2
3 8 13
3 9 13
4 7 13
4 10 13
5 6 13
5 11 13
6 5 13
6 12 13
7 4 13
7 13 13
8 3 13
8 14 13
9 3 13
9 14 13
10 4 13
10 13 13
11 5 13
11 12 13
12 6 13
12 11 13
13 7 13
13 10 13
14 8 13
14 9 13
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Process finished with exit code 0