面經中高頻知識點概括(三)

一、說說你對面向對象的理解html

附:mysql

(感受這篇百度經驗講得很生動:如何理解面向對象linux

面向對象是基於萬物皆對象這個哲學觀點. 把一個對象抽象成類,具體上就是把一個對象的靜態特徵和動態特徵抽象成屬性和方法,也就是把一類事物的算法和數據結構封裝在一個類之中,程序就是多個對象和互相之間的通訊組成的.程序員

面向對象具備封裝性,繼承性,多態性.面試

封裝隱蔽了對象內部不須要暴露的細節,使得內部細節的變更跟外界脫離,只依靠接口進行通訊.封裝性下降了編程的複雜性.ajax

經過繼承,使得新建一個類變得容易,一個類從派生類那裏得到其非私有的方法和公用屬性的繁瑣工做交給了編譯器. 而繼承和實現接口和運行時的類型綁定機制所產生的多態,使得不一樣的類所產生的對象可以對相同的消息做出不一樣的反應,極大地提升了代碼的通用性. 算法

總之,面向對象的特性提升了大型程序的重用性和可維護性.sql

(參考:http://blog.csdn.net/dayuqi/article/details/8095665)數據庫

 

------<記最近的面試經歷>------編程

(上海)樂其網絡科技有限公司---軟件開發實習生

下午從嘉定花了一小時一刻鐘到達公司所在的長寧區(15:00),首先面臨的就是HR給了我一套筆試題和我的信息表。

筆試題爲3道算法題:

一、給了一個遞增二維數組(即行和列的數字都是遞增的)和一個整數,判斷這個整數是否在此二維數組中。要求寫一個算法,分析算法複雜度,給出最優的算法!如:二維數組爲

1 2 4 6 9      整數爲:9

2 4 5 7 11

5 6 8 9 13

7 8 9 12 15

思路:

二、一個遞增數組,將其前面一部分旋轉到尾部,寫一個算法求此數組中的最小值,並分析算法複雜度。如:輸入7 8 9 1 2 3 4 6,輸出爲1

思路:

三、給定一個字符串,求出全部的字符串組合狀況!如:「abc」—>"a","b","c","ab","ac","bc","abc"

思路:

一面:

面試官是一個研發工程師,正好以前在我去年實習過的歐特克公司工做過!具體問的技術問題爲:

一、說說get和post的區別

二、說說session和cookie的區別

三、說說什麼叫多態?()

四、說說你知道的c語言中經常使用的關鍵字,我說了extern和static及auto,而後他說能夠了,那具體說說extern和static的用法吧

。。。。。。

二面:

另一位技術人員,繼續給我出算法題:

一、蛇形矩陣的幾種變形狀況下的算法(給我出了幾個我都見過,而後就跳過了)

二、一道很簡單的題:

一個矩形,長爲a,寬爲b,且知足條件:a<=c,b<=d,求在此矩形等比縮放達到面積最大的狀況下,長和寬的取值。

三、有沒有本身想深刻了解的技術方向,或最近在專研些什麼技術

。。。。。。

三面:

HR面

一、介紹下本身

二、問我有沒有女友,以及父母是作什麼的,家境如何等等

三、目前找實習都投了哪些公司?以及狀況如何?若是給你機會,你最想去哪一個公司?爲何?

我說以前投過百度,騰訊,微軟,招商銀行信用卡中心,中國銀聯,EMC和攜程等等,若是給我機會,我最想去騰訊,緣由是:一方面跟我目前所學方向比較對口(騰訊主要是招C++相關的吧),而是感受騰訊的企業文化比較好,技術大牛也比較多能學到不少東西等等

四、在公司裏你期待一種什麼工做狀態?爲何?

五、除了學習嗎,你日常都喜歡作些什麼?爲何?

我說喜歡運動如:跑步(對參加各類跑步活動或比賽比較感興趣),打羽毛球、乒乓球等等,偶爾也喜歡去K歌吃大餐等等~

我解釋了喜歡跑步的緣由:一方面跑步是能享受一個很好思考和沉下心來的機會(喜歡那種放空抑或沉思的狀態),二是做爲一種全身性的運動,跑完後人會特別清爽等等~

六、對本身將來的職業規劃

七、對實習薪資的要求

八、我想了解的問題

。。。。。。

四面:

項目經理面

一、介紹下本身

二、看你的項目經歷什麼的挺豐富的,稍微介紹下吧

三、以前你的實習經歷都是軟件公司,而你投簡歷面試的公司有銀行,互聯網,軟件等,你對本身的職業方向有明確要求嗎或者說你最想從事哪一方向?

四、講了下公司裏各部門之間的關係或者說合做機制,問個人見解

五、我有什麼問題想問

 

我問的問題:

一、我知道貴公司是作母嬰電商這一塊的,能夠簡單概述下公司的業務和架構嗎?

答:公司是由一位前谷歌資深技術工程師與2007年在杭州創立的,讀書經歷是在美國,而我所求職的部門老大也是前微軟的資深工程師過來執掌的,意在說明公司人才實力。不過,目前公司的目標市場主要是國際市場,。。。。。。

二、做爲實習生,在公司裏咱們的角色或職責是怎樣的?

 

再分析一篇好的面經(源自牛客網)

【面經】阿里+百度+CVTE面經合集(offer均已收到)

1、CVTE

一面:

第一個是二分查找,我用遞歸和非遞歸各寫了一遍,重點就在於下標的控制;另外一道是在N個數中求前M大個數,其實也很簡單,思路就是使用快速排序的思想,每一次當把一個數字放在正確的位置上的時候跟M進行比較,其實在劍指offer上有原題。好在寒假的時候把劍指offer刷了不少遍,因此很快也寫出來了。我我的以爲在寫代碼以前,有不少事情須要跟面試官進行交流,好比函數的參數、返回值、還有一些異常狀況的處理,提早跟面試官約定好。好比我在寫代碼以前,就問面試官:「假設參數是(int * a rr, int length, int m),在這種狀況下,可能會有四種狀況會致使程序出現異常狀況,① arr == NULL ② length <= 0 ③ m > length ④ m <= 0,詢問他在這四種狀況下咱們該如何處理?」面試官聽完以後一下就有興趣了,及時跟面試官溝通,一方面是防止思路與面試官預期的差距太大,面試官出的題,所以他有責任讓面試者明白他的意思,另外一方面表現咱們積極思考,向面試官展現咱們的思考能力。可能以前的算法寫的太順利,因此給本身創建了自信,而且面試官對個人第一印象也好,後面的問題回答的很輕鬆,有struts2和SpringMVC的區別、Spring中IoC和AOP的理解,不過在數據庫方面被難住了,在MySQL中如何定爲查詢效率較慢的SQL語句,好比慢查詢日誌、EXPLAIN關鍵字還有PROFILES等。可是總得來講,一面進行的很順利。

二面:CVTE的面試流程是,若是一面的面試官以爲經過了,就會示意現場接待的姐姐,姐姐會安排在場外休息一下,二面大概在十分鐘以後進行;而若是以爲不符合要求,姐姐就會親切地告訴面試者,今天的面試結束了,能夠先回去等消息。等了十分鐘以後,二面如約而至,二面是一個年紀稍大,可是頗有風度的中年人,過後學長說那是他們部門的BOSS,面試官讓我設計了一個場景,青蛙爬井, 就是畫畫UML,兩個類圖,和他們的關係。最後擴展成面向接口的思惟,不得不說BOSS確實功力深厚,糾正了我不少問題,最後才勉強滿意。而後就是 分析項目,挑了一個我比較熟悉的,問了不少問題,好比頁面的跳轉關係、我所作的功能模塊,讓我一邊畫圖一邊解釋,我自認項目準備的還算充分,由於都是本身作的,因此這部分也算順利。後面就沒有什麼技術問題,問了一下我何時能來實習,還有在校的經歷,同窗之間是如何評價個人,而後就結束了。
HR面:那個問卷問的很全面,好比家庭情況、爲何選擇去廣州、什麼狀況下會放棄這份工做、小時候印象最深的一件事情、列舉出近期讓你傷心的事情以及你是如何處理不良情緒的。若是各位到了這一步,必定要謹慎做答,這些問題都會列入到綜合評測中。後面的面試就是把這些問題現場問一遍,說是HR面,但我總感受是高管面,一個高管面三個面試者。
面試出來以後,等作到地鐵上,廣州負責的CVTE校招的學長就已經告訴我經過了,效率很是高。3月26號拿到的offer,這是春招的第一個offer,當時的心情仍是很激動的。
 
2、百度
百度是學長內推,技術面是兩輪技術面試。
一面:簡單的自我介紹,由於是電話面試,因此流暢了不少(大家懂的)。一個小時滿滿的技術問題,因此就不用向上面再贅述了,直接上乾貨
 
1. 是否瞭解動態規劃
動歸,本質上是一種劃分子問題的算法,站在任何一個子問題的處理上看,當前子問題的提出都要依據現有的相似結論,而當前問題的結論是後 面問題求解的鋪墊。任何DP都是基於存儲的算法,核心是狀態轉移方程。
2. JVM調優
其實我沒有實際的調優經驗,可是我主要介紹了一下JVM的分區、堆的分代以及回收算法還有OOM異常的處理思路
3. 分別介紹一下Struts2和Spring
不用多說,這方面比我答得好的同窗確定大有人在,就不出醜了
4. 職責鏈模式(設計模式)
GoF經典設計模式的一種
5. 實踐中如何優化MySQL
我當時是按如下四條依次回答的,他們四條從效果上第一條影響最大,後面愈來愈小。
① SQL語句及索引的優化
② 數據庫表結構的優化
③ 系統配置的優化
④ 硬件的優化
6. 什麼狀況下設置了索引但沒法使用
(1) 以「%」開頭的LIKE語句,模糊匹配
(2)OR語句先後沒有同時使用索引
(3)數據類型出現隱式轉化(如varchar不加單引號的話可能會自動轉換爲int型)
(4)WHERE字句的查詢條件裏有不等於號(如:WHERE column!=...)
(5)查詢的列不是獨立的,如:索引是表達式的一部分,或者是函數的參數
(6)當索引是複合索引,卻並無用到該索引中的第一個字段做爲條件時
->能夠測試以下:(也可參考: 哪些狀況下索引會失效)

此外,查看索引的使用狀況

show status like ‘Handler_read%’;
你們能夠注意:
handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數
handler_read_rnd_next:這個值越高,說明查詢低效
7. SQL語句的優化
order by要怎麼處理
alter儘可能將屢次合併爲一次
insert和delete也須要合併
等等
8. 索引的底層實現原理和優化
B+樹,通過優化的B+樹
主要是在全部的葉子結點中增長了指向下一個葉子節點的指針,所以InnoDB建議爲大部分表使用默認自增的主鍵做爲主索引。
 
9. HTTP和HTTPS的主要區別

區別主要以下:

一、https協議須要到ca申請證書,通常免費證書較少,於是須要必定費用。

二、http是超文本傳輸協議,信息是明文傳輸,https則是具備安全性的ssl加密傳輸協議。

三、http和https使用的是徹底不一樣的鏈接方式,用的端口也不同,前者是80,後者是443。

四、http的鏈接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

更詳細的可參考:HTTP與HTTPS的區別

10. Cookie和Session的區別

前面已整理過,也可參考(HTTP協議詳解)裏的相關部分。

11. 如何設計一個高併發的系統
① 數據庫的優化,包括合理的事務隔離級別、SQL語句優化、索引的優化
② 使用緩存,儘可能減小數據庫 IO
③ 分佈式數據庫、分佈式緩存
④ 服務器的負載均衡

12. linux中如何查看進程等命令

13. 兩條相交的單向鏈表,如何求他們的第一個公共節點
很簡單的鏈表題目,博客上的作法一搜一大把,我記得當時答在興頭上,又給面試官解釋了一下如何求單向局部循環鏈表的入口,鏈表中很經典的問題(其實鏈表也就那幾個經常使用算法,好比逆制、求倒數第K個節點,判斷是否有環等)
大概八十分鐘吧,最後問面試官有沒有對個人意見或者建議,面試官說以爲我今晚的面試表現比簡歷上寫的更出色。。。對面試官的好感度瞬間飆升

 

二面:可能一面面試官對個人評價還算不錯,二面面試官一口氣考了我11個設計模式(手動微笑),對,是11個設計模式,有直接提問,也有在場景設計中引導我使用。總共加起來11個,分別是:單例模式、簡單工廠模式、工廠模式、抽象工廠模式、策略模式、觀察者模式、組合模式、適配器模式、裝飾模式、代理模式、外觀模式。而後就是設計一個公司下有部門、部門下有經理和員工,經理能夠管理經理和員工這樣的一個模型,組合模式一套用就好了。後面還問了幾個非技術問題,好比和產品、測試發生矛盾了怎麼處理,答應的任務發現完成不了該如何處理等,你們若是遇到請隨意裝逼。
 
百度給我最大的印象就是每次新的面試,面試官必定會問何時能來實習,可以實習多長時間,答案符合要求了才進行下面的面試。聽說百度今年要求6個月的實習時間,回答兩三個月的都再無下文。
 

機智的我無論哪家公司問都是說從即日起到大四畢業,中間出了期末考試和畢業設計,都能參與實習,近期就能參加實習。不是故意想騙人,只是目前尚未和HR談條件的籌碼,這樣說了就算最後去不了,也算是一次面試機會,若是一開始就拒絕的話,連面試機會都沒有。等到技術面試結束了,跟一開始比,就有了談條件的籌碼,這個時候你們再根據狀況合理要價

 
3、阿里巴巴
一面:
1. 二叉樹的遍歷方式,前序、中序、後序和層序
二叉樹自己就是一個遞歸的產物,那前序舉例,訪問根節點,而後左節點,再右節點,若是左節點是一棵子樹,那麼就先訪問左子樹的根節點,再訪問左子樹的左節點,依次遞歸;而層序,使用隊列進行輔助,實現廣度優先搜索
2. volatile關鍵字
給你們推薦兩本書:《Java多線程實戰》和《Java併發編程的藝術》,這會兒已經三點了,腦子有點亂書名可能未必無誤。對Java實現多線程描述的很是詳細。現場跟面試官老師扯了不少,我在這裏挑主要的說
volatile關鍵字是Java併發的最輕量級實現,本質上有兩個功能,在生成的彙編語句中加入LOCK關鍵字和內存屏障
做用就是保證每一次線程load和write兩個操做,都會直接從主內存中進行讀取和覆蓋,而非普通變量從線程內的工做空間(默認各位已經熟悉Java多線程內存模型)
但它有一個很致命的缺點,致使它的使用範圍很少,就是他只保證在讀取和寫入這兩個過程是線程安全的。若是咱們對一個volatile修飾的變量進行多線程下的自增操做,仍是會出現線程安全問題。根本緣由在於volatile關鍵字沒法對自增進行安全性修飾,由於自增分爲三步,讀取-》+1-》寫入。中間多個線程同時執行+1操做,仍是會出現線程安全性問題。
3. synchronized
鎖的優化:偏向鎖、輕量級鎖、自旋鎖、重量級鎖
鎖的膨脹模型,以及鎖的優化原理,爲何要這樣設計
與Concurrent包下的Lock的區別和聯繫
Lock可以實現synchronized的全部功能,同時,可以實現長時間請求不到鎖時自動放棄、經過構造方法實現公平鎖、出現異常時synchronized會由JVM自動釋放,而Lock必須手動釋放,所以咱們須要把unLock()方法放在finally{}語句塊中
4. concurrentHashMap
兩個hash過程,第一次找到所在的桶,並將桶鎖定,第二次執行寫操做。
而讀操做不加鎖,JDK1.8中ConcurrentHashMap從1600行激增到6000行,中間作了不少細粒度的優化,你們能夠查一下。
5. 鎖的優化策略
① 讀寫分離
② 分段加鎖
③ 減小鎖持有的時間
④ 多個線程儘可能以相同的順序去獲取資源
等等,這些都不是絕對原則,都要根據狀況,好比不能將鎖的粒度過於細化,否則可能會出現線程的加鎖和釋放次數過多,反而效率不如一次加一把大鎖。這部分跟面試官談了好久
6. 操做系統
這部分基本是跪着跟面試官交流的,由於非計算機專業,對這個樓主確實比較欠缺
 
不過好在前面的表現還能夠,順利經過了。
 
 
二面:十分鐘休息,二面面試官先問了一些可有可無的問題,好比學校的專業課、平時如何學習新技術等等,而後切入正題,讓我選一個熟悉的項目,三分鐘畫出大致架構圖,我在項目部分的準備還算充分,可是面試官真的水平很是高。
在項目部分,多是我整個阿里面試過程當中最提心吊膽的,緩存的使用,若是如今須要實現一個簡單的緩存,供搜索框中的ajax異步請求調用,使用什麼結構?我回答ConcurrentHashMap,但是內存中的緩存不能一直存在,用什麼算法按期將搜索權重較低的entry去掉?我說先按熱度遞減放進一個CopyOnWriteArrayList中,保留前多少個而後再存回ConcurrentHashMap中,面試官說效率太低,有沒有更高效的算法,我僞裝左思右想(用僞裝實際上是由於,確實想不到方法)
後來面試官說其實這個問題有點難了,換一個,又跟我扯到線程的問題,大致就跟一面面試官問的差很少,就不贅述了。這部分感受面試官還比較滿意,就問題TCP如何保證安全性,我說三次握手、四次回收、超時重傳、保序性、奇偶校驗、去重、擁塞控制。還講了滑動窗口模型。
後面又考了一些紅黑樹的問題,問到B+數,還有JDK1.8中對HashMap的加強,若是一個桶上的節點數量過多,鏈表+數組的結構就會轉換爲紅黑樹。
面試官問我項目中使用的單機服務器,若是將它部署成分佈式服務器?我當時內心一驚,這個問題確實沒有準備過,眼看就要被問死了,臨時抖了個機靈,說有一次跟一個師兄嘗試這麼作的時候,遇到了session共享問題,而後成功地把面試官引向了session共享的問題,跟他討論了10分鐘左右的分佈式系統中如何作到session共享。後面面試官可能也以爲我這部分
手寫一個線程安全的單例模式,經典的不能再經典,沒什麼好說的,懶漢餓漢隨便選一個。
還有一些MySQL的常見優化方式、定爲慢查詢等,回答的七七八八,以前面試總結的問題還有印象,因此感謝本身有面試完及時總結的習慣。
最後問了問我平時都如何學習、最近都在看什麼書,來實習的話學校的考試如何解決等等。
面試官告訴我他的問題已經問完了,我看沒有讓我提問的意思,因此我起身跟面試官握了個手(我在參加現場面試的時候有這樣的習慣,握手的同時跟面試官強調,「我很珍惜此次面試機會」)
 
二面出來以後挺緊張的,感受本身答的仍是有不少漏洞,可能面試官雖然發現了,可是以爲我態度不錯,虛心學習,因此仍是很幸運到了HR面,HR面就很少說了,只要不跟HR亂提要求,好比不考慮某某城市之類的做死要求,再跟HR好好談談咱們對知識的渴望、但願獲得鍛鍊的決心,我以爲都沒什麼問題(網易除外,都是淚)
我還重點給HR講了一下我對項目的反思,哪些地方能夠作的更好。又把一次學習新技術時間又很緊的盡力誇大了一下,HR聽完以後表示很是羨慕咱們這樣搞技術的,感受天天作的事情都頗有激情。
 
最後就是通過三天的等待,順利拿到阿里巴巴的實習offer
 
樓主從三月初到如今,基本能叫的出來的公司都參加了各類面試,很慚愧拿到offer的只有這三家。可是通過大大小小二三十次的面試,我以爲對一個後臺程序員來講,重要的不僅是語言,還有數據結構算法、網絡基礎、併發、數據庫、設計模式、操做系統、linux等等不少不少技術須要掌握。我就有很強烈的感受,單論Java,在樓主的周圍其實有不少比樓主強得多的人,但是他們有的人面試一直不順利,緣由就在於其餘的知識點相對薄弱。這點在阿里巴巴面試中就體現的很深入。最後HR問我做爲非計算機專業學生,什麼專業課沒有學到最讓我遺憾?我回答網絡基礎、操做系統、計算機組成原理和系統的數據庫知識體系。雖然僥倖拿到了阿里巴巴的offer,但這一次的面試讓我深深地看到了本身差距。跟二面面試官交流的時候,他考我項目,我就拼命想把他往框架上拉,想解釋hibernate和Spring還有mybatis,結果面試官一次也沒有上當。每當我說這些的時候,面試官就會打斷我,說我不用解釋框架,咱們就創建在這些東西都雙方都清楚的基礎上。因此真心勸各位準備面試的朋友們,多重視基礎。基礎可以決定學習能力和思惟方式,而學習能力和思惟方式最終決定一個程序員能走多遠。
相關文章
相關標籤/搜索