五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網 會員登陸 & 注冊

大數據面試題(九)

2020-06-17 15:24 作者:自學Python的小姐姐呀  | 我要投稿

501.MyBatis與Hibernate有哪些不同?

答:1)Mybatis和hibernate不同,它不完全是一個ORM框架,因為MyBatis需要程序員自己編寫Sql語句,不過mybatis可以通過XML或注解方式靈活配置要運行的sql語句,并將java對象和sql語句映射生成最終執(zhí)行的sql,最后將sql執(zhí)行的結果再映射生成java對象。

2)Mybatis學習門檻低,簡單易學,程序員直接編寫原生態(tài)sql,可嚴格控制sql執(zhí)行性能,靈活度高,非常適合對關系數據模型要求不高的軟件開發(fā),例如互聯網軟件、企業(yè)運營類軟件等,因為這類軟件需求變化頻繁,一但需求變化要求成果輸出迅速。但是靈活的前提是mybatis無法做到數據庫無關性,如果需要實現支持多種數據庫的軟件則需要自定義多套sql映射文件,工作量大。

3)Hibernate對象/關系映射能力強,數據庫無關性好,對于關系模型要求高的軟件(例如需求固定的定制化軟件)如果用hibernate開發(fā)可以節(jié)省很多代碼,提高效率。但是Hibernate的缺點是學習門檻高,要精通門檻更高,而且怎么設計O/R映射,在性能和對象模型之間如何權衡,以及怎樣用好Hibernate需要具有很強的經驗和能力才行。

總之,按照用戶的需求在有限的資源環(huán)境下只要能做出維護性、擴展性良好的軟件架構都是好架構,所以框架只有適合才是最好。

502.簡述Mybatis的Xml映射文件和Mybatis內部數據結構之間的映射關系?

答: Mybatis將所有Xml配置信息都封裝到All-In-One重量級對象Configuration內部。在Xml映射文件中,< parameterMap>標簽會被解析為ParameterMap對象,其每個子元素會被解析為ParameterMapping對象。< resultMap>標簽會被解析為ResultMap對象,其每個子元素會被解析為ResultMapping對象。每一個< select>、< insert>、< update>、< delete>標簽均會被解析為MappedStatement對象,標簽內的sql會被解析為BoundSql對象。

503.什么是MyBatis的接口綁定,有什么好處?

答:接口映射就是在MyBatis中任意定義接口,然后把接口里面的方法和SQL語句綁定,我們直接調用接口方法就可以,這樣比起原來了SqlSession提供的方法我們可以有更加靈活的選擇和設置.

504.Mybatis能執(zhí)行一對一、一對多的關聯查詢嗎?都有哪些實現方式,以及它們之間的區(qū)別?

答:能,Mybatis不僅可以執(zhí)行一對一、一對多的關聯查詢,還可以執(zhí)行多對一,多對多的關聯查詢,多對一查詢,其實就是一對一查詢,只需要把selectOne()修改為selectList()即可;多對多查詢,其實就是一對多查詢,只需要把selectOne()修改為selectList()即可。

關聯對象查詢,有兩種實現方式,一種是單獨發(fā)送一個sql去查詢關聯對象,賦給主對象,然后返回主對象。另一種是使用嵌套查詢,嵌套查詢的含義為使用join查詢,一部分列是A對象的屬性值,另外一部分列是關聯對象B的屬性值,好處是只發(fā)一個sql查詢,就可以把主對象和其關聯對象查出來。

505.MyBatis里面的動態(tài)Sql是怎么設定的?用什么語法?

答:MyBatis里面的動態(tài)Sql一般是通過if節(jié)點來實現,通過OGNL語法來實現,但是如果要寫的完整,必須配合where,trim節(jié)點,where節(jié)點是判斷包含節(jié)點有內容就插入where,否則不插入,trim節(jié)點是用來判斷如果動態(tài)語句是以and 或or開始,那么會自動把這個and或者or取掉。

506.使用MyBatis的mapper接口調用時有哪些要求?

答:1)Mapper接口方法名和mapper.xml中定義的每個sql的id相同

2)Mapper接口方法的輸入參數類型和mapper.xml中定義的每個sql 的parameterType的類型相同

3)Mapper接口方法的輸出參數類型和mapper.xml中定義的每個sql的resultType的類型相同

4)Mapper.xml文件中的namespace即是mapper接口的類路徑。

507.Mybatis是如何將sql執(zhí)行結果封裝為目標對象并返回的?都有哪些映射形式?

答:第一種是使用< resultMap>標簽,逐一定義列名和對象屬性名之間的映射關系。

第二種是使用sql列的別名功能,將列別名書寫為對象屬性名,比如T_NAME AS NAME,對象屬性名一般是name,小寫,但是列名不區(qū)分大小寫,Mybatis會忽略列名大小寫,智能找到與之對應對象屬性名,你甚至可以寫成T_NAME AS NaMe,Mybatis一樣可以正常工作。

有了列名與屬性名的映射關系后,Mybatis通過反射創(chuàng)建對象,同時使用反射給對象的屬性逐一賦值并返回,那些找不到映射關系的屬性,是無法完成賦值的。

