spring面試題綜合

優(yōu)化數(shù)據(jù)庫(kù)

1?? 數(shù)據(jù)庫(kù)查詢(xún)使用索引
2?? 查詢(xún)數(shù)據(jù)不使用*,使用具體字段
3?? 語(yǔ)句大寫(xiě)
4?? 使用exists代替in,not exists代替not in
5?? 用>=代替>
6?? 盡量使用commit,因?yàn)闀?huì)釋放一些資源 例如

  • 回滾段上用于回復(fù)的數(shù)據(jù)
  • 被程序語(yǔ)句獲得的鎖等
  • oracle管理這些資源的花費(fèi)

外鏈接面試題大全

SSh三大框架常考面試題簡(jiǎn)述

hibernate工作原理及為什么要用毁葱?

原理:

  • 讀取并解析配置文件
  • 讀取并解析映射信息现恼,創(chuàng)建SessionFactory
  • 打開(kāi)Sesssion
  • 創(chuàng)建事務(wù)Transation
  • 持久化操作
  • 提交事務(wù)
  • 關(guān)閉Session
  • 關(guān)閉SesstionFactory

為什么要用:

  • 對(duì)JDBC訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝匆光,大大簡(jiǎn)化了數(shù)據(jù)訪(fǎng)問(wèn)層繁瑣的重復(fù)性代碼琅翻。

  • Hibernate是一個(gè)基于JDBC的主流持久化框架,是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)蛇券。他很大程度的簡(jiǎn)化DAO層的編碼工作

  • hibernate使用Java反射機(jī)制缔恳,而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性。

  • hibernate的性能非常好病袄,因?yàn)樗莻€(gè)輕量級(jí)框架搂赋。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫(kù)益缠,從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系脑奠。

Hibernate是如何延遲加載?

  • Hibernate 延遲加載實(shí)現(xiàn):a)實(shí)體對(duì)象 b)集合(Collection)
  • Hibernate 提供了屬性的延遲加載功能,當(dāng)Hibernate在查詢(xún)數(shù)據(jù)的時(shí)候幅慌,數(shù)據(jù)并沒(méi)有存在與內(nèi)存中宋欺,當(dāng)程序真正對(duì)數(shù)據(jù)的操作時(shí),對(duì)象才存在與內(nèi)存中胰伍,就實(shí)現(xiàn)了延遲加載齿诞,他節(jié)省了服務(wù)器的內(nèi)存開(kāi)銷(xiāo),從而提高了服務(wù)器的性能喇辽。
    <span id="inline-toc"><p>3</p></span>Hibernate中怎樣實(shí)現(xiàn)類(lèi)之間的關(guān)系?(如:一對(duì)多掌挚、多對(duì)多的關(guān)系) 類(lèi)與類(lèi)之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都是對(duì)對(duì)象進(jìn)行操作菩咨,我們程序中把所有的表與類(lèi)都映射在一起吠式,它們通過(guò)配置文件中的many-to-one、one-to-many抽米、many-to-many特占、

說(shuō)下Hibernate的緩存機(jī)制

1?? 內(nèi)部緩存存在Hibernate中又叫一級(jí)緩存,屬于應(yīng)用事物級(jí)緩存
2?? 二級(jí)緩存:

  • 應(yīng)用級(jí)緩存
  • 分布式緩存
    條件:數(shù)據(jù)不會(huì)被第三方修改云茸、數(shù)據(jù)大小在可接受范圍是目、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用标捺、非關(guān)鍵數(shù)據(jù)
  • 第三方緩存的實(shí)現(xiàn)

Hibernate的查詢(xún)方式

Sql懊纳、Criteria揉抵、object comptosition
Hql:

  • 屬性查詢(xún)
  • 參數(shù)查詢(xún)、命名參數(shù)查詢(xún)
  • 關(guān)聯(lián)查詢(xún)
  • 分頁(yè)查詢(xún)
  • 統(tǒng)計(jì)函數(shù)

如何優(yōu)化Hibernate嗤疯?

  • 使用雙向一對(duì)多關(guān)聯(lián)冤今,不使用單向一對(duì)多
  • 靈活使用單向一對(duì)多關(guān)聯(lián)
  • 不用一對(duì)一,用多對(duì)一取代
  • 配置對(duì)象緩存茂缚,不使用集合緩存
  • 繼承類(lèi)使用顯式多態(tài)
  • 表字段要少戏罢,表關(guān)聯(lián)不要怕多,有二級(jí)緩存撐腰

spring

為什么用:

  • AOP 讓開(kāi)發(fā)人員可以創(chuàng)建非行為性的關(guān)注點(diǎn)脚囊,稱(chēng)為橫切關(guān)注點(diǎn)龟糕,并將它們插入到應(yīng)用程序代碼中。使用 AOP 后悔耘,公共服務(wù) (比如日志讲岁、持久性、事務(wù)等)就可以分解成方面并應(yīng)用到域?qū)ο笊铣囊裕瑫r(shí)不會(huì)增加域?qū)ο蟮膶?duì)象模型的復(fù)雜性催首。
  • IOC 允許創(chuàng)建一個(gè)可以構(gòu)造對(duì)象的應(yīng)用環(huán)境,然后向這些對(duì)象傳遞它們的協(xié)作對(duì)象泄鹏。正如單詞 倒置 所表明的,IOC 就像反 過(guò)來(lái)的JNDI秧耗。沒(méi)有使用一堆抽象工廠(chǎng)备籽、服務(wù)定位器、單元素(singleton)和直接構(gòu)造(straight construction)分井,每一個(gè)對(duì)象都是用其協(xié)作對(duì)象構(gòu)造的车猬。因此是由容器管理協(xié)作對(duì)象(collaborator)。

Spring即使一個(gè)AOP框架尺锚,也是一IOC容器珠闰。 Spring 最好的地方是它有助于您替換對(duì)象。有了 Spring瘫辩,只要用 JavaBean 屬性和配置文件加入依賴(lài)性(協(xié)作對(duì)象)伏嗜。然后可以很容易地在需要時(shí)替換具有類(lèi)似接口的協(xié)作對(duì)象。

