java基礎(chǔ)面試題

java基礎(chǔ)面試常見問題匯總

  • 面向?qū)ο蟮奶卣饔心男┓矫妫?/li>
  • Object類中的方法
  • ==和equals方法的區(qū)別
  • 八種基本數(shù)據(jù)類型的大小斗这,以及他們的封裝類
  • 關(guān)于hashCode方法
  • String佑淀、StringBuffer與StringBuilder的區(qū)別
  • int和Integer有什么區(qū)別?
  • 闡述final茄厘、finally、finalize的區(qū)別
  • 重載(Overload)和重寫(Override)的區(qū)別松却。重載的方法能否根據(jù)返回類型進(jìn)行區(qū)分沫浆?
  • 八種基本數(shù)據(jù)類型的大小,以及他們的封裝類
  • Error和Exception有什么區(qū)別洲尊?
  • java中如何實現(xiàn)比較器
  1. 面向?qū)ο蟮奶卣饔心男┓矫妫?/li>

1)抽象:抽象是將一類對象的共同特征總結(jié)出來構(gòu)造類的過程远豺,包括數(shù)據(jù)抽象和行為抽象兩方面奈偏。抽象只關(guān)注對象有哪些屬性和行為,并不關(guān)注這些行為的細(xì)節(jié)是什么躯护。

2)繼承:是從已有類得到繼承信息創(chuàng)建新類的過程惊来。提供繼承信息的類被稱為父類(超類、基類)棺滞;得到繼承信息的類被稱為子類(派生類裁蚁,復(fù)用父類基類的信息(包括方法和屬性)

3)封裝:通常認(rèn)為封裝是把數(shù)據(jù)和操作數(shù)據(jù)的方法綁定起來,對數(shù)據(jù)的訪問只能通過已定義的接口

4)多態(tài)性:多態(tài)性是指允許不同子類型的對象對同一消息作出不同的響應(yīng)继准。簡單的說就是用同樣的對象引用調(diào)用同樣的方法但是做了不同的事情枉证。多態(tài)性分為編譯時的多態(tài)性和運行時的多態(tài)性。

  1. 關(guān)于Object類中的方法
public class Object {

  private static native void registerNatives();

  static {
  registerNatives();
  }

  public final native Class<?> getClass();

  public native int hashCode();

  public boolean equals(Object obj) {

    return (this == obj);

  }

protected native Object clone() throws CloneNotSupportedException;

public String toString() {

return getClass().getName() + "@" + Integer.toHexString(hashCode());

}

public final native void notify();

public final native void notifyAll();

public final native void wait(long timeout) throws InterruptedException;

public final void wait(long timeout, int nanos) throws InterruptedException {

if (timeout < 0) {

throw new IllegalArgumentException("timeout value is negative");

}

if (nanos < 0 || nanos > 999999) {

throw new IllegalArgumentException(

"nanosecond timeout value out of range");

}

if (nanos > 0) {

timeout++;

}

wait(timeout);

 }

public final void wait() throws InterruptedException {

wait(0);

}

protected void finalize() throws Throwable { }

}

Object是所有類的父類移必,任何類都默認(rèn)繼承Object

  • clone 保護(hù)方法刽严,實現(xiàn)對象的淺復(fù)制,只有實現(xiàn)了Cloneable接口才可以調(diào)用該方法避凝,否則拋出CloneNotSupportedException異常舞萄。
  • equals 在Object中與==是一樣的,子類一般需要重寫該方法管削。
  • hashCode 該方法用于哈希查找倒脓,重寫了equals方法一般都要重寫hashCode方法。這個方法在一些具有哈希功能的Collection中用到含思。
  • getClass final方法崎弃,獲得運行時類型
  • wait 使當(dāng)前線程等待該對象的鎖,當(dāng)前線程必須是該對象的擁有者含潘,也就是具有該對象的鎖饲做。 wait() 方法一直等待,直到獲得鎖或者被中斷遏弱。 wait(long timeout) 設(shè)定一個超時間隔盆均,如果在規(guī)定時間內(nèi)沒有獲得鎖就返回。調(diào)用該方法后當(dāng)前線程進(jìn)入睡眠狀態(tài)漱逸,直到以下事件發(fā)生1泪姨、其他線程調(diào)用了該對象的notify方法。 2饰抒、其他線程調(diào)用了該對象的notifyAll方法肮砾。 3、其他線程調(diào)用了interrupt中斷該線程袋坑。 4仗处、時間間隔到了。 5、此時該線程就可以被調(diào)度了婆誓,如果是被中斷的話就拋出一個InterruptedException異常咒精。
  • notify 喚醒在該對象上等待的某個線程。
  • notifyAll 喚醒在該對象上等待的所有線程旷档。
  • toString 轉(zhuǎn)換成字符串模叙,一般子類都有重寫,否則打印句柄鞋屈。
  1. == 和equals的區(qū)別

