2023最新中級(jí)難度Go語言面試題,包含答案如孝。刷題必備!記錄一下娩贷。

好記性不如爛筆頭

內(nèi)容來自 面試寶典-中級(jí)難度Go語言面試題合集

問: 請(qǐng)描述一下Go語言的并發(fā)模型第晰,并解釋一下為什么它適合現(xiàn)代Web應(yīng)用?

Go語言的并發(fā)模型是基于CSP(Communicating Sequential Processes,通信順序進(jìn)程)理論茁瘦,主要是通過goroutine和channel來實(shí)現(xiàn)并發(fā)的品抽。goroutine可以看作是輕量級(jí)的線程,可以在同一臺(tái)機(jī)器上并發(fā)運(yùn)行甜熔,而且在運(yùn)行時(shí)會(huì)自動(dòng)調(diào)度和切換圆恤。channel則是在goroutine之間進(jìn)行通信的一種機(jī)制,可以發(fā)送和接收值腔稀,同時(shí)提供了一種同步機(jī)制盆昙,保證了數(shù)據(jù)的一致性和完整性。

這種并發(fā)模型非常適合現(xiàn)代Web應(yīng)用的原因有幾點(diǎn):

  1. 它可以很容易地實(shí)現(xiàn)高并發(fā)和高性能焊虏,因?yàn)镚oroutine是非常輕量級(jí)的淡喜,不需要像操作系統(tǒng)線程那樣創(chuàng)建和銷毀開銷大,而且Go語言的運(yùn)行時(shí)會(huì)自動(dòng)調(diào)度和管理Goroutine炕淮,無需擔(dān)心線程安全和死鎖等問題拆火。

  2. channel可以很好地解決并發(fā)數(shù)據(jù)一致性問題,避免了數(shù)據(jù)競爭和死鎖涂圆。

  3. Go語言的并發(fā)模型與現(xiàn)代Web應(yīng)用的業(yè)務(wù)邏輯非常契合们镜,大多數(shù)Web應(yīng)用都需要處理大量的并發(fā)請(qǐng)求,而Go語言的并發(fā)模型剛好可以滿足這種需求润歉。

  4. Go語言的標(biāo)準(zhǔn)庫已經(jīng)集成了很多高級(jí)特性模狭,例如并發(fā)Web服務(wù)、RPC踩衩、定時(shí)器等嚼鹉,可以快速構(gòu)建高性能的Web應(yīng)用。

綜上所述驱富,Go語言的并發(fā)模型非常適合現(xiàn)代Web應(yīng)用的開發(fā)锚赤,可以幫助開發(fā)者更容易地實(shí)現(xiàn)高性能和可擴(kuò)展的Web應(yīng)用。

問: 你能深入解釋一下Go語言的goroutine和channel的工作原理嗎褐鸥?

當(dāng)然可以线脚。Go語言是一種面向并發(fā)的語言,它的設(shè)計(jì)哲學(xué)之一是使并發(fā)編程變得容易叫榕。為了達(dá)到這個(gè)目的浑侥,Go引入了兩個(gè)重要的概念,分別是goroutine和channel晰绎。

首先寓落,讓我們來談?wù)刧oroutine。goroutine是Go語言中輕量級(jí)的線程荞下,它是Go運(yùn)行時(shí)系統(tǒng)管理的一種用戶級(jí)線程伶选,擁有自己的検贩桑空間。不同于操作系統(tǒng)級(jí)別的線程考蕾,它們的創(chuàng)建和銷毀開銷極小祸憋。當(dāng)你調(diào)用一個(gè)函數(shù)時(shí)会宪,你可以通過關(guān)鍵字go將其作為新的goroutine啟動(dòng)肖卧。每個(gè)Go程序都有一個(gè)主線程,當(dāng)程序開始執(zhí)行時(shí)掸鹅,該線程也會(huì)被自動(dòng)創(chuàng)建塞帐。

