栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每日一练(2)(持续更新)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日一练(2)(持续更新)

目录
  • DAY 11
    • 选择题
    • 编程题
  • DAY 12
    • 选择题
    • 编程题

DAY 11 选择题
  1. 假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?
    A:System.out.println(a.i);
    B:a.method1();
    C:A.method1();
    D:A.method2();
public class A
{
    public int i;
    static String s;
    void method1(){}
    static void method2(){}
}

答:C
解析:
静态成员和静态方法可以直接用 类名. 进行调用;其他的成员和方法需要进行实例化成为对象之后,由对象调用。

  1. 下面哪个选项没有实现 java.util.Map 接口?
    A:Hashtable
    B:HashMap
    C:Vector
    D:IdentityHashMap
    答:C
    解析:
    Hashtable、HashMap、IdentityHashMap 都实现了 Map 接口,其中 Hashtable 和 HashMap 的区别是一个是线程安全的,一个是线程不安全的。Vector 是实现了 List 接口,是一个线程安全的 List 。

  2. 有如下 4 条语句,以下输出结果为 false 的是?
    A:System.out.println(i01== i02);
    B:System.out.println(i01== i03);
    C:System.out.println(i03== i04);
    D:System.out.println(i02== i04);

Integer i01=59;
int i02=59;
Integer i03=Integer.valueOf(59);
Integer i04=new Integer(59);

答:C
解析:
行一:由于 59 在 -128 ~ 127 内,所以在自动装箱的时候,会返回IntegerCache[59 - (-128)];
行三:同行一
行四:因为有 new 关键字,所以开辟了一块新内存放置值为 59 的 Integer 对象。

  1. 如下代码的结果是什么?
    A:base
    B:basebase
    C:编译失败
    D:代码运行但没有输出
    E:代码运行但没有输出
class base {
    base() {
    System.out.print("base");
    }
}
public class Alpha extends base {
    public static void main( String[] args ) {
        new Alpha();
        //调用父类无参的构造方法
        new base();
    }
}

答:B
解析:
在执行 new Alpha(); 时,会先执行父类的构造方法,再执行相应子类的构造方法,所以此处会先打印 base ,在执行 new base(); 时,会直接调用无参构造打印 base,结果为 basebase 。

  1. Java表达式"13 & 17"的结果是什么?
    A:30
    B:13
    C:17
    D:1
    答:D
    解析:
    & 是位与运算符,将两个数字化成二进制数进行位运算,全为1则为1,否则为0;
    13:00000000 00000000 00000000 00001101
    17:00000000 00000000 00000000 00010001
    得: 00000000 00000000 00000000 00000001
    即为1

  2. 以下代码执行后输出的结果是?
    A:blockAblockBblockA
    B:blockAblockAblockB
    C:blockBblockBblockA
    D:blockBblockAblockB

public class Test
{
    public static Test t1 = new Test();
    {
         System.out.println("blockA");
    }
    static
    {
        System.out.println("blockB");
    }
    public static void main(String[] args)
    {
        Test t2 = new Test();
    }
}

答:A
解析:
执行先后顺序:
静态域:首先执行静态变量 public static Test t1 = new Test(); 创建了 Test 对象,执行构造块输出 blockA ;然后执行静态代码块,输出 blockB 。
主函数:Test t2 = new Test(); 创建 Test 对象,执行构造块,输出 blockA 。

  1. 下面哪些选项是正确的?
    A:>>是算术右移操作符
    B:>>是逻辑右移操作符
    C:>>>是算术右移操作符
    D:>>>是逻辑右移操作符
    答:AD
    解析:
    前者右移,高位补符号位;后者右移,高位补 0

  2. jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?
    A:抽象类可以有构造方法,接口中不能有构造方法
    B:抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
    C:一个类可以实现多个接口,但只能继承一个抽象类
    D:接口中可以有普通成员变量,抽象类中没有普通成员变量
    答:BD
    解析:
    · 抽象类:抽象类中可以有构造方法,可以存在普通属性、方法、静态属性和方法,也可以存在抽象方法。如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
    · 接口:在接口中只有方法的声明,没有方法体;接口中只有常量,因为变量默认会加上 public static final 。接口中的方法,被 public 来修饰,并且没有构造方法,也不能实例化接口的对象。接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法,则实现类定义为抽象类。

  3. 有关线程的叙述正确的是?
    A:可以获得对任何对象的互斥锁定
    B:通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
    C:线程通过使用synchronized关键字可获得对象的互斥锁定
    D:线程调度算法是平台独立的
    答:CD
    解析:
    暂无

  4. 以下语句返回值为 true 的是?

    A:a1== a2
    B:d1== d2
    C:b1== b2
    D:c1== c2
    答:AB
    解析:
    17 在 -128 ~ 127 之间,故执行的是 valueOf() 方法,所以 a1 和 a2 指向的是同一个对象。其他的都是 new 出来的对象,显然地址都不同。另外,int 类型与 Integer 类型比较时,先将 Integer 拆箱,再比较值,所以 d1 == d2 也为 true 。

