2021-07-09

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
面试

一、选择题

  1. 关于JVM的类加载过程,下面哪个描述是正确的(B)
    A.加载—>准备—>解析—>初始化一>验证—>使用一>卸载
    B.加载一>验证一>准备一>解析一>使用一>卸载
    C.加载一>验证一>解析一>准备一>初始化一>使用一>卸载
    D.加载一>初始化一>验证一>准备一>解析一>使用一>卸载

  2. 以下java程序代码,执行后的结果是(D)

     class A{
     static{
     System.out.print("a");
     }
     public A(){
     System.out.print("b");
    }
     class B extends A{
     static{
     System.out.print("c");
     }
     public B(){
     System.out.print(d");
     }
     }
     public class Dahua{
     public static void main(Stringl args)(
    A b = new B():
    b=new B();
    }
    }
    

    A.abcdabcd
    B.abcdbd
    C.acbdd
    D.acbdbd

  3. 以下创建了几个对象(B)

    	String A,B,C
    	A=a";
    	B="b":
    	A=A+B;
    	Stringbuffer D=new Stringbuffer(abc");
       D=D.append(567");
    

    A.6
    B.4
    C.3
    D.5

  4. 以下哪些叙述是正确的(AD)
    A.String类不可以有子类
    B.abstract类只可以有abstract方法
    C.abstract类可以有非abstract方法
    D.不可以同时用final和abstract修饰同一个方法
    E.允许使用static修饰abstrac方法

  5. 以下的方法在抽象类中正确的是(D)
    A.private final void sleep(){}
    B.private abstract void eat();
    C.public final abstract void play();
    D.protected void work();

  6. 下面的程序输出的结果是(B

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

    A.dahua and abc
    B.dahua and gbc
    C.test success and abc
    D.test success and gbc

  7. 下面哪个不是Map接口的实现类(C)
    A.HashMap
    B.Hashtable
    C.HashSet
    D.LinkedHashMap

  8. .在 Servletis过滤器的生命周期方法中,每当传递请求或响应时,web容器会调用(C)方法
    A.init
    B.service
    C.doFilter
    D.destroy

  9. java集合类里面最基本的接口描述错误的是(D)
    A.Collection:代表一组对象,每一个对象都是它的子元素
    B.Set不包含重复元素的collection
    C.List:有顺序的 collection并且可以包含重复元素
    D.Map:可以把(key)映射到值value)的对象,键值不能重复

  10. 如下的Java程序

    public class Test{
    	public static void main(String[] args){
    	System.out.printin(args[0]);
    

    若采用命令行"java Test one two three"调用,则程序输出的结果为:(B)
    A.Test
    B.one
    C.two
    D.java

  11. 要创建一个新目录,可以用下面(D)类实现
    A.Filelnputstream
    B.Fileoutputstream
    C.Randomaccessfile
    D.File

  12. 在操作系统中,Wait(s)和Signal(s)操作是一种(D
    A.机器指令
    B.作业控制命
    C.系统调用命
    D.低级进程通信原语

  13. 下列哪些语句关于内存回收的说明是正确的(B
    A.程序员必须创建一个线程来释放内存
    B.内存回收程序负责释放无用内存
    C.内存回收程序允许程序员直接释放内存
    D.内存回收程序可以在指定的时间释放内存对象

  14. 编译运行以下程序后,关于输出结果的说明正确的是(C):

public class Conditional{
	 public static void main(String args[]){
	 int x=4;
	 System.out.printin( "value is "+((x>4)?99.: 9));
	 }
	 }
	A.输出结果为: value is99.99
	B.输出结果为: value is9
	C.输出结果为: value is9.0
	D.错误
  1. 下列说法正确的有(C
    A.class中的constructor不可省略
    B.constructor必须与class同名,但方法不能与 class同名
    C.constructor在一个对象被new时执行
    D.一个class只能定义一个constructor
  2. 从下列选项中选择正确的Java表达式(B)
    A.int k = new String(“test”);
    B.String str= new String(“test”);
    C.char c=74;
    D.long j = 123;
  3. 下面的说法正确的是(A
    A.Java中IO流的处理通常分为输入和输出两个部分
    B.Readerwriter与类是用来处理字符流,也就是纯文本文件
    C.file类是输入输出流类的子类
    D.Inputstreamoutputstream与类通常是用来处理字节流,也就是二进制文件
  4. 以下选项中关于 HashMap和Hashtable和描述正确的是(ABC
    A.两者都实现了Map接口
    B.Hashtable是线程安全的, Hashmap不是线程安全的
    C.Hashmapt提供了可供应用选代的键的集台
    D.Hashmap不许建和值是null, Hashtable许键或者值为null
  5. 下面关于 HashMap和Hashtable的区别,说法正确的是(CD)
    A.Hashtable线程不安全,效率高
    B.Hashmap线程安全效率低
    C.Hashmap许nul和值
    D.Hashtable不许null健和值
  6. 下面的哪些声明是错误的?(ACD
    int i= 4L
    double d = 34.4
    float f = 1.1
    long a = 1384865444229
  7. 有关线程的叙述(B)是对的
    A.一旦一个线程被创建,它就立即开始运行
    B.使用 start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行
    C.如果复用个线程,可以调用再次调用star方法,使已经结束的线程复活
    D.join方法可使当前线程阻塞,直到thread线程运行结束
  8. 关于索引(idex)的说法哪些是正确的?(BCD)
    A.创建索引能提高数据插入的性能
    B.索引应该根据具体的检索需求来创建,在选择性好的列上创建索引
    C.索引并非越多越好
    D.建立索引可使检索操作更迅速
    E.索引创建过程中不影响表的增删改操作
  9. 关于lterator,正确的有(BC)
    A.Iterator可以双向遍历
    B.Iterater可以用来遍历Set和List集合
    C.Iterater可以用来遍历Map
    D.用 lterater遍历Set和List遍历时,如果删除元素,会改变元素顺序
  10. 不能用来修饰interface的有(ACD
    A.private
    B.public
    C.protected
    D.static
  11. Java中的集合类包括 Arraylist、Linkedlist、HashMap等类,下列关于集合类描述正确的是(ABD
    A.Arraylist和Linkedlist均实现了List接口
    B.Arraylist的查询速度比Linkedlist快
    C.添加和删除元素时, Arraylist的表现更佳
    D.HashMap实现Map接口,它允许任何类型的键和值对象,并允许将nul作键或值
  12. 以下哪些属于java线程的状态(ACDE
    A.新建
    B.结束
    C.阻塞
    D.运行
    E.就绪
  13. 关于 ThreadLocal的说法错误的是(AB)
    A.ThreadLocal能够实现多线程间的数据共享
    B.ThreadLocal实现了Runnable接口
    C.ThreadLocal为每一个线程提供某个变量的副本
    D.ThreadLocal保证各个线程的数据不会被另外线程访问和破坏,进而实现线程安全
  14. 关于数组错误的是(BCDE)
    A.数组是一种对象
    B.数组属于一种原生类
    C.数组有 length方法
    D.数组的大小可以任意改变
    E.数组下标长度没有限制
  15. List集合的遍历方式有如下哪几种(ABC
    A.Iterator代器实现
    B.增强for循环实现
    C.get()和size()方法结合实现
    D.get()和 length()方法结合实现
  16. HashSet去重复,在 HashSet内部需要调用Object的哪些方法(AD)
    A.hashcode方法
    B.tostring方法
    C.clone方法
    D.equals方法

二、编程题

1.题目:假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

DiskMemory类如下:

public class DiskMemory {

	// 记录磁盘的总大小
	private int totalSize;
	
	// 获取一个磁盘的大小,采用随机数生成
	public int getSize() {
    	//加一是为了防止获取磁盘大小为0,不符合常理
    	return (new Random().nextInt(3) + 1) * 100;
	}
	
	//统计磁盘空间的大小
	public synchronized void setSize(int size) {
    	totalSize += size;
	}
}

根据给出的代码,补全剩余代码,实现该功能。

参考答案:

import java.util.*;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @Author: iqqcode
 * @Date: 2020-10-01 23:09
 * @Description: 有4个线程分别获取C、D、E、F盘的大小, 第5个线程统计总大小
 */
 
public class DiskMemory {
    // 记录磁盘的总大小
    private int totalSize;

    // 获取一个磁盘的大小,采用随机数生成
    public int getSize() {
        //加一是为了防止获取磁盘大小为0,不符合常理
        return (new Random().nextInt(3) + 1) * 100;
    }

    //统计磁盘空间的大小
    public synchronized void setSize(int size) {
        totalSize += size;
    }

    // 获得总磁盘空间的大小
    public int getTotalSize() {
        return totalSize;
    }

    public static void main(String[] args) throws InterruptedException {
        // 创建线程池,初始化大小为 4
        ExecutorService service = Executors.newFixedThreadPool(4);
        CountDownLatch countDownLatch = new CountDownLatch(4);
        DiskMemory diskMemory = new DiskMemory();
        for (int i = 0; i < 4; i++) {
            service.execute(() -> {
                int timer = new Random().nextInt(5);
                try {
                    Thread.sleep(timer * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                int diskSize = diskMemory.getSize();
                System.out.printf("完成磁盘的统计任务,耗费%d秒. 磁盘大小为%d.\n", timer, diskSize);
                diskMemory.setSize(diskSize);

                // 任务完成,计数器减一
                countDownLatch.countDown();
                System.out.println("count num = " + countDownLatch.getCount());
            });
        }
        // 主线程一直被阻塞,直到count的计数器被置为0
        countDownLatch.await();
        System.out.printf("全部磁盘都统计完成,所有磁盘总大小为 " + ", 【 totalSize = " + diskMemory.getTotalSize() + " 】");
        service.shutdown();
    }
}

转载:可参考此链接:代码具体实现过程

2.题目:beginAdress是开始抓拍的路口编码。endAdress是结束抓拍的路口编码,shootCars是所有抓拍路口抓拍车辆信息(每个车辆在每个路口仅被抓拍一次);求路段平均旅行时间,结果保留两位小数

//车辆抓拍信息
class shootCar{
    //抓拍路口编码
    private int adrId;
    //车牌号
    private String carNum;
    //抓拍时间
    private Date shootTime;
}
public class ShootCarService{
    public float getAvgTravel(int beginAdress, int endAdress, List<shootCar> shootCars){
        //请补充完成具体的业务代码
    }
}

参考答案

import java.util.Date;
import java.util.Objects;

//车辆抓拍信息
public class shootCar {
    private  int adrld;
    private  String scarNum;
    //private Date shootTime;
    private int shootTime;

    public shootCar() {
    }

    public shootCar(int adrld, String scarNum, int shootTime) {
        this.adrld = adrld;
        this.scarNum = scarNum;
        this.shootTime = shootTime;
    }

    public int getAdrld() {
        return adrld;
    }

    public void setAdrld(int adrld) {
        this.adrld = adrld;
    }

    public String getScarNum() {
        return scarNum;
    }

    public void setScarNum(String scarNum) {
        this.scarNum = scarNum;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        shootCar shootCar = (shootCar) o;
        return adrld == shootCar.adrld &&
                shootTime == shootCar.shootTime &&
                Objects.equals(scarNum, shootCar.scarNum);
    }

    @Override
    public int hashCode() {
        return Objects.hash(adrld, scarNum, shootTime);
    }
    //    public Date getShootTime() {
//        return shootTime;
//    }
//
//    public void setShootTime(Date shootTime) {
//        this.shootTime = shootTime;
//    }

    public int getShootTime() {
        return shootTime;
    }

    public void setShootTime(int shootTime) {
        this.shootTime = shootTime;
    }
}
import javax.swing.text.html.HTMLDocument;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

public class ShootCarService {
    public float getAvgTravel(int beginAdress, int endAdress, List <shootCar> shootCars){
        Iterator it=shootCars.iterator();
        List beginCars=new ArrayList();
        List endCars=new ArrayList();
        while(it.hasNext()){
            shootCar car=new shootCar();
            car= (shootCar) it.next();


            if(car.getAdrld()==beginAdress){
                beginCars.add(car);
            }
            if(car.getAdrld()==endAdress){
                endCars.add(car);
            }

        }
        System.out.println(beginCars.size());
        System.out.println(endCars.size());
        Iterator it2=beginCars.iterator();
        shootCar car2=new shootCar();
        shootCar car3=new shootCar();
        long sum=0;
        int num=0;
        float avgTime;
        while (it2.hasNext()){
            car2= (shootCar) it2.next();
            Iterator it3=endCars.iterator();

            while (it3.hasNext()){
                car3= (shootCar) it3.next();
                if((car3.getScarNum()).equals(car2.getScarNum()) ){
                    //sum=(car2.getShootTime()).getTime()-(car3.getShootTime()).getTime();
                    sum+=(car3.getShootTime())-(car2.getShootTime());
                    num++;
                }
        }
        }
        avgTime=(float) sum/ num;
        System.out.println(sum);
        System.out.println(num);
        return  avgTime;
    }
}
import java.util.ArrayList;
import java.util.List;

public class Text {
    public static void main(String[] args) {
        int beginAdress=4;
        int endAdress=6;

        shootCar car1=new shootCar(4,"101",1);
        shootCar car2=new shootCar(6,"101",9);
        shootCar car3=new shootCar(4,"102",2);
        shootCar car4=new shootCar(6,"102",7);
        List cars=new ArrayList();
        cars.add(car1);
        cars.add(car2);
        cars.add(car3);
        cars.add(car4);
        ShootCarService carService=new ShootCarService();
        System.out.println(carService.getAvgTravel(beginAdress,endAdress,cars));
    }
}

3.题目:教室里有一堆香蕉,五个小朋友来分。第一个小朋友把这堆香蕉平均分为五份,多了一个, 这个小朋友把多的一个吃掉了,再拿走了一份。第二个小朋友把剩下的香蕉又平均分成五份,又多了一个,他同样把多的一个吃掉了, 再拿走了一份,第三、第四、第五个小朋友都是这样做的,问教室里原来最少有多少个香蕉? (使用递归方法实现)

参考答案
方案1:

public int banana(int index, int count) {
        // 5个猴子,个数num==0,返回即可
        if (index == 5) {
            return 1;
        }
        // 桃子总数count,第num个猴子吃掉一个,余下的肯定能被5均分,如果不能被5取余,肯定不满足条件,返回-1
        if ((count - 1) % 5 != 0) {
            return -1;
        }
        // 剩count个桃子,第num个猴子吃掉一个,均分成5份,自己拿走1份,剩下4份桌子上,供其他猴子来进行下一轮分桃子
        count = (count - 1) / 5 * 4;
        // 除5代表均分5份,*4代表,吃了一份,余下4分
        return banana(index + 1, count);
    }

    @Test
    public void test() {
        int num = 0;

        int total = 0;  // 桃子总数
        while (true) {
            // 桃子的数目肯定是5的倍数+1
            total = num * 5 + 1;
            // 返回1,即就是最终5个猴子的结果
            if (banana(0, total) == 1) {
                break;
            }
            // 最终每一份的桃子数目
            num += 1;
        }
        System.out.println(num);
        System.out.println(total);

    }

方案2:
参考答案2

4.题目:一个文件中包含多个字符串,每个字符串为独立一行,要求将输入文件input.txt中字符串进行排序,排序后输出到另外一个文件out.txt。

参考答案
转载:参考链接

5.题目:TCP的三次握手he四次挥手

参考答案
转载:参考链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值