你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

牛客刷题日记(2021-11-3)

2021-11-3 8:15:59

牛客刷题日记(2021-11-3)

题目:

下列哪种异常是检查型异常,需要在编写程序时声明 ( )
A.NullPointerException
B.ClassCastException
C.FileNotFoundException
D.IndexOutOfBoundsException

解析:

正确答案: C

这里是引用
在这里插入图片描述

  1. 粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理,命名为 Checked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到遵守.
  2. 绿色的异常是运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除…
  3. 而声明为Error的,则属于严重错误,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或者不可能捕捉,将导致应用程序中断,Error不需要捕捉。

题目:

下列整型常量 i 的定义中,正确的是(  )
A.final i;
B.static int i;
C.static final int  i=234;
D.final float i=3.14f;

解析:

C
java中final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。int关键字修饰整型类型。static修饰静态变量,即当利用这个关键字来修饰一个变量的时候,在创建对象之前就会为这个变量在内存中创建一个存储空间。以后创建对对象如果需要用到这个静态变量,那么就会共享这一个变量的存储空间。
A:缺少必要的整型类型声明
B:缺少常量关键字final
D:定义一个浮点常量


题目:


下面叙述那个是正确的?()
A.java中的集合类(如Vector)可以用来存储任何类型的对象,且大小可以自动调整。但需要事先知道所存储对象的类型,才能正常使用。
B.在java中,我们可以用违例(Exception)来抛出一些并非错误的消息,但这样比直接从函数返回一个结果要更大的系统开销。
C.java接口包含函数声明和变量声明。
D.java中,子类不可以访问父类的私有成员和受保护的成员。

解析:

正确答案: B

B选项说的情况就是我们自定义异常的情况,请仔细读:我们可以用违例(Exception)来抛出一些并非错误的消息,可以,并非错误的消息。比如我自定义一个异常,若一个变量大于10就抛出一个异常,这样就对应了B选项说的情况,我用抛出异常说明这个变量大于10,而不是用一个函数体(函数体内判断是否大于10,然后返回true或false)判断,因为函数调用是入栈出栈,栈是在寄存器之下的速度最快,且占的空间少,而自定义异常是存在堆中,肯定异常的内存开销大!所以B对。
C选项说的是接口包含方法声明和变量声明。因为接口中方法默认是 abstract public,所以在接口只写函数声明是符合语法规则。但是变量默认是用public final static 修饰的,意思它是静态常量,常量不管在接口中还是类中必须在声明时初始化!所以C的后半句是错的,必须在声明时并给出初始化!


题目:

以下JAVA程序的运行结果是什么(  )
public static void main(String[] args) {
    Object o1 = true ? new Integer(1) : new Double(2.0);
    Object o2;
    if (true) {
    o2 = new Integer(1);
    } else {
        o2 = new Double(2.0);
    }
    System.out.print(o1);
    System.out.print(" ");         
    System.out.print(o2);
}

A.1 1
B.1.0 1.0
C.1 1.0
D.1.0 1

解析:

三元操作符类型的转换规则:
1.若两个操作数不可转换,则不做转换,返回值为Object类型
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
4.若两个操作数都是直接量数字,则返回值类型为范围较大者

符合4,所以选D.


题目:

