8-18java面试题上复盘

枚举(enum)属于原始数据类型(primitive type)(B)。
A、正确
B、错误
解析:
java中原始数据类型只有八种,分别为:boolean,byte,char,short,float,int,long,double

我们在程序中经常使用“System.out.println()”来输出信息,语句中的System是包名,out是类名,println是方法名。(B)
A、正确
B、错误
解析:
System是java.lang包下的一个类,out为其下的一个final静态成员(PrintStream类型),println为PrintStream的实例方法

以下代码执行的结果显示是多少(B)

A、num * count = 505000
B、num * count =0
C、运行时错误
D、num * count =5050
解析:
count = count++ 前面为新count后面为旧count,新count=0,然后就count+1,再进循环时此时的新count就成了旧count

(多选)下面有关servlet的层级结构和常用的类,说法正确的有?(ABCD)
A、GenericServlet类:抽象类,定义一个通用的、独立于底层协议的Servlet。
B、大多数Servlet通过从GenericServlet或HttpServlet类进行扩展来实现
C、ServletConfig接口定义了在Servlet初始化的过程中由Servlet容器传递给Servlet得配置信息对象
D、HttpServletRequest接口扩展ServletRequest接口,为HTTP Servlet提供HTTP请求信息
解析:

  • GenericServlet是一个抽象类,必须给出子类才能实例化.他给出了设计Servlet的一些骨架,定义了Servlet的生命周期,还有一些得到名字,配置,初始化参数的方法.其设计的是和应用层协议无关的,即你可以用非HTTP协议实现他.
  • HttpServlet是GenericServlet的子类,具有GenericServlet的一切特性,还添加了doGet,doPost,doDelete,doPut,doTrace等方法对应处理http协议里的命令的请求响应过程
  • 一般没有特殊的需要,自己写的Servlet都扩展HttpServlet.

(多选)以下说法错误的是(BCD)
A、其他选项均不正确
B、java线程类优先级相同
C、Thread和Runnable接口没有区别
D、如果一个类继承了某个类,只能使用Runnable实现线程
解析:

  • java线程类优先级不同
  • Thread实现了Runnable接口,是一个类不是接口
  • 实现线程的三个方法:
    1.继承Thread类,一旦继承了Thread类就不能继承其他类了,重写run方法
    2.实现Runnable接口,实现run方法
    3.实现callable接口,有返回值

java 中哪个关键字可以对对象加互斥锁(B)
A、transient
B、synchronized
C、serialize
D、static
解析:

  • synchronized : 给方法.对象,代码块加锁,使得同一时刻只有一个进程访问他
  • static:声明静态变量,静态方法,代码块
  • serialize:Java对象序列化为二进制文件
  • transient:使java对象不能序列化

一个文件中的数据要在控制台上显示,首先需要(C )。
A、System.out.print (buffer[i]);
B、FileOutputStream fout = new FileOutputStream(this.filename);
C、FileInputStream fin = new FileInputStream(this.filename);。
D、System.in.read(buffer)。
解析:

  • 字节流读取文件:FileInputStream fin = new FileInputStream(this.filename);
  • 字节流输出文件:FileOutputStream fout = new FileOutputStream(this.filename);

以下代码:
文件名称:forward.jsp

跳转

<jsp:forward page=“index.htm”/>

如果运行以上jsp文件,地址栏的内容为(A) A、http://127.0.0.1:8080/myjsp/forward.jsp B、http://127.0.0.1:8080/myjsp/index.jsp C、http://127.0.0.1:8080/myjsp/index.htm D、http://127.0.0.1:8080/myjsp/forward.htm

解析:
forward:请求转发,服务器行为,地址栏不变