接下來,我們看看channel巍沙。channel是Go語言中用于不同goroutine之間通信的主要手段葵姥,它可以看作是一個(gè)特殊的類型,用于在多個(gè)goroutine之間傳輸數(shù)據(jù)句携。你可以在一個(gè)goroutine中向channel發(fā)送數(shù)據(jù)榔幸,在另一個(gè)goroutine中接收這些數(shù)據(jù)。這樣就可以避免直接的數(shù)據(jù)競爭問題矮嫉,因?yàn)樵谝粋€(gè)特定的時(shí)間點(diǎn)削咆,只有一個(gè)goroutine能夠訪問某個(gè)給定的channel。

總的來說蠢笋,goroutine和channel一起構(gòu)成了Go語言的強(qiáng)大并發(fā)能力拨齐,使得編寫高效率且易于維護(hù)的并發(fā)代碼成為可能。在實(shí)際應(yīng)用中昨寞,我們應(yīng)該合理利用這兩個(gè)特性瞻惋,盡量讓程序保持簡潔和高效。

問: 請(qǐng)談?wù)勀阍陧?xiàng)目中如何使用Go語言的sync包來確保數(shù)據(jù)的一致性和并發(fā)安全性援岩。

在項(xiàng)目中歼狼,我會(huì)經(jīng)常使用Go語言的sync包來確保數(shù)據(jù)的一致性和并發(fā)安全性。這是一個(gè)非常重要的包享怀,它提供了一些基本的同步原語羽峰,例如互斥鎖(mutex)、讀寫鎖(rwlock)以及通道(channel)凹蜈,可以幫助我們在并發(fā)環(huán)境中安全地共享和修改數(shù)據(jù)限寞。

在具體的應(yīng)用中,我主要會(huì)使用以下幾個(gè)方面:

  1. 對(duì)于臨界區(qū)的保護(hù)仰坦,我會(huì)使用互斥鎖(sync.Mutex)履植。這種鎖會(huì)在單一時(shí)刻只允許一個(gè)goroutine訪問特定的代碼段,從而防止了競態(tài)條件的發(fā)生悄晃。

  2. 在讀取操作頻繁的情況下玫霎,我會(huì)使用讀寫鎖(sync.RWMutex)凿滤。這種鎖允許多個(gè)讀取操作同時(shí)進(jìn)行,但只能有一個(gè)寫入操作庶近,并且當(dāng)有寫入操作正在進(jìn)行時(shí)翁脆,所有其他讀取或?qū)懭氩僮鞫紩?huì)阻塞,直到寫入操作完成鼻种。

  3. 當(dāng)需要在不同的goroutine之間傳遞數(shù)據(jù)或者通知其他goroutine時(shí)反番,我會(huì)使用通道(chan)。通道不僅可以用來傳遞數(shù)據(jù)叉钥,還可以起到同步的作用罢缸,因?yàn)橹挥性诹硪欢藴?zhǔn)備好接收數(shù)據(jù)的時(shí)候,發(fā)送操作才會(huì)完成投队。

在項(xiàng)目中枫疆,我會(huì)根據(jù)實(shí)際情況靈活運(yùn)用以上方法,以確保在高并發(fā)環(huán)境下的數(shù)據(jù)一致性敷鸦。

問: 你能否給出一個(gè)示例息楔,展示如何在Go語言中實(shí)現(xiàn)一個(gè)具有并發(fā)限制的工作池?

當(dāng)然可以扒披。在Go語言中值依,我們可以使用通道、互斥鎖等工具來實(shí)現(xiàn)一個(gè)具有并發(fā)限制的工作池谎碍。這里是一個(gè)簡單的例子:

package main

import (
  "fmt"
  "sync"
)

type Worker struct {
  wg sync.WaitGroup
  work chan int
}

func NewWorker(maxWorkers int) *Worker {
  return &Worker{
    work: make(chan int),
  }
}

func (w *Worker) DoWork(workerId int) {
  for work := range w.work {
    fmt.Printf("Worker %d processing job %d\n", workerId, work)
  }
}

func (w *Worker) SubmitJob(job int) {
  w.wg.Add(1)
  go func() {
    defer w.wg.Done()
    w.work <- job
  }()
}

func (w *Worker) Wait() {
  w.wg.Wait()
  close(w.work)
}

func main() {
  w := NewWorker(5)

  for i := 1; i <= 10; i++ {
    w.SubmitJob(i)
  }

  w.Wait()

  fmt.Println("All jobs done!")
}