508.MyBatis接口綁定有幾種實現方式,分別是怎么實現的?

答:接口綁定有兩種實現方式,一種是通過注解綁定,就是在接口的方法上面加上@Select@Update等注解里面包含Sql語句來綁定,另外一種就是通過xml里面寫SQL來綁定,在這種情況下,要指定xml映射文件里面的namespace必須為接口的全路徑名.

509.MyBatis實現一對一有幾種方式?具體怎么操作的?

答:有聯合查詢和嵌套查詢,聯合查詢是幾個表聯合查詢,只查詢一次,通過在resultMap里面配置association節(jié)點配置一對一的類就可以完成;嵌套查詢是先查一個表,根據這個表里面的結果的外鍵id,去再另外一個表里面查詢數據,也是通過association配置,但另外一個表的查詢通過select屬性配置。

510.什么情況下用注解綁定,什么情況下用xml綁定?

答:當Sql語句比較簡單時候,用注解綁定;當SQL語句比較復雜時候,用xml綁定,一般用xml綁定的比較多

511.MyBatis的好處是什么?

答:1) MyBatis把sql語句從Java源程序中獨立出來, 放在單獨的XML文件中編寫,給程序的維護帶來了很大便利。

2) MyBatis封裝了底層JDBC API的調用細節(jié),并能自動將結果集轉換成Java Bean對象,大大簡化了Java數據庫編程的重復工作。

3) 因為MyBatis需要程序員自己去編寫sql語句,程序員可以結合數據庫自身的特點靈活控制sql語句, 因此能夠實現比Hibernate等全自動orm框架更高的查詢效率,能夠完成復雜查詢。

微服務框架

512.Spring Boot有哪些優(yōu)點?

答:Spring Boot的優(yōu)點有:

減少開發(fā),測試時間和努力。

使用JavaConfig有助于避免使用XML。

避免大量的Maven導入和各種版本沖突。

提供意見發(fā)展方法。

通過提供默認值快速開始開發(fā)。

沒有單獨的Web服務器需要。這意味著你不再需要啟動Tomcat,Glassfish或其他任何東西。

需要更少的配置 因為沒有web.xml文件。只需添加用@ Configuration注釋的類,然后添加用@Bean注釋的方法,Spring將自動加載對象并像以前一樣對其進行管理。您甚至可以將@Autowired添加到bean方法中,以使Spring自動裝入需要的依賴關系中。

基于環(huán)境的配置 使用這些屬性,您可以將您正在使用的環(huán)境傳遞到應用程序:-Dspring.profiles.active = {enviornment}。在加載主應用程序屬性文件后,Spring將在(application{environment} .properties)中加載后續(xù)的應用程序屬性文件。

513.如何重新加載Spring Boot上的更改,而無需重新啟動服務器?

答:這可以使用DEV工具來實現。通過這種依賴關系,您可以節(jié)省任何更改,嵌入式tomcat將重新啟動。Spring Boot有一個開發(fā)工具(DevTools)模塊,它有助于提高開發(fā)人員的生產力。Java開發(fā)人員面臨的一個主要挑戰(zhàn)是將文件更改自動部署到服務器并自動重啟服務器。開發(fā)人員可以重新加載Spring Boot上的更改,而無需重新啟動服務器。這將消除每次手動部署更改的需要。Spring Boot在發(fā)布它的第一個版本時沒有這個功能。這是開發(fā)人員最需要的功能。DevTools模塊完全滿足開發(fā)人員的需求。該模塊將在生產環(huán)境中被禁用。它還提供H2數據庫控制臺以更好地測試應用程序。


514.常見的系統架構風格有哪些?各有什么優(yōu)缺點?

1、單體架構

單體架構也稱之為單體系統或者是單體應用。就是一種把系統中所有的功能、模塊耦合在一個應用中的架構方式。

單體架構特點:打包成一個獨立的單元(導成一個唯一的jar包或者是war包),會一個進程的方式來運行。

單體架構的優(yōu)點、缺點

優(yōu)點:

項目易于管理

部署簡單

缺點:

測試成本高

可伸縮性差

可靠性差

迭代困難

跨語言程度差

團隊協作難

2、MVC架構

MVC架構特點:

MVC是模型(Model)、視圖(View)、控制器(Controller)3個單詞的縮寫。 下面我們從這3個方面來講解MVC中的三個要素。

Model是指數據模型,是對客觀事物的抽象。 如一篇博客文章,我們可能會以一個Post類來表示,那么,這個Post類就是數據對象。 同時,博客文章還有一些業(yè)務邏輯,如發(fā)布、回收、評論等,這一般表現為類的方法,這也是model的內容和范疇。 對于Model,主要是數據、業(yè)務邏輯和業(yè)務規(guī)則。相對而言,這是MVC中比較穩(wěn)定的部分,一般成品后不會改變。 開發(fā)初期的最重要任務,主要也是實現Model的部分。這一部分寫得好,后面就可以改得少,開發(fā)起來就快。

