( 百度Java面經)互聯網公司校招Java面試題總結及答案——百度

来源:https://www.cnblogs.com/yunxi520/archive/2020/05/09/12859934.html
-Advertisement-
Play Games

1.關鍵字transient 1)一旦變數被transient修飾,變數將不再是對象持久化的一部分,該變數內容在序列化後無法獲得訪問。 2)transient關鍵字只能修飾變數,而不能修飾方法和類。註意,本地變數是不能被transient關鍵字修飾的。變數如果是用戶自定義類變數,則該類需要實現Ser ...


( 百度Java面經)互聯網公司校招Java面試題總結及答案——百度

 

1.關鍵字transient

1)一旦變數被transient修飾,變數將不再是對象持久化的一部分,該變數內容在序列化後無法獲得訪問。

2)transient關鍵字只能修飾變數,而不能修飾方法和類。註意,本地變數是不能被transient關鍵字修飾的。變數如果是用戶自定義類變數,則該類需要實現Serializable介面。

3)被transient關鍵字修飾的變數不再能被序列化,一個靜態變數不管是否被transient修飾,均不能被序列化。

MyISAM引擎是MySQL 5.1及之前版本的預設引擎,它的特點是:

不支持行鎖,讀取時對需要讀到的所有表加鎖,寫入時則對錶加排它鎖

不支持事務

不支持外鍵

不支持崩潰後的安全恢復

在表有讀取查詢的同時,支持往表中插入新紀錄

支持BLOB和TEXT的前500個字元索引,支持全文索引

支持延遲更新索引,極大提升寫入性能

對於不會進行修改的表,支持壓縮表,極大減少磁碟空間占用

InnoDB

InnoDB在MySQL 5.5後成為預設索引,它的特點是:

支持行鎖,採用MVCC來支持高併發

支持事務

支持外鍵

支持崩潰後的安全恢復

不支持全文索引

( 百度Java面經)互聯網公司校招Java面試題總結及答案——百度

 

----------------------------------------百度-----------------------------------------------------

一面:

1.怎樣設計實現一個高效的線程安全的hashmap 。

方法一:通過Collections.synchronizedMap()返回一個新的Map,這個新的map就是線程安全的。 這個要求大家習慣基於介面編程,因為返回的並不是HashMap,而是一個Map的實現。

方法二:重新改寫了HashMap,具體的可以查看java.util.concurrent.ConcurrentHashMap. 這個方法比方法一有了很大的改進。(鎖分離)

方法一使用的是的synchronized方法,是一種悲觀鎖.在進入之前需要獲得鎖,確保獨享當前對象,然後做相應的修改/讀取.

方法二使用的是樂觀鎖,只有在需要修改對象時,比較和之前的值是否被人修改了,如果被其他線程修改了,那麼就會返回失敗.鎖的實現,使用的是 NonfairSync. 這個特性要確保修改的原子性,互斥性,無法在JDK這個級別得到解決,JDK在此次需要調用JNI方法,而JNI則調用CAS指令來確保原子性與互斥性.

重寫和重載

(1)重寫:需要繼承;方法嗎和參數、返回值必須相同,許可權修飾符必須大於等於父類;不可以重寫父類的private方法;不可以拋出父類沒有拋出的異常;

(2)重載:方法名必須相同;參數個數、類型有一個不相同;返回值可以相同也可以不同;可以有不同的訪問修飾符;可以拋出不同異常。

2.用過的設計模式。寫單例模式代碼,各種情況下比如去掉某一句會怎樣。

創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

其實還有兩類:併發型模式和線程池模式。

單例模式:

工廠模式:程式在介面和子類之間加入了一個過渡端,通過此過渡端可以動態取得實現了共同介面的子類實例化對象。

代理模式:指由一個代理主題來操作真實主題,真實主題執行具體的業務操作,而代理主題負責其他相關業務的處理。

觀察者模式:

適配器模式:如果一個類要實現一個具有很多抽象方法的介面,但是本身只需要實現介面中的部分方法便可以達成目的,所以此時就需要一個中間的過渡類,但此過渡類又不希望 直接使用,所以將此類定義為抽象類最為合適,再讓以後的子類直接繼承該抽象類便可選擇性的覆寫所需要的方法,而此抽象類便是適配器類。