1)基本類型

== 比較的是值

基本類型不存在equals方法范咨,equals方法是Object類中的方法

2)引用類型

== 比較的是地址,equals方法底層使用的是==

是否覆蓋Object類中的equals方法厂庇,如果覆蓋渠啊,以覆蓋的為準(zhǔn),一般是比較值权旷,沒重寫替蛉,就是Object類中的方法

image.png

例如:String的equals方法

image.png
  1. 八種基本數(shù)據(jù)類型的大小,以及他們的封裝類

八種基本數(shù)據(jù)類型:int拄氯、short躲查、float、double译柏、long镣煮、boolean、byte鄙麦、char典唇。

封裝類分別是:Integer、Short胯府、Float介衔、Double、Long骂因、Boolean炎咖、Byte、Character

image.png
  1. 關(guān)于hashCode方法
image.png

1)HashCode的特性

  • HashCode的存在主要是用于查找的快捷性侣签,如Hashtable塘装,HashMap等急迂,HashCode經(jīng)常用于確定對象的存儲地址影所。
  • 如果兩個對象相同,equals方法一定返回true僚碎,并且這兩個對象的HashCode一定相同猴娩。
  • 兩個對象的HashCode相同,并不一定表示兩個對象就相同,即equals()不一定為true卷中,只能夠說明這兩個對象在一個散列存儲結(jié)構(gòu)中矛双。
  • 如果對象的equals方法被重寫,那么對象的HashCode也盡量重寫蟆豫。

2)HashCode作用:加快查找速度
Java中的集合有兩類议忽,一類是List,再有一類是Set十减。前者集合內(nèi)的元素是有序的栈幸,元素可以重復(fù);后者元素?zé)o序帮辟,但元素不可重復(fù)速址。

equals方法可用于保證元素不重復(fù),但如果每增加一個元素就檢查一次由驹,若集合中現(xiàn)在已經(jīng)有1000個元素芍锚,那么第1001個元素加入集合時,就要調(diào)用1000次equals方法蔓榄。這顯然會大大降低效率并炮。于是,Java采用了哈希表的原理甥郑。

哈希算法也稱為散列算法渣触,是將數(shù)據(jù)依特定算法直接指定到一個地址上。

這樣一來壹若,當(dāng)集合要添加新的元素時嗅钻,先調(diào)用這個元素的HashCode方法,就一下子能定位到它應(yīng)該放置的物理位置上店展。

(1)如果這個位置上沒有元素养篓,它就可以直接存儲在這個位置上,不用再進(jìn)行任何比較了赂蕴。
(2)如果這個位置上已經(jīng)有元素了柳弄,就調(diào)用它的equals方法與新元素進(jìn)行比較,相同的話就不存了概说。
(3)不相同的話碧注,也就是發(fā)生了Hash key相同導(dǎo)致沖突的情況,那么就在這個Hash key的地方產(chǎn)生一個鏈表糖赔,將所有產(chǎn)生相同HashCode的對象放到這個單鏈表上去萍丐,串在一起(很少出現(xiàn))。

這樣一來實際調(diào)用equals方法的次數(shù)就大大降低了放典,幾乎只需要一兩次逝变。

如何理解HashCode的作用:
從Object角度看基茵,JVM每new一個Object,它都會將這個Object丟到一個Hash表中去壳影,這樣的話拱层,下次做Object的比較或者取這個對象的時候(讀取過程),它會根據(jù)對象的HashCode再從Hash表中取這個對象宴咧。這樣做的目的是提高取對象的效率根灯。若HashCode相同再去調(diào)用equal。

