面试题-练习

以下SQL语句是否存在优化空间?如需优化,请指出优化方案。(10分)

  1. 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

  1. select id from t where num/2=100

应尽量避免在where子句中字段进行计算,这将导致引擎放弃使用索引而进行全表扫描

可替换为:select id from t where num = 200

  1. 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)

  1. select * from t

根据alibaba的开发规划,我们一般会指定需要的字段,避免全字段查询导致的效率低下

  1. 请简述其余数据库查询/更新优化方案。

尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。

尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

  1. Linux命令
  1. 利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进程的信息?

ps -aux

  1. 查看以及编辑文件内容有哪些命令可以使用?

1、vi 文件名 #编辑方式查看,可修

2、cat 文件名 #显示全部文件内容

3、more 文件名 #分页显示文件内容

4、less 文件名 #与 more 相似,更好的是可以往前翻页

5、tail 文件名 #仅查看尾部,还可以指定数

6、head 文件名 #仅查看头部,还可以指定数

  1. 打包并压缩,以及解压命令怎么使用?

压缩: 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值