導航:首頁 > 源碼編譯 > 面試官問源碼

面試官問源碼

發布時間:2023-08-22 07:06:47

Ⅰ 學習java的同學都是怎麼讀源碼

剛參加工作那會,沒想過去讀源碼,更沒想過去改框架的源碼;總想著別人的框架應該是完美的、萬能的,應該不需要改;另外即使我改了源碼,怎麼樣讓我的改動生效了?項目中引用的不還是沒改的jar包嗎。回想起來覺得那時候的想法確實挺??

工作了一年多之後准備跳槽了,開始了一輪的面試,其中有幾個面試官就問到了相關的源碼問題:ArrayList、HashMap的底層實現,spring、mybatis的相關源碼。問源碼的面試一般就是回去等消息,然後就沒然後了。

那時候開始意識到,源碼這東西在之前的工作的中感受不到,但是在面試中好像面的還挺頻繁的,從此有意識的開始了jdk部分源碼的閱讀(主要是集合)。一開始看源碼,看的特別糙,知道個大概,知道ArrayList的底層實現是數組,HashMap的底層是散列表(數組+鏈表);更深入一點的擴容、hash碰撞等等就不知道了。

讀spring源碼起於工作中遇到了一個問題(springjdbcTemplate事務,各種詭異,包你醍醐灌頂!),排查一段時間最終是解決了,但過程讓我非常難受,各種上網查資料、各種嘗試,感覺就像大海撈針一樣,遙遙無期。我下定決心,我要看一看spring的源碼,於是我買了一本《spring源碼深度斗帶解析》,結合著這本書、打開著eclipse,開始了spring的源碼閱讀之旅。至此,讀源碼成了習慣,源碼已經進入了我的心裡。

後來,springboot的火熱,讓我也想蹭上一蹭,於是有了springboot的啟動源碼系列,雖然還在進行中,指侍但是我相信我能將其完成;工作中用到了shiro,我又結合著《跟我學shiro》將shiro的源碼看了個大概,有了shiro源碼系列博文,還差一篇認證與授權(應該很快就能面世),shiro源碼系列就封筆了。最近在搭建自己的後台管理系統,用到了quartz,集成的過程也遇到了一些問題,因此有了quartz的兩篇文章。

慢慢的,從一味的網上找資料變成了很多時候會從源碼中找答案。不求能讀太多的源碼,但願自己接觸的技術都能讀上一讀,路漫漫其修遠兮,吾將上下而求索!

大家為什麼要讀源碼?

很多人一定和我一樣的感受:源碼在工作中有用嗎?用處大嗎?很長一段時間內我也有這樣的疑問,認為哪些有事沒事扯源碼的人就是在裝,只是為了提高他們的逼格而已。

那為什麼我還要讀源碼呢?一剛開始為了面試,後來為了解決工作中的問題,再後來就是個人喜好了。說的好聽點是有匠人精神;說的委婉點是好奇(底層是怎麼實現的);說的不自信點是對黑盒的東西我用的沒底,怕用錯;說的簡單直白點是提升自我價值,為了更高的薪資待遇(這里對真正的技術迷說聲抱歉)。

源碼中我們可以學到很多東西,學習別人高效的代碼書寫、學習別人對設計模式的熟練使用、學習別人對整個架構的布局,等等。如果你還能找出其中的不足,那麼恭喜你,你要飛升了!會使用固然重要,但知道為什麼這么使用同樣重要。從模仿中學習,從模仿中創新。

讀源碼不像圍城(外面的人想進來,裡面的人想出去),它是外面的人不想進來,裡面的人不想出去;當我們跨進城內,你會發現(還是城外好,皮!)城內風光無限,源碼的海洋任我們遨遊!

首先我們要對我們的目標有所了解,知道她有什麼特點,有些什麼功能。對對方都還不了解,就想著進入別人的內心世界,那不是臭不要臉嘛,我們要做一個有著流氓心的紳士;對她有個大致的了解了,就可以發起攻勢,一舉拿下。

那麼怎麼樣了解了,方式有很多,我這里提供幾種,僅供參考

最好的方式就是官方參考指南,親生父母往往對孩子是最了解的,對孩子的描述也是最詳細的;比唯銷吵如SpringBootReferenceGuide就是對springboot最詳細的描述,怎麼樣使用springboot、springboot特性等等,通過此指南,springboot在你面前一覽無遺;

但是,springboot畢竟是外國人的孩子,如果英語不好,估計讀起來有點頭疼了,不過我們有google翻譯呀,咬咬牙也是能看的。源碼世界的丈母娘、老岳丈是非常慷慨的!

其次是書籍,國外優秀的有很多,國內也不乏好書,比較推薦此方式,自成體系,讓我們掌握的知識點不至於太散。這就是好比是源碼的閨蜜,對源碼非常了解,重點是挺大方,會盡全力幫助我們了解源碼。

