面試:面經筆記 2017.6

按牛客網討論區筆經面經的發表時間排序。html

 


 

今天斬獲今日頭條 實習offer 特來分享

 
1. mysql引擎索引
mysql兩種存儲引擎:InnoDB和MyISAM
區別:(1.事務;2.鎖;3.效率;4.查詢/插入更新)
 
2. map底層實現
3.最小堆;
 
4.http協議
  HTTP是超文本傳輸協議 Hyper Text Transfer Protocol, 它主要負責web server和web瀏覽器之間的通信,HTTP協議把web client (瀏覽器)的請求發送到一個web server, 並把網頁內容從web server返回到瀏覽器。經常使用請求包括get和post兩種。
  HTTPS 是安全超文本傳輸協議 Secure HTTP, 主要用於在web server和web 瀏覽器之間進行隱私數據的傳輸
 
5.java多線程
6.緩存數據庫 好比redis。
todo
 
 

百度(offered)
百度一面
1 手寫ArrayList
 
2 手寫 進制轉換算法,求出一個數的二進制數1的個數

A、十進制轉換其餘java

  十進制轉成二進制 
  Integer.toBinaryString(int i) mysql

  十進制轉成八進制 
  Integer.toOctalString(int i) linux

  十進制轉成十六進制: 
  Integer.toHexString(int i)c++

B、其餘轉換十進制git

  二進制轉十進制 
  Integer.valueOf("1010",2).toString()github

  八進制轉成十進制 
  Integer.valueOf("125",8).toString() web

  十六進制轉成十進制 
  Integer.valueOf("ABCDEF",16).toString() 面試

 求二進制1的個數?redis

num&(num-1)的結果即爲把最右邊的1置零;

 
3 equals和==
(1.基本類型;2.基本類型封裝;3.String;4.普通對象;)
 
4 多線程方式、 threadlocal,各類 synchronized和lock
synchronized和lock異同?
(1.屬性;2.trylock;3.釋放;4.線程交互)
  1)lock是接口,syn是Java中的關鍵字;
  2)lock的tryLock方法能夠選擇性獲取鎖,可以規避死鎖;而syn會一直獲取下去;
  3)syn發生異常或者同步塊結束的時候,會自動釋放鎖;而Lock必須手動釋放unlock;
  4)syn線程交互,用到的是同步對象的wait/notify/notifyAll方法;lock獲得一個Condition對象,調用Condition對象的await/signal/signalAll;
 
5 設計模式、 spring類加載方式、實例保存在哪、 aop ioc反射機制
定義bean的方式?
1)XML配置方式;2)註解方式;
bean存儲?
利用java反射機制,生成bean實例,實例化的單例bean放入HashMap存儲,id做爲key;
aop?ioc?
反射機制?
反射機制實際上就是動態的加載一些類,這些類在編譯時不須要加載,但運行時再調用。
反射是在運行時獲取類信息,經過動態的調用來改變程序行爲。
 
 
6 類加載器雙親委派模型,熱部署
類加載器ClassLoader?
(三類、加載的類庫、實現)
系統提供的類加載器包括三類:啓動類加載器Bootstrap、擴展類加載器Extension、應用程序類加載器Application。
啓動類加載器Bootstrap,加載JDK/jre/lib下的類庫,也就是Java的核心庫;啓動類加載器是用原生代碼而不是java實現的,並不繼承自java.lang.ClassLoader,除此以外基本上全部的類加載器都是java.lang.ClassLoader類的一個實例。啓動類加載器是沒法被Java程序直接引用的。
擴展類加載器Extension,加載/lib/ext目錄的擴展庫;能夠被開發者直接使用。
應用程序類加載器Application,加載Java應用類路徑ClassPath所指定的類。
 
雙親委派模型?
(流程、優勢、舉例)
工做流程是:若是若是一個類加載器收到了類加載的請求,不會首先本身去加載,而是把請求委託給父加載器去完成,依次向上。只有當父加載器在搜索範圍中沒有找到所需的類時,即沒法完成加載,子加載器才嘗試加載該類。
雙親委派模型優勢是Java類隨着類加載器具有了待友優先級的層次關係,對於保證Java程序穩定運做很重要。例如Object類在lib的rt.jar中。
 
