五年Java程序員該掌握的技術(shù)點(diǎn)捌议,這些都不懂哼拔,還想拿高薪嗎?

本人不才瓣颅,呆的廠不算大倦逐,工作五年,不過一路走來磕磕碰碰宫补,但總算有了自己的一點(diǎn)小體會(huì)檬姥。對(duì)于一個(gè) Java 開發(fā)人員來說,到了 5 年的關(guān)鍵節(jié)點(diǎn)粉怕,需要掌握哪些知識(shí)點(diǎn)呢健民?經(jīng)過我自己的總結(jié),我列出了下面的思維導(dǎo)圖贫贝。

?

從上面的圖片我們可以看出大致分為三個(gè)部分:JDK 源碼秉犹、JVM 原理、框架源碼平酿。

JDK源碼

JDK 源碼是一切的基礎(chǔ)凤优,許多框架都參考了 JDK 源碼的實(shí)現(xiàn)思路悦陋,因此弄懂 JDK 源碼是一件非常重要的事情蜈彼。而 JDK 源碼又可以分為下面 4 大塊:

集合源碼

并發(fā)集合源碼

并發(fā)包源碼

阻塞隊(duì)列源碼

線程池源碼

集合源碼

說到集合,我們大家都非常熟悉俺驶,這可是我們工作中用得非常多的一類 API幸逆。但會(huì)用了,還得知道它到底是如何實(shí)現(xiàn)的暮现,這樣才可以避免踩坑还绘。JDK 源碼中的集合并不是特別多,大概有 四大類大概 14 個(gè)常用的 API栖袋。

List集合

ArrayList:列表集合經(jīng)典實(shí)現(xiàn)拍顷。

Vector:列表集合經(jīng)典實(shí)現(xiàn),線程安全塘幅,與 ArrayList 對(duì)應(yīng)昔案。

LinkedList:鏈表結(jié)構(gòu)的經(jīng)典實(shí)現(xiàn)尿贫。

Stack:棧結(jié)構(gòu)的經(jīng)典實(shí)現(xiàn),先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu)踏揣。繼承了 Vector庆亡,線程安全。

Set集合

HashSet:Set 集合的哈希實(shí)現(xiàn)捞稿。

LinkedHashSet:Set 集合的哈希實(shí)現(xiàn)又谋,維護(hù)了元素插入順序。

TreeSet:Set 集合的有序?qū)崿F(xiàn)娱局。

Queue集合

PriorityQueue:優(yōu)先級(jí)隊(duì)列

LinkedList:雙向隊(duì)列實(shí)現(xiàn)

ArrayDeque:雙向循環(huán)隊(duì)列實(shí)現(xiàn)

Map集合

HashMap:Map 集合的經(jīng)典哈希實(shí)現(xiàn)彰亥。

LinkedHashMap:在 HashMap 的基礎(chǔ)上,增加了對(duì)插入元素的鏈表維護(hù)衰齐。

WeakedHashMap:在 HashMap 的基礎(chǔ)上剩愧,使強(qiáng)引用變?yōu)槿跻谩?/p>

TreeMap:Map 集合的有序?qū)崿F(xiàn)。底層是紅黑樹的經(jīng)典實(shí)現(xiàn)娇斩。

在這 14 個(gè)常用的 API 中雖然有一些我們還沒使用過仁卷,但如果你要建立起一套完整的知識(shí)體系,那么還是有必要去仔細(xì)琢磨一下它們的作用犬第,并且對(duì)它們進(jìn)行橫向比較的锦积。

并發(fā)集合源碼

我們前面說到的集合源碼,它們大部分都是線程不安全的歉嗓,它們在多線程的環(huán)境下使用會(huì)產(chǎn)生各種各樣的問題丰介。而線程安全與并發(fā)安全又不一樣,線程安全考慮的是絕對(duì)的安全鉴分,而并發(fā)安全則是犧牲部分特性來提高并發(fā)效率哮幢。也就是說并發(fā)集合適合在多線程環(huán)境下使用,并且效率足夠高志珍,能夠應(yīng)對(duì)高并發(fā)的情況橙垢。

在 JDK 的并發(fā)集合源碼中,一共有 7 個(gè)常用的并發(fā)集合伦糯。

ConcurrentHashMap:高并發(fā)的HashMap

ConcurrentSkipListMap:高并發(fā)下的TreeMap(基于跳表實(shí)現(xiàn))