3)為什么需要重寫了equals方法也要重寫hashCode方法
一般的地方不需要重載hashCode掺栅,只有當(dāng)類需要放在HashTable箱吕、HashMap、HashSet等等hash結(jié)構(gòu)的集合時才會重載hashCode柿冲,那么為什么要重載hashCode呢茬高?

如果你重寫了equals,比如說是基于對象的內(nèi)容實現(xiàn)的假抄,而保留hashCode的實現(xiàn)不變怎栽,那么很可能某兩個對象明明是“相等”,而hashCode卻不一樣宿饱。
這樣熏瞄,當(dāng)你用其中的一個作為鍵保存到hashMap、hasoTable或hashSet中谬以,再以“相等的”找另一個作為鍵值去查找他們的時候强饮,則根本找不到。

為什么equals()相等为黎,hashCode就一定要相等邮丰,而hashCode相等,卻不要求equals相等?
1铭乾、因為是按照hashCode來訪問小內(nèi)存塊剪廉,所以hashCode必須相等。 2炕檩、HashMap獲取一個對象是比較key的hashCode相等和equal為true斗蒋。
之所以hashCode相等,卻可以equal不等笛质,就比如ObjectA和ObjectB他們都有屬性name泉沾,那么hashCode都以name計算,所以hashCode一樣,但是兩個對象屬于不同類型,所以equal為false对嚼。

為什么需要hashCode?
1、通過hashCode可以很快的查到小內(nèi)存塊揭朝。 2队贱、通過hashCode比較比equal方法快色冀,當(dāng)get時先比較hashCode潭袱,如果hashCode不同,直接返回false锋恬。

  1. String屯换、StringBuffer與StringBuilder的區(qū)別
    1)String 不可變字符串,線程安全与学,對字符串的操作都是創(chuàng)建新的字符串對象彤悔,效率低
    適用于少量的字符串操作的情況
    不能被繼承


    image.png

其中value[] 數(shù)組 使用final修飾,不可變

2)StringBuffer 線程安全索守,
適用多線程下在字符緩沖區(qū)進(jìn)行大量操作的情況晕窑。
定義


image.png

對本字符串進(jìn)行操作,返回本字符串

image.png

方法都是使用synchronized修飾


image.png

3)StringBuilder 線程不安全
適用于單線程下在字符緩沖區(qū)進(jìn)行大量操作的情況
定義


image.png

方法并沒有synchronized修飾
這三個類之間的區(qū)別主要是在兩個方面卵佛,即運行速度和線程安全這兩方面杨赤。 首先說運行速度,或者說是執(zhí)行速度截汪,在這方面運行速度快慢為:StringBuilder > StringBuffer > String疾牲。

String最慢的原因
String為字符串常量,而StringBuilder和StringBuffer均為字符串變量衙解,即String對象一旦創(chuàng)建之后該對象是不可更改的阳柔,但后兩者的對象是變量,是可以更改的蚓峦。

再來說線程安全
在線程安全上舌剂,StringBuilder是線程不安全的,而StringBuffer是線程安全的暑椰。

7.int和Integer有什么區(qū)別架诞?
1)Java是一個近乎純潔的面向?qū)ο缶幊陶Z言,但是為了編程的方便還是引入了基本數(shù)據(jù)類型干茉,但是為了能夠?qū)⑦@些基本數(shù)據(jù)類型當(dāng)成對象操作谴忧,Java為每一個基本數(shù)據(jù)類型都引入了對應(yīng)的包裝類型(wrapper class),int的包裝類就是Integer角虫,從Java 5開始引入了自動裝箱/拆箱機(jī)制沾谓,使得二者可以相互轉(zhuǎn)換。
Java 為每個原始類型提供了包裝類型:
原始類型:boolean戳鹅,char均驶,byte,short枫虏,int妇穴,long爬虱,float,double
包裝類型:Boolean腾它,Character跑筝,Byte,Short瞒滴,Integer曲梗,Long,F(xiàn)loat妓忍,Double
2)Integer緩存
Integer定義


image.png
public static void main(String[] args) {
    Integer a1 = 100, a2 = 100, a3 = 150, a4 = 150;
    System.out.println(a1 == a2);  //true
    System.out.println(a3 == a4);  //false
}

