最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

大數(shù)據(jù)面試題(八)

2020-06-17 14:27 作者:自學(xué)Python的小姐姐呀  | 我要投稿

456.Redis中的常用命令哪些?

incr 讓當(dāng)前鍵值以1的數(shù)量遞增,并返回遞增后的值

incrby 可以指定參數(shù)一次增加的數(shù)值,并返回遞增后的值

incrby 可以指定參數(shù)一次增加的數(shù)值,并返回遞增后的值

decrby 可以指定參數(shù)一次遞減的數(shù)值,并返回遞減后的值

incrbyfloat 可以遞增一個(gè)雙精度浮點(diǎn)數(shù)

append 作用是向鍵值的末尾追加value。如果鍵不存在則將該鍵的值設(shè)置為value。返回值是追加后字符串的總長度。

mget/mset 作用與get/set相似,不過mget/mset可以同時(shí)獲得/設(shè)置多個(gè)鍵的鍵值

del 根據(jù)key來刪除value

flushdb 清除當(dāng)前庫的所有數(shù)據(jù)

hset 存儲一個(gè)哈希鍵值對的集合

hget獲取一個(gè)哈希鍵的值

hmset 存儲一個(gè)或多個(gè)哈希是鍵值對的集合

hmget 獲取多個(gè)指定的鍵的值

hexists 判斷哈希表中的字段名是否存在 如果存在返回1 否則返回0

hdel 刪除一個(gè)或多個(gè)字段

hgetall 獲取一個(gè)哈希是鍵值對的集合

hvals 只返回字段值

hkeys 只返回字段名

hlen 返回key的hash的元素個(gè)數(shù)

lpush key value向鏈表左側(cè)添加

rpush key value向鏈表右側(cè)添加

lpop key 從左邊移出一個(gè)元素

rpop key 從右邊移出一個(gè)元素

llen key 返回鏈表中元素的個(gè)數(shù) 相當(dāng)于關(guān)系型數(shù)據(jù)庫中 select count(*)

lrange key start end lrange命令將返回索引從start到stop之間的所有元素。Redis的列表起始索引為0。

lrange也支持負(fù)索引 lrange nn -2 -1 如 -1表示最右邊第一個(gè)元素 -2表示最右邊第二個(gè)元素,依次類推。

lindex key indexnumber 如果要將列表類型當(dāng)做數(shù)組來用,lindex命令是必不可少的。lindex命令用來返回指定索引的元素,索引從0開始

如果是負(fù)數(shù)表示從右邊開始計(jì)算的索引,最右邊元素的索引是-1。

Lset key indexnumber value 是另一個(gè)通過索引操作列表的命令,它會將索引為index的元素賦值為value。

sadd?key value?添加一個(gè)string元素到,key對應(yīng)的set集合中,成功返回1,如果元素已經(jīng)在集合中返回0

scard?key?返回set的元素個(gè)數(shù),如果set是空或者key不存在返回0

smembers?key?返回key對應(yīng)set的所有元素,結(jié)果是無序的

sismember?key value?判斷value 是否在set中,存在返回1,0表示不存在或者key不存在

srem key value 從key對應(yīng)set中移除給定元素,成功返回1,如果value 在集合中不存在或者key不存在返回0

zadd key score value 將一個(gè)或多個(gè)value及其socre加入到set中

zrange key start end 0和-1表示從索引為0的元素到最后一個(gè)元素(同LRANGE命令相似)

zrange key 0 -1 withscores 也可以連同score一塊輸出,使用WITHSCORES參數(shù)

zremrangebyscore key start end 可用于范圍刪除操作

ping 測試redis是否鏈接 如果已鏈接返回 PONG

echo value測試redis是否鏈接 如果已鏈接返回 echo命令后給定的值

keys * 返回所有的key 可以加*通配

exists key判斷string類型一個(gè)key是否存在 如果存在返回1 否則返回0

expire key time(s) 設(shè)置一個(gè)key的過期時(shí)間 單位秒。時(shí)間到達(dá)后會刪除key及value

ttl key 查詢已設(shè)置過期時(shí)間的key的剩余時(shí)間 如果返回-2表示該鍵值對已經(jīng)被刪除

persist 移除給定key的過期時(shí)間

select dbindex 選擇數(shù)據(jù)庫(0-15)

move key dbIndex 將當(dāng)前數(shù)據(jù)庫中的key轉(zhuǎn)移到其他數(shù)據(jù)庫中

dbsize 返回當(dāng)前數(shù)據(jù)庫中的key的數(shù)目

info 獲取服務(wù)器的信息和統(tǒng)計(jì)

flushdb 刪除當(dāng)前選擇的數(shù)據(jù)庫中的key

flushall 刪除所有數(shù)據(jù)庫中的所有key

quit 退出連接

457.Redis的配置以及持久化方案有幾種?

答:以下兩種

RDB方式

AOF方式

458.什么是RDB方式?

答:是RDB是對內(nèi)存中數(shù)據(jù)庫狀態(tài)進(jìn)行快照

RDB方式:將Redis在內(nèi)存中的數(shù)據(jù)庫狀態(tài)保存到磁盤里面,RDB文件是一個(gè)經(jīng)過壓縮的二進(jìn)制文件,通過該文件可以還原生成RDB文件時(shí)的數(shù)據(jù)庫狀態(tài)(默認(rèn)下,持久化到dump.rdb文件,并且在redis重啟后,自動讀取其中文件,據(jù)悉,通常情況下一千萬的字符串類型鍵,1GB的快照文件,同步到內(nèi)存中的 時(shí)間是20-30秒)

RDB的生成方式:

 1、執(zhí)行命令手動生成

有兩個(gè)Redis命令可以用于生成RDB文件,一個(gè)是SAVE,另一個(gè)是BGSAVE SAVE命令會阻塞Redis服務(wù)器進(jìn)程,直到RDB文件創(chuàng)建完畢為止,在服務(wù)器進(jìn)程阻塞期間,服務(wù)器不能處理任何命令請求,BGSAVE命令會派生出一個(gè)子進(jìn)程,然后由子進(jìn)程負(fù)責(zé)創(chuàng)建RDB文件,服務(wù)器進(jìn)程(父進(jìn)程)繼續(xù)處理命令請求,創(chuàng)建RDB文件結(jié)束之前,客戶端發(fā)送的BGSAVE和SAVE命令會被服務(wù)器拒絕

2、通過配置自動生成

可以設(shè)置服務(wù)器配置的save選項(xiàng),讓服務(wù)器每隔一段時(shí)間自動執(zhí)行一次BGSAVE命令,可以通過save選項(xiàng)設(shè)置多個(gè)保存條件,但只要其中任意一個(gè)條件被滿足,服務(wù)器就會執(zhí)行BGSAVE命令

例如:

save 900 1

save 300 10

save 60 10000

那么只要滿足以下三個(gè)條件中的任意一個(gè),BGSAVE命令就會被執(zhí)行

服務(wù)器在900秒之內(nèi),對數(shù)據(jù)庫進(jìn)行了至少1次修改

服務(wù)器在300秒之內(nèi),對數(shù)據(jù)庫進(jìn)行了至少10次修改

服務(wù)器在60秒之內(nèi),對數(shù)據(jù)庫進(jìn)行了至少10000次修改

459.什么是AOF方式?

AOF持久化方式在redis中默認(rèn)是關(guān)閉的,需要修改配置文件開啟該方式。

AOF:把每條命令都寫入文件,類似mysql的binlog日志

AOF方式:是通過保存Redis服務(wù)器所執(zhí)行的寫命令來記錄數(shù)據(jù)庫狀態(tài)的文件。

AOF文件刷新的方式,有三種:

appendfsync always - 每提交一個(gè)修改命令都調(diào)用fsync刷新到AOF文件,非常非常慢,但也非常安全