在這個(gè)例子中鳞滨,我們創(chuàng)建了一個(gè)工作池,其中最多可以并行運(yùn)行5個(gè)工作任務(wù)蟆淀。每當(dāng)有新任務(wù)提交時(shí)拯啦,我們就添加一個(gè)新的goroutine到工作池,并將任務(wù)放到一個(gè)無緩沖的通道中等待處理熔任。一旦有工人空閑下來褒链,就會(huì)從通道中取出下一個(gè)任務(wù)進(jìn)行處理。最后疑苔,當(dāng)所有任務(wù)都完成后甫匹,我們關(guān)閉通道并等待所有工人完成他們的工作。

問: 你使用過Go語言的select語句嗎惦费?請(qǐng)解釋一下它在并發(fā)編程中的用途兵迅。

是的,我使用過Go語言的select語句薪贫。它是在并發(fā)編程中控制多路復(fù)用通信的關(guān)鍵工具恍箭。

select語句可以讓你在多個(gè)channel或func的調(diào)用之間選擇一個(gè)進(jìn)行操作。它會(huì)監(jiān)聽指定的所有case瞧省,如果多個(gè)case都可以執(zhí)行扯夭,那么會(huì)選擇其中一個(gè)執(zhí)行鳍贾。如果沒有case可以執(zhí)行,則select會(huì)阻塞交洗,直到至少有一個(gè)case可執(zhí)行為止骑科。

在Go的并發(fā)模型中,select語句通常用于控制通道間的通信和同步构拳。例如咆爽,你可以使用select來從多個(gè)channel接收數(shù)據(jù),或者同時(shí)發(fā)送數(shù)據(jù)到多個(gè)channel隐圾。這使得我們可以輕松地實(shí)現(xiàn)復(fù)雜的多線程間通信模式伍掀。

以下是使用select語句的一個(gè)簡單示例:

select {
case data := <- ch:
    fmt.Println("Received value:", data)
default:
    fmt.Println("No data received.")
}

在這個(gè)例子中掰茶,select語句監(jiān)聽名為ch的通道暇藏。如果有值可以從ch中接收,則打印接收到的值濒蒋;否則盐碱,打印"No data received."。

問: 如何優(yōu)化Go程序的性能和響應(yīng)時(shí)間沪伙?有哪些常見技巧和方法瓮顽?

優(yōu)化Go程序的性能和響應(yīng)時(shí)間可以通過多種方式來實(shí)現(xiàn)。以下是一些常見的技巧和方法:

  1. 使用profiling工具進(jìn)行性能分析:使用內(nèi)置的pprof包或者其他第三方profiling工具(如gperftools)可以幫助找出程序中的瓶頸和性能問題围橡。

  2. 盡量減少GC的壓力:通過合理的內(nèi)存分配策略和對(duì)象生命周期管理暖混,可以有效地降低GC帶來的壓力,從而提高程序的性能翁授。

  3. 使用緩存優(yōu)化:對(duì)于那些計(jì)算成本較高的部分拣播,可以考慮使用緩存來存儲(chǔ)已經(jīng)計(jì)算過的結(jié)果,以便下次可以直接使用收擦。

  4. 優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法:選擇適合數(shù)據(jù)特性的數(shù)據(jù)結(jié)構(gòu)和高效的算法贮配,可以使程序更快地處理大量數(shù)據(jù)。

  5. 使用并發(fā)和并行:充分利用Go語言的并發(fā)和并行功能塞赂,可以讓程序在多核CPU上并行執(zhí)行泪勒,進(jìn)一步提高程序的執(zhí)行效率。

  6. 調(diào)整硬件資源:合理配置服務(wù)器硬件資源(如CPU宴猾、內(nèi)存圆存、磁盤I/O等),也可以有效提高程序的性能仇哆。

  7. 采用適當(dāng)?shù)木幾g器優(yōu)化級(jí)別:在不影響程序正確性的前提下沦辙,適當(dāng)提高編譯器的優(yōu)化級(jí)別,可以使得生成的機(jī)器碼更高效税产。

  8. 減少網(wǎng)絡(luò)IO延遲:在網(wǎng)絡(luò)請(qǐng)求較多的情況下怕轿,可以通過連接池偷崩、HTTP/2、預(yù)加載等技術(shù)來減少網(wǎng)絡(luò)IO延遲撞羽。

  9. 注意資源的及時(shí)釋放:程序運(yùn)行過程中應(yīng)盡可能及時(shí)釋放不再使用的資源阐斜,避免內(nèi)存泄漏等問題影響程序性能。

  10. 使用靜態(tài)類型檢查和代碼審查:提前發(fā)現(xiàn)并修復(fù)代碼中的錯(cuò)誤和缺陷诀紊,可以減少運(yùn)行時(shí)的錯(cuò)誤處理和異常情況谒出,從而提高程序的穩(wěn)定性。