下列Java代码中的变量a、b、c分别在内存的___C_存储区存放。
class A {
private String a = “aa”;
public boolean methodB() {
String b = “bb”;
final String c = “cc”;
}
}
A、堆区、堆区、堆区
B、堆区、栈区、堆区
C、堆区、栈区、栈区
D、堆区、堆区、栈区
E、静态区、栈区、堆区
F、静态区、栈区、栈区
解析:

  • 堆区:只存放对象,线程共享
  • 栈区:存放方法局部变量,基本类型变量,执行环境上下文,操作指令,线程不共享
  • 静态区:即方法区存放class文件和静态数据,线程共享

下列方法中哪个是线程执行的方法? (A)
A、run()
B、start()
C、sleep()
D、suspend()
解析:

  • run():执行线程体的具体内容
  • start():启动线程,使其进入就绪状态
  • sleep():使线程进入休眠状态,占用cpu
  • suspend():使线程挂起,要使用resume方法重新启动

(多选)关于Java以下描述正确的有( CD )
A、Class类是Object类的超类
B、Object类是一个final类
C、String类是一个final类
D、Class类可以装载其它类
解析:

  • Object:是所有类的父类
  • String:是个final类,所以不可更改
  • Class:可以通过forName()方法加载其他类

(多选)以下集合对象中哪几个是线程安全的(CD)
A、LinkedList
B、ArrayList
C、Vector
D、Hashtable
解析:
线程安全集合:
喂,SHE.
喂:Vector
S:stack
H:Hashtable
E:Eenumeration

(多选)给出下面的代码段:
public class Base{
int w, x, y ,z;
public Base(int a,int b)
{
x=a; y=b;
}
public Base(int a, int b, int c, int d)
{
// assignment x=a, y=b
w=d;z=c;
}}
选出可以代替// assignment x=a, y=b此行的代码(CD)
A、Base(a,b);
B、x=a, y=b;
C、x=a; y=b;
D、this(a,b);
解析:

  • 构造方法只能在new之后调用,即new Base(a,b)
  • 赋值语句不能用逗号隔开
  • 可以使用this调动本类的构造方法

下面对JVM叙述不正确的是:B
A、JVM的全称是Java Virtual Machine
B、JVM是一种计算机硬件技术,它是Java程序的运行平台
C、JVM是在计算机硬件系统上用软件实现的一台假想机
D、Java程序在执行时.JVM把Java字节码解释成机器码
解析:
JVM不需要硬件

下列有关Thread的描述,哪个是正确的?C
A、启动一个线程的方法是:thread. run()
B、结束一个线程的通常做法是:thread. stop()
C、将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自动结束。
D、让一个线程等待另一个线程的通知的方法是:thread. sleep()
解析:

  • run():执行线程体的具体内容
  • stop():强制结束线程,已弃用
  • sleep():使线程进入休眠状态,占用cpu
  • daemon线程是守护线程,在主线程结束时,守护线程自动结束
  • wait():让线程等待另一个线程

以下关于集合类ArrayList、LinkedList、HashMap描述错误的是(C)
A、HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
B、ArrayList和LinkedList均实现了List接口
C、添加和删除元素时,ArrayList的表现更佳
D、ArrayList的访问速度比LinkedList快
解析:

1.list是一个有序集合,存储内容可以重复

  • ArrayList:底层是数组,适合查询,不适合增删
  • LiskedList:底层以双向链表实现,适合增删,不适合查询
  • Vector:底层与ArrayList相似,但是是线程安全的,效率低,很少使用

2.set是一个无序集合,存储内容不可以重复

  • HashSet:底层是哈希表/散列表
  • TreeSet:继承了sratedSet接口,存进去的数据按元素大小自动排序

3.map是一个无序集合,是以键值对存储内容的,键对象不可以重复,值对象可以重复

  • HashMap:实现不同步,线程不安全,HashMap中的key-value是存储在Entry中的,HashMap中可以存储null键和null值,不保证元素顺序恒久不变,通过hashCode和equals保证键的唯一性,底层使用的是数组和链表

如果一个list初始化为{5,3,1},执行以下代码后,其结果为(B)?
nums.add(6);
nums.add(0,4);
nums.remove(1);
A、[5, 3, 1, 6]
B、[4, 3, 1, 6]
C、[4, 3, 6]
D、[5, 3, 6]
解析:
remove()函数,默认是移除指定下标位置元素