ConcurrentSkipListSet:內(nèi)部使用ConcurrentSkipListMap實(shí)現(xiàn)

CopyOnWriteArrayList:高并發(fā)的ArrayList柜某,適合讀場景。

CopyOnWriteArraySet:高并發(fā)的Set集合敛纲,使用CopyOnWriteArrayList實(shí)現(xiàn)喂击。

ConcurrentLinkedQueue:高并發(fā)的鏈表隊(duì)列。

ConcurrentLinkedDeque:高并發(fā)的雙向鏈表隊(duì)列淤翔。

雖然有 7 個(gè)并發(fā)集合翰绊,但是實(shí)際上只有 5 個(gè)左右,因?yàn)榱硗鈨蓚€(gè)都直接用代理的方式委托實(shí)現(xiàn)。例如:CopyOnWriteArraySet 類內(nèi)部并沒有具體的邏輯實(shí)現(xiàn)监嗜,而是直接委托 CopyOnWriteArrayList 實(shí)現(xiàn)琳要。

并發(fā)包源碼

我們前面說過許多集合都是線程不安全的,在多線程環(huán)境秤茅、甚至高并發(fā)環(huán)境需要使用并發(fā)集合稚补。那么并發(fā)集合到底是怎么實(shí)現(xiàn)線程安全的呢?在 JDK1.8 之后框喳,并發(fā)集合大部分都使用 CAS 來實(shí)現(xiàn)線程安全课幕。而其實(shí)在 JDK1.8 之前,許多線程安全都是使用鎖來實(shí)現(xiàn)的五垮。而說到鎖乍惊,我們就必須了解一下并發(fā)包源碼。

并發(fā)包源碼從零開始定義了一整套實(shí)現(xiàn)并發(fā)安全的機(jī)制放仗,并且還提供了不少方便使用的并發(fā)工具润绎。我們通過并發(fā)包就可以非常方便地實(shí)現(xiàn)多線程下的線程安全和并發(fā)控制,后面說到的阻塞隊(duì)列都是以這個(gè)為基礎(chǔ)的诞挨。

并發(fā)包是一整套接口和實(shí)現(xiàn)的定義莉撇,其主要的類和實(shí)現(xiàn)如下:

?

在并發(fā)源碼最頂層的是 AbstractQueueSynchronizer 接口,其定義了并發(fā)控制最為基礎(chǔ)的幾個(gè)接口惶傻,之后的 Lock棍郎、ReentrantLock、ReentrantReadWriteLock 都是在這基礎(chǔ)上實(shí)現(xiàn)的银室。而 Condition 接口則是繼 AbstractQueueSynchronizer 接口之后的另一個(gè)重要接口涂佃,其定義了分支條件,使得并發(fā)適用于更復(fù)雜的業(yè)務(wù)蜈敢。

定義好了 AbstractQueueSynchronizer 和 Condition 接口辜荠,并發(fā)包的基礎(chǔ)就搭建好了。并發(fā)包中提供了 CountDownLatch抓狭、CyclicBarrier 等并發(fā)工具類來實(shí)現(xiàn)常用的并發(fā)操作伯病,這些工具類都是使用前面提到的 Lock 來實(shí)現(xiàn)的。

阻塞隊(duì)列源碼

阻塞隊(duì)列其實(shí)是屬于并發(fā)包的一部分辐宾,但因?yàn)槠涔δ苄蕴貏e明顯狱从,所以我們專門挑出來單獨(dú)說。阻塞隊(duì)列用于在高并發(fā)環(huán)境下進(jìn)行數(shù)據(jù)的交換叠纹,其實(shí)現(xiàn)基礎(chǔ)是我們前面說到的并發(fā)包,沒有并發(fā)包就沒有阻塞隊(duì)列敞葛。

在 JDK 中誉察,阻塞隊(duì)列一共可以分為三大類一共 8 個(gè)常用的阻塞隊(duì)列。

基礎(chǔ)實(shí)現(xiàn)

這塊是阻塞隊(duì)列最基礎(chǔ)的實(shí)現(xiàn)

ArrayBlockingQueue:數(shù)組組成的有界阻塞隊(duì)列

LinkedBlockingQueue:鏈表組成的無界阻塞隊(duì)列

LinkedBlockingDeque:鏈表組成的雙向阻塞隊(duì)列

有序延遲實(shí)現(xiàn)

