前言
先來自我介紹:
老家農(nóng)村,家里好不容易把我送到大城市讀書,大學(xué)非985,211,但在我們老家,能出一個(gè)本科大學(xué)生也是非常不容易的。因?yàn)檗r(nóng)村信息的相對閉塞,我對大學(xué)專業(yè)一無所知,加上分?jǐn)?shù)并非前茅,最后被調(diào)劑一個(gè)我并不喜歡的專業(yè),這里就不透露自己是什么學(xué)校了,只能說畢業(yè)之后為了能多賺點(diǎn),選擇了送外賣,這一送就送了將近3年的時(shí)間。
為什么學(xué)編程?
接觸到編程是一次很偶然的機(jī)會(huì),有一次送外賣,對方是自己的學(xué)長,他是計(jì)算機(jī)專業(yè)的,畢業(yè)后就進(jìn)了一線互聯(lián)網(wǎng)公司,那之后就偶爾有跟他聊人生聊未來,一次契機(jī),他勸我何不自學(xué)編程,來做程序員?后來考慮了很久,自己也綜合對比了各行各業(yè)的發(fā)展,最后決定學(xué)習(xí)編程,選擇了Java方向。
拼多多大廠錄取通知

自學(xué)方法有哪些?
學(xué)習(xí)類網(wǎng)站:這類網(wǎng)站主要包括了各種語言與各種原理的學(xué)習(xí),基本上覆蓋了需要,很完整的一套視頻教程.

博客類網(wǎng)站:這類網(wǎng)站可以吸收一下大牛的思想,順便可以供自己做一下筆記,"有事沒事"就寫一篇博客.

書本:書本的話也是一個(gè)自學(xué)的好途徑,這個(gè)要看自己的需要,是編程語言方面的還是系統(tǒng)方面的還是網(wǎng)絡(luò)方面的。一本好的書可以幫助你少走很多的彎路。

