校招选择题汇总【JavaSE(2)】含答案解析

2024-05-08 18:18

本文主要是介绍校招选择题汇总【JavaSE(2)】含答案解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  

题目1

答案:A

基类和导出类在 《Think  in  java》 中文翻译是 《java编程思想》 第四版 里有这个概念。基类就是父类,导出类就是子类。子类调用父类构造方法用super()关键字,且放在子类构造函数的第一行。

题目2

答案:A

B,java.awt包是java图形界面的包

C,java.lang是java语言的核心好,lang是language的简写

D,java.swing是经过java封装的与操作系统无关的图形界面包

题目3

答案:A

static用来修饰类或类的成员,这时不需要创建实例就能访问(而且不能实例化),在被调用的时候自动实例化,且在内存中产生一个实例。当含有静态成员的非静态类实例化出对象后,这些对象公用这些静态成员,通过类名或对象名都能访问它们

题目4

答案:C

A:不存在x[25] 索引从0开始到length-1
B:x[24] 存的是默认值0(java中没有'\0'这一说)
C:超出内存 正确
D:第二元素

题目5

答案:A

注解:java 中没有<> := 这种运算符, if else不算运算符,因此选a

题目6

答案:A

JAVA访问变量采用就近原则,局部变量与成员变量重名时,局部变量比较近,使用局部变量

题目7

答案:A

在Applet中,方法执行的顺序是: init()-> start()-> paint()-> stop()-> destroy()

题目8

答案:C

首先要注意的是它的返回值类型是long,如果 Math.round(11.5f),那它的返回值类型就是int,这一点可以参考API

其次  Returns the closest long to the argument, with ties rounding to positive infinity

它返回的是一个最接近参数的long 值(例如: Math.round(11.6) = 12; Math.round(-11.6) = -12; Math.round(-0.1) = 0; Math.round(0.1) = 0 ),那如果出现向上向下距离一样的数值, 比如题目中的11.5,该如何处理呢 ,别着急,看它的后半句话, with ties rounding to positive infinity( 同时向正无穷方向取舍或者翻译成取较大的值,英语水平较差,只能翻译成这样了;

例子:    Math.round(11.5)  ,首先与 11.5最接近的有两个整数 11 和 12,取较大的那结果就是12;

           Math.round(-11.5), 首先与 -11.5最接近的有两个整数 -11 和 -12,取较大的那结果就是-11;

           Math.round(0.5), 首先与 0.5最接近的有两个整数 0 和 1,取较大的那结果就是1;

           Math.round(-0.5), 首先与 -0.5最接近的有两个整数 -1 和 0,取较大的那结果就是0; )

然后它有三个特例:

1. 如果参数为 NaN(无穷与非数值) ,那么结果为 0。

2.如果参数为负无穷大或任何小于等于 Long.MIN_VALUE 的值,那么结果等于Long.MIN_VALUE 的值。

3.如果参数为正无穷大或任何大于等于 Long.MAX_VALUE 的值,那么结果等于Long.MAX_VALUE 的值。

题目9

答案:B

Stack是栈, queue是对列;

栈是后进先出,对列是先进先出;

栈是出入从同一个位置;

对列是入从结构的一端进入,从另一端出队;

栈就像一个盒子,你把物体依次放入后,能先拿出来的只能是上面最后放进去的,下层的想要拿出需要将上层的先拿出,也就是先出栈;

对列是一个胡同,人们都进入胡同了,只有最前面的人从胡同出口出去,后面的人只有等前面的人走完后才能依次通过。

题目10

答案:A

原生类是指Java中,数据类型分为基本数据类型(或叫做原生类、内置类型)和引用数据类型。

题目11

答案:D

这个说法说反了

Arraylist的内存结构是数组,当超出数组大小时创建一个新的数组,吧原数组中元素拷贝过去。其本质是顺序存储的线性表,插入和删除操作会引发后续元素移动,效率低,但是随机访问效率高

LinkedList的内存结构是用双向链表存储的,链式存储结构插入和删除效率高,不需要移动。但是随机访问效率低,需要从头开始向后依次访问

题目12

答案:B

初始化块在构造器执行之前执行,类初始化阶段先执行最顶层父类的静态初始化块,依次向下执行,最后执行当前类的静态初始化块;创建对象时,先调用顶层父类的构造方法,依次向下执行,最后调用本类的构造方法。

题目13