熱部署?
熱部署,簡單點來講,就是咱們將打包好的應用直接替換掉原有的應用。
每個應用程序的類都會被ClassLoader加載,因此,要實現一個支持熱部署的應用,咱們能夠對每個用戶自定義的應用程序使用一個單獨的ClassLoader進行加載。而後,當某個用戶自定義的應用程序發生變化的時候,咱們首先銷燬原來的應用,而後使用一個新的ClassLoader來加載改變以後的應用。而全部其餘的應用程序不會受到一點干擾。
參考: 熱部署
 
 
7 jvm內存模型,內存結構、 堆的分代算法堆的分區gc算法gc過程
JVM內存模型?
JVM內存模型包括5個部分,分爲線程共享的和線程隔離的部分。
線程共享的數據區是堆和方法區;
線程隔離的數據區是虛擬機棧、本地方法棧和程序計數器;
  1) 程序計數器:是一個比較小的內存區域,,用於指示當前線程所執行的字節碼執行到了第幾行,能夠理解爲是當前線程的行號指示器。每一個程序計數器只用來記錄一個線程的行號,因此是線程私有的。(行號指示、線程私有)
  2) 虛擬機棧:一個線程的每一個方法在執行的同時,都會建立一個 棧幀,棧幀中存儲的有 局部變量表、操做數棧、動態連接、返回地址等,當方法被調用時,棧幀在JVM棧中入棧,當方法執行完成時,棧幀出棧。每一個線程對應着一個虛擬機棧,所以虛擬機棧也是線程私有的。(棧幀)
  3) 本地方法棧:本地方法棧在做用,運行機制,異常類型等方面都與虛擬機棧相同,惟一的區別是: 虛擬機棧是執行Java方法的,而本地方法棧是用來執行native方法的
  4) 方法區:方法區是各個線程共享的區域,用於 存儲已經被虛擬機加載的類信息(即加載類時須要加載的信息,包括版本、field、方法、接口等信息)、final常量、靜態變量、編譯器即時編譯的代碼等。
  5) 堆區:堆區的存在是爲了 存儲對象實例,原則上講,全部的對象都在堆區上分配內存。堆區也是Java GC機制所管理的主要內存區域。
 
堆的分代算法?分區?GC算法?GC過程?
內存分配,主要指的是在堆上的分配。Java內存分配和回收的機制歸納的說,就是: 分代分配,分代回收。對象將 根據存活的時間被分爲:年輕代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法區)。
算法的選擇:在新生代中, 每次垃圾收集時都發現有大批對象死去,只有少許存活,那就選用複製算法,只須要付出少許存活對象的複製成本就能夠完成收集。而老年代中由於對象存活率高、沒有額外空間對它進行分配擔保,就必須使用「標記-清理」或「標記-整理」算法來進行回收。方法區永久代,回收方法同老年代。
年輕代:分區 Eden S0 S1;Minor GC;複製算法:將Eden區和一個Survivor中仍然存活的對象拷貝到另外一個Survivor中。
年老代:Full GC 標記整理算法:標記出仍然存活的對象(存在引用的),將全部存活的對象向一端移動,以保證內存的連續。
 
 
8 tcp ip 七層模型 rest接口規範 get和post區別,長度,安全。
七層模型?
自底向上是:物理層、鏈路層、網絡層、傳輸層、會話層、表示層、應用層;
rest接口規範?
get和post區別?
(1.http規範:冪等、安全;2.應用:參數/保密性、長度 3.總結)
根據HTTP規範:
 1)get用於信息獲取,是安全的和冪等的。安全是針對服務端而言,get不會引發數據的變化,例如對數據庫的增刪改。產生的結果是冪等的,指同一個url和一樣的get參數,呈現給用戶的結果相同。
 2)post可能引發數據的變化。好比填寫表單更新數據。
從應用角度來看:
 1)get請求參數放在URL後面,格式是URL?key1=value&key2=value...即?在URL後面,多個參數用&隔開,能夠在連接看到參數。長度方面:理論上HTTP對get參數沒有長度限制,可是通常打開連接都是經過瀏覽器,所以會受到瀏覽器或者操做系統限制長度,比較常見的限制長度是1024字節。
 2)post請求數據會放在HTTP包中,保密性相對安全。HTTP標準也沒有對POST數據進行限制,可是會受到服務端的長度限制,如處理的程序(PHP),服務器引擎(Apache)。
總結:
 1)get適合於查詢區分某些特定數據的頁面,如商品展現。
 2)因爲post的HTTP標準,所以更適合作數據的改變,並且因爲應用角度上的數據傳遞方式,更適合用於登陸註冊功能頁,由於數據不會顯示在url中,相對安全一些。
 
 
 
