2021-10-12每日一练

文章目录

一丶java选择题

  1. “先进先出”的容器是:( )
    正确答案: B 你的答案: B (正确)
    堆栈(Stack)
    队列(Queue)
    字符串(String)
    迭代器(Iterator)

堆栈(Stack) : 如子弹入弹夹一样 先进后出
队列(Queue):如排队过隧道 先进先出

  1. 以下()不是合法的标识符?
    正确答案: C 你的答案: C (正确)
    STRING
    x3x
    void
    deSf

void属于java中的关键字
[1]Java标识符只能由数字、字母、下划线“_”或“ ” 符 号 以 及 U n i c o d e 字 符 集 组 成 [ 2 ] J a v a 标 识 符 必 须 以 字 母 、 下 划 线 “ ” 或 “ ”符号以及Unicode字符集组成 [2]Java标识符必须以字母、下划线“_”或“ Unicode[2]Java线”符号以及Unicode字符集开头
[3]Java标识符不可以是Java关键字、保留字(const、goto)和字面量(true、false、null)
[4]Java标识符区分大小写,是大小写敏感的

标识符就是变量的意思

  1. 通过HttpServletRequest. getParameter获取的参数.
    正确答案: C 你的答案: C (正确)
    总是采用UTF-8编码
    总是采用lS08859-1编码
    由客户端浏览器和Web容器配置共同决定编码
    由服务器所在的操作系统决定编码

乱码问题之所以一直存在,就是由于编码的灵活性,也就是说,编码与其他工作是解耦的。此外,Web 的编码问题与服务器所在的操作系统无关,Web 容器诸如Tomcat可以配置默认编码方式,例如,Tomcat 的默认编码方式是 iso8859-1。乱码的解决之道就是直接或间接的使客户端与Web 容器编码方式兼容。

  1. 有以下类定义:
    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 你的答案: B (正确)
    I am a cat
    Animal能编译,Cat不能编译
    Animal不能编译,Cat能编译
    编译能通过,但是没有输出结果

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

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

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

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

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

  1. public class TestThread {
    public static void main(String[] args) {
    Runnable runner = new Runnable() {

     	@Override
     	public void run() {
     		System.out.print("foo");
     		
     	}
     	
     };
     Thread t = new Thread(runner);
     t.run();		
     System.out.print("bar");
    

    }
    }
    正确答案: A 你的答案: A (正确)
    foobar
    barfoo
    foobar或者barfoo都有可能
    Bar
    Foo
    程序无法正常运行

答案是 A foobar 这道题是考线程的调用情况,线程的启动方式只能通过start这种方式启动才能真正的实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别,所以这个还是按照顺序执行首先执行run方法之后,执行输出语句所以最终得到结果foobar.

  1. 子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是?
    正确答案: C 你的答案: B (错误)
    父类B静态代码块->父类B构造函数->子类A静态代码块->父类B非静态代码块->子类A构造函数->子类A非静态代码块
    父类B静态代码块->父类B构造函数->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块
    父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
    父类B构造函数->父类B静态代码块->父类B非静态代码块->子类A静态代码块->子类A构造函数->子类A非静态代码块

正确的执行顺序是:父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数
也就是说非静态初始化块的执行顺序要在构造函数之前。

请添加图片描述

  1. 以下代码执行后输出结果为( )
    public class Test {
    public static void main(String[] args) {
    System.out.println("return value of getValue(): " +
    getValue());
    }
    public static int getValue() {
    try {
    return 0;
    } finally {
    return 1;
    }
    }
    }
    正确答案: A 你的答案: C (错误)
    return value of getValue(): 1
    return value of getValue(): 0
    return value of getValue(): 0return value of getValue(): 1
    return value of getValue(): 1return value of getValue(): 0

根据官方的JVM规范:
如果try语句里有return,返回的是try语句块中变量值。
详细执行过程如下:

如果有返回值,就把返回值保存到局部变量中;
执行jsr指令跳到finally语句里执行;
执行完finally语句后,返回之前保存在局部变量表里的值。
如果try,finally语句里均有return,忽略try的return,而使用finally的return.

  1. 以下程序的执行结果是:
    static boolean foo(char c){
    System.out.print©;
    return true;
    }
    public static void main(String[] args) {
    int i =0;
    for(foo(‘A’);foo(‘B’)&&(i<2);foo(‘C’)){
    i++;
    foo(‘D’);
    }
    }
    正确答案: A 你的答案: A (正确)
    ABDCBDCB
    ABCDABCD
    编译时出错
    运行时抛出异常

