面試中的技能樹1(轉(zhuǎn)載 )

萬能的林蕭說:我來告訴你迁央,一個草根程序員如何進(jìn)入BAT

引言

首先聲明,不要再問LZ誰是林蕭,林蕭就是某著名程序員小說的主角名字惠呼。

寫這篇文章的目的其實(shí)很簡單,算是對之前LZ一篇文章的補(bǔ)充和完善峦耘。

之前LZ寫過一篇《回答阿里社招面試如何準(zhǔn)備剔蹋,順便談?wù)剬τ贘ava程序猿學(xué)習(xí)當(dāng)中各個階段的建議》,那篇文章LZ主要介紹了如何應(yīng)對社招面試辅髓,以及如何進(jìn)行Java學(xué)習(xí)泣崩。

文章的反響還不錯,不少猿友都感嘆洛口,“如果早看到這篇文章矫付,說不定我已經(jīng)成大神了〉谘妫”

但是LZ只能很遺憾地告訴你买优,LZ那篇文章并不能讓你成為大神,只能讓你成為一個比大部分人優(yōu)秀一點(diǎn)的程序猿。而且LZ自己現(xiàn)在都還沒成為大神杀赢,如何能讓你成為大神烘跺?

但是,LZ可以手把手的告訴你脂崔,LZ作為一個非科班畢業(yè)滤淳,出身于三流大學(xué)的草根,是如何憑借自己的努力砌左,進(jìn)入到國內(nèi)一流互聯(lián)網(wǎng)公司的脖咐。

心態(tài)

看到這個標(biāo)題,有的同學(xué)可能會說汇歹,“LZ屁擅,你不是要告訴我們?nèi)绾芜M(jìn)入BAT嗎?怎么一上來就寫心態(tài)秤朗?”

沒錯煤蹭,LZ第一個要說的,就是心態(tài)取视!

原因很簡單硝皂,文章下面即將提到的學(xué)習(xí)內(nèi)容,如果你沒有一個好的心態(tài)作谭,是不可能進(jìn)行下去的稽物。所以,先過了心態(tài)這一關(guān)折欠,再來談別的吧贝或,否則你肯定會死在半路上的。

說起來锐秦,很多群里的新人都愛問LZ咪奖,“你是怎么學(xué)習(xí)的?為什么我學(xué)不進(jìn)去呢酱床?為什么我一看書就困呢羊赵?”

以上這種現(xiàn)象,基本上就是兩個原因扇谣,第一個原因是心態(tài)浮躁昧捷,總覺得看書好像沒啥用啊,看了好像還是覺得沒學(xué)到什么罐寨,過不了多久就忘了靡挥。第二個原因則是目標(biāo)感不強(qiáng),不知道自己要達(dá)到什么程度才算可以鸯绿,所以也就干脆“一瓶子不滿跋破,半瓶子晃蕩”了簸淀。

針對第一個原因,說到底就是個心態(tài)問題毒返】胁粒總想著看書能夠立竿見影,從菜鳥一下子蛻變?yōu)榇笊穸鲂绻憷鲜潜е@樣的心態(tài)去看書,你特么不瞌睡才是邪門了聚霜。

而第二個原因狡恬,LZ覺得有時候人要適當(dāng)?shù)募ぐl(fā)內(nèi)心的欲望,無欲無求這種高逼格的事蝎宇,等你七老八十了再說弟劲,現(xiàn)在趁著年輕,心中有點(diǎn)欲望其實(shí)并不是什么壞處姥芥,只要你沒被欲望懵逼了雙眼就行兔乞。

說起欲望這事兒,LZ覺得有必要給大家看一下LZ當(dāng)初的欲望凉唐,相信從這封郵件里庸追,你就能感受出LZ當(dāng)時的欲望。這種欲望台囱,會激勵著你前進(jìn)淡溯,但是你要切記,在前進(jìn)的途中簿训,調(diào)整好自己的心態(tài)咱娶,戒驕戒躁。

學(xué)習(xí)

說完心態(tài)强品,咱們來談?wù)剬W(xué)習(xí)這事兒膘侮,還是老規(guī)矩,由于LZ是Java后端出身的榛,所以接下來的內(nèi)容琼了,會與Java后端息息相關(guān),非Java后端的同學(xué)可以適當(dāng)參考困曙,但切勿照搬表伦。

本篇文章和《回答阿里社招面試如何準(zhǔn)備,順便談?wù)剬τ贘ava程序猿學(xué)習(xí)當(dāng)中各個階段的建議》不同慷丽,那篇文章更多的是從學(xué)習(xí)的角度去談的如何學(xué)習(xí)蹦哼,而本篇既然咱們是要談如何進(jìn)入BAT,那么咱們就從面試的角度來談學(xué)習(xí)這件事要糊,LZ會談?wù)勔涣骰ヂ?lián)網(wǎng)公司對于Java后端程序員的要求纲熏,相應(yīng)的,也會談?wù)勅绾芜_(dá)到這樣的要求。

為了簡單起見局劲,LZ將這些要求分為三個層次勺拣,分別為基本要求、可選要求以及加分要求鱼填,接下來药有,咱們就一個一個的來談一談。

一苹丸、基本要求

基本要求就是指愤惰,你必須要學(xué)會的知識,而且這里面大部分內(nèi)容赘理,在面試?yán)锍霈F(xiàn)的概率都是極高的宦言。因此,這部分內(nèi)容你沒有選擇商模,只能選擇啃下它奠旺,你可以花一年,也可以花十年施流,或者帶到棺材里學(xué)習(xí)也可以响疚。

1)語言的基礎(chǔ)部分:

基本要求的第一個,當(dāng)然是語言的基礎(chǔ)部分嫂沉』基礎(chǔ)部分其實(shí)就是語法以及一些關(guān)鍵字的作用,像一些if/else趟章、for循環(huán)這類基礎(chǔ)的語法杏糙,以及一些new、class蚓土、public這類的基礎(chǔ)關(guān)鍵字宏侍,大部分情況下面試問的是比較少的,因?yàn)檫@部分內(nèi)容蜀漆,只要你寫過幾年Java谅河,基本上都沒有什么問題。