以下哪一个正则表达式不能与字符串“https://www.tensorflow.org/”(不含引号)匹配?()
A.[a-z]+://[a-z.]+/
B.https[://]www[.]tensorflow[.]org[/]
C.[htps]+://www.tensorflow.org/
D.[a-zA-Z.:/]+

解析:

正确答案: B

  1. 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
  2. []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
  3. -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
  4. 在中括号里面和外面含义不同,如在外时,就表示开头,如7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。
  5. .表示匹配任意的字符。
  6. \d表示数字
  7. \D表示非数字。
  8. \s表示由空字符组成,[ \t\n\r\x\f]。
  9. \S表示由非空字符组成,[^\s]。
  10. \w表示字母、数字、下划线,[a-zA-Z0-9_]。
  11. \W表示不是由字母、数字、下划线组成。
  12. . ?: 表示出现0次或1次。
  13. . +表示出现1次或多次。
  14. *表示出现0次、1次或多次。
  15. {n}表示出现n次。
  16. {n,m}表示出现n~m次。
  17. {n,}表示出现n次或n次以上。
  18. XY表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。
  19. X|Y表示X或Y,比如"food|f"匹配的是foo(d或f),而"(food)|f"匹配的是food或f。
  20. (X)子表达式,将X看做是一个整体

题目:

下面代码的输出是什么?
public class Base
{
    private String baseName = "base";
    public Base()
    {
        callName();
    }

    public void callName()
    {
        System. out. println(baseName);
    }

    static class Sub extends Base
    {
        private String baseName = "sub";
        public void callName()
        {
            System. out. println (baseName) ;
        }
    }
    public static void main(String[] args)
    {
        Base b = new Sub();
    }
}

解析:

答案:A
new Sub();在创造派生类的过程中首先创建基类对象,然后才能创建派生类。
创建基类即默认调用Base()方法,在方法中调用callName()方法,由于派生类中存在此方法,则被调用的callName()方法是派生类中的方法,此时派生类还未构造,所以变量baseName的值为null


题目:

下面哪个行为被打断不会导致InterruptedException:( )?

A.Thread.join
B.Thread.sleep
C.Object.wait
D.CyclicBarrier.await
E.Thread.suspend

解析:

正确答案: E

抛InterruptedException的代表方法有:
java.lang.Object 类的 wait 方法
java.lang.Thread 类的 sleep 方法
java.lang.Thread 类的 join 方法


题目:


常用的servlet包的名称是?
A.java.servlet
B.javax.servlet
C.servlet.http
D.javax.servlet.http

解析:

使用 Java 技术开发 WEB 应用程序 , 深入了解 Servlet 的机制对应用的开发将有重要的推动作用 . 而想深入了解 Servlet 的机制就不得不了解 javax.servlet 包 .
javax.servlet 包中包含了 7 个接口 ,3 个类和 2 个异常类 , 它们分别是 :
接口 :RequestDispatcher,Servlet,ServletConfig,ServletContext,ServletRequest,ServletResponse 和 SingleThreadModel类 :GenericServlet,ServletInputStream 和 ServletOutputStream
异常类 :ServletException 和 UnavailableException

Servlet 的生命周期在 Servlet 的接口中定义了一个 Servlet 的生命周期方法 , 分别是 Init,Service 和 Destroy演示了 Servlet 生命周期方法的简单 Servlet:

import javax.servlet.*;
import java.io.IOException;
public class PrimitiveServlet implements Servlet {
  public void init(ServletConfig config) throws ServletException {
    System.out.println("init");
  }
  public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException {
    System.out.println("service");
  }  
  public void destroy() {
    System.out.println("destroy");
  }
  public String getServletInfo() {
    return null;
  }
  public ServletConfig getServletConfig() {
    return null;
  }
}

在 Servlet 中如何获取 ServletConfig 对象 ?

在 Servlet 的 Init 方法中 ,Servlet Container 将会传入一个 ServletConfig 对象 , 开发人员可以通过这个对象获取在 web.xml 文件中定义的 Servlet 初始化参数 .

下面是一个获取 Servlet 初始参数的示例 :

import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException;
public class ConfigDemoServlet implements Servlet {
  public void init(ServletConfig config) throws ServletException {
    Enumeration parameters = config.getInitParameterNames();
    while (parameters.hasMoreElements()) {
      String parameter = (String) parameters.nextElement();
      System.out.println("Parameter name : " + parameter);
      System.out.println("Parameter value : " +
        config.getInitParameter(parameter));
    }
  }

  public void destroy() {
  }
  public void service(ServletRequest request, ServletResponse response)

    throws ServletException, IOException 
  }
  public String getServletInfo() {
    return null;
  }
  public ServletConfig getServletConfig() {
    return null;
  }
}

如何获取 ServletContext 对象 ?