1.其实foo(‘A’);就是初始化条件,只会执行一次,所以第一个打印的肯定是A
2.因为i=0;循环条件是i<2 (由此可知循环i等于2的时候就会停止循环,)所有0<2满足条件,接着会输出B,然后执行i++;i就变成1了,再输出D,再最后输出C,一次循环后的结果是:ABDC
3.第二次循环的开始是foo(‘A’);是初始条件所以不会执行,直接从foo(‘B’)开始,输出B,然后i为1,且小于2,此时循环体内再次执行i++;i的值为2了,再次输出D,最后输出C
第二次循环输出:BDC
4.*然后循环再次执行for(foo(‘A’);foo(‘B’)&&(i<2);foo(‘C’))
直接输出B,***i的值在第二轮循环后的值变成了2,2<2不成立,终止循环,输出B

  1. 以下代码的输出的正确结果是
    public class Test {
    public static void main(String args[]) {
    String s = “祝你考出好成绩!”;
    System.out.println(s.length());
    }
    }
    正确答案: D 你的答案: D (正确)
    24
    16
    15
    8

java的String底层是char数组,它的length()返回数组大小,而unicode中一个汉字是可以用一个char表示的

一个汉字等于一个字符   字符 是char
一个汉字也等于二个字节,字节 是byte

  1. 下面哪种流可以用于字符输入:
    正确答案: C 你的答案: C (正确)
    java.io.inputStream
    java.io.outputStream
    java.io.inputStreamReader
    java.io.outputStreamReader

首先B和D排除,题目是要求输入。
A和C之间,inputStream是字节流输入流;而inputStreamReader是对字符流的处理,inputStreamReader将字符流处理成字节流,题目要求是用于处理字符输入,所以选C。

  1. 下列哪个对访问修饰符作用范围由大到小排列是正确的?
    正确答案: D 你的答案: B (错误)
    private>default>protected>public
    public>default>protected>private
    private>protected>default>public
    public>protected>default>private
    请添加图片描述

  2. 关于下列程序段的输出结果,说法正确的是:( )
    public class MyClass{
    static int i;
    public static void main(String argv[]){
    System.out.println(i);
    }
    }
    正确答案: D 你的答案: A (错误)
    有错误,变量i没有初始化。
    null
    1
    0

类变量在不设置初始值时,会进行默认值赋值,而局部方法中声明的变量则必须进行初始化,他不会进行默认值赋值。

  1. 在Java中,HashMap中是用哪些方法来解决哈希冲突的?
    正确答案: C 你的答案: A (错误)
    开放地址法
    二次哈希法
    链地址法
    建立一个公共溢出区

以上方法都是解决哈希填冲突的策略,但是在java.util.HashMap中,总体来说是使用的链地址法来解决冲突的。
当然了,使用链地址***导致get的效率从o(1)降至o(n),所以在Java8中,使用的是平衡树来解决提高效率的。

  1. 关于以下application,说法正确是什么?
    public class Test {
    static int x=10;
    static {x+=5;}
    public static void main(String[] args) //4
    {
    System.out.println(“x=”+x);
    }
    static{x/=3;};
    }//9
    正确答案: B 你的答案: B (正确)
    4行与9行不能通过编译,因为缺少方法名和返回类型
    编译通过,执行结果是:x=5
    编译通过,执行结果是:x=3
    9行不能通过编译,因为只能有一个静态初始化器