appendfsync everysec - 每秒鐘都調(diào)用fsync刷新到AOF文件,很快,但可能會丟失一秒以內(nèi)的數(shù)據(jù)

appendfsync no - 依靠OS進(jìn)行刷新,redis不主動刷新AOF,這樣最快,但安全性就差

默認(rèn)并推薦每秒刷新,這樣在速度和安全上都做到了兼顧

AOF數(shù)據(jù)恢復(fù)方式

服務(wù)器在啟動時(shí),通過載入和執(zhí)行AOF文件中保存的命令來還原服務(wù)器關(guān)閉之前的數(shù)據(jù)庫狀態(tài),具體過程:

載入AOF文件

創(chuàng)建模擬客戶端

從AOF文件中讀取一條命令

使用模擬客戶端執(zhí)行命令

循環(huán)讀取并執(zhí)行命令,直到全部完成

如果同時(shí)啟用了RDB和AOF方式,AOF優(yōu)先,啟動時(shí)只加載AOF文件恢復(fù)數(shù)據(jù)

460.什么是全文檢索?

答:什么叫做全文檢索呢?這要從我們生活中的數(shù)據(jù)說起。

我們生活中的數(shù)據(jù)總體分為兩種:結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。

1)結(jié)構(gòu)化數(shù)據(jù):指具有固定格式或有限長度的數(shù)據(jù),如數(shù)據(jù)庫,元數(shù)據(jù)等。

2)非結(jié)構(gòu)化數(shù)據(jù):指不定長或無固定格式的數(shù)據(jù),如郵件,word文檔等。

非結(jié)構(gòu)化數(shù)據(jù)又一種叫法叫全文數(shù)據(jù)。

?按照數(shù)據(jù)的分類,搜索也分為兩種:

1)對結(jié)構(gòu)化數(shù)據(jù)的搜索:如對數(shù)據(jù)庫的搜索,用SQL語句。

2)對非結(jié)構(gòu)化數(shù)據(jù)的搜索:如利用windows的搜索也可以搜索文件內(nèi)容,

全文檢索: 就是一種將文件中所有文本與檢索項(xiàng)匹配的文字資料檢索方法。全文檢索首先將要查詢的目標(biāo)文檔中的詞提取出來,組成索引,通過查詢索引達(dá)到搜索目標(biāo)文檔的目的。這種先建立索引,再對索引進(jìn)行搜索的過程就叫全文檢索(Full-text Search)。

461.什么是Lucene?

Lucene是一個(gè)高效的,基于Java的全文檢索庫。

Lucene是apache軟件基金會4 jakarta項(xiàng)目組的一個(gè)子項(xiàng)目,是一個(gè)開放源代碼的全文檢索引擎工具包,但它不是一個(gè)完整的全文檢索引擎,而是一個(gè)全文檢索引擎的架構(gòu),Lucene的目的是為軟件開發(fā)人員提供一個(gè)簡單易用的工具包,以方便的在目標(biāo)系統(tǒng)中實(shí)現(xiàn)全文檢索的功能,或者是以此為基礎(chǔ)建立起完整的全文檢索引擎。Lucene是一套用于全文檢索和搜尋的開源程序庫,由Apache軟件基金會支持和提供。Lucene提供了一個(gè)簡單卻強(qiáng)大的應(yīng)用程序接口,能夠做全文索引和搜尋。在Java開發(fā)環(huán)境里L(fēng)ucene是一個(gè)成熟的免費(fèi)開源工具。就其本身而言,Lucene是當(dāng)前以及最近幾年最受歡迎的免費(fèi)Java信息檢索程序庫。

462.什么是Solr?

答:Solr是一個(gè)獨(dú)立的企業(yè)級搜索應(yīng)用服務(wù)器,它對外提供類似于Web-service的API接口。

Solr是一個(gè)高性能,采用Java開發(fā),基于Lucene的全文搜索服務(wù)器。同時(shí)對其進(jìn)行了擴(kuò)展,提供了比Lucene更為豐富的查詢語言,同時(shí)實(shí)現(xiàn)了可配置、可擴(kuò)展并對查詢性能進(jìn)行了優(yōu)化,并且提供了一個(gè)完善的功能管理界面,是一款非常優(yōu)秀的全文檢索引擎。

文檔通過Http利用XML 加到一個(gè)搜索集合中。查詢該集合也是通過http收到一個(gè)XML/JSON響應(yīng)來實(shí)現(xiàn)。它的主要特性包括:高效、靈活的緩存功能,垂直搜索功能,高亮顯示搜索結(jié)果,通過索引復(fù)制來提高可用性,提供一套強(qiáng)大Data Schema來定義字段,類型和設(shè)置文本分析,提供基于Web的管理界面等。

463.Solr是由哪兩個(gè)部分構(gòu)成?

答:如下兩個(gè)部分

Solr的web服務(wù)

Solr的索引庫

464.什么是正排索引?

正排索引是以文檔的ID為關(guān)鍵字,索引文檔中每個(gè)字的位置信息,查找時(shí)掃描索引中每個(gè)文檔中字的信息直到找出所有包含查詢關(guān)鍵字的文檔。

但是在查詢的時(shí)候需對所有的文檔進(jìn)行掃描以確保沒有遺漏,這樣就使得檢索時(shí)間大大延長,檢索效率低下。 ? ??

盡管正排索引的工作原理非常的簡單,但是由于其檢索效率太低,除非在特定情況下,否則實(shí)用性價(jià)值不大。

465.什么是倒排索引?

對數(shù)據(jù)進(jìn)行分析,抽取出數(shù)據(jù)中的詞條,以詞條作為key,對應(yīng)數(shù)據(jù)的存儲位置作為value,實(shí)現(xiàn)索引的存儲。這種索引稱為倒排索引。

當(dāng)solr存儲文檔時(shí),solr會首先對文檔數(shù)據(jù)進(jìn)行分詞,創(chuàng)建索引庫和文檔數(shù)據(jù)庫。所謂的分詞是指:將一段字符文本按照一定的規(guī)則分成若干個(gè)單詞。

466.什么是ActiveMQ?

ActiveMQ是一種開源的,實(shí)現(xiàn)了JMS1.1規(guī)范的,面向消息(MOM)的中間件,為應(yīng)用程序提供高效的、可擴(kuò)展的、穩(wěn)定的和安全的企業(yè)級消息通信。ActiveMQ使用Apache提供的授權(quán),任何人都可以對其實(shí)現(xiàn)代碼進(jìn)行修改。

ActiveMQ的設(shè)計(jì)目標(biāo)是提供標(biāo)準(zhǔn)的,面向消息的,能夠跨越多語言和多系統(tǒng)的應(yīng)用集成消息通信中間件。

ActiveMQ實(shí)現(xiàn)了JMS標(biāo)準(zhǔn)并提供了很多附加的特性。這些附加的特性包括,JMX管理(java Management Extensions,即java管理擴(kuò)展),主從管理(master/salve,這是集群模式的一種,主要體現(xiàn)在可靠性方面,當(dāng)主中介(代理)出現(xiàn)故障,那么從代理會替代主代理的位置,不至于使消息系統(tǒng)癱瘓)、消息組通信(同一組的消息,僅會提交給一個(gè)客戶進(jìn)行處理)、有序消息管理(確保消息能夠按照發(fā)送的次序被接受者接收)。消息優(yōu)先級(優(yōu)先級高的消息先被投遞和處理)、訂閱消息的延遲接收(訂閱消息在發(fā)布時(shí),如果訂閱者沒有開啟連接,那么當(dāng)訂閱者開啟連接時(shí),消息中介將會向其提交之前的,其未處理的消息)、接收者處理過慢(可以使用動態(tài)負(fù)載平衡,將多數(shù)消息提交到處理快的接收者,這主要是對PTP消息所說)、虛擬接收者(降低與中介的連接數(shù)目)、成熟的消息持久化技術(shù)(部分消息需要持久化到數(shù)據(jù)庫或文件系統(tǒng)中,當(dāng)中介崩潰時(shí),信息不會丟失)、支持游標(biāo)操作(可以處理大消息)、支持消息的轉(zhuǎn)換、通過使用Apache的Camel可以支持EIP、使用鏡像隊(duì)列的形式輕松的對消息隊(duì)列進(jìn)行監(jiān)控等。