可以通过 ServletConfig 对象的 getServletContext 方法获取 ServletContext 对象

import javax.servlet.*;
import java.util.Enumeration;
import java.io.IOException;
public class ContextDemoServlet implements Servlet {
  ServletConfig servletConfig; 
  public void init(ServletConfig config) throws ServletException {
    servletConfig = config;
  }

  public void destroy() {
  }
  public void service(ServletRequest request, ServletResponse response)
    throws ServletException, IOException { 
    ServletContext servletContext = servletConfig.getServletContext();
    Enumeration attributes = servletContext.getAttributeNames();
    while (attributes.hasMoreElements()) {
      String attribute = (String) attributes.nextElement();
      System.out.println("Attribute name : " + attribute);
      System.out.println("Attribute value : " +
        servletContext.getAttribute(attribute));
    }
    System.out.println("Major version : " +
servletContext.getMajorVersion());
    System.out.println("Minor version : " +
servletContext.getMinorVersion());
    System.out.println("Server info : " + servletContext.getServerInfo());
  }
  public String getServletInfo() {
    return null;
  }
  public ServletConfig getServletConfig() {
    return null;
  }
}

如何在 Servlet 之间共享信息 ?

我们可以通过 ServletContext 来维护在不同 Servlet 之间共享的信息 .

如何解决 Servlet 的多 Thread 问题 ?

如果 Servlet 需要读写外部资源 , 我们需要考虑 Thread 的问题 , 我们可以使用声明性接口SingleThreadModel 来避免多 Thread 之间的资源冲突问题 . 但是需要注意的是 , 如果 Servlet 仅仅只是读外部资源的话 , 我们通常不应该实现这个接口 . 如果实现这个接口 ,Servlet 在同一时刻只能服务一个用户请求 ,后至的用户请求必须在队列中等待


题目:

下面哪项技术可以用在WEB开发中实现会话跟踪实现?
A.session
B.Cookie
C.地址重写
D.隐藏域

解析:

ABCD
会话跟踪是一种灵活、轻便的机制,它使Web上的状态编程变为可能。
HTTP是一种无状态协议,每当用户发出请求时,服务器就会做出响应,客户端与服务器之间的联系是离散的、非连续的。当用户在同一网站的多个页面之间转换时,根本无法确定是否是同一个客户,会话跟踪技术就可以解决这个问题。当一个客户在多个页面间切换时,服务器会保存该用户的信息。
有四种方法可以实现会话跟踪技术:URL重写、隐藏表单域、Cookie、Session。
1).隐藏表单域:,非常适合步需要大量数据存储的会话应用。
2).URL 重写:URL 可以在后面附加参数,和服务器的请求一起发送,这些参数为名字/值对。
3).Cookie:一个 Cookie 是一个小的,已命名数据元素。服务器使用 SET-Cookie 头标将它作为 HTTP
响应的一部分传送到客户端,客户端被请求保存 Cookie 值,在对同一服务器的后续请求使用一个
Cookie 头标将之返回到服务器。与其它技术比较,Cookie 的一个优点是在浏览器会话结束后,甚至
在客户端计算机重启后它仍可以保留其值
4).Session:使用 setAttribute(String str,Object obj)方法将对象捆绑到一个会话


题目:


truefalsenull、sizeof、gotosynchronized 哪些是Java关键字?
A.true
B.false
C.null
D.sizeof
E.goto
F.synchronized

解析:

这里是引用


题目:

以下可以正确获取结果集的有
A.
Statement sta=con.createStatement();
ResultSet rst=sta.executeQuery(“select * from book”);
B.
Statement sta=con.createStatement(“select * from book”); 
ResultSet rst=sta.executeQuery();
C.
PreparedStatement pst=con.prepareStatement();
ResultSet rst=pst.executeQuery(“select * from book”);
D.
PreparedStatement pst=con.prepareStatement(“select * from book”);
ResultSet rst=pst.executeQuery();

解析:

A,D是正确的;创建Statement是不传参的,PreparedStatement是需要传入sql语句