3、介紹同步鎖,使用情景;

synchronized

4、假如有兩個線程,一個線程A,一個線程B都會訪問一個加鎖方法,可能存在併發情況,但是線程B訪問頻繁,線程A訪問次數很少,問如何優化。(然後面試官說有瞭解過重度鎖和輕度鎖嗎)

5、進程間都有哪些通信方式;

1.無名管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程間使用。進程的親緣關係通常是指父子進程關係。

2.高級管道(popen):將另一個程式當做一個新的進程在當前程式進程中啟動,則它算是當前程式的子進程,這種方式我們成為高級管道方式。

3.有名管道 (named pipe) : 有名管道也是半雙工的通信方式,但是它允許無親緣關係進程間的通信。

4.消息隊列( message queue ) : 消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列剋服了信號傳遞信息少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。

5.信號量( semophore ) : 信號量是一個計數器,可以用來控制多個進程對共用資源的訪問。它常作為一種鎖機制,防止某進程正在訪問共用資源時,其他進程也訪問該資源。因此,主要作為進程間以及同一進程內不同線程之間的同步手段。

6.信號 ( sinal ) : 信號是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生。

7.共用記憶體( shared memory ) :共用記憶體就是映射一段能被其他進程所訪問的記憶體,這段共用記憶體由一個進程創建,但多個進程都可以訪問。共用記憶體是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號兩,配合使用,來實現進程間的同步和通信。

8.套接字( socket ) : 套解口也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同機器間的進程通信。

6、有一個整數,轉換為二進位,請找出所有的1的數量;

只計算1的個數使用:

while(n>0)

count++;

n = n & (n-1);

7、你覺得Java是完全面相對象的語言嗎?

8、講解下你對抽象,多態的理解;

抽象就是將實際事物特征抽象出來,用一個類表示,類中的屬性就表示事物的不同特征。

抽象類和介面就是抽象的一種表象。

多態

①使用父類類型的引用指向子類的對象;

②該引用只能調用父類中定義的方法,不能調用子類中獨有的方法;

③如果子類中重寫了父類中的一個方法,那麼在調用該方法的時候,將會調用子類中的這個方法;

④在多態中,子類可以調用父類中的所有方法;

⑤多態主要體現為方法重載和方法重寫,相同的行為,不同的實現方式;

⑥多態的主要應用是多態參數和多態集合

⑦如果一個方法中有父類作為參數類型,就意味著可以給該方法傳遞任何一個子類對象。

9、講解下http請求里的header有什麼作用;

10.Get和post區別。

(1)get用於獲取數據,而且應該是安全的和冪等的。post用於提交數據。(多用於新建)。

(2)GET請求的數據會附在URL之後,最多只能是1024位元組;POST把提交的數據則放置在是HTTP包的包體中,理論上數據大小沒有限制。

(3)POST的安全性要比GET的安全性高。

11.Http協議相關。

HTTP 是基於 TCP/IP 協議的應用層協議。它不涉及數據包(packet)傳輸,主要規定了客戶端和伺服器之間的通信格式,預設使用80埠。

HTTP/1.0不支持連接保持,所以後來HTTP/1.1增加了Connection:keep-alive以及管道,管道機制則是允許瀏覽器同時發出A請求和B請求,但是伺服器還是按照順序。

HTTP/2.0是一個徹底的二進位協議;實現雙向的、實時的通信(多工),避免了隊頭阻塞;用ID來區分數據流,客戶端發出的數據流,ID一律為奇數,伺服器發出的,ID為偶數;可以取消數據流;客戶端還可以指定數據流的優先順序。優先順序越高,伺服器就會越早回應;引入了頭信息壓縮機制和信息表;允許伺服器未經請求,主動向客戶端發送資源,這叫做伺服器推送;

12.Java有沒有多繼承,介面和抽象類區別。jvm 理解

介面可以多繼承,類不可以。

(1)抽象類是由abstract關鍵字修飾,允許包含未實現的方法。

介面是方法聲明和常量值定義的集合,不允許包含變數。