那么基礎(chǔ)部分的重點(diǎn)确丢,其實(shí)主要就是static绷耍、final、transient鲜侥、volatile這一類的關(guān)鍵字褂始,以及內(nèi)部類、泛型這一類的高階語法描函。

說到static崎苗,首先要記住的最重要的一點(diǎn)就是狐粱,類屬性中被static所引用的變量,會被作為GC的root根節(jié)點(diǎn)胆数。作為根節(jié)點(diǎn)就意味著肌蜻,這一類變量是基本上不會被回收的。因此必尼,static很容易引入內(nèi)存泄漏的風(fēng)險(xiǎn)蒋搜。

如果一個面試官讓你解釋static關(guān)鍵字,你告訴他static可以修飾屬性判莉、方法和內(nèi)部類齿诞,以及修飾之后又有什么效果的話,那么面試官基本上不會記住你這個回答骂租,整個印象就是平庸。

但是如果你說完以后斑司,補(bǔ)充一下說道渗饮,你曾經(jīng)遇到過一個內(nèi)存泄漏的問題,就是因?yàn)閟tatic修飾的一個Map類型的變量導(dǎo)致的宿刮,最后排查了堆棧信息找到了問題的所在互站,并且解決了這個問題。那么僵缺,面試官這個時候內(nèi)心中對你的印象胡桃,就會不自然的提升幾分。

而且磕潮,對于static翠胰,更深入的理解是,static會將所引用的屬性自脯、方法以及內(nèi)部類之景,與類直接產(chǎn)生引用關(guān)系,而非與類的實(shí)例膏潮。這就是為什么锻狗,你可以使用類名.屬性、類名.方法以及類名.內(nèi)部類名焕参,來直接引用一個被static所修飾的屬性轻纪、方法或者內(nèi)部類。

如果你沒有用static修飾叠纷,那么你就必須使用實(shí)例才能引用這些方法刻帚、屬性或者是內(nèi)部類,最典型的就是內(nèi)部類讲岁。相信很多同學(xué)都好奇過我擂,為什么一個沒有被static修飾的內(nèi)部類衬以,必須要這么聲明。

1

OutterClass.InnerClassinnerClass=newOutterClass().newInnerClass();

因?yàn)槟銢]有使用static修飾InnerClass校摩,所以你必須new出來一個OutterClass的實(shí)例看峻,才能在此基礎(chǔ)上new出內(nèi)部類的實(shí)例,因?yàn)閮?nèi)部類只能通過外部類的實(shí)例才能引用衙吩。如果你使用了static修飾互妓,那么你就可以這樣使用內(nèi)部類。

1

OutterClass.StaticInnerClassstaticInnerClass=newOutterClass.StaticInnerClass();

這兩種方式最大的區(qū)別就是坤塞,第一種方式冯勉,如果你想要獲得InnerClass的實(shí)例,你必須有一個OutterClass的實(shí)例摹芙,所有其實(shí)這種方式你創(chuàng)建了兩個實(shí)例灼狰,所以有兩個new關(guān)鍵字。而第二種方式就好理解一些浮禾,靜態(tài)內(nèi)部類不依賴于外部類的實(shí)例存在交胚,因此只需要直接創(chuàng)建內(nèi)部類的實(shí)例就可以了,所以只有一個new關(guān)鍵字盈电。

static說的有點(diǎn)多了蝴簇,不過LZ其實(shí)不光說了static關(guān)鍵字,也一起連同內(nèi)部類的語法也大致都說了下匆帚。那么接下來熬词,基礎(chǔ)部分還有一個比較考驗(yàn)人的東西,就是volatile關(guān)鍵字吸重。

這個關(guān)鍵字的重點(diǎn)就三個字互拾,就是可見性。但是面試的時候嚎幸,你說出可見性三個字摩幔,基本上滿分100的話,最多只能得到20分鞭铆。剩下的那80分或衡,就要靠你用硬功夫去獲得了。

所謂的硬功夫车遂,其實(shí)就是要整明白封断,在并發(fā)當(dāng)中,可見性到底是什么意思舶担。那么坡疼,為了弄明白可見性什么意思,就需要你了解什么叫主存和工作內(nèi)存衣陶。

只有把這些概念都搞明白了柄瑰,你才會知道volatile的真正作用到底是什么闸氮。不過有一點(diǎn)要提醒你的是,volatile并不保證同步教沾,這一點(diǎn)一定要記住蒲跨。不光是應(yīng)付面試官,在真正使用volatile的時候授翻,也要注意這一點(diǎn)或悲,否則很容易出現(xiàn)問題。

好了堪唐,基礎(chǔ)部分就說這么多吧巡语,LZ挑了一些有代表性的說了下,歸根結(jié)底淮菠,這一部分就是要你非常清晰的了解Java當(dāng)中的關(guān)鍵字和語法男公,這里所謂的了解,是清晰的了解其實(shí)現(xiàn)原理合陵,而非簡單的會用而已理澎。

2)Java運(yùn)行時環(huán)境

Java運(yùn)行時環(huán)境就是JRE的中文翻譯,本質(zhì)上其實(shí)就是指JVM曙寡。

首先對于JVM必須要知道的是,JVM與Hotspot的關(guān)系寇荧。JVM更多的是指JVM規(guī)范举庶,而Hotspot是JVM的一種實(shí)現(xiàn),也是我們最常用的JVM實(shí)現(xiàn)揩抡。你可以把JVM規(guī)范當(dāng)做接口户侥,Hotspot當(dāng)做實(shí)現(xiàn)類,這樣去理解會比較簡單一些峦嗤。

此外蕊唐,JVM最重要的三個部分必須要非常清楚,內(nèi)存劃分烁设、class加載機(jī)制以及GC策略替梨。搞清楚這三部分不僅僅是為了面試,也是為了讓你對于Java有更深刻的理解装黑,這對于你的Java生涯非常有幫助副瀑。