這塊的阻塞隊(duì)列還實(shí)現(xiàn)了元素的排序以及延遲功能惹谐,只有時(shí)間到了才能出隊(duì)列持偏。

PriorityBlockingQueue:支持優(yōu)先級(jí)排序的無界阻塞隊(duì)列

DelayQueue:支持優(yōu)先級(jí)實(shí)現(xiàn)的無界延遲阻塞隊(duì)列

DelayedWorkQueue:線程池中的延遲阻塞隊(duì)列

數(shù)據(jù)交換實(shí)現(xiàn)

這塊阻塞隊(duì)列主要用于多線程之間的數(shù)據(jù)交換

SynchronousQueue:不存儲(chǔ)元素的數(shù)據(jù)交換阻塞隊(duì)列

LinkedTransferQueue:鏈表組成的數(shù)據(jù)交換無界阻塞隊(duì)列

?

線程池源碼

線程池也是 JDK 源碼中非常重要的一塊驼卖,妥善利用線程池可以提高效率。而線程池的基礎(chǔ)其實(shí)就是我們前面講到的阻塞隊(duì)列鸿秆,線程池的延遲功能都是使用阻塞隊(duì)列實(shí)現(xiàn)的酌畜。線程池的整體架構(gòu)比較多,但是并不復(fù)雜卿叽,也沒有什么難點(diǎn)桥胞。如果弄懂了線程池的整體類結(jié)構(gòu),那么線程池也就沒什么太大的問題了考婴。

?

JVM原理

JVM 可以說是 Java 程序員必須要掌握的基礎(chǔ)知識(shí)了贩虾。初學(xué)者或許會(huì)搞不懂這些東西到底有什么用,一開始學(xué)習(xí)都是為了面試用沥阱。但老司機(jī)告訴你學(xué)習(xí) JVM 原理有下面兩個(gè)非常重要的用處:

理解 Java 語言特性缎罢。Java 代碼寫出來的只是語言層面的東西,當(dāng)我們要了解一個(gè)特性是如何實(shí)現(xiàn)的考杉,我們就需要深入到字節(jié)碼層面策精。例如:boolean 這個(gè)類型,在 Java 語言層面是存在的崇棠。但是其在字節(jié)碼層面是不存在的蛮寂,其在字節(jié)碼層面是使用 Integer 的 1 和 0 表示 true 和 false。

學(xué)習(xí)排查線上問題易茬。我們遇到線上 JVM 問題酬蹋,經(jīng)常提示說:OutOfMemoryError:Javaheap space。這時(shí)候你會(huì)不知道從何入手抽莱,這是因?yàn)槟悴欢?JVM 的內(nèi)存結(jié)構(gòu)范抓。所以你必須去學(xué)習(xí) JVM 的內(nèi)存結(jié)構(gòu),如何排查問題發(fā)生在哪塊內(nèi)存食铐,如何解決問題匕垫。而這一切的基礎(chǔ)就是 JVM 的基礎(chǔ)知識(shí)。

框架源碼

學(xué)習(xí)完 JDK 的源碼虐呻,我們就需要把我們常用的框架源碼都弄清楚象泵。這樣在遇到框架問題的時(shí)候,我們才可以快速地排查問題斟叼。

?

上面的思維導(dǎo)圖從上到下都是逐次遞進(jìn)的偶惠。我們學(xué)習(xí)了 JDK 源碼,再學(xué)習(xí) Web 框架就可以實(shí)現(xiàn)簡單的 Web 項(xiàng)目朗涩。而隨著業(yè)務(wù)增長忽孽,我們需要加入 RPC 服務(wù)化框架將其服務(wù)化。而隨著業(yè)務(wù)復(fù)雜化和井噴,我們需要加入消息隊(duì)列和緩存來進(jìn)一步提高業(yè)務(wù)的穩(wěn)定性兄一。

Web框架

Spring 和 MyBatis 可以說是 Java Web 開發(fā)者必學(xué)的兩個(gè)框架了厘线,因此對(duì)這兩個(gè)框架有必要做一個(gè)深入的了解。

對(duì)于 Spring 來說出革,其整個(gè)源碼體系太過于復(fù)雜造壮,所以我們還是得抓住重點(diǎn)。對(duì)于 Spring 來說骂束,最重要的是其 AOP 和 IoC 的實(shí)現(xiàn)耳璧,以及其容器體系和常用的接口。而對(duì)于 MyBatis 來說栖雾,其體系相對(duì)沒有 Spring 那么復(fù)雜楞抡,所以可以稍微深入一些。