再次就是博客,雖然可能覺得知識點比較散,但是針對某個知識點卻特別的細,對徹底掌握非常有幫助,園子內就有很多技術大牛,寫的博客自然也是非常棒,非常具有學習價值。當然還有社區、論壇、github、碼雲等等。這就是源碼的朋友圈,我們從中也能獲取到非常多關於源碼的信息。

設計模式的了解

優秀的框架、技術從不乏設計模式;jdk源碼中就應用了很多設計模式,比如IO流中的適配器模式與裝飾模式、GUI的觀察者模式、集合中的迭代器模式等等;spring源碼中也是用到了大量的設計模式。設計模式有什麼優點、各適用於什麼場景,不是本文的內容,需要我們大家自行去了解。

我們只需要對一些常用的設計模式有個大致了解,再去讀源碼是比較好的;不需要將23種設計模式都通讀,也不需要將常用設計模式完全理解透;對於全部通讀,我們時間有限,另外有些模式確實不太好理解、用的少,性價比不高,沒必要全部都讀。

推薦書籍:《HeadFirstDesignPatterns》(中文版:《HeadFirst設計模式》)、《Java與模式》;

另外我比較推薦的一種學習設計模式的方式是讀別人博客:java_my_life,劉偉技術博客,chenssy的設計模式;

設計模式之於源碼,就好比逛街購物之於女人,想順利勾搭源碼,我們需要好好掌握設計模式這個套路。

配合ide進行斷點追蹤

我們通過源碼的圈子對源碼的了解終究只是停在表面,終究還是沒有走進她的內心,接下來我就和大家分享下,我是如何走進她的內心的!

相信看過我的源碼博客的小夥伴都知道,我非常喜歡通過idea斷點來進行源碼追蹤,斷點追蹤源碼是我非常推薦的一種方式。斷點不僅可以用來調試我們的代碼,也可以用來調試我們用到的框架源碼。

面對未知的、茫茫多的源碼,我們往往沒有足夠的時間、經歷和耐心去通讀所有源碼,我們只需要去讀我們關注的部分即可(有人可能會說我都不關心,這?)。那為什麼要用斷掉調試的方式來跟源碼,而不是直接從源代碼入手去跟我們關注的部分呢?

嘗試過的小夥伴應該知道,如果我們對源碼不熟悉,直接通過源碼的方式去跟,一方面很容易迷路(多態,會有很多子類實現),不知道接下來跟哪一個,另一方面也很容易跟丟,當我們跟入的很深的時候,很有可能就忘記上一步跟到哪了。所以讀源碼的重要性淺顯易懂了。

Ⅱ 作為一個面試官,我會問初級java工程師哪些問題

初級java工程師多數是剛畢業或者工作1,2年的新人。對於新人,面試中基礎問題會問道很多,因為先要考察這個人的基礎。

關於基礎類的題目,我在面試初級java工程師的時候一般會問下面兩大類問題,每類5個題目,這樣下來我就基本可以了解這位工程師的程度了。

java基礎類

面向對象基礎類

最後,如果前面問題回答的不錯,會補充兩個編程習慣問題。

1.在你寫過的代碼中,你寫過超過2層的循環嗎,怎麼實現的?

回答:沒有,就算ok;如果回答有,聽一下實現,如果原因說不出來,扣分。

2.在你寫過的代碼中,if語句最多嵌套了幾層,最多有多少分支,怎麼實現的?

回答:3層以下,就算ok;如果回答3層以上,聽一下實現,如果原因說不出來,扣分。

4,5個分支,就算ok;如果回答5個分支以上,聽一下實現,如果原因說不出來,扣分。

最後兩個題其實比較陷阱,但是正是一個反向的思考才能了解面試者之前的工作狀態。

如果面試者在平日里就有好的習慣,自然不用擔心。

Ⅲ 在面試PHP工程師時會被問哪些問題

面試官在面試求職的PHP工程師時所問的問題千奇百怪,但由於他們需要的是一個PHP工程師,所以他們提問的問題一般不會偏離以下幾個角度:
技術線(偏深度):
1. 基礎知識,比如數據結構,多線程,I/O,Http協議等。
2. 語言深度,比如PHP的運行機制,性能優化,APC(以及其原理等)。
3. 源碼閱讀,比如看過哪些框架,其中的機制是怎麼樣的,往細了問。
4. 知識寬度,靜態語言,比如C、Java等,我始終覺得只會一門語言不是什麼好事情。
5. 項目經驗,做過什麼,是否復雜,負責什麼,做了什麼。
業務線(偏能力):
1. 業務能力,也就是之前做過的項目(擔任的角色,負責的部分)。
2. 溝通能力,這一點能從溝通中就看出來。
3. 主動性,之前主動推動的事物等等,哪怕是一個小的點也可以。
4. 抗壓能力,之前做過的項目中去挖掘細節。
5. 技術寬度,了解不一定要深入,一般會問一些比較泛的,比如多語言,Linux操作,HTTP協議等。