Spring 框架是一個(gè)分層架構(gòu)伐厌,由 7 個(gè)定義良好的模塊組成承绸。Spring 模塊構(gòu)建在核心容器之上,核心容器定義了創(chuàng)建挣轨、配置和管理 bean 的方式军熏,如圖 1 所示。
組成 Spring 框架的每個(gè)模塊(或組件)都可以單獨(dú)存在卷扮,或者與其他一個(gè)或多個(gè)模塊聯(lián)合實(shí)現(xiàn)荡澎。每個(gè)模塊的功能如下:

  • 核心容器:核心容器提供 Spring 框架的基本功能均践。核心容器的主要組件是 BeanFactory,它是工廠(chǎng)模式的實(shí)現(xiàn)摩幔。BeanFactory 使用控制反轉(zhuǎn) (IOC)模式將應(yīng)用程序的配置和依賴(lài)性規(guī)范與實(shí)際的應(yīng)用程序代碼分開(kāi)彤委。

  • Spring 上下文:Spring 上下文是一個(gè)配置文件,向 Spring 框架提供上下文信息热鞍。Spring 上下文包括企業(yè)服務(wù)葫慎,例如 JNDI、EJB薇宠、電子郵件偷办、國(guó)際化、校驗(yàn)和調(diào)度功能澄港。

  • Spring AOP:通過(guò)配置管理特性椒涯,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以回梧,可以很容易地使 Spring 框架管理的任何對(duì)象支持 AOP废岂。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)。通過(guò)使用 Spring AOP狱意,不用依賴(lài) EJB 組件湖苞,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中。

  • Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結(jié)構(gòu)详囤,可用該結(jié)構(gòu)來(lái)管理異常處理和不同數(shù)據(jù)庫(kù)供應(yīng)商拋出的錯(cuò)誤消息财骨。異常層次結(jié)構(gòu)簡(jiǎn)化了錯(cuò)誤處理,并且極大地降低了需要編寫(xiě)的異常代碼數(shù)量(例如打開(kāi)和關(guān)閉連接)藏姐。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結(jié)構(gòu)隆箩。

  • Spring ORM:Spring 框架插入了若干個(gè) ORM 框架,從而提供了 ORM 的對(duì)象關(guān)系工具羔杨,其中包括 JDO捌臊、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務(wù)和 DAO 異常層次結(jié)構(gòu)兜材。

  • Spring Web 模塊:Web 上下文模塊建立在應(yīng)用程序上下文模塊之上理澎,為基于 Web 的應(yīng)用程序提供了上下文。所以护姆,Spring 框架支持與 Jakarta Struts 的集成矾端。Web 模塊還簡(jiǎn)化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>

  • Spring MVC 框架:MVC 框架是一個(gè)全功能的構(gòu)建Web 應(yīng)用程序的 MVC 實(shí)現(xiàn)。通過(guò)策略接口卵皂,MVC 框架變成為高度可配置的秩铆,MVC 容納了大量視圖技術(shù),其中包括 JSP、Velocity殴玛、Tiles捅膘、iText 和 POI。

Spring 框架的功能可以用在任何 J2EE 服務(wù)器中滚粟,大多數(shù)功能也適用于不受管理的環(huán)境寻仗。Spring 的核心要點(diǎn)是:支持不綁定到特定 J2EE 服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)訪(fǎng)問(wèn)對(duì)象。毫無(wú)疑問(wèn)凡壤,這樣的對(duì)象可以在不同 J2EE 環(huán)境 (Web 或 EJB)署尤、獨(dú)立應(yīng)用程序、測(cè)試環(huán)境之間重用亚侠。

IOC和AOP

控制反轉(zhuǎn)模式(也稱(chēng)作依賴(lài)性介入)的基本概念是:不創(chuàng)建對(duì)象曹体,但是描述創(chuàng)建它們的方式。在代碼中不直接與對(duì)象和服務(wù)連接硝烂,但在配置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)箕别。容器(在 Spring 框架中是 IOC 容器) 負(fù)責(zé)將這些聯(lián)系在一起。
在典型的 IOC 場(chǎng)景中滞谢,容器創(chuàng)建了所有對(duì)象串稀,并設(shè)置必要的屬性將它們連接在一起,決定什么時(shí)間調(diào)用方法狮杨。下表列出了 IOC 的一個(gè)實(shí)現(xiàn)模式母截。
Spring 框架的 IOC 容器采用類(lèi)型 2 和類(lèi)型3 實(shí)現(xiàn)。
面向方面的編程
面向方面的編程橄教,即 AOP微酬,是一種編程技術(shù),它允許程序員對(duì)橫切關(guān)注點(diǎn)或橫切典型的職責(zé)分界線(xiàn)的行為(例如日志和事務(wù)管理)進(jìn)行模塊化颤陶。AOP 的核心構(gòu)造是方面,它將那些影響多個(gè)類(lèi)的行為封裝到可重用的模塊中陷遮。

AOP 和 IOC 是補(bǔ)充性的技術(shù)滓走,它們都運(yùn)用模塊化方式解決企業(yè)應(yīng)用程序開(kāi)發(fā)中的復(fù)雜問(wèn)題。在典型的面向?qū)ο箝_(kāi)發(fā)方式中帽馋,可能要將日志記錄語(yǔ)句放在所有方法和 Java 類(lèi)中才能實(shí)現(xiàn)日志功能搅方。在 AOP 方式中,可以反過(guò)來(lái)將日志服務(wù)模塊化绽族,并以聲明的方式將它們應(yīng)用到需要日志的組件上姨涡。當(dāng)然,優(yōu)勢(shì)就是 Java 類(lèi)不需要知道日志服務(wù)的存在吧慢,也不需要考慮相關(guān)的代碼涛漂。所以,用 Spring AOP 編寫(xiě)的應(yīng)用程序代碼是松散耦合的。