View是指視圖,也就是呈現給用戶的一個界面,是model的具體表現形式,也是收集用戶輸入的地方。 如你在某個博客上看到的某一篇文章,就是某個Post類的表現形式。 View的目的在于提供與用戶交互的界面。換句話說,對于用戶而言,只有View是可見的、可操作的。 事實上也是如此,你不會讓用戶看到Model,更不會讓他直接操作Model。 你只會讓用戶看到你想讓他看的內容。 這就是View要做的事,他往往是MVC中變化頻繁的部分,也是客戶經常要求改來改去的地方。 今天你可能會以一種形式來展示你的博文,明天可能就變成別的表現形式了。

Contorller指的是控制器,主要負責與model和view打交道。 換句話說,model和view之間一般不直接打交道,他們老死不相往來。view中不會對model作任何操作, model不會輸出任何用于表現的東西,如HTML代碼等。這倆甩手不干了,那總得有人來干吧,只能Controller上了。 Contorller用于決定使用哪些Model,對Model執(zhí)行什么操作,為視圖準備哪些數據,是MVC中溝通的橋梁。

MVC架構優(yōu)缺點

優(yōu)點:

各施其職,互不干涉。

在MVC模式中,三個層各施其職,所以如果一旦哪一層的需求發(fā)生了變化,就只需要更改相應的層中的代碼而不會影響到其它層中的代碼。

有利于開發(fā)中的分工。

在MVC模式中,由于按層把系統分開,那么就能更好的實現開發(fā)中的分工。網頁設計人員可以進行開發(fā)視圖層中的JSP,對業(yè)務熟悉的開發(fā)人員可開發(fā)業(yè)務層,而其它開發(fā)人員可開發(fā)控制層。

有利于組件的重用。

分層后更有利于組件的重用。如控制層可獨立成一個能用的組件,視圖層也可做成通用的操作界面。

缺點:

增加了系統結構和實現的復雜性。

視圖與控制器間的過于緊密的連接。

視圖對模型數據的低效率訪問。

3、面向服務架構(SOA)

面向服務的架構(SOA)是一個組件模型,它將應用程序拆分成不同功能單元(稱為服務)通過這些服務之間定義良好的接口和契約聯系起來。接口是采用中立的方式進行定義的,它應該獨立于實現服務的硬件平臺、操作系統和編程語言。這使得構建在各種各樣的系統中的服務可以以一種統一和通用的方式進行交互。

面向服務架構特點:

系統是由多個服務構成

每個服務可以單獨獨立部署

每個服務之間是松耦合的。服務內部是高內聚的,外部是低耦合的。高內聚就是每個服務只關注完成一個功能。

服務的優(yōu)點、缺點

優(yōu)點:

測試容易

可伸縮性強

可靠性強

跨語言程度會更加靈活

團隊協作容易

系統迭代容易

缺點:

運維成本過高,部署數量較多

接口兼容多版本

分布式系統的復雜性

分布式事務

515.什么是AKF拆分原則?

業(yè)界對于可擴展的系統架構設計有一個樸素的理念,就是:通過加機器就可以解決容量和可用性問題。(如果一臺不行那就兩臺)。

我是個段子:(世界上沒有什么事是一頓燒烤不能解決的。如果有,那就兩頓。)

這一理念在“云計算”概念瘋狂流行的今天,得到了廣泛的認可!對于一個規(guī)模迅速增長的系統而言,容量和性能問題當然是首當其沖的。但是隨著時間的向前,系統規(guī)模的增長,除了面對性能與容量的問題外,還需要面對功能與模塊數量上的增長帶來的系統復雜性問題以及業(yè)務的變化帶來的提供差異化服務問題。而許多系統,在架構設計時并未充分考慮到這些問題,導致系統的重構成為常態(tài),從而影響業(yè)務交付能力,還浪費人力財力!對此,《可擴展的藝術》一書提出了一個更加系統的可擴展模型——?AKF可擴展立方?(Scalability Cube) 。這個立方體中沿著三個坐標軸設置分別為:X、Y、Z。

Y軸擴展會將龐大的整體應用拆分為多個服務。每個服務實現一組相關的功能,如訂單管理、客戶管理等。在工程上常見的方案是?服務化架構(SOA)?。比如對于一個電子商務平臺,我們可以拆分成不同的服務

X軸擴展與我們前面樸素理念是一致的,通過絕對平等地復制服務與數據,以解決容量和可用性的問題。其實就是將微服務運行多個實例,做集群加負載均衡的模式。

Z軸擴展通常是指基于請求者或用戶獨特的需求,進行系統劃分,并使得劃分出來的子系統是相互隔離但又是完整的。以生產汽車的工廠來舉例:福特公司為了發(fā)展在中國的業(yè)務,或者利用中國的廉價勞動力,在中國建立一個完整的子工廠,與美國工廠一樣,負責完整的汽車生產。這就是一種Z軸擴展。

516.什么是Spring Cloud?

Spring Cloud是一個微服務框架,相比Dubbo等RPC框架,?Spring Cloud提供的全套的分布式系統解決方案。

Spring Cloud對微服務基礎框架Netflix的多個開源組件進行了封裝,同時又實現了和云端平臺以及和Spring Boot開發(fā)框架的集成。