下面哪个不是标准Statement类?D
A、Statement
B、PreparedStatement
C、CallableStatement
D、BatchedStatement
解析:
CallableStatement接口扩展 PreparedStatement,用来调用存储过程,它提供了对输出和输入/输出参数的支持。CallableStatement 接口还具有对 PreparedStatement 接口提供的输入参数的支持

客户端要获取一个socket对象通过实例化,而服务器获得一个socket对象则通过什么方法的返回值?A
A、getRemoteSocketAddress()
B、getInputStream()
C、getOutputStream()
解析:

  • getRemoteSocketAddress():返回此套节字连接的端点的URl,未连接返回null
  • getInputStream():返回此套节字的的输入流
  • getOutputSteam():返回此套节字的的输出流

下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:B
1 byte[] src,dst;

A、dst=String.fromBytes(src,“GBK”).getBytes(“UTF-8”)
B、dst=new String(src,“GBK”).getBytes(“UTF-8”)
C、dst=new String(“GBK”,src).getBytes()
D、dst=String.encode(String.decode(src,“GBK”)),“UTF-8” )
解析:
String(byte[],指定方式):按指定方式解码构造一个新String;
getBytes(指定方式):按指定方式将String解析成字节数组

判断对错。List,Set,Map都继承自继承Collection接口。B
A、对
B、错
解析:
List,Set继承Collecton接口,
Map为一个顶层结果,不继承Collecton接口

Java语言中,如果"xyz"没有被创建过,String s =new String(“xyz”);创建了几个string object?B
A、1
B、2
C、3
D、4
解析:

  1. JVM先去常量池中查找是否含有"xyz",如果没有,则创建一个,放入常量池,然后取出;如果含有,直接取出
  2. 将从常量池中取出的字符串返回给s

以下哪个不属于JVM堆内存中的区域(B)?
A、survivor区
B、常量池
C、eden区
D、old区
解析:
堆内存中2/3的为老年代(old区),1/3为新生代,新生代中包含一个eden区两个survivor去(from,头),比例为8:1:1,常量池位于方法区

以下 b 的值是: byte b = (byte)129;B
A、-126
B、-127
C、-128
D、-129
解析:

首先进行强转,129为int型,原码为:00000000 00000000 000000000 10000001,强转为byte后为:10000001,首位为符号位,所以求其反码为:11111110,然后求其补码:11111111,所以其数字为:-(1+2+4+8+16+32+64)=-127

下面有关maven和ant的描述,描述错误的是?C
A、Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码
B、Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里
C、maven和ant都有“生命周期”的概念,当你输入一个命令后,maven或者ant会执行一系列的有序的步骤,直到到达你指定的生命周期
D、Ant构建文件默认命名为build.xml,Maven默认构建文件为pom.xml
解析:

  1. Ant和Maven都是基于java的构建工具,Ant定位是软件构建工具,Maven定位时软件项目管理和理解工具
  2. Ant特点:没有一个约定的目录结构,必须明确让Ant做什么,什么时候做,然后编译,打包,没有生命周期,必须定义目标和其实现的序列,没有集成依赖管理.
  3. Maven特点:拥有约定,知道你的代码在哪,放到那里去,拥有生命周期,只需要定义一个pom.xml,将源代码放到默认目录,拥有仓库管理,依赖管理

(多选)下列不是 Java 关键字的是 (BD )
A、abstract
B、false
C、native
D、sizeof
解析:
false,true,null为特殊直接量

以下代码将打印出C
public static void main (String[] args) {
String classFile = “com.jd.”. replaceAll(".", “/”) + “MyClass.class”;
System.out.println(classFile);
}
A、com. jd
B、com/jd/MyClass.class
C、///MyClass.class
D、com.jd.MyClass
解析:
replaceAll()方法第一个参数为正则表达式