而且,關(guān)于內(nèi)存劃分恋谭,還有一點(diǎn)要注意糠睡,咱們常說的劃分方式,其實(shí)是指的Hotspot的劃分方式疚颊,而非JVM規(guī)范所規(guī)定的狈孔。

Hotspot的內(nèi)存劃分簡單說分為三個部分信认,Young Generation(年輕代)、Old Generation(年老代)以及Perm Generation(永久代)均抽。其中的Young Generation(年輕代)嫁赏,又分為Eden、From和To到忽,其中From和To又統(tǒng)稱為Survivor Spaces(幸存區(qū))橄教。

正常情況下,一個對象從創(chuàng)建到銷毀喘漏,應(yīng)該是從Eden护蝶,然后到Survivor Spaces(幸存區(qū)),再到Old?Generation(年老代)翩迈,最后在某次GC下消失持灰。

當(dāng)然,一個對象也可能直接在Eden里死掉负饲,也可能一直在Old?Generation(年老代)存活堤魁,這些都是有可能的。

關(guān)于內(nèi)存劃分返十,可以自己沒事用內(nèi)存分析工具看看妥泉,比如jmap、jvisualvm等等洞坑,觀察一下各個區(qū)域的內(nèi)存變化盲链,結(jié)合實(shí)際去了解一下。

關(guān)于classloader機(jī)制的學(xué)習(xí)迟杂,可以結(jié)合tomcat去學(xué)習(xí)刽沾,了解清楚tomcat的classloader機(jī)制,看tomcat是如何保證各個APP之間的類隔離的排拷。如果可能的話侧漓,看一下tomcat中classloader的源碼,或者看一下LZ的一個開源項(xiàng)目niubi-job监氢,當(dāng)中也包含了與tomcat類加載機(jī)制相似的部分布蔗。

至于GC,需要清楚GC Roots都有哪些浪腐,以及如何判斷一個對象可以被回收何鸡。此外,GC的算法和策略也要有大概的了解牛欢,具體的可以參見LZ關(guān)于這一系列的文章骡男,地址為http://www.cnblogs.com/zuoxiaolong/category/508918.html

3)并發(fā)知識與concurrent包

要想進(jìn)入一線互聯(lián)網(wǎng)公司傍睹,這部分內(nèi)容必須要會隔盛,否則的話犹菱,你始終都只能停留在比較low的段位。

關(guān)于并發(fā)知識吮炕,最重要的兩個概念一定要搞清楚腊脱,那就是可見性和原子性。其中可見性與前面提到的volatile關(guān)鍵字是息息相關(guān)的龙亲,可見性只是并發(fā)領(lǐng)域里的一個概念陕凹,而volatile則是Java語言中,實(shí)實(shí)在在保證變量可見性的關(guān)鍵字鳄炉。

前面說了杜耙,要弄清楚可見性,就需要搞清楚主存和工作內(nèi)存拂盯。關(guān)于主存和工作內(nèi)存佑女,其實(shí)又屬于JVM的知識范疇。所以從這里就可以看出來谈竿,知識都是有關(guān)聯(lián)性的团驱。

原子性其實(shí)相對于可見性來說,反倒更好理解一些空凸,相信那個萬年不變的銀行匯款的關(guān)于事務(wù)的例子嚎花,就足以大部分人理解原子性這個概念了,它其實(shí)就是一個或多個操作呀洲,被視作一個整體的意思紊选。

有了并發(fā)的基礎(chǔ)知識以后,你就需要研究一下concurrent包了两嘴。這里面的東西其實(shí)是一個寶藏,一旦你需要寫并發(fā)相關(guān)的功能族壳,你會發(fā)現(xiàn)這里面的東西非常實(shí)用憔辫。

其中ConcurrentHashMap是面試最容易被問到的一個類,幾乎所有的面試都會問你仿荆,ConcurrentHashMap和普通的同步HashMap有什么區(qū)別贰您。

這個問題其實(shí)需要你知道兩個知識就可以了,一個是HashMap的數(shù)據(jù)結(jié)構(gòu)拢操,一個是鎖分段的技術(shù)锦亦,具體的LZ這里就不解釋了,大家自己下去找相關(guān)資料看吧令境。

此外杠园,concurrent包里有一個非常重要的類,叫做AbstractQueuedSynchronizer舔庶,幾乎所有的concurrent包內(nèi)的并發(fā)工具類抛蚁,都是基于這個抽象類擴(kuò)展出來的陈醒。因此,把AbstractQueuedSynchronizer這個類研究透徹瞧甩,非常有助于你理解concurrent包钉跷。

最后一點(diǎn),面試的時候還經(jīng)常會被問到的一個問題肚逸,就是ReentrantLock和synchronized關(guān)鍵字有什么區(qū)別爷辙。

記得LZ之前組織過的YY面試活動里,LZ問過很多次這個問題朦促,但幾乎所有人都答不出來膝晾。這只能說明一個問題,那就是大部分人在用synchronized和ReentrantLock的時候思灰,并不會考慮這兩者到底用哪個好一些玷犹。

其實(shí)它們的區(qū)別很簡單,簡單的說洒疚,就是synchronized由于是底層JVM實(shí)現(xiàn)的互斥歹颓,因此效率會高一些。而ReentrantLock的功能則比synchronized更多油湖,比如定時獲取某個鎖巍扛,多個等待條件等。

并發(fā)這一部分是一個程序員進(jìn)階的重要部分乏德,希望所有Java程序員都可以重視這一部分撤奸。

4)設(shè)計(jì)模式和反射

設(shè)計(jì)模式和反射這部分內(nèi)容,LZ個人覺得是一個高階程序員必須精通的部分喊括。

用好了這部分知識胧瓜,可以讓你在實(shí)際開發(fā)中少寫N多代碼,而且還可以使得程序的結(jié)構(gòu)更加良好郑什。

關(guān)于設(shè)計(jì)模式LZ這里就不多做介紹了府喳,具體的可以看LZ的設(shè)計(jì)模式系列文章,地址是http://www.cnblogs.com/zuoxiaolong/category/509144.html蘑拯。

