2020年第一场面试题汇总

  • 前言

    最近参加了一场线上的笔试,大概七条编程题,两条sql题,这边整理记录下,如果有错误希望大家可以指出交流下,或者有更好的方法也希望大家可以分享下。

  • 写一个验证掷骰子概率的程序,同时投掷2颗6面骰子n次,计算其和得到各数字的概率
/**
 * 写一个验证掷骰子概率的程序,同时投掷2颗6面骰子n次,计算其和得到各数字的概率。
 * @author Y
 * @date 2020/3/24
 */
public class Exercise1 {

    public static void main(String[] args) {
        fun(100);
    }

    public static void fun(int n) {
        Random random = new Random();
        //用一个map去存放运行记录
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            int num1 = random.nextInt(6)+1;
            int num2 = random.nextInt(6)+1;
            int sum = num1 + num2;
            map.put(sum,map.get(sum) == null ? 1 : map.get(sum)+1);
        }

        //遍历计算概率
        Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
        for (Map.Entry<Integer,Integer> entry:entries) {
            Integer key = entry.getKey();
            double sum = entry.getValue();
            double probability = sum / n;
            System.out.println("和为:"+key+" 出现的概率为:"+probability);
        }
    }

}
  • 编写程序解决以下问题:长度为N的数组,随机放入值为1-50中间的任意整数,请编写程序找出其中的偶数数字,并按照该数字在数组中出现次数从多到少排序输出。
/**
 * 编写程序解决以下问题:长度为N的数组,随机放入值为1-50中间的任意整数,
 * 请编写程序找出其中的偶数数字,并按照该数字在数组中出现次数从多到少排序输出。
 * @author Y
 * @date 2020/3/24
 */
public class Exercise2 {
    public static void main(String[] args) {
        int[] ints = generateArray(100);
        Map<Integer, Integer> map = new TreeMap<>();
        for (int i = 0; i < ints.length; i++) {
            int num = ints[i];
            map.put(num, map.get(num) == null? 1 : map.get(num) + 1);
        }

        //按照value升序输出
        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list,new Comparator<Map.Entry<Integer, Integer>>(){
            //重写compare方法
            @Override
            public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });
        System.out.println(list);

    }

    //生成数组
    public static int[] generateArray(int n) {
        if (n <= 0)
            throw new IllegalArgumentException("illegal param");
        int[] array = new int[n];
        Random random = new Random();
        for (int i = 0; i < n; i++) {
            array[i] = random.nextInt(50)+1;
        }
        return array;
    }

}
  • 编写程序列出一个目录下所有的文件,包括所有子目录下的文件,并打印出文件总数。
/**
 * 编写程序列出一个目录下所有的文件,包括所有子目录下的文件,并打印出文件总数。
 * @author Y
 * @date 2020/3/24
 */
public class Exercise3 {
    //这边在外面定义一个记录文件数的变量
    private static int sum = 0;

    public static void main(String[] args) {
        File file = new File("D:\\logs");
        fun(file);
        System.out.println(sum);
    }

    public static void fun(File file) {
        File[] files = file.listFiles();
        for (File file1:files) {
            if (file1.isDirectory()) {
                fun(file1);
            } else {
                System.out.println(file1.getName());
                sum++;
            }
        }
    }
}
  • 有一张班级学生表有3个字段分别为学生姓名:STUDENT、性别:GENDER、身高:STATURE。请编写程序为该班学生排座位,规则如下:

            1)教室共4排座位,每个座位都可以坐2人(有同桌)

            2)身高矮的同学坐在前排,身高高的坐后面

            3)同桌必须为同性别同学,若同性别人员为奇数,只允许最后一排位置一个人坐

         这题没写。。。。

  • 找出这样的数字:一个数字等于它的各分解项相加。示例数字 28可分解为1、2、4、7、14,1+2+4+7+14=28。同样,数字6分解为:1、2、3,1+2+3=6。用代码找出1-500以内的所有符合这样条件的数字。
/**
 * 找出这样的数字:一个数字等于它的各分解项相加。示例数字 28可分解为1、2、4、7、14,1+2+4+7+14=28。
 * 同样,数字6分解为:1、2、3,1+2+3=6。用代码找出1-500以内的所有符合这样条件的数字。
 * @author Y
 * @date 2020/3/24
 */
public class Exercise5 {

    public static void main(String[] args) {
        for (int i = 1; i < 500; i++) {
            int sum = 0;
            for (int j = 1; j <= i / 2; j++) {
                if (i % j == 0)
                    sum += j;

            }
            if (i == sum)
                System.out.println(i);
        }

    }
}
  • 请编写一个函数,能将字符串main-action-holder,转换为mainActionHolder
/**
 * 请编写一个函数,能将字符串main-action-holder,转换为mainActionHolder
 * @author Y
 * @date 2020/3/24
 */
public class Exercise6 {
    public static void main(String[] args) {
        String str = "main-action-holder";
        System.out.println(fun(str));
    }

    public static String fun(String str) {
        if (str == null || str.equals(""))
            throw new IllegalArgumentException("illegal param");
        String[] split = str.split("-");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < split.length; i++) {
            if (i == 0) {
                sb.append(split[i]);
            } else {
                //截取字符串
                sb.append(split[i].substring(0,1).toUpperCase()+split[i].substring(1));
            }
        }
        return sb.toString();
    }
}
  • 简单实现在线购买电影票,请重点考虑多人同时购买一个座位的情况,可以使用伪代码
/**
 * 简单实现在线购买电影票,请重点考虑多人同时购买一个座位的情况,可以使用伪代码
 * @author Y
 * @date 2020/3/24
 */
public class Exercise7 {
    private static int total_count = 100;
    private static int remain_count = 100;
    private static int sold_count = 0;


    public synchronized static void buyMovieTickets(int count) {
        if (count < 0 || count > remain_count)
            throw new IllegalArgumentException("illegal param remain count is"+ remain_count);
        remain_count = remain_count - count;
        sold_count = sold_count + count;
        String str = "电影票总量:"+total_count+" 已卖出:"+sold_count+" 剩余:"+remain_count;
        System.out.println(str);
    }

    public static void main(String[] args) {
        Thread t1 = new Thread() {
            @Override
            public void run() {
                buyMovieTickets(20);
            }
        };
        Thread t2 = new Thread() {
            @Override
            public void run() {
                buyMovieTickets(30);
            }
        };
        Thread t3 = new Thread() {
            @Override
            public void run() {
                buyMovieTickets(80);
            }
        };
        t1.start();
        t2.start();
        t3.start();
    }

}
  • 学生表:STUDENT(ID,USER_NAME)和考试表:EXAM(ID,USER_ID,SCORE)表,STUDENT表主键为ID字段,EXAM表中外键USER_ID为STUDENT的ID字段值,编写SQL查询每位学生的成绩,缺考的以0分处理(缺考的考试表中无记录)
SELECT student.user_name,IFNULL(exam.score,0) FROM student,exam WHERE student.id = exam.user_id
  • 已知用户表USER(ID,USER_NAME,AGE),通过sql语句查询表中相同年龄(AGE)存在两条以上记录的用户年龄及用户个数,并按照统计数量倒排序
SELECT age,count(id) FROM user GROUP BY age HAVING count(id) >=2 ORDER BY COUNT(id) DESC

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值