2022Java笔试题选择题整理(附答案解析)走过路过不要错过了喂!

Posted 编程ID

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022Java笔试题选择题整理(附答案解析)走过路过不要错过了喂!相关的知识,希望对你有一定的参考价值。

2022Java笔试题选择题(一)

 🏠个人主页:@编程ID 
 🧑个人简介:大家好,我是编程ID,一个想要与大家共同进步的程序员
 🧑如果各位大佬在准备面试,找工作,刷算法,刷选择题,可以使用我找工作前用的刷题神器哦![面试刷题神器🎁]
 💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,望能帮到各位想要找工作或者提高自己的小伙伴儿们,如果有什么需要改进的地方,还请大佬不吝赐教🤞🤞

真正做错的题,不会做的题价值才最大!!!

1、有如下一段代码,请选择其运行结果()

public class StringDemo
  private static final String MESSAGE="csdn";
  public static void main(String [] args) 
    String a ="cs"+"dn";
    String b="cs";
    String c="dn";
    System.out.println(a==MESSAGE);
    System.out.println((b+c)==MESSAGE);
  
  

A.true true

B.false false

C.false true

D.true false

★为了给大家思考的空间,答案放在在下一题下方!

2、java中的哪些包不需要手动导入(自动导入)?()

A.java.lang

B.java.util

C.java.applet

D.java.awt

★为了给大家思考的空间,答案放在在下一题下方!

☝第一题解析
答案:D
要注意两个问题:
1,字符串在java中存储在字符串常量区中(不属于堆和栈)
2,==判断的是对象引用是否是同一个引用,判断字符串相等要用equals方法
首先判断a==MESSAGE 
String a = "tao" + "bao";
此时的a会存放在常量池区域内 
同一份字符串常量在内存中只有一份,据题意 , a会和定义的静态常量指向的是同一地址,返回true
再次比较(b+c)==MESSAGE 这相当于 new String(b+c)==MESSAGE 这里new了一个String对象,所以返回false
扩展知识:
1.堆(heap)
 在JVM中只有一个堆,在虚拟机开启时创建,所有的线程都共用这一个堆。类的对象会储存在堆内存中,而new对象的引用地址会储存在stack栈中。堆中只存储对象本身和数组。

2.栈(stack)
 Java栈与堆不同每一个线程都有一个stack,栈的区域非常小,大概只有1M左右,但是存储速度非常快,所以我们把快速执行的任务存储在stack。栈中存储的就是基本数据类型和对象的引用(地址,而不是实例!)。

3.方法区(method)
 方法区(method)又叫静态区,这里主要存储的就是类(class)、静态方法、静态变量、常量以及成员方法。我们可以发现在方法区中存储的都是整个程序中唯一存在的元素,所以方法区与堆一样被所有线程共享。我们常说的常量池也是方法区的一部分。

 

3、根据以下代码段,执行new Child("John", 10); 要使数据域data得到10,则子类空白处应该填写(    )。

A.data = d;

B.super.data = d;

C.Parent(d);

D.super(d);

★为了给大家思考的空间,答案放在在下一题下方!

☝第二题解析
答案:A
本题考查Java中包的概念。Java中用import语句来导入包,但需注意的是,Java语言中的java.lang包是由编译器直接自动导入的,
因此,编程时使用该包中的类,可省去 import导入。使用其他包中的类,必须用import导入。

扩展知识:

java.lang:java.lang包是Java语言的核心,它提供了java中的基础类。包括基本Object类、Class类、String类、基本类型的包装类、基本的数学类等等最基本的类。

Java 8中的java.lang包。主要类如下图:

4、以下代码的输出结果是?

public class B

    public static B t1 = new B();
    public static B t2 = new B();
    
        System.out.println("构造块");
    
    static
    
        System.out.println("静态块");
    
    public static void main(String[] args)
    
        B t = new B();
    

A.静态块 构造块 构造块 构造块

B.构造块 静态块 构造块 构造块

C.构造块 构造块 静态块 构造块

D.构造块 构造块 构造块 静态块

★为了给大家思考的空间,答案放在在下一题下方!