RPC框架

在所有 RPC 框架中析藕,dubbo 可以說是最通用的一個(gè)了召廷。所以如果你所在的公司沒有自研的 RPC 框架,那么你不妨可以將 dubbo 作為你的學(xué)習(xí)框架。

對(duì)于 RPC 框架來說,其實(shí)無非就是封裝對(duì)象代理胰锌,最后通過與服務(wù)提供者進(jìn)行網(wǎng)絡(luò)通信。但是如何進(jìn)行封裝筹煮,如果進(jìn)行負(fù)載均衡的實(shí)現(xiàn),這就考驗(yàn)一個(gè)框架設(shè)計(jì)者的功力了居夹。

一致性框架

對(duì)于分布式系統(tǒng)败潦,非常重要的一個(gè)組件就是一致性框架。在這些框架中准脂,最常見的兩個(gè)是 Zookeeper 和 Eureka劫扒。Zookeeper 實(shí)現(xiàn)了 CAP 中的 CP(即注重強(qiáng)一致性),而 Eureka 則是實(shí)現(xiàn)了 CAP 中的 AP(即注重可用性)狸膏。

雖然平常我們都將 Zookeeper 和 Eureka 作為服務(wù)化的協(xié)調(diào)組件沟饥,基本上沒有什么機(jī)會(huì)深入學(xué)習(xí)。但是有機(jī)會(huì)還是可以深入了解一下的湾戳。

消息隊(duì)列

消息隊(duì)列可以說是實(shí)現(xiàn)業(yè)務(wù)解耦以及突發(fā)流量的利器贤旷。而在大型業(yè)務(wù)場景中,最常用的就是 Kafka 和 RocketMQ 了砾脑,因此弄懂這兩個(gè)消息隊(duì)列的原理基本上就足夠用了幼驶。

對(duì)于消息隊(duì)列,建議先選擇一個(gè)深入研究拦止,先弄懂其基本原理县遣,之后再閱讀源碼驗(yàn)證想法糜颠。因?yàn)?RocketMQ 是基于 Kafka 改進(jìn)的汹族,所以建議先從 Kafka 入手研究萧求。Kafka 研究得差不多了,RocketMQ 的研究也會(huì)進(jìn)展飛速顶瞒。

緩存框架

緩存框架可以說是高并發(fā)下必用的一個(gè)框架了夸政,但我們經(jīng)常只是使用它,而不知道起內(nèi)部的原理和構(gòu)造榴徐。因此找個(gè)時(shí)間深入學(xué)習(xí)下原理守问,還是很有必要的。

網(wǎng)絡(luò)框架

對(duì)于一些網(wǎng)絡(luò)項(xiàng)目坑资,例如聊天 IM 等耗帕,就需要用到 Netty 等框架。而 Netty 又是這類網(wǎng)絡(luò)框架的佼佼者袱贮,通過對(duì)其源碼的研究仿便,可以學(xué)到不少知識(shí)。

搜索框架

對(duì)于一些搜索功能的項(xiàng)目攒巍,單純的數(shù)據(jù)庫 SQL 查詢已經(jīng)無法滿足需求了嗽仪,這時(shí)候 ElasticSearch 的學(xué)習(xí)和研究就提上議程了。有時(shí)間的話柒莉,研究學(xué)習(xí)一下還是很有必要的闻坚。

增量訂閱框架

Canal 和 Otter 框架可以幫助你獲得數(shù)據(jù)庫的變化信息,從而更方便地做業(yè)務(wù)擴(kuò)展兢孝。對(duì)于這類框架窿凤,屬于特定領(lǐng)域的細(xì)分框架,有時(shí)間可以研究一下跨蟹。

作為一個(gè)工作了 5 年的開發(fā)雳殊,上面的知識(shí)體系還是未能完全消化,只能說是對(duì)于部分有些掌握喷市。

那么重頭戲來了相种,更全的架構(gòu)師體系圖也為你準(zhǔn)備好了。

架構(gòu)師筑基我不再做闡述品姓,上文已經(jīng)描述了寝并。

?

框架學(xué)習(xí)