AOP 的功能完全集成到了 Spring 事務(wù)管理匈仗、日志和其他各種特性的上下文中瓢剿。

IOC 容器

Spring 設(shè)計(jì)的核心是 org.springframework.beans 包,它的設(shè)計(jì)目標(biāo)是與 JavaBean 組件一起使用悠轩。這個(gè)包通常不是由用戶(hù)直接使用间狂,而是由服務(wù)器將其用作其他多數(shù)功能的底層中介。下一個(gè)最高級(jí)抽象是 BeanFactory 接口火架,它是工廠(chǎng)設(shè)計(jì)模式的實(shí)現(xiàn)鉴象,允許通過(guò)名稱(chēng)創(chuàng)建和檢索對(duì)象。BeanFactory 也可以管理對(duì)象之間的關(guān)系何鸡。
BeanFactory 支持兩個(gè)對(duì)象模型纺弊。
□ 單態(tài) 模型提供了具有特定名稱(chēng)的對(duì)象的共享實(shí)例,可以在查詢(xún)時(shí)對(duì)其進(jìn)行檢索音比。Singleton 是默認(rèn)的也是最常用的對(duì)象模型俭尖。對(duì)于無(wú)狀態(tài)服務(wù)對(duì)象很理想。
□ 原型 模型確保每次檢索都會(huì)創(chuàng)建單獨(dú)的對(duì)象洞翩。在每個(gè)用戶(hù)都需要自己的對(duì)象時(shí)稽犁,原型模型最適合。
bean 工廠(chǎng)的概念是 Spring 作為 IOC 容器的基礎(chǔ)骚亿。IOC 將處理事情的責(zé)任從應(yīng)用程序代碼轉(zhuǎn)移到框架已亥。正如我將在下一個(gè)示例中演示的那樣,Spring 框架使用 JavaBean 屬性和配置數(shù)據(jù)來(lái)指出必須設(shè)置的依賴(lài)關(guān)系来屠。
BeanFactory 接口
因?yàn)?org.springframework.beans.factory.BeanFactory 是一個(gè)簡(jiǎn)單接口虑椎,所以可以針對(duì)各種底層存儲(chǔ)方法實(shí)現(xiàn)。最常用的 BeanFactory 定義是 XmlBeanFactory俱笛,它根據(jù) XML 文件中的定義裝入 bean捆姜,如清單 1 所示。
清單 1. XmlBeanFactory
BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));
在 XML 文件中定義的 Bean 是被消極加載的迎膜,這意味在需要 bean 之前泥技,bean 本身不會(huì)被初始化。要從 BeanFactory 檢索 bean磕仅,只需調(diào)用 getBean() 方法珊豹,傳入將要檢索的 bean 的名稱(chēng)即可,如清單 2 所示榕订。

清單 2. getBean()
MyBean mybean = (MyBean) factory.getBean("mybean");
每個(gè) bean 的定義都可以是 POJO (用類(lèi)名和 JavaBean 初始化屬性定義) 或 FactoryBean店茶。FactoryBean 接口為使用 Spring 框架構(gòu)建的應(yīng)用程序添加了一個(gè)間接的級(jí)別。

Struts工作機(jī)制劫恒?為什么要使用Struts贩幻?

工作機(jī)制:
Struts的工作流程:
在web應(yīng)用啟動(dòng)時(shí)就會(huì)加載初始化ActionServlet,ActionServlet從struts-config.xml文件中讀取配置信息,把它們存放到各種配置對(duì)象..
當(dāng)ActionServlet接收到一個(gè)客戶(hù)請(qǐng)求時(shí),將執(zhí)行如下流程:
1?? 檢索和用戶(hù)請(qǐng)求匹配的ActionMapping實(shí)例,如果不存在,就返回請(qǐng)求路徑無(wú)效信息;
2?? 如果ActionForm實(shí)例不存在,就創(chuàng)建一個(gè)ActionForm對(duì)象,把客戶(hù)提交的表單數(shù)據(jù)保存到ActionForm對(duì)象中;
3?? 根據(jù)配置信息決定是否需要表單驗(yàn)證.如果需要驗(yàn)證,就調(diào)用ActionForm的validate()方法;
4?? 如果ActionForm的validate()方法返回null或返回一個(gè)不包含ActionMessage的ActionErrors對(duì)象, 就表示表單驗(yàn)證成功;
5?? ActionServlet根據(jù)ActionMapping所包含的映射信息決定將請(qǐng)求轉(zhuǎn)發(fā)給哪個(gè)Action,如果相應(yīng)的Action實(shí)例不存在,就先創(chuàng)建這個(gè)實(shí)例,然后調(diào)用Action的execute()方法;
6?? Action的execute()方法返回一個(gè)ActionForward對(duì)象,ActionServlet在把客戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給ActionForward對(duì)象指向的JSP組件;
7?? ActionForward對(duì)象指向JSP組件生成動(dòng)態(tài)網(wǎng)頁(yè),返回給客戶(hù);

為什么要用:

