某中厂Java笔试题
第一次参加笔试,考试时感觉良好,考完查询ai才发现错的挺多,基础不扎实,虽然不知道能否进面,但我将继续学习巩固基础。
·
第一次参加笔试,考试时感觉良好,考完查询ai才发现错的挺多,基础不扎实,虽然不知道能否进面,但我将继续学习巩固基础。
一、单选题 (20题)
-
关于构造函数的描述,正确的是?
- 选项:
A. 返回类型为void
B. 一个类可以定义多个构造函数
C. 必须显式定义
D. 和类相同名称,不能带参 - 答案:B
- 解析: 构造函数可以重载,允许多个;A错误,构造函数无返回类型;C错误,可不显式定义默认构造;D错误,可带参。
- 选项:
-
以下哪个不是Java线程状态?
- 选项:
A. Blocked
B. Paused
C. Running
D. Waiting - 答案:B
- 解析: Java线程状态包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED,无paused状态。
- 选项:
-
以下哪种循环至少执行一次?
- 选项:
A. do…while
B. while
C. for
D. foreach - 答案:A
- 解析: do-while无论条件如何至少执行一次。
- 选项:
-
关于super和this的正确说法是?
- 选项:
A. 不一定在第一行
B. 可在static环境下使用
C. super显式调用,需在第一行
D. 可同时出现在一个构造函数中 - 答案:C
- 解析: super()或this()调用必须放在构造函数第一行,且不能同时出现。
- 选项:
-
以下代码运行输出是什么?
public class Person { private String name = "Person"; int age = 0; } public class Child extends Person { public String grade; public static void main(String[] args){ Person p = new Child(); System.out.println(p.name); } }- 选项:
A) 输出:Person
B) 没有输出
C) 运行出错
D) 编译出错 - 答案:D
- 解析: 父类的private成员子类不能直接访问,需通过getter方法。
- 选项:
-
关于抽象类的说法,错误的是?
- 选项:
A. abstract类可以有private成员
B. static方法可处理非static属性
C. abstract不能与final同修饰一个类
D. abstract方法必须在abstract类中 - 答案:B
- 解析: B选项表述错误。static方法中不能直接访问(处理)非static属性,需要对象实例。C选项是正确的,abstract和final不能同时修饰一个类。
- 选项:
-
以下代码,描述正确的有?
interface IDemo { public static final String name; // 1 void print(); // 2 public void getInfo(); // 3 } abstract class Person implements IDemo { // 4 public void print(){ } }- 选项:
A) 第1行错误,没有给变量赋值
B) 第2行错误,方法没有修饰符
C) 第4行错误,没有实现接口的全部方法
D) 第3行错误,没有方法的实现 - 答案:A
- 解析: 接口中定义的变量默认是
public static final,必须初始化赋值。第1行没有赋值,所以错误。抽象类Person实现了接口,可以不实现全部方法。
- 选项:
-
InnoDB默认的隔离级别是?
- 选项:
A. 读已提交
B. 读未提交
C. 可重复读
D. 串行化 - 答案:C (可重复读)
- 解析: InnoDB存储引擎默认的隔离级别是可重复读(REPEATABLE READ)。
- 选项:
-
错误的是?
- 选项:
A. 抽象类不可实例化
B. 约束作用
C. 抽象类不是静态的,但可密封
D. 抽象类不都是抽象方法 - 答案:C
- 解析: “密封”通常指
final,final和abstract不能同时修饰一个类。C说法错误。
- 选项:
-
关于try-catch-finally,不正确的说法是?
- 选项:
A. 可多个catch
B. catch和finally可同时省略
C. try不可省
D. finally可省 - 答案:B
- 解析: catch和finally不能同时省略,至少有一个。
- 选项:
-
关于继承,错误的是?
- 选项:
A. 父类通用,子类具体
B. 子类一继承多父类 - 答案:B
- 解析: Java是单继承,一个子类只能有一个直接父类。
- 选项:
-
关于Java内存回收,正确的说法是?
- 选项:
A. 内存回收程序负责释放无用内存
B. 程序员可指定时间释放对象
C. 内存回收会立即释放对象
D. 内存回收保证程序不会内存泄漏 - 答案:A
- 解析: Java内存回收是自动的,但不保证立即释放,也不保证不会内存泄漏。程序员无法指定释放时间。
- 选项:
-
以下代码运行输出是?
class A { A() { System.out.print("A"); } } class B extends A { B() { System.out.print("B"); } public static void main(String[] args) { B b = new B(); } }- 选项:
A. AB
B. A
C. 不通过编译
D. B - 答案:A
- 解析: 创建子类对象时,会先调用父类的构造方法,再调用子类的构造方法。输出“AB”。
- 选项:
-
ArrayList list = new ArrayList(20)扩容几次?- 选项:
A. 1次
B. 0次
C. 2次
D. 3次 - 答案:B
- 解析: 创建ArrayList时指定了初始容量20,在添加前20个元素时不会触发扩容。
- 选项:
-
接口的修饰符可以是?
- 选项:
A. protected
B. abstract
C. private
D. final - 答案:B
- 解析: 接口的修饰符可以是
public或默认(包访问权限)。protected,private,final都不能修饰接口。abstract是隐含的,但写上也可以。
- 选项:
-
与数组长度相等的表达式是?
- 选项:
A. m.length
B. m.length+1
C. m.length()
D. m.length()+1 - 答案:A
- 解析: 数组通过
length属性获取长度,不是方法。
- 选项:
-
表达式
Math.ceil(Math.random() * 100 + 1)生成的随机数范围是?- 选项:
A. [1, 100]
B. [1, 101)
C. [2, 101]
D. (1, 100] - 答案:C ([2, 101])
- 解析:
Math.random()产生[0,1)的数,*100得[0,100),+1得[1,101),Math.ceil()向上取整,最小值为2(当原数为1.xxx),最大值为101(当原数为100.xxx)。但此表达式并非生成1-100随机整数的标准写法。标准写法是(int)(Math.random() * 100) + 1。 - 如果要生成1到100随机数,正确的写法是
Math.ceil(Math.random() * 100) - 如果想生成一个从
min到max(包含)的随机整数,通用公式为:Math.ceil(Math.random() * (max - min + 1)) + min - 1
- 选项:
-
关于封装,说法正确的是?
- 题目不全,根据常识: 封装是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问,而是通过该类提供的方法进行操作和访问。
-
哪一个可单独与finally使用?
- 选项:
A. try
B. catch - 答案:A
- 解析: try块可以单独与finally块使用(try-finally),不一定要有catch。
- 选项:
-
System.out.println("" + ("12" == "12" && "12".equals("12")))的值是?- 选项:
A. true
B. false - 答案:A
- 解析:
"12" == "12"比较字符串常量,是同一个对象,返回true。"12".equals("12")比较内容,也返回true。true && true 结果为true。
- 选项:
二、多选题 (9题)
-
Spring框架的核心特征包括?
- 选项:
A. IOC (控制反转)
B. DI (依赖注入)
C. AOP (面向切面编程)
D. ORM (对象关系映射) - 答案:A, B, C, D
- 解析: Spring核心包括IOC和AOP,同时提供对ORM和MVC的支持。
选项 英文全称 中文释义 是否为核心特征 简要说明 A. IOC Inversion of Control 控制反转 是 Spring 框架的基石,指将对象的创建和依赖关系的控制权从应用程序代码反转给 Spring 容器来管理 。 B. DI Dependency Injection 依赖注入 是 IOC 理念的具体实现技术,由容器通过设值(Setter)或构造器等方式动态地将依赖对象注入到组件中 。 C. AOP Aspect-Oriented Programming 面向切面编程 是 将那些遍布在多个模块中的通用功能(如日志、事务管理)抽取出来,形成可重用的“切面”,从而降低耦合度 。 D. ORM Object-Relational Mapping 对象关系映射 是 Spring 提供了对多种 ORM 框架(如 Hibernate, MyBatis, JPA)的集成支持,简化了数据访问层的开发 。 - 选项:
-
以下关于系统稳定性的说法,正确的是?
- 选项:
A. 缓存可以减小数据库压力
B. 熔断可以避免雪崩效应
C. 限流会降低服务器QPS
D. 异步削峰可以提升系统吞吐量 - 答案:A, B, D
- 解析: 限流是为了保护系统,通过限制并发请求来保证服务的稳定性,虽然外部可见的QPS可能被限制,但这是为了保护服务器不崩溃,并不是“降低”了服务器自身的能力。D正确,异步削峰(如用消息队列)可以缓冲请求,平滑处理压力,提升整体吞吐量。
- 选项:
-
关于InnoDB存储引擎,以下说法错误的是?
- 选项:
A. 事务的隔离性通过MVC实现
B. 死锁时会回滚所有事务
C. 支持手动创建Hash索引
D. 通过覆盖索引可以减少回表 - 答案:A, B, C
- 解析: A错误,隔离性通过MVCC(多版本并发控制)和锁实现,不是MVC。B错误,死锁发生时,InnoDB会选择回滚代价最小的事务。C错误,InnoDB不支持手动创建Hash索引,但会自动为自适应哈希索引。D正确,覆盖索引可以减少回表查询。
- 选项:
-
以下哪个是合法的变量声明?
- 选项:
A. int i = 4L
B. double d = 34.4
C. long l = 4990
D. float f = 1.1 - 答案:B, C
- 解析: A错误,long不能直接赋给int,需要强转。B正确,double可以接收小数。C正确,int可以隐式转为long。D错误,1.1默认是double,不能直接赋给float,需加
f后缀(1.1f)。
- 选项:
-
以下哪些开源中间件的集成可以有效改善系统性能?
- 选项:
A. Kafka (消息队列)
B. MongoDB (NoSQL数据库)
C. Redis (缓存)
D. ElasticSearch (搜索引擎) - 答案:A, B, C, D
- 解析: 这些中间件都可以通过不同方式(如解耦、快速读写、全文检索)提升系统性能。
- 选项:
-
以下哪个表达式是正确的?
- 选项:
A. String str = String(“bb”)
B. long i = 8888
C. int lk = new String(“aa”)
D. char c = 74 - 答案:B, D
- 解析: A错误,创建String对象应用
new String(“bb”)或直接赋值“bb”。B正确,int可隐式转long。C错误,String对象不能直接赋给int。D正确,74是ASCII码对应的字符’J’。
- 选项:
-
微服务架构的特征包括?
- 选项:
A. 符合CAP原则
B. Sidecar模式不能提供微服务架构
C. 跨语言跨平台
D. 去中心化的服务交互 - 答案:A, C, D
- 解析: A正确,分布式系统(如微服务)需要权衡CAP。B错误,Sidecar模式(如Service Mesh)是实现微服务架构的一种模式。C、D正确,微服务通常强调技术栈多样化和去中心化治理。
- 选项:
-
Redis支持哪些数据结构?
- 选项:
A. List (列表)
B. Tree (树)
C. Hash (哈希)
D. Set (集合) - 答案:A, C, D
- 解析: Redis支持String、List、Hash、Set、SortedSet等,但不直接支持Tree(二叉树等)。SortedSet是有序集合,底层是跳表,不是Tree。
- 选项:
-
哪些模式是以提升系统维护性、扩展性为主要目标?
- 选项:
A. CQRS (命令查询职责分离)
B. NIO (网络I/O模型)
C. MVC (模型视图控制器)
D. TDD (测试驱动开发) - 答案:A, C
- 解析: CQRS和MVC都通过分离关注点来提升可维护性和可扩展性。NIO是一种I/O模型,主要解决高并发问题。TDD是一种开发方法,主要提升代码质量和可测试性。
- 选项:
更多推荐

所有评论(0)