自動裝箱:
給一個Integer對象賦一個int值的時候虏两,會調(diào)用Integer類的靜態(tài)方法valueOf


image.png

范圍:-128---127

private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static final Integer cache[];

    static {
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
            try {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;

        cache = new Integer[(high - low) + 1];
        int j = low;
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);

        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert IntegerCache.high >= 127;
    }

    private IntegerCache() {}
}

如果整型字面量的值在-128到127之間,那么不會new新的Integer對象世剖,而是直接引用常量池中的Integer對象

8.闡述final定罢、finally、finalize的區(qū)別
1)final:修飾符(關(guān)鍵字)有三種用法:
java.lang.Integer
如果一個類被聲明為final旁瘫,意味著它不能再派生出新的子類祖凫,即不能被繼承,因此它和abstract是反義詞境蜕。


image.png

將變量聲明為final蝙场,可以保證它們在使用中不被改變,被聲明為final的變量必須在聲明時給定初值粱年,而在以后的引用中只能讀取不可修改售滤。


image.png

被聲明為final的方法也同樣只能使用,不能在子類中被重寫台诗。

java.lang.AbstractStringBuilder


image.png

2)finally:通常放在try…catch…的后面構(gòu)造總是執(zhí)行代碼塊完箩,這就意味著程序無論正常執(zhí)行還是發(fā)生異常,這里的代碼只要JVM不關(guān)閉都能執(zhí)行拉队,可以將釋放外部資源的代碼寫在finally塊中弊知。 流、連接粱快、鎖等資源的釋放


image.png

3)finalize:
Object類中定義的方法秩彤,Java中允許使用finalize()方法在垃圾收集器將對象從內(nèi)存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在銷毀對象時調(diào)用的事哭,通過重寫finalize()方法可以整理系統(tǒng)資源或者執(zhí)行其他清理工作漫雷。

finalize方法是Object提供的的實例方法,使用規(guī)則如下:

  • 當(dāng)對象不再被任何對象引用時鳍咱,GC會調(diào)用該對象的finalize()方法
  • finalize()是Object的方法降盹,子類可以覆蓋這個方法來做一些系統(tǒng)資源的釋放或者數(shù)據(jù)的清理
  • 可以在finalize()讓這個對象再次被引用,避免被GC回收谤辜;但是最常用的目的還是做cleanup
  • Java不保證這個finalize()一定被執(zhí)行蓄坏;但是保證調(diào)用finalize的線程沒有持有任何user-visible同步鎖价捧。
  • 在finalize里面拋出的異常會被忽略,同時方法終止涡戳。
  • 當(dāng)finalize被調(diào)用之后结蟋,JVM會再一次檢測這個對象是否能被存活的線程訪問得到,如果不是妹蔽,則清除該對象椎眯。也就是finalize只能被調(diào)用一次挠将;也就是說胳岂,覆蓋了finalize方法的對象需要經(jīng)過兩個GC周期才能被清除。

java.io.FileInputStream 重寫finalize方法


image.png

9.重載(Overload)和重寫(Override)的區(qū)別舔稀。重載的方法能否根據(jù)返回類型進(jìn)行區(qū)分乳丰?

方法的重載和重寫都是實現(xiàn)多態(tài)的方式,區(qū)別在于前者實現(xiàn)的是編譯時的多態(tài)性内贮,而后者實現(xiàn)的是運行時的多態(tài)性

1)overload 重載
重載發(fā)生在一個類中产园,同名的方法如果有不同的參數(shù)列表(參數(shù)類型不同、參數(shù)個數(shù)不同或者二者都不同)則視為重載
重載對返回類型沒有特殊的要求夜郁。

構(gòu)造函數(shù)重載


image.png

普通方法重載
java.lang.String


image.png

2)override 重寫


image.png

重寫發(fā)生在子類與父類之間什燕,重寫要求子類被重寫方法與父類被重寫方法有相同的返回類型,比父類被重寫方法更好訪問竞端,不能比父類被重寫方法聲明更多的異常

image.png

3)為什么不能根據(jù)返回類型來區(qū)分重載屎即?
在Java語言中,要重載一個方法事富,除了要與原方法具有相同的簡單名稱之外技俐,還要求必須擁有一個與原方法不同的特征簽名;