☝第三题解析(喜欢就点赞收藏起来趴♥♥♥)
答案: D
1.子父类存在同名成员时,子类中默认访问子类的成员,可通过super指定访问父类的成员,格式:super.xx  (注:xx是成员名);
2.创建子类对象时,默认会调用父类的无参构造方法,可通过super指定调用父类其他构造方法,格式:s uper(yy) (注:yy是父类构造方法需要传递的参数)

5、下列代码输出结果为(      )

class Animal
    public void move()
        System.out.println("动物可以移动");
    

class Dog extends Animal
    public void move()
        System.out.println("狗可以跑和走");
    
    public void bark()
        System.out.println("狗可以吠叫");
    

public class TestDog
    public static void main(String args[])
        Animal a = new Animal();
        Animal b = new Dog(); 
        a.move();
        b.move();
        b.bark();
    

A.动物可以移动

狗可以跑和走

狗可以吠叫

B.动物可以移动

动物可以移动

狗可以吠叫

C.运行错误

D.编译错误

★为了给大家思考的空间,答案放在在下一题下方!

☝第四题解析
答案:C
开始时JVM加载B.class,对所有的静态成员进行声明,t1 t2被初始化为默认值,为null,又因为t1 t2需要被显式初始化,
所以对t1进行显式初始化,初始化代码块→构造函数(没有就是调用默认的构造函数),咦!静态代码块咋不初始化?因为
在开始时已经对static部分进行了初始化,虽然只对static变量进行了初始化,但在初始化t1时也不会再执行static块了,
因为JVM认为这是第二次加载类B了,所以static会在t1初始化时被忽略掉,所以直接初始化非static部分,也就是构造块
部分(输出''构造块'')接着构造函数(无输出)。接着对t2进行初始化过程同t1相同(输出'构造块'),此时就对所有
的static变量都完成了初始化,接着就执行static块部分(输出'静态块'),接着执行,main方法,同样也,new了对象,
调用构造函数输出('构造块')

6、往OuterClass类的代码段中插入内部类声明, 错误的是:

public class OuterClass
    private float f=1.0f;
    //插入代码到这里
A.class InnerClass
public static float func()return f;
B.abstract class InnerClass
public abstract float func()
C.static class InnerClass
protected static float func()return f;
D.public class InnerClass
 static float func()return f;

★为了给大家思考的空间,答案放在在下一题下方!

☝第五题解析(喜欢就点赞收藏起来趴♥♥♥)
答案: D  
编译看左边,运行看右边。也就是是编译的时候会把它当成左边的类型,运行的时候看右边类型的方法体。
父类型引用指向子类型对象,无法调用只在子类型里定义的方法

7、以下代码的运行结果是什么(  )

class Supper     

 public int get()    

            

System.out.println("Supper");         

 return 5;     

     

      

public class Sub     

 public int get()    

          

 System.out.println("Sub");        

 return new Integer("5");                

 public static void main(String args[])           

 new Supper().get();        

   new Sub().get();             

  
A.Supper Sub
B.Supper 5 Sub
C.Supper 5 5 Sub
D.Supper Sub 5 5

★为了给大家思考的空间,答案放在在下一题下方!

☝第六题解析(喜欢就点赞收藏起来趴♥♥♥)
答案:  A B C D 
A  静态内部类中才能含有静态属性,静态方法当中不能引用非静态变量。
B 抽象类不能有方法体。
C 静态方法当中不能引用非静态变量
D  静态方法当中不能引用非静态变量

8、java用()机制实现了线程之间的同步执行

A.监视器
B.虚拟机
C.多个CPU
D.异步调用

★为了给大家思考的空间,答案放在在下一题下方!

☝第七题解析(喜欢就点赞收藏起来趴♥♥♥)
答案: A
要相信自己,明明都没有打印返回值,哪来的5

9、以下哪个式子有可能在某个进制下成立()

A.13*14=204
B.12*34=568
C.14*14=140
D.1+1=3

★为了给大家思考的空间,答案放在在下一题下方!

☝第八题解析(喜欢就点赞收藏起来趴♥♥♥)
答案: A
首先jvm中没有进程的概念 ,但是jvm中的线程映射为操作系统中的进程,对应关系为1:1。那这道题的问的就是jvm中线程如何异步执行。在jvm中 是使用监视器锁来实现不同线程的异步执行,在语法的表现就是synchronized  。

