JAVA【02】牛客选择题

1、基本数据类型

在这里插入图片描述

2、下面代码的输出结果是什么?

public class ZeroTest {
    public static void main(String[] args) {
     try{
       int i = 100 / 0;
       System.out.print(i);
  }catch(Exception e){
       System.out.print(1);
       throw new RuntimeException();
  }finally{
       System.out.print(2);
  }
      System.out.print(3);
 }
 }

正确答案: 12
首先执行try,遇到算术异常,抛出,执行catch,打印1,然后抛出RuntimeException,缓存异常,执行finally,打印2,然后抛出RuntimeException。如果catch中没有抛出RuntimeException,则执行结果为123。

AccessViolationException异常触发后,下列程序的输出结果为( )

static void Main(string[] args)  
{  
    try  
    {  
        throw new AccessViolationException();  
        Console.WriteLine("error1");  
    }  
    catch (Exception e)  
    {  
        Console.WriteLine("error2");  
    }  
    Console.WriteLine("error3");  
} 

正确答案:
error2
error3

本题知识点
1.若catch(){}、finally{}块中,如果有throw 语句,则,try{}catch(){} finally{}块之外的代码不执行。
2.try{}中throw,则下面代码正常执行。

一个子类显式调用父类的构造器必须用super关键字。

3、下列说法正确的是( C )

A、volatile,synchronized 都可以修改变量,方法以及代码块
B、volatile,synchronized 在多线程中都会存在阻塞问题
C、volatile能保证数据的可见性,但不能完全保证数据的原子性synchronized即保证了数据的可见性也保证了原子性
D、volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性

synchronized: 具有原子性,有序性和可见性;(三个都有)
volatile:具有有序性和可见性(缺一个原子性)

synchronized关键字和volatile关键字比较:
volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字要好。但是volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。synchronized关键字在JavaSE1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后执行效率有了显著提升,实际开发中使用 synchronized 关键字的场景还是更多一些。

多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞

volatile关键字能保证数据的可见性,但不能保证数据的原子性。synchronized关键字两者都能保证。

volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized关键字解决的是多个线程之间访问资源的同步性。

4、以下哪个命令用于查看tar(backup.tar)文件的内容而不提取它?()

tar -tvf backup.tar

5、下面有关forward和redirect的描述,正确的是() ?

正确答案: B C D

A、forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
B、执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
C、执行redirect时,服务器端告诉浏览器重新去请求地址
D、forward是内部重定向,redirect是外部重定向
E、redirect默认将产生301 Permanently moved的HTTP响应

1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.

2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.

3.从运用地方来说
forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.

4.从效率来说
forward:高.
redirect:低.

解释三 假设你去办理某个执照

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。
转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

6、Hashtable 和 HashMap 的区别是:

(1)HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口。
(2)Hashtable 线程安全的,而 HashMap 是线程不安全的。
(3)Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类。
(4)HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

7、有如下一段程序

public class Test{ 
    private static int i=1;
    public int getNext(){ 
         return i++;
    } 
    public static void main(String [] args){ 
        Test test=new Test(); 
        Test testObject=new Test(); 
        test.getNext(); 
        testObject.getNext(); 
        System.out.println(testObject.getNext()); 
    } 
}

请问最后打印出来的是什么?()

正确答案:3

因为i是static的,是类属性,所以不管有多少对象,都共用的一个变量。这里getNext()方法被调用了三次,所以进行了三次i++操作。

8、Integer说明

Integer a = 1;
Integer b = 1;
Integer c = 500;
Integer d = 500;
System.out.print(a == b);
System.out.print(c == d);

正确答案: true、false
Integer类型在-128–>127范围之间是被缓存了的,也就是每个对象的内存地址是相同的,赋值就直接从缓存中取,不会有新的对象产生,而大于这个范围,将会重新创建一个Integer对象,也就是new一个对象出来,当然地址就不同了,也就!=;

Integer a = 1;是自动装箱会调用Interger.valueOf(int)方法;该方法注释如下:
This method will always *** values in the range -128 to 127 inclusive, and may *** other values outside of this range.
也就是说IntegerCache类缓存了-128到127的Integer实例,在这个区间内调用valueOf不会创建新的实例。

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

正确答案: A B 你的答案: A D (错误)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

10、概念题,描述正确的是?

在这里插入图片描述

11、下面哪个不属于HttpServletResponse接口完成的功能?

在这里插入图片描述
在这里插入图片描述

12、基础知识

(1)关于Java package的描述, 包提供可见性控制机制.
(2)在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的()?管道

管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
既然是不同的服务器之间进行通信,怎么可能会是具有亲缘关系的进程呢?

(3)JSP内置对象
作用:
pageContext 表示页容器 EL表达式、 标签 、上传
request 服务器端取得客户端的信息:头信息 、Cookie 、请求参数 ,最大用处在MVC设计模式上
response 服务器端回应客户端信息:Cookie、重定向
session 表示每一个用户,用于登录验证上
application 表示整个服务器
config 取得初始化参数,初始化参数在web.xml文件中配置
exception 表示的是错误页的处理操作
page 如同this一样,代表整个jsp页面自身
out 输出 ,但是尽量使用表达式输出

13、组合知识

(1)public static void yield()暂停当前正在执行的线程对象,并执行其他线程,若没有其他线程则继续执行当前线程。

(2)下列不是 Java 关键字的是 ( )false sizeof

(3)匿名内部类不可以定义构造器①匿名内部类由于没有名字,因此不能定义构造函数。②匿名内部类中不能含有静态成员变量和静态方法。③使用匿名内部类时,必须继承一个类或实现一个接口。

(4)volatile关键字能保证数据的可见性,但不能保证数据的原子性。synchronized关键字两者都能保证。

volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized关键字解决的是多个线程之间访问资源的同步性。

synchronized: 具有原子性,有序性和可见性;(三个都有)
volatile:具有有序性和可见性(缺一个原子性)

(5)Hibernate

① Hibernate3 提供了属性的延迟加载功能

② Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)

③ Hibernate 中 get()和load() 的区别:
get() 采用立即加载方式,而load()采用 延迟加载 ; get()方法执行的时候,会立即向数据库发出查询语句, load() 方法返回的是一个***(此***中只有一个id属性),只有等真正使用该对象属性的时候,才会发出 sql语句。
如果数据库中没有对应的记录,get()方法返回的是null.而load()方法出现异常ObjectNotFoundException

④ hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。

(6)接口和抽象类
接口 :修饰符可以是public、default,private、static
抽象类:类似于其他类,但不可以是public abstract void eat();
抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。

14、基础知识

以下哪个命令用于查看tar(backup.tar)文件的内容而不提取它?tar -tvf backup.tar

Java1.8之后,Java接口的修饰符可以为
abstract interface MyInterfaceAbstract {

猜你喜欢

转载自blog.csdn.net/qq_42390340/article/details/108326171