Spring Cloud為微服務架構開發(fā)涉及的配置管理,服務治理,熔斷機制,智能路由,微代理,控制總線,一次性token,全局一致性鎖,leader選舉,分布式session,集群狀態(tài)管理等操作提供了一種簡單的開發(fā)方式。

Spring Cloud 為開發(fā)者提供了快速構建分布式系統的工具,開發(fā)者可以快速的啟動服務或構建應用、同時能夠快速和云平臺資源進行對接

517.Spring Cloud與Dubbo的區(qū)別是什么?

518.什么是Eureka注冊中心?

Eureka是Netflix開發(fā)的服務發(fā)現組件,本身是一個基于REST的服務。Spring Cloud將它集成在其子項目spring-cloud-netflix中,以實現Spring Cloud的服務注冊于發(fā)現,同時還提供了負載均衡、故障轉移等能力。

519.簡單談一下Eureka中的三種角色分別是什么?

1、Eureka Server

通過Register、Get、Renew等接口提供服務的注冊和發(fā)現。

2、Application Service (Service Provider)

服務提供方

把自身的服務實例注冊到Eureka Server中

3、Application Client (Service Consumer)

服務調用方

通過Eureka Server 獲取服務列表,消費服務。

520.什么是Ribbon

1.Ribbon 是一個基于Http和TCP的客服端負載均衡工具,它是基于Netflix Ribbon實現的。

2.它不像spring cloud服務注冊中心、配置中心、API網關那樣獨立部署,但是它幾乎存在于每個spring cloud 微服務中。包括feign提供的聲明式服務調用也是基于該Ribbon實現的。

3.ribbon默認提供很多種負載均衡算法,例如 輪詢、隨機 等等。甚至包含自定義的負載均衡算法。

521.集中式與進程內負載均衡的區(qū)別

目前業(yè)界主流的負載均衡方案可分成兩類:

第一類:集中式負載均衡, 即在consumer和provider之間使用獨立的負載均衡設施(可以是硬件,如F5, 也可以是軟件,如nginx), 由該設施負責把 訪問請求 通過某種策略轉發(fā)至provider;

第二類:進程內負載均衡,將負載均衡邏輯集成到consumer,consumer從服務注冊中心獲知有哪些地址可用,然后自己再從這些地址中選擇出一個合適的provider。

Ribbon就屬于后者,它只是一個類庫,集成于consumer進程,consumer通過它來獲取到provider的地址。

522.Ribbon的常見負載均衡策略有哪些?

id策略名稱策略對應的類名實現原理1輪詢策略(默認)RoundRobinRule輪詢策略表示每次都順序取下一個provider,比如一共有5個provider,第1次取第1個,第2次取第2個,第3次取第3個,以此類推2權重輪詢策略WeightedResponseTimeRule1.根據每個provider的響應時間分配一個權重,響應時間越長,權重越小,被選中的可能性越低。 2.原理:一開始為輪詢策略,并開啟一個計時器,每30秒收集一次每個provider的平均響應時間,當信息足夠時,給每個provider附上一個權重,并按權重隨機選擇provider,高權越重的provider會被高概率選中。3隨機策略RandomRule從provider列表中隨機選擇一個provider4最少并發(fā)數策略BestAvailableRule選擇正在請求中的并發(fā)數最小的provider,除非這個provider在熔斷中。5在“選定的負載均衡策略”基礎上進行重試機制RetryRule1.“選定的負載均衡策略”這個策略是輪詢策略RoundRobinRule 2.該重試策略先設定一個閾值時間段,如果在這個閾值時間段內當選擇provider不成功,則一直嘗試采用“選定的負載均衡策略:輪詢策略”最后選擇一個可用的provider6可用性敏感策略AvailabilityFilteringRule過濾性能差的provider,有2種: 第一種:過濾掉在eureka中處于一直連接失敗provider 第二種:過濾掉高并發(fā)的provider7區(qū)域敏感性策略ZoneAvoidanceRule1.以一個區(qū)域為單位考察可用性,對于不可用的區(qū)域整個丟棄,從剩下區(qū)域中選可用的provider 2.如果這個ip區(qū)域內有一個或多個實例不可達或響應變慢,都會降低該ip區(qū)域內其他ip被選中的權重。

523.簡單說說什么是Feign?

Feign是一種聲明式、模板化的HTTP客戶端技術(僅在consumer中使用)。

524.什么是聲明式,有什么作用,解決什么問題?

聲明式調用就像調用本地方法一樣調用遠程方法;無感知遠程http請求。

1、Spring Cloud的聲明式調用, 可以做到使用 HTTP請求遠程服務時能就像調用本地方法一樣的體驗,開發(fā)者完全感知不到這是遠程方法,更感知不到這是個HTTP請求。

2、它像Dubbo一樣,consumer直接調用接口方法調用provider,而不需要通過常規(guī)的Http Client構造請求再解析返回數據。

3、它解決了讓開發(fā)者調用遠程接口就跟調用本地方法一樣,無需關注與遠程的交互細節(jié),更無需關注分布式環(huán)境開發(fā)。

525.什么是服務的災難性的雪崩效應?