JSP、Servlet、JavaBean技術(shù)的出現(xiàn)給我們構(gòu)建強(qiáng)大的企業(yè)應(yīng)用系統(tǒng)提供了可能段直。但用這些技術(shù)構(gòu)建的系統(tǒng)非常的繁亂吃溅,所以在此之上,我們需要一個(gè)規(guī)則鸯檬、一個(gè)把這些技術(shù)組織起來(lái)的規(guī)則决侈,這就是框架,Struts便應(yīng)運(yùn)而生喧务。
基于Struts開(kāi)發(fā)的應(yīng)用由3類(lèi)組件構(gòu)成:控制器組件赖歌、模型組件、視圖組件
Struts的validate框架是如何驗(yàn)證的功茴?
在struts配置文件中配置具體的錯(cuò)誤提示庐冯,再在FormBean中的validate()方法具體調(diào)用。
說(shuō)下Struts的設(shè)計(jì)模式
MVC模式: web應(yīng)用程序啟動(dòng)時(shí)就會(huì)加載并初始化ActionServler坎穿。用戶(hù)提交表單時(shí)展父,一個(gè)配置好的ActionForm對(duì)象被創(chuàng)建,并被填入表單相應(yīng)的數(shù)據(jù)玲昧,ActionServler根據(jù)Struts-config.xml 文件配置好的設(shè)置決定是否需要表單驗(yàn)證栖茉,如果需要就調(diào)用ActionForm的Validate()驗(yàn)證后選擇將請(qǐng)求發(fā)送到哪個(gè)Action,如果 Action不存在孵延,ActionServlet會(huì)先創(chuàng)建這個(gè)對(duì)象吕漂,然后調(diào)用Action的execute()方法。Execute()從 ActionForm對(duì)象中獲取數(shù)據(jù)尘应,完成業(yè)務(wù)邏輯惶凝,返回一個(gè)ActionForward對(duì)象,ActionServlet再把客戶(hù)請(qǐng)求轉(zhuǎn)發(fā)給 ActionForward對(duì)象指定的jsp組件犬钢,ActionForward對(duì)象指定的jsp生成動(dòng)態(tài)的網(wǎng)頁(yè)苍鲜,返回給客戶(hù)。
單例模式
Factory(工廠(chǎng)模式):

定義一個(gè)基類(lèi)===》實(shí)現(xiàn)基類(lèi)方法(子類(lèi)通過(guò)不同的方法)===》定義一個(gè)工廠(chǎng)類(lèi)(生成子類(lèi)實(shí)例)
===》開(kāi)發(fā)人員調(diào)用基類(lèi)方法
Proxy(代理模式)

spring工作機(jī)制及為什么要用?

1?? spring mvc請(qǐng)所有的請(qǐng)求都提交給DispatcherServlet,它會(huì)委托應(yīng)用系統(tǒng)的其他模塊負(fù)責(zé)負(fù)責(zé)對(duì)請(qǐng)求進(jìn)行真正的處理工作玷犹。
2?? DispatcherServlet查詢(xún)一個(gè)或多個(gè)HandlerMapping,找到處理請(qǐng)求的Controller.
3?? DispatcherServlet請(qǐng)請(qǐng)求提交到目標(biāo)Controller
4?? Controller進(jìn)行業(yè)務(wù)邏輯處理后坡贺,會(huì)返回一個(gè)ModelAndView
5?? Dispathcher查詢(xún)一個(gè)或多個(gè)ViewResolver視圖解析器,找到ModelAndView對(duì)象指定的視圖對(duì)象
6?? 視圖對(duì)象負(fù)責(zé)渲染返回給客戶(hù)端。

Hibernate

在數(shù)據(jù)庫(kù)中條件查詢(xún)速度很慢的時(shí)候,如何優(yōu)化?

  • 建索引
  • 減少表之間的關(guān)聯(lián)
  • 優(yōu)化sql箱舞,盡量讓sql很快定位數(shù)據(jù),不要讓sql做全表查詢(xún)拳亿,應(yīng)該走索引,把數(shù)據(jù)量大的表排在前面
  • 簡(jiǎn)化查詢(xún)字段晴股,沒(méi)用的字段不要,已經(jīng)對(duì)返回結(jié)果的控制肺魁,盡量返回少量數(shù)據(jù)

在hibernate中進(jìn)行多表查詢(xún),每個(gè)表中各取幾個(gè)字段,也就是說(shuō)查詢(xún)出來(lái)的結(jié)果集并沒(méi)有一個(gè)實(shí)體類(lèi)與之對(duì)應(yīng),如何解決這個(gè)問(wèn)題?

  • 按照Object[]數(shù)據(jù)取出數(shù)據(jù)电湘,然后自己組bean
  • 對(duì)每個(gè)表的bean寫(xiě)構(gòu)造函數(shù),比如表一要查出field1,field2兩個(gè)字段,那么有一個(gè)構(gòu)造函數(shù)就是Bean(type1 filed1,type2 field2) 寂呛,然后在hql里面就可以直接生成這個(gè)bean了怎诫。具體怎么用請(qǐng)看相關(guān)文檔,我說(shuō)的不是很清楚贷痪。

Session在加載實(shí)體對(duì)象時(shí)幻妓,將經(jīng)過(guò)的過(guò)程:

首先,Hibernate中維持了兩級(jí)緩存劫拢。第一級(jí)緩存由Session實(shí)例維護(hù)肉津,其中保持了Session當(dāng)前所有關(guān)聯(lián)實(shí)體的數(shù)據(jù),也稱(chēng)為內(nèi)部緩存舱沧。而第二級(jí)緩存則存在于SessionFactory層次妹沙,由當(dāng)前所有由本 SessionFactory構(gòu)造的Session實(shí)例共享。出于性能考慮熟吏,避免無(wú)謂的數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)距糖,Session在調(diào)用數(shù)據(jù)庫(kù)查詢(xún)功能之前,會(huì)先在緩存中進(jìn)行查詢(xún)牵寺。首先在第一級(jí)緩存中悍引,通過(guò)實(shí)體類(lèi)型和id進(jìn)行查找,如果第一級(jí)緩存查找命中缸剪,且數(shù)據(jù)狀態(tài)合法吗铐,則直接返回。
之后杏节,Session會(huì)在當(dāng)前“NonExists”記錄中進(jìn)行查找唬渗,如果“NonExists”記錄中存在同樣的查詢(xún)條件,則返回null奋渔。 “NonExists”記錄了當(dāng)前Session實(shí)例在之前所有查詢(xún)操作中镊逝,未能查詢(xún)到有效數(shù)據(jù)的查詢(xún)條件(相當(dāng)于一個(gè)查詢(xún)黑名單列表)。如此一來(lái)嫉鲸,如果 Session中一個(gè)無(wú)效的查詢(xún)條件重復(fù)出現(xiàn)撑蒜,即可迅速作出判斷,從而獲得最佳的性能表現(xiàn)玄渗。
對(duì)于load方法而言座菠,如果內(nèi)部緩存中未發(fā)現(xiàn)有效數(shù)據(jù),則查詢(xún)第二級(jí)緩存藤树,如果第二級(jí)緩存命中浴滴,則返回。
如在緩存中未發(fā)現(xiàn)有效數(shù)據(jù)岁钓,則發(fā)起數(shù)據(jù)庫(kù)查詢(xún)操作(Select SQL)升略,如經(jīng)過(guò)查詢(xún)未發(fā)現(xiàn)對(duì)應(yīng)記錄微王,則將此次查詢(xún)的信息在“NonExists”中加以記錄,并返回null品嚣。
根據(jù)映射配置和Select SQL得到的ResultSet炕倘,創(chuàng)建對(duì)應(yīng)的數(shù)據(jù)對(duì)象。
將其數(shù)據(jù)對(duì)象納入當(dāng)前Session實(shí)體管理容器(一級(jí)緩存)翰撑。
執(zhí)行Interceptor.onLoad方法(如果有對(duì)應(yīng)的Interceptor)罩旋。
將數(shù)據(jù)對(duì)象納入二級(jí)緩存。
如果數(shù)據(jù)對(duì)象實(shí)現(xiàn)了LifeCycle接口额嘿,則調(diào)用數(shù)據(jù)對(duì)象的onLoad方法瘸恼。
返回?cái)?shù)據(jù)對(duì)象。

