笔试练习Day02

news2024/12/28 2:18:07


一.选择题:

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

分析:我们知道,以上三种声明都内含了三者的默认构造方法,因此当然可以编译通过。但看问题要看重点,此题我们引出另一个问题:

java的编译是什么?

        这个问题其实对于 java 语言而言是可以不计较的,因为 java 作为跨平台性极好的语言,其底层逻辑大都由JVM虚拟机实现了,但此处理解编译的过程更有助于我们理解原理;

        java 的编译过程分为两部分:前端编译和后端编译;

  • 前端编译:就是把java 源码转化为 .class 的字节码文件,但这样的文件机器还不能读懂;
  • 后端编译:再把字节码文件通过JVM虚拟机加载后翻译层机器码,这样机器就能根据指令去执行了

通常所说的能否编译成功到底是什么意思?

        这里主要针对本题类型的类,经常有题型问会不会编译失败?我们可以仔细思考一下到底什么叫“编译失败”?——失败可能是因为“类初始化”,也可能因为“类加载过程”;

         类初始化过程:

  1. 初始化父类中的静态成员变量和静态代码块;
  2. 初始化子类中的静态成员变量和静态代码块;
  3. 初始化父类的普通成员变量和代码块,再执行父类的构造方法;
  4. 初始化子类的普通成员变量和代码块,再执行子类的构造方法;

         既然是针对类的,那么不得不提“JVM 类加载过程”了(了解即可);

        其实对于一个类,它的生命周期可以用这样的五步描述:

        [加载][连接]:(验证)→ (准备)→ (解析) → [初始化][使用] [卸载]

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() 方法,但根本原因在存储位置;

先来看 toLowerCase() 方法的问题:进入其内部源码,可以看到,如果原本的字符串是小写,就返回当前字符串的 this 对象,如果是大写,就经过一系列转换后变成小写,再new一个新的 String 对象接收后返回:

 接着看根本原因:存储位置不同;

java源码被编译为class文件后还要加载到内存中的运行时数据区,交给命令解析器解析成机器码,在上面这段代码中,一开始就有的“abcd”、“ABCD”都是字面值保存在“字符串常量池”中,其跟随类在加载时就存入到class文件中,之后随着运行期进入方法区;我们又知道,凡是 new 出来对象的都放在堆区,那么它们什么时候一样什么时候不一样就显而易见了;

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 修饰的成员是属于类的,因此修饰普通成员变量时只能放在类里面,不能放在普通方法里面,否则就是属于方法的了。

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

分析:A 是声明了一个抽象方法,当然没问题,刚好和下面的 method() 方法构成重载;

           B 这种要注意:所有对成员变量做赋值、计算的操作都要放在方法内部;

           C 这个方法既然不是抽象方法就不能这样去声明,必须有{}来进行body的实现;

           D 这样的抽象方法只能声明不能自行具体实现;


二.编程题:

链接:排序子序列_牛客笔试题_牛客网
来源:牛客网

牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为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

输入

6
1 2 3 2 2 1

输出

2

分析:遍历整个序列,每次序列改变就会组数加1,当遇到当前数和下一个数的大小关系不符合之前的关系时,就会导致序列改变;

分为三种情况:①num[i] < num[i+1]、②num[i] > num[i+1]、③num[i] == num[i+1];

相等属于序列不变,不相等时,让索引 i 向后走一步,进入下一组,同时组数加1即可;

注意点:数组越界问题

如果遇到最后一个数时序列改变了,那么就要考虑越界问题,所以就可以在开辟数组时多开一个大小,存放一个0,解决了越界还不影响分组;

public class Test100448 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int[] num = new int[n + 1];
        for (int i = 0; i < n; i++) {
            num[i] = scan.nextInt();
        }
        System.out.println(subGroups(num));
    }

    private static int subGroups(int[] num) {
        int groups = 0;
        int i = 0;
        while (i < num.length - 1) {
            if (num[i] < num[i+1]) {
                // 当前为递增序列
                while (i < num.length - 1 && num[i] < num[i+1]) {
                    i++;
                }
                groups++;
                i++;
            } else if (num[i] == num[i+1]) {
                // 前后相等
                i++;
            } else {
                // 当前为递减序列
                while (i < num.length - 1 && num[i] > num[i+1]) {
                    i++;
                }
                groups++;
                i++;
            }
        }
        return  groups;
    }
}

链接:倒置字符串_牛客题霸_牛客网

描述

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

输入描述:

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

输出描述:

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

示例1

输入:

I like beijing.

复制输出:

beijing. like I