9 tcp ip的 ARP協議,兩個同一網絡的主機如何得到對方的mac地址。
ARP協議?
(功能、工做原理)
ARP(Address Resolution Protocol)是地址解析協議;
OSI模型把網絡工做分爲七層,IP地址在OSI模型的第三層,MAC地址在第二層,彼此不直接打交道。在經過以太網發送IP數據包時,須要先封裝第三層(32位IP地址)、第二層(48位MAC地址)的報頭,但因爲發送時只知道目標IP地址,不知道其MAC地址,又不能跨第2、三層,因此須要使用地址解析協議。使用地址解析協議,可根據網絡層IP數據包包頭中的IP地址信息解析出目標硬件地址(MAC地址)信息,以保證通訊的順利進行。(歸納:在不一樣層,不能傳輸)
工做原理:
(1.查;2.有,沒有-ARP請求;3.不一致,一致-ARP響應;4.收到,沒收到)
  0)ARP緩衝區,ARP列表-IP地址和MAC地址的對應關係;
  1)檢查ARP列表;
  2)列表沒有;發起ARP請求的廣播包,包括源主機IP、MAC以及目的主機IP地址;
  3)網絡中全部主機收到ARP請求,檢查IP和本身IP是否一致,不一樣則忽略;
  4)相同:1.首先將發送端MAC和IP添加到本身的ARP,若是以及存在則覆蓋;2.給源主機發送一個ARP響應數據包,告訴對方本身是它須要查找的MAC地址;
  5)源主機收到ARP響應包,將目的主機IP和MAC添加到ARP列表;並開始數據傳輸;
  6)若是源主機一致沒有收到ARP響應數據包,表示ARP查詢失敗。
 
10 負載均衡、高併發、高可用的架構
 
11 mysql的引擎區別
MyISAM和InnoDB:(1.事務;2.鎖;3.效率;4.查詢/插入更新)
 
12 redis緩存,redis的集羣部署,熱備份,主從備份,主從數據庫,hash映射找到知道指定節點。
todo
 
13 瞭解雲計算麼,瞭解雲容器docker麼,容器和虛擬機的區別。

 
百度二面
1自我介紹 項目中負責哪些 作了哪些
2項目中的數據庫備份,主從數據庫、集羣
 
 
3 數據庫索引原理, b+樹原理, trie樹引伸, 二叉查找樹的原理
索引?
索引:數據庫索引,是數據庫管理系統中一個排序的數據結構,以協助快速查詢、更新數據庫表中數據。索引的實現一般使用B樹及其變種B+樹。在數據以外,數據庫系統還維護着知足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就能夠在這些數據結構上實現高級查找算法。這種數據結構,就是索引。
二叉查找樹原理?
對於樹的每一個節點,大於左子節點的值,小於右子節點的值;
B樹?
(把B樹和B+樹的兩張圖多熟悉一點)
B樹是多路搜索樹;B樹的結構保證了它是比較平衡的,每一個結點的子樹都不能過少,且從根到葉的路徑長度都相同,這對於提升查找效率很是有利。
  1)每一個節點存放M/2-1(上取整)到M-1個關鍵字;
  2)根節點的兒子樹是[2,M];
  3)除根節點外非葉子節點的兒子數是[M/2,M];
  4)非葉子節點的關鍵字個數 = 指向兒子的指針個數 - 1;

B樹的搜索:從根結點開始,對結點內的關鍵字(有序)序列進行二分查找,若是命中則結束,不然進入查詢關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指針爲空,或已是葉子結點。

B樹的特性:關鍵字分佈在整棵樹中;搜索性能等價於在關鍵字全集內作一次二分查找;

B+樹?

B+樹是B樹的變體,也是多路搜索樹;不一樣的是:

  1)非葉子節點的子樹指針與關鍵字個數相同;

  2)非葉子結點的子樹指針P[i],指向關鍵字值屬於[K[i], K[i+1])的子樹(B-樹是開區間)

  3)爲全部葉子結點增長一個鏈指針;

      4)全部關鍵字都在葉子結點出現;

B+的搜索與B樹也基本相同,區別是B+樹只有達到葉子結點才命中(B-樹能夠在非葉子結點命中),其性能也等價於在關鍵字全集作一次二分查找;

B+樹的特性:

       1.全部關鍵字都出如今葉子結點的鏈表中(稠密索引),且鏈表中的關鍵字剛好是有序的;

       2.只會在葉子結點命中;

       3.非葉子結點至關因而葉子結點的索引(稀疏索引),葉子結點至關因而存儲(關鍵字)數據的數據層;

trie樹?

即字典樹/單詞查找樹;是一種樹形結構,是一種哈希樹的變種。典型應用是用於統計和排序大量的字符串(但不只限於字符串),因此常常被搜索引擎系統用於文本詞頻統計。它的優勢是:最大限度地減小無謂的字符串比較,查詢效率比哈希表高。

3個基本性質:

  1. 根節點不包含字符,除根節點外每個節點都只包含一個字符。
  2. 從根節點到某一節點,路徑上通過的字符鏈接起來,爲該節點對應的字符串。
  3. 每一個節點的全部子節點包含的字符都不相同。

參考:Trie樹

 
 
4 海量數據中查找一個單詞,分佈式計算map reduce ,或者用hsah映射篩選部分結果
 
5java的 抽象類和接口區別、java的 hashmap,java的 內存模型,分區,分代 垃圾回收算法。實例、常量放在哪裏。
抽象類和接口區別?
(1.變量;2.方法(抽象、public);3.一/多;)
  1)變量:接口的變量默認是final的,而抽象類能夠包含非final變量;
  2)方法:接口中的方法默認是public,抽象類方法能夠是private/protected/public;接口中只能提供抽象方法,而抽象類中既能夠提供抽象方法,也能夠提供實現方法;
  3)一個類能夠實現不少接口,但只能繼承一個抽象類;
