java編程學習—如何用Java進行高性能網(wǎng)站開發(fā)

Java是一種可以撰寫跨平臺應用軟件的面向?qū)ο蟮某绦蛟O計語言亥曹。Java 技術具有卓越的通用性、高效性恨诱、平臺移植性和安全性媳瞪,廣泛應用于PC、數(shù)據(jù)中心照宝、游戲控制臺蛇受、科學超級計算機、移動電話和互聯(lián)網(wǎng)厕鹃,同時擁有全球最大的開發(fā)者專業(yè)社群兢仰。

給你學習路線:html-css-js-jq-javase-數(shù)據(jù)庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

1、生成對象時剂碴,合理分配空間和大邪呀:

Java中的很多類都有它的默認的空間分配大小,對于一些有大小的對象的初始化忆矛,應該預計對象的大小察蹲,然后使用進行初始化。

例如:我們在使用Vector,當聲明Vector vect=new Vector()時洽议,系統(tǒng)調(diào)用:

public Vector() {// 缺省構造函數(shù)

this(10); // 容量是 10;

}

缺省分配10個對象大小容量宗收。當執(zhí)行add方法時,可以看到具體實現(xiàn)為:..

public synchronized boolean add(Object o) {

modCount++;

ensureCapacityHelper(elementCount+1);

elementData[elementCount++] =o;

return true;

}

private void ensureCapacityHelper(int minCapacity) {

int oldCapacity = elementData.length;

if (minCapacity > oldCapacity) {

Object oldData[] = elementData;

int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) :

(oldCapacity * 2);

if (newCapacity < minCapacity) {

newCapacity = minCapacity;

}

elementData = new Object[newCapacity];

System.arraycopy(oldData, 0, elementData, 0, elementCount);

}

}

我們可以看到亚兄,當Vector大小超過原來的大小時混稽,一些代碼的目的就是為了做容量的擴充,在預先知道該Vector大小的話儿捧,可以指定其大小荚坞,避免容量擴充的開銷。

小編推薦一個學Java的學習裙【 六五零菲盾,五五四颓影,六零七 】,無論你是大牛還是小白懒鉴,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習诡挂!裙內(nèi)有開發(fā)工具,很多干貨和技術資料分享临谱!

2璃俗、優(yōu)化循環(huán)體:

循環(huán)是比較重復運行的地方,如果循環(huán)次數(shù)很大悉默,循環(huán)體內(nèi)不好的代碼對效率的影響就會被放大而變的突出城豁。讓我們看看下面的代碼片:..

Vector vect = new Vector(1000);

...

for( inti=0; i<vect.size(); i++){

...

}

for循環(huán)部分改寫成:

int size = vect.size();

for( int i=0; i>size; i++){

...

}

如果size=1000,就可以減少1000次size()的系統(tǒng)調(diào)用開銷抄课,避免了循環(huán)體重復調(diào)用唱星。

再看如下的代碼片:..

for (int i = 0;i <100000;i++)

if (i%10 == 9) {

... // 每十次執(zhí)行一次

}

改寫成也可以提高效率:..

for(inti =0,j =10; i<100000; i++,j--){

if(j == 0){

... // 每十次執(zhí)行一次

j = 10;

}

}

所以,當有較大的循環(huán)時跟磨,應該檢查循環(huán)內(nèi)是否有效率不高的地方间聊,尋找更優(yōu)的方案加以改進。

3抵拘、少用new初始化一個實例:

盡量少用new來初始化一個類的實例哎榴,當一個對象是用new進行初始化時,其構造函數(shù)鏈的所有構造函數(shù)都被調(diào)用到僵蛛,所以new操作符是很消耗系統(tǒng)資源的尚蝌,new一個對象耗時往往是局部變量賦值耗時的上千倍。同時充尉,當生成對象后驼壶,系統(tǒng)還要花時間進行垃圾回收和處理。

當new創(chuàng)建對象不可避免時喉酌,注意避免多次的使用new初始化一個對象热凹。

盡量在使用時再創(chuàng)建該對象泵喘。如:

NewObject object = new NewObject();

int value;

if(i>0 )

{

value =object.getValue();

}

上面一段代碼可以修改為:

int value;

if(i>0 )

{

NewObject object = new NewObject();

Value =object.getValue();

}

另外,應該盡量重復使用一個對象般妙,而不是聲明新的同類對象纪铺。一個重用對象的方法是改變對象的值,如可以通過setValue之類的方法改變對象的變量達到重用的目的碟渺。

4鲜锚、選擇合適的方法調(diào)用:

在Java中,一切都是對象苫拍,如果有方法(Method)調(diào)用芜繁,處理器先要檢查該方法是屬于哪個對象,該對象是否有效绒极,對象屬于什么類型骏令,然后選擇合適的方法并調(diào)用。

可以減少方法的調(diào)用垄提,同樣一個方法:

public void CallMethod(int i ){

if( i ==0 ){

return;

}

... // 其他處理

}

如果直接調(diào)用榔袋,

int i = 0;

...

CallMethod(i);

上面的代碼,就應該寫成:

int i = 0;

...

if( i ==0 ){

CallMethod(i);

}

不影響可讀性等情況下铡俐,可以把幾個小的方法合成一個大的方法凰兑。

另外,在方法前加上final审丘,private關鍵字有利于編譯器的優(yōu)化吏够。

5、異常處理技巧:

異常是Java的一種錯誤處理機制滩报,對程序來說是非常有用的稿饰,但是異常對性能不利。拋出異常首先要創(chuàng)建一個新的對象露泊,并進行相關的處理,造成系統(tǒng)的開銷旅择,所以異常應該用在錯誤處理的情況惭笑,不應該用來控制程序流程,流程盡量用while生真,if等處理沉噩。

在不是很影響代碼健壯性的前提下,可以把幾個try/catch塊合成一個柱蟀。

6川蒙、盡量使用局部變量和靜態(tài)變量:

盡量使用局部變量,調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在棧(Stack) 中长已,速度較快畜眨。其他變量昼牛,如靜態(tài)變量、實例變量等康聂,都在堆(Heap)中創(chuàng)建贰健,速度較慢。

盡量使用靜態(tài)變量恬汁,即加修飾符static伶椿,如果類中的變量不會隨他的實例而變化,就可以定義為靜態(tài)變量氓侧,從而使他所有的實例都共享這個變量脊另。

7、同步處理技巧:

同步主要出現(xiàn)在多線程的情況约巷,為多線程同時運行時提供對象數(shù)據(jù)安全的機制偎痛,多線程是比較復雜話題,應用多線程也是為了獲得性能的提升载庭,應該盡可能減少同步看彼。

另外,如果需要同步的地方囚聚,可以減少同步的代碼段靖榕,如只同步某個方法或函數(shù),而不是整個代碼顽铸。

8茁计、盡可能的使用Java自身提供的API:

Java的API一般都做了性能的考慮,如果完成相同的功能谓松,優(yōu)先使用API而不是自己寫的代碼星压,如數(shù)組復制通常的代碼如下:

int size = 1000;

String[] strArray1 = new String[size];

String[] strArray2 = new String[size];

for(inti=0;i<size;i++){ // 賦值

strArray1 = (new String("Array: " + i));

}

for(inti=0;i<size;i++){ // 復制

strArray2=(new String((String)a));

}

上面那段代碼,如果使用Java提供的API鬼譬,就可以提高性能:

int size = 1000;

String[] strArray1 = new String[size];

String[] strArray2 = new String[size];

for(inti=0;i<size;i++){ // 賦值

strArray1 = (new String("Array: " + i));

}

System.arraycopy(strArray1,0,strArray2,0,size); // 復制

同樣的一個規(guī)則是娜膘,當有大量數(shù)據(jù)的復制時,應該使用System.arraycopy()优质。

9竣贪、盡量減少I/O操作:

輸入/輸出(I/O)包括很多方面,我們知道巩螃,進行I/O操作是很消耗系統(tǒng)資源的演怎。程序中應該盡量少用I/O操作。使用時可以注意: . 合理控制輸出函數(shù)System.out.println()對于大多時候是有用的避乏,特別是系統(tǒng)調(diào)試的時候爷耀,但也會產(chǎn)生大量的信息出現(xiàn)在控制臺和日志上,同時輸出時拍皮,有序列化和同步的過程歹叮,造成了開銷跑杭。

特別是在發(fā)行版中,要合理的控制輸出盗胀,可以在項目開發(fā)時艘蹋,設計好一個Debug的工具類,在該類中可以實現(xiàn)輸出開關票灰,輸出的級別女阀,根據(jù)不同的情況進行不同的輸出的控制。

小編推薦一個學Java的學習裙【 六五零屑迂,五五四浸策,六零七 】,無論你是大牛還是小白惹盼,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習庸汗!裙內(nèi)有開發(fā)工具,很多干貨和技術資料分享手报!

10蚯舱、盡量使用緩存:

讀寫內(nèi)存要比讀寫硬盤上的文件要快很多,應盡可能使用緩沖掩蛤,以便直接從內(nèi)存中讀取數(shù)據(jù)枉昏。

盡可能使用帶有Buffer的類代替沒有Buffer的類,如可以用BufferedReader 代替Reader揍鸟,用BufferedWriter代替Writer來進行處理I/O操作兄裂。

同樣可以用BufferedInputStream代替InputStream都可以獲得性能的提高

11、盡量不使用同步:

Servlet是多線程的阳藻,以處理不同的請求晰奖,基于前面同步的分析,如果有太多的同步就失去了多線程的優(yōu)勢了腥泥。

12匾南、不用保存太多的信息在HttpSession中

很多時候,存儲一些對象在HttpSession中是有必要的蛔外,可以加快系統(tǒng)的開發(fā)蛆楞,如網(wǎng)上商店系統(tǒng)會把購物車信息保存在該用戶的Session中,但當存儲大量的信息或是大的對象在會話中時冒萄,是有害的,特別是當系統(tǒng)中用戶的訪問量很大橙数,對內(nèi)存的需求就會很高尊流。

具體開發(fā)時,在這兩者之間應作好權衡灯帮。

13崖技、清除SESSION

通常情況逻住,當達到設定的超時時間時,同時有些Session沒有了活動迎献,服務器會釋放這些沒有活動的Session瞎访,.. 不過這種情況下,特別是多用戶并訪時吁恍,系統(tǒng)內(nèi)存要維護多個的無效Session扒秸。

當用戶退出時,應該手動釋放冀瓦,回收資源伴奥,實現(xiàn)如下:..

HttpSession theSession = request.getSession();

// 獲取當前Session

if(theSession != null){

theSession.invalidate(); // 使該Session失效

}

14、緩存Home接口

EJB庫使用Enterprise Bean 的客戶端通過它的Home接口創(chuàng)建它的實例翼闽∈搬悖客戶端能通過JNDI訪問它。服務器通過Lookup方法來獲取感局。

JNDI是個遠程對象尼啡,通過RMI方式調(diào)用,對它的訪問往往是比較費時的询微。所以崖瞭,在設計時可以設計一個類專門用來緩存Home接口,在系統(tǒng)初始化時就獲得需要的Home接口并緩存拓提,以后的引用只要引用緩存即可读恃。

15、使用快速度的Jdbc驅(qū)動

JDBC API包括兩種實現(xiàn)接口形式代态,一種是純Java實現(xiàn)的驅(qū)動寺惫,一種利用ODBC驅(qū)動和數(shù)據(jù)庫客戶端實現(xiàn),具體有四種驅(qū)動模式:

第一類:JDBC-ODBC橋蹦疑,再加上ODBC驅(qū)動程序西雀。

第一類JDBC驅(qū)動程序是JDBC-ODBC橋再加上一個ODBC驅(qū)動程序。建議第一類驅(qū)動程序只用于原型開發(fā)歉摧,而不要用于正式的運行環(huán)境艇肴。橋接驅(qū)動程序由Sun提供,它的目標是支持傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)叁温。Sun為該軟件提供關鍵問題的補丁再悼,但不為該軟件的最終用戶提供支持。一般地膝但,橋接驅(qū)動程序用于已經(jīng)在ODBC技術上投資的情形冲九,例如已經(jīng)投資了Windows應用服務器。

盡管Sun提供了JDBC-ODBC橋接驅(qū)動程序跟束,但由于ODBC會在客戶端裝載二進制代碼和數(shù)據(jù)庫客戶端代碼莺奸,這種技術不適用于高事務性的環(huán)境丑孩。另外,第一類JDBC驅(qū)動程序不支持完整的Java命令集灭贷,而是局限于ODBC驅(qū)動程序的功能温学,這種驅(qū)動方式也叫胖客戶,主要用于低并發(fā)請求甚疟,大數(shù)據(jù)量傳輸?shù)膽谩?/p>

第二類:本機API仗岖,部分是Java的驅(qū)動程序。

第二類JDBC驅(qū)動程序是本機API的部分Java代碼的驅(qū)動程序古拴,用于把JDBC調(diào)用轉(zhuǎn)換成主流數(shù)據(jù)庫API的本機調(diào)用箩帚。這類驅(qū)動程序也存在與第一類驅(qū)動程序一樣的性能問題,即客戶端載入二進制代碼的問題黄痪,而且它們被綁定了特定的平臺紧帕。

第二類驅(qū)動程序要求編寫面向特定平臺的代碼,主流的數(shù)據(jù)庫廠商桅打,例如Oracle和IBM是嗜,都為它們的企業(yè)數(shù)據(jù)庫平臺提供了第二類驅(qū)動程序,使用這些驅(qū)動程序的開發(fā)者必須及時跟進不同數(shù)據(jù)庫廠商針對不同操作系統(tǒng)發(fā)行的各個驅(qū)動程序版本挺尾。

另外鹅搪,由于第二類驅(qū)動程序沒有使用純Java的API,把Java應用連接到數(shù)據(jù)源時遭铺,往往必須執(zhí)行一些額外的配置工作丽柿。很多時候,第二類驅(qū)動程序不能在體系結構上與大型主機的數(shù)據(jù)源兼容魂挂;即使做到了兼容甫题,效果也是比較差。

第一類和第二類驅(qū)動的比較

第一類和第二類驅(qū)動的比較

第三類:面向數(shù)據(jù)庫中間件的純Java驅(qū)動程序

第三類JDBC驅(qū)動程序是面向數(shù)據(jù)庫中間件的純Java驅(qū)動程序涂召,JDBC調(diào)用被轉(zhuǎn)換成一種中間件廠商的協(xié)議坠非,中間件再把這些調(diào)用轉(zhuǎn)換到數(shù)據(jù)庫API。第三類JDBC驅(qū)動程序的優(yōu)點是它以服務器為基礎果正,也就是不再需要客戶端的本機代碼炎码,這使第三類驅(qū)動程序要比第一、二兩類快秋泳。另外潦闲,開發(fā)者還可以利用單一的驅(qū)動程序連接到多種數(shù)據(jù)庫。

第四類:直接面向數(shù)據(jù)庫的純Java驅(qū)動程序迫皱。

第四類JDBC驅(qū)動程序是直接面向數(shù)據(jù)庫的純Java驅(qū)動程序歉闰,即所謂的“瘦”(thin)驅(qū)動程序,它把JDBC調(diào)用轉(zhuǎn)換成某種直接可被DBMS使用的網(wǎng)絡協(xié)議,這樣新娜,客戶機和應用服務器可以直接調(diào)用DBMS服務器。對于第四類驅(qū)動程序既绩,不同DBMS的驅(qū)動程序不同概龄。因此,在一個異構計算環(huán)境中饲握,驅(qū)動程序的數(shù)量可能會比較多私杜。但是,由于第四類驅(qū)動程序具有較高的性能救欧,能夠直接訪問DBMS衰粹,所以這一問題就不那么突出了, 這種驅(qū)動方式笆怠,主要用于高并發(fā)铝耻,低數(shù)據(jù)量請求的應用中。

第三類和第四類驅(qū)動的比較

第三類和第四類驅(qū)動的比較

為了提高訪問數(shù)據(jù)庫的性能蹬刷,我們還可以使用JDBC 2.0的一些規(guī)范和特性瓢捉,JDBC是占用資源的,在使用數(shù)據(jù)庫連接時可以使用連接池Connection Pooling办成,避免頻繁打開泡态、關閉Connection。而我們知道迂卢,獲取Connection是比較消耗系統(tǒng)資源的某弦。

Connection緩沖池:當一個應用程序關閉一個數(shù)據(jù)庫連接時,這個連接并不真正釋放而是被循環(huán)利用而克,建立連接是消耗較大的操作靶壮,循環(huán)利用連接可以顯著的提高性能,因為可以減少新連接的建立拍摇。

一個通過DataSource獲取緩沖池獲得連接亮钦,并連接到一個CustomerDB數(shù)據(jù)源的代碼演示如下:

Context ctx = new InitialContext();

DataSource dataSource = (DataSource) ctx.lookup("jdbc/CustomerDB");

Connection conn = dataSource.getConnection("password","username");

16、緩存DataSorce

一個DataSource對象代表一個實際的數(shù)據(jù)源充活。這個數(shù)據(jù)源可以是從關系數(shù)據(jù)庫到表格形式的文件蜂莉,完全依賴于它是怎樣實現(xiàn)的,一個數(shù)據(jù)源對象注冊到JNDI名字服務后混卵,應用程序就可以從JNDI服務器上取得該對象映穗,并使用之和數(shù)據(jù)源建立連接。

通過上面的例子幕随,我們知道DataSource是從連接池獲得連接的一種方式蚁滋,通過JNDI方式獲得,是占用資源的。

為了避免再次的JNDI調(diào)用辕录,可以系統(tǒng)中緩存要使用的DataSource睦霎。

及時關閉使用過的資源

互聯(lián)網(wǎng)應用系統(tǒng)一般是并發(fā)的系統(tǒng),在每次申請和使用完資源后走诞,應該釋放供別人使用副女,使用完成后應該保證徹底的釋放。

17蚣旱、架構選型

在網(wǎng)站W(wǎng)eb應用開發(fā)中碑幅,系統(tǒng)的整體架構是決定網(wǎng)站性能、穩(wěn)定性塞绿、并發(fā)沟涨、可擴展性的關鍵因素。下面以世界著名網(wǎng)站應用軟件提供商CoreMediaCMS系統(tǒng)為例异吻,進行架構分析

CoreMediaCMS將整個應用分成四成架構裹赴,每一層都可以獨立于其他層而正常運行,每一層都可以分布式布署诀浪,極大的提高了應用系統(tǒng)的穩(wěn)定性篮昧、可擴展性、支持高并發(fā)的要求笋妥,每一次之前通過中間件Corba進行穩(wěn)定的傳輸數(shù)據(jù)懊昨。

18、開發(fā)框架的選型

充分利用開源框架春宣,可以大大提高開發(fā)效率酵颁。很多初級開發(fā)者,都采用DB+JavaBean+JSP這種初級的開發(fā)模式月帝,而現(xiàn)在主要使用Struts躏惋、spring等MVC開發(fā)框架。

常用開發(fā)框架構選型有:

Struts嚷辅、Spring簿姨、Webwork等们妥。

我們選擇的開發(fā)框架是:Spring+hibernate+Spring MVC徊件,在這個開發(fā)框架里,充分利用了Hibernate者铜、Spring各自己的優(yōu)點趁俊,可以選擇Struts域仇,也可以選擇Spring MVC。

19寺擂、分級存儲

1)數(shù)據(jù)庫數(shù)據(jù)分級存儲:

將經(jīng)常訪問的數(shù)據(jù)和訪問頻度低的數(shù)據(jù)暇务,分別存放到不同的分區(qū)泼掠,甚至存放到不同的數(shù)據(jù)庫服務器,以便合進分配硬盤I/O及系統(tǒng)I/O垦细。

2)網(wǎng)站內(nèi)容發(fā)布之后择镇,分級存儲:

任何一個大型的網(wǎng)站,一般都有海量的內(nèi)容括改,為了提高訪問效率沐鼠,應搭建分級存儲體系,根據(jù)應用的重要性和訪問并發(fā)要求叹谁,將這些內(nèi)容分級存儲,同時將靜態(tài)內(nèi)容中的靜態(tài)頁面文件乘盖、圖片文件焰檩、下載文件分不同的Web服務器訪問,降低I/O爭用订框,提高訪問效率析苫,同時讓數(shù)據(jù)存儲、管理穿扳、備份更加清晰衩侥。

20、頁面靜態(tài)化

一個大型網(wǎng)站矛物,既有靜態(tài)內(nèi)容茫死,也有動態(tài)內(nèi)容。靜態(tài)內(nèi)容履羞,直接通過Apache或者Squid訪問峦萎,效率高,穩(wěn)定可靠忆首,更多的是受服務器等硬件設備的I/O吞吐量爱榔、網(wǎng)絡環(huán)境及頁面代碼本身質(zhì)量限制,不受應用系統(tǒng)及數(shù)據(jù)庫性能限制糙及,這些內(nèi)容往往訪問速度和效率不會有較大的問題详幽。

而動態(tài)內(nèi)容,除了受硬件設備I/O浸锨、操作系統(tǒng)I/O及內(nèi)容唇聘、網(wǎng)絡環(huán)境及頁面代碼的影響,還要受應用服務器和數(shù)據(jù)庫性能影響柱搜,因此雳灾,這部份內(nèi)容,要盡可能作靜態(tài)化或者偽靜態(tài)冯凹,并采用緩存技術谎亩,將其緩存炒嘲,以減少對應用服務器和數(shù)據(jù)庫服務器的操作次數(shù),提高用戶訪問效率和穩(wěn)定性匈庭。

小編推薦一個學Java的學習裙【 六五零夫凸,五五四,六零七 】阱持,無論你是大牛還是小白夭拌,是想轉(zhuǎn)行還是想入行都可以來了解一起進步一起學習!裙內(nèi)有開發(fā)工具衷咽,很多干貨和技術資料分享鸽扁!

21、緩存策略

對于構建的業(yè)務系統(tǒng)镶骗,如果有些數(shù)據(jù)要經(jīng)常要從數(shù)據(jù)庫中讀取桶现,同時,這些數(shù)據(jù)又不經(jīng)常變化鼎姊,這些數(shù)據(jù)就可以在系統(tǒng)中緩存起來骡和,使用時直接讀取緩存,而不用頻繁的訪問數(shù)據(jù)庫讀取數(shù)據(jù)相寇。

緩存工作可以在系統(tǒng)初始化時一次性讀取數(shù)據(jù)慰于,特別是一些只讀的數(shù)據(jù),當數(shù)據(jù)更新時更新數(shù)據(jù)庫內(nèi)容唤衫,同時更新緩存的數(shù)據(jù)值婆赠。

例如:在天極CMS2005系統(tǒng)中,我們將很少發(fā)生變化的網(wǎng)站節(jié)點樹數(shù)據(jù)佳励,緩存在客戶端页藻,當用戶登錄時,一次性讀入到客戶端緩存起來植兰,以后編輯在使用時份帐,不用再從數(shù)據(jù)庫中讀取,大大提高了應用系統(tǒng)的訪問速度楣导。

當然废境,也可以將數(shù)據(jù)庫中重復訪問的數(shù)據(jù)緩存在應用服務器內(nèi)存中,減少對數(shù)據(jù)庫的訪問次數(shù)筒繁,Java常用的緩存技術產(chǎn)品有:MemoryCache噩凹、OSCache等。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毡咏,一起剝皮案震驚了整個濱河市驮宴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呕缭,老刑警劉巖堵泽,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件修己,死亡現(xiàn)場離奇詭異,居然都是意外死亡迎罗,警方通過查閱死者的電腦和手機睬愤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纹安,“玉大人尤辱,你說我怎么就攤上這事∠崞瘢” “怎么了光督?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長塔粒。 經(jīng)常有香客問我结借,道長,這世上最難降的妖魔是什么窗怒? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蓄拣,結果婚禮上扬虚,老公的妹妹穿的比我還像新娘。我一直安慰自己球恤,他們只是感情好辜昵,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咽斧,像睡著了一般堪置。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上张惹,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天舀锨,我揣著相機與錄音,去河邊找鬼宛逗。 笑死坎匿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的雷激。 我是一名探鬼主播替蔬,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屎暇!你這毒婦竟也來了承桥?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤根悼,失蹤者是張志新(化名)和其女友劉穎凶异,沒想到半個月后蜀撑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡唠帝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年屯掖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片襟衰。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡贴铜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瀑晒,到底是詐尸還是另有隱情绍坝,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布苔悦,位于F島的核電站轩褐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏玖详。R本人自食惡果不足惜把介,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟋座。 院中可真熱鬧拗踢,春花似錦、人聲如沸向臀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽券膀。三九已至君纫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芹彬,已是汗流浹背蓄髓。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舒帮,地道東北人双吆。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像会前,于是被迫代替她去往敵國和親好乐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

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

  • 1. Java基礎部分 基礎部分的順序:基本語法瓦宜,類相關的語法蔚万,內(nèi)部類的語法,繼承相關的語法临庇,異常的語法反璃,線程的語...
    子非魚_t_閱讀 31,625評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,810評論 0 11
  • 無論是腐女淮蜈、富女還是婦女斋攀,什么樣的女生不重要,快樂做自己就好~ 圖/貓女 歡迎關注“法蘭之吻”微信公眾號 微信公眾...
    法蘭之吻閱讀 543評論 0 0
  • 那是一個大風的陰天梧田,我們即將開始我們那魔鬼般的軍訓生涯了淳蔼。第一個就會想到一定會被累趴下的,只聽“砰”的一聲門...
    學生許軼閱讀 319評論 0 2
  • 你會經(jīng)常想到死亡嗎 一個人站在夜色中 期待一個壞人來結束生命 他說我是白眼狼 突然沒有那么難過 因為覺得可笑 命是...
    小和山_閱讀 224評論 0 0