在微服務架構中,一個請求需要調用多個服務是非常常見的。如客戶端訪問A服務,而A服務需要調用B服務,B服務需要調用C服務,由于網絡原因或者自身的原因,如果B服務或者C服務不能及時響應,A服務將處于阻塞狀態(tài),直到B服務C服務響應。此時若有大量的請求涌入,容器的線程資源會被消耗完畢,導致服務癱瘓。服務與服務之間的依賴性,故障會傳播,造成連鎖反應,會對整個微服務系統造成災難性的嚴重后果,這就是服務故障的“雪崩”效應

526.如何解決災難性雪崩效應?

降級

超時降級、資源不足時(線程或信號量)降級,降級后可以配合降級接口返回托底數據。實現一個fallback方法, 當請求后端服務出現異常的時候, 可以使用fallback方法返回的值.

隔離(線程池隔離和信號量隔離)

限制調用分布式服務的資源使用,某一個調用的服務出現問題不會影響其他服務調用。

熔斷

當失敗率(如因網絡故障/超時造成的失敗率高)達到閥值自動觸發(fā)降級,熔斷器觸發(fā)的快速失敗會進行快速恢復。

緩存

提供了請求緩存。

請求合并

提供請求合并。

527.線程池隔離和信號量隔離的區(qū)別

528.請回答微服務架構的六種常用設計模式是什么?

答:如下這六種
代理設計模式
聚合設計模式
鏈條設計模式
聚合鏈條設計模式
數據共享設計模式
異步消息設計模式

529.什么是網關服務?

答:網關服務,通常是外部訪問服務的唯一接口,訪問內部的所有服務都必須先經過網關服務。網關服務的主要功能是消息解析過濾,路由,轉發(fā)等。

530.網關服務中,路由器的4種路由規(guī)則方法是什么?

答:采用URL指定路由方式

采用服務名稱指定路由方式

路由的排除方法

路由的添加前綴方法

531.為什么要使用spring cloud config 配置中心?它解決了什么問題?

?

532.什么是Spring Cloud Bus

533.消息驅動Stream解決了什么問題?

534.為什么要使用微服務跟蹤?它解決了什么問題?

535.什么是ELK(ElasticSearch, Logstash, Kibana)

ELK是三個工具的集合,Elasticsearch + Logstash + Kibana,這三個工具組合形成了一套實用、易用的監(jiān)控架構,很多公司利用它來搭建可視化的海量日志分析平臺。

1. ElasticSearch

ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是當前流行的企業(yè)級搜索引擎。設計用于云計算中,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便。

2. Logstash

Logstash是一個用于管理日志和事件的工具,你可以用它去收集日志、轉換日志、解析日志并將他們作為數據提供給其它模塊調用,例如搜索、存儲等。

3. Kibana

Kibana是一個優(yōu)秀的前端日志展示框架,它可以非常詳細的將日志轉化為各種圖表,為用戶提供強大的數據可視化支持。

536.為什么要用ELK,它解決了什么問題?

537.什么是分布式跟蹤?:?Zipki?

數據庫

538.下列屬于關系型數據庫的是()(選擇兩項)

A.Oracle

B.MySql

C.IMS

D.MongoDB

答案:AB分析: IMS 是IP Mulitimedia Subsystem的縮寫,是IP多媒體系統 MongoDB分布式文檔存儲數據庫

539.請列出Java常見的開源數據連接池,并對參數做出簡單的說明

答:在Java中開源的常用的數據庫連接池有以下幾種 :

(1)DBCP

DBCP是一個依賴Jakarta commons-pool對象池機制的數據庫連接池.DBCP可以直接的在應用程序中使用,Tomcat的數據源使用的就是DBCP。

(2)c3p0

c3p0是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發(fā)布,包括了實現jdbc3和jdbc2擴展規(guī)范說明的Connection 和Statement 池的DataSources 對象。

(3)Druid

阿里出品,淘寶和支付寶專用數據庫連接池,但它不僅僅是一個數據庫連接池,它還包含一個ProxyDriver,一系列內置的JDBC組件庫,一個SQL Parser。支持所有JDBC兼容的數據庫,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。

540.儲蓄所有多個儲戶,儲戶在多個儲戶所存取款,儲蓄所與儲戶之間是()

A.一對一的聯系

B.多對一的聯系

C.一對多的聯系

D.多對多的聯系

答案:D

541.視圖是一個“虛表”,視圖的構造基于()

A.基本表或視圖

B.視圖

C.數據字典

D.基本表

答案:A

542.設有關系R(A,B,C,D)及其上的函數相關性集合F={B→A,BC→D},那么關系R最高是()

A.第一范式的

B.第二范式的

C.第三范式的

D.BCNF范式的

答案:A

分析: 根據數據庫三大范式的依賴性要求,從B,BC函數確定A和D這一點上,明顯看出B,BC都有可能是主碼. 若B是主碼的話,仔細看會發(fā)現,F中竟然沒有誰去函數確定C,這顯然是說不通的,(因為C至少會被B這個主碼函數確定); 若BC是主碼,那么F中存在非主屬性對候選碼的部分依賴,不滿足第二范式的要求,故為第一范式.