467.消息服務(wù)的應(yīng)用場景有哪些?

答:如下3個(gè)場景都可以使用消息服務(wù)

1、異步處理

2、應(yīng)用的解耦

3、流量的削峰

468.什么是JMS?

JMS(Java Messaging Service)是Java平臺上有關(guān)面向消息中間件的技術(shù)規(guī)范,它便于消息系統(tǒng)中的Java應(yīng)用程序進(jìn)行消息交換,并且通過提供標(biāo)準(zhǔn)的產(chǎn)生、發(fā)送、接收消息的接口,簡化企業(yè)應(yīng)用的開發(fā)。

469.JMS有哪些模型?

答:JMS消息機(jī)制主要分為兩種模型:PTP模型和Pub/Sub模型。

1、PTP模型:(Point? to Point 對點(diǎn)模型) 每一個(gè)消息傳遞給一個(gè)消息消費(fèi)者,保證消息傳遞給消息消費(fèi)者,且消息不會同時(shí)被多個(gè)消費(fèi)者接收。如果消息消費(fèi)者暫時(shí)不在連接范圍內(nèi),JMS會自動保證消息不會丟失,直到消息消費(fèi)者進(jìn)入連接,消息將自動送達(dá)。因此,JMS需要將消息保存到永久性介質(zhì)上,例如數(shù)據(jù)庫或者文件。

2、Pub-Sub模型:(publish-subscription 發(fā)布者訂閱者模型)每個(gè)主題可以擁有多個(gè)訂閱者。JMS系統(tǒng)負(fù)責(zé)將消息的副本傳給該主題的每個(gè)訂閱者。

如果希望每一條消息都能夠被處理,那么應(yīng)該使用PTP消息模型。如果并不要求消息都必須被消息消費(fèi)者接收到的情況下,可使用pub-sub消息模型。Pub-Sub模型可以在一對多的消息廣播時(shí)使用。

470.什么是JsonP?

Jsonp(JSON with Padding) 是 json 的一種"使用模式",可以讓網(wǎng)頁從別的域名(網(wǎng)站)那獲取資料,即跨域讀取數(shù)據(jù)。

471.什么是跨域?

跨域是指一個(gè)域(網(wǎng)站)下的文檔或腳本試圖去請求另一個(gè)域(網(wǎng)站)下的資源。

472.什么是同源策略?

同源策略/SOP(Same origin policy)是一種約定,由Netscape公司1995年引入瀏覽器,它是瀏覽器最核心也最基本的安全功能,現(xiàn)在所有支持JavaScript 的瀏覽器都會使用這個(gè)策略。如果缺少了同源策略,瀏覽器很容易受到XSS、CSFR等攻擊。所謂同源是指"協(xié)議+域名+端口"三者相同,即便兩個(gè)不同的域名指向同一個(gè)ip地址,也非同源

473.什么是MyCat?

MyCat是目前最流行的基于java語言編寫的數(shù)據(jù)庫中間件,是一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的服務(wù)器,前端用戶可以把它看作是一個(gè)數(shù)據(jù)庫代理,用MySQL客戶端工具和命令行訪問,而其后端可以用MySQL原生協(xié)議與多個(gè)MySQL服務(wù)器通信,也可以用JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器通信,其核心功能是分庫分表。配合數(shù)據(jù)庫的主從模式還可實(shí)現(xiàn)讀寫分離。

MyCat是基于阿里開源的Cobar產(chǎn)品而研發(fā),Cobar的穩(wěn)定性、可靠性、優(yōu)秀的架構(gòu)和性能以及眾多成熟的使用案例使得MyCat變得非常的強(qiáng)大。

MyCat發(fā)展到目前的版本,已經(jīng)不是一個(gè)單純的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數(shù)據(jù)庫,也支持MongoDB這種新型NoSQL方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在MyCat里,都是一個(gè)傳統(tǒng)的數(shù)據(jù)庫表,支持標(biāo)準(zhǔn)的SQL語句進(jìn)行數(shù)據(jù)的操作,這樣一來,對前端業(yè)務(wù)系統(tǒng)來說,可以大幅降低開發(fā)難度,提升開發(fā)速度。

474.什么是縱向切分/垂直切分?

就是把原本存儲于一個(gè)庫的數(shù)據(jù)存儲到多個(gè)庫上。

由于對數(shù)據(jù)庫的讀寫都是對同一個(gè)庫進(jìn)行操作,所以單庫并不能解決大規(guī)模并發(fā)寫入的問題。

例如,我們會建立定義數(shù)據(jù)庫workDB、商品數(shù)據(jù)庫payDB、用戶數(shù)據(jù)庫userDB、日志數(shù)據(jù)庫logDB等,分別用于存儲項(xiàng)目數(shù)據(jù)定義表、商品定義表、用戶數(shù)據(jù)表、日志數(shù)據(jù)表等。

優(yōu)點(diǎn)

1)減少增量數(shù)據(jù)寫入時(shí)的鎖對查詢的影響。

2)由于單表數(shù)量下降,常見的查詢操作由于減少了需要掃描的記錄,使得單表單次查詢所需的檢索行數(shù)變少,減少了磁盤IO,時(shí)延變短。

缺點(diǎn):

無法解決單表數(shù)據(jù)量太大的問題。

橫向切分/水平切分

把原本存儲于一個(gè)表的數(shù)據(jù)分塊存儲到多個(gè)表上。當(dāng)一個(gè)表中的數(shù)據(jù)量過大時(shí),我們可以把該表的數(shù)據(jù)按照某種規(guī)則,進(jìn)行劃分,然后存儲到多個(gè)結(jié)構(gòu)相同的表,和不同的庫上。

例如,我們userDB中的userTable中數(shù)據(jù)量很大,那么可以把userDB切分為結(jié)構(gòu)相同的多個(gè)userDB:part0DB、part1DB等,再將userDB上的userTable,切分為很多userTable:userTable0、userTable1等,然后將這些表按照一定的規(guī)則存儲到多個(gè)userDB上。

優(yōu)點(diǎn):

1)單表的并發(fā)能力提高了,磁盤I/O性能也提高了。

2)如果出現(xiàn)高并發(fā)的話,總表可以根據(jù)不同的查詢,將并發(fā)壓力分到不同的小表里面。

缺點(diǎn):無法實(shí)現(xiàn)表連接查詢。

475.簡述Tomcat,Apache,JBoss和WebLogic的區(qū)別和聯(lián)系

答:Apache:全球應(yīng)用最廣泛的http服務(wù)器,免費(fèi),出自apache基金組織?

Tomcat:應(yīng)用也算非常廣泛的web 服務(wù)器,支持部分j2ee,免費(fèi),出自 apache基金組織?

JBoss:開源的應(yīng)用服務(wù)器,比較受人喜愛,免費(fèi)(文檔要收費(fèi))?

weblogic:應(yīng)該說算是業(yè)界第一的app server,全部支持j2ee1.4(收費(fèi))

JBoss也支持j2ee

JBoss和WebLogic都含有Jsp和Servlet容器,也就可以做web容器,?

JBoss和WebLogic也包含EJB容器,是完整的J2EE應(yīng)用服務(wù)器

tomcat 只能做jsp和servlet的container

476.以下可以實(shí)現(xiàn)負(fù)載均衡的是()

A.nagiosB.JenkinsC.nginxD.docker

