本文為菜鳥窩作者 吳威龍 的分享
菜鳥窩是專業的程序猿在線學習平臺,提供最系統的 Android 項目實戰課程
如需轉載,請聯系菜鳥窩公眾號(cniao5),并注明出處。
[TOC]
前 言
3 月 6 日成功內推進入阿里巴巴校園招聘系統,內心頗為激動,但深知自身能力仍欠缺,所以踏實耕耘提升自身實力。
3 月 9 日完成在線測評和在線編程題,在線測評主要考察:快速閱讀能力、歸納總結能力、速算能力、突發事件處理能力,就是所謂的綜合素質能力吧;在線編程題只有一道,難度算中等吧,常去牛客網刷題的同學應該都比較有思路去解決編程題。
當天晚上就接到阿里巴巴面試官的電話,由于第一次電話面試,雖然小心臟有點緊張,但是也沒有忘記記錄下面試官問到的幾個問題,本文權當記錄下面試經歷,為自己總結經驗的同時也供各位準備校園招聘的同學參考。
電話面試
** 自我介紹**
前言
這里我就是簡單介紹了下自己在校的經歷,讓面試官對自己有個大致的了解。
當然,面試之前,面試官都有了解我們的簡歷以及在阿里巴巴校園招聘系統填寫的信息。自我介紹是向別人展示自己的一個重要手段,自我介紹好不好,甚至直接關系到給別人的第一印象的好壞及之后發展的順利與否。
聽過“首因效應”木有,就是第一印象效應,面試官極有可能根據面試開始的幾分鐘得到的印象,便已決定了面試的結果。
所以,把握住面試的自我介紹環節,絕對是面試成功的必要手段。
直接讓應聘者描述自己的能力、特點和個性的問題,主觀意識太強,有可能是不真實的。
因此,面試官當然不會僅從表面去判斷,他經常帶著要進一步考察的目的而認真聽著。
下面介紹下一般準備 自我介紹 的時候面試官對應聘者的考察內容以及應聘者需要重點突出的關鍵點(校招、社招同樣)
考察內容[1]:
- 考察應聘者的邏輯思維能力、語言表達能力及提煉概括能力。
- 考察應聘者口述內容與遞交簡歷是否一致,表達口吻是否真誠自信。
- 考察應聘者的時間掌控能力,對介紹內容的時間分配是否得當。
- 擴展了解,通過行為問題進一步考察應聘者的工作經歷及專業技能。
當了解了"自我介紹"這個環節的目的,我們就知道了如何去準備好這個環節。
自我介紹時的內容構成并沒有一定固定的模式,只要能夠主動、全面地表達自己則為佳。可把握重點突出的原則
重點突出[1]
- 你過去做過什么?(經歷、技能、業績)
1.突出經歷: 重點描述放在近 2 年,或是與現應聘崗位同行業性質的工作經歷上。
2.突出技能: 通過具體事例說明,在工作經歷或項目中表現的專業知識、核心技能。
3.突出數字: 呈現個人業績,多介紹與應聘崗位工作內容相關、類似的業績。
- 你現在來做什么?(動機、匹配、選擇)
1.職業切換: 即跳槽的原因,客觀真誠,從職業規劃方面出發。
2.崗位匹配: 推銷自己,從對方的需求出發,以招聘要求為基礎,展現你的優勢與匹配度。
3.選擇原因: 對應聘公司的了解,包括企業文化、規模、產品、渠道等等,表達你的關注。
- 你將來準備做什么?(目標、貢獻、期望)
1.發展目標: 轉換環境后想要達到的目標,要具體、合理,近期內可達成。
2.企業貢獻: 你能帶來什么新的東西,你能注入什么新的理念。
3.期望未來: 你期望得到的是什么,你渴望的平臺是怎樣的。
** 聊一下以往項目**
當時第二個問題就是問:讓我印象深刻的一個項目以及從中的收獲,這也是阿里巴巴校園招聘系統里面回答過的一個開放性問題:
2.請介紹你參與的印象最深刻的一個項目,為什么? 并且介紹你在項目中的角色和發揮的作用:
印象最深刻的一個項目是大一參加的物聯網比賽,這個比賽也是進入大學以來參加的第一個比賽;從報名參賽的懵懂到商討參賽作品的困惑再到決定最終方案的堅定,這個過程考驗著我們每一個成員的耐心以及創造力和想象力。
本次比賽的作品是:基于Zigbee的溫室大棚監控系統
我擔任這次的比賽的隊長,根據每個成員的興趣以及能力進行項目分工,我自己負責 PC 端監控系統。由于當時只學過 C++,查閱相關文獻得知 PC 端一般是使用 QT、C#、MFC 等桌面程序,又由于比賽時間緊急,最終選擇使用 MFC 來開發本系統的 PC 端監控軟件。雖然選擇了 MFC,但是我根本沒接觸過 MFC,盡管如此,我依然堅信我可以在短時間內學習使用 MFC 以及把學到的運用在這次的比賽中。
半個月的時間,我邊學 MFC 邊開發監控系統,同時還得和負責硬件的隊友協商數據包格式,調試監控系統和硬件設備的通信。
第一次在短時間內快速的學習一項沒接觸過的技術 MFC,加上比賽時間得壓迫感,然而最終實現目的,這讓我印象很深刻,讓我知道我有快速學習的能力。
也正是這次比賽經驗,我不再為自己設限,我相信只要敢想,沒什么是不可能的,這為我后來的學習提供了很大的幫助,至少在信心上。
此外,比賽過程也培養了我查閱文獻的能力,明白了團隊溝通的重要性。
面試時候回答的和上面差不多。
** 面試官提出的問題**
1 談一談 final 修飾符
可以修飾 class、field、method 等,被 final 修飾的類不可繼承,被 final 修飾的 field 不可修改,被 final 修飾的 method 不可重寫。
2 集合類的特性
面試的時候只回答了如下:
List: 元素有序 可重復
set: 存儲無序的,不可重復的元素 相當于高中的“集合”概念
map: map 的主要實現類是 hashmap
HashMap 是基于哈希表實現的,每一個元素都是一個 key-value 對;
擴展問題
- hashMap 底層實現原理
- hashMap 存取數據時間復雜度
3 String 類能繼承嗎?
不可以,因為 String 類是被 final 修飾符修飾的,所以不能被繼承。
4 2x8 運算提高速率
效率上看,使用移位指令有更高的效率,因為移位指令占 2 個機器周期,而乘除法指令占 4 個機器周期。
從硬件上看,移位對硬件更容易實現,所以會用移位,移一位就乘 2,這種乘法當然考慮移位了。
移位操作指令是一組經常使用的指令,屬于匯編語言邏輯指令中的一部分,它包括移位指令(含算術移位指令、邏輯移位指令),循環移位指令(含帶進位的循環移位指令),雙精度移位指令三大類。其功能為將目的操作數的所有位按操作符規定的方式移動 1 位或按寄存器 CL 規定的次數(0~255)移動,結果送入目的地址。目的操作數是 8 位 (或 16 位)的寄存器數據或存儲器數據。
5 單例模式,有什么類是單例
面試官問,有什么類是單例的,我真心想不起來哪些是單例類,但是我自己會使用單例模式進行實際開發,所以就簡要介紹下單例模式的使用。
查了下,JDK 中的單例類有:
- java.lang.Runtime 類
- java.lang.reflect.Proxy 類
6 線程調度
這里就主要問多線程調度、操作系統線程相關的概念問題。
多線程有兩種實現方法,分別是繼承 Thread 類與實現 Runnable 接口
同步的實現方面有兩種,分別是 synchronized 實現互鎖,wait 與 notify 實現線程通信。
sleep() 方法執行后線程進入阻塞狀態:阻塞狀態是需要外界激活,可能是時間, 可能是滿足某一條件,他才能激活運行,就算 CPU 有空閑,也需要滿足條件才會執行。
yied() 方法執行完后線程進入就緒狀態:就緒狀態是只要 CPU 有空閑隨時都可以執行,處于就緒狀態
Thread 類的 setPriority 函數可以設置優先級。
7 java 中有內存泄露嗎
java 理論上是不存在內存泄露,因為有垃圾回收器(GC)對內存進行釋放。
實際上,Java 也存在內存泄露,原因:主要是一些對象雖然不在被使用,但他們依然被引入(例如被長生命周期對象引用);
8 垃圾回收機制
什么情況下無法回收對象
主要是一些對象雖然不在被使用,但他們依然被引入(例如被長生命周期對象引用);
android 中 比如,靜態類中有 activity 變量
靜態變量的生命周期和應用程序一致。
9 有 NDK 開發經驗不
由于只是簡單的使用 NDK 開發了“Hello World”,所以直接回答面試官說自己沒經驗,只是簡單運行過 DEMO。
10 靜態變量、成員變量
成員變量 屬于對象,所以也稱為實例變量。
靜態變量 屬于類,所以也稱為類變量。
成員變量 存在于堆內存中。
靜態變量 存在于方法區中。
成員變量 隨著對象創建而存在,隨著對象被回收而消失。
靜態變量 隨著類的加載而存在,隨著類的消失而消失。
成員變量 只能被對象所調用 。
靜態變量 可以被對象調用,也可以被類名調用。
所以,成員變量 可以稱為對象的特有數據,靜態變量 稱為對象的共享數據。
注意:靜態方法中只能調用靜態變量,不能調用非靜態變量
因為類初始化的時候先加載靜態方法,但是非靜態變量這時候還沒初始化,所以編譯就會報錯。
11 Excption 與 Error 區別
Error 表示系統級的錯誤和程序不必處理的異常,是恢復不是不可能但很困難的情況下的一種嚴重問題;比如內存溢出,不可能指望程序能處理這樣的狀況;
Exception 表示需要捕捉或者需要程序進行處理的異常,是一種設計或實現問題;也就是說,它表示如果程序運行正常,從不會發生的情況。
12 子類能重寫父類的構造函數嗎
子類 不可以 重寫 父類 的 構造方法,因為構造方法是父類特有的,子類根本繼承不了父類的構造函數,所以子類不可以重寫父類的構造方法。
但是可以使用關鍵字 super 調用父類的構造方法。
13 四個權限修飾符
14 hashMap 存儲的時間復雜度
這個問題問答的不好,因為沒有了解過這個,面試后 google 了一下這個問題,似乎網上關于這個問題的介紹也很少:
HashMap 是基于哈希表的,在 O(1) 跟 O(n) 之間,HashMap 中 get(Object key) 時間復雜度是 O(1),
TreeMap 是基于平衡二叉樹的,為 O(logn) ;C++ 中是 log2(N)
15 堆、棧、方法區
Java 程序運行時的內存分配策略有三種,分別是靜態分配,棧式分配,和堆式分配;對應的,三種存儲策略使用的內存空間主要分別是靜態存儲區(也稱方法區)、棧區和堆區。
靜態存儲區(方法區):主要存放靜態數據、全局 static 數據和常量。這塊內存在程序編譯時就已經分配好,并且在程序整個運行期間都存在。
棧區 :當方法被執行時,方法體內的局部變量(其中包括基礎數據類型、對象的引用)都在棧上創建,并在方法執行結束時這些局部變量所持有的內存將會自動被釋放。因為棧內存分配運算內置于處理器的指令集中,效率很高,但是分配的內存容量有限。
堆區 : 又稱動態內存分配,通常就是指在程序運行時直接 new 出來的內存,也就是對象的實例。這部分內存在不使用時將會由 Java 垃圾回收器來負責回收。
總結
第一次面試,大概聊了 40 分鐘,整個過程表現得略緊張。
面試官問的問題基本都是 java 基礎、多線程、垃圾回收等重要且必須掌握的知識點。
總體感覺回答的不是很好,面試準備的不夠充分,再接再厲吧,通過這次電話面試,明白務實基礎才是最重要的。
以上列出的面試問題的回答并不完善,只是簡練的作答而已,建議根據這些問題查閱更多的資料深入學習各個知識點。
參考文獻:
更多內容,請關注菜鳥窩(微信公眾號ID: cniao5),程序猿的在線學習平臺。 歡迎勾搭小助手(lov730)加入高端技術交流群*
轉載請注明出處,本文出自菜鳥窩,原文鏈接:http://www.cniao5.com/forum/thread/c19357aa0ecf11e79be100163e0230fa