Hibernate的主鍵生成機(jī)制

  • assigned
    主鍵由外部程序負(fù)責(zé)生成册养,無(wú)需Hibernate參與东帅。
  • hilo
    通過(guò)hi/lo 算法實(shí)現(xiàn)的主鍵生成機(jī)制,需要額外的數(shù)據(jù)庫(kù)表保存主鍵生成歷史狀態(tài)球拦。
  • seqhilo
    與hilo 類(lèi)似靠闭,通過(guò)hi/lo 算法實(shí)現(xiàn)的主鍵生成機(jī)制,只是主鍵歷史狀態(tài)保存在Sequence中坎炼,適用于支持Sequence的數(shù)據(jù)庫(kù)愧膀,如Oracle。
  • increment
    主鍵按數(shù)值順序遞增谣光。此方式的實(shí)現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實(shí)例中維持一個(gè)變量檩淋,以保存著當(dāng)前的最大值,之后每次需要生成主鍵的時(shí)候?qū)⒋酥导?作為主鍵萄金。這種方式可能產(chǎn)生的問(wèn)題是:如果當(dāng)前有多個(gè)實(shí)例訪(fǎng)問(wèn)同一個(gè)數(shù)據(jù)庫(kù)蟀悦,那么由于各個(gè)實(shí)例各自維護(hù)主鍵狀態(tài),不同實(shí)例可能生成同樣的主鍵氧敢,從而造成主鍵重復(fù)異常日戈。因此,如果同一數(shù)據(jù)庫(kù)有多個(gè)實(shí)例訪(fǎng)問(wèn)孙乖,此方式必須避免使用浙炼。
  • identity
    采用數(shù)據(jù)庫(kù)提供的主鍵生成機(jī)制。如DB2唯袄、SQL Server弯屈、MySQL中的主鍵生成機(jī)制。
  • sequence
    采用數(shù)據(jù)庫(kù)提供的sequence 機(jī)制生成主鍵恋拷。如Oralce 中的Sequence资厉。
  • native
    由Hibernate根據(jù)底層數(shù)據(jù)庫(kù)自行判斷采用identity、hilo梅掠、sequence其中一種作為主鍵生成方式酌住。
  • uuid.hex
    由Hibernate基于128 位唯一值產(chǎn)生算法生成16 進(jìn)制數(shù)值(編碼后以長(zhǎng)度32 的字符串表示)作為主鍵。
  • uuid.string
    與uuid.hex 類(lèi)似阎抒,只是生成的主鍵未進(jìn)行編碼(長(zhǎng)度16)酪我。在某些數(shù)據(jù)庫(kù)中可能出現(xiàn)問(wèn)題(如PostgreSQL)。
  • foreign
    使用外部表的字段作為主鍵且叁。一般而言都哭,利用uuid.hex方式生成主鍵將提供最好的性能和數(shù)據(jù)庫(kù)平臺(tái)適應(yīng)性。

這10中生成OID標(biāo)識(shí)符的方法,increment 比較常用,把標(biāo)識(shí)符生成的權(quán)力交給Hibernate處理.但是當(dāng)同時(shí)多個(gè)Hibernate應(yīng)用操作同一個(gè)數(shù)據(jù)庫(kù),甚至同一張表的時(shí)候.就推薦使用identity 依賴(lài)底層數(shù)據(jù)庫(kù)實(shí)現(xiàn),但是數(shù)據(jù)庫(kù)必須支持自動(dòng)增長(zhǎng),當(dāng)然針對(duì)不同的數(shù)據(jù)庫(kù)選擇不同的方法.如果你不能確定你使用的數(shù)據(jù)庫(kù)具體支持什么的情況下.可以選擇用native 讓Hibernate來(lái)幫選擇identity,sequence,或hilo.
另外由于常用的數(shù)據(jù)庫(kù)逞带,如Oracle欺矫、DB2、SQLServer展氓、MySql 等穆趴,都提供了易用的主鍵生成機(jī)制(Auto-Increase 字段或者Sequence)。我們可以在數(shù)據(jù)庫(kù)提供的主鍵生成機(jī)制上遇汞,采用generator-class=native的主鍵生成方式未妹。
不過(guò)值得注意的是,一些數(shù)據(jù)庫(kù)提供的主鍵生成機(jī)制在效率上未必最佳空入,大量并發(fā)insert數(shù)據(jù)時(shí)可能會(huì)引起表之間的互鎖络它。數(shù)據(jù)庫(kù)提供的主鍵生成機(jī)制,往往是通過(guò)在一個(gè)內(nèi)部表中保存當(dāng)前主鍵狀態(tài)(如對(duì)于自增型主鍵而言歪赢,此內(nèi)部表中就維護(hù)著當(dāng)前的最大值和遞增量)化戳,之后每次插入數(shù)據(jù)會(huì)讀取這個(gè)最大值,然后加上遞增量作為新記錄的主鍵埋凯,之后再把這個(gè)新的最大值更新回內(nèi)部表中点楼,這樣,一次Insert操作可能導(dǎo)致數(shù)據(jù)庫(kù)內(nèi)部多次表讀寫(xiě)操作递鹉,同時(shí)伴隨的還有數(shù)據(jù)的加鎖解鎖操作盟步,這對(duì)性能產(chǎn)生了較大影響。因此躏结,對(duì)于并發(fā)Insert要求較高的系統(tǒng)却盘,推薦采用uuid.hex 作為主鍵生成機(jī)制