hashmap?
(1.結構;2.put/get;3.參數-容量、負載係數、閾值)
(講到容量是2的n次方的時候能夠延伸講一下緣由;)
 
 
6 int 4個字節,double 8個字節。
基本數據類型

整型4種:byte/short/int/long  字節數:1/2/4/8

字符型1種:char  2

浮點型2種:float/double  4/8

布爾型1種:boolean 1/8

 
 
7 多線程中的 wait和sleep區別, notify的做用
wait和sleep區別?
(1.屬性;2.鎖;3.範圍;)
  1)屬性:wait()是Object的方法,而sleep()是線程類Thread的方法;
  2)鎖:wait會放棄對象鎖,進入等待隊列,只有調用了notify(),纔會結束wait狀態,參與競爭同步資源鎖;而sleep()只讓出了cpu,而不會釋放同步資源鎖,sleep指定時間後CPU再回到該線程繼續往下執行;
  3)範圍:sleep能夠在任何地方使用,wait只能在同步方法或同步塊中使用;
 
 
8 設計模式瞭解哪些,寫一個 觀察者模式。實現兩個接口,一個是主題一個是觀察者,並寫出對應方法。
觀察者模式?
觀察者模式包括:抽象主題、具體主題;抽象觀察者、具體觀察者;
抽象主題,提供attach、detach、notify三個方法;
抽象觀察者,提供update方法;
 
 
9寫一個 生產者消費者隊列的方法,分別寫兩個類表明生產者和消費者,而且用隊列模擬其生產消費。用while循環和wait notify能夠實現,但我忘記在隊列上加synchronize關鍵字,因而讓我再寫一題。寫的是:輸入一個字符串,輸入第一個只出現一次的字符,寫出來了。
 
 
10:tcp ip的 四次揮手 子網掩碼的做用, 子網掩碼(subnet mask)又叫 網絡掩碼、地址掩碼、子網絡遮罩,它是一種用來指明一個IP地址的哪些位標識的是主機所在的子網,以及哪些位標識的是主機的位掩碼。子網掩碼不能單獨存在,它必須結合IP地址一塊兒使用。子網掩碼只有一個做用,就是將某個IP地址劃分紅 網絡地址 和 主機地址 兩部分。
四次揮手?
(流程;TIME_WAIT狀態強調一下;四次揮手緣由;)
子網掩碼?
todo
 
 
11 :瞭解linux麼,說一下linux的內核鎖?沒接觸過。
12 有沒有用過sed 使用shell腳本寫一個將文本中的字符替換掉的腳本,大概說了一下用grep || 替換。沒再問linux的

百度三面
1自我介紹
2負責模塊,哪些模塊,項目一的架構,我說過久了忘了,說最近的項目。
3 數據庫鏈接池用的是什麼,配置文件呢,數據庫驅動怎麼下載的,持久層框架呢。
數據庫鏈接池?
c3p0, druid;
配置?
初始化鏈接數量 initialSize
最大鏈接數 maxActive
最大空閒鏈接數 maxIdle
最小空閒連接數 minIdle
空閒時間 maxWait
持久層框架?
MyBatis (和hibernate區別?)
 
 
4爲何要用 數據庫鏈接池,有什麼好處。
做用?優缺點?
1)資源重用。避免了頻繁建立、釋放鏈接引發的大量性能開銷。
2)更快的系統響應速度 。數據庫鏈接池在初始化過程當中,每每已經建立了若干數據庫鏈接置於池中備用。此時鏈接的初始化工做均已完成。對於業務請求處理而言,直接利用現有可用鏈接,避免了數據庫鏈接初始化和釋放過程的時間開銷,從而縮減了系統總體響應時間。 
 
 
5java的 內存模型,變量和實例存在哪。java棧的做用,java的堆存什麼,方法區存什麼。java的 分代回收
 
6項目如何部署到雲主機上,有什麼速度提高,爲何有提高,答主要是設備性能和帶寬。
7tomcat的配置,堆得初始大小是多少,答不知道。
8在網易實習的相關事項。
9問遇到過什麼難題。
10問臺灣交流經歷,學習內容。
11問在遇到問題時候的辦法。
12抗壓能力
13優缺點
14接受加班。
15遇到工做問題,同事不配合怎麼辦。
16快速上手工做的辦法。
先對大的結構有所瞭解,再深刻各個部分。
 
 
17平時學習的方法,舉幾點。
學習新知識先過一遍基礎教程,再在項目中學習,遇到重要的再深刻學習。
 
 
18爲何要換工做,我的,女朋友。詳情。
19何時能來。
20職業規劃
三次面試每一次都是1個小時,只能說面試質量好高。
 