543.什么是DAO模式?

答:DAO(DataAccess Object)顧名思義是一個為數據庫或其他持久化機制提供了抽象接口的對象,在不暴露數據庫實現細節(jié)的前提下提供了各種數據操作。為了建立一個健壯的Java EE應用,應該將所有對數據源的訪問操作進行抽象化后封裝在一個公共API中。用程序設計語言來說,就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。在這個應用程序中,當需要和數據源進行交互的時候則使用這個接口,并且編寫一個單獨的類來實現這個接口,在邏輯上該類對應一個特定的數據存儲。DAO模式實際上包含了兩個模式,一是Data Accessor(數據訪問器),二是Data Object(數據對象),前者要解決如何訪問數據的問題,而后者要解決的是如何用對象封裝數據。

544.數據庫MySQL,Oracle,SqlServer分頁時用的語句

Mysql:使用limit關鍵字

Select * from 表名 where 條件 limit 開始位置,結束位置。通過動態(tài)的改變開始和結束位置的值來實現分頁。

Oracle:通過rownum來實現

select * from ( select rownum rn,t.* from addressbook where rownum<= 20 ) where rownum > 10

Sqlserver:

select top 20 * from addressbook where id not in (select top 10 id from addressbook)

545.Oracle完成分頁功能的三層子查詢語句及其含義?

如:select * from (select t.*,rownum r from (select * from A) t where rownum < 10) where r >5

select * from A:要查詢的數據

select t.*,rownum r from (select * from A) t where rownum < 10:取前10行

select * from (select t.*,rownum r from (select * from A) t where rownum < 10) where r >5:取5-10行

546.問SQL怎么優(yōu)化執(zhí)行效率更高

答: 1. SQL優(yōu)化的原則是:將一次操作需要讀取的BLOCK數減到最低,即在最短的時間達到最大的數據吞吐量。

調整不良SQL通??梢詮囊韵聨c切入:

1) 檢查不良的SQL,考慮其寫法是否還有可優(yōu)化內容

2) 檢查子查詢 考慮SQL子查詢是否可以用簡單連接的方式進行重新書寫

3) 檢查優(yōu)化索引的使用

4) 考慮數據庫的優(yōu)化器

2. 避免出現SELECT * FROM table 語句,要明確查出的字段。

3. 在一個SQL語句中,如果一個where條件過濾的數據庫記錄越多,定位越準確,則該where條件越應該前移。

4. 查詢時盡可能使用索引覆蓋。即對SELECT的字段建立復合索引,這樣查詢時只進行索引掃描,不讀取數據塊。

5. 在判斷有無符合條件的記錄時建議不要用SELECT COUNT (*)和select top 1 語句。

6. 使用內層限定原則,在拼寫SQL語句時,將查詢條件分解、分類,并盡量在SQL語句的最里層進行限定,以減少數據的處理量。

7. 應絕對避免在order by子句中使用表達式。

9. 小心使用 IN 和 OR,需要注意In集合中的數據量。建議集合中的數據不超過200個。

10. <> 用 < 、 > 代替,>用>=代替, < 用< =代替,這樣可以有效的利用索引。

11. 在查詢時盡量減少對多余數據的讀取包括多余的列與多余的行。

12. 對于復合索引要注意,例如在建立復合索引時列的順序是F1,F2,F3,則在where或order by子句中這些字段出現的順序要與建立索引時的字段順序一致,且必須包含第一列。只能是F1或F1,F2或F1,F2,F3。否則不會用到該索引。

547.談談數據庫去空格的情況

一、表中字符串帶空格的原因

1、空格就是空格。

2、控制符 顯示為 空格。

二、解決方法

第一種情況,去空格的處理的比較簡單,Replace(column,' ','') 就可以解決。
第二種情況,解決方法就比較麻煩點:需要先查出相應的ASCII碼,再用Replace(column,char(ascii碼),'')解決,以下舉個栗子:
CREATE TABLE #temp
(NAME NVARCHAR(50))
INSERT INTO #temp SELECT '明天就是國慶了'+CHAR(10) --換行符
SELECT * FROM #temp --末尾顯示為空格
SELECT REPLACE(NAME,' ','') FROM #temp --去不掉這個空格
SELECT REPLACE(NAME,CHAR(10),'') FROM #temp --去掉空格
SELECT REPLACE(NAME,CHAR(ASCII(RIGHT(NAME,1))),'') FROM #temp --在不知道是最后一位是什么字符導致空格的情況下,先轉ASCII碼,在替換
DROP TABLE #temp
----下面是查詢結果:
--'明天就是國慶了 '
--'明天就是國慶了 '
--'明天就是國慶了'
--'明天就是國慶了'

548.根據你以往的經驗簡單敘述一下MYSQL的優(yōu)化

