Java经典笔试题—day02

简介: Java经典笔试题—day02

🔎选择题

(1)A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:

  1. A a0=new A();
  2. A a1=new B();
  3. A a2=new C();

问以下哪个说法是正确的()

A. 只有第一行能通过编译

B. 第1、2行能通过编译,但第3行编译出错

C. 第1、2、3行能通过编译,但第2、3行运行时出错

D. 第1行,第2行和第3行的声明都是正确的

D

(2)下面代码将输出什么内容:()

public class SystemUtil{
  public static boolean isAdmin(String userId){
    return userId.toLowerCase()=="admin";
     }
    public static void main(String[] args){
        System.out.println(isAdmin("Admin"));
    }       
}

A. true

B. false

C. 1

D. 编译错误

B

当被转换的字符串全是由小写字母组成时, 此时调用 toLowerCase() 方法, 就会 return this

当被转换的字符串不全是由小写字母组成时, 此时调用 toLowerCase() 方法, 就会 return new String

(3)阅读如下代码。请问对语句行 test.hello(). 描述正确的有()

class Test {
  public static void hello() {
    System.out.println("hello");
  }
}
public class MyApplication {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    Test test = null;
    test.hello();
  }
}

A. 能编译通过,并正确运行

B. 因为使用了未初始化的变量,所以不能编译通过

C. 以错误的方式访问了静态方法

D. 能编译通过,但因变量为null,不能正常运行

A

Test test = null, 表示 test 不指向任何对象

但是由于 hello() 方法被 static 修饰, 表示是一个静态方法(不需要对象就可以直接调用)

(4)在使用super和this关键字时,以下描述正确的是()

A. 在子类构造方法中使用 super() 显示调用父类的构造方法,super() 必须写在子类构造方法的第一行,否则编译不通过

B. super() 和 this() 不一定要放在构造方法内第一行

C. this() 和 super() 可以同时出现在一个构造函数中

D. this() 和 super() 可以在static环境中使用,包括static方法和static语句块

A

(5)如下代码的结果是什么 ?

class Base {
  Base() {
    System.out.print("Base");
  }
}
public class Alpha extends Base {
  public static void main(String[] args) {
    new Alpha();
    //调用父类无参的构造方法
    new Base();
  }
}

A. Base

B. BaseBase

C. 编译失败

D. 代码运行但没有输出

E. 运行时抛出异常

B

调用子类构造方法的同时会调用父类构造方法

(6)如下代码的输出结果是什么?

public class Test {
  public int aMethod(){
    static int i = 0;
    i++;
    return i;
  }
  public static void main(String args[]){
    Test test = new Test();
    test.aMethod();
    int j = test.aMethod();
    System.out.println(j);
  }

A. 0

B. 1

C. 2

D. 编译失败

D

static 修饰的变量只能是成员变量, 不能是局部变量

(7)下列哪一种叙述是正确的()

A. abstract修饰符可修饰字段、方法和类

B. 抽象方法的body部分必须用一对大括号{ }包住

C. 声明抽象方法,大括号可有可无

D. 声明抽象方法不可写出大括号

D

A. abstract 修饰符可以修饰方法和类, 不可以修饰字段

B, C, D 抽象方法不能含有{ }

(8)下列说法正确的有:()

A. class中的constructor不可省略

B. constructor必须与class同名,但方法不能与class同名

C. constructor在一个对象被new 时执行

D. 一个class只能定义一个constructor

C

A. 省略 constructor(构造方法)时, 编译器会默认提供一个不带参数的构造方法

B. 构造方法也属于方法, constructor 与 class 同名, 方法也可以与 class 同名

D. 方法可以重载

(9)选项中哪一行代码可以替换 //add code here 而不产生编译错误

public abstract class MyClass {
  public int constInt = 5;
    //add code here
  public void method() {
  }

A. public abstract void method(int a);

B. consInt=constInt+5;

C. public int method();

D. public abstract void anotherMethod(){}

A

B. 成员变量的赋值在需要在方法中完成

C. 如果是抽象方法需要 abstract 修饰. 如果是具体方法, 需要加{ }

D. 抽象方法不能含有{ }

(10)在使用 interface 声明一个外部接口时,只可以使用( )修饰符修饰该接口

A. private

B. protected

C. private protected

D. public

D

interface(接口) 默认是要被实现的, 需要被 public 修饰

🔎编程题

🥝排序子序列

题目描述

牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。

牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.

如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2

输入描述

输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)

第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。

输出描述

输出一个整数表示牛牛可以将A最少划分为多少段排序子序列

解体思路

以 1 2 3 2 2 为例

1 2 3 为非递减序列, 所以划分为1组

由于 2 小于 3, 所以不与 1 2 3 构成非递减序列

2 2 为非递增序列, 所以划分为1组

设计两个方法, 一个为 getBigger(递增), 另一个为 getSmaller(递减)

判断当前元素与它的前一个元素的大小

当前元素 > 前一个, 调用 getBigger(递增)

当前元素 < 前一个, 掉用 getSmaller(递减)

当前元素 == 前一个, i++(让当前元素变为前一个, 当前元素的下一个变为当前元素)

这里代码中数组多开辟了1个空间, 是防止最后一个元素可能没有与前面的元素进行判断的情况

此时的位置已经到达了数组的末尾, 既不是递增也不是递减, 但是循环结束了

根据题目的描述, 输入的值 >= 1, 所以新开辟的空间默认为 0 不会出错

import java.util.Scanner;
//排序子序列
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();// 输入的数字个数
        int[] nums = new int[n + 1];
        int ret = 0;
        for(int i = 0; i < n; i++) nums[i] = sc.nextInt();// 将输入的数字存放到数组中
        for(int i = 1; i < n + 1; i++) {
            if(nums[i] > nums[i - 1]) {// 为递增序列
                i = getBigger(nums, i, n + 1);
                ret++;
            } else if(nums[i] < nums[i - 1]) {// 为递减序列
                i = getSmaller(nums, i, n + 1);
                ret++;
            }
        }
        System.out.println(ret);
    }
    // 递增
    private static int getBigger(int[] nums, int index, int n) {
        for(; index < n; index++) {
            if(nums[index] < nums[index - 1]) {
                break;
            }
        }
        return index;
    }
    // 递减
    private static int getSmaller(int[] nums, int index, int n) {
        for(; index < n; index++) {
            if(nums[index] > nums[index - 1]) {
                break;
            }
        }
        return index;
    }

