2023应届生能力考试含解析(Java后端开发)——(1)

news2024/11/14 8:48:14

1.以下代码的循环次数是 (   )

public class Test {
    public static void main(String[] args) {
        int i = 7;
        do {
            System.out.println(--i);
            --i;
        } while (i != 0);
        System.out.println(i);
    }
}

A 0    B 1   C 7    D 无限次

    这段代码会导致无限循环的原因是在 do-while 循环中,每次迭代都会先执行一次循环体内的代码,然后再进行循环条件的判断。

    在这个例子中,初始值 i 被设置为 7。循环体内的代码逐步减少 i 的值,并打印出来。但是注意到每次循环体内都有两次 --i 操作,所以每次循环 i 的值会减少2。

    当 i 的值减少到1时,继续进行下一次循环。此时 i 的值变为 -1,不等于0,循环继续。然后又会进行两次 --i 操作,使 i 的值变为 -3。这个过程会一直继续下去,永远不会达到循环结束的条件 i != 0。因此,这段代码会导致无限循环。

2.下面代码的运行结果为:(  )

package itemtest;

import java.io.*;
import java.util.*;

public class Test{
    public static void main (String[] args){
        String s;
        System.out.println("s=" + s);
    }
}

A代码得到编译,并输出“s=”

B代码得到编译,并输出“s=null”

C由于String s没有初始化,代码不能编译通过

D代码得到编译,但捕获到 NullPointException异常

 

3.以下程序的输出是:( ) 

#include <iostream>

using namespace std;

unsigned int f(unsigned int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    return f(n-1) + f(n-2);
}

void count(int n) {
    unsigned int tmp = n - ((n >> 1) & 0x33333333) - ((n >> 2) & 0x11111111);
    std::cout << ((tmp + (tmp >> 3)) & 0x07070707) % 63 << std::endl;
}

int main() {
    count(f(7));
    count(f(9));
    return 0;
}

改写成Java代码后为:

public class Test{
    public static int f(int n) {
        if (n == 0 || n == 1) {
            return 1;
        }
        return f(n-1) + f(n-2);
    }
    public static void count(int n) {
        int tmp = n - ((n >> 1) & 0x33333333) - ((n >> 2) & 0x11111111);
        System.out.println(((tmp + (tmp >> 3)) & 0x07070707) % 63);
    }
    public static void main(String[] args) {
        count(f(7));
        count(f(9));
    }
}

 

其中对于这段代码的理解如下:

    public static void count(int n) {
        int tmp = n - ((n >> 1) & 0x33333333) - ((n >> 2) & 0x11111111);
        System.out.println(((tmp + (tmp >> 3)) & 0x07070707) % 63);
    }
这段代码实现了一种高效计算一个整数的二进制表示中有多少个1的方法,即计算整数的“汉明重量”(Hamming Weight)。下面逐步解释这段代码的实现过程:

首先,这段代码接受一个整数 n 作为输入。然后,代码通过位运算来分割 n 的二进制表示。具体来说,它使用了一些掩码(mask)来提取不同位置上的比特位。

0x33333333 掩码用于提取每两位的比特位。
0x11111111 掩码用于提取每四位的比特位。
通过右移操作 (n >> k) 和按位与操作 &,可以将 n 的比特位分割成更小的块。

接下来,通过减法和加法操作,将这些被分割出来的比特位进行累加运算。

(n >> 1) & 0x33333333 表示将 n 的每两位的比特位相加,并将结果存储在 tmp 中。
(n >> 2) & 0x11111111 表示将 n 的每四位的比特位相加,并将结果与 tmp 相减。
这样,tmp 的值就是 n 的二进制表示中每两位和每四位的比特位相加的结果。

最后,通过右移操作 (tmp >> 3) 和按位与操作 &,提取每八位的比特位。

(tmp + (tmp >> 3)) & 0x07070707 表示将 tmp 的每八位的比特位相加,并将结果存储在 tmp 中。
最终结果是 tmp 对 63 取模的值,即 tmp % 63。

0x07070707 掩码用于保留 tmp 的每八位的比特位。
通过以上步骤,这段代码实现了高效计算一个整数二进制表示中1的个数的功能。

