java-笔试题记录

1.请选择Math.round(11.5)、Math.round(-11.5)的结果

Math.round()方法采用四舍五入的方式将一个浮点数四舍五入为最接近的整数。
如果参数是正数并且小数部分大于或等于0.5,则结果将向上舍入到最接近的整数。
如果参数是负数并且小数部分小于或等于-0.5,则结果将向下舍入到最接近的整数。

在这里插入图片描述

2.String s = new String(“aaa”);创建了几个String Object

在执行语句String s = new String("aaa");时,会创建两个String对象。

第一个String对象是字面值"aaa",它是一个字符串常量。在Java程序运行时,字符串常量池中会维护一张表,存放程序中出现的所有字符串常量。当程序运行到这行代码时,它会检查字符串常量池中是否已经存在一个值为"aaa"的字符串常量。如果已经存在,它会返回常量池中的字符串对象的引用,而不会创建一个新的字符串对象。在这种情况下,因为"aaa"是一个常量,在编译时就已经确定了,所以Java编译器会将这个字面值优化为一个字符串常量,并将其添加到常量池中。

第二个String对象是通过调用String类的构造函数,使用字符串"aaa"作为参数,创建的。这个String对象是在堆中创建的,并且它的内容与字符串常量池中的字符串常量"aaa"相同,但是它是一个不同的对象,因为它位于堆中而不是常量池中。因此,对这个String对象的任何更改都不会影响到常量池中的字符串常量。

3.以下哪项描述是错误的

A.重载方法只可能在类的内部

B.构造方法不能重载

C.重载方法名必须相同,参数列表不同

D.方法的返回值类型不是区分重载的条件

B.
构造方法可以重载
下面就是构造方法重载:
public test01(){
}
public test01(int age){
    this.age = age;
}

4.以下描述错误的是

A.HashMap使用键/值的形式保存数据

B.HashMap允许null用作Key

C.HashMap中的元素是有序的

D.HashMap允许将null用作Value

C. HashMap中的元素是有序的。

HashMap是一种哈希表,它使用键值对的方式来存储和访问数据。HashMap中的元素是无序的,它们的存储顺序取决于哈希值的计算结果和内部桶的存储位置。因此,选项C描述是错误的。

选项A、B、D描述是正确的。HashMap允许使用键/值对的形式保存数据,其中键可以为null,值也可以为null。HashMap中的键值对是通过哈希值来存储和访问的,可以通过键来获取对应的值。

5.以下哪条选项用于表示JDBC数据库连接的对象

A.Statement

B.PreparedStatement

C.Connection

D.DriverManager

答案是C。在JDBC中,Connection是用于表示数据库连接的对象,它用于在Java应用程序和数据库之间建立通信链接,以便进行数据库操作。通过Connection对象,我们可以执行SQL语句,处理结果集等操作。

Statement和PreparedStatement是执行SQL语句的对象,它们是通过Connection对象创建的。其中Statement对象是用于执行静态SQL语句的,而PreparedStatement对象则是用于执行预编译的SQL语句的。预编译可以提高执行效率,因为数据库只需要编译一次SQL语句,而不是每次执行时都编译一次。

DriverManager是JDBC的一个类,用于管理数据库驱动程序的加载和连接,但它并不是表示数据库连接的对象。通过DriverManager类,我们可以使用合适的数据库驱动程序来连接指定的数据库。

6. 3%-2的结果是

当我们计算表达式 3%-2 时,我们可以首先将它转换为以下形式:
3 / (-2) = -1 余数是 1
这个式子的含义是,我们将 3 除以 -2,得到商是 -1,余数是 1。在Java中,取模运算符 % 的含义就是取得两个数相除后的余数。所以 3%-2 的结果就是 1。
下面是取模运算的定义:
a % b = a - b * floor(a / b)
其中 floor(a / b) 表示将 a / b 的结果向下取整到最接近的整数。对于 3%-2,我们可以将它带入这个公式计算:

3 % -2 = 3 - (-2) * floor(3 / -2)
       = 3 - (-2) * (-2)
       = 3 - 4
       = -1 (余数是 1)

7. 判断

class Man{
    public Man(){
        System.out.println("this is a Man");
    }
}
public class SuperMan extends Man{
    private String name = "stark";
    public SuperMan(){
        System.out.println("this is a SuperMan");
        super;// super() ,'super()' 调用必须是构造函数主体中的第一条语句
    }
    public static void main(String[] args){
        SuperMan superMan = new SuperMan();
        System.out.println(this.name);// 无法从 static 上下文引用非 static 字段 'a' 
    }
}

A.运行出错

B.编译出错

C.this is a Man this is a SuperMan stark

D.this is a SuperMan this is a Man stark

答案B
第10行super:在子类构造方法里面,如果没有显示的写,则默认第一行写了一个super();如果要显示的写,则super()[不论是否有参数]必须是第一个语句
第14行this.name:静态方法不能访问非静态属性

8.下列哪项后台返回码表示服务器内部错误

A.404

B.500

C.502

D.302

答案 B,500是Internal Server Error(服务器内部错误)

http常用状态码

9.200^20的结果?

A.10

B.20

C.20020

D.220

位运算符^ 对应位值相同为0否则为1
200 的二进制 1100 1000
20 的二进制  0001 0100
200^20 = 1101 1100 = 220

10 下列哪些原因可能会触发StackOverflowError

A.缺少程序运行内存

B.写数据到不可用内存地址

C.递归调用

D.数组越界