分析:答案: C Nginx是一款輕量級的Web?服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個(gè)BSD-like 協(xié)議下發(fā)行。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng),事實(shí)上nginx的并發(fā)能力確實(shí)在同類型的網(wǎng)頁服務(wù)器中表現(xiàn)較好,中國大陸使用nginx網(wǎng)站用戶有:百度、京東、新浪、網(wǎng)易、騰訊、淘寶等

477.Tomcat/ WebSphere/WebLogic的作用和特點(diǎn)

作用:

Tomcat:目前應(yīng)用非常廣泛的免費(fèi)web服務(wù)器,支持部分j2ee。

WebSphere:是IBM集成軟件平臺??勺鰓eb服務(wù)器,WebSphere提供了可靠、靈活和健壯的集成軟件。

Weblogic:是美國bea公司出品的一個(gè)基于j2ee架構(gòu)的中間件。BEA WebLogic是用于開發(fā)、集成、部署和管理大型分布式Web應(yīng)用、網(wǎng)絡(luò)應(yīng)用和數(shù)據(jù)庫應(yīng)用的Java應(yīng)用服務(wù)器。

特點(diǎn)(區(qū)別):

1)價(jià)位不同:Tomcat的是免費(fèi)的;WebLogic與WebSphere是收費(fèi)的,而且價(jià)格不菲。

2) 開源性不同:Tomcat的是完全開源的,而其他兩個(gè)不是。WebLogic與WebSphere都是對業(yè)內(nèi)多種標(biāo)準(zhǔn)的全面支持,包括JSB、JMS、JDBC、XML和WML,使Web應(yīng)用系統(tǒng)實(shí)施更簡單,且保護(hù)投資,同時(shí)也使基于標(biāo)準(zhǔn)的解決方案的開發(fā)更加簡便。

3) 擴(kuò)展性的不同:WebLogic和WebSphere都是以其高擴(kuò)展的架構(gòu)體系聞名于業(yè)內(nèi),包括客戶機(jī)連接的共享、資源 pooling以及動態(tài)網(wǎng)頁。

4)應(yīng)用范圍的區(qū)別:Tomcat 是一個(gè)小型的輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶不是很多的場合下被普遍使用,是開發(fā)和調(diào)試JSP 程序的首選。WebLogic和WebSphere是商業(yè)軟件,功能齊全強(qiáng)大,主要應(yīng)用于大型企業(yè)的大型項(xiàng)目。

5)安全性問題區(qū)別:因?yàn)門omcat是開源的,所以它們的安全性相對來說比較低,萬一應(yīng)用服務(wù)器本身有什么漏洞,你是沒辦法向Apache索賠的。而WebLogic和WebSphere其容錯(cuò)、系統(tǒng)管理和安全性能已經(jīng)在全球數(shù)以千記的關(guān)鍵任務(wù)環(huán)境中得以驗(yàn)證。

478.B/S和C/S的含義及其區(qū)別

C/S結(jié)構(gòu),即Client/Server(客戶機(jī)/服務(wù)器)結(jié)構(gòu),通過將任務(wù)合理分配到Client端和Server端,降低了系統(tǒng)的通訊開銷,可充分利用兩端硬件環(huán)境優(yōu)勢。早期軟件系統(tǒng)多以此作為首選設(shè)計(jì)標(biāo)準(zhǔn)。

B/S結(jié)構(gòu),即Browser/Server(瀏覽器/服務(wù)器)結(jié)構(gòu),是隨著Internet技術(shù)的興起,對C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶界面完全通過WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前端實(shí)現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn),節(jié)約了開發(fā)成本,便于軟件維護(hù)。

區(qū)別

1、C/S是建立在局域網(wǎng)的基礎(chǔ)上的。B/S是建立在廣域網(wǎng)的基礎(chǔ)上的,但并不是說B/S結(jié)構(gòu)不能在局域網(wǎng)上使用。

2、B/S業(yè)務(wù)擴(kuò)展簡單方便,通過增加頁面即可增加服務(wù)器功能。C/S的客戶端還需要安裝專用的客戶端軟件,不利于擴(kuò)展。

3、B/S維護(hù)簡單方便。開發(fā)、維護(hù)等幾乎所有工作也都集中在服務(wù)器端,當(dāng)企業(yè)對網(wǎng)絡(luò)應(yīng)用進(jìn)行升級時(shí),只需更新服務(wù)器端的軟件就可以,這減輕了異地用戶系統(tǒng)維護(hù)與升級的成本

4、B/S響應(yīng)速度不及C/S;

5、B/S用戶體驗(yàn)效果不是很理想

479.說說你對容器的理解

容器也是 java 程序,它的主要作用是為應(yīng)用程序提供運(yùn)行環(huán)境。容器用來接管安全性、并發(fā)性、事務(wù)處理、交換到輔助存儲器和其它服務(wù)的責(zé)任

以tomcat為例:Tomcat是一個(gè)后臺服務(wù)進(jìn)程,其它的servlet(相當(dāng)于DLL)是在Tomcat容器內(nèi)運(yùn)行,Broswer只與Tomcat通迅; Tomcat接受browser的請求,經(jīng)過一系列動作(如果是靜態(tài)網(wǎng)頁,那么裝載,按http協(xié)議形成響應(yīng)流;如果是動態(tài)的如JSP,那就要調(diào)用JDK 中的servlet.jsp接口,解釋形成靜態(tài)網(wǎng)頁,按http協(xié)議生成響應(yīng)流發(fā)送回browser)后,形成靜態(tài)網(wǎng)頁,返回響應(yīng)。

480.為什么要使用連接池?

?傳統(tǒng)的數(shù)據(jù)庫連接方式

一個(gè)連接對象對應(yīng)一個(gè)物理連接

每次操作都打開一個(gè)物理連接,

使用完都關(guān)閉連接,造成系統(tǒng)性能低下。

?連接池技術(shù)

客戶程序得到的連接對象是連接池中物理連接的一個(gè)句柄,調(diào)用連接對象的close()方法,物理連接并沒有關(guān)閉,數(shù)據(jù)源的實(shí)現(xiàn)只是刪除了客戶程序中的連接對象和池中的連接對象之間的聯(lián)系.

?數(shù)據(jù)庫連接的建立及關(guān)閉是耗費(fèi)系統(tǒng)資源的操作,在大型應(yīng)用中對系統(tǒng)的性能影響尤為明顯。為了能重復(fù)利用數(shù)據(jù)庫連接對象,縮短請求的響應(yīng)時(shí)間和提高服務(wù)器的性能,支持更多的客戶,應(yīng)采用連接池技術(shù).

481.數(shù)據(jù)庫連接池的原理

數(shù)據(jù)庫連接池的原理

傳統(tǒng)連接方式:

首先調(diào)用Class.forName()方法加載數(shù)據(jù)庫驅(qū)動,

然后調(diào)用DriverManager.getConnection()方法建立連接.

連接池技術(shù):

連接池解決方案是在應(yīng)用程序啟動時(shí)就預(yù)先建立多個(gè)數(shù)據(jù)庫連接對象,然后將連接對象保存到連接池中。

當(dāng)客戶請求到來時(shí),從池中取出一個(gè)連接對象為客戶服務(wù)。

當(dāng)請求完成時(shí),客戶程序調(diào)用close()方法,將連接對象放回池中.

對于多于連接池中連接數(shù)的請求,排隊(duì)等待。

應(yīng)用程序還可根據(jù)連接池中連接的使用率,動態(tài)增加或減少池中的連接數(shù)。

482.MVC模式及其優(yōu)缺點(diǎn)

?

一、MVC原理

MVC是一種程序開發(fā)設(shè)計(jì)模式,它實(shí)現(xiàn)了顯示模塊與功能模塊的分離。提高了程序的可維護(hù)性、可移植性、可擴(kuò)展性與可重用性,降低了程序的開發(fā)難度。它主要分模型、視圖、控制器三層。