關(guān)于反射钝满,其實(shí)就是reflect包里的內(nèi)容,這個包里的類其實(shí)并不難申窘,主要是得多用弯蚜,多看。比如Java領(lǐng)域里最常用的spring框架剃法,里面其實(shí)大量充斥著設(shè)計(jì)模式和反射的真實(shí)使用場景碎捺,沒事多研究一下,絕對讓你受益匪淺。

5)文件IO牵寺、NIO悍引、網(wǎng)絡(luò)IO以及網(wǎng)絡(luò)協(xié)議

文件IO、NIO以及網(wǎng)絡(luò)IO這一部分也是工作當(dāng)中要經(jīng)常用到的部分帽氓,因此也必須要掌握趣斤。

其中NIO更多的是了解其原理,此外黎休,tomcat中有多種協(xié)議的實(shí)現(xiàn)浓领,其中包括了BIO、NIO和APR势腮,這三者一定非常清楚它們的區(qū)別联贩,這個可以在connector的protocol屬性配置。

至于網(wǎng)絡(luò)IO部分捎拯,其實(shí)就是net包里的內(nèi)容泪幌。這里面的內(nèi)容是非常常用的東西,比如你調(diào)用HTTP-API署照,那么就需要使用這里面的類祸泪。在這個restful-API泛濫的時代,你少不了要使用HTTP協(xié)議調(diào)用API建芙。

此外凶朗,在了解這部分的時候堰酿,網(wǎng)絡(luò)協(xié)議也要適當(dāng)?shù)牧私庖幌拢畹湫偷腡CP和HTTP協(xié)議是一定要了解的怪得。

在LZ參加的面試中反肋,基本上TCP協(xié)議是一定會問的伤塌,雖然這可能和LZ的簡歷寫了TCP協(xié)議有關(guān)茫负,但比如TCP協(xié)議的重試機(jī)制米同,三次握手的過程,TCP與UDP的區(qū)別這一類的知識映砖,還是要了解一下的间坐。

至于HTTP協(xié)議,相對來說就簡單很多了啊央,應(yīng)用層的協(xié)議主要是知道其協(xié)議格式即可眶诈,比如都支持哪些header涨醋、每個header都是什么含義等等瓜饥。

6)小結(jié)

好了,到此為止浴骂,基本要求就差不多介紹完了乓土。細(xì)心的猿友可能會注意到,這些內(nèi)容其實(shí)和LZ上一篇文章《萬能的林蕭說:一篇文章教會你,如何做到招聘要求中的“要有扎實(shí)的Java基礎(chǔ)”》趣苏,有不少的相通之處狡相。

沒錯,其實(shí)基本要求這部分食磕,差不多就是要求你有扎實(shí)的Java基礎(chǔ)尽棕。這也是所有一線互聯(lián)網(wǎng)公司,基本都會寫在招聘要求地前幾條的要求彬伦。

因此滔悉,要想進(jìn)入BAT,那么這一部分的內(nèi)容一定要了解单绑,而且這部分的內(nèi)容對你實(shí)際開發(fā)也是非常有幫助的回官,并不僅僅是為了應(yīng)付面試。

二搂橙、可選要求

看到可選要求四個字歉提,或許不少人會認(rèn)為這部分不太重要。但是LZ可以很負(fù)責(zé)的告訴你区转,這部分往往才是決定公司要不要你的重要指標(biāo)苔巨。

因?yàn)榛疽筮_(dá)標(biāo)以后,公司主要挑選人才的標(biāo)準(zhǔn)其實(shí)就是可選要求這一部分蜗帜,在之前《回答阿里社招面試如何準(zhǔn)備恋拷,順便談?wù)剬τ贘ava程序猿學(xué)習(xí)當(dāng)中各個階段的建議》這篇文章中,LZ曾經(jīng)提過差異性這個詞厅缺,其實(shí)這一部分就是差異性的體現(xiàn)蔬顾。

接下來,LZ就帶大家看看湘捎,到底都有哪些可選的要求诀豁。此外,LZ要提前說明的是窥妇,這些可選要求舷胜,沒有必須會和必須不會的內(nèi)容,盡可能多的了解活翩,總是不會錯的烹骨。

1)Spring、Mybatis框架

框架這部分其實(shí)不用多說了材泄,spring和mybatis框架的原理和源碼沮焕,如果你可以非常精通的話,那么這一定能成為你巨大的優(yōu)勢拉宗。

如果你是專門做WEB開發(fā)的Java后端猿峦树,那么spring和mybatis框架基本上你是肯定要用的辣辫。精通Spring和mybatis框架不僅為了面試,對于你日常開發(fā)也有巨大的幫助魁巩,你可以做很多架構(gòu)上的優(yōu)化急灭,為你的戰(zhàn)友省去很多重復(fù)性的工作。

關(guān)于Spring框架谷遂,最核心的當(dāng)然是IOC葬馋,其次便是AOP、MVC這兩部分了肾扰。好好研究這三部分的源碼点楼,會讓你從大部分程序員當(dāng)中,脫穎而出白对。至于mybatis框架掠廓,主要還是關(guān)注它如何實(shí)現(xiàn)動態(tài)SQL。

而且甩恼,待你研究透徹以后蟀瞧,你完全可以自己嘗試去造輪子,說不定能得到意想不到的收獲条摸。

2)Linux服務(wù)器

這一部分其實(shí)原本是運(yùn)維應(yīng)該精通的部分悦污,但是作為一個Java后端猿,如果你可以精通linux服務(wù)器钉蒲,那么對你排查線上問題切端,是有很大的幫助的。

大部分程序員都只知道一些常用的Linux命令顷啼,對于Linux系統(tǒng)本身的文件系統(tǒng)踏枣、網(wǎng)絡(luò)以及IO等等,是完全不了解的钙蒙,這其實(shí)也包括LZ自己茵瀑。但是,LZ見過身邊有一些程序員躬厌,對于Linux玩的非常熟練马昨,這不光光體現(xiàn)在多會幾個命令,而是對整個Linux系統(tǒng)的了解扛施。