答案:D

  1. 类的静态成员与类直接相关,与对象无关,在一个类的所有实例之间共享同一个静态成员,A正确
  2. 静态成员函数中不能调用非静态成员,C正确
  3. 非静态成员函数中可以调用静态成员,B正确
  4. 常量成员才不能修改,静态成员变量必须初始化,但可以修改(例如我们常利用静态成员变量统计某个函数的调用次数),D错误

题目14

答案:C

效率:StringString(大姐,出生于JDK1.0时代) 不可变字符序列     <StringBuffer(二姐,出生于JDK1.0时代)  线程安全的可变字符序列    <StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列   。Java中的String是一个类,而并非基本数据类型。string是值传入,不是引用传入。 StringBuffer和StringBuilder可以算是双胞胎了,这两者的方法没有很大区别。但在线程安全性方面,StringBuffer允许多线程进行字符操作。 这是因为在源代码中StringBuffer的很多方法都被关键字 synchronized  修饰了,而StringBuilder没有。 StringBuilder的效率比StringBuffer稍高,如果不考虑线程安全,StringBuilder应该是首选。另外,JVM运行程序主要的时间耗费是在创建对象和回收对象上

题目15

答案:C

Test mv =newTest()声明并初始化对data赋默认值 

使用synchronized关键字加同步锁线程依次操作m() 

t1.start();使得result=2,data=2,输出即为2 2 

t2.start();使得result=4,data=4,输出即为4 4 

t3.start();使得result=6,data=6,输出即为6 6 

 System.out.print(result +" "+ data);是print()方法不会换行,输出结果为2 24 46 6

题目16

答案:A

B和C万一还是抽象类或者接口呢?抽象类可以继承抽象类,接口也可以继承接口的啊

题目17

答案:C

依赖注入目的是减少组件之间的耦合度,使开发变得简单。

题目18

答案:B

首先说下String确实是个不可变对象,这个不可变是JDK特有的,写JAVA的人特意针对的

但是这与本题无关,题目中的形参str只是原引用ex.str的一个引用副本,传的是一个副本地址值,这个值与ex.str地址值是不一样的,但是它们同时指向了堆中的对象new String("good"),当你在函数中改变形参也就是地址的副本值也就是这句str="test ok"只是将副本地址指向常量"test ok",并没有改变原ex.str的指向方向,它还是指向对象new String("good")的

char数组与String一样传的也是地址的副本,但是关键是形参ch它没有新的指向 ch[0]只是ch在指向原对象时改变了对象的内部结构, 所以在ex.ch指向与它是同一个对象的情况下当然也会随之变化

题目19

答案:C

instance是java的二元运算符,用来判断他左边的对象是否为右面类(接口,抽象类,父类)的实例

题目20

答案:A

A选项中,抽象类不能实例化,这句是正确的。后面,抽象类不能申明为对象,是错误的。java中,接口和抽象类,都可以声明为对象,只需要在实例化的时候,用一个该接口/抽象类的实现类实例化就行了。即:

interface / abstract class obj = new class();其中,new后面的class是前面接口/抽象类的实现类。

B选项中,接口是一种特殊的抽象类。其中,成员变量都是默认public static final修饰的,方法都是public abstract修饰的,并且除了default和static的以外,只有声明,没有方法体。

C选项中,抽象类的方法,可以是抽象abstract的,也可以是普通的。就算全部是普通方法,也可以用abstract修饰。

D选项中,导出类,及子类,抽象类的子类可以是抽象的,也可以是普通的。

题目21

答案:B

包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

2)抽象类不能用来创建对象;

3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

在其他方面,抽象类和普通的类并没有区别。

题目22

答案:D

A、ConcurrentHashMap实际上时 HashTable的升级版,使用segment来分段和管理锁,并不是synchronized;

B、 HashMap实现的接口有:Serializable, Cloneable, Map<K,V> ,没有实现Cllectio

C、Arrays.asList()方法返回的列表是Arrays.ArrayList类型的,并不是java.util.ArrayList;

D、正确

题目23

答案:B

关于抽象类

JDK 1.8以前,抽象类的方法默认访问权限为protected

JDK 1.8时,抽象类的方法默认访问权限变为default

关于接口

JDK 1.8以前,接口中的方法必须是public的

JDK 1.8时,接口中的方法可以是public的,也可以是default的

JDK 1.9时,接口中的方法可以是private的

题目24

答案:C

每个线程输出0,1,2,3,4,’空格, 输出空格前必有线程输出了0-4,所以选C

题目25

答案:D

对于线程而言,start是让线程从new变成runnable。run方法才是执行体的入口。