以上就是在優(yōu)化Go程序的性能和響應(yīng)時(shí)間時(shí)的一些常見技巧和方法邻奠,實(shí)際工作中可以根據(jù)具體情況綜合使用笤喳。

問: 你了解Go語言的內(nèi)存模型嗎?可以介紹一下Go語言中的逃逸分析和堆分配碌宴。

是的杀狡,我了解Go語言的內(nèi)存模型。

Go語言的內(nèi)存模型主要包括棧贰镣、堆和程序數(shù)據(jù)區(qū)域呜象。其中,棧主要存放局部變量和函數(shù)參數(shù)碑隆,當(dāng)函數(shù)退出時(shí)會(huì)被自動(dòng)回收恭陡;堆則是用于存放全局變量、動(dòng)態(tài)分配的對(duì)象以及不可回收的內(nèi)存上煤。

逃逸分析是Go語言中的一個(gè)重要特性休玩,主要用于確定變量是否需要在堆上分配內(nèi)存。當(dāng)一個(gè)變量可能離開其聲明作用域(即“逃逸”到函數(shù)外部)時(shí)劫狠,Go語言會(huì)將其分配在堆上拴疤。這意味著即使函數(shù)返回后,這個(gè)變量仍然可以在其他地方被引用和使用嘉熊。

堆分配是指在堆上分配內(nèi)存的過程遥赚。在Go語言中,通常情況下阐肤,程序會(huì)自動(dòng)進(jìn)行堆分配和回收凫佛,但是如果變量發(fā)生逃逸,就需要手動(dòng)進(jìn)行垃圾回收孕惜。這對(duì)于避免內(nèi)存泄露和提高程序性能非常重要愧薛。

為了更好地理解這一點(diǎn),我們可以通過使用編譯選項(xiàng)-gcflags "-m"進(jìn)行逃逸分析衫画,查看哪些變量發(fā)生了逃逸毫炉,從而判斷哪些變量被分配到了堆上。通過這種方式削罩,我們可以更好地理解和控制內(nèi)存的分配和管理瞄勾。

問: 請(qǐng)解釋一下Go語言中的channel緩沖區(qū)和無緩沖區(qū)的區(qū)別以及使用場景费奸。

Go語言中的channel有兩種類型:帶緩沖的channel和不帶緩沖的channel。

帶緩沖的channel允許預(yù)先定義一個(gè)固定大小的buffer进陡,每次最多可以存儲(chǔ)這么多元素愿阐。當(dāng)生產(chǎn)者嘗試發(fā)送更多元素時(shí),如果緩沖區(qū)已滿趾疚,則會(huì)阻塞直到消費(fèi)者從緩沖區(qū)取出一些元素騰出空間缨历。反之,如果緩沖區(qū)為空并且沒有生產(chǎn)者正在發(fā)送元素糙麦,那么消費(fèi)者會(huì)一直阻塞辛孵,直到有元素可供消費(fèi)。

不帶緩沖的channel不允許存儲(chǔ)任何元素赡磅。當(dāng)一個(gè)生產(chǎn)者試圖向一個(gè)無緩沖的channel發(fā)送數(shù)據(jù)時(shí)魄缚,它會(huì)阻塞直到有一個(gè)消費(fèi)者準(zhǔn)備接受數(shù)據(jù)。同樣地仆邓,如果一個(gè)消費(fèi)者試圖從一個(gè)無緩沖的channel接收數(shù)據(jù)鲜滩,而沒有任何生產(chǎn)者正在發(fā)送數(shù)據(jù),那么消費(fèi)者會(huì)阻塞节值,直到有數(shù)據(jù)可用。