答:
1.數據庫的設計
盡量把數據庫設計的更小的占磁盤空間.
1).盡可能使用更小的整數類型.(mediumint就比int更合適).
2).盡可能的定義字段為not null,除非這個字段需要null.
3).如果沒有用到變長字段的話比如varchar,那就采用固定大小的紀錄格式比如char.
4).表的主索引應該盡可能的短.這樣的話每條紀錄都有名字標志且更高效.
5).只創(chuàng)建確實需要的索引。索引有利于檢索記錄,但是不利于快速保存記錄。如果總是要在表的組合字段上做搜索,那么就在這些字段上創(chuàng)建索引。索引的第一部分必須是最常使用的字段.如果總是需要用到很多字段,首先就應該多復制這些字段,使索引更好的壓縮。
6).所有數據都得在保存到數據庫前進行處理。
7).所有字段都得有默認值。
8).在某些情況下,把一個頻繁掃描的表分成兩個速度會快好多。在對動態(tài)格式表掃描以取得相關記錄時,它可能使用更小的靜態(tài)格式表的情況下更是如此。
2.系統的用途
1).盡量使用長連接.
2).explain 復雜的SQL語句。
3).如果兩個關聯表要做比較話,做比較的字段必須類型和長度都一致.
4).LIMIT語句盡量要跟order by或者 distinct.這樣可以避免做一次full table scan.
5).如果想要清空表的所有記錄,建議用truncate table tablename而不是delete from tablename.
6).能使用STORE PROCEDURE 或者 USER FUNCTION的時候.
7).在一條insert語句中采用多重紀錄插入格式.而且使用load data infile來導入大量數據,這比單純的indert快好多.
8).經常OPTIMIZE TABLE 來整理碎片.
9).還有就是date 類型的數據如果頻繁要做比較的話盡量保存在unsigned int 類型比較快。
3.系統的瓶頸
1).磁盤搜索.
并行搜索,把數據分開存放到多個磁盤中,這樣能加快搜索時間.
2).磁盤讀寫(IO)
可以從多個媒介中并行的讀取數據。
3).CPU周期
數據存放在主內存中.這樣就得增加CPU的個數來處理這些數據。
4).內存帶寬
當CPU要將更多的數據存放到CPU的緩存中來的話,內存的帶寬就成了瓶頸.

549.以Oracle11R為例簡述數據庫集群部署

命令行工具
–crsctl管理集群相關的操作:
-啟動和關閉Oracle集群
-啟用和禁用Oracle集群后臺進程
-注冊集群資源
-srvctl 管理Oracle 資源相關操作
-啟動和關閉數據庫實例和服務
在Oracle Grid安裝的home路徑下的命令行工具crsctl和srvctl用來管理Oracle集群。使用crsctl可以監(jiān)控和管理任何集群節(jié)點的集群組件和資源。srvctl工具提供了類似的功能,來監(jiān)控和管理Oracle相關的資源,例如數據庫實例和數據庫服務。crsctl命令只能是集群管理者來運行,srvctl命令可以是其他用戶,例如數據庫管理員來使用。

550.說一下數據庫的存儲過程?

一、存儲過程與函數的區(qū)別:

1.一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。

2.對于存儲過程來說可以返回參數(output),而函數只能返回值或者表對象。

3.存儲過程一般是作為一個獨立的部分來執(zhí)行,而函數可以作為查詢語句的一個部分來調用,由于函數可以返回一個表對象,因此它可以在查詢語句中位于FROM關鍵字的后面。

二、存儲過程的優(yōu)點:

1.執(zhí)行速度更快 – 在數據庫中保存的存儲過程語句都是編譯過的

2.允許模塊化程序設計 – 類似方法的復用

3.提高系統安全性 – 防止SQL注入

4.減少網絡流通量 – 只要傳輸存儲過程的名稱

系統存儲過程一般以sp開頭,用戶自定義的存儲過程一般以usp開頭

551.數據庫創(chuàng)建索引的缺點?

缺點:

第一,創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數據量的增加而增加。

第二,索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。

第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態(tài)的維護,這樣就降低了數據的維護速度。

552.有兩張表;請用SQL查詢,所有的客戶訂單日期最新的前五條訂單記錄。(分別注明MySQL. Oracle寫法)

客戶信息表(c CUSTOM)有以下字段:

id、name、mobile

客戶訂單表(C_ORDER)有以下字段:

id、custom_id、commodity、count、order _date

Mysql:

Select * from c_order order by order_date desc limit 0,5;

Oracle:

Select o.*,rownum n

from c_order order by order_date desc where n<6;

553.關于HQL與SQL,以下哪些說法正確?()

A.HQL與SQL沒什么差別

B.HQL面向對象,而SQL操縱關系數據庫

C.在 HQL 與 SQL 中,都包含 select,insert,update,delete 語句D.HQL僅用于査詢數據,不支持insert,update和delete語句

答案:BC

554.下面是學生表(student)的結構說明

字段名稱字段解釋字段類型字段長度約束s_id學號字符10PKs_name學生姓名字符50Not nulls_age學生年齡數值3Not nulls-sex學生性別字符(男:1女:0)1Not null

下面是教師表(Teacher )的結構說明

字段名稱字段解釋字段類型字段長度約束t_id教師編號字符10PKt_name教師名字字符50Not null

下面是課程表(Course)的結構說明

字段名稱字段解釋字段類型字段長度約束c_id課程編號字符10PKc_name課程名字字符50Not nullt_id教師編號字符10Not null

