1. 程式人生 > >網際網路公司校招Java面試題總結及答案——樂視、滴滴、華為

網際網路公司校招Java面試題總結及答案——樂視、滴滴、華為

1.新生老年代gc演算法的實現 新生代:複製; 老年代:標記整理 2.maven衝突如何解決; build-helper-maven-plugin 4.DNS均衡 智慧DNS可以通過多種負載均衡策略來將客戶端需要訪問的域名解析到不同的資料中心不同的線路上,比如通過IP地理資訊資料庫解析到最近的線路,或者權衡不同線路的繁忙度解析到空閒的線路等等。 將客戶端的訪問引導到不同的機器上去,使得不同的客戶端訪問不同的伺服器,從而達到負載均衡的目的。 1.全域性的運營商+區域層面的負載均衡,主要是就近排程原則; 2.機房或叢集內部的負載均衡,主要實現流量均攤、合理利用資源等; 5.Linux(檢視指定程序) (1) 先用pgrep [str] 命令進行模糊匹配,找到匹配該特徵串的程序ID; (2) 其次根據程序ID顯示指定的程序資訊,ps --pid [pid]; (3) 因為查找出來的程序ID需要被作為引數傳遞給ps命令,故使用xargs命令,通過管道符號連線; (4) 最後顯示程序詳細資訊,需要加上-u引數。 pgrep Java | xargs ps -u --pid 6.IP地址分為幾類,每類都代表什麼,私網是哪些 A:1.0.0.0到127.255.255.255之間 B:128.0.0.0—191.255.255.255(區域網) C:192.0.0.0至223.255.255.255(校園網) D:224.0.0.0到239.255.255.255,也被稱作多播地址或組播地址 私網地址: A類:10.0.0.1--10.255.255.254 B類:172.16.0.0.1--172.31.255.254 C類:192.168.0.1--192.168.255.254 內網的計算機以NAT(網路地址轉換)協議,通過一個公共的閘道器訪問Internet。內網的計算機可向Internet上的其他計算機發送連線請求,但Internet上其他的計算機無法向內網的計算機發送連線請求。 7.Linux 檢視有幾個多大的記憶體條組成 #dmidecode | grep -A16 "Memory Device$" # free
-m (檢視當前記憶體使用情況) 1、檢視記憶體槽數、那個槽位插了記憶體,大小是多少 dmidecode|grep -P -A5 "Memory\s+Device"|grep Size|grep -v Range 2、檢視最大支援記憶體數 dmidecode|grep -P 'Maximum\s+Capacity' 3、檢視槽位上記憶體的速率,沒插就是unknown。 dmidecode|grep -A16 "Memory Device"|grep 'Speed' 8.多執行緒的實現方式,以及意義 start()方法是一個native方法,它將啟動一個新執行緒,並執行run()方法。
Java
多執行緒實現方式主要有三種:繼承Thread類、實現Runnable介面、使用ExecutorService、Callable、Future實現有返回結果的多執行緒。 1.Thread是Runnable介面的子類,實現Runnable介面的方式解決了Java單繼承的侷限    2.Runnable介面實現多執行緒比繼承Thread類更加能描述資料共享的概念 繼承Thread類 實現Runnable介面 繼承介面更好,因為java的類是單繼承的,如果繼承了Thread類就不能再繼承別的類了。 9.資料庫事務,什麼是事務,什麼情況下會用到事務,舉例說明 資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列
操作
,要麼完全地執行,要麼完全地不執行。 當需要保證一系列的操作都執行的時候會用到事務。比如在圖書館借書。 -----------------------------------------------滴滴------------------------------------------------ 2.兩個長度為n的排好序陣列,計算中位數(總是讓我證明我說的二分法為啥對,這就尷尬了,怎麼證明)。一個排好序的 1,2,....n的陣列,其中一個數變為-1,如何找到這個數,至少用三中方法。 求和公式可以求,位陣列記錄哪個數不存在可以求,排序也可以求 3.問了鎖機制,問了瀏覽器如何實現的免登陸之類的功能,進而問了cookie和session相關的知識。 (1) 很多人說利用cookie儲存加密後的密碼和使用者ID,當再次訪問網站時伺服器提取cookie的使用者ID和密碼,如果通過驗證,則不需要重新輸入賬號和密碼。 (2)1、在使用者登入成功時,建立session物件,儲存使用者資訊 2、將此session的sessionid儲存到cookie中 3、同時將sessionid於session對應關係儲存到應用域中,以便後面可以根據sessionid來獲取到session 4、在使用者關閉瀏覽器,重新開啟瀏覽器訪問網站時,讀取使用者的cookie,得到sessionid 5、根據sessionid獲取到第3步儲存到應用域中的session物件 6、從session中讀取使用者資訊 ------------------------------------------華為------------------------------------------------------ 1.拓撲排序思想 拓撲排序是對有向無環圖的頂點的一種排序,它使得如果存在一條從頂點A到頂點B的路徑,那麼在排序中B出現在A的後面。 (1)從有向圖中選取一個沒有前驅的頂點,並輸出之; (2)從有向圖中刪去此頂點以及所有以它為尾的弧; 重複上述兩步,直至圖空,或者圖不空但找不到無前驅的頂點為止。沒有前驅 -- 入度為零,刪除頂點及以它為尾的弧-- 弧頭頂點的入度減1。
2.作業系統IO的幾種型別和原理 1)阻塞IO 2)非阻塞IO:輪詢 3)IO複用(select和poll) 4)訊號驅動IO(sigio):當我們所監控的套介面有IO操作準備就緒時,由核心通知觸發前面註冊的訊號處理程式執行 5)非同步IO(aio_):非同步IO直接是在第二個階段完成後核心直接通知可以程序後續操作了 3.nginx事件處理模型 非同步、事件迴圈; nginx事件驅動:通訊機制採用epoll模型,支援更大的併發連線。 通過非同步非阻塞的事件處理機制,Nginx實現由程序迴圈處理多個準備好的事件,從而實現高併發和輕量級。 Nginx特點: 1. 跨平臺:Nginx 可以在大多數 Unix like OS編譯執行,而且也有Windows的移植版本。 2. 配置異常簡單,非常容易上手。配置風格跟程式開發一樣,神一般的配置 3. 非阻塞、高併發連線:資料複製時,磁碟I/O的第一階段是非阻塞的。官方測試能夠支撐5萬併發連線,在實際生產環境中跑到2~3萬併發連線數.(這得益於Nginx使用了最新的epoll模型) 4. 事件驅動:通訊機制採用epoll模型,支援更大的併發連線。 5. nginx代理和後端web伺服器間無需長連線; 6. 接收使用者請求是非同步的,即先將使用者請求全部接收下來,再一次性發送後後端web伺服器,極大的減輕後端web伺服器的壓力 7. 傳送響應報文時,是邊接收來自後端web伺服器的資料,邊傳送給客戶端的 8. 網路依賴型低。NGINX對網路的依賴程度非常低,理論上講,只要能夠ping通就可以實施負載均衡,而且可以有效區分內網和外網流量 9. 支援伺服器檢測。NGINX能夠根據應用伺服器處理頁面返回的狀態碼、超時資訊等檢測伺服器是否出現故障,並及時返回錯誤的請求重新提交到其它節點上 4.程式開發的流程,什麼樣的程式碼是比較好的程式碼? 需求分析->概要設計->詳細設計(框架、模組)->編碼(環境搭建、編碼、除錯、聯調、整合)->測試->軟體交付->驗收->維護 功能實現良好、效率高、易讀、易擴充套件和維護、簡潔和明確;模組化,封裝好; 7.http與https的區別 (1)HTTPS是HTTP的安全版,是HTTP+SSL,HTTP協議以明文方式傳送內容,不提供任何方式的資料加密; (2)https協議需要到ca申請證書,一般免費證書很少,需要交費。http是免費的; (3)http和https使用的是完全不同的連線方式用的埠也不一樣,前者是80,後者是443; (4)http的連線很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,比http協議安全。 8.設計一個xml格式,將一個類序列化為xml public static <T> T parserXML(String xml) {           ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes());           XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(in));           decoder.close();           return (T) decoder.readObject();       }       public static <T> String formatXML(T entity) {           ByteArrayOutputStream out = new ByteArrayOutputStream();           XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(out));           encoder.writeObject(entity);           encoder.close();           return out.toString();       }   9.介紹非對稱加密 非對稱加密演算法需要兩個金鑰公開金鑰(publickey)和私有金鑰(privatekey)。公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密; 1、乙方生成一對金鑰(公鑰和私鑰)並將公鑰向其它方公開。 2、得到該公鑰的甲方使用該金鑰對機密資訊進行加密後再發送給乙方。 3、乙方再用自己儲存的另一把專用金鑰(私鑰)對加密後的資訊進行解密。乙方只能用其專用金鑰(私鑰)解密由對應的公鑰加密後的資訊。 在非對稱加密中使用的主要演算法有:RSAElgamal、揹包演算法、Rabin、D-H、ECC(橢圓曲線加密演算法)等。 10.介紹三級快取原理 記憶體 > 硬碟 > 網路
11.怎麼保持長連線 一個連線是通過伺服器地址和埠還有客戶端地址和埠來識別唯一連線的。 Connection:keep-alive (1)在應用層使用heartbeat來主動檢測,在應用層制定協議,發心跳包,客戶端和服務端制定一個通訊協議,每隔一定時間(一般15秒左右),由一方發起,向對方傳送協議包;對方收到這個包後,按指定好的通訊協議回一個。若沒收到回覆,則判斷網路出現問題,伺服器可及時的斷開連線,客戶端也可以及時重連。 (2)通過TCP協議層傳送KeepAlive包。這個方法只需設定好你使用的TCP的KeepAlive項就好,其他的作業系統會幫你完成。作業系統會按時傳送KeepAlive包,一發現網路異常,馬上斷開。在應用層不需自己定協議,通訊的兩端,只要有一端設好這個值。還有一個好處就是節省網路資源。
  1. ServerSocket serverSocket=new ServerSocket(1111);  
  2. Socket socket=serverSocket.accept();  
  3. while(true){//保持長連線  
  4.     try {  
  5.             Thread.sleep(100);//等待時間  
  6.     } catch (InterruptedException e1) {  
  7.             e1.printStackTrace();  
  8.     }  
  9.     if (socket !=null){  
  10.         try {  
  11.                 String ip = socket.getInetAddress().toString().replace("/", "");  
  12.                 System.out.println("====socket.getInetAddress()====="+ip);  
  13.                 socket.setKeepAlive(true);  
  14.                 InputStream is = socket.getInputStream();  
  15.                 OutputStream os = socket.getOutputStream();  
  16.                 System.out.println("伺服器端接受請求");  
  17.             String tempdata = StreamEazyUse.getContent(is);  
  18.             system.out.printl(“接收到的資料為:”+tempdata);  
  19.             if(tempdata.contains(“stop”)){  
  20.                 is.close();  
  21.                 os.close();  
  22.             }  
  23.             os.flush();  
  24.         }catch(Exception e){  
  25.             system.out.println(“出現了錯誤”);  
  26.         }  
  27.     }