因此榜聂,這兩種類型的channel適用于不同的應(yīng)用場景:

  • 帶緩沖的channel常用于限制并發(fā)度和流量控制搞疗,尤其是在數(shù)據(jù)生產(chǎn)速度遠(yuǎn)大于消費(fèi)速度的情況下,可以防止消費(fèi)者被過多的數(shù)據(jù)淹沒须肆,同時(shí)也能避免大量的線程因等待數(shù)據(jù)而處于阻塞狀態(tài)匿乃。
  • 不帶緩沖的channel則常常用于同步,例如當(dāng)生產(chǎn)者和消費(fèi)者必須嚴(yán)格按順序進(jìn)行交互時(shí)豌汇,可以使用無緩沖的channel來進(jìn)行同步幢炸,保證數(shù)據(jù)傳遞的一對(duì)一關(guān)系。

因此拒贱,在實(shí)際開發(fā)中宛徊,應(yīng)根據(jù)具體的業(yè)務(wù)需求和場景選擇合適類型的channel。

問: 描述一下如何在Go語言中實(shí)現(xiàn)一個(gè)高效的緩存機(jī)制逻澳。

在Go語言中實(shí)現(xiàn)一個(gè)高效的緩存機(jī)制可以遵循以下幾個(gè)步驟:

  1. 選擇合適的數(shù)據(jù)結(jié)構(gòu):首先闸天,我們需要選擇一種合適的數(shù)據(jù)結(jié)構(gòu)用于存儲(chǔ)緩存項(xiàng)。通常情況下斜做,可以選擇map作為基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)苞氮,因?yàn)樗С挚焖俨檎摇?/p>

  2. 實(shí)現(xiàn)添加元素的方法:我們需要實(shí)現(xiàn)一個(gè)add方法,該方法接受鍵和值作為輸入瓤逼,并將它們添加到緩存中笼吟。如果鍵已經(jīng)存在库物,則更新相應(yīng)的值。

  3. 實(shí)現(xiàn)獲取元素的方法:我們也需要實(shí)現(xiàn)一個(gè)get方法贷帮,該方法接受鍵作為輸入艳狐,并從緩存中獲取對(duì)應(yīng)的值。如果鍵不存在皿桑,則返回nil或錯(cuò)誤毫目。

  4. 設(shè)置最大容量:為了避免內(nèi)存溢出,我們還需要設(shè)置緩存的最大容量诲侮。當(dāng)緩存超過最大容量時(shí)镀虐,我們可以采用LRU(最近最少使用的)或LFU(最不常用的)策略來淘汰舊的緩存項(xiàng)。

  5. 添加超時(shí)功能:為了提高緩存的有效性沟绪,我們可以為緩存項(xiàng)設(shè)置超時(shí)時(shí)間刮便。一旦某個(gè)緩存項(xiàng)的超時(shí)時(shí)間到達(dá),就將其從緩存中刪除绽慈。

以下是一個(gè)簡單的示例:

type Cache struct {
  maxSize     int
  items       map[string]*cacheItem
  expiration  time.Duration
  lock        sync.Mutex
}

type cacheItem struct {
  value interface{}
  time  time.Time
}

func NewCache(maxSize int, expiration time.Duration) *Cache {
  return &Cache{
    maxSize:     maxSize,
    items:       make(map[string]*cacheItem),
    expiration:  expiration,
    lock:        sync.Mutex{},
  }
}

func (c *Cache) Add(key string, val interface{}) error {
  c.lock.Lock()
  defer c.lock.Unlock()

  if _, ok := c.items[key]; ok {
    return errors.New("Key already exists")
  }

  item := &cacheItem{value: val, time: time.Now()}
  c.items[key] = item
  go c.removeOldItems()

  return nil
}

func (c *Cache) Get(key string) (interface{}, error) {
  c.lock.Lock()
  defer c.lock.Unlock()

  item, ok := c.items[key]
  if !ok || time.Since(item.time) > c.expiration {
    return nil, errors.New("Not found or expired")
  }

  return item.value, nil
}

