Android面試基礎

1流酬、 Android中四大組件及其作用嗦董?

  1. Activity:activity是用戶和應用程序交互的窗口居兆,一個activity相當于我們實際中的一個網頁,當打開一個屏幕時感混,之前的那一個屏幕會被置為暫停狀態(tài)端幼,并且壓入歷史堆棧中,用戶可以通過回退操作返回到以前打開過的屏幕弧满。activity的生命周期:即“產生婆跑、運行、銷毀”庭呜,但是這其中會調用許多方法onCreate(創(chuàng)建) 滑进、onStart(激活)、onResume(恢復)募谎、onPause(暫停)扶关、onStop(停止)、onDestroy(銷毀)数冬、onRestart(重啟)节槐。

  2. Service:Service是一種程序,它可以運行很長的時間拐纱,相當于后臺的一個服務铜异,通過startService(Intent service)可以啟動一個Service,通過Context.bindService()可以綁定一個Service秸架。

  3. BroadCastRecevicer:接受一種或者多種Intent作觸發(fā)事件揍庄,接受相關消息,做一些簡單處理咕宿,轉換成一條Notification币绩,統(tǒng)一了Android的事件廣播模型「В可以使用BroadcastReceiver來讓應用對外一個外部的事件作出響應缆镣。Broadcast Receiver通過NotificationManager來通知用戶這些事情發(fā)生了,BroadcastReceiver注冊的有兩種方式试浙,一種是可以在AndroidManifest.xml中注冊董瞻,另一種可以在運行時的代碼中使用Context.registerReceiver()進行注冊。用戶還可以通過Context.sendBroadcast()將他們自己的intent broadcasts廣播給其他的應用程序。

  4. Content provider:內容提供者钠糊,可通過它來共享自己的數據給外部調用挟秤,給第三方應用提供數據訪問的接口。

2抄伍、ListView的優(yōu)化方案艘刚?

  1. tem布局,層級越少越好截珍,使用hierarchyview工具查看優(yōu)化攀甚。
  2. 復用convertView
  3. 使用ViewHolder
  4. item中有圖片時,異步加載
  5. 快速滑動時岗喉,不加載圖片
  6. item中有圖片時秋度,應對圖片進行適當壓縮
  7. 實現數據的分頁加載

  1. 如果自定義適配器,那么在getView方法中要考慮方法傳進來的參數contentView是否為null钱床,如果為null就創(chuàng)建contentView并返回荚斯,如果不為null則直接使用。在這個方法中盡可能少創(chuàng)建view查牌。

  2. 給contentView設置tag(setTag())事期,傳入一個viewHolder對象, 用于緩存要顯示的數據僧免,可以達到圖像數據異步加載的效果刑赶。

  3. 如果listview需要顯示的item很多,就要考慮分頁加載懂衩。比如一共要 顯示100條或者更多的時候撞叨,我們可以考慮先加載20條,等用戶拉到列表 底部的時候再去加載接下來的20條浊洞。分頁加載還沒學習牵敷。

3、Android中五種數據存儲方式分別是什么法希?他們的特點枷餐?

Android提供了五種存取數據的方式
(1)SharedPreference,存放較少的五種類型的數據苫亦,只能在同一個包內使 
用毛肋,生成XML的格式存放在設備中 
(2) SQLite數據庫,存放各種數據屋剑,是一個輕量級的嵌入式數據庫 
(3) File文件润匙,通過讀取寫入方式生成文件存放數據 
(4) ContentProvider,主要用于讓其他應用程序使用保存的數據
(5)通過網絡獲取數據和寫入數據到網絡存儲空間

4唉匾、列舉Android中的主要五種常用布局孕讳?

最常用的布局有以下這幾種: 
第一種:幀布局(框架布局)FrameLayout 
第二種:線性布局LinearLayout 
第三種:絕對布局AbsoluteLayout 
第四種:相對布局RelativeLayout
第五種:表格布局TableLayout

5、敘述學過的系統(tǒng)提供的Adapter?說明自定義Adapter與系統(tǒng)Adapter的區(qū)別厂财?

采用ArrayAdapter芋簿、SimpleAdapter和SimpleCursorAdapter這些系統(tǒng)自帶的適配器,對于事件的響應只能局限在一個行單位璃饱。 假設一行里面有一個按鈕控件与斤,它們之間的響應操作是不一樣的。若采用系統(tǒng)自帶的適配器帜平,就不能精確到每個控件的響應事件幽告。這時梅鹦,我們一般采取自定義適配器來實現這個比較精確地請求裆甩。

6、Android中asset文件夾和raw文件夾區(qū)別齐唆?

res/raw和assets的相同點:

兩者目錄下的文件在打包后會原封不動的保存在apk包中嗤栓,不會被編譯成二進制。

res/raw和assets的不同點:

(1)res/raw中的文件會被映射到R.Java文件中箍邮,訪問的時候直接使用資源ID即 R.raw.filename茉帅;assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類锭弊。

(2)res/raw不可以有目錄結構堪澎,而assets則可以有目錄結構,也就是assets目錄下可以再建立文件夾

(3)讀取文件資源舉例:
讀取res/raw下的文件資源味滞,通過以下方式獲取輸入流來進行寫操作
InputStream is = getResources().openRawResource(R.raw.filename);
讀取assets下的文件資源樱蛤,通過以下方式獲取輸入流來進行寫操作
AssetManager am = null;
am = getAssets();
InputStream is = am.open(“filename”);

7、顯式Intent和隱式Intent區(qū)別剑鞍?

Intent是一種在不同組件之間傳遞的請求消息昨凡,是應用程序發(fā)出的請求和意圖。對于明確指出了目標組件名稱的Intent蚁署,我們稱之為顯式Intent便脊。對于沒有明確指出目標組件名稱的Intent,則稱之為隱式Intent光戈。Android系統(tǒng)使用IntentFilter 來尋找與隱式Intent相關的對象哪痰。

顯式Intent直接用組件的名稱定義目標組件,這種方式很直接久妆。但是由于開發(fā)人員往往并不清楚別的應用程序的組件名稱晌杰,因此,顯式Intent更多用于在應用程序內部傳遞消息镇饺。比如在某應用程序內乎莉,一個Activity啟動一個Service。
隱式Intent恰恰相反,它不會用組件名稱定義需要激活的目標組件惋啃,它更廣泛地用于在不同應用程序之間傳遞消息哼鬓。

8、簡要描述AIDL的實現步驟边灭?

服務器端:

1:服務器端寫AIDL 
2:服務器端繼承Service异希,重寫3個方法 
3:服務器端實例化一個AIDL定義接口的Stub對象,并實現接口的抽象方法绒瘦; 
4:配置文件 

客戶端:

1:拷貝AIDL文件 
2:綁定與Service端的服務 
3:實現ServiceConnection称簿,在實現的過程中通過Service端傳遞過來的IBinder得到Stub對象;例如:接口名.Stub.asInterface(service); 
4:通過Stub對象調用相應方法

9惰帽、 談談Service的生命周期,以及兩種方式的區(qū)別憨降?

Service的生命周期由使用Service兩種方式決定,啟動方式不同生命周期不同该酗。

(1)Start方式啟動Service的生命周期: 
onCreate()—onStartCommond()—onDestroy() 
調用者和服務之間沒有任何的聯系授药,即使調用者退出,那么服務也仍然進行呜魄。 
(2)Bind方式啟動Service的生命周期:onCreate()->onBind()->–>onUnbind() -> onDestroy() 
調用者和服務綁定在一起悔叽,調用者退出,服務即便退出爵嗅。

10娇澎、 敘述學過的系統(tǒng)提供的Adapter(說明自定義Adapter與系統(tǒng)Adapter的區(qū)別)?

采用ArrayAdapter睹晒、SimpleAdapter和SimpleCursorAdapter這些系統(tǒng)自帶的適配器趟庄,對于事件的響應只能局限在一個行單位。假設一行里面有一個按鈕控件册招,它們之間的響應操作是不一樣的岔激。若采用系統(tǒng)自帶的適配器,就不能精確到每個控件的響應事件是掰。這時虑鼎,我們一般采取自定義適配器來實現這個比較精確地請求。

11键痛、寫出ListView優(yōu)化的代碼炫彩,已知自定義ListView中自定義布局文件為list_item.xml里面有ImageView和TextView兩個組件,其id為item_image絮短、item_text江兢。

public View getView(int position, View convertView, ViewGroup parent) {  
ViewHolder viewHolder;  
if(convertView==null){  
    viewHolder=new ViewHolder();  
    convertView=LayoutInflater.from(c).inflate(R.layout.list_item, null);  
    viewHolder.text=(TextView) convertView.findViewById(R.id.item_text);  
    viewHolder.image=(ImageView) convertView.findViewById(R.id.item_image);  
    convertView.setTag(viewHolder);  
}  
viewHolder=(ViewHolder) convertView.getTag();  
viewHolder.text.setText(list.get(position).getText());  
viewHolder.image.setImageResource(list.get(position).getImage());  
return convertView;  
}  
static class ViewHolder{  
TextView text;  
ImageView image;  
}  

12、 描述通過contentResolver獲取ContentProvider內容的基本步驟 丁频?

第一:得到ContentResolver類對象 
ContentResolver cr=getContentResolver(); 
第二:定義要查詢的字段String數組 
第三:使用cr.query();返回一個Cursor對象 
第四:使用while循環(huán)得到Cursor里面的內容

13杉允、 描述一下自定義ContentProvider的步驟邑贴。

自定義contentprovider步驟

1)繼承Android的ContentProvider基類實現自己的ContentProvider類。 
2)實現 ContentProvider里的onCreate方法叔磷,創(chuàng)建provider的數據拢驾,一般為數據庫sqlite,那么我們在onCreate里實例化一個SqliteOpenHelper改基。 
3)在ContentProvider 里面重寫insert/delete/update/query增刪改查這些方法繁疤。在每個方法里面實現相應的功能。 
4)在AndroidManifest.xml文件中注冊該ContentProvider類秕狰,為ContentProvider指定Uri稠腊。

14、 如何實現一個幀動畫?

在布局文件中添加ImageView組件鸣哀,設置background為res/anim/fram.xml動畫效果 
通過ImageView對象的getBackground()方法得到AnimationDrawable對象 
通過AnimationDrawable對象的start()來啟動幀動畫架忌,stop()來停止動畫

15、 res/raw與assets目錄的區(qū)別诺舔?

相同點:

兩者都會原封不動的保存在apk包中鳖昌,不會被編譯成二進制碼。 

不同點:

1低飒、raw目錄下只能存放文件,不能存放下一級的文件夾懂盐,而assets可以存放下一級的文件夾褥赊。 
2、raw目錄下的資源會映射到R.java中生成資源id莉恼。而assets不會拌喉。 
3、獲得資源的方法不同俐银。代碼如下: 
this.getAssets().open(“xml/channels.xml”) 
this.getResources().openRawResource(R.raw.students) 
this.getClassLoader().getResourceAsStream(“student.xml”)

16尿背、 簡述Handler機制原理?

Andriod提供了 Handler 和 Looper 來滿足線程間的通信捶惜。

Android不允許UI線程之外的線程改變UI組件的值田藐,所以要想在其他線程里面改變UI組件的值,必須使用Handler來實現吱七。
Looper: 一個線程可以產生一個Looper對象汽久,由它來管理此線程里的Message Queue(消息隊列)。
Handler: 你可以構造Handler對象來與Looper溝通踊餐,以便push(上傳)新消息到Message Queue里;或者接收Looper從Message Queue取出的消息景醇。
Message Queue(消息隊列,特點:先進先出):用來存放線程放入的消息吝岭。
線程:UI thread 通常就是main thread三痰,而Android啟動程序時會替它建立一個Message Queue吧寺。
Handler、Looper散劫、MessageQueue的初始化流程如下所示撮执。
Hander持有對UI主線程消息隊列UI_MQ和消息循環(huán)Looper的引用,子線程可以通過Handler將消息發(fā)送到UI線程的消息隊列UI_MQ中舷丹。
Handler處理消息
UI主線程通過Looper循環(huán)查詢消息隊列UI_MQ抒钱,當發(fā)現有消息存在時會將消息從消息隊列中取出。首先分析消息颜凯,通過消息的參數判斷該消息對應的Handler谋币,然后將消息分發(fā)到指定的Handler進行處理。

17症概、在android中如何使用SqliteOpenHelper?

1蕾额、建立一個類繼承SqliteOpenHelper,聲明一個構造方法彼城,參數包括(Context,name,CursorFactory,version)诅蝶;創(chuàng)建數據庫 
2、實現其oncreate() 創(chuàng)建表 
3:通過onupgrade() 版本號更新時執(zhí)行募壕; 
4调炬、實例化所建類對象,對其進行讀寫操作舱馅,執(zhí)行sql語句創(chuàng)建數據庫(當對其使用讀寫時會判斷數據庫是否存在缰泡,如果存在,則不執(zhí)行oncreate代嗤,不存在則執(zhí)行)棘钞。

18、使用SqliteOpenHelper和SqliteDatabase進行增刪改查具體的方法和參數干毅?

1宜猜、通過SqliteOpenHelper得到SqliteDataBase的實例化對象(分為讀寫兩種); 
2硝逢、調用execSQL()執(zhí)行增刪改的SQL語句,傳入SQL語句及需要填充的參數姨拥; 
調用Cursor cursor = rawQuery()執(zhí)行查詢的語句 
3、對執(zhí)行SQL語句返回的游標趴捅,進行遍歷垫毙; 
4、及時關閉SqliteDataBase拱绑。

19综芥、Sqlite和sharedPreference的區(qū)別

(1)Sqlite是嵌入式SQL數據庫引擎SQLite(SQLite Embeddable SQL Database Engine)的一個擴展。SQLite是一個實現嵌入式SQL數據庫引擎的 C語言庫(C library)猎拨。用SQLite連接的程序可以使用SQL數據庫膀藐,但不需要運行一個單獨的關系型數據庫管理系統(tǒng)進程(separate RDBMS process)屠阻。SQLite直接讀寫(reads and writes directly)在硬盤上的數據庫文件。

(2)SharedPreferences也是一種輕型的數據存儲方式额各,它的本質是基于XML文件存儲key-value鍵值對數據国觉,通常用來存儲一些簡單的配置信息。其存儲位置在/data/data/<包名>/shared_prefs目錄下虾啦。SharedPreferences對象本身只能獲取數據而不支持存儲和修改麻诀,存儲修改是通過Editor對象實現。

20傲醉、為什么要用ContentProvider?它與sql在實現上有何區(qū)別

Sql只能在該工程的內部共享數據蝇闭,ContentProvider能在工程之間實現數據共享。

21硬毕、描述ContentProvider URI有哪幾部分組成

URI由是部分組成:
content://com.example.transportation/trains/122

A呻引,標準的前綴: ContentProvider(內容提供者)的scheme已經由Android所規(guī)定, scheme為:content://

B吐咳,唯一標識整個Content Provider: 主機名(或叫Authority)用于唯一標識這個ContentProvider逻悠,外部調用者可以根據這個標識來找到它。

C韭脊,描述了數據的路徑童谒,確定返回哪類數據: 路徑(path)可以用來表示我們要操作的數據,路徑的構建應根據業(yè)務而定

D乾蓬,ID唯一標注請求的數據: 我們要請求數據的ID

22惠啄、如何通過contentResolver掃描sdcard所有多媒體文件?

1) 通過ContentResolver訪問系統(tǒng)多媒體提供的ContentProvider,得到多媒體音樂的cursor 
2) 解析cursor任内,通過cursor得到對應文件列表 
3) 設置listView,根據格式不同展示不同圖片,進行使用

23融柬、.描述一下開發(fā)ContentProvider的步驟

自定義contentprovider步驟

繼承Android的ContentProvider基類實現自己的ContentProvider類死嗦。
實現 ContentProvider里的onCreate方法,創(chuàng)建provider的數據粒氧,一般為數據庫sqlite越除,那么我們在onCreate里實例化一個SqliteOpenHelper。
在ContentProvider 里面重寫insert/delete/update/query增刪改查這些方法外盯。在每個方法里面實現相應的功能摘盆。
在AndroidManifest.xml文件中注冊該ContentProvider類,為ContentProvider指定Uri饱苟。

24孩擂、.Android中如何訪問自定義ContentProvider?

1:得到ContentResolver類對象:ContentResolver cr = getContentResolver(); 
2:定義要查詢的字段String數組箱熬。 
3:使用cr.query(URI,字段數組类垦,null狈邑, null,null);蚤认,返回一個Cursor對象米苹。 
4:使用while循環(huán)得到Cursor里面的內容。

25砰琢、 Android中五種數據存儲方式分別是什么蘸嘶?他們的特點?

Android提供了五種存取數據的方式

(1)SharedPreference陪汽,存放較少的五種類型的數據训唱,只能在同一個包內使用,生成XML的格式存放在設備中 
(2) SQLite數據庫掩缓,存放各種數據雪情,是一個輕量級的嵌入式數據庫 
(3) File文件,通過讀取寫入方式生成文件存放數據 
(4) ContentProvider你辣,主要用于讓其他應用程序使用保存的數據 
(5)通過網絡獲取數據和寫入數據到網絡存儲空間

26巡通、 android中的動畫有哪幾類,它們的特點和區(qū)別是什么舍哄?

Android中動畫可以分為兩大類:幀動畫宴凉、補間動畫

1)補間動畫:(你定義一個開始和結束,中間的部分由程序運算得到表悬。就是對場景里的對象不斷的進行圖像變化來產生動畫效果(旋轉弥锄、平移、放縮和漸變))AlphaAnimation(漸變型動畫)蟆沫、scaleAnimation(縮放型動畫)籽暇、 TranslateAnimation(平移型動畫)、 RotateAnimation(旋轉型動畫)饭庞、 
2)逐幀動畫:Frame(把一連串的圖片進行系列化連續(xù)播放戒悠,如同放電影的效果),它是通過播放一張一張圖片來達到動畫的效果舟山;

27绸狐、、 補間動畫的兩種實現方式(四種可選擇一種來舉例)

1累盗、XML配置:

1)在res/anim文件夾下配置動畫對應標簽寒矿,配置對應參數,包含初始值若债,動畫結束值符相,以及動畫時間 
2)通過AnimationUtils.loadAnimation加載XML動畫文件 
3)調用startAnimation方法開啟動畫 

2、代碼實現:

1)直接New出需要的補間動畫的對象拆座,傳遞相應的參數 
2)調用startAnimation方法開啟動畫

28主巍、 如何用MediaPlayer實現音頻播放功能冠息,音樂播放器的開發(fā)需注意什么?

用MediaPlayer實現音頻播放功能主要有兩種方法孕索。

(方法一):在res下建立一個raw包苛秕,把文件放入包中荷逞。在activity中聲明
一個MediaPlayer對象,然后onCreate()方法中用
MediaPlayer.create(context,R.raw.資源名)方法實例化該對象。然后調用
MediaPlayer的start()单鹿、pause()和stop()方法進行開始澎媒、暫停和停止的
操作钉鸯。最后在activity的onDestroy()中調用MediaPlayer的release()
方法進行資源的釋放季惯。此方法的缺點是每次運行程序時都要加載raw里的資
源文件,使安裝過程速度減慢翎嫡。

(方法二):資源放在sdcard中欠动。在activity中聲明一個MediaPlayer對象, 實例化 MediaPlayer()惑申。使用Environment.
getExternalStorageDirectory().getAbsolutePath()方法獲得path具伍,然后path+=File.separator+資源名或”包名/資源名”。然后調用MediaPlayer的setDataSource(path)進行資源設置圈驼。然后先調用prepare()方法人芽,在后再調用start()方法播放,調用pause()方法和stop()方法進行暫停和停止的操作绩脆。最后在activity的onDestroy()中用release()方法進行資源的釋放萤厅。

注意事項,使用方法二時靴迫,設置完資源路徑后要先調用prepare()方法惕味,調
用start()、pause()玉锌、stop()方法前腰先進行一些判斷赦拘,不然一次性調用
多次同樣的方法容易出錯。調用stop()后在調用start()方法時要先調用prepare()方法芬沉。

29、 Android中播放小的音樂文件soundpool如何使用阁猜?

SoundPlayer 播放音頻的實現步驟:

1) new出一個實例 ; new SoundPool(4, AudioManager.STREAM_MUSIC, 100);第一個參數是允許有多少個聲音流同時播放,第2個參數是聲音類型,第三個參數是聲音的品質; 
2) loadId = soundPool.load(context, R.raw.himi_ogg, 1); 
3) 使用實例調用play方法傳入對應的音頻文件id即可

30丸逸、 Android中視頻播放的三種方式?

1剃袍、系統(tǒng)自帶android視頻播放(最簡單的視頻播放器)

1) new Intent黄刚,配置隱式意圖 
2) 通過Uri.parse獲取指定文件Uri 
3) 給Intent添加Uri及type 
4) 啟動Intent

2、VideoView android提供給我們的一個供我們進行視頻播放的組件

VideoView 是android 系統(tǒng)提供的一個媒體播放顯示和控制的控件民效。 
若需要控制欄憔维,需要加上MediaController

3涛救、surfaceView+MediaPlayer

1) 構建surfaceView 
2) 獲取surfaceHolder,設置分辨率 
3) 對surfaceHolder添加回調接口(SurfaceHolder.Callback ) surfaceHolder.addCallback(this); 
4) 實現接口內部三個方法 
(surfaceCreated ,surfaceChanged,surfaceDestroyed等),對Mediaplayer添加Display(控制管理器) 
5) 對按鈕添加點擊事件

31业扒、 Timer及AlertManager