分析:此题比较简单,可以先把整个字符串逆置,再把内部的每个单词逆置就可以了。

逆置内部单词时,以空格为分界,但要注意,万一整个字符串里没有空格呢?这种情况要防止数组越界;

除了这种方法,还可以想到:先用队列把每个单词存起来,再使用栈把每个队列存起来,最后依次弹出栈顶的队列,再依次出队列,就能得到想要的顺序了。

public class Test69389 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        char[] src = s.toCharArray();
        String ret = new String(stringVerse(src));
        System.out.println(ret);
    }

    private static char[] stringVerse(char[] src) {
        // 先将整个字符串全部逆置
        subVerse(src,0,src.length - 1);
        // 再将每个单词逆置
        int i = 0;
        while (i < src.length){
            int cur = i;
            while (cur < src.length && src[cur] != ' ') {
                cur++;
            }
            // 判断中间是否有空格
            if (cur < src.length) {
                subVerse(src,i,cur-1);
                i = cur + 1;
            } else {
                subVerse(src,i,cur-1);
                i = cur;
            }
        }

        return src;
    }

    private static void subVerse(char[] src, int start, int end) {
        while (start <= end) {
            char temp = src[end];
            src[end] = src[start];
            src[start] = temp;
            ++start;
            --end;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/518071.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql distinct 和 group by 去重

标题mysql distinct 和 group by 去重 一、先说结论&#xff1a; MySQL中常用去重复数据的方法是使用 distinct 或者 group by group by 分组后&#xff0c;如果没有对分组后的数据进行操作&#xff0c;如使用聚合函数/分组函数&#xff1a;count、sum、avg、max 、min&…

封装Python脚本:使用pymysql+sshtunnel,支持通过SSH隧道方式链接mysql数据库

一、前言 通常为了保证数据库安全&#xff0c;不会允许直接连接数据库&#xff0c;而是需要通过SSH隧道去连接服务器背后的数据库&#xff1b;通过Navicat操作如下&#xff1a; 二、python封装脚本 # -*- coding: utf-8 -*- # Time : 2023/5/12 11:04 # Author : chen…

Activity内存泄漏时包含的view还有没有的救?

Activity泄漏会导致该Activity引用到的Bitmap、DrawingCache等无法释放&#xff0c;对内存造成大的压力&#xff0c;兜底回收是指对于已泄漏Activity&#xff0c;尝试回收其持有的资源&#xff0c;泄漏的仅仅是一个Activity空壳&#xff0c;从而降低对内存的压力。 做法也非常简…

ssh终端工具推荐-WindTerm

什么是WindTerm 官方github https://github.com/kingToolbox/WindTerm A Quicker and better SSH/Telnet/Serial/Shell/Sftp client for DevOps. 按官方说明&#xff0c;WindTerm是一个更快更好的SSH/Telnet/Serial/Shell/Sftp的DevOps工具。 WindTerm目前对商业是免费无限制…

QML APP开发套路(二):前/后端交互概述

&#xff08;1&#xff09;QML开发简介 Qt应用框架在传统UI&#xff08;QWidget窗体&#xff09;的基础上&#xff0c;提供了Qt Quick模块&#xff0c;该模块基于 QML 语言来定义UI及交互方式。区别于 QWidget 定义UI的方式&#xff0c;QML利于将UI交互与业务逻辑处理剥离成前…

什么是智慧校园?

什么是智慧校园&#xff1f; 智慧校园平台是目前教育信息化领域的热点之一。 随着数字化转型的加速&#xff0c;越来越多的学校开始寻求解决方案&#xff0c;以提高教育管理的效率和质量。 在使用智慧校园平台的过程中&#xff0c;一些痛点问题也浮现出来。为解决这些问题&a…

基于AT89C51单片机的贪吃蛇游戏设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87778030 源码获取 主要内容: 设计一个贪吃蛇游戏,使其具有以下游戏规则:①当没有改变方向时,贪吃蛇沿原来路径一直前进②贪吃蛇无法回头,只能异于当前方向改变行动③蛇…

网页更新提醒是什么?如何自动监控网页并自动记录或发送通知?

网页更新提醒是什么&#xff1f; 在互联网信息资源丰富&#xff0c;且更新速度快的情况下&#xff0c;如果需要监控一些网页变化&#xff0c;实现例如热点/热搜/热评监测、商品上新/价格/库存监测、作品上新/评论/点赞监测、招标/投标/拍卖/竞价监测、公告/通知/活动监测等情况…

南京大学主办 | EIScopus检索 | 2023年人工智能与统计学前沿国际会议

2023年人工智能与统计学前沿国际会议 会议简介 Brief Introduction 2023年人工智能与统计学前沿国际会议(CFAIS 2023) 会议时间&#xff1a;2023年8月18日-20日 召开地点&#xff1a;中国南京 大会官网&#xff1a;www.cfais.org 2023年人工智能与统计学国际会议(CFAIS 2023)将…

测评,补单是什么神仙利器?能提高速卖通,国际站,newegg店铺的销量

测评&#xff0c;补单相信这个词对于大部分卖家来说&#xff0c;想必都不陌生&#xff0c;因为都知道它能够快速帮助自己的产品添加评论&#xff0c;获取排名&#xff0c;打造爆款。于是许多卖家潜意识里认为“测评其实就是刷评”。 简单点来说&#xff0c;测评就是卖家通过【评…

485测试

注意如果十六进制发送数据 数据打印时 如果是%c 打印出来的数据会十进制显示 解决方案 1.改变打印方式 %x 打印 2.因为什么也不勾选 &#xff0c;默认asii显示 利用串口助手发ltz &#xff0c;打印也是ltz&#xff08;发什么就显示什么&#xff09; 如下图所示

如何使用appuploader制作描述文件​

如何使用appuploader制作描述文件​ 承接上文我们讲述了怎么制作证书&#xff0c;本文我们来看下怎么制作描述文件吧。​制作描述文件前我们首先我们来添加一个测试设备&#xff0c;后面再制作描述文件。 1.添加测试设备​ 其中添加设备一项中&#xff0c;根据提示操作添加…

OpenGL ES特效分析 --- 跳动的心

很早之前就见过一个博主发的shader图片&#xff0c;一个跳动的心https://blog.csdn.net/Kennethdroid/article/details/104536532&#xff0c; 感觉太好玩了&#xff0c;于是想要分析一下原理&#xff0c;上面的博主也已经做了初步分析&#xff0c;但是对于我这个特效小白来说还…

VMware Aria Operations 8.12 - 自动驾驶式 IT 运维管理

VMware Aria Operations 8.12 - 自动驾驶式 IT 运维管理 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-aria-operations/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 自动驾驶式 IT 运维管理 VMware Aria Op…

YOLOv5白皮书-第Y3周:yolov5s.yaml文件解读

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 ● 难度&#xff1a;夯实基础⭐⭐ ● 语言&#xff1a;Python3、Pytorch3 ● 时间&#xff1a;5月8日-5月12日 &#x1f37a;要求&#xff…

电脑永久删除文件怎么找回来?分享一种数据恢复方法

电脑对于日常生活和工作都起着重要作用&#xff0c;但是在我们日常办公中&#xff0c;有时会误删除一些文档&#xff0c;甚至永久删除&#xff0c;当我们想找回的时候却手足无措&#xff0c;不知道该怎么办。同时在很多用户的观念里&#xff0c;当我们无法从回收站恢复时&#…

Openai+Coursera: ChatGPT Prompt Engineering(一)

想和大家分享一下最近学习的Coursera和openai联合打造ChatGPT Prompt Engineering在线课程&#xff0c;下面是通过API来访问ChatGPT的主要代码&#xff1a; import openaiopenai.api_key XXXXXXXXXdef get_completion(prompt, model"gpt-3.5-turbo"):messages [{&…

【OpenCV】学习课-图像裁剪与拼接(2)!

1. 图像的裁剪 cv2.selectROI() ###可以通过鼠标选择感兴趣的矩形区域&#xff08;ROI&#xff09; import cv2img cv2.imread("xxx.png", flags1) # flags1 读取彩色图像(BGR)roi cv2.selectROI(img, showCrosshairTrue, fromCenterFalse) xmin, ymin, w, h…

2022年平均工资出炉,IT行业又是第一

根据5月9日国家统计局最新资料显示&#xff0c;2022年&#xff0c;全国城镇非私营单位就业人员年平均工资为114029元&#xff0c;比上年增长6.7%&#xff0c;扣除通胀后实际增长4.6%。其中&#xff0c;行业间的差距相当明显。根据资料显示&#xff0c;2022年无论是在私营单位还…

ESP8266(1):搭建Linux环境ESP8266_RTOS_SDK,ESP8266使用GPIO控制继电器

0&#xff09;准备工作&#xff0c;之前一直对esp8266不了解&#xff0c;现在想着给鱼缸加个定时打氧的程序&#xff0c;控制泵的工作。所以购买了一个esp8266 Relay&#xff0c;自己摸索写个简单程序。让泵工作一段时间&#xff0c;再休眠一段时间。 1)宿主机Ubuntu 20.04.5 …