请注意,这段代码假设整数为32位。如果你要处理不同位数的整数,需要相应调整掩码的值和最终取模的除数。
在 count 函数中,将传入的数 n 进行一系列位运算操作后得到了一个数字 tmp。此外,在最后输出之前,将 tmp 与 0x07070707 进行按位与操作,并再次取模 63,最终得到的是 tmp 的一个压缩版本。

    实际上,这个压缩版本已经足够表征 tmp 的大部分信息了。由于斐波那契数列的增长速度非常快,当 n 较大时,tmp 的值也会变得非常大。因此,通过将 tmp 与 0x07070707 进行按位与操作,可以将其压缩为一个更小的数字。然后,通过对 63 取模,可以确保输出值始终落在 0 到 62 之间,以便更好地控制输出结果的范围。

    需要注意的是,0x07070707 所对应的二进制数是 00000111000001110000011100000111,它实际上就是用四个重复的 00000111 来组成,而 00000111 对应的十进制数为 7。因此,0x07070707 等价于十进制数 119304647。根据这个数字,我们可以使用 & 和取模操作来实现 tmp 的压缩和范围限制。

4.执行下列程序的输出结果为()

public class Test {
    public static void main(String[] args) {
        String s1 = "HelloWorld";
        String s2 = new String("HelloWorld");
        if (s1 == s2) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
        if (s1.equals(s2)) {
            System.out.println("s1 equals s2");
        } else {
            System.out.println("s1 not equals s2");
        }
    }
}

    在 Java 中,== 运算符用于比较两个对象的引用是否相等,即它们是否指向同一个内存地址。而 equals() 方法则用于比较两个对象的内容是否相等。

    在这个例子中,s1 是一个字符串常量(String literal),在编译时已经被赋值,并且在 JVM 内部建立了对应的 String 对象。而 s2 是通过 new 关键字创建的一个新的 String 对象,它的值也是 "HelloWorld"。虽然这两个 String 对象的内容相同,但是它们的引用并不相同,因此 s1 == s2 的结果为 false。

    另一方面,equals() 方法比较的是两个对象的内容,它会调用 String 类的 equals() 方法来比较两个字符串的字符序列是否相等。由于 s1 和 s2 的字符序列都是 "HelloWorld",因此 s1.equals(s2) 的结果为 true。

5.下列类定义代码,当用来声明对象car,并用Car car=new Car();实例化后,可以通过car对象直接赋值的字段是()

public class Car {
    public String type;
    String No;
    private int heavy;
    double speed;
    protected String owner;
    public String price;
    private String color;
}

A type,No   B type,price   C heavy,owner    D type,owner,price

通过 new Car() 实例化后,可以通过 car 对象直接赋值的字段是:type、owner 和 price。

   这是因为这三个字段都是定义为 public 访问修饰符,可以通过对象的引用直接访问和修改。而其他字段的访问修饰符是 private 或 protected,无法直接通过对象的引用访问和修改,需要通过类提供的公共方法或者反射等方式才能访问。  具体举例说明如下:
public class Car {
    public String type;
    String No;
    private int heavy;
    double speed;
    protected String owner;
    public String price;
    private String color;

    public void setHeavy(int heavy) {
        this.heavy = heavy;
    }

    public void setSpeed(double speed) {
        this.speed = speed;
    }

    public void setColor(String color) {
        this.color = color;
    }
}
    通过以上的 Car 类定义,我们可以实例化一个 Car 对象并进行字段赋值。假设我们创建了一个 Car 对象 car:   Car car = new Car();
        我们可以直接使用 car 对象来赋值 type、owner 和 price 字段:
        car.type = "Sedan";
        car.owner = "John";
        car.price = "$20000";
     这些字段都是 public 访问修饰符的,因此可以直接通过对象的引用 car 进行赋值操作。

     但是对于其他字段,由于它们的访问修饰符是 private 或 protected,我们无法直接通过对象的引用进行赋值。例如,无法直接通过 car.heavy、car.speed 或 car.color 来赋值。

     如果我们想要修改这些 private 或 protected 字段的值,我们可以为类提供公共的方法(setter 方法)来间接修改它们。例如,为 heavy、speed 和 color 字段添加相应的 setter 方法:
public void setHeavy(int heavy) {
        this.heavy = heavy;
}

public void setSpeed(double speed) {
        this.speed = speed;
}

public void setColor(String color) {
        this.color = color;
}
然后,我们可以使用这些 setter 方法来修改字段的值:
car.setHeavy(2000);
car.setSpeed(120.5);
car.setColor("Blue");
通过这样的方式,我们可以间接修改 private 或 protected 字段的值。

6.以下程序的执行结果是:( )

package itemtest;

public class Test {
    static boolean foo(char c) {
        System.out.print(c);
        return true;
    }