但是在Thread中,run方法是个空方法,没有具体实现。

Bground继承了Thread,但是没有重写run方法,那么调用run方法肯定是无输出。

题目26

答案:D

Spring Framework是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,Spring中包含的关键特性:
1.强大的基于JavaBeans的采用控制翻转(Inversion of Control,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。
2.一个可用于从applet到Java EE等不同运行环境的核心Bean工厂。
数据库事务的一般化抽象层,允许声明式(Declarative)事务管理器,简化事务的划分使之与底层无关。
3.内建的针对JTA和单个JDBC数据源的一般化策略,使Spring的事务支持不要求Java EE环境,这与一般的JTA或者EJB CMT相反。
4.JDBC 抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用JDBC时,你无需再写出另一个'终止'(finally)模块。并且面向JDBC的异常与Spring通用数据访问对象(Data Access Object)异常等级相一致。
5.以资源容器,DAO实现和事务策略等形式与Hibernate,JDO和iBATIS SQL Maps集成。利用众多的翻转控制方便特性来全面支持,解决了许多典型的Hibernate集成问题。所有这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范。
6.灵活的基于核心Spring功能的MVC网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如JSP、FreeMarker、Velocity、Tiles、iText以及POI。值得注意的是,Spring中间层可以轻易地结合于任何基于MVC框架的网页层,例如Struts、WebWork或Tapestry。
7.提供诸如事务管理等服务的面向方面编程框架。
 

另外,Spring并没有提供日志系统,我们需要使用AOP(面向方面编程)的方式,借助Spring与日志系统log4j实现我们自己的日志系统。

题目27

答案:AC

Collection

    -----List

               -----LinkedList    非同步

                ----ArrayList      非同步,实现了可变大小的元素数组

                ----Vector          同步           

    -----Set   不允许有相同的元素

 Map

    -----HashTable        同步,实现一个key--value映射的哈希表,key和value都不允许出现null值

    -----HashMap          非同步,

    -----WeakHashMap   改进的HashMap,实现了“弱引用”,如果一个key不被引用,则被GC回收

注:

List接口中的对象按一定顺序排列,允许重复 
Set接口中的对象没有顺序,但是不允许重复 
Map接口中的对象是key、value的映射关系,key不允许重复

题目28

答案:ABD

在根类Object中包含一下方法: 
 

  1. clone();
  2. equals();
  3. finalize();
  4. getClass();[align=left][/align]
  5. notify(),notifyAll();
  6. hashCode();
  7. toString();
  8. wait();

题目29

答案:CD

构造方法是一种特殊的方法,具有以下特点。

(1)构造方法的方法名必须与类名相同。

(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。

(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。

(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。

(5)构造方法可以重载,以参数的个数,类型,顺序。

题目30

答案:ADE

java中的线程安全是什么:
就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问
什么叫线程安全:
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。
看过vector源码的同学就会知道他的许多操作都是加了synchronized修饰的比如他的添加元素。(不知道synchronized是什么意思的自行百度!)

1

2

3

public synchronized void addElement(E obj) {  modCount++;

       ensureCapacityHelper(elementCount + 1);  elementData[elementCount++] = obj;

}

而HashMap的所有操作都没有加synchronized修饰 ,不如他的put源码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

public V put(K key, V value) {

     if (key == null)

         return

      putForNullKey(value);

      int hash = hash(key.hashCode());

      int i = indexFor(hash, table.length);

      for(Entry<K,V> e = table[i]; e != null; e = e.next) {

         Object k;

         if (e.hash == hash &&((k = e.key) == key || key.equals(k))) {

             V oldValue = e.value;

             e.value = value;

             e.recordAccess(this);

             return

             oldValue;    }

     }

     modCount++;

     addEntry(hash, key, value, i);

     return null;

 }

再看看ArrayList的add方法的源码

1

2

3

4

5

public boolean add(E e) {

     ensureCapacity(size + 1);  // Increments modCount!!

     elementData[size++] = e;

     return true;

 }

再看StringBuffer的append源码,他是有synchronized修饰的

1

2

3

4

5

public synchronized

  StringBuffer append(String str) {

     super.append(str);

     return this;

 }

最后是Properties的setProperty方法,他是有synchronized修饰的

1

2

3

4

5

public synchronized

  Object setProperty(String key, String value) {

      return

      put(key, value);

 }

由此就可以判断出谁是线程安全的了。

  

这篇关于校招选择题汇总【JavaSE(2)】含答案解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/971068

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听