答案C
当程序中使用的栈空间超过了 JVM 分配给线程的栈空间大小时,会抛出 StackOverflowError 异常。栈空间用于存储方法调用时的参数、局部变量以及返回地址等信息,如果方法调用的层数过多,就会导致栈空间不足,最终抛出 StackOverflowError 异常。
A.
当程序需要使用的内存超出了 JVM(Java Virtual Machine)所能提供的最大内存限制时,会抛出 OutOfMemoryError 异常。例如,如果程序不断地创建对象而没有及时释放,就可能导致内存泄漏,最终导致 JVM 内存耗尽并抛出 OutOfMemoryError 异常。
B&D.
在 Java 中,写数据到不可用内存地址会导致访问非法内存的异常,通常会抛出 java.lang.NullPointerException 或 java.lang.ArrayIndexOutOfBoundsException 异常。

java.lang.NullPointerException 异常
当程序试图访问一个空对象(即值为 null 的对象)的成员变量或方法时,就会抛出 java.lang.NullPointerException 异常。这个异常是在运行时检测到的,通常表示程序中存在未初始化的对象引用或空指针。

例如,以下代码中,变量 a 没有被初始化,当试图通过它调用 length 方法时就会抛出 java.lang.NullPointerException 异常。
String a;
int len = a.length(); // throws NullPointerException

java.lang.ArrayIndexOutOfBoundsException 异常
当程序试图访问数组中不存在的元素或索引时,就会抛出 java.lang.ArrayIndexOutOfBoundsException 异常。这个异常是在运行时检测到的,通常表示程序中存在数组越界的错误。

例如,以下代码中,数组 a 中只有 5 个元素,但是试图访问第 10 个元素时就会抛出 java.lang.ArrayIndexOutOfBoundsException 异常。
    int[] a = {1, 2, 3, 4, 5};
int x = a[9]; // throws ArrayIndexOutOfBoundsException

11. 100>>3 = 12 判断对错

对
100>>3 这个表达式中,>> 是 Java 中的位运算符,表示将数值的二进制表示向右移动指定的位数,移动时在最高位补齐符号位。在这个例子中,100 的二进制表示为 01100100,向右移动 3 位后,得到 00001100,这个二进制数转换为十进制即为 12,因此 100>>3 的结果为 12。

12.子类不可以访问父类非public和protected修饰的属性

属性可以被定义为公共(public)、保护(protected)或私有(private)。公共属性可以被任何对象访问,而保护和私有属性只能被类的成员访问。子类可以访问父类的保护和公共属性,但是无法访问父类的私有属性。如果父类的属性被定义为非public和protected,子类将无法访问这些属性。

这是因为父类的私有属性只能在父类内部访问,而子类无法继承或访问这些属性。而如果父类的属性被定义为非public和protected,则子类也无法继承或访问这些属性,因为它们没有被定义为对外公开或受保护的属性。

因此,如果想要子类能够访问父类的某个属性,需要将这个属性定义为public或protected。

13.现有一张用户表user_table,其中包含phone_no、sex、age、station四个字段

  • 1.请写出建表语句,主键为phone_no
CREATE TABLE user_table (
  phone_no VARCHAR(20) NOT NULL PRIMARY KEY,
  sex VARCHAR(10),
  age INT,
  station VARCHAR(50)
);

VARCHAR 和 INT 是 MySQL 中的数据类型,分别代表可变长度字符串和整数。
NOT NULL 用于指定该字段不能为空。
PRIMARY KEY 用于指定该字段为主键。
  • 2.现在需要模糊查询station为成都、年龄大于18,性别为男的信息,按年龄正序,取前十条
SELECT * FROM user_table
WHERE station LIKE '%成都%' AND age > 18 AND sex = '男'
ORDER BY age ASC
LIMIT 10;

LIKE 关键字用于进行模糊查询,'%成都%' 中的 % 代表任意字符,可匹配成都之前或之后的任何字符。
AND 关键字用于连接多个查询条件。
ORDER BY 关键字用于指定排序的字段和排序方式,ASC 代表升序,DESC 代表降序。
LIMIT 关键字用于限制查询结果的条数,这里只返回前十条记录。

14.现在有一名用户的数据需要手动写入redistribution,key为h:user:xiaoming,值分别为:name=小明、sex = 男、age=20、phone_no =13800000000

  • 1.请写出以hash形式压入redis
HMSET user:xiaoming name 小明 sex 男 age 20 phone_no 13800000000

HMSET 是 Redis 中的一个命令,用于向一个 hash 类型的键中写入多个字段和值。
user:xiaoming 作为键名,表示将该 hash 存储在 Redis 中的 user 数据库中,键名为 xiaoming。
在 HMSET 命令后,接着按照 field value 的形式依次写入字段和对应的值。
在 Redis 中,hash 类型的键存储了一些字段和对应的值,可用于存储结构化的数据,如用户信息、商品属性等。
  • 2.通过redis指令将age修改为18
HSET user:xiaoming age 18

HSET 是 Redis 中的一个命令,用于向一个 hash 类型的键中设置一个字段和对应的值。
user:xiaoming 作为键名,表示该 hash 存储在 Redis 中的 user 数据库中,键名为 xiaoming。
age 为需要修改的字段名。
18 为需要设置的值。
如果该字段已经存在,会被修改为新值;如果该字段不存在,会新建一个字段并设置对应的值。
  • 3.通过redis指令删除name字段
HDEL user:xiaoming name

HDEL 是 Redis 中的一个命令,用于从一个 hash 类型的键中删除一个或多个字段。
user:xiaoming 作为键名,表示该 hash 存储在 Redis 中的 user 数据库中,键名为 xiaoming。
name 为需要删除的字段名。
如果该字段存在,会被删除;如果该字段不存在,命令会忽略该操作。
  • 4.删除这个key
DEL user:xiaoming

DEL 是 Redis 中的一个命令,用于删除指定的键及其对应的值。
user:xiaoming 作为键名,表示需要删除的键名。
如果该键存在,会被删除;如果该键不存在,命令会忽略该操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值