📢题目链接

链接: link


🥝倒置字符串

题目描述

将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

输入描述

每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100

输出描述

依次输出倒置之后的字符串,以空格分割

解题思路

去除空格, 逆序输出字符串数组

import java.util.Scanner;
//倒置字符串
public class Main2 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        String[] strs = str.split(" ");
        int n = strs.length;
        for (int i = n - 1; i >= 0; i--) {
            System.out.print(strs[i] + " ");
        }
    }
}  

📢题目链接

链接: link


🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍

大家有什么不太理解的,可以私信或者评论区留言,一起加油

相关文章
|
存储 安全 Java
冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)
冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)
492 0
|
3月前
|
搜索推荐 算法 Java
2025 年互联网大厂校园招聘 JAVA 工程师笔试题及备考要点解析
本文针对互联网大厂校招Java工程师笔试题进行解析,涵盖基础知识、面向对象编程、数据结构与算法、异常处理及集合框架等核心内容。从数据类型、运算符到流程控制语句,从类与对象、继承多态到数组链表、排序算法,再到异常捕获与集合框架应用,结合实际案例深入剖析,助你系统掌握考点,提升应试能力。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
147 9
|
3月前
|
Java 数据库连接 API
互联网大厂校招 JAVA 工程师笔试题解析及常见考点分析
本文深入解析互联网大厂校招Java工程师笔试题,涵盖基础知识(数据类型、流程控制)、面向对象编程(类与对象、继承与多态)、数据结构与算法(数组、链表、排序算法)、异常处理、集合框架、Java 8+新特性(Lambda表达式、Stream API)、多线程与并发、IO与NIO、数据库操作(JDBC、ORM框架MyBatis)及Spring框架基础(IoC、DI、AOP)。通过技术方案讲解与实例演示,助你掌握核心考点,提升解题能力。
159 2
|
3月前
|
设计模式 算法 Java
2025 春季校招 Java 研发笔试题详细解析及高效学习指南
本指南专为2025春季校招Java研发岗位笔试设计,涵盖Java 17+新特性(如模式匹配、文本块、记录类和密封类)、现代技术栈(Spring Boot 3、响应式编程、Stream API增强)以及算法与数据结构实战。同时深入解析Spring Data JPA、事务管理、性能优化等内容,并结合实际案例讲解常见算法题解与设计模式应用。资源包含核心知识点、面试题及笔试技巧,助力高效备考。下载地址:[链接](https://pan.quark.cn/s/14fcf913bae6)。
85 1
|
3月前
|
存储 算法 NoSQL
2025 春季校招 java 研发岗位笔试题及相关内容
这份指南针对2025春季校招Java研发岗位,系统梳理了笔试核心知识点。内容涵盖Java基础(关键字、数据类型、循环与条件判断)、集合框架(List、Set、Map)、多线程(创建、同步、休眠与等待)以及异常处理(类型与机制)。通过典型例题解析与实践指导,帮助求职者掌握解题思路,提升编程能力,为成功通过校招笔试奠定基础。资源链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)
124 0
|
存储 Java 编译器
刷完一千道java笔试题的常见题目分析
这篇文章是关于刷完一千道Java笔试题后的常见题目分析,涵盖了Java基础知识点,如标识符命名规则、抽象类与接口的区别、String类的equals方法、try-catch-finally块的执行逻辑、类与实例方法的区别、this与super关键字的用法、面向对象的基本概念、重写与重载的原则等,并建议结合JVM内存结构图加深理解。
刷完一千道java笔试题的常见题目分析
|
SQL 存储 数据管理
Java经典笔试题—day13
Java经典笔试题—day13
223 0
|
SQL Java 数据库连接
Java笔试题
Java笔试题
116 0
|
机器学习/深度学习 SQL 关系型数据库
Java经典笔试题—day14
Java经典笔试题—day14
198 0
Java经典笔试题—day12
Java经典笔试题—day12

热门文章

最新文章