1、模型(model)它是應(yīng)用程序的主體部分,主要包括業(yè)務(wù)邏輯模塊和數(shù)據(jù)模塊。模型與數(shù)據(jù)格式無關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性

2、視圖(view) 用戶與之交互的界面、在web中視圖一般由jsp,html組成

3、控制器(controller)接收來自界面的請求 并交給模型進(jìn)行處理 在這個(gè)過程中控制器不做任何處理只是起到了一個(gè)連接的作用

二、MVC的優(yōu)點(diǎn)

1、降低代碼耦合性。在MVC模式中,三個(gè)層各施其職,所以如果一旦哪一層的需求發(fā)生了變化,就只需要更改相應(yīng)的層中的代碼而不會影響到其他層中的代碼。

2、有利于分工合作。在MVC模式中,由于按層把系統(tǒng)分開,那么就能更好的實(shí)現(xiàn)開發(fā)中的分工。網(wǎng)頁設(shè)計(jì)人員可進(jìn)行開發(fā)視圖層中的JSP,而對業(yè)務(wù)熟悉的人員可開發(fā)業(yè)務(wù)層,而其他開發(fā)人員可開發(fā)控制層。

3、有利于組件的重用。如控制層可獨(dú)立成一個(gè)能用的組件,表示層也可做成通用的操作界面??梢詾橐粋€(gè)模型在運(yùn)行時(shí)同時(shí)建立和使用多個(gè)視圖。

三、MVC的不足之處

1、增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性。對于簡單的界面,嚴(yán)格遵循MVC,使模型、視圖與控制器分離,會增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過多的更新操作,降低運(yùn)行效率。

2、視圖與控制器間的過于緊密的連接。視圖與控制器是相互分離,但確實(shí)聯(lián)系緊密的部件,視圖沒有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨(dú)立重用。

3、視圖對模型數(shù)據(jù)的低效率訪問。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能。

4、目前,一般高級的界面工具或構(gòu)造器不支持模式。改造這些工具以適應(yīng)MVC需要和建立分離的部件的代價(jià)是很高的,從而造成MVC使用的困難。

483.MVC模式完成分頁功能的基本思路是什么?

1)頁面提交頁碼(第幾頁)到Servlet中

2)Servlet接收到頁碼后,將頁碼傳遞給分頁工具類(PageBean)

3)Servlet中調(diào)用Service層傳入PageBean對象

4)Service層調(diào)用DAO層傳入PageBean對象

5)Servlet中得到查詢出來的數(shù)據(jù),并setAttrivute保存

6)在頁面中得到(getAttribute)數(shù)據(jù),遍歷輸出

484.常用的Web容器

答: Unix和Linux平臺下使用最廣泛的免費(fèi)HTTP服務(wù)器是Apache服務(wù)器,而Windows平臺的服務(wù)器通常使用IIS作為Web服務(wù)器。選擇Web服務(wù)器應(yīng)考慮的因素有:性能、安全性、日志和統(tǒng)計(jì)、虛擬主機(jī)、代理服務(wù)器、緩沖服務(wù)和集成應(yīng)用程序等。下面是對常用服務(wù)器的簡介:

IIS:Microsoft的Web服務(wù)器產(chǎn)品為Internet Information Services。IIS 是允許在公共Intranet或Internet上發(fā)布信息的Web服務(wù)器。IIS是目前最流行的Web服務(wù)器產(chǎn)品之一,很多著名的網(wǎng)站都是建立在IIS的平臺上。IIS提供了一個(gè)圖形界面的管理工具,稱為Internet服務(wù)管理器,可用于監(jiān)視配置和控制Internet服務(wù)。IIS是一種Web服務(wù)組件,其中包括Web服務(wù)器、FTP服務(wù)器、NNTP服務(wù)器和SMTP服務(wù)器,分別用于網(wǎng)頁瀏覽、文件傳輸、新聞服務(wù)和郵件發(fā)送等方面,它使得在網(wǎng)絡(luò)(包括互聯(lián)網(wǎng)和局域網(wǎng))上發(fā)布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作為擴(kuò)展Web服務(wù)器功能的編程接口;同時(shí),它還提供一個(gè)Internet數(shù)據(jù)庫連接器,可以實(shí)現(xiàn)對數(shù)據(jù)庫的查詢和更新。

Kangle:Kangle Web服務(wù)器是一款跨平臺、功能強(qiáng)大、安全穩(wěn)定、易操作的高性能Web服務(wù)器和反向代理服務(wù)器軟件。此外,Kangle也是一款專為做虛擬主機(jī)研發(fā)的Web服務(wù)器。實(shí)現(xiàn)虛擬主機(jī)獨(dú)立進(jìn)程、獨(dú)立身份運(yùn)行。用戶之間安全隔離,一個(gè)用戶出問題不影響其他用戶。支持PHP、ASP、ASP.NET、Java、Ruby等多種動態(tài)開發(fā)語言。

WebSphere:WebSphere Application Server是功能完善、開放的Web應(yīng)用程序服務(wù)器,是IBM電子商務(wù)計(jì)劃的核心部分,它是基于Java的應(yīng)用環(huán)境,用于建立、部署和管理Internet和Intranet Web應(yīng)用程序,適應(yīng)各種Web應(yīng)用程序服務(wù)器的需要,范圍從簡單到高級直到企業(yè)級。

WebLogic:BEA WebLogic Server是一種多功能、基于標(biāo)準(zhǔn)的Web應(yīng)用服務(wù)器,為企業(yè)構(gòu)建自己的應(yīng)用提供了堅(jiān)實(shí)的基礎(chǔ)。各種應(yīng)用開發(fā)、部署所有關(guān)鍵性的任務(wù),無論是集成各種系統(tǒng)和數(shù)據(jù)庫,還是提交服務(wù)、跨Internet協(xié)作,Weblogic都提供了相應(yīng)的支持。由于它具有全面的功能、對開放標(biāo)準(zhǔn)的遵從性、多層架構(gòu)、支持基于組件的開發(fā),基于Internet的企業(yè)都選擇它來開發(fā)、部署最佳的應(yīng)用。BEA WebLogic Server在使應(yīng)用服務(wù)器成為企業(yè)應(yīng)用架構(gòu)的基礎(chǔ)方面一直處于領(lǐng)先地位,為構(gòu)建集成化的企業(yè)級應(yīng)用提供了穩(wěn)固的基礎(chǔ),它們以 Internet的容量和速度,在連網(wǎng)的企業(yè)之間共享信息、提交服務(wù),實(shí)現(xiàn)協(xié)作自動化。

Apache:目前Apache仍然是世界上用得最多的Web服務(wù)器,市場占有率約為60%左右。世界上很多著名的網(wǎng)站都是Apache的產(chǎn)物,它的成功之處主要在于它的源代碼開放、有一支強(qiáng)大的開發(fā)團(tuán)隊(duì)、支持跨平臺的應(yīng)用(可以運(yùn)行在幾乎所有的Unix、Windows、Linux系統(tǒng)平臺上)以及它的可移植性等方面。

Tomcat:Tomcat是一個(gè)開放源代碼、運(yùn)行Servlet和JSP的容器。TomcatServer實(shí)現(xiàn)了Servlet和JSP規(guī)范。此外,Tomcat還實(shí)現(xiàn)了Apache-Jakarta規(guī)范而且比絕大多數(shù)商業(yè)應(yīng)用軟件服務(wù)器要好,因此目前也有不少的Web服務(wù)器都選擇了Tomcat。

Nginx:讀作"engine x",是一個(gè)高性能的HTTP和反向代理服務(wù)器,也是一個(gè)IMAP/POP3/SMTP代理服務(wù)器。 Nginx是由Igor Sysoev為俄羅斯訪問量第二的 Rambler.ru站點(diǎn)開發(fā)的,第一個(gè)公開版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。

485.Java Web開發(fā)的Model 1和Model 2分別指的是什么?

