JAVA 面试题真题解析(1)BAIINFO

本文解析了Java开发笔试题目,涵盖单选、多选及编程题,涉及break语句使用、MVC模式理解、异常处理等内容。

百川盈孚 baiinfo JAVA开发(后端)笔试题解析

单选题

1、break 语句( )

​ A、 只中断最内层的循环

​ B、 只中断最外层的循环

​ C、 借助于标号,可以实现任何外层循环中断

​ D、 只中断某一层的循环

正确答案:A

break 语句可以结束当前循环执行,执行完 break 语句后,循环体中位于 break 语句就不会被执行。

BD明显错,C更扯。( 吐槽:Java 能这么智能就厉害了呵呵 )

2、按照 MVC 设计模式,JSP 用于实现:( )

​ A、 Model

​ B、 View

​ C、 Controller

​ D、 容器

正确答案:B

MVC 模式代表 Model-View-Controller (模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

JSP(全称 Java Server Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。

既然是网页技术标准,那就是在 View 层(前端代码)。

3、如下代码:运行结果是什么?

class Base {
 	Base(){
     	System.out.print("Base");
 	}
}
public class Alpha extends Base{
 	public static void main(String[] args){
     	new Alpha();
     	new Base();
 	}
}

​ A、 Base

​ B、 BaseBase

​ C、 编译失败

​ D、 代码运行但没有输出

​ E、 运行时抛出异常

正确答案:B

Alpha 类继承了 Base 类,所以在实例化 Alpha 对象时也会默认执行父类的方法,所以输出两遍 Base。

4、哪个语句创建了一个数组实例( )

​ A、 int [] ia = new int [15];

​ B、 float fa = new float [20];

​ C、 char [] ca = -Some String ||;

​ D、 int ia [] [] = {4,5,6} {1,2,3};

正确答案:A

B 选项,语法错误编译失败,左边缺少 []。

C 选项,右边写的啥玩意见都没见过。

D 选项,没有创建数组实例。

5、以下代码执行结果为( )

class HasStatic(){
 private static int x = 100;
 public static void main(String[] args){
     HasStatic hs1 = new HasStatic();
     hs1.x++;
     HasStatic hs2 = new HasStatic();
     hs2.x++;
     hs1 = new HasStatic();
     hs1.x++;
     HasStatic.x--;
     System.out.println("x="+x);
 }
}

​ A、 5 行不能通过编译,因为引用了私有静态变量;

​ B、 10 行不能通过编译,因为 x 是私有静态变量;

​ C、 x=103;

​ D、 x=102;

正确答案:D

AB 选项,因为在同一类中是 private 限定范围内所以可以引用。

static 为静态属性修饰词,而 static final 修饰的才是不可改变的常量,所以这里 x 的值是可以改变的。

x 一共自增3次,自减1次,所以结果应该为 102。

6、Java 中( )

​ A、 一个子类可以有多个父类,一个父类也可以有多个子类。

​ B、 一个子类可以有多个父类,但一个父类只也可以一个子类。

​ C、 一个子类可以有一个父类,但一个父类可以有多个子类。

​ D、 上述说法都不对。

正确答案:C

不解释了,你只能有一个亲爹。可是你的亲爹可以有很多好大儿。

7、关于以下程序段,正确的说法是( )

String s1 = "abc"+"def";
String s2 = new String(s1);
if(s1 == s2){
 System.out.prinln("== succeeded");
}
if(s1.equals(s2)){
 System.out.prinln(".equals() succeeded");
}

​ A、 行 4 与行 6 都将执行。

​ B、 行 4 执行,行 6 不执行。

​ C、 行 6 执行,行 4 不执行。

​ D、 行 4、行 6 都不执行。

正确答案:C

==是直接比较的两个对象的堆内存地址,如果相等,则说明这两个引用实际是指向同一个对象地址的。

equals和"=="是不一样的,equals是判断对象的值是否相等。

8、下面语句在编译时不会出现警告或者错误的是( )

​ A、 float f = 3.14;

​ B、 char c = “c”;

​ C、 Boolean b = null;

​ D、 int i = 10.0;

正确答案:C

A 选项 3.14 默认是 double 类型,需要强转为 float。

B 选项 “c” 为 String 字符串对象,改成 ‘c’ 才能正确编译。

C 选项 Boolean 是个引用类型对象(区分于基本类型 boolean),所以可以为 null。虽然运行代码以后会发现报空指针异常(NullPointException),但是题干描述的是编译期,因此正确。

D 选项 10.0 默认为 double 类型,需要强转为 int。

9、getCustomerinfo() 方法如下,try 中可以捕获三种类型的异常,如果在该方法运行中产生了一个 IOException,将会出现什么结果( )

public void getCustomerinfo(){
 try{
     //do something that may cause an Exception
 }catch(java.io.FileNotFoundException ex){
     System.out.print("FileNotFoundException!")
 }catch(java.io.IOException ex){
     System.out.print("IOException!")
 }catch(java.lang.Exception ex){
     System.out.print("Exception!")
 }
}

​ A、 IOException!

​ B、 IOException!Exception!

​ C、 FileNotFoundException!IOException!

​ D、 FileNotFoundException!IOException!Exception!

正确答案:A

因为只捕获了一个 IOException,所以只输出响应 catch 的内容。

10、list 是一个 ArrayList 的对象,哪个选项的代码填写到 //todo delete 处,可以在 Iterator 遍历的过程中正确并安全的删除一个 list 中保存的对象?( )

Iterator it = list.iterator();
int index = 0;
while (it.hasNext()){
 Object obj = it.next();
 if (needDelete(obj)){ //needDelete 返回 boolean,决定是否要删除
     //todo delete
 }
 index ++;
}

​ A、 list.remove(obj);

​ B、 list.remove(index);

​ C、 list.remove(it.next());

​ D、 it.remove();

正确答案:D

在循环 list 的过程中不能使用 list.remove() 方法,因为在循环过程中 list.size() 若发生变化,则会导致错误发生。

因此可以用 Iterator 迭代器来删除该元素。

多选题

1、下面哪几个描述是正确的?( )

​ A、 默认构造器初始化方法变量。

​ B、 默认构造器有和它所在类相同的访问修饰词。

​ C、 默认构造器调用其父类的无参构造器。

​ D、 如果一个类没有无参构造器,编译器会为它创建一个默认构造器。

​ E、 只有当一个类没有任何构造器时,编译器会为它创建一个默认构造器。

正确答案:BCE

A 选项 如果在类中声明静态变量,编译器将使用默认构造函数中的默认值对其进行初始化。但是,如果声明实例变量,编译器将不会在默认构造函数中对其进行初始化。

D 选项 没有无参构造器的话就不让人家有含参构造器嘛?E 选项告诉你答案了。

2、以下哪几种能使用 throw 抛出?( )

​ A、 Error

​ B、 Event

​ C、 Object

​ D、 Throwable

​ E、 Exception

​ F、 RuntimeException

正确答案:ADEF

异常抛出 Throwable 类下有 Exception 和 Error 两大子类,因此在子类下的所有异常和错误都可抛出。

3、哪些说明是正确的?( )

class A{
 A(){}
}
class B extends A{}

​ A、 B 类的构造器应该是 public

​ B、 B 类的构造器应该是没有参数

​ C、 B 类的构造器应该调用 this()

​ D、 B 类的构造器应该调用 super()

正确答案:BD

A 选项 默认构造器有和它所在类相同的访问修饰词,这里没写修饰词,默认为 default。

C 选项 B 类的构造器是调用父类的构造器,所以应该用 super()。

4、哪几种声明防止方法覆盖?( )

​ A、 final void methoda() {}

​ B、 void final methoda() {}

​ C、 static void methoda() {}

​ D、 static final void methoda() {}

​ E、 final abstract void methoda() {}

正确答案:ACD

方法可以通过添加 final 修饰符的方法防止覆盖,static 静态方法不可被覆盖。

B 选项 返回值后面要接上方法名,规定而已。

E 选项 笑死我了,抽象方法不就是让人覆盖重写的么?

5、下面哪几个函数是 public void example() {…} 的重载方法? ( )

​ A、 public void example (int a) {…}

​ B、 public int example () {…}

​ C、 public void example2 (int a) {…}

​ D、 public int example (int a,float b) {…}

正确答案:AD

B 选项 方法重载只看参数个数和类型,不看返回值。但不能出现只是返回值不同的重载。

C 选项 方法名不一样,重载个锤子。

简答题

1、请说明 JDBC 的含义以及 JDBC 连接数据库的步骤。

JDBC 的含义:(Java DataBase Connectivity)Java 数据库连接是一种用于执行 SQL 语句的 Java API,可以理解为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。即定义了操作所有关系型数据库的规则(接口)可以操作不同的数据库。

JDBC 连接步骤:

  • 导入对应数据库驱动包
  • 加载 JDBC 驱动程序
  • 创建数据库的连接
  • 准备 SQL 语句
  • 创建 Statement/PrepareStatement 对象(静态/动态)
  • 执行 SQL 语句
  • 遍历结果集
  • 处理异常,关闭资源。

2、写出 j2ee 常用的设计模式?说明工厂模式。

J2ee 的设计模式总共 23 种,分为三大类:创建型,结构型,行为型。

常用设计模式:工厂模式(Factory)、单例模式(Singleton)、代理模式(Proxy)、原始模型模式(Prototype)、迭代子模式(Iterator)、观察者模式(Observer)等。

工厂模式:根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。

3、什么是 ajax,为什么要使用 ajax (请谈一下你对 ajax 的认识)。

AJAX 即 Asynchronous Javascript And XML(异步 JavaScript 和 XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。

4、Java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

Java 中的流分为两种,一种是字节流,另一种是字符流。

它们分别由四个抽象类来表示:InputStream,OutputStream,Reader,Writer。

每种流包括输入和输出两种所以一共四个,Java中其他多种多样变化的流均是由它们派生出来的。

5、什么是线程池?为什么要使用它?

线程池(thread pool):是一种线程使用模式,线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。

线程池的作用:根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果。

为什么要用线程池:

  • 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。
  • 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器搞炸。

Java里面线程池的顶级接口是 Executor,但是严格意义上讲 Executor 并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是 ExecutorService。

编程题

1、用 Java 实现将一个文件中的内容复制到另一个文件中。

    public static void main(String[] args) throws Exception {
        BufferedWriter bw = new BufferedWriter(new FileWriter("preFile.txt"));
        bw.write("string to be copied\n");
        bw.close();
        InputStream in = new FileInputStream(new File("preFile.txt"));
        OutputStream out = new FileOutputStream(new File("copyFile.txt"));
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();

        BufferedReader br = new BufferedReader(new FileReader("copyFile.txt"));
        String str;
        while ((str = br.readLine()) != null) {
            System.out.println(str);
        }
        br.close();
    }

2、设计 Java 程序,实现如下功能:获取 50 个 0 ~ 300 之间的随机整数,并输出到屏幕上:

​ 取出上面 50 个整数中的偶数,倒叙排列输出到屏幕上。

public class baiinfo {
    public static void main(String[] args) {
        int []num = new int[50];
        for (int i = 0; i < 50; i++) {
            int a = new Random().nextInt(301);
            System.out.print(a+"\t");
            num[i] = a;
        }
        //System.out.println(Arrays.toString(num));
        for (int i = 49; i >= 0; i--) {
            if (num[i]%2 == 0){
                System.out.print(num[i]+"\t");
            }
        }
    }
}

3、Oracle 中有如下功能树表,表名 XT_GNS,包含如下字段 GN_DM(功能代码),GN_MC(功能名称),SJGN_DM(上级功能代码),请写出 SQL 查询中心下所有的功能节点。

GN_DMGN_MCSJGN_DM
GN001用户中心
GN002税企互动
GN003用户注册GN001
GN004用户注销GN001
GN005用户信息维护GN001
GN006用户信息录入GN005
GN007用户信息认证GN005
GN008知识库GN002
GN009常见问题管理GN008

??? 什么鬼啊 ?

个人学习用,请勿私自转载谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值