談?wù)凥ibernate中inverse的作用

inverse屬性默認(rèn)是false,就是說(shuō)關(guān)系的兩端都來(lái)維護(hù)關(guān)系。
比如Student和Teacher是多對(duì)多關(guān)系媳拴,用一個(gè)中間表TeacherStudent維護(hù)黄橘。Gp)i
如果Student這邊inverse=”true”, 那么關(guān)系由另一端Teacher維護(hù),就是說(shuō)當(dāng)插入Student時(shí)屈溉,不會(huì)操作TeacherStudent表(中間表)塞关。只有Teacher插入或刪除時(shí)才會(huì)觸發(fā)對(duì)中間表的操作。所以?xún)蛇叾糹nverse=”true”是不對(duì)的子巾,會(huì)導(dǎo)致任何操作都不觸發(fā)對(duì)中間表的影響帆赢;當(dāng)兩邊都inverse=”false” 或默認(rèn)時(shí)小压,會(huì)導(dǎo)致在中間表中插入兩次關(guān)系。

說(shuō)說(shuō)Hibernate中的update()和saveOrUpdate()的區(qū)別椰于,session的load()和get()的區(qū)別怠益。

saveOrUpdate()方法可以實(shí)現(xiàn)update()的功能,但會(huì)多些步驟瘾婿,具體如下:
如果對(duì)象在該session中已經(jīng)被持久化蜻牢,不進(jìn)行操作;對(duì)象的標(biāo)識(shí)符屬性(identifier property)在數(shù)據(jù)庫(kù)中不存在或者是個(gè)暫時(shí)的值偏陪,調(diào)用save()方法保存它抢呆;如果session中的另一個(gè)對(duì)象有相同的標(biāo)識(shí)符拋出一個(gè)異常;以上皆不符合則調(diào)用update()更新之笛谦。
Session.load/get方法均可以根據(jù)指定的實(shí)體類(lèi)和id從數(shù)據(jù)庫(kù)讀取記錄抱虐,并返回與之對(duì)應(yīng)的實(shí)體對(duì)象。其區(qū)別在于:
如果未能發(fā)現(xiàn)符合條件的記錄揪罕,get方法返回null梯码,而load方法會(huì)拋出一個(gè)ObjectNotFoundException;load方法可返回實(shí)體的代理類(lèi)實(shí)例好啰,而get方法永遠(yuǎn)直接返回實(shí)體類(lèi)轩娶;load方法可以充分利用內(nèi)部緩存和二級(jí)緩存中的現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進(jìn)行數(shù)據(jù)查找框往,如沒(méi)有發(fā)現(xiàn)對(duì)應(yīng)數(shù)據(jù)鳄抒,將越過(guò)二級(jí)緩存,直接調(diào)用SQL完成數(shù)據(jù)讀取椰弊。

Hibernate筆試題