可以預(yù)見的是鸿捧,這些人在排查問題的時候,往往會更容易找到問題的根本疙渣。因?yàn)槌绦騿栴}往往并不是最難解決的匙奴,異常這東西見多了就都知道怎么回事了,大不了看看源碼也總能找到原因昌阿。最難解決的是環(huán)境問題饥脑,而環(huán)境問題無非就是操作系統(tǒng)層面的問題。

而顯然大部分情況下懦冰,Java運(yùn)行的操作系統(tǒng)都是Linux灶轰。

3)數(shù)據(jù)庫優(yōu)化

說完Linux,緊接著LZ要說的就是數(shù)據(jù)庫了刷钢,這原本應(yīng)該是DBA應(yīng)該精通的部分笋颤,但作為一個Java后端猿,數(shù)據(jù)庫基本上也是最經(jīng)常打交道的了内地。

而且大家都知道伴澄,一個應(yīng)用的性能瓶頸,往往都出現(xiàn)在數(shù)據(jù)庫這一端阱缓,因此非凌,一個Java后端猿如果可以精通數(shù)據(jù)庫的話,那么對于你工作的實(shí)際幫助荆针,也是非常大的敞嗡。

相信不少人都碰到過SQL過慢的情況,這個時候航背,如何通過加索引喉悴、SQL分析和優(yōu)化的手段,將SQL的執(zhí)行時間優(yōu)化到一個可接受的范圍內(nèi)玖媚,其實(shí)還是比較考驗(yàn)人的箕肃。

反正,這玩意兒LZ是半斤八兩的水平今魔,基本的優(yōu)化是沒有問題的勺像,但稍微復(fù)雜一些的就不行了。

所以错森,這一部分足夠成為你的優(yōu)勢咏删,體現(xiàn)出你的差異性。

4)消息服務(wù)

除了Linux和數(shù)據(jù)庫以外问词,消息服務(wù)也是當(dāng)今互聯(lián)網(wǎng)公司里督函,必不可少的一個組件。

常見的消息組件比如rabbitMQ激挪、activeMq辰狡,包括一些其它的開源消息組件,比如rocketMq垄分。這里面任何一個宛篇,如果你可以精通其原理的話,也會成為你有力的競爭條件薄湿。

其實(shí)消息服務(wù)的重點(diǎn)叫倍,無非就是如何保證最終一致性偷卧、消息的順序,包括消息事務(wù)等等這一類的問題吆倦。

雖然LZ本人對此不是很了解听诸,但LZ很確定,這一部分如果你可以有自己獨(dú)到的見解的話蚕泽,一定會大大增加你的成功率晌梨。

5)緩存服務(wù)

說了消息服務(wù)以后,相信緩存服務(wù)大家也一定不陌生了须妻。

常見的緩存比如memcached仔蝌、redis這兩個,如果你能搞清楚其中一個的話荒吏,也會給你加分許多敛惊。畢竟現(xiàn)在的互聯(lián)網(wǎng)應(yīng)用,緩存也是必不可少的了绰更,因此如果你能完全hold住緩存這一部分豆混,那么你的差異性也就有了。

在緩存服務(wù)當(dāng)中动知,有幾個問題也是比較常見的皿伺,比如緩存滿了怎么辦,緩存的實(shí)時性如何處理盒粮,內(nèi)存結(jié)構(gòu)如何規(guī)劃鸵鸥,分布式的情況下如何處理增刪節(jié)點(diǎn)時緩存的命中問題等等。

6)負(fù)載均衡器

負(fù)載均衡器丹皱,這是最后一個可選要求了妒穴。

常見的負(fù)載均衡器就兩種,一種是軟負(fù)載均衡摊崭,比如nginx讼油、Apache、lvs這一類的呢簸。另外一種則是硬件負(fù)載均衡矮台,常見的主要就是F5。

這兩種方式各有優(yōu)劣根时,其中硬件負(fù)載均衡如要用于簡單應(yīng)用瘦赫、大訪問量的場景,而軟件復(fù)雜均衡則主要用于復(fù)雜應(yīng)用蛤迎,較小訪問量的場景确虱。當(dāng)然了,兩者還有一個不得不考慮的區(qū)別是替裆,硬件復(fù)雜均衡一般都是非常貴的校辩,而軟負(fù)載均衡則基本上沒有任何成本窘问。

在負(fù)載均衡器方面,也有一些問題是比較常見的宜咒。比如如何保持會話惠赫,如何做流量控制,負(fù)載均衡策略都有哪幾種荧呐,如何檢查后端服務(wù)器的健康狀態(tài)等等。

7)小結(jié)

好了纸镊,到這里倍阐,可選要求就說的差不多了。

細(xì)心的猿友會發(fā)現(xiàn)逗威,這6個要求其實(shí)對應(yīng)的就是Java后端開發(fā)中峰搪,最常接觸到的一些東西。比如spring框架和數(shù)據(jù)庫凯旭,這兩者基本上是個Java程序員都接觸過吧概耻。

其余四個包括Linux服務(wù)器、消息服務(wù)罐呼、緩存服務(wù)以及負(fù)載均衡器鞠柄,也是一樣的,大家在實(shí)際工作當(dāng)中嫉柴,應(yīng)該或多或少都接觸過這幾個東西厌杜。

但是真正能對其中一個非常了解精通的人,相信并不會太多计螺。也正因?yàn)槿绱撕痪。绻阕龅搅耍趴梢泽w現(xiàn)出你的差異性登馒,這或許會是你拿下offer的重要籌碼之一匙握。

但是,LZ這里必須要再強(qiáng)調(diào)一下的是陈轿,這幾樣?xùn)|西大多數(shù)人或多或少都會有一些了解圈纺,包括上面LZ提到的問題,不少人也都知道答案麦射。

然而赠堵,光知道答案是遠(yuǎn)遠(yuǎn)不夠的,這并不足以成為你的優(yōu)勢法褥,你需要對這些問題有著深刻的了解茫叭,以及有著自己獨(dú)特的見解,才足以讓它成為你的優(yōu)勢半等。