10、下列说法正确的是()?

A.我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程
B.一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源
C.synchronized可以解决可见性问题,volatile可以解决原子性问题
D.ThreadLocal用于创建线程的本地变量,该变量是线程之间不共享的

★为了给大家思考的空间,答案放在在下一题下方!

☝第九题解析(喜欢就点赞收藏起来趴♥♥♥)
答案: A  
(3+x)*(4+x)=2x^2+4
.....x=8或-1

11、在Spring事务的ISOLATION_REPEATABLE_READ隔离级别下,有可能出现以下哪种情况(   )

A.脏读
B.幻读
C.不可重复读
D.都有可能发生

★为了给大家思考的空间,答案放在在下一题下方!

☝第十题解析(喜欢就点赞收藏起来趴♥♥♥)
答案: B D
A:可以直接调用run方法, 但就起不到多线程的目的了。A选项错在调用Thread的run方法不会抛出异常。
C:volatile不能保证原子性问题

12、下面代码创建了多少个对象()

String s = "a"+"c"+"+"d"

A.1

B.2

C.3

D.4

★为了给大家思考的空间,答案放在在下一题下方!

☝第十一题解析(喜欢就点赞收藏起来趴♥♥♥)
答案: B 
ISOLATION_REPEATABLE_READ隔离级别下,对同一字段的多次读取结果都是一致的,除非数据是被本身事务自
己所修改,这种隔离级别可以阻止脏读和不可重复读,但幻读仍有可能发生。

13、以下哪些类是线程安全的()

A.Vector
B.HashMap
C.ArrayList
D.StringBuffer
E.Properties

★为了给大家思考的空间,答案放在在下一题下方!

☝第十二题解析

如果你比较一下Java源代码和反编译后的字节码文件,就可以直观的看到答案,只创建了一个String对象。

关于这个问题很多人面试的时候都遇见过,我看了网上很多论坛对于这个问题都是不统一的。有的人说创建了一个对象,有的人说创建了五个对象,也有的人说创建了两个对象。

先说说创建一个的吧。当初面试的时候我跟面试官说创建了一个,他用非常疑惑的语气告诉我说,不只是一个哦,然后这道面试题我就被pass掉了。好在过了技术面试了,但是对于这个问题我还是耿耿于怀,直到后来我看了《深入理解JVM》这本书之后有种豁然开朗的感觉。

其实网上的很多大佬们说创建了一个对象,这个答案是没有问题的!!!
但是面试的时候为什么会被说是错误的呢?其实面试官真正想问的并不是这个,而是你对于JDK版本的理解,不同的JDK版本对于字符串常量池有不同的优化!!感兴趣的自己再去查查吧!这里就不多阐述了
 

14、下列java程序的输出结果为()。

public class Example
    String str=new String("hello");
    char[]ch='a','b';
    public static void main(String args[])
        Example ex=new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str+" and ");
        System.out.print(ex.ch);
    
    public void change(String str,char ch[])
        str="test ok";
        ch[0]='c';
    
A.hello and ab
B.hello and cb
C.hello and a
D.test ok and ab
E.test ok and cb
F.test ok and c
☝第十三题解析
答案:ADE
A,Vector相当于一个线程安全的List
B,HashMap是非线程安全的,其对应的线程安全类是HashTable
C,Arraylist是非线程安全的,其对应的线程安全类是Vector
D,StringBuffer是线程安全的,相当于一个线程安全的StringBuilder
E,Properties实现了Map接口,是线程安全的
源码看下图所示

 

 

15、下列有关Servlet的生命周期,说法不正确的是?

A.在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例
B.在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
C.在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源
D.destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法

☝第十四题解析
答案:B
解析如下图所示

 

16、以下关于JAVA语言异常处理描述正确的有?()

A.throw关键字可以在方法上声明该方法要抛出的异常。
B.throws用于抛出异常对象。
C.try是用于检测被包住的语句块是否出现异常,如果有异常,则捕获异常,并执行catch语句。
D.finally语句块是不管有没有出现异常都要执行的内容。
F.在try块中不可以抛出异常