答:Model 1是以頁面為中心的Java Web開發(fā),只適合非常小型的應(yīng)用程序,Model 2是基于MVC架構(gòu)模式的應(yīng)用,這一點(diǎn)在前文的面試題中已經(jīng)詳細(xì)講解過了。

486.說說什么是框架:

框架(framework)是一個(gè)框子--》指約束性,也是一個(gè)架子--》指支撐性IT語境中的框架,特指為解決一個(gè)開放性問題而設(shè)計(jì)的具有一定約束性的支撐結(jié)構(gòu),在此結(jié)構(gòu)上可以根據(jù)具體問題擴(kuò)展、按插更多的組成部分,從而更迅速和方便地架構(gòu)完整的解決問題的方案。

1)框架本身一般不完整到可以解決特定問題,但是可以幫助您快速解決特定問題:

沒有框架所有的工作都從零開始做,有了框架,為我們提供了一定的功能。我們就可以在框架的基礎(chǔ)上開發(fā),極大的解決了生產(chǎn)力。

不同的框架,是為了解決不同領(lǐng)域的問題,一定要為了解決問題才去學(xué)習(xí)框架。

2)框架天生就是為了擴(kuò)展而設(shè)計(jì)的

3)框架里面可以為后續(xù)的組件提供很多輔助性、支撐性的方便易用的實(shí)用工具(utilities),也就是框架時(shí)常配套一些幫組解決某類問題的庫(libraries)或工具(tools).

在java中就是一系列的jar包,其本質(zhì)就是對jdk功能的擴(kuò)展。

487.簡單說一下MVC框架?

是為了解決傳統(tǒng)MVC模式(jsp+servlet+javabean)一些問題而出現(xiàn)的框架

傳統(tǒng)MVC模式模式問題:

1) 所有的Servlet和Servlet映射都要配置在web.xml中,如果項(xiàng)目太大,web.xml就太龐大并且不能實(shí)現(xiàn)模塊化管理。

2)Servlet的主要功能就是接受參數(shù)、調(diào)用邏輯、跳轉(zhuǎn)頁面,比如像其他字符編碼、文件上傳等功能也要寫在Servlet中,不能讓Servlet主要功能而需要做處理一些特例。

3)接受參數(shù)比較麻煩

(String name = request.getParameter(“name”)),不能通過model接受,只能單個(gè)接收,接收完成后轉(zhuǎn)換封裝model。

4)跳轉(zhuǎn)頁面方式比較單一(forward,redirect),并且當(dāng)我們的頁面名稱發(fā)生改變時(shí)需要改變Servlet源代碼。

現(xiàn)在比較常用的MVC框架:

webwork

Struts

Struts2

SpringMVC

488.簡單講一下struts2的執(zhí)行流程

?一個(gè)請求在struts2框架中處理大概分為一下幾個(gè)步驟:

1)客戶瀏覽器發(fā)送一個(gè)指向Servlet容器(例如Tomcat)的請求

2)這個(gè)請求經(jīng)過一系列的過濾器(Filter)(這些過濾器中有一個(gè)叫做ActionContextCleanUp的可選過濾器,這個(gè)過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)

3)接著FilterDispatcher(StrutsPrepareAndExecuteFilter)被調(diào)用,F(xiàn)ilterDispatcher詢問ActionMapper來決定這個(gè)請是否需要調(diào)用某個(gè)Action

4)如果ActionMapper決定需要調(diào)用某個(gè)Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy

5)ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調(diào)用的Action類

6)ActionProxy創(chuàng)建一個(gè)ActionInvocation的實(shí)例。

7)ActionInvocation實(shí)例使用命名模式來調(diào)用,在調(diào)用Action的過程前后,涉及到相關(guān)攔截器(Intercepter)的調(diào)用。

8)一旦Action執(zhí)行完畢,ActionInvocation負(fù)責(zé)根據(jù)struts.xml中的配置找到對應(yīng)的返回結(jié)果。返回結(jié)果通常是(但不總是,也 可 能是另外的一個(gè)Action鏈)一個(gè)需要被表示的JSP或者FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標(biāo)簽。在這個(gè)過程中需要涉及到ActionMapper

489.Struts2中的攔截器,你都用它干什么?

java里的攔截器是動態(tài)攔截Action調(diào)用的對象,它提供了一種機(jī)制可以使開發(fā)者定義一個(gè)action執(zhí)行的前后執(zhí)行的代碼,也可以在一個(gè)action執(zhí)行前阻止其執(zhí)行,同時(shí)也提供了一種可以提取action中可重用部分的方式。

在AOP(Aspect Oriented Programming)中攔截器用于在某個(gè)方法或字段被訪問之前,進(jìn)行攔截后在之前或之后加入某些操作

1)struts2中的功能(參數(shù)處理、文件上傳、字符編碼等)都是通過系統(tǒng)攔截器實(shí)現(xiàn)的

2)當(dāng)然我們也可以自定義攔截器,進(jìn)行可插拔配置,可以執(zhí)行Action的方法前后,加入相關(guān)邏輯完成業(yè)務(wù)。

使用場景:

1)用戶登錄判斷,在執(zhí)行action的前面判斷是否已經(jīng)登錄,如果沒有登錄的就跳轉(zhuǎn)登錄頁面。

2)用戶權(quán)限判斷,在執(zhí)行action的前面判斷是否具有,如果沒有權(quán)限就給出提示信息。

3)操作日志...

490.簡單講一下SpringMVC的執(zhí)行流程?

1)用戶向服務(wù)器發(fā)送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲;

2)DispatcherServlet 對請求URL進(jìn)行解析,得到請求資源標(biāo)識符(URI)。然后根據(jù)該URI,調(diào)用HandlerMapping獲得該Handler配置的所有相關(guān)的對象 (包括Handler對象以及Handler對象對應(yīng)的攔截器),最后以HandlerExecutionChain對象的形式返回;

3)DispatcherServlet 根據(jù)獲得的Handler,選擇一個(gè)合適的HandlerAdapter。(附注:如果成功獲得HandlerAdapter后,此時(shí)將開始執(zhí)行攔截器的preHandler(...)方法)

4) 提取Request中的模型數(shù)據(jù),填充Handler入?yún)?,開始執(zhí)行Handler(Controller)。 在填充Handler的入?yún)⑦^程中,根據(jù)你的配置,Spring將幫你做一些額外的工作:

HttpMessageConveter: 將請求消息(如Json、xml等數(shù)據(jù))轉(zhuǎn)換成一個(gè)對象,將對象轉(zhuǎn)換為指定的響應(yīng)信息

數(shù)據(jù)轉(zhuǎn)換:對請求消息進(jìn)行數(shù)據(jù)轉(zhuǎn)換。如String轉(zhuǎn)換成Integer、Double等

數(shù)據(jù)根式化:對請求消息進(jìn)行數(shù)據(jù)格式化。 如將字符串轉(zhuǎn)換成格式化數(shù)字或格式化日期等

數(shù)據(jù)驗(yàn)證: 驗(yàn)證數(shù)據(jù)的有效性(長度、格式等),驗(yàn)證結(jié)果存儲到BindingResult或Error中

5)Handler執(zhí)行完成后,向DispatcherServlet?返回一個(gè)ModelAndView對象;

6)根據(jù)返回的ModelAndView,選擇一個(gè)適合的ViewResolver(必須是已經(jīng)注冊到Spring容器中的ViewResolver)返回給DispatcherServlet?;

7)ViewResolver 結(jié)合Model和View,來渲染視圖

8)將渲染結(jié)果返回給客戶端。

快速記憶:

核心控制器捕獲請求,查找Hander,執(zhí)行Handler,選擇ViewResolver,通過ViewResoler渲染視圖并返回

491.簡單說一下struts2和springMVC有什么不同