(2)介面是絕對抽象的,不可以被實例化。抽象類不能被實例化。

(3)定義介面時可以使用繼承,而且可以使用多繼承。抽象類只能單繼承。類可以實現很多個介面,但是只能繼承一個抽象類;

(4)介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。Java介面中聲明的變數預設都是final的。抽象類可以包含非final的變數。

(5)Java介面中的成員函數預設是public的。抽象類的成員函數可以是private,protected或者是public。

類可以不實現抽象類和介面聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。

抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調用的。

public是在不同包中也可以訪問;protected是必須在同一個包中或者子類才能訪問;default是不允許子類訪問,可以在類內部或者同一個包中訪問;private是只能在類內部訪問。

13.JDK和JRE的區別是什麼?

Java運行時環境(JRE)是將要執行Java程式的Java虛擬機。它同時也包含了執行applet需要的瀏覽器插件。Java開發工具包(JDK) 是完整的Java軟體開發包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調試器),可以讓開發者開發、編譯、執行Java應用程 序。

JDK中包含JRE,JRE中包含JVM。

JDK中包含的JRE主要是為JDK自帶的開發工具提供運行環境,與JDK併列的那個JRE是為用戶編寫的JAVA代碼提供運行環境的。

classpath配置的是JDK的lib目錄,path配置的是JDK的bin目錄。

14.資料庫四個範式的區別。在設計資料庫的時候如何考量。

第一範式(1NF)屬性不可拆分 或 無重覆的列(保證列唯一)

第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。存在一個列被定義為唯一主鍵的表就是第二範式。(保證行唯一)

第三範式(3NF)要求一個資料庫表中不包含已在其它表中已包含的非主關鍵字信息。(外鍵關係)

第四範式(4NF)禁止主鍵列和非主鍵列一對多關係不受約束用複合列做主鍵的表。

15.64個馬有8個跑道,沒有計時工具,最少需要多少次跑,如何找到跑最快的1個和4個馬?

先分為8組,找出每組第一再跑一次,一共9次就可以找到第一名;

第九次的第一名的那組的二(1)、三(2),四(3),第二名(4)那組的第二名(5),第三名(6),第三名(7)的第二名(8)再跑一次就可以找到前4名。

16.正則表達式

\s表示所有空白字元;\S表示非空白字元;*表示匹配零次或多次;+表示匹配一次或多次;. 表示除換行符外的任意字元;?匹配零次或一次。

1.如何停止運行一個線程

interrupt

2.如何實現一個hashmap,需要考慮哪些問題

hashcode

3.equal和==的區別

值類型是存儲在記憶體中的堆棧(以後簡稱棧),而引用類型的變數在棧中僅僅是存儲引用類型變數的地址,而其本身則存儲在堆中。

==操作比較的是兩個變數的值是否相等,對於引用型變數表示的是兩個變數在堆中存儲的地址是否相同,即棧中的內容是否相同。

equals操作表示的兩個變數是否是對同一個對象的引用,即堆中的內容是否相同。

String s2 = new String("Monday").intern();會放入緩衝池。

4.如何判斷一個對象已經被回收

5.為什麼四次揮手比三次握手多一次

因為三次握手是要建立和確認客戶端和伺服器之間的通信線路;而四次揮手是為了關閉兩方之間的數據傳遞,因為是雙工的,所以被動方和主動方兩個流向都需要關閉和確認,所以是四次。

4. linux相關指令,把能記得的說一下,出了個小功能,用shell實現;

5. sql中replace和update的區別;

update是SQL中的數據更新命令,replace是VF中的數據更新命令;

update不需要打開表,repl命令需要先打開表;

update不加條件是更新表中所有記錄,repl不加條件是更新當前記錄,要加上all短語才是更新所有記錄。

9. 接觸過哪些軟體測試的方法。

黑盒,白盒測試;

性能測試,壓力測試,冒煙測試;

3. 如何攔截5分鐘前惡意登錄(用戶名密碼不正確)超多一定次數的ip

6.介紹一下信號量和互斥鎖