程序員每天都和代碼打交道。經(jīng)過數(shù)年的基礎(chǔ)教育和職業(yè)培訓(xùn)腹备,大部分程序員都會(huì)「寫」代碼衬潦,或者至少會(huì)抄代碼和改代碼。但是植酥,會(huì)讀代碼的并不在多數(shù)镀岛,會(huì)讀代碼又真正讀懂一些大項(xiàng)目的源碼的弦牡,少之又少。這種怪狀漂羊,真要追究起來驾锰,怪不得程序員這個(gè)群體本身 —— 它是兩個(gè)原因造成的。

我們所有的教育和培訓(xùn)都在強(qiáng)調(diào)怎么寫代碼走越,并沒有教大家如何讀代碼

大多數(shù)工作場景都是一個(gè)蘿卜一個(gè)坑椭豫,我們只需要了解一個(gè)系統(tǒng)的局部便能開展工作,讀不相干的代碼旨指,似乎沒用

但是這樣會(huì)有三個(gè)壞處:

前輩們踩過的坑赏酥,總結(jié)的經(jīng)驗(yàn)教訓(xùn),你都不得不親自用最慢的法子一點(diǎn)點(diǎn)試著踩一遍谆构。

很容易養(yǎng)成 stackoverflow driven 的寫代碼習(xí)慣 —— 遇到不知如何寫的代碼裸扶,從網(wǎng)上找現(xiàn)成的答案,找個(gè)高票的復(fù)制粘貼改吧改吧搬素,湊活著完成功能再說呵晨。寫代碼的過程中遇到問題,開啟調(diào)試模式蔗蹋,要么設(shè)置無數(shù)斷點(diǎn)一步步跟蹤何荚,要么到處打印信息試圖為滿是窟窿的代碼打上補(bǔ)丁,導(dǎo)致整個(gè)寫代碼的過程是一部調(diào)代碼的血淚史猪杭。

你周圍最強(qiáng)的那個(gè)工程師的開發(fā)水平的上限就是你的上限餐塘。

?

分布式,高性能架構(gòu)皂吮,大廠必備

分布式怎么來的戒傻。傳統(tǒng)的電信、銀行業(yè)蜂筹,當(dāng)業(yè)務(wù)量大了之后需纳,普通服務(wù)器CPU/IO/網(wǎng)絡(luò)到了100%,請(qǐng)求太慢怎么辦艺挪?最直接的做法不翩,升級(jí)硬件,反正也不缺錢麻裳,IBM小型機(jī)口蝠,大型機(jī),采購了堆硬件津坑。

但是互聯(lián)網(wǎng)不能這么干妙蔗,互聯(lián)網(wǎng)沒有那么財(cái)大氣粗,還有很多初創(chuàng)疆瑰,能不能賺錢還不知道眉反。所以就有了軟件方面的解決方案:分布式系統(tǒng)昙啄,簡單說,就是一臺(tái)服務(wù)器不行寸五,我用兩臺(tái)梳凛、10臺(tái)、100臺(tái)...這就要軟件系統(tǒng)需要支持播歼。

那么多臺(tái)機(jī)器伶跷,我如何讓他們協(xié)同工作掰读,這就需要一個(gè)調(diào)度中心(或注冊中心)秘狞;肯定涉及到機(jī)器間通信,那么需要一個(gè)高效的RPC框架蹈集;一個(gè)請(qǐng)求過來了烁试,如何分發(fā),需要一個(gè)請(qǐng)求分發(fā)系統(tǒng)(負(fù)載均衡)拢肆;然后還要考慮每個(gè)角色都不能成為性能瓶頸减响;還有要能方便的進(jìn)行橫向擴(kuò)展,還有考慮單節(jié)點(diǎn)故障郭怪。

需要分布式系統(tǒng)支示,并發(fā)量肯定不低,

那么有了上面的還是不夠的鄙才,還需要考慮cache颂鸿、mq、job攒庵、db等方面的問題嘴纺。cache,現(xiàn)在第三方緩存也比較成熟浓冒,redis/memcache等栽渴;mq,rabbitmq,kafka等等也不錯(cuò)稳懒;job闲擦,現(xiàn)在第三方任務(wù)框架有elasticjob和tbschedule,或者你用quartz也支持分布式環(huán)境下的任務(wù)场梆,不過quartz就沒有運(yùn)維工具了墅冷。DB,數(shù)據(jù)庫最好在項(xiàng)目前期就考慮好業(yè)務(wù)拆分辙谜,系統(tǒng)拆分后DB對(duì)應(yīng)的垂直拆分俺榆,后期可做讀寫分離,一主多從装哆,甚至多主多從罐脊,業(yè)界也有了相應(yīng)的解決方案定嗓。