三揍愁、加分要求

最后一個便是加分要求了呐萨,加分要求雖然不如基本要求和可選要求重要,但它也與可選要求類似莽囤,往往拿下offer的最終原因谬擦,正是這些看似不是必要要求的部分。

接下來朽缎,LZ就帶大家一起來看一下惨远,都有哪些可以加分的部分,這一部分其實(shí)在之前那篇文章《回答阿里社招面試如何準(zhǔn)備话肖,順便談?wù)剬τ贘ava程序猿學(xué)習(xí)當(dāng)中各個階段的建議》中已經(jīng)提到過北秽,這里就再詳細(xì)說一下。

此外最筒,LZ要強(qiáng)調(diào)的是贺氓,這些加分要求中,在某些特殊情況下床蜘,可能會成為基本要求辙培。

1)數(shù)據(jù)結(jié)構(gòu)與算法

這一部分內(nèi)容不用多說了,大家都懂的邢锯。精通數(shù)據(jù)結(jié)構(gòu)與算法扬蕊,絕對會成為你的一大亮點(diǎn)。

因?yàn)榇蟛糠殖绦騿T的這一部分基礎(chǔ)都不太好丹擎,包括LZ本人厨相,面試的時候如果問到算法一類的問題,LZ基本上就兩個字:不會鸥鹉。

以前LZ還看過Java集合框架的一些源碼蛮穿,對于一些常用的數(shù)據(jù)結(jié)構(gòu)還有一定的了解。但是現(xiàn)在毁渗,LZ已經(jīng)基本上忘光了践磅,就連最基本的冒泡排序,可能LZ都不一定能寫的對灸异。

因此可以預(yù)見的是府适,數(shù)據(jù)結(jié)構(gòu)與算法絕對是非常加分的一項(xiàng)。而且肺樟,在你面試一些與算法相關(guān)的職位時檐春,這個加分要求還可能會成為基本要求。

2)計(jì)算機(jī)操作系統(tǒng)

計(jì)算機(jī)操作系統(tǒng)原理么伯,是非常底層的內(nèi)容疟暖。

這部分內(nèi)容比較難,里面講的都是一些最基本的底層原理,例如內(nèi)存俐巴、指令骨望、系統(tǒng)IO等等。LZ之前也研讀過一本關(guān)于操作系統(tǒng)的書欣舵,也寫了一系列文章擎鸠,地址是http://www.cnblogs.com/zuoxiaolong/category/518480.html

不過LZ看的還是不夠全面和深入缘圈,如果你可以將操作系統(tǒng)研究透徹的話劣光,那么在面試的時候,你完全可以以此作為突破點(diǎn)糟把,展示你的亮點(diǎn)绢涡。

3)計(jì)算機(jī)網(wǎng)絡(luò)

其實(shí)網(wǎng)絡(luò)這一部分,對于程序員來說還是比較重要的糊饱。

LZ最近正在做的事情垂寥,就經(jīng)常會碰到一些網(wǎng)絡(luò)上的問題颠黎,雖然很多時候另锋,這些問題其實(shí)可以找專門的網(wǎng)絡(luò)人員去解決,但如果你自己對此不夠了解的話狭归,對于你的工作還是會造成很大的障礙夭坪。

而且,要想精通TCP/IP協(xié)議过椎,如果對計(jì)算機(jī)網(wǎng)絡(luò)不了解的話室梅,還是很難真正理解的。

因此疚宇,計(jì)算機(jī)網(wǎng)絡(luò)部分如果你可以精通的話亡鼠,這也絕對會成為你的一個加分項(xiàng)。

4)熟練使用一種腳本語言

腳本語言在很多時候是很方便的敷待,而且也非常實(shí)用间涵。

LZ最近就被迫正在使用Python做很多事情,其實(shí)用了以后你會發(fā)現(xiàn)榜揖,雖然Java也可以實(shí)現(xiàn)同樣的目的勾哩,但確實(shí)選擇合適的語言,會幫你節(jié)省大量的精力举哟。

因此思劳,如果你可以熟練使用一種腳本語言,比如Python妨猩、shell等等潜叛,這也必定會成為你的加分項(xiàng)。

5)你的github和博客

這點(diǎn)相信大部分人也都知道,如果你擁有自己的github和博客钠导,并且里面有不少有價(jià)值的內(nèi)容的話震嫉,那么一定會為你加不少分。而且牡属,說起github和博客這件事票堵,LZ還有一個關(guān)于自己真實(shí)的故事,在文章的最后給大家分享逮栅,這里就暫時不提了悴势。

此外,就不說面試這回事措伐,平時在github寫寫代碼特纤,在博客里寫寫文章,總結(jié)總結(jié)自己的技術(shù)和職場侥加,也是非常有好處的捧存。相信不少猿友都已經(jīng)體會到了這其中的益處,LZ也就不再多說了担败。

畢竟說多了也無益昔穴,最主要的還是自己要真真實(shí)實(shí)的去做,如果你希望可以在這方面加分提前,那就從當(dāng)前做起吗货,并且堅(jiān)持下去。

6)小結(jié)

到這里狈网,加分的要求就說的差不多了宙搬。

其實(shí)能夠加分的內(nèi)容還有很多,LZ只不過列出了比較常見的幾種而已拓哺,比如你有其它一線互聯(lián)網(wǎng)公司的背景勇垛,這也是可以加分的。只不過這種加分項(xiàng)比較難達(dá)到士鸥,而且闲孤,這里更多說的是草根程序員,因此LZ這里就沒多說础淤。

總的來說崭放,加分要求和可選要求一樣,都是你致勝的關(guān)鍵部分鸽凶,因此如果可能币砂,還是要在加分要求上下一些功夫的。

學(xué)習(xí)小結(jié)

關(guān)于學(xué)習(xí)這部分玻侥,到這里就說的差不多了决摧。

