zoukankan      html  css  js  c++  java
  • 百度2020校招Java研发工程师笔试卷(第一批)详解

    第一题:关于内存管理,下面说法不正确的是?

     答案:A、C

    程序的内存不一定都是从0开始。 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。

    内存管理分段与分页:https://blog.csdn.net/weixin_44151739/article/details/108416656

    第二题:下列关于图的说法正确的是()

     答案:B

    图不可以是空图。

    给定子图的边的结合E',定点的集合V',子图 G'=(V',E'),在上述条件基础之下 极小连通子图: 用最少的边使顶点连通 极大连通子图: 用最多的边使顶点连通

    在有向图G中,如果两个顶点u,v间有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向非强连通图的极大强连通子图,称为强连通分量。

    第三题:设无向图G=(V,E),顶点集V={a,b,c,d,e,f,g,h},边集E={(a,b),(a,h),(a,e),(b,c),(b,d),(c,d),(c,h),(e,f),(e,g)},则下列选项中,不属于BFS序列的是()

     答案:B

    BFS遍历

    第四题:分页存储管理将进程的逻辑地址空间分成若干个页,并为各页加以编号,从0开始,若某一计算机主存按字节编址,逻辑地址和物理地址都是32位,页表项大小为4字节,若使用一级页表的分页存储管理方式,逻辑地址结构为页号(20位),页内偏移量(12位),则页的大小是(  )字节?页表最大占用(  )字节?

     答案:A

    参考博客:https://blog.csdn.net/syh666233/article/details/109295815

    第五题:有以下程序段,下面正确的选项是

    public static void main(String[] args) {
        System.out.print(test1());
    }
    public static int test1() {
        int a = 20;
        try {
            return a + 25;
        } catch (Exception e) {
            System.out.println("test catch exception");
        } finally {
            System.out.print(a + " ");
            a = a + 10;
         }
         return a;
     }
    

     答案:D

    finally语句在return之前执行。

    参考博客:https://blog.csdn.net/congduan/article/details/48275473

    第六题:下列选项中,关于HTTP与HTTPS的区别的描述中,正确的是(   ):

     答案:A、B、C

    http:80;https:443

    第七题:线程池在我们的项目中经常会被用到,线程池的选择基于我们的应用场景,那么现在有这样一个应用场景:需要周期性的执行任务,那么我们应该选择哪一个线程池()

     答案:D

    第八题:小牛开发文件上传功能时,遇到了一些安全问题,那么对于文件上传漏洞,有效防御手段有哪些?

     答案:B、C

    第九题:用下面哪些SQL语句可以从table中得到每门课都大于80分的学生姓名,下面说法正确的的?

    name   course   fenshu
    小张     语文       81
    小张     数学       75
    小李     语文       76
    小李     数学       90
    小王     语文       81
    小王     数学       100
    小王     英语       90

     答案:A、D

    第十题:以下代码运行的结果是什么

    public class TestGC {
        private static TestGC TEST_GC = null;
        private void isAlive() {
            System.out.print("Yes,I'm Alive!" + "、");
        }
        @Override
        protected void finalize() throws Throwable {
            super.finalize();
            System.out.print("finalize mehtod executed!" + "、");
            TestGC.TEST_GC = this;
        }
        public static void main(String[] args) throws Throwable {
            TEST_GC = new TestGC();
            TEST_GC = null;
            System.gc();
            Thread.sleep(500);
            if (TEST_GC != null) {
                TEST_GC.isAlive();
            } else {
                System.out.print("NO,I'm dead!" + "、");
            }
            TEST_GC = null;
            System.gc();
            Thread.sleep(500);
            if (TEST_GC != null) {
                TEST_GC.isAlive();
            } else {
                System.out.print("NO,I'm dead!");
            }
        }
    }
    

     答案:A

    finalize()只会在对象内存回收前被调用一次

    参考博客:https://blog.csdn.net/a4171175/article/details/90749839

    第十一题:对于java集合HashMap中的containsKey()方法,最好情况和最坏情况下的时间复杂度是

     答案:A(JAVA1.8之前最坏情况是O(n),之后是O(logn))

    在JDK1.7及之前,是用数组加链表的方式存储的。

    但是,众所周知,当链表的长度特别长的时候,查询效率将直线下降,查询的时间复杂度为 O(n)。因此,JDK1.8 把它设计为达到一个特定的阈值之后,就将链表转化为红黑树。  

    参考博客:https://zhuanlan.zhihu.com/p/129724004

    第十二题:以下代码运行后会打印哪些内容

    public class Test implements Runnable {
        @Override
        public void run() {
            while (!Thread.currentThread().isInterrupted()) {
                synchronized (this) {
                try {
                    wait();
                } catch (InterruptedException e) {
                    System.out.println("InterruptedException");
                }
            }
        }
        System.out.println("Final");
    }
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Test());
        thread.start();
        new Thread(() -> {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
            }
            thread.interrupt();
            System.out.println("interrupt");
        }).start();
        thread.join();
        System.out.println("exit");
        }
    }
    

     答案:A

    参考博客:https://www.jianshu.com/p/d901b25e0d4a  

    第十三题:假设存在学生信息表student,选修课表course,如果想查询所有学生的选修课以及成绩,下面正确的sql语句是:

    create table `student`(
        `id` int(11) not null auto_increment,
        `name` char(50) not null comment '学生姓名',
        `sid` int(11) not null comment '学号',
        primary key(`id`),
        unique key `sid`(`sid`)
    )engine = innodb;
    create table `course`(
        `id` int(11) not null auto_increment,
        `name` char(50) not null comment '课程名称',
        `score` int(11) not null comment '成绩',
        `sid` int(11) not null comment '学号',
        primary key(`id`)
    )engine = innodb;
    

     答案:C、D

    mysql cross join为笛卡尔全连接,inner join即为join

    • JOIN: 如果表中有至少一个匹配,则返回行
    • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
    • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
    • FULL JOIN: 只要其中一个表中存在匹配,就返回行 

    参考博客:https://www.cnblogs.com/poloyy/p/12881918.html  

    第十四题:假如公司机房现在有n个服务器,为了方便用户会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器,现有的做法是根据服务器的ip%n计算得到请求的服务器,如果现在一台服务器挂掉了,采用以下哪种做法(),能够保证不会造成大面积的访问错误;原有的访问基本还是停留在同一台服务器上;尽量考虑负载均衡。

     答案:A

    参考博客:https://blog.csdn.net/caigen1988/article/details/7708806?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base

    第十五题:将一个整数序列整理为降序,两趟处理后序列变为{36, 31, 29, 14, 18, 19, 32}则采用的排序算法可能是________。

     答案:B

    冒泡:i*j 两两比较,小的放前
    选择:i*j两两比较,遍历j后,找到最小的放前面
    插入:默认第一个排好序(只有一个,也没得比较),第一步:第二个与第一个比较排序;第二步:第三个插入前面排好序的序列;第三步,第四个插入前面的序列,以此类推
    希尔:类似插入排序,但第一步:分i//2堆(随机分配)同步进行插入排序(第一堆排完,再第二堆,再第三堆…);第二步:分i//4堆依次排;…最后一步:一整堆进行插入排序,耗时i;
    归并:分而治之,dynamic programming
    快排:定义分区函数,主函数递归排序
    堆排:建立二叉树,树内排序,找到最大值取出,更新树,再取出第二大的数…以此类推
    计数:不用比较,牺牲空间换时间,开辟key为min到max的数组,遍历原序列,统计数的个数;再对key按顺序输出即可。
    桶排:计数排序的升级,计数用了max-min+1个桶,桶排序用k个桶(数量更少),桶内排好序(用传统方法,或递归用桶排),再对桶按顺序输出即可。
    基数:同样基于计数排序,先按个位数入列(0-9个列),排好第一步;再按十位数入列,排好第二步;…依次到最大位数入列,排好输出即可。
    分析
    插入排序:第n趟前n+1个有序
    选择排序:第n趟前n个位置正确
    快速排序:第n趟有n个元素位置正确
    堆排序:第n趟前或后n个位置正确
    参考博客:https://blog.csdn.net/xxxxl0908/article/details/104702991/

    第十六题:
    数据结构中,二分法的查找主要应用于数据量较大情况下的查找,但是数据需要先排好顺序,在顺序表(2,5,7,10,14,15,18,23,35,41,52)中,用二分法查找12,所需的关键码比较的次数为多少(     )?

     答案:C

    二分比较次数

    第十七题:设a数组的长度为N,那么下面程序循环内交换数组元素的代码执行的时间复杂度最坏为?

    for (int i = N - 1; i > 1; i--)
    {
        for (int j = 1; j < i; j++)
        {
            if (a[j] > a[j + 1])
            {
                temp = a[j + 1];
                a[j + 1] = a[j];
                a[j] = temp;
            }
        }
    }
    

     答案:B

    选择排序时间复杂度  

    第十八题:
    如果存储结构由数组变为链表,那么下列哪些算法的时间复杂度量级会升高

     答案:B、C

    希尔排序、堆排序使用数组存储的话,方便获取指定位置的数据。这两个排序都需取指定位置的数据,而使用链表增加了获取指定位置的时间。  

    彼时当年少,莫负好时光。
  • 相关阅读:
    ado.net(增删改)
    窗体基础WINFORM
    SQL函数类的操作,增加,查询
    SQL数据库,增加查询修改以及防sql写入攻击
    SQL数据库--数据访问
    单列模式
    SQL数据库基础————委托
    SQL数据库基础知识——抽象类
    SQL数据库——静态成员
    面向对象
  • 原文地址:https://www.cnblogs.com/l609929321/p/14964791.html
Copyright © 2011-2022 走看看