静态代码块先于主方法执行,静态代码块之间遵从代码顺序执行。

  1. 关于protected 修饰的成员变量,以下说法正确的是
    正确答案: A 你的答案: B (错误)
    可以被该类自身、与它在同一个包中的其它类、在其它包中的该类的子类所访问
    只能被该类本身和该类的所有的子类访问
    只能被该类自身所访问
    只能被同一个包中的类访问
  2. 下列代码编译和运行的结果是:()
    public class Threads4{
    public static void main(String[] args){
    new Threads4().go();
    }
    public void go(){
    Runnable r=new Runnable(){
    public void run(){
    System.out.print(“foo”);
    }
    };
    Thread t=new Thread®;
    t.start();
    }
    }
    正确答案: C 你的答案: C (正确)
    编译错误
    抛出运行时异常
    输出:foo
    代码正常运行,但是无输出
  3. 根据以下接口和类的定义,要使代码没有语法错误,则类Hero中应该定义方法( )。
    interface Action{
    void fly();
    }
    class Hero implements Action{ //…… }
    正确答案: D 你的答案: B (错误)
    private void fly(){}
    void fly(){}
    protected void fly(){}
    public void fly(){}

接口中的方法默认是public abstract,且子类的访问权限不能低于父类

  1. 在java中,下列说法正确的是()
    正确答案: D 你的答案: C (错误)
    一个类可以继承多个父类
    修饰符可维protected的属性不能被其子类访问
    抽象类可以实例化对象
    无public修饰的类,不能被非同一文件夹中的类和非同一包中的类访问
  2. 下列哪个选项是正确计算42度(角度)的余弦值?
    正确答案: C 你的答案: D (错误)
    double d = Math.cos(42)
    double d = Math.cosine(42)
    double d = Math.cos(Math.toRadians(42))
    double d = Math.cos(Math.toDegrees(42))

Math.cos为计算弧度的余弦值,Math.toRadians函数讲角度转换为弧度
20.正则表达式中,表示匹配非数字字符的字符是()?
正确答案: D 你的答案: D (正确)
\b
\d
\B
\D
大写表示“非”,d表示digit数字。非数字就是\D, w表示word,非单词就是\W

  1. 给定includel.isp文件代码片段,如下:
    <% pageContext.setAttribute(“User”,”HAHA”);%>
    ______ // 此处填写代码
    给定include2.jsp文件代码片段如下:
    <%=pageContext.getAttribute(“User”)%>
    要求运行include1.jsp时,浏览器上输出:HAHA
    正确答案: B 你的答案: D (错误)
    <jsp:include page=”include2.jsp” flash=”true”>
    <%@include file=”include2.jsp”%>
    <jsp:forward page=”include2.jsp”>
    <% response.sendRedirect(“include2.jsp”); %>
  2. java8中,下面哪个类用到了解决哈希冲突的开放定址法
    正确答案: C 你的答案: A (错误)
    LinkedHashSet
    HashMap
    ThreadLocal
    TreeMap

ThreadLocalMap中使用开放地址法来处理散列冲突,而HashMap中使用的是分离链表法。之所以采用不同的方式主要是因为:在ThreadLocalMap中的散列值分散得十分均匀,很少会出现冲突。并且ThreadLocalMap经常需要清除无用的对象,使用纯数组更加方便。

  1. 以下程序的输出结果为
    class Base{
    public Base(String s){
    System.out.print(“B”);
    }
    }
    public class Derived extends Base{
    public Derived (String s) {
    System.out.print(“D”);
    }
    public static void main(String[] args){
    new Derived(“C”);
    }
    }

正确答案: D 你的答案: A (错误)
BD
DB
C
编译错误

子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可:
public Derived(String s){
super(“s”);
System.out.print(“D”);
}

  1. 下面哪些类实现或继承了 Collection 接口?
    正确答案: B C 你的答案: A B (错误)
    HashMap
    ArrayList
    Vector
    Iterator
  2. 下面哪些Java中的流对象是字节流?
    正确答案: A B C D 你的答案: B D (错误)
    FileInputStream
    BufferedInputStream
    PushbackInputStream
    ByteArrayInputStream

stream结尾都是字节流,reader和writer结尾都是字符流 两者的区别就是读写的时候一个是按字节读写,一个是按字符。 实际使用通常差不多。 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。 只是读写文件,和文件内容无关的,一般选择字节流。

  1. 下面哪些情况会引发异常:
    正确答案: A B C 你的答案: A C D (错误)
    数组越界
    指定URL不存在
    使用throw语句抛出
    使用throws语句

1、throws出现在方法头,throw出现在方法体 2、throws表示出现异常的一种可能性,并不一定会发生异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。 3、两者都是消极的异常处理方式,只是抛出或者可能抛出异常,是不会由函数处理,真正的处理异常由它的上层调用处理。

  1. 给出下面的代码段:
    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处写入如下哪几个代码是正确的?()
    正确答案: C D 你的答案: C D (正确)
    Base(a,b);
    x=a, y=b;
    x=a; y=b;
    this(a,b);
  2. 下列那些方法是线程安全的(所调用的方法都存在)
    正确答案: A C D 你的答案: D (错误)
    public class MyServlet implements Servlet {
    public void service (ServletRequest req, ServletResponse resp) {
    BigInteger I = extractFromRequest(req);
    encodeIntoResponse(resp,factors);
    }
    }
    public class MyServlet implements Servlet {
    private long count =0;
    public long getCount() {
    return count;
    }
    public void service (ServletRequest req, ServletResponse resp) {
    BigInteger I = extractFromRequest(req);
    BigInteger[] factors = factor(i);
    count ++;
    encodeIntoResponse(resp,factors);
    }
    }
    public class MyClass {
    private int value;
    public synchronized int get() {
    return value;
    }
    public synchronized void set (int value) {
    this.value = value;
    }
    }
    public class Factorizer implements Servlet {
    private volatile MyCache cache = new MyCache(null,null);
    public void service(ServletRequest req, ServletResponse resp) {
    BigInteger i = extractFromRequest(req);
    BigInteger[] factors = cache.getFactors(i);
    if (factors == null) {
    factors = factor(i);
    cache = new MyCache(i,factors);
    }
    encodeIntoResponse(resp,factors);
    }
  3. 以下哪些类是线程安全的()
    正确答案: A D E 你的答案: C D (错误)
    Vector
    HashMap
    ArrayList
    StringBuffer
    Properties
  4. 关于Java中的ClassLoader下面的哪些描述是错误的:( )
    正确答案: B D F 你的答案: B D E (错误)
    默认情况下,Java应用启动过程涉及三个ClassLoader: Boostrap, Extension, System
    一般的情况不同ClassLoader装载的类是不相同的,但接口类例外,对于同一接口所有类装载器装载所获得的类是相同的
    类装载器需要保证类装载过程的线程安全
    ClassLoader的loadClass在装载一个类时,如果该类不存在它将返回null
    ClassLoader的父子结构中,默认装载采用了父优先
    所有ClassLoader装载的类都来自CLASSPATH环境指定的路径
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值