而後經過了。

阿里一面:
1 項目
2 項目中的問題
3 java三大特性
(1.特性;2.優勢)
封裝、繼承、多態;
  封裝:封裝隱藏了類的內部實現機制,能夠在不影響使用的狀況下改變類的內部結構,同時也保護了數據。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。優勢:1.隱藏對象的屬性來保護對象內部狀態;2.禁止對象的不良交互提升模塊化;
  繼承:給對象提供了從基類獲取字段和方法的能力。優勢:提升代碼的重用性;
  多態:指容許不一樣類的對象對同一消息作出相應。所謂多態就是指程序中定義的引用變量所指向的具體類型和經過該引用變量發出的方法調用在編程時並不肯定,而是在程序運行期間才肯定,即一個引用變量倒底會指向哪一個類的實例對象,該引用變量發出的方法調用究竟是哪一個類中實現的方法,必須在由程序運行期間才能決定。由於在程序運行時才肯定具體的類,這樣,不用修改源程序代碼,就可讓引用變量綁定到各類不一樣的類實現上,從而致使該引用調用的具體方法隨之改變,即不修改程序代碼就能夠改變程序運行時所綁定的具體代碼,讓程序能夠選擇多個運行狀態,這就是多態性。
  實現多態的三個條件:
  1)繼承:在多態中必須存在有繼承關係的子類和父類。
  2)重寫:子類對父類中某些方法進行從新定義,在調用這些方法時就會調用子類的方法。
  3)向上轉型:在多態中須要將子類的引用賦給父類對象,只有這樣該引用纔可以具有技能調用父類的方法和子類的方法。
  多態的特色:父類對象引用子類;1.能夠調用父類方法;2.子類重寫父類則調用子類方法;3.只存在子類的方法不可調用,子類重載父類的方法不可調用(重載的方法父類中不存在!);
  多態的優勢:可擴充性,能夠方便的增長新的子類不影響已存在類的功能特性。
參考: ImportNew多態多態
 
 
4 jvm虛擬機 結構、算法、 垃圾回收、分代
 
5 集合類 鏈表數組 map幾種 set等
集合類?
集合類的最頂層接口是Collection和Map接口,Collection表明一組對象,Map是保存鍵值對;
Collection接口包括List、Set、Queue三個接口;
List接口實現類: ArrayListLinkedList、Vector; Stack繼承Vector類;
Set接口實現類:SortedSet(i)、 HashSet、EnumSet; TreeSet實現SortedSet,LinkedHashSet繼承HashSet;
Queue接口實現類:Deque(i)、PriorityQueue;ArrayDeque和LinkedList實現Deque
Map接口包括 HashMapTreeMap
Set和List?
Set不容許重複元素、容許一個null值,沒有索引;
List容許重複元素、容許多個null值、有索引、按插入順序顯示;
HashSet?
內部實現了hashmap;
 
 
6 二分查找代碼
(經典二分、第一個、最後一個、旋轉排序最小值、旋轉排序tar、)
 
7 mysql相關
(事務、引擎、索引、樹)
 
8 spring
(IoC、AOP、動態代理、)
 
9 先後端數據交互
10 網絡、操做系統
11 用過哪些技術


阿里二面:
1 項目
2 spring springmvc mybatis
3 GitHub上的代碼是什麼 代碼包括 劍指offer 項目一 項目二 遊戲項目 校招筆試題 Android項目
4 大三機器人項目
5 實習經歷
6 github上某個項目的開發過程
7 學院排名
20分鐘直接過了,十分開心,基本沒問什麼技術問題。

阿里hr面
1自我介紹
2項目經歷
3實習經歷
4實習經歷 具體
5實習爲何找這裏
6實習方向,開發方向轉變
7評價本身
8缺點
9大學時期獲獎
10爲何選擇支付寶部門,其餘部門呢
11有什麼問題
問了好多問題,基本是一個問題接着上一個。hr面也順利結束
可是做死的事發生了,背景調查的時候時間沒談妥,我原本覺得後續會再商討,結果20天沒有一個電話再打進來,因爲是總機號碼我也打不回去。直到今天流程被回絕,累覺不愛。不得不吐槽一下這坑爹的安排。來年再來,今年實習進不了來年校招再見吧。

 
騰訊校招1面
學校經歷
學習方式
項目
找實習的方式
什麼是後端開發
女友
意向城市
獨生子女

http的數據包格式?
 
tcp包含ip麼
TCP是傳輸控制協議,IP是因特網協議;
 
 
tcp的數據包格式?
(就是tcp報頭?)
五層:1.源端口16+目的端口16; 2.序列號32; 3.確認號32;4.頭部4+保留位6+標誌位6+窗口大小16位;5.校驗和16+緊急指針16;
 
 
mysql 數據庫鏈接池的驅動參數
DBCP:
driverClassName:鏈接數據庫所用的 JDBC Driver Class, 
password: 登錄數據庫所用的密碼 
url: 鏈接數據庫的 URL 
username: 登錄數據庫所用的賬號 
 