特征簽名就是一個方法中各個參數(shù)在常量池中的字段符號引用的集合统台,也就是因為返回值不會包含在特征簽名之中雕擂,因此Java語言里面是無法僅僅依靠返回值的不同來對一個已有方法進(jìn)行重載。
但在Class文件格式之中贱勃,特征簽名的范圍更大一些井赌,只要描述符不是完全一致的兩個方法也可以共存。

也就是說贵扰,如果兩個方法有相同的名稱和特征簽名仇穗,但返回值不同,那么也是可以合法存于同一個Class文件中的拔鹰。
Class文件中同方法名仪缸、同參數(shù)、不同返回值可以列肢,那為什么Java文件中不行呢恰画?
因為Java語言規(guī)范的規(guī)定宾茂,所以編譯時會出現(xiàn)錯誤。
那為什么Class文件可以呢拴还?因為Java虛擬機(jī)規(guī)范和Java語言規(guī)范不同跨晴,兩者是分開的...

10.Error和Exception有什么區(qū)別?
頂級對象


image.png

1)error 錯誤

Error表示系統(tǒng)級的錯誤和程序不必處理的異常片林,是恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題端盆;比如內(nèi)存溢出,不可能指望程序能處理這樣的情況

image.png

工作中遇到的error
StackOverflowError 棧內(nèi)存錯誤费封,可能遇到遞歸未退出的情況


image.png

如棧內(nèi)存錯誤焕妙,遞歸調(diào)用未退出則棧內(nèi)存溢出。


image.png

OutOfMemoryError 內(nèi)存溢出弓摘, tomcat啟動的時候報錯焚鹊,調(diào)大omcat jvm的內(nèi)存


image.png

2)Exception
Exception表示需要捕捉或者需要程序進(jìn)行處理的異常,是一種設(shè)計或?qū)崿F(xiàn)問題韧献;也就是說末患,它表示如果程序運行正常,從不會發(fā)生的情況锤窑。

image.png

3)RuntimeException 非檢查異常 運行時異常
可以直接拋出璧针,可以進(jìn)行處理,也可以不進(jìn)行處理

11.java中如何實現(xiàn)比較器
1)Comparable---接口(集合中元素實現(xiàn)此接口渊啰,元素具有可比性)


image.png

compareTo(Object o)方法的返回值是int探橱,且此方法只有一個參數(shù),返回值有三種情況:
1虽抄、返回正整數(shù)
2走搁、返回0
3、返回負(fù)整數(shù)
  可以這么理解:返回1表示當(dāng)前元素排在與之對比的元素后面迈窟,返回-1表示當(dāng)前元素排在與之對比的元素前面私植,返回0表示不排序(按其原順序排列)。(其實并不是1车酣,-1曲稼,0;只要是正數(shù)負(fù)數(shù)和0就可以進(jìn)行區(qū)分)。
元素自身可以理解為基準(zhǔn)湖员,而參數(shù)上的obj可以理解為與之對比的元素贫悄。

package com.zengqingfa.base;

/*
 *  @ author  zengqingfa
 *  @ created in    2019/8/13  22:17
 *
 */

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Person implements Comparable<Person> {

    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int compareTo(Person o) {
        if (this.age > o.getAge()) {//返回負(fù)數(shù)表示比他大的排在他前面
            return 1;
        }
        if (this.age < o.getAge()) {//返回整數(shù)表示比他小的排在他后面
            return -1;
        }
        return 0; //表示相等
    }

    public Person(int age, String name) {
        super();
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person [age=" + age + ", name=" + name + "]";
    }


    public static void main(String[] args) {
        List<Person> list = new ArrayList<Person>();
        list.add(new Person(20, "張三"));
        list.add(new Person(22, "李四"));
        list.add(new Person(19, "王五"));
        list.add(new Person(19, "張是"));
        list.add(new Person(17, "開發(fā)"));
        list.add(new Person(29, "看"));

        Collections.sort(list);
        for (Person p : list) {
            System.out.println(p);
        }
        /**
         * Person [age=17, name=開發(fā)]
         Person [age=19, name=王五]
         Person [age=19, name=張是]
         Person [age=20, name=張三]
         Person [age=22, name=李四]
         Person [age=29, name=看]
         */
    }
}

