答案为笔者个人总结,如有错误欢迎指正!

一、选择题(可多选,请把正确选项写到括号内)

  1. 下列说法正确的是?(A、B、C)
  • A、Java程序的main方法必须写在类里面
  • B、Java程序中可以有多个main方法
  • C、Java程序中类名必须与文件名一样
  • D、Java程序的main方法中如果只有一条语句,可以不用{}(大括号)括起来
  1. 变量命名规范说法正确的是?(B)
  • A、变量由字母、下划线、数字、$符号随意组成
  • B、变量不能以数字作为开头
  • C、A和a在Java中是同一个变量
  • D、不同类型的变量,可以起相同的名字
  1. 下列javaDoc注释正确的是?(C)
  • A、/*我爱北京天安门*/
  • B、//我爱北京天安门*/
  • C、/**我爱北京天安门*/
  • D、/*我爱北京天安门*/
  1. String s = new String(“xyz”) ;请问以上语句创建了几个String Object?(B)
  • A、1个
  • B、2个
  • C、3个
  • D、4个
  1. Java中的final关键字有哪些用法?(A、B、C)
  • A、修饰类表示该类不能被继承
  • B、修饰方法表示方法不能被重写
  • C、修饰变量表示变量只能一次赋值以后值不能被修改(常量)
  • D、修饰接口表示接口不能被实现
  1. List,Set,Map是否继承自Collection接口?(C)
  • A、是
  • B、不是
  • C、部分是
  • D、没有继承关系
  1. 在Java中,如何跳出当前的多重嵌套循环?(B)
  • A、没有此命令
  • B、break
  • C、return
  • D、goto
  1. 如何判断两个Long型是否相等(假设L1、L2分别是两个Long型)?(B、C)
  • A、L1 == L2
  • B、L1.equals(L2)
  • C 、L1.longValue() == L2.longValue()
  • D、L1 == L2.longValue()
  1. 以下代码运行打印输出结果是?(B)
public void m1() {
        String a = null;
        try {
            a = a + "1";
            System.out.println(1);
            return;
        } catch (Exception e) {
            a = "2";
            System.out.println(2);
            e.printStackTrace();
        } finally {
            a = "3";
            System.out.println(3);
        }
        System.out.println(4);
        return;
    }
  • A、1
  • B、13
  • C、123
  • D、1234
  1. 在Java中,分布式锁主要常见实现包含哪些?(C、D)
  • A、synchronized关键字
  • B、基于Lock实现
  • C、基于Redis缓存实现
  • D、基于ZooKeeper实现

二、编程题

  1. 请编写Java单例模式的实现代码? 一种实现方法即可
//1.懒汉式,线程不安全
public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
//2.懒汉式,线程安全
public class Singleton {
    private static Singleton instance;

    private Singleton() {
    }

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
//3.饿汉式
public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return instance;
    }
}
//4.双检锁/双重校验锁
public class Singleton {
    private volatile static Singleton singleton;

    private Singleton() {
    }

    public static Singleton getSingleton() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}
//5.登记式/静态内部类
public class Singleton {
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    private Singleton() {
    }

    public static final Singleton getInstance() {
        return SingletonHolder.INSTANCE;
    }
}
//6.枚举
public enum Singleton {
    INSTANCE;

    public void whateverMethod() {
    }
}

摘自菜鸟教程


  1. 请在service中实现一个方法,用于比较和指定日期:2019-06-18 00:15:00 的结果;如果比指定日期早,则返回true,否则返回false
//1.使用LocalDateTime.now().isBefore(dateTime)或者LocalDateTime.now().isAfter(dateTime)比较
public class Test {
    private static final String PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static void main(String[] args) {
        System.out.println(testDate("2019-06-18 00:15:00"));
    }

    public static boolean testDate(String time) {
        LocalDateTime dateTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern(PATTERN));
        return LocalDateTime.now().isBefore(dateTime);
    }
}
//2.使用Duration.between(LocalDateTime.now(), dateTime).toMillis()比较
public class Test {
    private static final String PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static void main(String[] args) {
        System.out.println(testDate("2019-06-18 00:15:00"));
    }

    public static boolean testDate(String time) {
        LocalDateTime dateTime = LocalDateTime.parse(time, DateTimeFormatter.ofPattern(PATTERN));
        return Duration.between(LocalDateTime.now(), dateTime).toMillis() > 0;
    }
}
//3.使用new Date().before(dateTime)或者new Date().after(dateTime)比较
public class Test {
    private static final String PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static void main(String[] args) throws ParseException {
        System.out.println(testDate("2019-06-18 00:15:00"));
    }

    public static boolean testDate(String time) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(PATTERN);
        Date dateTime = simpleDateFormat.parse(time);
        return new Date().before(dateTime);
    }
}
//4.使用new Date().compareTo(dateTime)比较
public class Test {
    private static final String PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static void main(String[] args) throws ParseException {
        System.out.println(testDate("2019-06-18 00:15:00"));
    }

    public static boolean testDate(String time) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(PATTERN);
        Date dateTime = simpleDateFormat.parse(time);
        return new Date().compareTo(dateTime) < 0;
    }
}
//5.使用System.currentTimeMillis() - dateTime.getTime()比较
public class Test {
    private static final String PATTERN = "yyyy-MM-dd HH:mm:ss";

    public static void main(String[] args) throws ParseException {
        System.out.println(testDate("2019-06-18 00:15:00"));
    }

    public static boolean testDate(String time) throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(PATTERN);
        Date dateTime = simpleDateFormat.parse(time);
        return System.currentTimeMillis() - dateTime.getTime() < 0;
    }
}