不囉嗦,如下題目所有爲本人在2016年8-10月間參加互聯網公司秋招面試題目,以本人蔘加面試的時間順序排列。但願能給即將參加17年9月秋招的同窗一些幫助。html
崗位: IT 應用軟件開發java
崗位: Java 研發工程師linux
一面android
1. 面向對象的特性。nginx
(1.特性及概念;2.優勢)c++
多態:指的是不一樣類對象對同一消息做出相應。即引用變量指向的具體類型在程序運行期間才肯定。web
多態三個條件:繼承重寫向上轉型。面試
多態優勢:可擴充性。算法
2. 聚合與組合的區別。sql
3.JVM 的結構, GC 算法;在 HashMap 對象中不斷調用 put 方法,在 JVM 中會發生什麼。
4. 簡介 JVM 的可達性分析過程。
經過一系列的GC Roots做爲起始點,從這些節點開始向下搜索,搜索所走過的路徑成爲引用鏈,當一個對象到GC Roots沒有任何引用鏈相連,即從GC Root到這個對象不可達,則證實此對象能夠被回收。
哪些對象能夠做爲GC Roots?
(1.JVM stack;2/3.方法區;4.本地方法棧)
5. 簡介 String 類和 Integer 類。
Integer是int的封裝類;Integer.MAX_VALUE、Integer.MIN_VALUE能夠取得int的最大值和最小值;
String不是基本數據類型;數字轉字符串:String.valueOf(i);字符串轉數字:Integer.parseInt(str);
6. 說明 Class 中方法的執行順序, static 塊與 constructor 。
static{} > {} > className{} > method(){}
靜態代碼塊>匿名方法塊>構造方法>普通方法。
參考:Class成員執行順序
7.ArrayList 是否線程安全。
不是。
8.HashMap 的底層結構。
9. 紅黑樹, TreeSet 的實現。
10.Collections 中的 sort 方法。手寫一個數組的逆序。
11.Collection 接口下有哪些接口; List 與 ArrayList 的關係。
12.Stack 的特色, Stack 與 ArrayList 的區別,與 Queue 的區別。
Stack繼承與Vector,特性是:先進後出;
Stack方法:push/pop/peek
Stack和Vertor是線程安全的,ArrayList和LinkedList是非線程安全的;
實現方式:LinkedList-雙向鏈表;ArrayList/Vector/Stack:數組;
Queue是由LinkedList實現,特性是:先進先出。
Queue方法:offer/poll/peek
13.Vector 的內部實現。
相比ArrayList是線程安全的;
14. 線程通訊、同步的方法。
沒搞懂題目是要問java仍是操做系統?
線程通訊?
不知。可能講講wait()和notify()?
線程同步的方式:互斥量、信號量、事件;
事件:事件機制,則容許一個線程在處理完一個任務後,主動喚醒另一個線程執行任務。
互斥量:採用互斥對象機制,只有擁有互斥對象的線程纔有訪問公共資源的權限。由於互斥對象只有一個,因此能夠保證公共資源不會被多個線程同時訪問。
信號量:容許同一時刻多個線程訪問同一資源,可是須要控制同一時刻訪問此資源的最大線程數量。
15.Lock 比起 Synchronized 的優點在哪裏;讀寫鎖的優點。
tryLock(),避免死鎖;synchronized是不公平鎖,而Lock能夠指定鎖公平仍是不公平;
syn實現wait/notify機制通知的線程是隨機的,Lock能夠有選擇性的通知。
ReentrantReadWriteLock:讀寫各用一把鎖;對於讀多寫少場景效率高。
讀寫鎖表示兩個鎖,一個是讀操做相關的鎖,稱爲共享鎖;另外一個是寫操做相關的鎖,稱爲排他鎖。我把這兩個操做理解爲三句話:
一、讀和讀之間不互斥,由於讀操做不會有線程安全問題
二、寫和寫之間互斥,避免一個寫操做影響另一個寫操做,引起線程安全問題
三、讀和寫之間互斥,避免讀操做的時候寫操做修改了內容,引起線程安全問題
總結起來就是,多個Thread能夠同時進行讀取操做,可是同一時刻只容許一個Thread進行寫入操做。
16.ArrayList 的 add 方法與 addAll 方法的關係, ArrayList 的方法是否線程安全。
17.ping 命令後,返回各參數的意義。
18. 進程與線程的區別、聯繫。
(概念、資源)
進程是程序運行的實例,是系統分配資源的基本單元;進程沒法直接訪問另外一個進程的資源。若是要訪問,就必須使用進程間通訊機制。
線程存在於進程中,線程是獨立運行和獨立調度的基本單元;線程間共享進程的資源。
19. 進程間通訊的方法。
(管、信、消、共、信、套)
20. 死鎖的必要條件、避免、解除方法。
死鎖到底問的是數據庫仍是多線程仍是操做系統咧?
產生死鎖緣由?
1)競爭系統資源;2)進程推動順序不當;
產生死鎖必要條件?
(1) 互斥條件:一個資源每次只能被一個進程使用。
(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已得到的資源保持不放。
(3) 不剝奪條件:進程已得到的資源,在末使用完以前,不能強行剝奪。
(4) 循環等待條件:若干進程之間造成一種頭尾相接的循環等待資源關係。
死鎖的避免?
1)按同一順序訪問對象;2)避免事務的交互(減小持有資源的時間);3)
解決死鎖?
剝奪資源:從其它進程剝奪足夠數量的資源給死鎖進程,以解除死鎖狀態;
撤消進程:能夠直接撤消死鎖進程或撤消代價最小的進程,直至有足夠的資源可用,死鎖狀態消除爲止;所謂代價是指優先級、運行代價、進程的重要性和價值等。
21. 工做中,與同事在項目解決方案上產生分歧,如何處理。
二面
1.HashMap 底層結構、擴容機制。
擴容機制;
HashMap的參數有容量capacity1六、負載係數loadFactor0.7五、閾值threshold;當鍵值對個數>threshold閾值時,擴容;
擴容:
將數組擴容爲原來容量的2倍;就數組的全部Entry從新計算索引加入新數組;新數組的引用賦給舊數組;
2. 紅黑樹的實現。
紅黑樹本質是二叉搜索樹,知足二叉搜索樹的基本性質——即樹中的任何節點的值大於它的左子節點,且小於它的右子節點。
紅黑樹節點的基本屬性有:顏色、左子節點指針、右子節點指針、父節點指針、節點值;
一顆紅黑樹必須知足如下幾點條件:
1)根節點必須是黑色。
2)任意從根到葉子的路徑不包含連續的紅色節點。
3)任意從根到葉子的路徑的黑色節點總數相同。
這些約束確保了紅黑樹的關鍵特性:從根到葉子的最長的可能路徑很少於最短的可能路徑的兩倍長。結果是這個樹大體上是平衡的。
由於操做好比插入、刪除和查找某個值的最壞狀況時間都要求與樹的高度成比例,這個在高度上的理論上限 容許紅黑樹在最壞狀況下都是高效的,而不一樣於普通的二叉查找樹。
3. 排序的種類、穩定性、時間複雜度,適用場景。
4. 手寫線程安全的單例模式。
5. volatile 的含義。
使用volatile關鍵字修飾變量,線程要訪問變量時都是從內存中讀取,而不是從緩存當中讀取,所以每一個線程訪問到的變量值都是同樣的。
6. 指令重排的含義。
7. 多線程,線程同步,鎖。
8. 介紹項目經驗。
9. 如何看待加班。
HR 面
自我介紹,家庭狀況等。
崗位:移動客戶端開發 (Android)
一面
1. 自我介紹,項目經驗,科研工做。
2. 手寫 Java 代碼 Hello World( 包引入,完整 main 方法 ) 。
3. 面向對象的 3 個特徵。
4. 強引用、軟引用、虛引用、弱引用。
強引用:只要引用存在,垃圾回收器永遠不會回收;
軟引用:內存溢出以前進行回收;軟引用主要實現相似緩存的功能,在內存足夠的狀況下直接經過軟引用取值,無需從繁忙的真實來源查詢數據,提高速度;當內存不足時,自動刪除這部分緩存數據,從真正的來源查詢這些數據。
弱引用:弱引用與軟引用的區別在於:只具備弱引用的對象擁有更短暫的生命週期。在垃圾回收器線程掃描它所管轄的內存區域的過程當中,一旦發現了只具備弱引用的對象,無論當前內存空間足夠與否,都會回收它的內存。
虛引用:垃圾回收時回收,沒法經過引用取到對象值。虛引用是每次垃圾回收的時候都會被回收,經過虛引用的get方法永遠獲取到的數據爲null,所以也被成爲幽靈引用。虛引用主要用於檢測對象是否已經從內存中刪除。
參考:Java四種引用
5.Collection 框架下接口、類的繼承關係。
6.sleep 與 wait 方法的區別。
(1.屬性;2.鎖;3.範圍)
7.Java 中堆的實現類,堆排序的思路。
實現類是什麼意思?數組實現?
堆排序包括兩個過程,首先是根據元素建堆,而後將堆的根節點與最後一個節點交換,將前面N-1個節點進行堆調整,直到全部節點都取出。
8. 從 1 億遊戲積分數據中,如何選擇前 200 名最高積分。
topK;hash統計+維護最小堆;
15. 介紹幾種熟悉的設計模式。
單例、工廠、觀察者、代理;
16. 畫出 TCP 三次握手和四次揮手圖,解釋握手爲什麼不能用 2 次。
17. 如何預估一個城市的樓房一共有多少塊玻璃。
大化小。每一個地區來統計。某個地區選一棟,再乘樓樹就是該地區的玻璃數。
18. 最困難的經歷及如何克服。
二面
1.自我介紹, 項目經驗,項目難點及解決方法。
2. 手寫冒泡排序。
3. 手寫堆排序。
4. 如何測一個雲朵的質量。
5. 手寫上 n 個臺階總共方法數,(每次上 1 、 2 或 3 階),遞歸及非遞歸實現。
HR 面
1. 自我介紹。
2. 爲何選擇開發崗,不是測試崗。
3. 但願之後工做氛圍如何。
4. 如何看待競爭。
5. 我的的興趣愛好。
6. 如何克服遇到的困難。
7. 爲什麼不讀博。
8. 性格中存在的缺點。
9. 關注的公衆號,閱讀的書籍。
10. 能不能接受工做在深圳。
崗位: Java 後臺開發
一面
1. 手寫代碼:在一組有序數組中,找出兩個數,使得其和爲給定和。
算法-Two Sum 解法HashMap;
map(nums[i],i);--key保存值,value保存index;
map.containsKey(tar-nums[i]) ,則保存、返回;
不然map.put;
2. 只用一個變量,如何表示象棋中兩方 「 將 」「 帥 」 的可走位置。
3. 天天用多長時間寫代碼。
4. 想作開發、算法仍是數據工做?
5. 想作移動端開發,仍是後臺開發?
崗位: Android 開發
一面
1. 自我介紹,項目經驗。
2. 介紹 Android NDK 。
3. 面向對象的幾個特性。
4. 數據結構,介紹 Collection 框架。
Collection集合類?
1)List、Set、Queue三個接口;
2)List實現類:ArrayList、LinkedList、Vector;
3)Set實現類:HashSet、SortedSet(i)、EnumSet; TreeSet實現SortedSet;
4)Queeu接口實現類:Deque(i)、PriorityQueue;ArrayDeque和LinkedList實現Deque;
5. 介紹多線程、併發、鎖。
6. 熟悉哪些設計模式。
7. 死鎖發生的條件。
二面
1. 項目經驗。
2. 科研狀況。
3. 路由器與交換機的區別。
a.交換機是第二層數據鏈路層;路由器是第三層網絡層;
b.在數據鏈路層只能識別物理地址,所以當交換機的某個端口收到一個數據幀時,交換機會讀取數據幀中相應的目標地址的MAC地址,而後在本身的MAC地址表中查找是否有目標MAC地址的端口信息,若是有,則把數據幀轉發到相應的端口;若是沒有,則向除源端口外的全部端口進行轉發。
c.當路由器的某個接口收到一個包時,路由器會讀取包中相應目標的邏輯地址的網絡部分,而後在路由表中進行查找。若是在路由表中找到了目標地址的路由條目,則把包轉發到路由器的相應接口;若是在路由表中沒有找到目標地址的路由條目,那麼,若是路由器配置了默認路由,就根據默認路由的配置轉發到路由器的相應接口;若是路由器中沒有配置默認路由,則將該包丟棄,並返回不可達信息。
4.DNS 含義。
DNS是Domain Name System域名系統,將域名映射爲IP地址;
5.ARP 與 RARP 含義。
ARP是Address Resolution Protocol地址解析協議,根據IP地址或獲取物理地址(MAC地址);
RARP是Reverse Address Resolution Protocol反向地址轉換協議,容許物理機器從ARP列表請求其IP地址。
RARP產生緣由:
ARP(地址解析協議)是設備經過本身知道的IP地址來得到本身不知道的物理地址的協議。假如一個設備不知道它本身的IP地址,可是知道本身的物理地址,網絡上的無盤工做站就是這種狀況,設備知道的只是網絡接口卡上的物理地址。這種狀況下應該怎麼辦呢?RARP(逆地址解析協議)正是針對這種狀況的一種協議。
6.ICMP 在哪一層。
網絡層。ICMP是(Internet Control Message Protocol)Internet控制報文協議。用於在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡自己的消息。這些控制消息雖然並不傳輸用戶數據,可是對於用戶數據的傳遞起着重要的做用。
7. 端口的含義。
指網絡中面向鏈接服務和無鏈接服務的通訊協議端口,是一種抽象的軟件結構。
8. 進程與線程的關係。
(概念、資源)
9. 進程間通訊方式。
(管、信、消、共、信、套)
10. 死鎖的解除方法。
剝奪資源、撤銷進程;
11. 堆和棧的關係。
12. 英語能力如何。
13. 如何看待加班。
HR 面
1. 自我介紹
2. 是否願意到北京工做。
崗位: Android 開發
一面
1. 自我介紹,項目經驗。
2.static 能夠修飾什麼。
成員變量、成員方法、靜態塊;
3.final 能夠修飾什麼。
成員變量、成員方法、類;
1、final關鍵字能夠用來修飾類、方法、變量。各有不一樣。
A、修飾類(class)。
一、該類不能被繼承。
二、類中的方法不會被覆蓋,所以默認都是final的。
三、用途:設計類時,若是該類不須要有子類,沒必要要被擴展,類的實現細節不容許被改變,那麼就設計成final類
B、修飾方法(method)
一、該方法能夠被繼承,可是不能被覆蓋。
二、用途:一個類不容許子類覆蓋該方法,則用final來修飾
三、好處:能夠防止繼承它的子類修改該方法的意義和實現;更爲高效,編譯器在遇到調用fianal方法轉入內嵌機制,提升了執行效率。
四、注意:父類中的private成員方法不能被子類覆蓋,所以,private方法默認是final型的(能夠查看編譯後的class文件)
C、修飾變量(variable)
一、用final修飾後變爲常量。包括靜態變量、實例變量和局部變量這三種。
二、特色:能夠先聲明,不給初值,這種叫作final空白。可是使用前必須被初始化。一旦被賦值,將不能再被改變。
D、修飾參數(arguments)
一、用final修飾參數時,能夠讀取該參數,可是不能對其做出修改
2、final關鍵字不能用來抽象類和接口。
4.Java 支持多繼承嗎。
不支持。
5.equals 方法判斷兩對象 a 、 b 是否相等,判斷的是什麼。
判斷對象在堆內存的首地址,即用來比較兩個引用變量是否指向同一個對象;
6.sleep 與 wait 方法的區別。
(1.屬性;2.鎖;3.範圍;)
7. 在表中插入 10000 條數據,如何提升性能。
1)把全部索引都刪除,待插入完畢,再從新建索引,它的意義是:插入時,只寫數據,不寫索引。所有插入完畢,你再建立索引,索引文件只需建立一次,而不是像你原來那樣頻繁更新n萬次
2)PreparedStatement預處理 + 批處理ps.addBatch
崗位:移動軟件研發 (Android)
一面
1.JVM 運行時的結構。
2. 類加載過程。
類從被加載到虛擬機內存中開始,到卸載出內存,整個生命週期包括7個階段:
加載、驗證、準備、解析、初始化、使用和卸載。
其中類加載的過程包括了加載、驗證、準備、解析、初始化五個階段。在這五個階段中,加載、驗證、準備和初始化這四個階段發生的順序是肯定的,而解析階段則不必定,它在某些狀況下能夠在初始化階段以後開始。
加載
1.字節流;2.方法區數據結構;3.對象-訪問入口;
驗證
文件格式的驗證、元數據的驗證、字節碼驗證和符號引用驗證;
準備
爲類變量分配內存並設置類變量初始值;這裏所設置的初始值一般狀況下是數據類型默認的零值(如0、0L、null、false等),而不是被在Java代碼中被顯式地賦予的值。
解析
解析階段是虛擬機將常量池中的符號引用轉化爲直接引用的過程;
初始化類變量和其餘資源;
3. 進程與線程的區別與聯繫。
4. 線程有哪幾種狀態。
New、Runnable、Running、Blocked、Dead;(這是錯誤的,更正!更正!!包括線程之間的狀態變換也要更正!)
根據java.lang.Thread.State類,線程包括六個狀態:
NEW:線程實例化還未執行start();
RUNNABLE:線程已經在JVM執行。(但還在等待cpu資源?存疑。彷佛Running狀態是包含在Runnable;Runnable就是線程執行的狀態)
BLOCKED:線程阻塞;等待鎖,
WAITTING:線程等待;調用Object.wait() 沒有timeout 或者 Thread.join() 沒有timeout 時進入該狀態;
TIMED_WAITTING:線程等待;調用Thread.sleep、Object.wait(timeout) 或者 Thread.join(timeout)是進入該狀態;
TERMINATED:線程終止;
(相比較原版本,DEAD更改成TERMINATED,沒有Running狀態,有WAITTING和TIMED_WAITTING狀態;)
狀態變化:
(和原版本的區別,沒有Running狀態;等待不屬於阻塞、sleep/join不屬於阻塞!)
Runnable:t.start();從new變爲Runnable;
Waitting:Runnable執行wait()/join();無限等待喚醒;
Timed_Waitting:Runnable執行sleep()/wait(timeout)/join(timeout); wait釋放鎖,sleep()不釋放鎖;等待喚醒,但設置了時限;
Blocked:線程在等待鎖;和Waitting/Timed_Waitting是兩類概念?可能同時存在?存疑;
5.synchronized 與 volatile 的比較,哪一個保證原子性。
6. 方法棧是不是線程私有。
7. 手寫多線程下的單例模式。
8.HashMap 的底層結構, hashCode 方法的底層實現。
Java中的hashCode方法就是根據必定的規則將與對象相關的信息(好比對象的存儲地址,對象的 字段等)映射成一個數值,這個數值稱做爲散列值。
9. 線程狀態--BLOCKED 與 TIMED_WAITING 的區別。
Blocked是等待一個monitor lock,好比一個線程長期持有lock,另外一個線程就會被blocked;
Wait狀態是指線程無限等待狀態,在執行object.wait()或者thread.join()的時候會出現;
Timed_Waitting是有時限的等待狀態,執行o.wait(timeout)/t2.join(timeout)/sleep(time)的時候會出現;
12. 介紹 OSI 七層協議。
(七層+功能+協議)
13 手寫單鏈表反轉。
二面
1. 自我介紹,項目經驗。
2.Java 多線程機制,鎖。
(多線程:1.實現;2.同步;3.優化;)
3.Collection 框架,哪些線程安全,哪些不安全。
Vector、HashTable線程安全;
ArrayList、LinkedList、HashTable等線程不安全;
什麼線程安全?
線程安全就是說多線程訪問同一代碼,不會產生不肯定的結果。
4.JVM 中,對象的四種引用。
強引用、軟引用、弱引用、虛引用;
a、強引用(Strong Reference)--不會被回收
程序代碼中廣泛存在的,好比Object obj = new Object(),只要存在強引用,GC收集器永遠不會回收被引用的對象。
b、軟引用(Soft Reference) --內存緊張的時候被回收
非必須的對象,是否回收,要看當前內存狀況,若是緊張,則進行回收,不然不回收。當程序拋出內存溢出異常時,確定不存在這種類型的對象。
c、弱引用(Weak Reference) --下一次GC回收,即必被回收;
被弱引用關聯的對象只能生存到下一次GC發生以前,即每次必被回收。
d、虛引用(Phantom Reference) --GC時回收,沒法經過引用取得對象值;用來檢測對象是否已經從內存刪除。
幽靈引用或者幻影引用,一個對象是否有虛引用的存在不會影響到其生存時間,沒法經過虛引用獲取對象實例。爲一個對象設置虛引用關聯的惟一目的是但願能在這個對象被回收時受到一個系統通知。
參考:JVM對象相關
5.JVM 的 GC 機制,分區、算法、對象狀態等。
6. 排序算法種類、時間空間複雜度、穩定性。
12. 進程與線程的區別。
15. 內存泄漏的緣由、避免。
16. 進程間通訊的方式。
(管、信、消、共、信、套)
17.TCP 與 UDP 的比較。
(1.特色:鏈接、可靠、安全; 2.舉例; 3.協議;)
都是傳輸層的協議;
TCP提供面向鏈接、可靠的數據流傳輸,而UDP提供非面向鏈接、不可靠的數據流傳輸;
TCP注重數據安全性,UDP數據傳輸快;好比聊天軟件、在線視頻等都是UDP;
協議:TCP支持的應用協議有Telnet遠程登陸、FTP文件傳輸、HTTP;
UDP對應協議有DNS域名系統;
TCP可靠性?
面向鏈接、超時重傳機制、擁塞控制等;
18.TCP 三次握手。
19.get 與 post 方法的比較。
20. 報文 header 有哪些屬性。
(如下爲Request的)
Host:請求的主機名;
User-Agent:瀏覽器類型;
Accept:客戶端可以接受的內容類型;
Accept-Language:語言;
Accept-Encoding:壓縮編碼類型;
Accept-Charset:字符編碼集;
Content-Type:提交的內容類型;
Connection:是否持久鏈接;
Keep-Alive:持久鏈接時間;
cookie:保存在請求域名下的全部cookie值;
Referer:訪問請求的頁面;
參考:HTTP的header
示例:
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-silverlight, application/x-shockwave-flash, */* Referer: <a href="http://www.google.cn/">http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- FxlRugatx63JLv7CWMD6UB_O_r
三面
1. 自我介紹,項目經驗。
2.PV 操做。
信號量的處理;
參考:PV操做
3. 給出幾段代碼,說明存在什麼問題。
4. 單鏈表 a 、 b 之間插入 c ,如何實現。
忙過了一段時間,終於有空坐下來寫一篇面經,記錄一下本身前面一段時間找實習的過程和經驗,但願對閱讀到這篇面經的你有所幫助。
先介紹一下個人基本狀況:
學校專業:本人某普通211通訊工程專業本科生(非計算機科班出身)。
面試崗位:Android客戶端開發工程師
面試公司:阿里巴巴,華爲,CVTE
面試結果:阿里巴巴,華爲,CVTE都給了Android客戶端開發工程師的實習Offer。
一 阿里巴巴
阿里是內推面試的,不須要筆試。(PS:據說阿里的筆試仍是頗有難度的,你們找實習時能夠先試試內推,只要你簡歷有讓HR以爲有亮點的地方,仍是有機會內推成功的。)阿里是我面試的第一家公司,也是最後給我發Offer的公司(PS:可見阿里的流程跑的有多慢,面過阿里的應該都有體會,官網狀態卡在「面試中」巨久。。。不過大公司好像都這樣,跑流程須要時間,因此你們面試完不要着急,耐心等待,該來的總會來)。阿里面試輪次是最多的,我經歷了四輪(三輪技術+一輪HR),據說部分同窗還有交叉面,那就更多了。好了,廢話很少說,上面經。
阿里實習一面:
阿里一面是電話面試,也是我人生第一次面試,其實仍是蠻緊張的。大概在內推簡歷投出去一個星期後來的電話,當時不少知識還在複習,準備的不是很充分。大部分公司的一面都是技術基礎面,主要問的是Java基礎+數據結構/算法+計算機網絡+操做系統+Android基礎。在這裏想強調一句,基礎真的很重要,很重要,很重要(重要的事說三遍)。由於大公司通常都很看重基礎,只有基礎紮實,才能在這個基礎上深造。
阿里一面問的問題整理以下(由於過去有些時日了,我儘可能憑記憶將我被問到的問題記錄下來,後面的面經也是同樣):
6.強弱軟虛四種引用的特色和使用場景
9.進程和線程的區別
10.線程池技術
(1.建立;2.四類線程池;3.參數;)
建立:線程池的頂級接口是Executor,是執行線程的工具;真正的線程接口是ExecutorService;
ThreadPoolExecutor是ExecutorService的默認實現;
示例:
ExecutorService pool=Executors.newFixedThreadPool(2);
四類線程池:
1. newSingleThreadExecutor
建立一個單線程的線程池。這個線程池只有一個線程在工做,也就是至關於單線程串行執行全部任務。若是這個惟一的線程由於異常結束,那麼會有一個新的線程來替代它。此線程池保證全部任務的執行順序按照任務的提交順序執行。
2.newFixedThreadPool
建立固定大小的線程池。每次提交一個任務就建立一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,若是某個線程由於執行異常而結束,那麼線程池會補充一個新線程。
3. newCachedThreadPool
建立一個可緩存的線程池。若是線程池的大小超過了處理任務所須要的線程,
那麼就會回收部分空閒(60秒不執行任務)的線程,當任務數增長時,此線程池又能夠智能的添加新線程來處理任務。此線程池不會對線程池大小作限制,線程池大小徹底依賴於操做系統(或者說JVM)可以建立的最大線程大小。
4.newScheduledThreadPool
建立一個大小無限的線程池。此線程池支持定時以及週期性執行任務的需求。
線程池ThreadPoolExecutor的參數:
corePoolSize - 池中所保存的線程數,包括空閒線程。
maximumPoolSize-池中容許的最大線程數。
keepAliveTime - 當線程數大於核心時,此爲終止前多餘的空閒線程等待新任務的最長時間。
unit - keepAliveTime 參數的時間單位。
workQueue - 執行前用於保持任務的隊列。此隊列僅保持由 execute方法提交的 Runnable任務。
threadFactory - 執行程序建立新線程時使用的工廠。
handler - 因爲超出線程範圍和隊列容量而使執行被阻塞時所使用的處理程序。
關於corePoolSize和maximumPoolSize:
若是線程數<corePoolSize,有任務時,不管是否有空閒線程,都會建立新線程;
若是corePoolSize<線程數<maximumPoolSize,大於的部分放到任務隊列,直到隊列滿了, 纔會建立小於等於maximumPoolSize的線程。
11.死鎖的四個必要條件和如何處理死鎖
互斥、請求與保持、不剝奪、循環等待;
避免死鎖:資源有序分配(避免循環等待)、避免事務交互(減小持有資源的時間)、保持事務剪短並處於一個批處理中(減小持有資源時間)
解決死鎖:剝奪資源、撤銷進程;
12.線程同步的方法,sychronized和lock的區別等。
有些不太記得了,大概問了十多個問題,層層深刻,本身也是盡力回答了。最後面試官問我最近看些什麼書啊學些什麼啊,簡單聊了會兒天。後來面試官問我有什麼問題問他,我問了一下他對個人面試過程怎麼評價,他直接跟我說基礎不錯,一面經過了,叫我等二面通知。當時是至關開心啊。
阿里實習二面:
時隔一週以後,阿里二面來了。此次是大中午我在睡午覺,忽然一個電話過來了,猝不及防。二面是項目面。二面面試官上來讓我簡單自我介紹以後就開始問項目。我把本身作過的項目按時間遠近順序跟面試官聊了一遍。面試官對每個項目幾乎都會就其中的一些細節提問。好比項目中使用到的框架,對框架底層源碼的理解;還有項目中用到的算法,和對算法的理解和改進等。最後面試官問了我一個Http中get和post的區別,這個我複習過,因此就覺得很簡單的按照本身記住的幾個點回答了。不過面試官貌似對個人回答還不滿意,讓我進一步解釋爲何post比get安全,而後我又答了一通,而後他又說還有些點沒有答到,讓我再想一想。這個問題就這樣討論了很久,到最後我好像仍是沒能徹底讓面試官對個人答案滿意。而後面試官說那好今天就到這裏吧,而後就say拜拜了。當時感受這一輪面試估計要跪了,面試官甚至連讓我問問題的環節都沒有了。結束以後我回去搜了一大堆關於討論get與post區別的博客,好好理解了一番它倆的區別。
阿里實習三面:
然而奇蹟仍是發生了,大概五天以後三面來了。三面仍是項目面,不過側重點感受有點不一樣。三面面試官仍是讓我自我介紹完後開始聊項目,感受氣氛沒有二面那麼緊張,相對比較輕鬆。問的問題大部分也都能回答上來了。主要是聊項目,而後問了些設計模式相關的問題。對了記得還問了個Android裏面手機分欄放置若干圖片如何讓兩邊總高度相差最小的算法設計題。面試完面試官說後面會有HR聯繫我,等HR面。到這裏,三輪技術面結束了。
阿里實習四面:
HR面主要是問了一些在大學裏面作項目的經歷和將來規劃等之類的問題,這裏就很少說啦。
四面結束後過了N久才發的錄用意向書,期間經歷了華爲和CVTE的面試。
基本狀況介紹:
性別:lz萌妹子一枚
學校:本科雙非、碩士985
實力:只是女生比,中等偏上一丟丟
面試公司:百度、騰訊、阿里、今日頭條、美團、京東、去哪兒、CVTE、神州數碼、知道創宇、intel
面試職位:web滲透測試工程師(安全方向)、JAVA開發工程師、測試開發工程師
春招結果:百度(hr通知準備三面,結果被放鴿子)、阿里(測開offer)、今日頭條(測開offer)、騰訊(現場面沒去)、美團(Java開發offer)、cvte(java開發,hr面掛在城市選擇,不肯意去深圳)、知道創宇(web滲透工程師offer)、神州數碼(java開發offer)、intel(android內核開發)
lz最後選了美團,以下的面經按照時間順序,每一塊分爲面試問題+面試準備+最後總結
阿里巴巴
面試崗位:Java研發工程師(內推)
面試形式:遠程電面
面試問題(一面2017.03.08):自我介紹,java數據結構,HashMap原理,自定義類型能夠做爲Key嗎,(10分鐘都在說HashMap)
自定義類型做爲key須要重寫equals()和hashCode()方法;
java內存模型,知道的排序算法,重點問了快排,快排的優化,Java多線程實現方式,Java線程與進程區別。
面試結果:問了29分鐘,回答很糟糕,面試官評價中等偏上。
面試問題(二面2017.03.11):自我介紹,java線程與進程差異、JVM內存模型+垃圾回收算法、Java HashMap實現原理
操做系統同步方式、通訊方式;
線程同步方式:互斥量、信號量、事件;
互斥量:只有擁有互斥對象的線程纔有權限訪問公共資源;
信號量:它容許同一時刻多個線程訪問同一資源,可是須要控制同一時刻訪問此資源的最大線程數量。
事件(信號):經過通知操做的方式來保持多線程同步,還能夠方便的實現多線程優先級的比較操做。
進程同步方式(沒找到合適說法,就是通訊方式?)
計算機網絡三次握手四次分手以及wait_time三種差異;
TIME_WAIT
TIME_WAIT 是主動關閉連接時造成的,等待2MSL時間,約4分鐘。主要是防止最後一個ACK丟失。 因爲TIME_WAIT 的時間會很是長,所以server端應儘可能減小主動關閉鏈接
CLOSE_WAIT
CLOSE_WAIT是被動關閉鏈接是造成的。根據TCP狀態機,服務器端收到客戶端發送的FIN,則按照TCP實現發送ACK,所以進入CLOSE_WAIT狀態。但若是服務器端不執行close(),就不能由CLOSE_WAIT遷移到LAST_ACK,則系統中會存在不少CLOSE_WAIT狀態的鏈接。此時,多是系統忙於處理讀、寫操做,而未將已收到FIN的鏈接,進行close。此時,recv/read已收到FIN的鏈接socket,會返回0。
簡單說:TIME_WAIT主動關閉方,CLOSE_WAIT被動關閉方,不執行close(),就會沒法進入LAST_ACK,此時會return 0;
Http post和get差異,http狀態碼;
http狀態碼?
狀態碼是http響應裏的部分,用來描述響應的狀態;
2xx:成功處理請求;
3xx:重定向;
4xx:客戶端錯誤;
5xx:服務器錯誤;
常見狀態碼:
200:請求被成功接收;
301:永久跳轉,完成請求還需進一步操做;
302:臨時跳轉,完成請求還需進一步操做;
400:客戶端請求有語法錯誤,不能被服務器所理解;
403:沒有權限,拒絕訪問;
404:訪問頁面不存在;
500:服務器錯誤;
503:服務器當前不能處理客戶端請求;
在線寫了一個判斷單鏈表有沒有環;
最後問了我的興趣愛好、終面能夠來杭州嗎等私人問題。
面試結果:問了2個小時,可是因爲沒有聽清楚是螞蟻花唄,覺得是杭州別的小公司,最後很傻的掛了面試官電話(當時有點失望,覺得是阿里結果不是),很惋惜的沒有後面了,情商真的很重要很重要,要否則就過了。
面試總結:JVM答得很好,16年年底,看過《深刻理解Java虛擬機》;內推剛開始問的問題,真的很簡單,答不出來必定會被pass,可是,我的沒有認真準備,只是看了網上一些很膚淺的帖子,正確作法是:去看書、去看書、去系統的看書,沒有來不及。
面試崗位:測試開發工程師(網上校招)
面試形式:遠程視頻
面試時間:2017.05.24-2017.06.01
面試內容:一面(05.22)自我介紹+自由發揮:Java內存模型、Java類加載過程、JVM解釋編譯執行過程、測試方法、還聊了一些我的方面的問題;
二面(05.24)自我介紹+自由發揮,按照簡歷問,多是由於測開簡單吧,問的問題很簡單:平時遇到的App有哪些bug,問題可能出在哪;測試與開發的差異;對測試的理解;瞎扯了一下最近發生的安全問題;看待加班;我的觀念三面(05.24)Hr面,阿里hr真的好厲害,並且是個中年大姐,每一問都不知道言外之意是什麼,因此回答的很當心謹慎;問題:大學當項目組長如何協調組員關係、分配任務;遇到的學習困難,技術難點怎麼解決;家庭狀況,家庭地址;職業規劃
面試結果:06.01收到offer,比第一次簡單不少。可是,若是是java開發估計也會掛,java開發缺少太多東西,太差勁了。有時候,要及時調整方向,我的對本身開發沒有信心,可是測開能夠碾壓全部的測試女生,lz很自信。
百度
面試崗位:測試開發工程師(內推)
面試形式:電面
面試內容:(一面2017.04.10)說好下午14:00開始,結果一直沒打電話,到了晚上問了hr,纔想起來給我打電話,(百度真的太不守時了,很失望),自我介紹+結合簡歷問的,大部分問的是web滲透測試,安全那些問題漏洞利用+sql注入,問了一個算法,劍指offer第一題,我都說了不會c,java能夠很快的完成,可是面試官一直讓用c作;(二面2017.04.11)時間定於14:00,結果改成16:00,還好是學姐,問了一個算法題目,把一個數再分解爲因子,找到因子和最小的分解,java NIO等,具體記不清啦。接着,,hr電話通知14號三面,讓好好準備,結果沒有音訊。。。
面試結果:不知道百度,怎麼想的,爲何要糊弄人,真的很氣人。。
騰訊
面試崗位:java開發工程師(內推)
面試形式:電面
面試內容:(一面03.17)自我介紹+創建項目內容,其他的記得不是很清楚了,惟一一個算法,當內存放不下大規模的數據,須要按照什麼方法去取,,當時面試官給的答案是併發。,我覺得是歸併算法。
面試結果:一面之後沒有任何信息,雖然面了1h,覺得但願很大。
後期,在線網申,獲得到現場面試機會,只是填的是qq郵箱,等看到郵件的時候已通過了日期,惋惜~~
今日頭條
面試崗位:Java研發工程師(內推)
面試時間:2017.03.22
面試形式:遠程視頻
面試內容:
數據庫引擎類型與差異?
數據庫索引類型?
普通索引、惟一索引、主鍵索引、組合索引;
普通索引:沒有任何限制;
惟一索引:索引列的值必須惟一,但容許有空值;
主鍵索引:特殊的惟一索引,不容許有空值;一個表只能有一個主鍵;
組合索引:多個字段組合做爲索引;
參考:索引類型
惟一索引和普通索引差異?
在線算法,找出增序排列中一個數字第一次和最後一次出現的數組下標,數據去重,海量數據去重,找出海量數據中前10個最大的數(數據有重複)。
面試結果:赤果果的掛了,如今看來這些問題都很簡單,惋惜當時沒有答出來,其次,海量數據這裏用到了聚類的思想,此次面試含金量特別高,可是沒有問道java基礎,後來才知道面試官不是作java開發的,不過,面試官說的厚積薄發很中肯。
面試崗位:測試開發工程師(校招)
面試時間:2017.04.12(一下午面完)
面試形式:遠程視頻
面試內容:(一面)自我介紹+在線編程:單例模式、內推時的相同算法+多線程建立;
java 範圍關鍵public以及其餘幾個;
成員變量的修飾符:
private:自身能夠訪問,同包子類不能繼承,同包類不能訪問;
默認:自身能夠訪問,同包子類能夠繼承,同包類能夠訪問;
protected:自身能夠訪問,同包子類能夠繼承,不一樣包子類能夠繼承,同包類能夠訪問,其餘類不能夠訪問;
public:不一樣包子類能夠繼承,其餘類能夠訪問;
public > protected > default > private
public 指定該變量爲公共的,他能夠被任何對象的方法訪問。
private 指定該變量只容許本身的類的方法訪問,其餘任何類(包括子類)中的方法均不能訪問。
protected 指定該變量能夠被自身和子類訪問。在子類中能夠覆蓋此變量
線程與進程差異;
java抽象類與接口差異
(二面)給定區間[1,3],[2,5],[5,8],[12,55],[3,6],[7,8],最後給出合併後的結果[1,8],[12,15],在線編程,(三面)自我介紹+項目經歷,linux查看線程,linux vim 。
面試結果:不得不說今日頭條效率高效,從開始面試到offer發放,總共3.5h,效率極其高,今日頭條測試開發崗位明顯簡單了好多好多,和開發不是一個級別的,我同窗筆試4個題accept 330%的大牛,最後都掛了。
美團大衆點評
面試崗位:java開發工程師(在線網申)
面試形式:電面
面試時間:2017.05.12-2017.05.17
面試內容:(一面05.12)自我介紹+項目經歷,算法:數組先升序在降序,找出最大數,jvm內存模型,java線程與進程差異(二面05.17)自我介紹+項目經歷,算法:正整數數組,拼出一個最大的正數;java NIO,java 多線程、線程池,java 網絡編程解決併發量,java內存模型,數據庫的隔離級別,Mysql 存儲引擎以及差異。(三面05.17)很快,中午12點,二面1h後,hr電話打來,商量入職時間等。
面試結果:成功拿到offer,可能後期美團面試難度沒有那麼高,其次準備也比較充分了,看了不少相關的書籍吧。充分準備纔是面試取勝的關鍵。
去哪兒
面試崗位:Java開發工程師
面試形式:現場面試
面試時間:2017.04.21
面試內容:(一面)首先說一下,去哪兒是惟一一個在現場酒店面試的公司,多是工做人員的失誤,時間從14:00一直等到17:00才輪到我,看着其餘的面試者一個一個都面,只有我一直在等,到最後確實是生氣了,很生氣。問題:自我介紹+項目經歷。
抽象類與接口的差異,抽象類能夠有實例嗎?
抽象類不能實例化;
String類能夠繼承嗎?
String由final修飾,因此不能被繼承;
synchronizated 和lock差異?HashMap實現原理,同步仍是異步?
java地址和值傳遞的例子?
基本類型,傳遞的是基本類型的值的拷貝;
引用類型,傳遞的是該參量所引用的對象在堆中地址值得拷貝。
Collection集合類中只能在Iterator中刪除元素的緣由?
每次咱們嘗試獲取下一個元素的時候,Iterator fail-fast屬性檢查當前集合結構裏的任何改動。若是發現任何改動,它拋出ConcurrentModificationException。Collection中全部Iterator的實現都是按fail-fast來設計的(ConcurrentHashMap和CopyOnWriteArrayList這類併發集合類除外)。
當使用Iterator來迭代訪問Collection集合元素時,Collection集合裏的元素不能被改變,只有經過Iterator的remove()來刪除上一次next()方法返回的集合元素才能夠。不然將會引起java.util.ConcurrentModificationException異常。
Mysql 存儲引擎類別以及差異?
面試結果:一面就掛了,問的不少問題一方面本身不會,另外一方面,因爲等待時間太長,和前臺工做人員鬧了不愉快,可能面試官以爲我我的有問題吧,因此pass的很快,不過也是一次經驗得到,無論等多久,態度都要謙和。
京東
面試崗位:Java開發工程師
面試形式:電面
面試時間:2017.04.17
面試內容:(一面)自我介紹+項目經歷,問題:
Mysql索引實現原理,Mysql ACID具體,
隔離級別,隔離級別如何實現,
讀未提交、讀已提交、可重複讀、串行化;
實現:MySQL中設置事務的隔離級別。
set [glogal | session] transaction isolation level 隔離級別名稱;
set tx_isolation=’隔離級別名稱;’
參考:數據庫事務
Java多線程,線程池有哪幾類,每一類的差異?
1. newSingleThreadExecutor -單線程
建立一個單線程的線程池。這個線程池只有一個線程在工做,也就是至關於單線程串行執行全部任務。若是這個惟一的線程由於異常結束,那麼會有一個新的線程來替代它。此線程池保證全部任務的執行順序按照任務的提交順序執行。
2.newFixedThreadPool -固定大小線程池
建立固定大小的線程池。每次提交一個任務就建立一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,若是某個線程由於執行異常而結束,那麼線程池會補充一個新線程。
3. newCachedThreadPool -無界線程池,能夠進行自動線程回收
建立一個可緩存的線程池。若是線程池的大小超過了處理任務所須要的線程,那麼就會回收部分空閒(60秒不執行任務)的線程,當任務數增長時,此線程池又能夠智能的添加新線程來處理任務。此線程池不會對線程池大小作限制,線程池大小徹底依賴於操做系統(或者說JVM)可以建立的最大線程大小。
4.newScheduledThreadPool -支持定時以及週期性執行任務
建立一個大小無限的線程池。此線程池支持定時以及週期性執行任務的需求。
synchronized 實現原理?
每一個對象都有一個monitor鎖,當monitor被某個線程持有後,便處於鎖定狀態,其餘線程訪問已加鎖數據要等待鎖釋放。
HasnMap實現原理,擴容因子過大太小的缺點,擴容過程。
負載因子?
負載因子越大,對空間利用越充分,查找效率越低;
負載因子太小,散列表數據過於稀疏,對空間形成嚴重浪費。
擴容過程?
當添加元素時,若元素個數大於閾值,則resize();數組擴大爲原來2倍,新建數組,將數據複製到新數組,引用指向新數組。
面試結果:每一問答得都很糟糕,尤爲是數據庫那一塊,根本不熟悉,純屬胡說。項目經歷回答也很糟糕,此外,面試官思路超級清晰,這麼多面試中最欣賞的面試官,廢話沒有,條理很清晰,言簡意賅。
總結
積累、積累、再積累。推薦系統的去看相關書籍,不是看帖子,沒有用處。推薦書籍以下《深刻理解Java虛擬機》、《Effective Java》、《深刻分析Java web技術內幕》、《高級數據庫原理》、《劍指Offer》+牛客在線編程、《Java併發編程實戰》、《Java編程思想》
注:lz尚未看完,有些沒看懂,可是最起碼知道面試官問的問題的深淺,以及要怎麼回答;其次,情商很重要,有些話不能亂說。
一面:
一面問的很基礎,但仍是面的不好,可是應該是一面都比較寬鬆吧,因此仍是被放過去了。
1.線程和進程區別?
大概講了進程線程區別,但彷佛沒達到面試官要求的深度。。
(線程和進程出現不少次了。。仍是得多準備一些)
(概念、資源、聯繫)
進程是程序運行的實例,是系統分配資源的基本單元;進程沒法直接訪問另外一個進程的資源。若是要訪問,就必須使用進程間通訊機制。 ->可能會追問進程通訊機制;
線程存在於進程中,線程是獨立運行和CPU獨立調度的基本單元;線程間共享進程的資源。
一個進程能夠有多個線程,多個線程也能夠併發執行;
2.nginx功能是什麼?多進程仍是多線程?
這個是由於在簡歷上寫了瞭解nginx,可是好早之前看了一下nginx的知識,好多都不知道了,蒙了一下,說是多線程。面試結束從新看了才發現蒙錯了....
3.簡述tcp三次握手?
這個比較簡單,隨便說了說三次握手的過程
4. 數據庫若是頻繁查詢某字段怎麼辦?若是兩個屬性頻繁被一塊兒查詢呢?
創建索引;組合索引;
5. sql查一天各類類型的新增用戶
這題其實不難,可是sql基本忘的差很少了,寫不出來完整sql,大概跟面試官說了說思路
7. 算法題了,求二叉樹的深度,比較簡單
9. 你是山西的一個煤老闆,你在礦區開採了有3000噸煤須要運送到市場上去賣,從你的礦區到市場有1000千米,你手裏有一列燒煤的火車,這個火車最多隻能裝1000噸煤,且其能耗比較大——每一千米須要耗一噸煤。請問,做爲一個懂編程的煤老闆的你,你會怎麼運送才能運最多的煤到集市?
徹底沒想到正確的方向上,面試官幾回提醒,仍是沒想出來,我太弱了。
時間也差很少到了,面試官說又問了問打不打算考研啊,成績啊這些的。而後說等會有二面,不過等了很久,當天仍是沒排上,二面排在了兩天後。
二面:
1.了不瞭解b+樹,有什麼優勢
前些天很粗略看了看,大概談了談,不過徹底是隻知其一;不知其二的狀態,差很少回答的對錯參半
B+樹是多路搜索樹,它和B樹的區別是全部關鍵字出如今葉子節點的鏈表中,非葉子節點至關於葉子節點的索引;
和二叉搜索樹相比,B+性能至關於全部關鍵字作一次二分查找,沒有二叉樹平衡問題。
3.又問了道數據庫題,和一面同樣,我仍是寫不出來,,不過挺簡單的,就是查什麼平均數什麼的。
5.求兩個排序數組的中位數
寫了個o(k)的解法,面試官不滿意,後來想了段時間,寫了個o(lgk)的算法,面試官還算滿意
接着就是隨便聊了聊,學了哪些課啊,能實習多久之類的,而後差很少也就結束了。二面結果是後來我打hr電話才知道的
三面:
1.我說平時看的書比較多,作的項目少,就問我看了哪些書啊什麼的。而後問我讀完c++ primer有什麼感想
2.而後順着個人感想就問我智能指針的實現了
簡單寫了個,而後面試官問我怎麼處理多進程訪問什麼的。可是面試官對加鎖這個回答不滿意,提到能夠原子操做,我也不記得了。這題答的也很差
3. 問同步io/異步io的區別
這個前一天曆各類面試題的時候簡單看了網上的答案,因而順着回答了,不過好像徹底理解誤差了,對操做系統怎麼處理這個問題徹底沒搞清楚。答的又很失敗
4.問了不瞭解網絡
說知道,可是很久沒看了,可是忘了好多網絡的知識,結果面試官就沒問。感受當時不該該這麼說的,其實算起來仍是知道一些的。
4. 求數組中逆序對
這個前一天在劍指offer上看了,而後當即就跟面試官說那個歸併算法的思路了(估計我這個反應,面試官一看就知道我看過這題了),不過實現的時候發現有困難,忘了要建一個輔助數組,後來折騰很久才弄出來。(期間面試官很着急的催促,一直看手機,那時候就猜到面試應該是沒戲了)
接着就是簡單聊了聊其餘的了,實習多久,興趣愛好什麼的。問有什麼想問他的。我就問他我有哪些不足,而後面試官給我推薦了包括apue在內的幾本書,讓我再作點項目。
而後就沒消息了,戰戰兢兢等了好幾天,給hr打電話才知道其實當天就被淘汰掉了ㄒoㄒ,並且hr還非說是當天就給我發了郵件的....