目前企業(yè)中使用SpringMvc的比例已經(jīng)遠(yuǎn)遠(yuǎn)超過Struts2,那么兩者到底有什么區(qū)別,是很多初學(xué)者比較關(guān)注的問題,下面我們就來對SpringMvc和Struts2進(jìn)行各方面的比較:

1)核心控制器(前端控制器、預(yù)處理控制器):對于使用過mvc框架的人來說這個(gè)詞應(yīng)該不會陌生,核心控制器的主要用途是處理所有的請求,然后對那些特殊的請求 (控制器)統(tǒng)一的進(jìn)行處理(字符編碼、文件上傳、參數(shù)接受、異常處理等等),spring mvc核心控制器是Servlet,而Struts2是Filter。

2)控制器實(shí)例:Spring Mvc會比Struts快一些(理論上)。Spring Mvc是基于方法設(shè)計(jì),而Sturts是基于對象,每次發(fā)一次請求都會實(shí)例一個(gè)action,每個(gè)action都會被注入??屬性,而Spring更像Servlet一樣,只有一個(gè)實(shí)例,每次請求執(zhí)行對應(yīng)的方法即可(注意:由于是單例實(shí)例,所以應(yīng)當(dāng)避免全局變量的修改,這樣會產(chǎn)生線程安全問題 )

3)管理方式:大部分的公司的核心架構(gòu)中,就會使用到spring,而spring mvc又是spring中的一個(gè)模塊,所以spring對于spring mvc的控制器管理更加簡單方便,而且提供了全 注解方式進(jìn)行管理,各種功能的注解都比較全面,使用簡單,而struts2需要采用XML很多的配置參數(shù)來管理(雖然也可以采用注解,但是幾乎沒有公司那 樣使用)

4)參數(shù)傳遞:Struts2中自身提供多種參數(shù)接受,其實(shí)都是通過(ValueStack)進(jìn)行傳遞和賦值,而SpringMvc是通過方法的參數(shù)進(jìn)行接收。

5)學(xué)習(xí)難度:Struts更加很多新的技術(shù)點(diǎn),比如攔截器、值棧及OGNL表達(dá)式,學(xué)習(xí)成本較高,springmvc 比較簡單,很較少的時(shí)間都能上手。

6)intercepter 的實(shí)現(xiàn)機(jī)制:struts有以自己的interceptor機(jī)制,spring mvc用的是獨(dú)立的AOP方式。這樣導(dǎo)致struts的配置文件量還是比spring mvc大,雖然struts的配置能繼承,所以我覺得論使用上來講,spring mvc使用更加簡潔,開發(fā)效率Spring MVC確實(shí)比struts2高。spring mvc是方法級別的攔截,一個(gè)方法對應(yīng)一個(gè)request上下文,而方法同時(shí)又跟一個(gè)url對應(yīng),所以說從架構(gòu)本身上spring3 mvc就容易實(shí)現(xiàn)restful url。struts2是類級別的攔截,一個(gè)類對應(yīng)一個(gè)request上下文;實(shí)現(xiàn)restful url要費(fèi)勁,因?yàn)閟truts2 action的一個(gè)方法可以對應(yīng)一個(gè)url;而其類屬性卻被所有方法共享,這也就無法用注解或其他方式標(biāo)識其所屬方法了。spring3 mvc的方法之間基本上獨(dú)立的,獨(dú)享request response數(shù)據(jù),請求數(shù)據(jù)通過參數(shù)獲取,處理結(jié)果通過ModelMap交回給框架方法之間不共享變量,而struts2搞的就比較亂,雖然方法之間 也是獨(dú)立的,但其所有Action變量是共享的,這不會影響程序運(yùn)行,卻給我們編碼,讀程序時(shí)帶來麻煩。

7)spring mvc處理ajax請求,直接通過返回?cái)?shù)據(jù),方法中使用注解@ResponseBody,spring mvc自動幫我們對象轉(zhuǎn)換為JSON數(shù)據(jù)。而struts2是通過插件的方式來處理。

在springMVC流行起來之前,struts2在MVC框架中占核心地位,隨著SpringMVC的出現(xiàn),SpringMVC慢慢的取代了struts2,但是很多的企業(yè)原來搭建的框架都是使用struts2。

492.說一下Spring中的兩大核心

Spring是什么?

Spring是J2EE應(yīng)用程序框架,是輕量級的IOC和AOP的容器框架,主要針對JavaBean的生命周期進(jìn)行管理的輕量級容器,可以單獨(dú)使用,也可以和struts框架,ibatis框架等組合使用。

1)IOC(Inversion of Control)

ioc控制反轉(zhuǎn),又稱為“依賴注入”;

IOC的基本概念是:不創(chuàng)建對象,但是描述創(chuàng)建它們的方式。在代碼中不直接與對象和服務(wù)連接,但在配置文件中描述哪一個(gè)組件需要哪一項(xiàng)服務(wù)。容器負(fù)責(zé)將這些聯(lián)系在一起。   

其原理是基于OO設(shè)計(jì)原則的The Hollywood Principle:Don't call us, we'll call you(別找我,我會來找你的)。也就是說,所有的組件都是被動的(Passive),所有的組件初始化和調(diào)用都由容器負(fù)責(zé)。組件處在一個(gè)容器當(dāng)中,由容 器負(fù)責(zé)管理。   

簡單的來講,就是由容器控制程序之間的關(guān)系,而非傳統(tǒng)實(shí)現(xiàn)中,由程序代碼直接操控。這也就是所謂“控制反轉(zhuǎn)”的概念所在:控制權(quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移,是所謂反轉(zhuǎn)。

2)AOP 面向切面編程

核心原理:使用動態(tài)代理的設(shè)計(jì)模式在執(zhí)行方法前后或出現(xiàn)異常常做加入相關(guān)邏輯

我們使用AOP來做:

1)事務(wù)處理:執(zhí)行方法前開啟事務(wù),執(zhí)行完成后關(guān)閉事務(wù),出現(xiàn)異常后回滾事務(wù)

2)權(quán)限判斷:在執(zhí)行方法前,判斷是否具有權(quán)限

3)日志:在執(zhí)行前進(jìn)行日志處理

493.講一下Spring的事務(wù)的傳播特性

多個(gè)事物存在是怎么處理的策略

1)PROPAGATION_REQUIRED:如果存在一個(gè)事務(wù),則支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就新建一個(gè)事務(wù)。這是最常見的選擇。

2)PROPAGATION_SUPPORTS:如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行。

3)PROPAGATION_MANDATORY:如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。

4)PROPAGATION_REQUIRES_NEW:新建事務(wù),如果當(dāng)前存在事務(wù),把當(dāng)前事務(wù)掛起。

5)PROPAGATION_NOT_SUPPORTED:以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。

6)PROPAGATION_NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。

7)PROPAGATION_NESTED:支持當(dāng)前事務(wù),新增Savepoint點(diǎn),與當(dāng)前事務(wù)同步提交或回滾。

494.什么是ORM

對象關(guān)系映射(Object Relation Mapping,簡稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù),簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中,那么到底如何實(shí)現(xiàn)持久化呢?一種簡單的方案時(shí)采用硬編碼方式(jdbc操作sql方式),為每一種可能的數(shù)據(jù)庫訪問操作提供單獨(dú)的方法。

這種方案存在以下不足:

1. 持久化層缺乏彈性,一旦出現(xiàn)業(yè)務(wù)需求變更,就必須修改持久化層的接口

2. 持久化層同時(shí)與域模型與關(guān)系數(shù)據(jù)庫模型綁定,不管域模型還是關(guān)系數(shù)據(jù)庫模型發(fā)生變化,都要修改持久化層的相關(guān)程序代碼,增加軟件的維護(hù)難度。

