百度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

希爾排序、堆排序使用數組存儲的話,方便獲取指定位置的數據。這兩個排序都需取指定位置的數據,而使用鏈表增加了獲取指定位置的時間。  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM