第一題:關於內存管理,下面說法不正確的是?
答案: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分的學生姓名,下面說法正確的的?

答案: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
希爾排序、堆排序使用數組存儲的話,方便獲取指定位置的數據。這兩個排序都需取指定位置的數據,而使用鏈表增加了獲取指定位置的時間。