    public static void main(String[] args) {
        int i = 0;
        for (foo('A'); foo('B') && (i < 2); foo('C')) {
            i++;
            foo('D');
        }
    }
}

A、ABDCBDCB   B、ABCDABCD

C、编译时出错     D、运行时抛出异常

在这个代码中,主要有三部分组成:

foo(char c): 这是一个静态方法,它接受一个字符参数 c,并打印该字符并返回 true。

main 方法:这是程序的入口点。它声明了一个整数变量 i,初始值为 0。

循环:使用 for 循环进行迭代。循环的初始化部分调用 foo('A') 方法,并打印字符 'A'。然后,在循环条件部分,调用 foo('B') 方法并打印字符 'B',并检查 i 是否小于 2。如果条件为真,则进入循环体部分。在循环体内, i 的值增加 1,并调用 foo('D') 方法并打印字符 'D'。然后返回到循环条件部分。在循环条件部分调用 foo('C') 方法并打印字符 'C'。如果条件为真,则继续下一次循环。否则,退出循环。

因此,循环将执行两次,输出结果为 "ABDCBDCB"。

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

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

相关文章

毕业设计基于SpringMVC+Mybatis+Bootstrap的电影院管理系统源码+数据库

<<电影院管理系统>> 电影院管理系统&#xff1a;SpringMVCJSPTomcatMybatisBootstrapJqueryAnimateCSSLayerJS 项目部署&#xff1a;该项目是IDEA版本&#xff0c;Maven项目 前端依赖&#xff1a; Bootstrap-3.4.1Animate.css- 4.1.1Jquery-3.6.0Layer-v3.5.1B…

83.每日一练:搜索插入位置(力扣第35题)

问题描述 代码解决以及思想 class Solution { public:int searchInsert(vector<int>& nums, int target) {int left 0; // 定义左边界int right nums.size() - 1; // 定义右边界while (left < right) { // 当左边界小于…

基于【逻辑回归】的评分卡模型金融借贷风控项目实战

背景知识&#xff1a; 在银行借贷过程中&#xff0c;评分卡是一种以分数形式来衡量一个客户的信用风险大小的手段。今天我们来复现一个评分A卡的模型。完整的模型开发所需流程包括&#xff1a;获取数据&#xff0c;数据清洗和特征工程&#xff0c;模型开发&#xff0c…

python读取列数不规则文件/python数据框分割

问题 将探空数据读取&#xff0c;并按每日单纯储存&#xff0c;数据如下&#xff1a; 为一年数据&#xff0c;存在部分列的数据缺失问题。 数据读取 使用read_csv文件读取文件&#xff0c;由于列数存在不一致问题&#xff0c;需要固定最大列数&#xff1a; names["da…

function函数指针和lamada的[]和[=]注意事项

在工作的过程中&#xff0c;lamda表达式的 重点&#xff1a; 1.function对象存储函数指针。 2.lamada表达式&和捕捉的方式 lamda传入引用&&#xff0c;导致作用域消失&#xff0c;最终报错 std::function<void()> pFun; void GetNum1(const std::function<…

python随手小练14

题目&#xff1a; 文件操作 &#xff1a; 根据文件要求&#xff08;测试&#xff09;筛选出数据并且放入一个新的文件 具体操作&#xff1a; f1 open("1.txt","r",encoding"UTF-8") f2 open("2.txt","w",encoding"U…

【Linux】:Linux开发工具之Linux编译器——gcc/g++的使用

&#x1f4bb;1.背景知识 &#x1f372;1. 预处理&#xff08;进行宏替换) 预处理阶段我们要分为1.头文件展开2.宏替换3.条件编译4.去掉注释 这一步会帮助我们生成.i文件 &#x1f372;2. 编译&#xff08;生成汇编) 编译阶段我们要分为1.检查语法2.生成汇编代码 最后生成.s文…

物联网二维码核销盒对接文档

核销盒是干嘛的&#xff1f; 1.在某些场景下快速核销订单或打卡签到等&#xff0c;通过核销盒能快速将订单信息发送到后端进行处理。 一&#xff0c;首先你需要有一台核销设备&#xff0c;也就是核销盒。 二&#xff0c;通过接口激活或更新核销盒 ​​​​​​​ 简要描述 激…

如何通过API接口对接淘宝平台商品订单/买家订单/卖家订单接口数据【附代码实例】

通过API获取订单号&#xff1a; 如果需要通过API获取订单号&#xff0c;首先需要在淘宝联盟开通API权限&#xff0c;并获取到自己的appKey和appSecret。 具体步骤如下&#xff1a; &#xff08;1&#xff09;构建API请求&#xff0c;包括API接口、请求参数、签名等信息&…

UTC时间戳与北京时间转换

文章目录 前言一、几个时间相关的概念二、场景三、验证方法四、源码五、运行结果六、资源自取 前言 在应用中用到了 UTC 时间戳与北京时间进行转换的需求&#xff0c;这里做一个记录&#xff0c;方便后面有需求时直接拿来用。 一、几个时间相关的概念 GMT 时间&#xff1a;Gr…

【分布式·大数据】大模型赛道如何实现华丽的弯道超车 —— AI/ML训练赋能解决方案

文章目录 大模型赛道如何实现华丽的弯道超车 —— AI/ML训练赋能解决方案01 具备对海量小文件的频繁数据访问的 I/O 效率02 提高 GPU 利用率&#xff0c;降低成本并提高投资回报率03 支持各种存储系统的原生接口04 支持单云、混合云和多云部署01 通过数据抽象化统一数据孤岛02 …

数据库扩展语句,约束方式

扩展语句 create table if not exists ky32 &#xff08;&#xff09;&#xff1a;如果表存在就不创建了 zerofill 自动补齐&#xff08;在命令行可以查看&#xff09; primary key 设置成主键 auto_increment 表示这一列可以自增&#xff0c;默认从1开始&#xff0c;每条记录…

springboot和flask整合nacos,使用openfeign实现服务调用,使用gateway实现网关的搭建(附带jwt续约的实现)

环境准备&#xff1a; 插件版本jdk21springboot 3.0.11 springcloud 2022.0.4 springcloudalibaba 2022.0.0.0 nacos2.2.3&#xff08;稳定版&#xff09;python3.8 nacos部署&#xff08;docker&#xff09; 先创建目录&#xff0c;分别创建config&#xff0c;logs&#xf…

轻松理解 Transformers(2):Attention部分

编者按&#xff1a;随着人工智能技术的不断发展&#xff0c;Transformers 模型架构已成为自然语言处理领域的重要基石。然而&#xff0c;许多人对其内部工作机制仍然感到困惑。本文通过浅显易懂的语言和生活中的例子&#xff0c;帮助读者逐步理解 Transformers 中最核心的 Atte…

加速度中标云尖信息「电子元器件商城」开发项目——加速度jsudo

深圳市加速度软件开发有限公司在电子元器件和工业品行业有着多年得商城开发经验&#xff0c;服务过半导体、元器件、工业品行业的多家上市公司或实力工厂。选择加速度合作的60%的客户&#xff0c;或多或少都有踩坑的经历&#xff0c;这一次他们在选择商城开发商的时候格外谨慎&…

绝味食品营收失速,“卤味鸭脖”还卖得动吗?

随着三季报的密集披露期到来&#xff0c;多家消费领域休闲食品行业上市公司三季报报喜&#xff0c;在消费端呈现欣欣向荣的景象。 甘源食品&#xff1a;2023年前三季度营收13.14亿元&#xff0c;同比增长35.56%&#xff0c;净利润2.14亿元&#xff0c;同比增长139%&#xff0c…

delphi 11.3 FastReport 多设备跨平台 打印之解决方法

以下能WINDOWS10 DELPHI 11.3 FastReport6.0上顺利通过 FastReport6.2对Multi-Device Application应用的支持不够友好&#xff0c;如下图&#xff1b;在palette FastReport6.0才出现几个制件。 非Multi-Device Application应用时是一大堆&#xff1b; 非Multi-Device Appl…

(CESM)地球系统模式

目前通用地球系统模式&#xff08;Community Earth System Model&#xff0c;CESM&#xff09;在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来&#xff0c;一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…

腾讯云轻量应用服务器的“镜像”操作系统选择方法

腾讯云轻量应用服务器镜像怎么选择&#xff1f;如果是用来搭建网站可以选择宝塔Linux面板腾讯云专享版&#xff0c;镜像系统根据实际使用来选择&#xff0c;腾讯云百科txybk.com来详细说下腾讯云轻量应用服务器镜像的选择方法&#xff1a; 腾讯云轻量应用服务器镜像选择 轻量…

Spring源码-refresh(1)

1、Refresh方法简介 refresh 是Spring的核心流程&#xff0c;主要包含13个方法。这13个方法中主要又包含3个方法。 如图&#xff1a; 其中标记星号的代表主要的方法。从方法中后面的分支数据也可以看出&#xff0c;主要的方法中存在大量的逻辑处理&#xff0c;后面我们会慢慢分…