信號量又稱為信號燈,它是用來協調不同進程間的數據對象的,而最主要的應用是共用記憶體方式的進程間通信。本質上,信號量是一個計數器,它用來記錄對某個資源(如共用記憶體)的存取狀況。

互斥體禁止多個線程同時進入受保護的代碼“臨界區”(critical section)。因此,在任意時刻,只有一個線程被允許進入這樣的代碼保護區。

對於互斥鎖,如果資源已經被占用,資源申請者只能進入睡眠狀態。但是自旋鎖不會引起調用者睡眠,如果自旋鎖已經被別的執行單元保持,調用者就一直迴圈在那裡看是否該自旋鎖的保持者已經釋放了鎖,"自旋"一詞就是因此而得名。

7.問了問項目,讓畫一下其中一個項目的系統架構圖,和其中一個功能的流程圖。

——————————————————————————-——————————

( 百度Java面經)互聯網公司校招Java面試題總結及答案——百度

 

二面:

輸入字元流,找第一個重覆的字元串。

1、Linux下的一些指令,$$(進程id),$?(上一條命令退出時狀態),怎麼查看進程,按照記憶體大小,CPU占用排序等等。

(大寫M和大寫P)

2、項目中遇到的問題,自己咋解決的等等。

多資料庫,使用Mybatis的攔截器。

3、介紹一下hash,怎麼解決衝突。(鏈地址法)

4、進程間的通信,共用記憶體方式的優缺點。

環境變數/文件描述符:子進程接受父進程環境數據的拷貝以及所有文件描述符。

管道:用於相關和無關進程間的通信,而且形成兩個進程間的一個通信通道,通常使用文件讀寫程式訪問。

共用記憶體:使用客戶機/伺服器模型(C/S),伺服器對客戶的數據或動作請求作出反應。

動態數據交換:動態數據交換使用消息傳遞、共用記憶體、事務協議、客戶/伺服器範疇、同步規則以及會話協議來讓數據和控制信息在進程間流動。動態數據交換對話( dynamic data exchange session, DDE )的基本模型是客戶、伺服器。伺服器對來自客戶的數據或動作作出反應。客戶和伺服器可以以多種關係來通信。

共用記憶體針對消息緩衝的缺點改而利用記憶體緩衝區直接交換信息,無須複製,快捷、信息量大是其優點。但是共用記憶體的通信方式是通過將共用的記憶體緩衝區直接附加到進程的虛擬地址空間中來實現的.因此,這些進程之間的讀寫操作的同步問題操作系統無法實現。必須由各進程利用其他同步工具解決。另外,由於記憶體實體存在於電腦系統中.所以只能由處於同一個電腦系統中的諸進程共用,不方便網路通信。

共用記憶體塊提供了在任意數量的進程之間進行高效雙向通信的機制。每個使用者都可以讀取寫入數據,但是所有程式之間必須達成並遵守一定的協議,以防止諸如在 讀取信息之前覆寫記憶體空間等競爭狀態的出現。不幸的是,Linux無法嚴格保證提供對共用記憶體塊的獨占訪問,甚至是在您通過使用IPC_PRIVATE創 建新的共用記憶體塊的時候也不能保證訪問的獨占性。 同時,多個使用共用記憶體塊的進程之間必須協調使用同一個鍵值。

5.講下堆的作用。

6.堆的垃圾回收對象選擇原則。

所謂根集就量正在執行的Java程式可以訪問的引用變數的集合(包括局部變數、參數、類變數),程式可以使用引用變數訪問對象的屬性和調用對象的方法。垃 圾收集首選需要確定從根開始哪些是可達的和哪些是不可達的,從根集可達的對象都是活動對象,它們不能作為垃圾被回收,這也包括從根集間接可達的對象。而根 集通過任意路徑不可達的對象符合垃圾收集的條件,應該被回收。下麵介紹幾個常用的演算法。

7 進程間通信詳細敘述

8 tcp udp 區別 UDP應用場景

UDP一般用於即時通信(QQ聊天 對數據準確性和丟包要求比較低,但速度必須快),線上視頻(RTSP 速度一定要快,保證視頻連續,但是偶爾花了一個圖像幀,人們還是能接受的),網路語音電話(VoIP 語音數據包一般比較小,需要高速發送,偶爾斷音或串音也沒有問題)等等。