ORM提供了實(shí)現(xiàn)持久化層的另一種模式,它采用映射元數(shù)據(jù)來描述對象關(guān)系的映射,使得ORM中間件能在任何一個(gè)應(yīng)用的業(yè)務(wù)邏輯層和數(shù)據(jù)庫層之間充當(dāng)橋梁,Java典型的ORM框架有:Hibernate,ibatis(mybtis),speedframework。

ORM框架的方法論基于三個(gè)核心原則:

簡單:以最基本的形式建模數(shù)據(jù)

傳達(dá)性:數(shù)據(jù)庫結(jié)構(gòu)被任何人都能理解的語言文檔化

精確性:基于數(shù)據(jù)模型創(chuàng)建正確標(biāo)準(zhǔn)化了結(jié)構(gòu)

對象關(guān)系映射(Object Relation Mapping,簡稱ORM)模式是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù),可以簡單的方案采用硬編碼方式(jdbc操作sql方式),為每一種可能的數(shù)據(jù)庫訪問操作提供單獨(dú)的方法,這種方法存在很多缺陷,使用ORM框架(為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在互不匹配的現(xiàn)象的框架)來解決。

495.Hibernate對象的狀態(tài)

臨時(shí)狀態(tài)/瞬時(shí)狀態(tài)(transient):剛剛用new語句創(chuàng)建,沒有被持久化,無id

不處于session中(沒有使用session的方法去操作臨時(shí)對象),該對象成為臨時(shí)對象

持久化狀態(tài),托管狀態(tài)(persistent):已經(jīng)被持久化,加入session的緩存中,session是沒有關(guān)閉

該狀態(tài)的對象為持久化對象。

游離狀態(tài),脫管狀態(tài)(detached):已經(jīng)被持久化,但不處于session中,該狀態(tài)的對象為游離對象。

刪除狀態(tài)(removed):對象有關(guān)聯(lián)的id,并且在session管理下,但是已經(jīng)被計(jì)劃(事務(wù)提交的時(shí)候,commit)刪除,如果沒有事務(wù)就不能刪除

相互轉(zhuǎn)換

496.介紹一下Hibernate的緩存

答:一、why(為什么要用Hibernate緩存?)

Hibernate是一種持久化層框架,經(jīng)常訪問物理數(shù)據(jù)庫。

為了降低應(yīng)用程序?qū)ξ锢頂?shù)據(jù)源訪問的頻次,從而提高應(yīng)用程序的運(yùn)行性能

緩存內(nèi)的數(shù)據(jù)是對物理數(shù)據(jù)源中的數(shù)據(jù)的復(fù)制,應(yīng)用程序在運(yùn)行時(shí)從緩存讀寫數(shù)據(jù),在特定的時(shí)刻或事件會同步緩存和物理數(shù)據(jù)源的數(shù)據(jù)。

為了提高訪問速度,把磁盤或者數(shù)據(jù)庫訪問變成內(nèi)存訪問

二、what(Hibernate緩存原理是怎樣的?)Hibernate緩存包括兩大類:Hibernate 一級緩存和Hibernate二級緩存

1. Hibernate一級緩存又稱為”session的緩存”。

session緩存內(nèi)置不能被卸載,session的緩存是事務(wù)范圍的緩存(session對象的生命周期通常對應(yīng)一個(gè)數(shù)據(jù)庫事務(wù)或者一個(gè)應(yīng)用事務(wù))。

一級緩存中,持久化類的每個(gè)實(shí)例都具有唯一的OID

2. Hibernate的二級緩存又稱為”sessionFactory的緩存”。

由于sessionFactory對象的生命周期和應(yīng)用程序的整個(gè)過程對應(yīng),因此Hibernate二級緩存是進(jìn)程范圍或者集群范圍的緩存,有可能出現(xiàn)并發(fā)問題,因此需要采用適當(dāng)?shù)牟l(fā)訪問策略,該策略為被緩存的數(shù)據(jù)提供了事務(wù)隔離級別。

第二級緩存是可選的,是一個(gè)可配置的插件,默認(rèn)下sessionFactory不會啟用這個(gè)插件。

什么樣的數(shù)據(jù)適合存放到二級緩存中?

1) 很少被修改的數(shù)據(jù) (帖子的最后回復(fù)時(shí)間)

2) 經(jīng)常被查詢的數(shù)據(jù) (電商的地點(diǎn))

3) 不是很重要的數(shù)據(jù),允許出現(xiàn)偶爾并發(fā)的數(shù)據(jù)

4) 不會被并發(fā)訪問的數(shù)據(jù)

5) 常量數(shù)據(jù)

擴(kuò)展:Hibernate的二級緩存默認(rèn)是不支持分布式緩存的,使用memcache,redis等中央緩存來代替二級緩存。

497.簡單講一下webservice使用的場景

webservice是一個(gè)SOA(面向服務(wù)的編程)的架構(gòu),它是不依賴于語言,不依賴于平臺,可以實(shí)現(xiàn)不同的語言間的相互調(diào)用,通過Internet進(jìn)行基于http協(xié)議的網(wǎng)絡(luò)應(yīng)用間的交互。

1、異構(gòu)系統(tǒng)(不同的開發(fā)語言)的整合

2、不同客戶端的整合 (瀏覽器、手機(jī)端(android\ios)、微信)

3、實(shí)實(shí)在在的例子:

天氣預(yù)報(bào):可以通過實(shí)現(xiàn)webservice客戶端調(diào)用遠(yuǎn)程天氣服務(wù)實(shí)現(xiàn)的

4、單點(diǎn)登錄:一個(gè)服務(wù)實(shí)現(xiàn)所有系統(tǒng)的登錄

498.簡單介紹一下activity?

Activity是一個(gè)業(yè)務(wù)流程管理(BPM)和工作流系統(tǒng),適用于開發(fā)人員和系統(tǒng)管理員,其核心是超快速,穩(wěn)定的BPMN2的流程引擎,它易于與Spring集成使用。

主要用在OA中,把線下流程放在線上,把現(xiàn)實(shí)生活中一些流程固話定義到系統(tǒng)中,然后通過輸入表單數(shù)據(jù)完成業(yè)務(wù)。

他可以用在OA系統(tǒng)的流程管理中

請假流程(小于三天,一級主管審批,大于三天二級主管審批)

報(bào)銷流程(價(jià)格區(qū)間)

499.什么是MyBatis?

答:MyBatis是一個(gè)可以自定義SQL、存儲過程和高級映射的持久層框架。

500.Mybatis是如何進(jìn)行分頁的?分頁插件的原理是什么?

答:1)Mybatis使用RowBounds對象進(jìn)行分頁,也可以直接編寫sql實(shí)現(xiàn)分頁,也可以使用Mybatis的分頁插件。

2)分頁插件的原理:實(shí)現(xiàn)Mybatis提供的接口,實(shí)現(xiàn)自定義插件,在插件的攔截方法內(nèi)攔截待執(zhí)行的sql,然后重寫sql。

舉例:select * from student,攔截sql后重寫為:select t.* from (select * from student)t limit 0,10


由于字?jǐn)?shù)限制,后續(xù)內(nèi)容更加精彩,歡迎關(guān)注,整理不易,可否動動你的小手給小編來點(diǎn)更新的動力,希望對你們會有幫助!~

大數(shù)據(jù)面試題(八)的評論 (共 條)

分享到微博請遵守國家法律
鸡东县| 宾阳县| 赣榆县| 新建县| 安新县| 红河县| 三门峡市| 宝坻区| 黔江区| 长垣县| 嘉义市| 安达市| 大港区| 潢川县| 本溪| 开鲁县| 扶沟县| 武川县| 团风县| 中西区| 额敏县| 大埔县| 太白县| 玉田县| 上栗县| 华亭县| 南木林县| 桐柏县| 南川市| 尤溪县| 芮城县| 杭州市| 墨江| 米易县| 得荣县| 肃北| 淳化县| 清涧县| 同德县| 龙门县| 玛沁县|