就像上一篇《萬能的林蕭說:一篇文章教會你,如何做到招聘要求中的“要有扎實(shí)的Java基礎(chǔ)”≌谱》文章里說道的一樣边锁,其實(shí)大部分一線互聯(lián)網(wǎng)公司,對于招人的技術(shù)要求就兩個波岛,扎實(shí)的Java基礎(chǔ)和一個一技之長茅坛。

扎實(shí)的Java基礎(chǔ),其實(shí)就是本文中基本要求的部分则拷,而一技之長贡蓖,其實(shí)就是可選要求和加分要求中任意挑選一個就可以了。

當(dāng)然了煌茬,不可否認(rèn)的是斥铺,可選要求和加分要求中,你會的越多坛善,成功率就越高晾蜘,這點(diǎn)是毋庸置疑的。但是如果你一點(diǎn)優(yōu)勢都沒有的話眠屎,就算你Java基礎(chǔ)再扎實(shí)剔交,其實(shí)也很難進(jìn)去,因?yàn)槟氵@樣的人太多了组力,無法在眾多面試者中脫穎而出省容。

雖然不排除你運(yùn)氣特別好抖拴,當(dāng)時公司正好急缺人燎字,而且沒有其他更好的面試者,導(dǎo)致你很幸運(yùn)的拿到了offer阿宅,但畢竟這種概率實(shí)在是太小了一些候衍。

說來說去,知識是擺在那里的洒放,不會跑也不會動蛉鹿,就看你學(xué)或不學(xué),以及什么時候?qū)W往湿。

有的人畢業(yè)后一兩年就達(dá)到了妖异,有的人用了三五年才達(dá)到,而有的人领追,則是一輩子都沒有達(dá)到他膳。要做什么樣的程序員,就全看你自己了绒窑。

素養(yǎng)

說完了心態(tài)和學(xué)習(xí)棕孙,咱們來談?wù)勔粋€程序員應(yīng)該有的素養(yǎng)。這部分雖然看似對面試沒什么幫助,但其實(shí)LZ有時候覺得蟀俊,這比技術(shù)更重要钦铺,因?yàn)樗鼈兛赡軙绊懙侥愠绦騿T生涯的發(fā)展。

一肢预、代碼風(fēng)格

說到程序員的素養(yǎng)矛洞,第一個就是代碼風(fēng)格。

雖然代碼風(fēng)格并沒有絕對正確的風(fēng)格烫映,但是在滿足基本的Java代碼風(fēng)格的前提下缚甩,你應(yīng)該逐漸形成自己的代碼習(xí)慣,而且必須是一個好習(xí)慣窑邦。

說個最簡單的例子擅威,不管你多么厲害,如果你的變量命名是用拼音來命名的話冈钦,那么別人對你的印象一定是郊丛,這是個非常low的程序員。

其實(shí)程序員有時候和藝術(shù)家很像瞧筛,一個專注于繪畫的藝術(shù)家厉熟,一般都會有自己的風(fēng)格。說得夸張一點(diǎn)较幌,可能他的畫只要拿出去揍瑟,就有人能認(rèn)出來,這其實(shí)就是一種風(fēng)格乍炉。

作為一個程序員绢片,你也應(yīng)該有你自己的代碼風(fēng)格,雖然在工作中岛琼,為了大家更好的通過代碼溝通底循,你或多或少的需要做一些妥協(xié),和大家保持一致的風(fēng)格槐瑞。

但是你自己的開源項(xiàng)目熙涤,它應(yīng)該是你的藝術(shù)品,你在雕琢它的同時困檩,其實(shí)也是在形成你獨(dú)特的代碼風(fēng)格祠挫。

而且,有的時候悼沿,你的開源項(xiàng)目等舔,可能可以直接或間接的幫助你,獲得一份不錯的offer显沈。

二软瞎、寫作能力

看到這個或許有的人會很意外逢唤,但是LZ個人覺得,寫作能力是一個程序員應(yīng)該有的素養(yǎng)涤浇。

代碼風(fēng)格只是你寫代碼的素養(yǎng)鳖藕,你還需要有寫文字的能力和素養(yǎng)。一個程序員是否專業(yè)只锭,文檔和注釋也是一個很重要的衡量標(biāo)準(zhǔn)著恩。

因?yàn)椴还苣愕募夹g(shù)多么厲害,別人看到的蜻展,除了你的代碼以外喉誊,就是你的文檔和注釋。這部分能否寫好纵顾,在很多時候伍茄,直接決定了別人對你的印象。

因此施逾,寫作能力其實(shí)也是一個程序員應(yīng)該有的素養(yǎng)敷矫,至少LZ一直是這么認(rèn)為的。因?yàn)椴还苓@個人的技術(shù)多么厲害汉额,如果他的文檔和注釋寫的一團(tuán)糟曹仗,絲毫體現(xiàn)不出專業(yè)二字,那么他的形象一定會在LZ心中大打折扣蠕搜。

結(jié)尾

本文從心態(tài)怎茫、學(xué)習(xí)和素養(yǎng)三個方面簡單談了談如何進(jìn)入BAT,但其實(shí)這也是一個程序員學(xué)習(xí)和提高自己的過程妓灌。

在提到github和博客時轨蛤,LZ說了要在文章的最后,給大家講一個關(guān)于LZ自己的真實(shí)故事旬渠,其實(shí)這個故事就是LZ來杭州的真實(shí)經(jīng)歷俱萍。

LZ之所以能進(jìn)入現(xiàn)在的公司端壳,其實(shí)很大一部分就是因?yàn)長Z有一個經(jīng)常更新的博客告丢,和一個造了幾個輪子的github。說起來损谦,LZ真的是運(yùn)氣非常好岖免,或者說是平時的努力,給LZ帶來了好運(yùn)氣照捡。

兩年多以前颅湘,LZ特別想進(jìn)入中間件團(tuán)隊(duì),但是發(fā)簡歷老是沒有回音栗精,于是LZ就給中間件團(tuán)隊(duì)的leader闯参,寫了一封求職郵件瞻鹏,表明自己非常想進(jìn)入中間件團(tuán)隊(duì),做服務(wù)于技術(shù)人員的工作鹿寨,希望能夠得到面試機(jī)會新博。