☝第十五题解析
正确答案: A 
创建Servlet的实例是由Servlet容器来完成的,且创建Servlet实例是在初始化方法init()之前
☝第十六题解析
答案: C D 
Java语言中的异常处理包括声明异常、抛出异常、捕获异常和处理异常四个环节。
throw用于抛出异常。
throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。
try是用于检测被包住的语句块是否出现异常,如果有异常,则抛出异常,并执行catch语句。
cacth用于捕获从try中抛出的异常并作出处理。
finally语句块是不管有没有出现异常都要执行的内容。

 结束语 🥇🥇🥇
发现非常好用的一个刷题网站!大家一起努力!加油!!!
题目难度可以自行选择,有选择题,编程题
在线编程出答案,(也可自行查看答案)非常方便
程序员刷题神器网站[点击链接注册即可刷题 ]
祝大家早日找到满意的工作!

2021最新Java笔试题及答案,Java面试真题精选

二、回顾整理阿里面试题

基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

  • 自我介绍
  • JVM如何加载一个类的过程,双亲委派模型中有哪些方法?
  • HashMap如何实现的?
  • HashMap和ConcurrentHashMap区别, Concurrent HashMap 线程安全hashtable吗, ConcurrentHashMap如何保证 线程安全?
  • HashMap和HashTable 区别,HashTable线程安全吗?
  • 进程间通信有哪几种方式
  • JVM分为哪些区,每一个区干吗的?
  • JVM如何GC,新生代,老年代大对象,永久代,都储存哪些东西?
  • GC用的引用可达性分析算法中,哪些对象可作为GC Roots对象?
  • 快速排序,过程,复杂度 ?
  • 什么是二叉平衡树,如何插入节点,删除节点,说出关键步骤。
  • TCP如何保证可靠传输?三次握手过程
  • TCP 和 UDP 的区别
  • 滑动窗口算法?
  • Linux下你常用的命令有哪些?
  • 操作系统什么情况下会死锁?
  • 常用的hash算法有哪些?
  • 什么是一致性哈希?
  • 如何理解分布式锁?
  • 数据库中的范式有哪些?
  • 数据库中的索引的结构?什么情况下适合建索引?
  • Java中的NIO,BIO,AIO分别是什么?
  • 用什么工具调试程序?JConsole,用过吗?
  • 现在有一个进程挂起了,如何用工具查出原因?
  • 线程同步与阻塞的关系?同步一定阻塞吗?阻塞一定同步吗?
  • 同步和异步有什么区别?
  • 线程池用过吗?
  • 如何创建单例模式?说了双重检查,他说不是线程安全的。如何高效的创建的一个高效的单例?
  • concurrent包下面,都用过什么?
  • 常用的数据库有哪些?redis用过吗?
  • 了解hadoop吗?说说hadoop的组件有哪些?hdfs,hive,hbase,zookeeper。说下mapreduce编程模型。
  • 你知道的开源协议有哪些?
  • 你知道的开源软件有哪些?
  • 你最近在看的书有哪些?
  • 你有什么问题要问我吗?

啃完这份超全的面试宝典,终获蚂蚁金服offer!

自从进入阿里工作后,我才感觉到了自己从事这份职业所在的意义,我也庆幸自己没有在受挫的时候放弃这个职业。

宝典大概分为这几块:

  • Java基础
  • 数据库
  • Java 虚拟机
  • JSP&Servlet
  • spring&Hibernate
  • 操作系统
  • Linux
  • 计算机网络
  • 算法

Java基础

1、面对对象和面向过程的区别?用面向过程可以实现面向对象吗?那是不是不能面向对象?

2、static和final的区别和用途

3、HashMap和Concurrent HashMap区别,Concurrent HashMap线程安全吗,Concurrent HashMap如何保证线程安全?

4、因为别人知道源码怎实现的,故意构造相同的hash的字符串进行攻击,怎么处理,那jdk7怎么办?

5、Java序列化,如何实现序列化和反序列化,常见的序列化协议有哪些

6、Java实现多线程的方式及三种方式的区别

7、线程安全

8、多线程如何进行信息交互

9、Java是否有内存泄露和内存溢出

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

数据库

1、常见的数据库类型有哪些?redis用过吗

2、数据库中的范式有哪些?