初始化鏈接數量 initialSize
最大鏈接數 maxActive 能夠從對象池中取出的對象最大個數,爲0則表示沒有限制,默認爲8 
最大空閒鏈接數 maxIdle 最大等待鏈接中的數量,設 0 爲沒有限制 (對象池中對象最大個數)  
最小空閒連接數 minIdle 對象池中對象最小個數 
空閒時間(最大等待秒數) maxWait
 
數據庫鏈接池如何防止失效?
(設置參數,操做對象/空閒的時候進行驗證)
testOnBorrow:取得對象時是否進行驗證,檢查對象是否有效,默認爲false  
testOnReturn:返回對象時是否進行驗證,檢查對象是否有效,默認爲false 
testWhileIdle:空閒時是否進行驗證,檢查對象是否有效,默認爲false 
testOnReturn,testOnBorrow這兩個參數爲true,表示會在每次請求以前和以後進行鏈接池測試,若是鏈接失效,就會將這條鏈接對象銷燬,建立一個新的鏈接對象。
testWhileIdle參數。這個參數爲true時候,表示空閒時是進行驗證,檢查對象是否有效。而後minEvictableIdleTimeMillis配合timeBetweenEvictionRunsMillis,每過timeBetweenEvictionRunsMillis秒對鏈接池進行一次檢測,將對象閒置時間超過minEvictableIdleTimeMillis秒的對象進行銷燬,建立新的對象來取代。這樣就能保證時刻都有正常的鏈接池對象存在。
 
部署項目時 tomcat 的參數?
 
熱加載的原理?
熱部署就是在服務器運行時從新部署項目,熱加載即在在運行時從新加載class,從而升級應用。

熱加載的實現原理主要依賴java的類加載機制,在實現方式能夠歸納爲在容器啓動的時候起一條後臺線程,定時的檢測類文件的時間戳變化,若是類的時間戳變掉了,則將類從新載入。

對比反射機制,反射是在運行時獲取類信息,經過動態的調用來改變程序行爲;
熱加載則是在運行時經過從新加載改變類信息,直接改變程序行爲。

熱部署原理相似,但它是直接從新加載整個應用,這種方式會釋放內存,比熱加載更加乾淨完全,但同時也更費時間。

 
類加載的原理?
(三個類加載器,雙親委派)
類加載器:
啓動類Bootstrap:加載lib下的核心庫;
擴展類Extension:加載lib/ext目錄的擴展庫;
應用程序類Application:加載Java應用類路徑ClassPath指定的類;
類加載採用雙親委派機制:
工做流程是:若是一個類加載器收到類加載的請求,不會本身加載,而是首先委託給父加載器完成,依次向上。當父加載器沒法完成加載,子加載器纔會嘗試加載。
優勢:使Java類隨着類加載器具有了帶有優先級的層次關係,對於保正Java程序穩定運做很重要。例如Object類在lib的rt.jar中,防止不可靠甚至惡意的代碼代替由父類裝載器裝在的可靠代碼。
 
mybatis的#和$號區別
(1.屬性; 2.性能;3.注入;4.表名;5.不變)
1.屬性:#{para}是預編譯,${para}是字符串替換;
2.性能:預編譯的sql能夠重複利用;因此#{}性能較優;
3.注入:${}是字符串替換,會存在sql注入問題;好比select * from table where name = ${smith or 1 = 1},這樣不管是否匹配,都能查到結果;
4.表名:表名必須使用${tablename},由於預編譯的佔位符進行變量替換後會帶上單引號。而表名不能加單引號;
5.不變:若是插入不改變的字符串,好比order by ${para} 那麼就能夠用${};
 
java的jdk源碼
hashmap的iterator讀取時是否會讀到另外一個線程put的數據?
在遍歷Map過程當中,不能用map.put(key,newVal),map.remove(key)來修改和刪除元素, 會引起併發修改異常ConcurrentModificationException。
 
 
linux的顯示文件夾大小 ls -al
linux的查看端口狀態 natstat加參數
linux的查看進程的啓動時間 linux ps
我的的優缺點
什麼問題想問的
校招一面答得很差,主要是網絡方面,答得很差。

騰訊散招一面
1自我介紹
2項目
3java的 堆和棧
 