Timer是在一個應用運行期間進行的定時操作检吆,當應用退出則定時操作也同時被取消。

AlarmManager是系統(tǒng)級的定時器程储,主要用來對Activity,Service,
BroadCastReciver三大組件進行定時的操作蹭沛,當應用退出后這個定時操作仍然可以按時進行,并且通過使用可喚醒的參數可以達到在系統(tǒng)休眠狀態(tài)下仍可以完成定時操作章鲤。

32摊灭、Android中拍照功能如何實現?

有兩種方法實現拍照功能:

1败徊、通過camera打開照相機進行拍照調用系統(tǒng)camera執(zhí)行拍照:

1)帚呼、首先創(chuàng)建surfaceView 
2)、得到surfaceView對應控制器皱蹦,并添加surfaceView的回調事件(surfaceView創(chuàng)建以及銷毀分別執(zhí)行的操作,當surfaceView創(chuàng)建時煤杀,初始化camera,當surfaceView銷毀時,釋放camera的資源) 
3)根欧、設置分辨率 
4)怜珍、設置不維護緩存 
5) 點擊調用camera的takePicture傳入回調拍照的實例化PictureCallback對象 

2、系統(tǒng)拍照:通過Intent啟動凤粗,設置ACTION_IMAGE_CAPTURE,startActivity開啟

33酥泛、ListView的優(yōu)化方案?

1:判斷contentView是否為null

2:使用viewHolder緩存數據嫌拣,實現一步加載

3:分頁加載:

1)如果自定義適配器柔袁,那么在getView方法中要考慮方法傳進來的參數contentView是否為null,如果為null就創(chuàng)建contentView并返回异逐,如果不為null則直接使用捶索。在這個方法中盡可能少創(chuàng)建view。

2)給contentView設置tag(setTag())灰瞻,傳入一個viewHolder對象腥例,用于緩存要顯示的數據,可以達到數據異步加載的效果酝润。

3)如果listview需要顯示的item很多燎竖,就要考慮分頁加載。比如一共要顯示100條或者更多的時候要销,我們可以考慮先加載20條构回,等用戶拉到列表底部的時候再去加載接下來的20條。分頁加載還沒學習。

34纤掸、 MVC設計模式在Android中的應用脐供?

1.模型層(model):對數據庫操作,對網絡等操作都應在model中處理借跪,對業(yè)務的計算等操作都應在該層政己。可以簡單的理解為Android中的Java源文件

2.視圖層(view):一般采用XML進行描述垦梆,使用的時候可以方便的引入匹颤,可以簡單的理解為Android中Layout文件。 Android中也可以用JavaScript+HTML 等方式作為view 層托猩。

3.控制層(controller):控制model和view的協調工作印蓖。簡單的理解為Android中manifest文件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末京腥,一起剝皮案震驚了整個濱河市赦肃,隨后出現的幾起案子,更是在濱河造成了極大的恐慌公浪,老刑警劉巖他宛,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異欠气,居然都是意外死亡厅各,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門预柒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來队塘,“玉大人,你說我怎么就攤上這事宜鸯°竟牛” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵淋袖,是天一觀的道長鸿市。 經常有香客問我,道長即碗,這世上最難降的妖魔是什么焰情? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮剥懒,結果婚禮上烙样,老公的妹妹穿的比我還像新娘。我一直安慰自己蕊肥,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著壁却,像睡著了一般批狱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上展东,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天赔硫,我揣著相機與錄音,去河邊找鬼盐肃。 笑死爪膊,一個胖子當著我的面吹牛,可吹牛的內容都是我干的砸王。 我是一名探鬼主播推盛,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谦铃!你這毒婦竟也來了耘成?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤驹闰,失蹤者是張志新(化名)和其女友劉穎瘪菌,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體嘹朗,經...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡师妙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了屹培。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片默穴。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惫谤,靈堂內的尸體忽然破棺而出壁顶,到底是詐尸還是另有隱情,我是刑警寧澤溜歪,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布若专,位于F島的核電站,受9級特大地震影響蝴猪,放射性物質發(fā)生泄漏调衰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一自阱、第九天 我趴在偏房一處隱蔽的房頂上張望嚎莉。 院中可真熱鬧,春花似錦沛豌、人聲如沸趋箩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叫确。三九已至跳芳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竹勉,已是汗流浹背飞盆。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留次乓,地道東北人吓歇。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像票腰,于是被迫代替她去往敵國和親城看。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內容