3、数据库中的索引的结构?什么情况下适合建索引?

4、脏读、不可重复读和幻读

6、MyISA和InnDB引擎的区别

7、数据库ACID

8、事务隔离级别

9、数据库中的分页查询语句怎么写?

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

Java虚拟机

1、JVM垃圾处理方法(标记清除、复制、标记整理)

2、JVM如何GC,新生代,老年代,持久代,都储存哪些东西,以及各个区的作用?

3、GC用的引用可达性分析算法中,哪些对象可作为GC Roots对象?

4、什么时候进行MinGC,FulilGc

5、各个垃圾收集器是怎么工作的

6、Java虚拟机内存的划分,每个区域的功能

7、用什么工具可以查出内存泄露

8、JVM如何加载一个类的过程,双亲委派模型中有哪些方法有没有可能父类加载器,加载同一个类?如果加载同一个类,该使用哪一个类?

9、Java是如何进行对象实例化的

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

JSP&Servlet

1、Servlet的生命周期

2、Jsp和Servlet的区别

3、保存会话状态,有哪些方式、区别如何

4、cookie和session的区别

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

spring&Hibernate

1、spring ioc、AOP的理解以及实现的原理

2、IOC容器的加载过程

3、动态代理与cglib实现的区别

4、代理的实现原理

5、Hlbernate一级缓存与二级缓存之间的区别

6、spring mvc的原理

7、简述Hibernate常见优化策略

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

操作系统

1、操作系统下生命情况会死锁?

2、如何理解分布式锁

3、进程间通信有哪几种方式?

4、线程同步与阻塞的关系?同步一定要阻塞吗?阻塞一定要同步吗?

5、操作系统如何进行分页调度?

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

Linux

1、linux下如何进行进程调度的?

2、linux下你常用的命令有哪些?

计算机网络

1、Http和https的区别

2、TCP如何保证可靠传输?三次握手过程?

3、为什么TCP连接需要三次握手,两次不可以吗,为什么

4、如果客户端不断的发生请求连接会怎么样?

5、GET和POST的区别?

6、TCP和UDP区别?如何改进TCP

7、从输入网址到获得页面的过程

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

算法

1、如何判断一个单链表是否有环?

2、快速排序,过程,复杂度?什么情况下适用,什么情况下不适用?

3、什么是二叉平衡树,如何插入节点,删除节点

5、二分搜索的过程

6、归并排序的过程?时间复杂度?空间复杂度?

7、给你一万个数,如何找出里面所有重复的数?用所有你能想到的办法,时间复杂度和空间复杂度分别是多少?

8、给你一个数组,如何里面找到和为k的两个数

9、100000个数找出最小或最大的10个?

image.png

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

三、难道这样就够了吗?不,远远不够!

提前多熟悉阿里往年的面试题肯定是对面试有很大的帮助的,但是作为技术性职业,手里有实打实的技术才是你面对面试官最有用的利器,这是从内在散发出来的自信。

备战阿里时我花的最多的时间就是在学习技术上,占了我所有学习计划中的百分之70,这是一些我学习期间觉得还是很不错的一些学习笔记,以及学习视频都是可以分享给大家的!

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

阿里一面就落马,恶补完这份“阿里面试宝典”后,上岸蚂蚁金服

image.png

最后总结

搞定算法,面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析,以及算法刷题LeetCode中文版的小伙伴们可以点赞后点击这里即可免费获取!

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

image

面试字节再不怕,有需要文章中分享的这些二叉树、链表、字符串、栈和队列等等各大面试高频知识点及解析,以及算法刷题LeetCode中文版的小伙伴们可以点赞后点击这里即可免费获取!

最后再分享一份终极手撕架构的大礼包(学习笔记):分布式+微服务+开源框架+性能优化

[外链图片转存中…(img-sUuFMuDs-1624867233986)]

以上是关于2022Java笔试题选择题整理(附答案解析)走过路过不要错过了喂!的主要内容,如果未能解决你的问题,请参考以下文章

冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)

冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)

asp.net 部分面试问题总结(附答案),比大篇幅的笔试题管用

2022最新整理软件测试常见面试题附答案

2022,最新整理软件测试的一些笔试题

2022,最新整理软件测试的一些笔试题