自學(xué)的方法有哪些?
1.自學(xué)于文本
第一級(jí),是有一個(gè)問題,你能不能從一堆書里找到答案。一個(gè)問題要是用搜索引擎就能解決,那就太簡單了。我們關(guān)注的是你在學(xué)業(yè)中自發(fā)地冒出來的大問題。比如你用一本中國出版的教科書學(xué)量子力學(xué),公式和做題你都會(huì)了,但是你感覺自己對“不確定性原理”這個(gè)概念沒有搞清楚,那你怎么辦?課本只是指向月亮的一根手指,我們追求的是月亮本身,多參考幾根手指更容易定位。有時(shí)候你會(huì)驚訝地發(fā)現(xiàn)像“不確定性原理”這么基本的概念,不同的書講法都不一樣,而有的書明顯是講錯(cuò)了!這能讓你收獲一股巨大的自信力!你的見識(shí),超過了那個(gè)作者。
第二級(jí),是建立自己的系統(tǒng)。知識(shí)是個(gè)系統(tǒng)。而作為自學(xué)者,你的個(gè)人知識(shí)系統(tǒng)應(yīng)該是具體的 —— 也就是說你得把它寫下來。你應(yīng)該對每一個(gè)課題都有一個(gè)筆記本,根據(jù)自己的思路劃分章節(jié)和專題,用自己的語言整理好所有的要點(diǎn)、心得和應(yīng)用技巧。這個(gè)系統(tǒng)是你自己的,而你的關(guān)注點(diǎn)跟別人完全不同,所以沒必要事無巨細(xì),要字字見血,直指人心。 但是這個(gè)系統(tǒng)得有一定的完備性。最好從學(xué)習(xí)一開始就有所規(guī)劃,這門學(xué)問有哪些要點(diǎn)和問題,你要得到什么,自己給自己一個(gè)教學(xué)大綱。完備性的好處是能讓你發(fā)現(xiàn)系統(tǒng)的漏洞。你需要再想辦法彌補(bǔ)。系統(tǒng)要不斷地完善。面對一個(gè)形成實(shí)體的系統(tǒng),你會(huì)有一種強(qiáng)烈的成就感。我上大學(xué)的時(shí)候有好幾個(gè)筆記本。為了準(zhǔn)備GRE物理專項(xiàng)考試,我還弄了一個(gè)綜合所有課程的復(fù)習(xí)要點(diǎn)手冊。那個(gè)手冊其實(shí)對別人沒用,但我當(dāng)時(shí)的成就感實(shí)在太強(qiáng),以至于專門讓校印刷廠把它裝訂成了一本小書的樣子。有了系統(tǒng),你在文本意義上的學(xué)習(xí)就算差不多了。但是文本學(xué)習(xí)還遠(yuǎn)遠(yuǎn)不夠。
2.自學(xué)于操作
我們學(xué)習(xí)并不是為了一講話能說出個(gè)一二三四、擺個(gè)有學(xué)問形象。我們學(xué)習(xí)是為了應(yīng)用。你需要在實(shí)踐中得到反饋。你需要找人切磋一下,參加一個(gè)什么測試甚至比賽,才知道自己學(xué)的到底怎么樣?,F(xiàn)在人們對網(wǎng)絡(luò)公開課的一個(gè)詬病就在于它在反饋這方面不如線下,不過考慮到大多數(shù)人在學(xué)校里上課的時(shí)候也沒有得到太多反饋,我到是覺得為了網(wǎng)課的高效率而犧牲一點(diǎn)反饋機(jī)會(huì)是值得的。但是你仍然需要反饋! 自學(xué)最大的坑在于沒有精準(zhǔn)的反饋,于是做過的事就不知對錯(cuò),就沒有意義。所以,自學(xué)最關(guān)鍵的問題就是要找到盡量精準(zhǔn)反饋渠道。你不需要等到實(shí)際工作才能獲得反饋。你可以把自己的作品放網(wǎng)上讓人看看。而像數(shù)學(xué)和編程這樣的項(xiàng)目特別適合自學(xué),因?yàn)闀?huì)不會(huì)、做得對不對,你立即就能知道。答案和結(jié)果就是反饋。數(shù)學(xué)和編程不是文化欣賞項(xiàng)目。對于一個(gè)嚴(yán)肅的學(xué)習(xí)者,這些是訓(xùn)練項(xiàng)目。上課只是提供一個(gè)交流平臺(tái),真正的功夫都在自己的練習(xí)之中。你的信心和水平只能在每一次成功解題和程序成功運(yùn)行中提高。真正的程序員不可能去專門報(bào)個(gè)什么班來學(xué)習(xí)一種新出的編程語言。是先有一個(gè)什么需求,現(xiàn)用現(xiàn)學(xué)?,F(xiàn)用現(xiàn)學(xué)聽起來有點(diǎn)不靠譜,但這才是最原始的學(xué)習(xí)沖動(dòng)和最實(shí)在的學(xué)習(xí)行為。我要用,我不會(huì),那我就學(xué)唄?你要做的是上網(wǎng)找個(gè)最簡單的教程現(xiàn)用現(xiàn)學(xué),先把這個(gè)問題對付過去再說?,F(xiàn)在人們對 YouTube 和 B站的一個(gè)用法,就是想干什么事兒不會(huì),上去看看別人干這件事兒的視頻。我就曾經(jīng)跟著 YouTube 給廚房換了一個(gè)下水道攪拌機(jī),還給汽車換了個(gè)門把手。 b站是個(gè)自學(xué)的好地方,很冷門的單證考試都有大量考過人員的心得分享、推薦教材,以及各種專業(yè)技能的培訓(xùn)課程。這種自學(xué)可以說是“自學(xué)于無形” —— 不需要什么儀式,沒有那么多情緒波動(dòng),我們需要用啥就能學(xué)啥,學(xué)啥就能會(huì)啥 —— 這豈不就等于說,沒有我們不會(huì)的東西了嗎?而反過來說,大多數(shù)人學(xué)英語最大的問題恰恰是學(xué)而不用,把學(xué)英語變成了健身項(xiàng)目和行為藝術(shù)。
拼多多面試經(jīng)歷:(還原現(xiàn)場五面)
1.拼多多Java一面:
HashMap和HashTable以及CocurrentHashMap詳細(xì)說明
網(wǎng)絡(luò)IO模型?什么是多路復(fù)用IO?select和epoll的差別?
TCP三次握手的過程,如果沒有第三次握手有什么問題?
常用的線程池有哪些?各自的應(yīng)用場景?
Java類加載機(jī)制?雙親委派模型的好處?
JAVA并發(fā)包組件了解多少?
什么時(shí)候多線程會(huì)發(fā)生死鎖?怎么來預(yù)防
操作系統(tǒng)的用戶態(tài)和核心態(tài)切換條件以及為什么要切換
數(shù)據(jù)庫事務(wù)特點(diǎn)?事務(wù)隔離級(jí)別?項(xiàng)目中的事務(wù)實(shí)現(xiàn)?臟讀、不可重復(fù)讀、幻讀各舉個(gè)例子?
2.拼多多 Java二面:
有接觸過哪些消息隊(duì)列中間件?如何來選型?
談?wù)勀銓OA以及微服務(wù)的理解?
具體談?wù)凷pring Cloud服務(wù)和注冊?
分布式的cap了解么,分別指什么?
網(wǎng)絡(luò)編程nio和netty相關(guān),netty的線程模型,零拷貝實(shí)現(xiàn)?
spring 和 springboot的關(guān)系你是怎么理解的?
Spring IOC和AOP說一下你的理解
為什么用消息隊(duì)列?
對于消息的重復(fù)消費(fèi)你有什么設(shè)計(jì)方案嗎?
3.拼多多Java三面:
數(shù)據(jù)庫索引?B+樹?為什么要建索引?什么樣的字段需要建索引,建索引的時(shí)候一般考慮什么?索引會(huì)不會(huì)使插入、刪除?
設(shè)計(jì)模式,單例模式,怎么保證線程安全?鎖效率太低,怎么提高效率?
CAS?CAS本質(zhì)是什么?什么是原子性?Compare and Swap兩步***作,為什么能保證原子性(涉及到CPU指令)?
分布式鎖的實(shí)現(xiàn)知道到哪些?你更推薦哪一種鎖?
Redis的持久化操作有哪些?
如何利用redis處理熱點(diǎn)數(shù)據(jù)
為什么選擇Redis作為緩存?
為什么Redis的性能十分的高?
說一下單進(jìn)程、單線程的Redis和你平時(shí)寫的多線程程序的對比
10個(gè)多線程保證 i從0加到10 (差點(diǎn)翻車,主線程忙等另外10個(gè)線程完結(jié))
反轉(zhuǎn)鏈表
上臺(tái)階(n=80)
4.拼多多Java 四面:
你怎么學(xué)的Java???
設(shè)計(jì)模式了解嗎?單例講一下,懶漢餓漢double-check,怎么實(shí)現(xiàn)。策略模式,外觀模式,適配器模式,裝飾器模式,分別講一下
聯(lián)合索引什么時(shí)候不會(huì)觸發(fā)索引?
AOP了解么,有什么好處,如何使用,怎么實(shí)現(xiàn)的?
支付寶到銀行的轉(zhuǎn)賬業(yè)務(wù)怎么實(shí)現(xiàn)?
redis實(shí)現(xiàn)分布式鎖
三臺(tái)機(jī)器集群,按不同權(quán)重訪問,怎么做?
談?wù)劯卟l(fā)場景下削峰,限流的實(shí)現(xiàn)?
你之前工作的項(xiàng)目里個(gè)人最滿意的,談?wù)勀愕募軜?gòu)設(shè)計(jì)思路?
5.拼多多多Java五面:
為什么要從上一家公司離職?
為什么要選擇這里?
如何看待加班問題?
平時(shí)自己是怎么學(xué)習(xí)技術(shù)的,除了Java相關(guān),還會(huì)去了解其他什么技術(shù)?
期待的薪資是多少?
未來2年是怎樣打算的?
在基礎(chǔ)不好的背景下如何更好的學(xué)習(xí)?
01.多刷題沖刺:
面試之前,可以多刷題沖刺,下附最新Java面試合集

02.可多讀源碼,看些實(shí)戰(zhàn)筆記,學(xué)習(xí)大神的思路
程序員要想快速認(rèn)知并學(xué)習(xí)架構(gòu),讀源碼是必不可少的。閱讀源碼,是解決問題 + 理解事物,更重要的:看到源碼背后的想法;程序員說:讀萬行源碼,行萬種實(shí)踐。
Spring源碼深度解析:

Mybatis 源碼深度解析:

Redis學(xué)習(xí)筆記:

Spring Boot核心技術(shù)-筆記:

03.多看視頻資料,理解更透徹:
B站上也有很多學(xué)習(xí)視頻,唯一的缺點(diǎn)就是免費(fèi)的容易過時(shí)
后話:只有技術(shù)過硬,在哪兒都不愁就業(yè),“萬般帶不去,唯有業(yè)隨身”學(xué)習(xí)本來就不是在課堂那幾年說了算,而是在人生的旅途中不間斷的事情,行動(dòng)起來,讓學(xué)習(xí)成為一種享受。