4 內存泄漏發生在哪
堆中?由於對象實例保存在堆中。
在Java中,內存泄漏就是存在一些被分配的對象,這些對象有下面兩個特色,首先,這些對象是可達的,即在有向圖中,存在通路能夠與其相連;其次,這些對象是無用的,即程序之後不會再使用這些對象。若是對象知足這兩個條件,這些對象就能夠斷定爲Java中的內存泄漏,這些對象不會被GC所回收,然而它卻佔用內存。
Java內存泄漏的根本緣由是什麼呢?長生命週期的對象持有短生命週期對象的引用就極可能發生內存泄漏,儘管短生命週期對象已經再也不須要,可是由於長生命週期持有它的引用而致使不能被回收,這就是Java中內存泄漏的發生場景。

一、靜態集合類引發內存泄漏:

像HashMap、Vector等的使用最容易出現內存泄露,這些靜態變量的生命週期和應用程序一致,他們所引用的全部的對象Object也不能被釋放,由於他們也將一直被Vector等引用着。

例如

Static Vector v = new Vector(10);
for (int i = 1; i<100; i++)
{
Object o = new Object();
v.add(o);
o = null;
}

在這個例子中,循環申請Object 對象,並將所申請的對象放入一個Vector 中,若是僅僅釋放引用自己(o=null),那麼Vector 仍然引用該對象,因此這個對象對GC 來講是不可回收的。所以,若是對象加入到Vector 後,還必須從Vector 中刪除,最簡單的方法就是將Vector對象設置爲null。

2.各類提供了close()方法的對象

好比數據庫鏈接(dataSourse.getConnection()),網絡鏈接(socket)和io鏈接,以及使用其餘框架的時候,除非其顯式的調用了其close()方法(或相似方法)將其鏈接關閉,不然是不會自動被GC回收的。其實緣由依然是長生命週期對象持有短生命週期對象的引用。

 
5 設計模式 工廠模式 單例模式 舉例子
 
 
6 mysql 數據庫 實現層級樹形結構 引擎 索引 查詢優化 多方面
參考: 數據庫存儲層級結構 (修改後的前序遍歷算法,節點左右標數字)
引擎?
MyISAM和InnoDB(1.事務;2.鎖;3.效率;4.查詢/插入更新)
索引?
(概念、B+樹)
查詢優化?
(1.數據庫:索引、分區;2.I/O:緩衝區;3.SQL語句,條目)
1)數據庫方面:1.創建有效的索引;2.對數據庫分區(如按時間分區);
2)I/O方面:增長緩衝區;
3)SQL語句方面:1.優化SQL語句,減小比較次數;如避免select * from而使用具體的字段列表代替,避免在where中使用!=或<>操做符,不然將放棄索引而進行全表掃描; 2.限制返回條目limit;
 
 
7微信紅包的設計 開發 注意 用戶數據的統計 項目相關
8cdg事業羣 問題 
 
 

 

二輪 阿里面經 估計走遠

6.9
一輪(90min)
1 首先自我介紹
2 介紹作過的項目之類的
3 你最近再看什麼書 答 java編髮編程藝術
4 說說java 線程安全的實現方式  ThreadLocal 加鎖
(1.同步方法;2.同步塊;3.ReentrantLock;4.volatile;5.ThreadLocal)
 
 
5 談談 ThreadLocal 內置一個map key是當前線程 value是對應的值 實現線程變量私有化
做用:ThreadLocal的做用是爲每一個線程建立一個變量副本,每一個線程能夠修改本身所擁有的變量副本,而不會影響其餘線程的副本,從而實現線程安全。
實現方式:ThreadLocal內置一個map,key表示當前線程,value是對應的值,實現線程變量私有化。
比較:ThreadLocal並不能替代同步機制,二者面向的問題領域不一樣。同步機制是爲了同步多個線程對相同資源的併發訪問,是爲了多個線程之間進行通訊的有效方式;而ThreadLocal是隔離多個線程的數據共享,從根本上就不在多個線程之間共享資源(變量)。
 
 
 
6 談談java中的 鎖  synchronized reentrantlock
7對比二者區別 reentrantlock是jdk1.5推出來的 對比 synchronized 可以實現非阻塞是獲取鎖 以及中斷鎖 配合Condition能更靈活實現併發編程 可是須要本身收到加鎖以及釋放鎖 synchronized則是隱式釋放鎖
(1.屬性;2.tryLock;3.釋放;4.線程交互)ReentrantLock重點。
 
 
8 瞭解 集合類嗎  瞭解
9 談談hashmap 這個就不說 網上一大堆 主要問了hash衝突怎麼解決 hashmap使用什麼 hash函數儘可能避免hash衝突 實現均勻散列
    //Java 8中的散列值優化函數   
    static final int More ...hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); //key.hashCode()爲哈希算法,返回初始哈希值
    }

key.hashCode()32位,右位移16位,正好是32bit的一半,本身的高半區和底半區作異或,就是爲了混合原始哈希碼的高位和低位,以此來加大低位的隨機性。而且能夠儘可能將全部的key均勻分佈。

爲何對散列碼取餘(和len-1與)?

由於散列碼範圍廣,數值很大,而內存有限,數組大小有限。因此須要把全部的散列碼約束到有限的數組空間中。---這也是致使衝突的根源。