编程题

leetcode 242
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例:
输入: s = “anagram”, t = “nagaram”
输出: true
输入: s = “anagram”, t = “nagaram”
输出: true

分析:
特殊情况:如果给的两个字符串长度不等,则一定不是字母异位词。
方法一:
首先,我们将给定的两个字符串转换成字符数组;
然后,给两个字符数组进行排序,排序完后比较两个数组内容是否相同,如果相同则返回 true ,反之返回 false 。

代码:

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        char[] arr1 = s.toCharArray();
        char[] arr2 = t.toCharArray();
        Arrays.sort(arr1);
        Arrays.sort(arr2);
        return Arrays.equals(arr1, arr2);
    }
}

方法二:
首先,维护一个长度为 26 的频次数组 table ,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t ,减去 table 中对应的频次,如果出现 table[i] < 0 ,则说明 t 中包含一个不在 s 中的额外字符,返回 false 。

代码:

class Solution {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) {
            return false;
        }
        int[] table = new int[26];
        for (int i = 0; i < s.length(); i++) {
            table[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            table[t.charAt(i) - 'a']--;
            if (table[t.charAt(i) - 'a'] < 0) {
                return false;
            }
        }
        return true;
    }
}
DAY 12 选择题
  1. 现有一变量声明为 boolean aa; 下面赋值语句中正确的是?
    A:aa=false;
    B:aa=False;
    C:aa=“true”;
    D:aa=0;
    答:A
    解析:
    Java 中 boolean 类型的值只有 false 和 true,关键字都是小写。

  2. 下列说法哪个正确?
    A:不需要定义类,就能创建对象
    B:对象中必须有数据域和方法
    C:数据域可以是基本类型变量,也可以是一个对象
    D:数据域必须是基本类型变量
    答:C
    解析:
    必须定义类后,才能创建对象;对象中有无数据域和方法,取决于它所属的类;数据域不一定是基本类型,也可以是引用类型。

  3. 已知如下类定义,如下哪句可以正确地加入子类中?
    A:private void fun( int n ){ //…}
    B:void fun ( int n ){ //… }
    C:protected void fun ( int n ) { //… }
    D:public void fun ( int n ) { //… }

class base {  
	public base (){ 
 	//... 
 	}  
 	public base ( int m ){ 
 	//... 
 	}  
 	public void fun( int n ){ 
 	//... 
 	} 
}  
public class Child extends base{  
 	// member methods  
}  

答:D
解析:
该题考查方法的重写,遵循两同两小一大原则:
子类方法名、参数类型与父类相同;
子类方法返回值类型小于等于父类方法返回类型;
子类方法抛出异常范围小于父类方法抛出异常范围;
子类方法访问权限大于父类方法访问权限。

  1. 下面这三条语句的输出结果分别是?
    A:is 1005, 1005 is, is 1005
    B:is 105, 105 is, is 105
    C:is 1005, 1005 is, is 105
    D:is 1005, 105 is, is 105
System.out.println(“is ”+ 100 + 5);
System.out.println(100 + 5 +“ is”);
System.out.println(“is ”+ (100 + 5));

答:D
解析:
行一:先是 "is " 则后面的内容会以字符串的形式进行拼接。
行二:先对 100 + 5 进行运算,然后与 “ is” 拼接。
行三:先算括号内,然后进行字符串拼接。

  1. 以下代码的输出的正确结果是?
    A:24
    B:16
    C:15
    D:8
public class Test {
    public static void main(String args[]) {
        String s = "祝你考出好成绩!";
        System.out.println(s.length());
    }
}

答:D
解析:
length() 方法是获取字符串长度,显然为 8 。

  1. 下列哪一个方法你认为是新线程开始执行的点,也就是从该点开始线程n被执行?
    A:public void start()
    B:public void run()
    C:public void int()
    D:public static void main(String args[])
    E:public void runnable()
    答:B
    解析:
    start() 方法是启动一个线程,此时线程处于就绪状态,还未执行;run() 方法才是线程开始执行的点。

  2. 下面哪一项不是加载驱动程序的方法?
    A:通过DriverManager.getConnection方法加载
    B:调用方法 Class.forName
    C:通过添加系统的jdbc.drivers属性
    D:通过registerDriver方法注册
    答:A
    解析:
    DriverManager.getConnection() 方法返回一个 Connection 对象,是用来获取连接的。

  3. String s=null; 下面哪个代码片段可能会抛出NullPointerException?
    A:if((s!=null)&(s.length()>0))
    B:if((s!=null)&&(s.length()>0))
    C:if((s==null)|(s.length()0))
    D:if((s
    null)||(s.length()==0))
    答:AC
    解析:
    首先,s = null; 因此只要调用了 s.length() 都会抛出空指针异常。
    && 和 || 运算符具有短路效果,前者如果运算符左边为 false ,右边的直接不执行了;后者如果运算符左边为 true,右边的直接不执行了。
    & 和 | 运算符则不具备短路功能,会检查每一个条件。

  4. 下列可作为java语言标识符的是?
    A:a1
    B:$1
    C:_ 1
    D:11
    答:ABC
    解析:
    Java标识符由数字,字母和下划线,美元符号组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字不能当作Java标识符。

  5. 下面有关 JAVA 异常类的描述,说法正确的有?
    A:异常的继承结构:基类为 Throwable,Error 和 Exception 。实现 Throwable, RuntimeException 和 IOException 等继承 Exception
    B:非 RuntimeException 一般是外部错误(不考虑Error的情况下),其可以在当前类被 try{}catch 语句块所捕获
    C:Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉
    D:RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须 被 try{}catch 语句块所捕获
    答:ABC
    解析:
    (借用牛客大佬的解析和图片)

    · Exception(异常) :是程序本身可以处理的异常。
    · Error(错误): 是程序无法处理的错误。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,一般不需要程序处理。
    · 检查异常(编译器要求必须处置的异常) : 除了Error,RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。
    · 非检查异常(编译器不要求处置的异常): 包括运行时异常(RuntimeException与其子类)和错误(Error)。

编程题

leetcode 268
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。

示例:
输入:nums = [3,0,1]
输出:2
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。

输入:nums = [0,1]
输出:2
解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。

分析:
方法一:
首先,我们先对给定的数组进行排序;
然后,让排好序的数组中的元素与其对应的下标进行比较,如果存在不同的,则返回该处的下标值,即为缺失的元素。如果全都相同,则返回数组的长度,也就是 0 ~ n 缺少第 n 个数组。

代码:

class Solution {
    public int missingNumber(int[] nums) {
        Arrays.sort(nums);
        for (int i = 0; i < nums.length; i++) {
            if (i != nums[i]) {
                return i;
            }
        }
        return nums.length;
    }
}

方法二:
首先,创建一个哈希表,利用哈希表的特点;
然后,将给定的数组里的元素全部放入哈希表中,然后从 0 ~ n(n 为数组长度)进行判断是否存在于哈希表当中,不存在的元素即为缺失的数字。

代码:

class Solution {
    public int missingNumber(int[] nums) {
        Set set = new HashSet();
        for (int i = 0; i < nums.length; i++) {
            set.add(nums[i]);
        }
        for (int i = 0; i <= nums.length; i++) {
            if (!set.contains(i)) {
                return i;
            }
        }
        return -1;
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/682804.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号