9 linux中文件名存儲在哪裡? 改變文件名之後 MD5會不會變

只有兩項數據存放在目錄項中:文件名和i節點編號。不會的,只有文件內容發生改變MD5才會變化。一般對文件求MD5值只取文件內容部分,像文件名、保存目錄、創建時間、修改時間、許可權等等的元信息都是不進行計算的。

7 linux命令相關 問用過哪些 然後展開

9 crontab 怎麼設置一個每小時、每3小時的定時任務

6. 求一個struct的大小

7.Linux命令相關,問有一個文件A.txt,裡面有許多行,找出其中帶關鍵字'B'的行,並統計重覆度。我問了下重覆度是指啥,他說,這樣吧,假設每一行都是由空格分隔開的若幹字元,若整個文件中,有2行的最後一個字元都是'10',你就輸出 “10” : 2。

8.假如在伺服器上執行一個進程時,你發現伺服器很卡頓,你會怎麼查找原因。

9.time_wait 是TCP四次握手哪個階段的狀態,為什麼要有這個狀態。這個狀態帶來的好處和壞處是什麼。在網路中,什麼與這個狀態相似

 

最後這裡小編整理了一套讓面試不慌張的面試資料

 

( 百度Java面經)互聯網公司校招Java面試題總結及答案——百度

 

( 百度Java面經)互聯網公司校招Java面試題總結及答案——百度

 

( 百度Java面經)互聯網公司校招Java面試題總結及答案——百度

 

領取步驟:
1、加微信獲取


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java Editor Click Window » Preferences Expand Java » Code Style Click Formatter Click the Edit button Click the Indentation tab Under General Settings ...
  • 如下圖所示,在調試配置文件中的uri時,出現了報錯。 查過資料後發現,需要在uri中加入時區配置,就可以正常使用了。 MYSQL_URI = jdbc:mysql://127.0.0.1:3306/mysql1?serverTimezone=UTC&useUnicode=true&character ...
  • 知識點:pandas + Oracle from sqlalchemy import create_engine import pandas as pd con = create_engine('oracle+cx_oracle://用戶名:密碼@IP:埠/庫名?charset=utf8') sq ...
  • 6.20(計算一個字元串中字母的個數)編寫一個方法,使用下麵的方法頭計算字元串中的字母個數: public static int countLetters(String s) 編寫一個測試程式,提示用戶輸入字元串,然後顯示字元串中的字母個數。 6.20(Count the letters in a ...
  • 說點什麼呢,java比你想的要難 寫了多年java,發現好多人並不知道一個class文件怎麼被解析執行的,所以我也發表下看法 1. 編寫java源文件 ​ 2. 把java源文件編譯成.class位元組碼文件,JVM不認識源文件 ​ 3. JVM處理class文件 搞java開發,不得不提的就是JVM ...
  • 設置表名為中文 1.設置Models.py文件 重啟服務,訪問admin後臺,就能看到中文名字了,如下圖: 設置App(應用)為中文 1. 修改要修改的應用目錄下的apps.py 2. 修改要修改的應用目錄下的__init__.py文件 重啟服務,訪問admin後臺,就能看到中文名字了,如下圖: 本 ...
  • 1.運算符的優先順序 運算符的優先順序在考試中會考,瞭解即可,多用就會熟能生巧 實際使用過程中建議用小括弧來分優先順序 關鍵就是:邏輯非>邏輯與>邏輯或 2.數據類型的轉換 數據類型的轉換分為自動類型轉換和強制類型轉換 1.自動類型轉換:容量小的數據類型可以自動轉換為容量大的數據類型 如圖所示:虛線表示轉 ...
  • 概念:所謂質數就是只能被1和它本身整除的數。那麼對於某一個數a,可以試著讓它除以a-1......2,如果有任意一次除法的餘數為零,這個數a就不是質數。 方法一: 完全根據質數的定義,我稱這種方法叫做“笑而不語最直接法”。該方法完全可以輸出正確結果,但這肯定不是面試官想要的 public stati ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...