可惜的是,當(dāng)時這個中間件的前輩并沒有回復(fù)LZ的郵件脚草,原本LZ以為是自己的簡歷沒有打動對方赫悄。不過LZ后來才知道,其實(shí)是因?yàn)楫?dāng)時這個前輩已經(jīng)離開了中間件馏慨。

不過埂淮,兩年以后,也就是2016年過完年以后写隶,LZ的博客里無意間收到了一封短信倔撞,正是中間件團(tuán)隊(duì)的成員發(fā)給LZ的邀請。

可以看到慕趴,這封短信正是今年過完年LZ收到的误窖。剛開始的時候,LZ還沒注意到有這么一封短信秩贰。直到過完年上了十來天班以后霹俺,差不多快三月份了,LZ才注意到短信箱里的這個短信毒费。

LZ清晰記得丙唧,當(dāng)時看到的時候是周四,LZ看到的時候很意外觅玻。

雖然當(dāng)時LZ并沒有跳槽的打算想际,那段時間也從未投過一封簡歷,不過出于不聊白不聊的原則溪厘,LZ還是當(dāng)天就把簡歷發(fā)給了這位前輩胡本。

出乎意料的是,周四和周五僅僅兩天畸悬,LZ接連不斷的經(jīng)過了四輪電話面試侧甫,就從前輩這里得知,LZ非常順利的通過了面試蹋宦,就等著拿offer就可以了披粟。

當(dāng)時聽到這個消息的時候,說實(shí)話冷冗,LZ真的覺得和做夢差不多守屉。

原本一兩天前,LZ還處于剛過完年假的不適應(yīng)期蒿辙,同時還在糾結(jié)手里的需求怎么實(shí)現(xiàn)拇泛。突然之間就要奔赴杭州滨巴,進(jìn)入自己期待已久的公司,期待已久的部門俺叭,展開另外一番職業(yè)生涯了兢卵。

LZ當(dāng)時真心覺得,這世間的事情绪颖,實(shí)在是太特么神奇了秽荤。當(dāng)時LZ腦子里不自覺地冒出來的一句話就是,功夫不負(fù)有心人澳帷窃款!

LZ日積月累的寫了這么多文章,終于沒有白寫牍氛,給LZ換來了一個機(jī)會晨继。

以前LZ覺得,像什么“功夫不負(fù)有心人”這一類的話搬俊,都是給別人灌雞湯打雞血的話而已紊扬。但真正自己遇到的時候,才會真切的體會到唉擂,有的時候道理就是這么簡單餐屎,區(qū)別就在于你做還是沒做。

就像這篇文章里L(fēng)Z寫的一樣玩祟,今天你看到了腹缩,你做了,那或許未來的某一天空扎,你會感謝今天努力的你藏鹊。但如果你看到了,沒有做转锈,或許你依舊還是那個盘寡,整天抱怨工作沒勁,加班太累的人撮慨,然后在碌碌無為和怨天尤人中度過竿痰。

LZ也不想給大家灌什么雞湯,打什么雞血甫煞,但是LZ想告訴大家菇曲,程序員這個職業(yè)很公平,相信不少人當(dāng)初踏上這條路的時候抚吠,也是覺得程序員這個職業(yè)充滿著奮斗的氣息,可以依靠自己的努力改變自己的命運(yùn)弟胀,而不像某些職業(yè)一樣需要拼爹楷力。

在程序員這條路上喊式,努力,你就有很大希望成就自己的目標(biāo)和夢想萧朝。不努力岔留,那你就基本上原地踏步下去,直到被后浪拍死在沙灘上检柬。

如何抉擇献联,其實(shí)完全看你自己,只要你不后悔你的決定何址。所以里逆,少點(diǎn)抱怨,多點(diǎn)行動用爪。

如果你能接受平庸下去原押,那就平庸下去,幸福的過完你的一生偎血,也沒什么不好诸衔。否則,你就堅(jiān)持努力下去颇玷,直到達(dá)到你一個又一個目標(biāo)笨农。

最怕的情況就是,心中充滿了欲望帖渠,不甘于平庸磁餐,卻又不愿意努力的人,這樣的人阿弃,如果做了程序員诊霹,真的是一種悲哀。

打賞支持我寫出更多好文章渣淳,謝謝脾还!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市入愧,隨后出現(xiàn)的幾起案子鄙漏,更是在濱河造成了極大的恐慌,老刑警劉巖棺蛛,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怔蚌,死亡現(xiàn)場離奇詭異,居然都是意外死亡旁赊,警方通過查閱死者的電腦和手機(jī)桦踊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來终畅,“玉大人,你說我怎么就攤上這事∠读蓿” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵炼蛤,是天一觀的道長。 經(jīng)常有香客問我蝶涩,道長理朋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任绿聘,我火速辦了婚禮嗽上,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斜友。我一直安慰自己炸裆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布鲜屏。 她就那樣靜靜地躺著烹看,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洛史。 梳的紋絲不亂的頭發(fā)上惯殊,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天,我揣著相機(jī)與錄音也殖,去河邊找鬼土思。 笑死,一個胖子當(dāng)著我的面吹牛忆嗜,可吹牛的內(nèi)容都是我干的己儒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捆毫,長吁一口氣:“原來是場噩夢啊……” “哼闪湾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绩卤,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤途样,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后濒憋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體何暇,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年凛驮,在試婚紗的時候發(fā)現(xiàn)自己被綠了裆站。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖遏插,靈堂內(nèi)的尸體忽然破棺而出捂贿,到底是詐尸還是另有隱情纠修,我是刑警寧澤胳嘲,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站扣草,受9級特大地震影響了牛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辰妙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一鹰祸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧密浑,春花似錦蛙婴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至懒构,卻和暖如春餐济,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胆剧。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工絮姆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秩霍。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓篙悯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親铃绒。 傳聞我的和親對象是個殘疾皇子鸽照,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容