房极客笔试题目总结

758 阅读3分钟

只是总结,不确定正确答案

  1. 有一个方法check,作用是这样的:对于入参a, b, 如果有且仅有一个大于5, 就返回true, 否则返回 false;请实现。
public void hash(){
    if(a>5 && b<=5 || a<=5 && b>5){
        return true;
    }else{
        return false;
    }
}

2.分别实现冒泡排序和快速排序

冒泡排序:

    public void buubleSort(int[] arrays) {
        for (int count = arrays.length; count > 1; count--) {
            for (int i = 1; i < count; i++) {
                if (arrays[i - 1] > arrays[i]) {
                    int temp = arrays[i - 1];
                    arrays[i - 1] = arrays[i];
                    arrays[i] = temp;
                }
            }
        }
        return arrays;
    }

快速排序:

    public void quickSort(int[] array){
        sort(0,array.length, array);
    }

    public void sort(int begin, int end,int[] array) {
        if (end - begin < 2) return ;
        //确定轴点
        int pivot = pivotIndex(begin, end, array);

        //对左边子集排序
        sort(begin,pivot, array);
        //对右边子集排序
        sort(pivot + 1,end, array);
    }

    private int pivotIndex(int begin, int end,int[] array) {
        //备份begin位置元素
        int pivot = array[begin];
        end--;

        while (begin < end){
            while (begin < end){
                //先从end开始遍历
                if (array[end] > pivot) {
                    end--;
                }else{ //end元素<=begin元素 覆盖begin,掉头,从begin开始遍历
                    array[begin] = array[end];
                    begin++;
                    break;
                }
            }

            while (begin < end){
                if (array[begin] < pivot) {
                    begin++;
                } else { //begin元素大于或者等于end元素 覆盖end,掉头,从end开始遍历
                    array[end] = array[begin];
                    end--;
                    break;
                }
            }
        }
        array[begin] = pivot;
        return begin;
    }

3.Stream API 和 lambda

有以下的代码,问 1)代码能否编译通过?2)如果能编译通过,那么运行之后会输出什么?为什么?

    public void stream() {
        List<String> list = Arrays.asList("123", "123", "456","123");
        List<String> collect = list.stream().filter("456"::equals)
                .filter(k -> {
                    System.out.println(k);
                    return true;
                });
    }
1)能
2) 什么都不会输出.因为 Stream 有个特性就是惰性求值即没有终止操作的时候,流的中间过程是不会执行的

有以下的代码,问 1)代码能否编译通过?2)如果能编译通过,说一下运行逻辑以及运行之后会输出什么?

    public void stream(){
        List<String> list = Arrays.asList("abcd", "Ab1", "ABC2", "abE","abCD");
        list.stream().map(String::toUpperCase) 
                .filter("ABCDEFGH"::startsWith)
                .map(String::toLowerCase)
                .distinct()
                .forEach(System.out::println);
    }
1)能
2)将流里面的每一个串先转换为大写,过滤掉不包含ABCDEFGH这样连续的串,再将通过过滤的串转换为小写,去重,输出.
输出:abcd
#注意 "ABCDEFGH"::startsWith 表示不需要完全以ABCDEFGH开头,但是开头的串必须被其包含,如ABC、ABCD等等 而e-> e.startWith("ABCDEFGH")需要你的串是ABCDEFGH开头的.

4.查找文件用什么命令?查找文件内容用什么命令?

find 查找文件
grep 查找文件内容

5.Java中的String是否是线程安全的?为什么?

是线程安全的,String是final修饰的,是不可变的,所以是线程安全的。

6.有如下表,按10~20,20~30这样的年龄段和性别对数据分类.

name age gender
张三 11
里斯 14
王武 16
Lily 22

结果:

age gender 数量
10~20 1
10~20 1
20~30 1
20~30 1
SELECT	age_range,gender,COUNT(*) AS 数量 FROM(
SELECT CASE
WHEN age>=10 AND age<=20 THEN '1-10'
WHEN age>=21 AND age<=30 THEN '11-20'
END
AS age_range,gender FROM student) a
GROUP BY age_range,gender;
#注意这里a代表别名,必须存在.mysql要求每一个派生出来的表都必须有一个自己的别名!