(1)一般情況下许溅,關(guān)系數(shù)據(jù)模型與對(duì)象模型之間有哪些匹配關(guān)系(多選)
A)表對(duì)應(yīng)類(lèi)
B)記錄對(duì)應(yīng)對(duì)象
C)表的字段對(duì)應(yīng)類(lèi)的屬性
D)表之間的參考關(guān)系對(duì)應(yīng)類(lèi)之間的依賴(lài)關(guān)系
(2)以下關(guān)于SessionFactory的說(shuō)法哪些正確?(多選)
A)對(duì)于每個(gè)數(shù)據(jù)庫(kù)事務(wù)秉版,應(yīng)該創(chuàng)建一個(gè)SessionFactory對(duì)象
B)一個(gè)SessionFactory對(duì)象對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)源贤重。
C)SessionFactory是重量級(jí)的對(duì)象,不應(yīng)該隨意創(chuàng)建清焕。如果系統(tǒng)中只有一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)源并蝗,只需要?jiǎng)?chuàng)建一個(gè)。
D)SessionFactory的load()方法用于加載持久化對(duì)象
(3)Customer類(lèi)中有一個(gè)Set類(lèi)型的orders屬性秸妥,用來(lái)存放Order訂單對(duì)象滚停,在Customer.hbm.xml文件中,用哪個(gè)元素映射orders屬性粥惧?
A) B) C) D)
(4)元素有一個(gè)cascade屬性键畴,如果希望Hibernate級(jí)聯(lián)保存集合中的對(duì)象,casecade屬性應(yīng)該取什么值突雪?(單選)
A)none
B)save
C)delete
D)save-update
(5)以下哪些屬于Session的方法起惕?
A)load()
B)save()
C)delete()
D)update()
E)open()
F)close()
(6)以下程序的打印結(jié)果是什么涡贱?(單選)
tx = session.beginTransaction();
Customer c1=(Customer)session.load(Customer.class,new Long(1));
Customer c2=(Customer)session.load(Customer.class,new Long(1));
System.out.println(c1==c2);
tx.commit();
session.close();
A)運(yùn)行出錯(cuò),拋出異常
B)打印false
C)打印true
(7)以下程序代碼對(duì)Customer的name屬性修改了兩次:
tx = session.beginTransaction();
Customer customer=(Customer)session.load(Customer.class,
new Long(1));
customer.setName(\”Jack\”);
customer.setName(\”Mike\”);
tx.commit();
執(zhí)行以上程序惹想,Hibernate需要向數(shù)據(jù)庫(kù)提交幾條update語(yǔ)句盼产?(單選)
A)0 B)1 C)2 D)3
(8)在持久化層,對(duì)象分為哪些狀態(tài)勺馆?(多選)
A)臨時(shí)狀態(tài)
B)獨(dú)立狀態(tài)
C)游離狀態(tài)
D)持久化狀態(tài)
(9)對(duì)于以下程序,Customer對(duì)象在第幾行變?yōu)槌志没癄顟B(tài)侨核?(單選)
Customer customer=new Customer(); //line1
customer.setName(\”Tom\”); //line2
Session session1=sessionFactory.openSession(); //line3
Transaction tx1 = session1.beginTransaction(); //line4
session1.save(customer); //line4
tx1.commit(); //line5
session1.close(); //line6
A) line1 B)line2 C)line3 D)line4 E)line5 F)line6
(10)對(duì)于以下程序草穆,Customer對(duì)象在第幾行變?yōu)橛坞x狀態(tài)?(單選)
Customer customer=new Customer(); //line1
customer.setName(\”Tom\”); //line2
Session session1=sessionFactory.openSession(); //line3
Transaction tx1 = session1.beginTransaction(); //line4
session1.save(customer); //line4
tx1.commit(); //line5
session1.close(); //line6
A) line1 B)line2 C)line3 D)line4 E)line5 F)line6
(11)以下哪一種檢索策略利用了外連結(jié)查詢(xún)搓译?(單選)
A)立即檢索 B)延遲檢索 C)迫切左外連結(jié)檢索
(12)假設(shè)對(duì)Customer類(lèi)的orders集合采用延遲檢索策略悲柱,編譯或運(yùn)行以下程序,會(huì)出現(xiàn)什么情況(單選)
Session session=sessionFactory.openSession();
tx = session.beginTransaction();
Customer customer=(Customer)session.get(Customer.class,new Long(1));
tx.commit();
session.close();
Iterator orderIterator=customer.getOrders().iterator();
A)編譯出錯(cuò) B)編譯通過(guò)些己,并正常運(yùn)行 C)編譯通過(guò)豌鸡,但運(yùn)行時(shí)拋出異常
(13)關(guān)于HQL與SQL,以下哪些說(shuō)法正確段标?(多選)
A)HQL與SQL沒(méi)什么差別
B)HQL面向?qū)ο笱墓冢鳶QL操縱關(guān)系數(shù)據(jù)庫(kù)
C)在HQL與SQL中,都包含select,insert,update,delete語(yǔ)句
D)HQL僅用于查詢(xún)數(shù)據(jù)逼庞,不支持insert,update和delete語(yǔ)句
(14)事務(wù)隔離級(jí)別是由誰(shuí)實(shí)現(xiàn)的蛇更?(單選)
A)Java應(yīng)用程序 B)Hibernate C)數(shù)據(jù)庫(kù)系統(tǒng) D)JDBC驅(qū)動(dòng)程序
(15)悲觀(guān)鎖與樂(lè)觀(guān)鎖,哪個(gè)具有較好的并發(fā)性能赛糟?(單選)
A)悲觀(guān)鎖 B)樂(lè)觀(guān)鎖
答案:
(1)A,B,C (2)B,C (3)A (4)D (5)A,B,C,D,F (6)C (7)B (8)A,C,D (9)D (10)F (11)C (12)C (13)B,D (14)C (15)B
1.strust的派任。
Action是不是線(xiàn)程安全的?如果不是
有什么方式可以保證Action的線(xiàn)程安全璧南?如果是掌逛,說(shuō)明原因
2.MVC,分析一下struts是如何實(shí)現(xiàn)MVC的
3.struts中的幾個(gè)關(guān)鍵對(duì)象的作用(說(shuō)說(shuō)幾個(gè)關(guān)鍵對(duì)象的作用)
4.spring
說(shuō)說(shuō)AOP和IOC的概念以及在spring中是如何應(yīng)用的
5.Hibernate有哪幾種查詢(xún)數(shù)據(jù)的方式
6.load()和get()的區(qū)別

  1. Struts的工作原理
    在Struts中司倚,用戶(hù)的請(qǐng)求一般以.do作為請(qǐng)求服務(wù)名豆混,所有的.do請(qǐng)求均被指向ActionSevlet, ActionSevlet根據(jù)Struts-config.xml中的配置信息对湃,將用戶(hù)請(qǐng)求封裝成一個(gè)指定名稱(chēng)的FormBean崖叫,并將此 FormBean傳至指定名稱(chēng)的ActionBean,由ActionBean完成相應(yīng)的業(yè)務(wù)操作拍柒,如文件操作心傀,數(shù)據(jù)庫(kù)操作等。每一個(gè)*.do均有對(duì)應(yīng)的 FormBean名稱(chēng)和ActionBean名稱(chēng)拆讯,這些在Struts-config.xml中配置脂男。
  2. Struts優(yōu)點(diǎn)與缺點(diǎn)
    Struts是開(kāi)源軟件养叛,使開(kāi)發(fā)者能更深入的了解其內(nèi)部實(shí)現(xiàn)機(jī)制。
    Struts 優(yōu)點(diǎn):業(yè)界”標(biāo)準(zhǔn)”(很多成功案例)宰翅,學(xué)習(xí)資源豐富弃甥。
    Struts的優(yōu)點(diǎn)主要集中體現(xiàn)在兩個(gè)方面:Taglib和頁(yè)面導(dǎo)航。
    a汁讼、利用Struts提供的taglib可以大大節(jié)約開(kāi)發(fā)時(shí)間淆攻。
    b、維護(hù)擴(kuò)展比較方便嘿架。通過(guò)一個(gè)配置文件瓶珊,即可把握整個(gè)系統(tǒng)各部分之間的聯(lián)系,這對(duì)于后期的維護(hù)有著莫大的好處耸彪。
    c伞芹、表現(xiàn)與邏輯分離
    d、表單驗(yàn)證解決了請(qǐng)求數(shù)據(jù)的驗(yàn)證問(wèn)題蝉娜,增強(qiáng)了系統(tǒng)健壯性唱较。
    e、便于團(tuán)隊(duì)開(kāi)發(fā)
    Struts缺點(diǎn):a召川、大量的使用標(biāo)簽南缓,對(duì)于初學(xué)者難度較大。
    b荧呐、ActionForms使用不便西乖、無(wú)法進(jìn)行單元測(cè)試(StrutsTestCase只能用于集成)
  3. Struts提供了幾個(gè)標(biāo)簽庫(kù)?都是什么標(biāo)簽庫(kù)坛增?
    Struts提供了五個(gè)標(biāo)簽庫(kù)获雕,即:HTML、Bean收捣、Logic届案、Template和Nested。
    HTML 標(biāo)簽 用來(lái)創(chuàng)建能夠和Struts 框架和其他相應(yīng)的HTML 標(biāo)簽交互的HTML 輸入表單
    Bean 標(biāo)簽 在訪(fǎng)問(wèn)JavaBeans 及其屬性罢艾,以及定義一個(gè)新的bean 時(shí)使用
    Logic 標(biāo)簽 管理?xiàng)l件產(chǎn)生的輸出和對(duì)象集產(chǎn)生的循環(huán)
    Template 標(biāo)簽 隨著Tiles框架包的出現(xiàn)楣颠,此標(biāo)記已開(kāi)始減少使用
    Nested 標(biāo)簽 增強(qiáng)對(duì)其他的Struts 標(biāo)簽的嵌套使用的能力
  4. Tiles框架是什么?
    Tiles框架為創(chuàng)建Web頁(yè)面提供了一種模板機(jī)制咐蚯,它能將網(wǎng)頁(yè)的布局和內(nèi)容分離童漩。
    1、MVC的各個(gè)部分都有那些技術(shù)來(lái)實(shí)現(xiàn)?如何實(shí)現(xiàn)?
    答:MVC是Model-View-Controller的簡(jiǎn)寫(xiě)春锋〗门颍“Model”代表的是應(yīng)用的業(yè)務(wù)邏輯(通過(guò)JavaBean,EJB組件實(shí)現(xiàn)),“View”是應(yīng)用的表示面(由JSP頁(yè)面產(chǎn)生),“Controller”是提供應(yīng)用的處理過(guò)程控制(一般是一個(gè)Servlet)侧馅,通過(guò)這種設(shè)計(jì)模型把應(yīng)用邏輯危尿,處理過(guò)程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用馁痴。
    2谊娇、說(shuō)說(shuō)Struts的應(yīng)用。
    答:Struts 是采用Java Servlet/JavaServer Pages技術(shù)罗晕,開(kāi)發(fā)Web應(yīng)用程序的開(kāi)放源碼的framework济欢。采用Struts能開(kāi)發(fā)出基于MVC設(shè)計(jì)模式的應(yīng)用構(gòu)架。 Struts的主要功能包括:一包含一個(gè)controller servlet小渊,能將用戶(hù)的請(qǐng)求發(fā)送到相應(yīng)的Action對(duì)象船逮。二JSP自由tag庫(kù),并且在controller servlet中提供關(guān)聯(lián)支持粤铭,幫助開(kāi)發(fā)員創(chuàng)建交互式表單應(yīng)用。三提供了一系列實(shí)用對(duì)象:XML處理杂靶、通過(guò)Java reflection APIs自動(dòng)處理JavaBeans屬性梆惯、國(guó)際化的提示和消息。
    3吗垮、strust的Action是不是線(xiàn)程安全的垛吗?如果不是有什么方式可以保證Action的線(xiàn)程安全?如果是請(qǐng)說(shuō)明原因烁登。
    答:不是線(xiàn)程安全的怯屉,只要不申明類(lèi)變量就可以保證線(xiàn)程安全。因?yàn)橹淮嬖谝粋€(gè)Action類(lèi)實(shí)例饵沧,所有線(xiàn)程會(huì)共享類(lèi)變量锨络。
    4、應(yīng)用服務(wù)器具體包括那些狼牺?
    答:應(yīng)用服務(wù)器具體包括:BEA WebLogic Server羡儿、IBM WebSphere Application Server、Oracle9i Application Server是钥、JBoss和Tomcat等掠归。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市悄泥,隨后出現(xiàn)的幾起案子虏冻,更是在濱河造成了極大的恐慌,老刑警劉巖弹囚,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厨相,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)领铐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)悯森,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人绪撵,你說(shuō)我怎么就攤上這事瓢姻。” “怎么了音诈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵幻碱,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我细溅,道長(zhǎng)褥傍,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任喇聊,我火速辦了婚禮恍风,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘誓篱。我一直安慰自己朋贬,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布窜骄。 她就那樣靜靜地躺著锦募,像睡著了一般。 火紅的嫁衣襯著肌膚如雪邻遏。 梳的紋絲不亂的頭發(fā)上糠亩,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音准验,去河邊找鬼赎线。 笑死,一個(gè)胖子當(dāng)著我的面吹牛糊饱,可吹牛的內(nèi)容都是我干的氛驮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼济似,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼矫废!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起砰蠢,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蓖扑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后台舱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體律杠,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡潭流,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了柜去。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灰嫉。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗓奢,靈堂內(nèi)的尸體忽然破棺而出讼撒,到底是詐尸還是另有隱情,我是刑警寧澤股耽,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布根盒,位于F島的核電站,受9級(jí)特大地震影響物蝙,放射性物質(zhì)發(fā)生泄漏炎滞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一诬乞、第九天 我趴在偏房一處隱蔽的房頂上張望册赛。 院中可真熱鬧,春花似錦震嫉、人聲如沸森瘪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至湃望,卻和暖如春换衬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背证芭。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工瞳浦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人废士。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓叫潦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親官硝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子矗蕊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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