android面試:位元組飛書5輪面試Android Framework層的源碼就問了4輪!

說起位元組跳動的這次面試經歷,真的是現在都讓我感覺背脊發涼,簡直被面試官折磨的太難受了。雖然已經工作了三年,但是也只是純粹的在寫業務,對底層並沒有一個很深的認識,這次面試經歷直接的讓我感受到我和那些一線大廠開發之間的差距,說句實話,是真的很難受。

也不多說什麼了吧,我們還是來回顧一下我在位元組跳動的這次面試經歷。 一共是面了5輪,至於為什麼面了5輪的原因,可能是面試官還是想試試我的技術水平吧

雖然說最終還是沒能拿到offer,但是這次的面試經歷讓我更加直觀的了解了我和大廠Android開發之間的差距,算是收益頗豐吧

總體來講,一面還是答得不錯的,或許是面試官覺得小瞧了我,接下來的四輪面試我彷彿遭到了嚴打

最後嘮叨幾句,希望各位沒拿到offer的真的不要灰心,可能你之前所有的失敗都是你成功的墊腳石,我面掛的時候也曾經自閉過,但更多的是反思,如何調整自己的復習計劃。在復習的時候一定要有自己的強項,能把這個知識點理解的很透徹並且把相關的知識點拓展出去。另一方面就是讓面試官看到你對這個崗位的熱情,能夠自發性地去學習與崗位相關的東西,下面給大家分享一份我珍藏的《2022最新Android中高級面試題合集》質量非常搞,希望能對你有幫助!

內容概要 :包括 Handler、Activity相關、Fragment、service、布局優化、AsyncTask相關、Android 事件分發機制、 Binder、Android 高級必備 :AMS,WMS,PMS、Glide、 Android 組件化與插件化等面試題和技術棧!內容特點:條理清晰,含圖像化表示更加易懂。

Android Framework 開發雖然比較偏底層,圈子窄,但是能掌握一些原理的東西,可以觸類旁通,往應用層發展也可以。目前大公司的app開發都要基於模塊化、層次化、組件化、控制項化的思路來設計架構,而這一切的基礎都建立在Android Framework系統框架底層原理實現之上。

Ⅳ 面試時項目介紹需要帶源碼嗎

如果你面試的是程序員,需要帶上源碼的。

在面試的時候能在源碼上和面試官對話,那相當於增加了工作經驗,那通過的機會還是很高的。

自學或者是應屆生,缺乏實戰經驗。那麼就要在框架的源碼上下功夫了,核心原理等內容。比如Spring、Redis等這種知名框架,在面試的時候能在源碼上和面試官對話,那通過的機會還是很高的。

只要問項目中的核心模塊業務流程,在其中挑一些技術點問如何實現的就能大概判斷是否真的做過項目了。

如果你是在校學生,還可以參加一些編程社團,或者是參加比賽,另外抓住實習機會,高效利用實習去學習。

填寫簡歷技巧:

哪怕大家以Java只過一個五子棋游戲,你也可以寫成,採用博弈搜索的演算法並且使用а-β剪枝減少演算法的復雜度。

使用大量Java的數據結構並且閱讀源碼,增加了對JDK的理解。

寫項目經驗需要注意的是重點不在於介紹項目,重點是我在項目中做了什麼。為大家梳理STAR原則描述我們的項目。

    Ⅵ 請問下 android游戲開發面試 對方公司要我帶源碼過去 請問這正常嗎

    您好,如果您所指的是您的個人作品的源碼,您可以自己考慮下是否有保密的必要性。如果是您之前某個公司或者其他的程序源碼,您需要徵求源碼法定擁有者的同意才行。至於公司的這個要求,完全是可以理解的,正常的,因為考察您所撰寫的源碼就能最直接的了解您的編程能力和編程習慣,能方便他們的考核。

    閱讀全文

    與面試官問源碼相關的資料

    熱點內容
    伺服器上如何查看伺服器的埠 瀏覽:676
    單片機伺服器編譯 瀏覽:768
    單口usb列印機伺服器是什麼 瀏覽:859
    戰地五開伺服器要什麼條件 瀏覽:954
    在word中壓縮圖片大小 瀏覽:253
    javatomcat圖片 瀏覽:417
    程序員生產智能創意 瀏覽:65
    匯和銀行app怎麼登錄 瀏覽:381
    騰訊伺服器如何上傳源碼 瀏覽:745
    單片機的原理概述 瀏覽:510
    火控pdf 瀏覽:267
    如何復制雲伺服器centos環境 瀏覽:984
    債權pdf 瀏覽:303
    紅色番字的app怎麼下載 瀏覽:876
    雲伺服器流程教課 瀏覽:702
    中國農業銀行app怎麼沒有網 瀏覽:997
    幾率表演算法 瀏覽:902
    程序員理工科 瀏覽:708
    企業郵箱登錄收件伺服器地址 瀏覽:560
    計算機思維與演算法設計的重要性 瀏覽:664