func (c *Cache) removeOldItems() {
  for len(c.items) > c.maxSize {
    var oldestKey string
    var oldestTime time.Time

    for k, v := range c.items {
      if oldestTime.IsZero() || v.time.Before(oldestTime) {
        oldestKey, oldestTime = k, v.time
      }
    }

    delete(c.items, oldestKey)
  }
}

上述示例中的緩存實(shí)現(xiàn)了一個(gè)簡單的基本功能恨旱,但在實(shí)際使用時(shí)可能需要進(jìn)行更多的擴(kuò)展和優(yōu)化,例如添加并發(fā)控制等坝疼。

問: 你使用過Go語言的context包來實(shí)現(xiàn)請(qǐng)求超時(shí)和取消操作嗎搜贤?能否給我展示一下示例代碼?

是的钝凶,我在項(xiàng)目中使用過context包來實(shí)現(xiàn)請(qǐng)求超時(shí)和取消操作仪芒。這是一個(gè)非常有用的功能,可以方便我們處理長時(shí)間運(yùn)行的任務(wù)和其他類似的情況耕陷。

以下是一個(gè)簡單的示例:

package main

import (
  "context"
  "fmt"
  "time"
)

func doSomething(ctx context.Context) {
  select {
  case <-ctx.Done():
    fmt.Println("doSomething cancelled")
    return
  default:
    fmt.Println("doing something...")
    time.Sleep(time.Second * 5)
    fmt.Println("done")
  }
}

func main() {
  ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
  defer cancel()

  go doSomething(ctx)

  select {
  case <-ctx.Done():
    fmt.Println("main function cancelled")
    return
  default:
    fmt.Println("waiting...")
    time.Sleep(time.Second * 10)
  }
}

在這個(gè)例子中掂名,我們創(chuàng)建了一個(gè)具有3秒超時(shí)的新context。然后我們將doSomething函數(shù)作為goroutine運(yùn)行哟沫,并在其內(nèi)部檢查context是否已取消饺蔑。如果doSomething函數(shù)耗時(shí)超過3秒,那么我們會(huì)看到輸出 "doSomething cancelled" 和 "main function cancelled"嗜诀,這是因?yàn)橹骱瘮?shù)也檢測到了超時(shí)并取消了自己猾警,進(jìn)而導(dǎo)致doSomething也被取消。

另外裹虫,如果你想要主動(dòng)取消某個(gè)任務(wù)肿嘲,可以調(diào)用cancel函數(shù)來結(jié)束對(duì)應(yīng)的context,從而中斷所有依賴于此context的goroutine筑公。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末雳窟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌封救,老刑警劉巖拇涤,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異誉结,居然都是意外死亡鹅士,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門惩坑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掉盅,“玉大人,你說我怎么就攤上這事以舒≈憾唬” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵蔓钟,是天一觀的道長永票。 經(jīng)常有香客問我,道長滥沫,這世上最難降的妖魔是什么侣集? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮兰绣,結(jié)果婚禮上腥椒,老公的妹妹穿的比我還像新娘焕襟。我一直安慰自己典鸡,他們只是感情好潮针,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雌澄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪杯瞻。 梳的紋絲不亂的頭發(fā)上镐牺,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音魁莉,去河邊找鬼睬涧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛旗唁,可吹牛的內(nèi)容都是我干的畦浓。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼检疫,長吁一口氣:“原來是場噩夢啊……” “哼讶请!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起屎媳,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤夺溢,失蹤者是張志新(化名)和其女友劉穎论巍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體风响,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘉汰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了状勤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞋怀。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖持搜,靈堂內(nèi)的尸體忽然破棺而出密似,到底是詐尸還是另有隱情,我是刑警寧澤朵诫,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布辛友,位于F島的核電站,受9級(jí)特大地震影響剪返,放射性物質(zhì)發(fā)生泄漏废累。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一脱盲、第九天 我趴在偏房一處隱蔽的房頂上張望邑滨。 院中可真熱鬧,春花似錦钱反、人聲如沸掖看。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哎壳。三九已至,卻和暖如春尚卫,著一層夾襖步出監(jiān)牢的瞬間归榕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來泰國打工吱涉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刹泄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓怎爵,卻偏偏與公主長得像特石,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鳖链,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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