參考:知乎-hash函數

 

 
10 談談 jvm 這個不說網上一大推
11 gc收集算法   標記清除 複製 標記整理 而後說了一下 gc收集器 果真就問gc收集器了
12 談談 gc收集器  說了常見的7種收集器 而後面試官 一個勁的懟 G1收集器 還好我以前好好看了 哈哈哈
GC收集器 todo
 
13 瞭解 數據庫的存儲數據的數據結構嗎  不是很懂 說不會
14 講講你熟悉的nosql數據庫  講了一下redis 感受他不是很滿意
15 操做系統如何讀取文件 講講具體操做流程 這個就省略了
16 操做系統的內存管理 段頁式 而後擴展一下對應的算法
17 虛擬內存的做用
18 在c/s 體系中 c往s請求數據 如何高效實現斷點傳輸 相似迅雷下載能夠暫停  答 多線程+請求數據的時候附件一個請求數據的偏移量offset
19 三次握手四次揮手 答。。。。。
20 topK問題  海量日誌文件 找出前k個key  文件對16取模(爲何取16你們本身百度一下) 而後存入hashmap 而後利用小頂堆的性質
21 瞭解java的 classloader嗎  答瞭解 Bootstrap ClassLoader 最頂層的加載類,主要加載核心類庫,%JRE_HOME%\lib, Extention ClassLoader 擴展的類加載器,加載目錄%JRE_HOME%\lib\ext目錄下的jar包和class文件。 Appclass Loader也稱爲SystemAppClass 加載當前應用的classpath的全部類。而後說了一下雙親委派原則。
22 你有什麼想問個人嗎 問 您以爲我今天表現怎麼樣 答 很差說。
6.14
二輪 (42min) 阿里事業搜索部  二面很短
1 面試官自我介紹
2 說說項目中用到了lucene (ps 我的博客用的)
3 對比一下爲何用lucene 而不是直接數據庫查詢
4 你的博客用lucene性能有提高嗎?
5 瞭解solar嗎
6 知道lucene的中文分詞器嗎 爲何用中文分詞器
7 算法 有序重複數值 找出等於或者 超過一半的數字
 
二面面試官對陣lucene就是一陣狂懟我  招架不住 算法題作出來 可是lucene回答很差 估計走遠
以前也看了牛客的不少面經 我也把本身的面經寫出來但願能幫到你們。
 

怒斬阿里、百度、微軟、華爲offer

一、阿里雲
阿里雲是3月分內推的,面試有8輪,前三輪是阿里雲我進的這個組面試,第四輪是阿里雲大數據組的交叉面試,五六七輪加面的,分別是英文、技術、交叉面(螞蟻金服)。最後一個就是HR姐姐了。
技術點:
java基礎如 concurrent包jvm優化、內存管理、 gc分析、hadoop/spark/impala/lucene/RocksDB/redis這些框架的技術點
算法是大數據歸併排序、遺傳算法
項目是因人而已,我是報的數據庫組,問了不少數據庫的知識,B+樹怎麼索引,LSM的技術,分佈式一致性算法,分佈式事務這些
英文面比較奇葩,面試官打開了個人( https://github.com/jinhang) 聊了下項目內容,真心奇葩啊。
二、百度
百度也是內推,去的大數據部,兩面技術,一面是hadoop的shuffle和mapreduce的技術,spark的blockmanager。
三、騰訊
騰訊比較奇葩了,也是內推,簡歷評級是S,被微信支付撈了,官網是投的SNG,微信面試逼格過高,特別是c++,最後一面被虐了。都不想提了。
四、微軟蘇研
也是內推,開始是筆試,幾道在線編程題目,仍是很難的,後面後安排面試,面了兩輪,都是在線寫代碼,sqrt()是實現,歸併排序實現,mapreduce排序,動態規劃
五、華爲
連着參加了1六、17兩屆軟件挑戰賽,有名次,發了實習offer,可是比較坑啊,直接是雲計算崗位,不是本身投的崗位。華爲有性格測試,完了參加了產品推介會和雙選會,最後聽說後面有提早批。
六、滴滴
是睿思上聯繫的投的算法崗位,視頻面試虐坑,最後不了了知了。
七、中興
參加了中興的算法大賽,叫什麼迪傑斯特拉派,代碼真心沒毛病,最後58分,評價是論文裏缺乏算法證實,原來中興是paper大賽。同時去了模擬招聘,兩輪面試,一面寫了個鏈表排序,linux系統。。二面就是瞎扯。
最後,去了飛天八部數據庫技術組。話說真心和騰訊水逆,沒作筆試,最後通知線路面試,去了一面就給掛了,最後騰訊qq瀏覽器的給了兩個面試,應該是過了,水逆的公司就不去了。
相關文章
相關標籤/搜索