2) Comparator---接口(可以理解為比較器,給集合傳遞比較器集合具有可比性)


image.png

Comparator相當(dāng)于外部比較器娘摔,其作為參數(shù)傳給具有可比性的集合窄坦,使集合具有可比性。比如: TreeSet ts = new TreeSet(new MyComparator()); 比較器需要重寫compareTo(Object o1,Object o2)方法,返回值也是下面三個值:
1鸭津、返回正整數(shù)
2彤侍、返回0
3、返回負(fù)整數(shù)
可以這么理解:返回1表示當(dāng)前元素排在與之對比的元素后面逆趋,返回-1表示當(dāng)前元素排在與之對比的元素前面盏阶,返回0表示不排序(按其原順序排列)。(其實并不是1闻书,-1名斟,0;只要是正數(shù)負(fù)數(shù)和0就可以進(jìn)行區(qū)分)
compareTo(Object o1,Object o2)方法的第一個參數(shù)可以理解為基準(zhǔn),而參數(shù)上的第二個參數(shù)可以理解為與之對比的元素魄眉。

package com.zengqingfa.base;

/*
 *  @ author  zengqingfa
 *  @ created in    2019/8/13  22:25
 *
 */

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class PersonComparator implements Comparator<Person> {

    /**
     * 第一個參數(shù)可以理解為基準(zhǔn)砰盐,第二個是與之比較多元素 。返回負(fù)數(shù)表示排在其前面杆融,返回正數(shù)表示排在其后面
     */
    public int compare(Person o1, Person o2) {
        if (o1.getAge() > o2.getAge()) {// 返回負(fù)數(shù)表示比他大的排在他前面
            return -1;
        }
        if (o1.getAge() < o2.getAge()) {//返回正數(shù)表示比他大的排在他后面
            return 1;
        }
        return 0;
    }

    public static void main(String[] args) {
        List<Person> list = new ArrayList<Person>();
        list.add(new Person(20, "張三"));
        list.add(new Person(22, "李四"));
        list.add(new Person(19, "王五"));
        list.add(new Person(19, "張是"));
        list.add(new Person(17, "開發(fā)"));
        list.add(new Person(29, "看"));

        Collections.sort(list, new PersonComparator());
        for (Person p : list) {
            System.out.println(p);
        }
        /**
         * Person [age=29, name=看]
         Person [age=22, name=李四]
         Person [age=20, name=張三]
         Person [age=19, name=王五]
         Person [age=19, name=張是]
         Person [age=17, name=開發(fā)]
         */
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楞卡,一起剝皮案震驚了整個濱河市霜运,隨后出現(xiàn)的幾起案子脾歇,更是在濱河造成了極大的恐慌,老刑警劉巖淘捡,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件藕各,死亡現(xiàn)場離奇詭異,居然都是意外死亡焦除,警方通過查閱死者的電腦和手機(jī)激况,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膘魄,“玉大人乌逐,你說我怎么就攤上這事〈雌希” “怎么了浙踢?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灿渴。 經(jīng)常有香客問我洛波,道長,這世上最難降的妖魔是什么骚露? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任蹬挤,我火速辦了婚禮,結(jié)果婚禮上棘幸,老公的妹妹穿的比我還像新娘焰扳。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布吨悍。 她就那樣靜靜地躺著光绕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畜份。 梳的紋絲不亂的頭發(fā)上诞帐,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音爆雹,去河邊找鬼停蕉。 笑死,一個胖子當(dāng)著我的面吹牛钙态,可吹牛的內(nèi)容都是我干的慧起。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼册倒,長吁一口氣:“原來是場噩夢啊……” “哼蚓挤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起驻子,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灿意,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后崇呵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缤剧,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年域慷,在試婚紗的時候發(fā)現(xiàn)自己被綠了荒辕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡犹褒,死狀恐怖抵窒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情叠骑,我是刑警寧澤李皇,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站座云,受9級特大地震影響疙赠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朦拖,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一圃阳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧璧帝,春花似錦捍岳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽页徐。三九已至,卻和暖如春银萍,著一層夾襖步出監(jiān)牢的瞬間变勇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工贴唇, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留搀绣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓戳气,卻偏偏與公主長得像链患,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瓶您,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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