jre 判断程序是否执行结束的标准是()
A、所有的前台线程执行完毕
B、所有的后台线程执行完毕
C、所有的线程执行完毕
D、和以上都无关
解析:
前台线程:受后台线程服务的线程
后台线程:保护线程,当其保护的线程结束时自动结束.

public boolean returnTest()
{
    try
    {
        return true;
    }
    catch (Exception e)
    {
 
    }
    finally
    {
        return false;
    }
}

以上代码返回值是什么?B
A、true
B、false
解析:
一旦在finally含有return语句,则try…cath块中的return都将失效

后端获取数据,向前端输出过程中,以下描述正确的是
A、对于前端过滤过的参数,属于可信数据,可以直接输出到前端页面
B、对于从数据库获得的数据,属于可信数据,可以直接输出到前端页面
C、对于从用户上传的Excel等文件解析出的数据,属于可信数据,可以直接输出到前端页面
其它选项都不属于可信数据,输出前应该采用信息安全部发布的XSSFilter做进行相应编码
解析:
后台获取数据向前端输出数据的过程中,输出前应该采用信息安全部发布的XSSFilter进行相应编码,XSS过滤器是前端过滤的一种方式

有以下类定义:

abstract class Animal{
    abstract void say();
}
public class Cat extends Animal{
    public Cat(){
        System.out.printf("I am a cat");
    }
    public static void main(String[] args) {
        Cat cat=new Cat();
    }
}

运行后:B
A、I am a cat
B、Animal能编译,Cat不能编译
C、Animal不能编译,Cat能编译
D、编译能通过,但是没有输出结果
解析:
抽象类的abstract方法必须被实现

代码 的运行结果是(C)

package com.sunline.java;
public class A implements B extends C{
    public static void main(String args[]){
        System.out.println("hello sunline!");
    }
}

A、在控制台打印hello sunline!
B、报异常java.lang.NullPoninterException
C、编译报错
D、报异常java.lang.RuntimeExcception
解析:
当同时出现继承和实现时,先继承再实现

下面不是面向对象的基本原则的是?
A、单一职责原则(Single-Resposibility Principle)
B、开放封闭原则(Open-Closed principle)
C、抽象类原则(Abstract-Class principle)
D、依赖倒置原则(Dependecy-Inversion Principle)
E、接口隔离原则(Interface-Segregation Principle)
解析:
面向对象五大基本原则:单一职责原则,开放封闭原则,依赖倒置原则,接口隔离原则,Liskov替换原则

执行以下程序,最终输出可能是:C
在这里插入图片描述
A、010 2123012 3434
B、01201 340124 2334
C、0012314 01223344**
D、12345 12345 12345
解析:
总共三个线程,所以要输出三个空格

以下哪些内存区域属于JVM规范?(  )
A、方法区
B、实例变量
C、静态变量
D、程序计数器
E、虚拟机栈
解析:
JVM内存区:程序计数器、虚拟机栈、本地方法栈、堆、方法区(包括常量池)。
不属于JVM内存区:直接内存(Direct Memory),用户I/O操作

说明输出结果。

package test;
import java.util.Date; 
public class SuperTest extends Date{ 
    private static final long serialVersionUID = 1L; 
    private void test(){ 
       System.out.println(super.getClass().getName()); 
    } 
      
    public static void main(String[]args){ 
       new SuperTest().test(); 
    } 
}

A、SuperTest
B、SuperTest.class
C、test.SuperTest
D、test.SuperTest.class
解析:
TestSuper和Date的getClass都没有重写,他们都是调用Object的getClass,而Object的getClass作用是返回的是运行时的类的名字

列哪些操作会使线程释放锁资源?BC
A、sleep()
B、wait()
C、join()
D、yield()
解析:

  • sleep():使线程进入休眠状态,不释放锁
  • wait():在其他线程调用对象的notify或notifyAll方法前使当前对象等待,线程释放其所占据的锁,使其他线程有机会抢占锁
  • join():用于等待调用此方法的线程结束,再继续执行
  • yield():暂停当前线程,使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值