文章目录

  • 一、选择题
  • 二、编程题


一、选择题

1、下面哪个标识符是合法的?
A “9HelloWorld”
B “_Hello World”
C “Hello*World”
D “Hello$World”
他的回答: D (正确)
正确答案: D
参考答案:
标识符是以大小写字母、数字、下划线、美元符号组成,不能艺术字开头。
2、以下java程序代码,执行后的结果是()

java.util.HashMap map=new java.util.HashMap();
map.put("name",null);
map.put("name","Jack");
System.out.println(map.size());

A 0
B null
C 1
D 2
他的回答: D (错误)
正确答案: C
参考答案:
size() 方法用于返回在此映射中的键 - 值映射关系的数量。
HashMap在插入新元素时,会使用equals()方法判断集合中是否已经存在与新元素key相同的元素,如果存在,新元素会覆盖掉和他key相同的对象。
HashMap允许null作为key/value,因此map.put(“name”,null);会在map集合中存入key为"name",value为null的对象。map.put(“name”,“Jack”);会在map
集合中存入key为"name",value为"Jack"的对象。前后两次存入的对象的key都为"name",因此刚存入的key为"name",value为null的对象会被覆盖掉,即map中只有一个key为"name",value为"Jack"的对象。map.size()为1。
3、Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述错误的是
A ArrayList和LinkedList均实现了List接口
B ArrayList的访问速度比LinkedList快
C 添加和删除元素时,ArrayList的表现更佳
D HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
他的回答: C (正确)
正确答案: C
4、以下描述正确的是
A CallableStatement是PreparedStatement的父接口
B PreparedStatement是CallableStatement的父接口
C CallableStatement是Statement的父接口
D PreparedStatement是Statement的父接口
他的回答: A (错误)
正确答案: B
参考答案:
Statement是是PreparedStatement的父接口,PreparedStatement是CallableStatement的父接口。
5、下面有关重载函数的说法中正确的是
A 重载函数必须具有不同的返回值类型
B 重载函数形参个数必须不同
C 重载函数必须有不同的形参列表
D 重载函数名可以不同
他的回答: C (正确)
正确答案: C
参考答案:
重载:必须同名函数;必须参数表不同(包含参数个数不同;参数类型不同;或参数个数与类型都不同)
6、下列关于容器集合类的说法正确的是?
A LinkedList继承自List
B AbstractSet继承自Set
C HashSet继承自AbstractSet
D WeakMap继承自HashMap
他的回答: A (错误)
正确答案: C
接口是用来实现的,list、set是一个接口
7、ArrayList list = new ArrayList(20);中的list扩充几次
A 0
B 1
C 2
D 3
他的回答: A (正确)
正确答案: A
8、以下程序的输出结果是?

public class Example {
String str = new String("good");
char[] ch = { 'a', 'b', 'c' };
public static void main(String args[]) {
Example ex = new Example();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.print(ex.ch);
}
public static void change(String str, char ch[])
{
str = "test ok";
ch[0] = 'g';
}
}

A good and abc
B good and gbc
C test ok and abc
D test ok and gbc
他的回答: B (正确)
正确答案: B
9、下面的方法,当输入为2的时候返回值是多少?

public static int getValue(int i) {
int result = 0;
switch (i) {
case 1:
result = result + i;
case 2:
result = result + i * 2;
case 3:
result = result + i * 3;
}
return result;
}

A 0
B 2
C 4
D 10
他的回答: D (正确)
正确答案: D
10、提供Java存取数据库能力的包是( )
A java.sql
B java.awt
C java.lang
D java.swing
他的回答: A (正确)
正确答案: A
参考答案:
注解:java.sql提供使用 JavaTM 编程语言访问并处理存储在数据源(通常是一个关系数据库)中的数据的 API。此 API 包括一个框架,凭借此框架可以动态地安装不同驱动程序来访问不同数据源。

二、编程题

【最近公共祖先】
将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。
测试样例:
2,3
返回:1
【解题思路】:
题目所描述的满二叉树如下: 1 / \ 2 3 / \ / \ 4 5 6 7 上述树中子节点与父节点之间的关系为root =child / 2 所以如果a != b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先 比如: 2和7的最近公共祖先:7/2 = 3 —> 3/2 = 1, 2/2 = 1, 得到1为它们的公共祖先。

牛客网核心模式代码

import java.util.*;

public class LCA {
    public int getLCA(int a, int b) {
        while(a!=b){
            if(a>b){
                a=a/2;
            }else{
                b=b/2;
            }
        }
        return a;
    }
}

【求最大连续bit数】
求一个int类型数字对应的二进制数字中1的最大连续数,例如3的二进制为00000011,最大连续2个1.
数据范围:1<=t<=5,
数据组数: 1<=n<=500000,
进阶:时间复杂度:O(logn) ,空间复杂度:O(1)
输入描述:
输入一个int类型数字
输出描述:
输出转成二进制之后连续1的个数
示例1:
输入
3
输出
2

牛客网ACM模式代码

import java.util.*;
public class Main {
   public static void main(String[] args){
       Scanner sc=new Scanner(System.in);
       int count=0;
       int newCount=0;
       while(sc.hasNextInt()){
           int n=sc.nextInt();
           while(n!=0){
               if((n&1)==1){
                   count++;
                  newCount=Math.max(newCount,count); 
               }else{
                   count=0;
               }
                n>>=1;
           }
       }
       System.out.print(newCount);
   }       
}