下面是成績表(SC)的結構說明

字段名稱字段解釋字段類型字段長度約束s_id學號字符10PKc_id課程編號字符10Not nullscore成績數值3Not null

1、查詢“001”課程比“002”課程成績高的所有學生的學號;

select a.s_id from (select s_id,score from SC where C_ID='001') a,(select s_id,score
from SC where C_ID='002') b
where a.score>b.score and a.s_id=b.s_id;

2、查詢平均成績大于60分的同學的學號和平均成績;

select S_ID,avg(score)
from sc
group by S_ID having avg(score) >60;

3、查詢所有同學的學號、姓名、選課數、總成績;

select Student.S_ID,Student.Sname,count(SC.C_ID),sum(score)
from Student left Outer join SC on Student.S_ID=SC.S_ID
group by Student.S_ID,Sname

4、查詢姓“李”的老師的個數;

select count(distinct(Tname))
from Teacher
where Tname like '李%';

5、查詢沒學過“葉平”老師課的同學的學號、姓名;

select Student.S_ID,Student.Sname
from Student
where S_ID not in (select distinct( SC.S_ID) from SC,Course,Teacher where SC.C_ID=Course.C_ID and Teacher.T#=Course.T# and Teacher.Tname='葉平');

6、查詢學過“001”并且也學過編號“002”課程的同學的學號、姓名;

elect Student.S_ID,Student.Sname from Student,SC where Student.S_ID=SC.S_ID and SC.C_ID='001'and exists( Select * from SC as SC_2 where SC_2.S_ID=SC.S_ID and SC_2.C_ID='002');

7、查詢學過“葉平”老師所教的所有課的同學的學號、姓名;

select S_ID,Sname
from Student
where S_ID in (select S_ID from SC ,Course ,Teacher where SC.C_ID=Course.C_ID and Teacher.T#=Course.T# and Teacher.Tname='葉平' group by S_ID having count(SC.C_ID)=(select count(C_ID) from Course,Teacher where Teacher.T#=Course.T# and Tname='葉平'));

8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名;

Select S_ID,Sname from (select Student.S_ID,Student.Sname,score ,(select score from SC SC_2 where SC_2.S_ID=Student.S_ID and SC_2.C_ID='002') score2
from Student,SC where Student.S_ID=SC.S_ID and C_ID='001') S_2 where score2 < score;

9、查詢所有課程成績小于60分的同學的學號、姓名;

select S_ID,Sname
from Student
where S_ID not in (select S.S_ID from Student AS S,SC where S.S_ID=SC.S_ID and score>60);

10、查詢沒有學全所有課的同學的學號、姓名;

select Student.S_ID,Student.Sname
from Student,SC
where Student.S_ID=SC.S_ID group by Student.S_ID,Student.Sname having count(C_ID) <(select count(C_ID) from Course);

11、查詢至少有一門課與學號為“1001”的同學所學相同的同學的學號和姓名;

select distinct S_ID,Sname from Student,SC where?Student.S_ID=SC.S_ID and SC.C_ID in (select C_ID from SC where S_ID='1001');

12、查詢至少學過學號為“001”同學所有一門課的其他同學學號和姓名;

select distinct SC.S_ID,Sname
from Student,SC
where Student.S_ID=SC.S_ID and C_ID in (select C_ID from SC where S_ID='001');

555.為管理崗位業(yè)務培訓信息,有如下3個表:

S(S#,SN,SD,SA),其中S#,SN,SD,SA分別代表學號、學員姓名、所屬單位、學員年齡。 C (C#,CN ),其中C#,CN分別代表課程編號、課程名稱
SC(S#,C#,G),其中S#,C#,G分別代表學號、所選修的課程編號、學習成績
請使用2種標準SQL語句査洵選修課程名稱為“稅收基礎”的學員學號和姓名,并說明其優(yōu)缺點 。

SQL92標準:

SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM C,SC
WHERE C.[C#]=SC.[C#]
AND CN=N'稅收基礎')

SQL99標準:

elect s.s#,s.sn from s
join sc on s.s#=sc.s#
join c on sc.c#=c.c#
where c.cn='稅收基礎'

優(yōu)點:

SQL99將連接條件和過濾條件分開,顯得代碼清晰。
SQL92書寫簡單易于理解。

缺點:

SQL92連接條件和過濾條件都寫在一起,不利于查看。
SQL99書寫相對麻煩不易于理解。

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




大數據面試題(九)的評論 (共 條)

分享到微博請遵守國家法律
鲁甸县| 家居| 韶山市| 六盘水市| 锦屏县| 九台市| 常山县| 肥东县| 灵川县| 老河口市| 黄山市| 大埔县| 滨州市| 盐城市| 依兰县| 大余县| 高邑县| 启东市| 深泽县| 定远县| 湘阴县| 晋州市| 溧阳市| 山西省| 元朗区| 绥宁县| 锦屏县| 巴林左旗| 台东县| 西华县| 石家庄市| 山阳县| 怀远县| 湖南省| 五大连池市| 上饶市| 罗平县| 盐边县| 台湾省| 三亚市| 大理市|