?微服務(wù)都不掌握,還敢說自己是架構(gòu)師嗎萍桌?

微服務(wù)(Microservice)這個(gè)概念是2012年出現(xiàn)的宵溅,作為加快Web和移動(dòng)應(yīng)用程序開發(fā)進(jìn)程的一種方法,2014年開始受到各方的關(guān)注上炎,而2015年恃逻,可以說是微服務(wù)的元年;

越來越多的論壇藕施、社區(qū)寇损、blog以及互聯(lián)網(wǎng)行業(yè)巨頭開始對(duì)微服務(wù)進(jìn)行討論、實(shí)踐裳食,可以說這樣更近一步推動(dòng)了微服務(wù)的發(fā)展和創(chuàng)新矛市。

微服務(wù)架構(gòu)(Microservice Architecture)是一種架構(gòu)概念,旨在通過將功能分解到各個(gè)離散的服務(wù)中以實(shí)現(xiàn)對(duì)解決方案的解耦诲祸。你可以將其看作是在架構(gòu)層次而非獲取服務(wù)的

類上應(yīng)用很多SOLID原則浊吏。微服務(wù)架構(gòu)是個(gè)很有趣的概念,它的主要作用是將功能分解到離散的各個(gè)服務(wù)當(dāng)中救氯,從而降低系統(tǒng)的耦合性找田,并提供更加靈活的服務(wù)支持。

概念:把一個(gè)大型的單個(gè)應(yīng)用程序和服務(wù)拆分為數(shù)個(gè)甚至數(shù)十個(gè)的支持微服務(wù)着憨,它可擴(kuò)展單個(gè)組件而不是整個(gè)的應(yīng)用程序堆棧墩衙,從而滿足服務(wù)等級(jí)協(xié)議。

定義:圍繞業(yè)務(wù)領(lǐng)域組件來創(chuàng)建應(yīng)用享扔,這些應(yīng)用可獨(dú)立地進(jìn)行開發(fā)底桂、管理和迭代。在分散的組件中使用云架構(gòu)和平臺(tái)式部署惧眠、管理和服務(wù)功能籽懦,使產(chǎn)品交付變得更加簡單。

本質(zhì):用一些功能比較明確氛魁、業(yè)務(wù)比較精練的服務(wù)去解決更大暮顺、更實(shí)際的問題。

?

歡迎做Java的工程師朋友們加入Java架構(gòu)解析:923116658

群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用秀存、高并發(fā)捶码、高性能及分布式、Jvm性能調(diào)優(yōu)或链、Spring源碼惫恼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己澳盐,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰祈纯!趁年輕令宿,使勁拼,給未來的自己一個(gè)交代腕窥!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末粒没,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子簇爆,更是在濱河造成了極大的恐慌癞松,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件入蛆,死亡現(xiàn)場離奇詭異响蓉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)安寺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門厕妖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挑庶,你說我怎么就攤上這事∪砟埽” “怎么了迎捺?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長查排。 經(jīng)常有香客問我凳枝,道長,這世上最難降的妖魔是什么跋核? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任岖瑰,我火速辦了婚禮,結(jié)果婚禮上砂代,老公的妹妹穿的比我還像新娘蹋订。我一直安慰自己,他們只是感情好刻伊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布露戒。 她就那樣靜靜地躺著,像睡著了一般捶箱。 火紅的嫁衣襯著肌膚如雪智什。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天丁屎,我揣著相機(jī)與錄音荠锭,去河邊找鬼。 笑死晨川,一個(gè)胖子當(dāng)著我的面吹牛证九,可吹牛的內(nèi)容都是我干的键思。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼甫贯,長吁一口氣:“原來是場噩夢啊……” “哼吼鳞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叫搁,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤赔桌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后渴逻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疾党,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年惨奕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雪位。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡梨撞,死狀恐怖雹洗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卧波,我是刑警寧澤时肿,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站港粱,受9級(jí)特大地震影響螃成,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜查坪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一寸宏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偿曙,春花似錦氮凝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至炭臭,卻和暖如春永脓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鞋仍。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來泰國打工常摧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓落午,卻偏偏與公主長得像谎懦,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溃斋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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