Spring,SpringMVC,MyBatis,Hibernate,Servlet的生命週期,jsp有哪些內建物件,Tomcat,Cookie和Session的作用以及區別,oracle,MYSQL等面試題總結

漫漫夏夜發表於2020-08-14

1、 什麼是Spring,談談你對Spring的理解

Spring是我們JAVA開發人員在搭建後臺時選用的一個輕量級的開源框架,Spring框架目前也是功能豐富,十分優秀企業級採用最多的一個框架。

Spring是一個IOC和AOP容器框架。它主要核心是:

(1).控制反轉(IOC):以前傳統的java開發模式中,當需要一個物件時我們,我們會自己使用new或者getInstance等直接或者間接呼叫構造方法建立一個物件,而在Spring開發模式中,Spring容器使用了工廠模式為我們建立了所需要的物件,我們使用時不需要自己去建立,直接呼叫Spring為我們提供的物件即可,這就是控制反轉的思想。

dao介面的實現不再是業務邏輯層呼叫工廠類去獲取,而是通過spring容器來自動的為我們的業務層設定Dao的實現類,這樣整個過程就反過來,以前是我們業務層主動去獲取dao,而現在是dao主動被設定到業務邏輯層中來了,這個也就是反轉控制的由來。

例項化一個衛生java物件有三種方式:使用類構造器,使用靜態工廠方法,使用例項工廠方法,當使用spring時我們就不需要關心通過何種方式例項化一個物件,spring通過控制反轉機制自動為我們例項化一個物件。

 (2).面向切面程式設計(AOP):在物件導向程式設計(OOP)思想中,將程式中的交叉業務邏輯(比如安全,日誌,事務)公共的部分,封裝成一個切面,然後注入到目標業務邏輯中去。這樣就不用每次拋異常都要手動記錄日誌。Spring的事務管理用到的就是AOP這樣也可以提高程式的內聚性。這樣的過程就是面向切面的思想。

(3).依賴注入(DI):Spring有三種注入方式:1,根據屬性注入也叫setter方法注入。2,根據構造方法注入。3,根據註解進行注入(推薦)。Spring使用Java Bean物件的Set方法或者帶引數的構造方法為我們在建立所需物件時將其屬性自動設定所需要的值的過程就是依賴注入的基本思想。

2、 說說SpringMVC框架的工作原理

SpringMVC框架介紹:

Spring MVC是Spring 框架提供的構建Web 應用程式的全功能MVC 模組。Spring MVC框架是高度可配置的,而且包含多種檢視技術,完全融合Spring框架,整體的模組化讓WEB程式的開發變得非常靈活便捷。

Spring MVC 分離了控制器、模型物件、分派器以及處理程式物件的角色,這種分離讓它們更容易進行定製。

Spring的MVC框架主要由DispatcherServlet、處理器對映、處理器(控制器)、檢視解析器、檢視組成。

SpringMVC執行原理:

1、客戶端請求提交到DispatcherServlet。

2、由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller。

3、DispatcherServlet將請求提交到Controller。

4、Controller呼叫業務邏輯處理後,返回ModelAndView物件。

5、DispatcherServlet查詢一個或多個ViewResoler檢視解析器,找到ModelAndView指定的檢視。

6、檢視負責將結果顯示到客戶端。

3、 談談對MyBatis框架的理解

一、Mybatis是什麼?

Mybatis是一個基於Java的持久層框架。這個持久層框架包括SQLMaps和DataAccessObjects(DAO)。

MyBatis 是支援定製化SQL、儲存過程以及高階對映的優秀的持久層框架。MyBatis避免了幾乎所有的JDBC程式碼和手工設定引數以及抽取結果集。MyBatis使用簡單的XML或註解來配置和對映基本體,將介面和Java的POJO(Plain Old Java Objects,普通的Java物件)對映成資料庫中的記錄。

二、Mybatis的整個的執行原理:

1、MyBatis應用程式根據XML配置檔案建立SqlSessionFactory。

2、SqlSessionFactory在根據配置,配置來源於兩個地方,一處是配置檔案一處是Java程式碼的註解,獲取一個SqlSession。

3、SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession例項直接執行對映的sql語句,完成對資料的增刪改查和事務提交等,用完之後關閉SqlSession。

三、MyBatis的優缺點

優點:

1、簡單易學mybatis本身就輕量而且簡單,沒有任何第三方依賴。

2、Mybatis實現了介面繫結,使用更加方便。Mybatis實現了DAO介面與xml對映檔案的繫結,自動為我們生成介面的具體實現,使用起來變得更加省事和方便。

3、靈活mybatis不會對應用程式或者資料庫的現有設計強加任何影響。sql寫在xml裡,便於統一管理和優化。

4、解除sql與程式程式碼的耦合通過提供DAO層,將業務邏輯和資料訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。sql和程式碼的分離,提高了可維護性。

5、提供對映標籤,支援物件與資料庫的orm欄位關係對映。

6、提供物件關係對映標籤,支援物件關係組建維護。

7、提供xml標籤,支援編寫動態sql。

缺點:

1、編寫SQL語句時工作量很大,尤其是欄位多、關聯表多時,更是如此。

2、SQL語句依賴於資料庫,導致資料庫移植性差,不能更換資料庫。

3、雖然簡化了資料繫結程式碼,但是整個底層資料庫查詢實際還是要自己寫的,工作量也比較大,而且不太容易適應快速資料庫修改。

4、二級快取機制不佳。

4、 講一下MyBatis的快取

MyBatis的快取分為一級快取和二級快取:

一級快取放在session裡面,預設就有。

二級快取放在它的名稱空間裡,預設是開啟的,

使用二級快取屬性類需要實現Serializable序列化介面(可用來儲存物件的狀態),可在它的對映檔案中配置

5、 Hibernate工作原理及為什麼要用它

Hibernate 簡介:

Hibernate是一個開源框架,它是物件關係對映的框架,它對JDBC做了輕量級的封裝,而我們Java程式設計師可以使用物件導向的思想來操縱資料庫。

Hibernate核心介面:

session:負責被持久化物件CRUD操作。

sessionFactory:負責初始化hibernate,建立session物件。

configuration:負責配置並啟動hibernate,建立SessionFactory。

Transaction:負責事物相關的操作。

Query和Criteria介面:負責執行各種資料庫查詢。

為什麼要用Hibernate:

1. 對JDBC訪問資料庫的程式碼做了封裝,大大簡化了資料訪問層繁瑣的重複性程式碼。

2. Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作。

3. Hibernate使用Java反射機制,而不是位元組碼增強程式來實現透明性。

4. Hibernate的效能非常好,因為它是個輕量級框架。對映的靈活性很出色。它支援各種關聯式資料庫,從一對一到多對多的各種複雜關係。

6、 簡述 Hibernate 和 JDBC 的優缺點

JDBC與Hibernate在效能上相比,JDBC靈活性有優勢。而Hibernate在易學性,易用性上有些優勢。當用到很多複雜的多表聯查和複雜的資料庫操作時,JDBC有優勢。

相同點:

◆兩者都是Java的資料庫操作中介軟體。

◆兩者對於資料庫進行直接操作的物件都不是執行緒安全的,都需要及時關閉。

◆兩者都可以對資料庫的更新操作進行顯式的事務處理。

不同點:

◆使用的SQL語言不同:JDBC使用的是基於關係型資料庫的標準SQL語言,Hibernate使用的是HQL(Hibernate query language)語言

◆操作的物件不同:JDBC操作的是資料,將資料通過SQL語句直接傳送到資料庫中執行,Hibernate操作的是持久化物件,由底層持久化物件的資料更新到資料庫中。

◆資料狀態不同:JDBC操作的資料是“瞬時”的,變數的值無法與資料庫中的值保持一致,而Hibernate操作的資料是可持久的,即持久化物件的資料屬性的值是可以跟資料庫中的值保持一致的。

7、 MyBatis與Hibernate有什麼不同?

Hibernate與Mybatis對比總結:

一、兩者相同點:

1、都遮蔽了JDBC的底層訪問細節,使用我們不用與JDBC打交道,就可以訪問資料。

2、都是通過SessionFactoryBuider由XML配置檔案生成SessionFactory,然後由SessionFactory生成Session,最後由Session來開啟執行事務和SQL語句。其中SessionFactoryBuider,SessionFactory,Session的生命週期都是差不多的。Hibernate和MyBatis都支援JDBC和JTA事務處理。

二、不同點:

1、Hibernate是全自動的,而Mybatis是半自動的。

Hibernate完全可以通過物件關係模型實現對資料庫的操作,擁有完整的JavaBean物件與資料庫的對映結構來自動生成sql。而Mybatis僅有基本的欄位對映,物件資料以及物件實際關係仍然需要通過手寫sql來實現和管理。

2、Hibernate資料庫移植性遠大於Mybatis。

Hibernate通過它強大的對映結構和HQL語言,大大降低了物件與資料庫(Oracle、MySQL等)的耦合性,而Mybatis由於需要手寫sql,因此與資料庫的耦合性直接取決於程式設計師寫sql的方法,如果sql不具通用性而用了很多某資料庫特性的sql語句的話,移植性也會隨之降低很多,成本很高。

3、Hibernate擁有完整的日誌系統,Mybatis則欠缺一些。

Hibernate日誌系統非常健全,涉及廣泛,包括:sql記錄、關係異常、優化警告、快取提示、髒資料警告等;而Mybatis則除了基本記錄功能外,其它功能都薄弱很多。

4、sql直接優化上,Mybatis要比Hibernate方便很多。

由於Mybatis的sql都是寫在xml裡,因此優化sql比Hibernate方便很多。而Hibernate的sql很多都是自動生成的,無法直接維護sql;雖有HQL,但功能還是不及sql強大,也就是說HQL是有侷限的;Hibernate雖然也支援原生sql,但開發模式上卻與orm不同,需要轉換思維,因此使用上不是非常方便。總之寫sql的靈活度上Hibernate不及Mybatis。

8、 介紹一下Hibernate的快取。

一、Hibernate快取的作用:

Hibernate是一個持久層框架,經常訪問物理資料庫,為了降低應用程式對物理資料來源訪問的頻次,從而提高應用程式的執行效能。快取內的資料是對物理資料來源中的資料的複製,應用程式在執行時從快取讀寫資料,在特定的時刻或事件會同步快取和物理資料來源的資料

二、Hibernate快取分類:

Hibernate快取包括兩大類:Hibernate一級快取和Hibernate二級快取。

Hibernate一級快取又稱為“Session的快取”,它是內建的,意思就是說,只要你使用hibernate就必須使用session快取。由於Session物件的生命週期通常對應一個資料庫事務或者一個應用事務,因此它的快取是事務範圍的快取。在第一級快取中,持久化類的每個例項都具有唯一的OID。

Hibernate二級快取又稱為“SessionFactory的快取”,由於SessionFactory物件的生命週期和應用程式的整個過程對應,因此Hibernate二級快取是程式範圍或者叢集範圍的快取,有可能出現併發問題,因此需要採用適當的併發訪問策略,該策略為被快取的資料提供了事務隔離級別。第二級快取是可選的,是一個可配置的外掛,在預設情況下,SessionFactory不會啟用這個外掛。Hibernate內建支援的二級快取元件重用的有:EHCache,OSCache等。如果想用應用二級快取,需要在hibernate.cfg.xml檔案中進行配置。

9、 說一說Servlet的生命週期?

servlet 有良好的生命週期的定義,包括載入和例項化、初始化、處理請求以及服務結束。

這個生命週期由javax.servlet.Servlet介面的init,service和destroy方法表達。

Servlet被伺服器例項化後,容器執行其init方法,請求到達時執行其service方法,service方法自動派遣執行與請求對應的doXXX方法(doGet,doPost)等,

當伺服器決定將例項銷燬的時候呼叫其destroy方法。

web容器載入servlet,生命週期開始。通過呼叫servlet的init()方法進行servlet的初始化。通過呼叫service()方法實現,根據請求的不同呼叫不同的do***()方法。

結束服務,web容器呼叫servlet的destroy()方法。

10、 jsp有哪些內建物件?作用分別是什麼?

JSP共有以下9個內建的物件:

request  :使用者端請求,此請求會包含來自GET/POST請求的引數。

response  :網頁傳回使用者端的回應

pageContext  :網頁的屬性是在這裡管理

session :與請求有關的會話期

application :servlet 正在執行的內容

out :用來傳送回應的輸出

config:servlet的構架部件

page:JSP網頁本身

exception:針對錯誤網頁,未捕捉的例外

11、 JSP和Servlet有哪些相同點和不同點,他們之間的聯絡是什麼?

JSP和Servlet的區別:

1、Jsp是Servlet的一種簡化,使用Jsp只需要完成程式設計師需要輸出到客戶端的內容。

Jsp經編譯後就變成了Servlet.(JSP的本質就是Servlet,JVM只能識別java的類,不能識別JSP的程式碼,Web容器將JSP的程式碼編譯成JVM能夠識別的java類)。

2、Jsp更擅長表現於頁面顯示,Servlet更擅長於邏輯控制。

3、Servlet是個完整的Java類,這個類的Service方法用於生成對客戶端的響應。

聯絡:JSP是Servlet技術的擴充套件,本質上就是Servlet的簡易方式。JSP編譯後是“類servlet”。

總結:Servlet和JSP最主要的不同點在於:Servlet的應用邏輯是在Java檔案中,並且完全從表示層中的HTML裡分離開來。

而JSP的情況是Java和HTML可以組合成一個副檔名為.jsp的檔案。

JSP側重於檢視,Servlet主要用於控制邏輯。

12、 HTTP請求中GET與POST方式的區別。

一、本質區別:Get是向伺服器發索取資料的一種請求,而Post是向伺服器提交資料的一種請求。

二、安全性:get方式安全性低,post方式較安全。但是post方式執行效率要比get方式差一些。

三、機制:get是把引數資料佇列加到提交表單的action屬性所指的URL的後面,在URl中,值和表單中各個欄位一一對應,並且這些在URl中對使用者來說是可見的。

post 是通過HTTP post機制,將表單內各個欄位與其內容放置在HTML HEADER內一起傳送到action屬性所指的URL地址,對於使用者來說,這是不可見的。

總結:

1、get方式的安全性較post方式要差一些,所以,包含一些重要的資訊的話,簡易使用post資料提交方式。

2、在做查詢統計的時候,使用get方式要更好一些;而在做資料的新增,修改或刪除操作時,建議使用post資料提交方式。

13、 Tomcat的優化經驗。

Tomcat預設引數是為開發環境制定,而非適合生產環境,尤其是記憶體和執行緒的配置,預設都很低,容易成為效能瓶頸。

主要從以下三個方面優化:

1、tomcat記憶體優化:

linux修改TOMCAT_HOME/bin/catalina.sh,在前面加入JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai"

windows修改TOMCAT_HOME/bin/catalina.bat,在前面加入set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m

最大堆記憶體是1024m,對於現在的硬體還是偏低,實施時,還是按照機器具體硬體配置優化。

2、tomcat 執行緒優化:conf\service.xml中

<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700"

connectionTimeout="20000" redirectPort="8443" />

maxThreads="600" //最大執行緒數

minSpareThreads="100"//初始化時建立的執行緒數

maxSpareThreads="500"//一旦建立的執行緒超過這個值,Tomcat就會關閉不再需要的socket執行緒。

acceptCount="700"//指定當所有可以使用的處理請求的執行緒數都被使用時,可以放到處理佇列中的請求數,超過這個數的請求將不予處理

3、設定session過期時間

conf\web.xml中通過引數指定:

<session-config>  

<session-timeout>180</session-timeout>

</session-config>    180 單位為分鐘。

14、 談談Ajax的技術組成與核心原理。

AJax特點:區域性重新整理頁面、提高使用者的體驗度,資料從伺服器端載入。頁面在不重新整理的情況下直接進行後臺資料的互動,可以把以前一些伺服器負擔的工作轉嫁到客戶端,利用客戶端閒置的能力來處理,減輕伺服器和網路的負擔,節約空間和網路的租用成本。並且減輕伺服器的負擔,

ajax的原則是“按需取資料”(就是需要什麼會去自載入什麼),可以最大程度的減少繁複請求,和響應對伺服器造成的負擔。非同步(傳送請求以後不等結果,由回撥函式處理)

15、 說說Cookie和Session的作用以及區別。

一、Cookie 的工作原理:

Cookie實際上是一小段的文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端會把Cookie儲存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給伺服器。伺服器檢查該Cookie,以此來辨認使用者狀態。

Cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成Cookie的作用範圍。若不設定過期時間,則表示這個Cookie的生命期為瀏覽器會話期間,關閉瀏覽器視窗,Cookie就消失。這種生命期為瀏覽器會話期的Cookie被稱為會話Cookie。會話Cookie一般不儲存在硬碟上而是儲存在記憶體裡。若設定了過期時間,瀏覽器就會把Cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些Cookie仍然有效直到超過設定的過期時間。儲存在硬碟上的Cookie可以在不同的瀏覽器程式間共享,比如兩個IE視窗。而對於儲存在記憶體裡的Cookie,不同的瀏覽器有不同的處理方式。

二、Session

Session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表的結構來儲存資訊。

當客戶端請求伺服器時候,伺服器首先檢查這個客戶端的請求裡是否已包含了一個session標識(稱為session id),如果已包含則說明以前已經為此客戶端建立過session,伺服器就按照session id把這個session檢索出來使用,如果客戶端請求不包含session id,則為此客戶端建立一個session並且生成一個與此session相關聯的session id,將這個session id在本次響應中返回給客戶端儲存。

三、Cookie 和Session 的區別:

1、cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。

2、cookie不是很安全,別人可以分析存放在本地的COOKIE並進行COOKIE欺騙,考慮到安全應當使用session。

3、session會在一定時間內儲存在伺服器上。當訪問增多,會比較佔用你伺服器的效能考慮到減輕伺服器效能方面,應當使用COOKIE。

4、單個cookie儲存的資料不能超過4K,很多瀏覽器都限制一個站點最多儲存20個cookie。

5、所以個人建議:將登陸資訊等重要資訊存放為SESSION 其他資訊如果需要保留,可以放在COOKIE中。

16、 Java中常用的設計模式?說明工廠模式?

一、Java中的23種設計模式:

Factory(工廠模式),Proxy(代理模式),Singleton(單例模式),Template Method(模板方法模式)等等

(注:其中最重用的有工廠模式、代理模式和單例模式)。

一, 單例模式:基本概念:保證一個類僅有一個例項,並提供一個訪問它的全域性訪問點

二、工廠模式:基本概念:為建立物件提供過渡介面,以便將建立物件的具體過程遮蔽隔離起來,達到提高靈活性的目的

  • 簡單工廠模式Simple Factory:不利於產生系列產品;
  • 工廠方法模式Factory Method:又稱為多形性工廠;
  • 抽象工廠模式Abstract Factory:又稱為工具箱,產生產品族,但不利於產生新的產品;

 

工廠模式是一種經常被使用到的模式,根據工廠模式實現的類可以根據提供的資料生成一組類中某一個類的例項,通常這一組類有一個公共的抽象父類並且實現了相同的方法,但是這些方法針對不同的資料進行了不同的操作。首先需要定義一個基類,該類的子類通過不同的方法實現了基類中的方法。

三:建造(Builder)模式

基本概念:是一種物件構建的設計模式,它可以將複雜物件的建造過程抽象出來(抽象類別),使這個抽象過程的不同實現方法可以構造出不同表現(屬性)的物件。

Builder模式是一步一步建立一個複雜的物件,它允許使用者可以只通過指定複雜物件的型別和內容就可以構建它們。使用者不知道內部的具體構建細節。Builder模式是非常類似抽象工廠模式,細微的區別大概只有在反覆使用中才能體會到

 

 

17、談談Nginx伺服器。

Nginx不僅是一個小巧且高效的HTTP伺服器,也可以做一個高效的負載均衡反向代理,通過它接受使用者的請求並分發到多個Mongrel程式可以極大提高Rails應用的併發能力。

18、 WebService是什麼?

一、Web service 就是一個應用程式,它向外界暴露出一個能夠通過Web進行呼叫的API。這就是說,你能夠用程式設計的方法通過Web來呼叫這個應用程式。我們把呼叫這個Web service 的應用程式叫做客戶。Web Service減少了應用介面的花費。Web Service為整個企業甚至多個組織之間的業務流程的整合提供了一個通用機制。

19、怎麼解決執行緒同步

同步是指同一時間段內只能執行一個執行緒,其他執行緒需要等待此執行緒完成後才可繼續執行。同步可以解決執行緒中資源共享的安全問題,主要通過同步程式碼塊和同步方法兩種方式完成。

1.1 同步程式碼塊

在Java程式中,程式碼塊是指使用“{}”括起來的一段程式碼。程式碼塊前新增了synchronized關鍵字即為同步程式碼塊。同步程式碼塊格式如下:Synchronized(同步物件){   //需要同步的程式碼}

1.2 同步方法

同步方法是指使用synchronized關鍵字宣告方法,即為方法加上資源訪問鎖,同一時間只允許一個執行緒呼叫同步方法,其他執行緒必須等待當前執行緒呼叫結束後才能呼叫同步方法。

2. 總結

Ø 執行緒是比程式更小的執行單位,是在程式的基礎上進行的進一步劃分。所謂多執行緒是指一個程式在執行過程中可以產生多個執行緒。

Ø Java中實現多執行緒有兩種方式:繼承Thread類和實現Runnable介面,前者不適合多個執行緒共享資源,而後者可以方便地實現資源共享。

Ø 解決執行緒中資源共享的安全問題可以使用同步程式碼塊和同步方法實現。

Ø 執行緒在整個生命週期中具有建立、就緒、執行、阻塞和終止5中狀態。

 

 

20、談談Quartz任務排程

Quartz框架是一個開源的企業級任務排程服務,已經被作為任務排程的良好解決方案。

Quartz框架核心概念

Quartz對任務排程進行了高度抽象,提出了3個核心概念,並在org.quartz包中通過介面和類進行了描述

任務:就是執行的工作內容。Quartz提供Job介面來支援任務定義

觸發器:定義觸發Job執行的時間觸發規則。Quartz提供Trigger類及其子類支援觸發器功能,

排程器:Quartz提供了Scheduler介面,將工作任務和觸發器繫結,保證任務可以在正確的時間執行

實現Quartz任務排程的步驟:

1,定義任務,通過實現org.quartz.Job介面,可以使java類變成可排程的任務。

重寫該介面中的一個方法,void execute(JobExecutionContext context),實現該介面來定義需要執行的任務

2,建立觸發器,觸發器,它用於定義Job何時執行。最常用的是SimpleTrigger和CronTrigger。一般來說,如果你需要在一個固定的時間和重複次數或者一個固定的間隔時間,那麼SimpleTrigger比較合適;如果你有許多複雜的作業排程,那麼CronTrigger比較合適。

3,建立對應的排程器

21、說說DOM4J怎麼使用的

dom4j是一個Java的XML API,類似於jdom,用來讀寫XML檔案的,具有效能優異、功能強大和極端易用使用的特點,同時它也是一個開放原始碼的軟體。

DOM4J的使用步驟:

1, 獲得Document物件

2, 節點相關操作

3, 屬性相關操作

4, 將文件寫入XML檔案

5, 字串與XML的轉換

22、說一下你瞭解的shiro框架

Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。

主要功能有三個核心元件:Subject, SecurityManager 和 Realms.

Subject:即“當前操作使用者”。但是,在Shiro中,Subject這一概念並不僅僅指人,也可以是第三方程式、後臺帳戶(Daemon Account)或其他類似事物。它僅僅意味著“當前跟軟體互動的東西”。但考慮到大多數目的和用途,你可以把它認為是Shiro的“使用者”概念。Subject代表了當前使用者的安全操作。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內部元件例項,並通過它來提供安全管理的各種服務。
  Realm: Realm充當了Shiro與應用安全資料間的“橋樑”或者“聯結器”。也就是說,當對使用者執行認證(登入)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查詢使用者及其許可權資訊。可以配置多個Realm,但是至少需要一個。

23、講講你瞭解的WebSocket

WebSocket協議是基於TCP的一種新的網路協議。它實現了瀏覽器與伺服器全雙工(full-duplex)通訊——允許伺服器主動傳送資訊給客戶端。

http協議: HTTP的生命週期通過Request來界定,也就是一個Request 一個Response,那麼HTTP1.0,這次HTTP請求就結束了。但是請記住 Request = Response , 在HTTP中永遠是這樣,也就是說一個request只能有一個response。而且這個response也是被動的,不能主動發起

Websocket是什麼樣的協議,具體有什麼優點

首先Websocket是基於HTTP協議的,或者說借用了HTTP的協議來完成一部分握手。在握手階段是一樣的他解決了HTTP的這幾個難題。

被動性,當伺服器完成協議升級後(HTTP->Websocket),服務端就可以主動推送資訊給客戶端啦。只需要經過一次HTTP請求,就可以做到源源不斷的資訊傳送了。(在程式設計中,這種設計叫做回撥,即:你有資訊了再來通知我,而不是我傻乎乎的每次跑來問你)

Websocket就解決了這樣一個難題,(在傳統的方式上,要不斷的建立,關閉HTTP協議,由於HTTP是非狀態性的,每次都要重新傳輸identity info(鑑別資訊),來告訴服務端你是誰。)建立後,可以直接跟伺服器建立持久連線,有資訊的時候伺服器主動響應客戶端 Websocket只需要一次HTTP握手,所以說整個通訊過程是建立在一次連線/狀態中,也就避免了HTTP的非狀態性,服務端會一直知道你的資訊,直到你關閉請求,

至於怎麼在不支援Websocket的客戶端上使用Websocket。。答案是:不能
但是可以通過long poll 和 ajax 輪詢來 模擬出類似的效果

24、談談你所瞭解的logback

簡單地說,Logback 是一個 Java 領域的日誌框架。它被認為是 Log4J 的繼承人。
Logback 主要由三個模組組成:logback-core、logback-classic、logback-access

logback-core 是其它模組的基礎設施,其它模組基於它構建,顯然,logback-core 提供了一些關鍵的通用機制。

logback-classic 的地位和作用等同於 Log4J,它也被認為是 Log4J 的一個改進版,並且它實現了簡單日誌門面 SLF4J

logback-access 主要作為一個與 Servlet 容器互動的模組,比如說 tomcat 或者 jetty,提供一些與 HTTP 訪問相關的功能。

Logback與Log4J的區別:

  • 同樣的程式碼路徑,Logback 執行更快
  • 原生實現了 SLF4J API(Log4J 還需要有一箇中間轉換層)
  • 更充分的測試
  • 內容更豐富的文件
  • 配置檔案自動熱載入
  • 從 IO 錯誤中優雅恢復
  • 自動刪除日誌歸檔
  • 支援配置檔案中加入條件判斷來適應不同的環境

25、什麼是中介軟體

中介軟體是一種獨立的系統軟體或服務程式,分散式應用軟體藉助這種軟體在不同的技術之間共享資源,中介軟體位於客戶機伺服器的作業系統之上,管理計算資源和網路通訊。

  • 1, 中介軟體的特徵(平臺化,應用支撐,軟體複用,耦合關係,互操作性)
  • 2,中介軟體的分類(應用服務類中介軟體,應用整合類中介軟體,業務架構類中介軟體)

26、說說你瞭解的MQ

MQTT是IBM開發的一個基於二進位制訊息的釋出/訂閱程式設計模式的訊息通訊協議。mq是通訊中介軟體。他的作用是省去開發人員開發通訊工具的時間,節省開發成本,提高開發效率。

mq中一些名稱的概念:
佇列管理器:簡單的說就是一個大容器的管理員,這個大容器裡放了很多東西。
佇列:大容器裡的東西,存放訊息的盒子。
通道:大容器和大容器之間,程式和容器之間進行通訊的途徑。

MQTT提供三種質量的服務,對重傳的控制:

1)至多一次,可能會出現丟包的現象。使用在對實時性要求不高的情況。這一級別可應用於如下情景,如環境感測器資料,丟失一次讀記錄無所謂,因為很快下一次讀記錄就會產生。

2)至少一次,保證包會到達目的地,但是可能出現重包。

3)正好一次,保證包會到達目的地,且不會出現重包的現象。這一級別可用於如計費系統等場景,在計費系統中,訊息丟失或重複可能會導致生成錯誤的費用。

mq的通訊方式有兩種,通俗的說就是mq之間進行通訊,開發的程式和mq之間的通訊。

  • 通過傳送接收通道建立tcp連線進行訊息傳輸,稱為server對server
  • 通過伺服器連線通道進行傳輸,client對server

Mq實現通訊的步驟:

1,        首先要規劃好兩個佇列管理器之間使用的ip和埠

2,           建立佇列管理器

3,           啟動佇列管理器

4,           定義佇列管理器中的佇列和通道

5,           配置監聽器

6,           配置另外一個佇列管理器

7,           測試是否正常傳輸

27、HttpClient

HttpClient相比傳統JDK自帶的URLConnection,增加了易用性和靈活性(具體區別,日後我們再討論),它不僅是客戶端傳送Http請求變得容易,而且也方便了開發人員測試介面(基於Http協議的),即提高了開發的效率,也方便提高程式碼的健壯性。因此熟練掌握HttpClient是很重要的必修內容,掌握HttpClient後,相信對於Http協議的瞭解會更加深入。

特性

1. 基於標準、純淨的java語言。實現了Http1.0和Http1.1

2. 以可擴充套件的物件導向的結構實現了Http全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。

3. 支援HTTPS協議。

4. 通過Http代理建立透明的連線。

5. 利用CONNECT方法通過Http代理建立隧道的https連線。

6. Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos認證方案。

7. 外掛式的自定義認證方案。

8. 便攜可靠的套接字工廠使它更容易的使用第三方解決方案。

9. 連線管理器支援多執行緒應用。支援設定最大連線數,同時支援設定每個主機的最大連線數,發現並關閉過期的連線。

10. 自動處理Set-Cookie中的Cookie。

11. 外掛式的自定義Cookie策略。

12. Request的輸出流可以避免流中內容直接緩衝到socket伺服器。

13. Response的輸入流可以有效的從socket伺服器直接讀取相應內容。

14. 在http1.0和http1.1中利用KeepAlive保持持久連線。

15. 直接獲取伺服器傳送的response code和 headers。

16. 設定連線超時的能力。

17. 實驗性的支援http1.1 response caching。

18. 原始碼基於Apache License 可免費獲取。

使用方法

使用HttpClient傳送請求、接收響應很簡單,一般需要如下幾步即可。

1. 建立HttpClient物件。

2. 建立請求方法的例項,並指定請求URL。如果需要傳送GET請求,建立HttpGet物件;如果需要傳送POST請求,建立HttpPost物件。

3. 如果需要傳送請求引數,可呼叫HttpGet、HttpPost共同的setParams(HetpParams params)方法來新增請求引數;對於HttpPost物件而言,也可呼叫setEntity(HttpEntity entity)方法來設定請求引數。

4. 呼叫HttpClient物件的execute(HttpUriRequest request)傳送請求,該方法返回一個HttpResponse。

5. 呼叫HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取伺服器的響應頭;呼叫HttpResponse的getEntity()方法可獲取HttpEntity物件,該物件包裝了伺服器的響應內容。程式可通過該物件獲取伺服器的響應內容。

6. 釋放連線。無論執行方法是否成功,都必須釋放連線(大量請求訪問時就必然會造成連結被佔滿,請求等待的情況)

28、java操作excle表格

Java 操作 Excel 最常用的就是JXL(Java excel api)和POI,用起來挺簡單的,不過相應的其功能也並非很強大,夠用就行

jxl是一個韓國人寫的java操作excel的工具, 在java的開源世界中,有兩套比較有影響的API可供使用,一個是POI,一個是jExcelAPI(即jxl)。jxl功能相對POI比較弱一點。

但jxl對中文支援非常好,API是純Java的, 不依賴Windows系統,即使執行在Linux下,也同樣能夠正確的處理Excel檔案。 需要補充說明的是,jxl對圖形和圖表的支援很有限,而且 僅僅識別PNG格式的圖片

 使用jxl.jar

 

1.建立工作簿物件

WritableWorkbook workbook = Workbook.createWorkbook(new File("d:/AA/test.xls"));

// 建立新的一頁

WritableSheet sheet = workbook.createSheet("First Sheet", 0);

2. 常用操作頁面方法“

WritableSheet sheet = workbook.getSheet(0); 獲取第一頁

Sheet.setName() 設定sheet名

workbook.removeSheet(2); // 移除多餘的標籤頁

    sheet.mergeCells(0, 0, 4, 0); // 合併單元格,第一個引數是起始列,第二個引數是起始行,第三個引數是終止列,第四個引數是終止行

sheet.setRowView(0, 600); // 設定行的高度 

sheet.setColumnView(0, 30); // 設定列的寬度

把建立的內容寫入到輸出流中,並關閉輸出流

workbook.write();

workbook.close();

os.close();

 

使用 poi

  • 1
  • 2
  • 3

7Jsoup

jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和運算元據。

在爬蟲採集網頁領域主要作用是用HttpClient獲取到網頁後具體的網頁提取需要的資訊的時候,就用到Jsoup,Jsoup可以使用強大的類似Jquery,css選擇器,來獲取需要的資料。

使用簡介:   

String content = EntityUtils.toString(“實體物件“, "utf-8");

        Document document = Jsoup.parse(content);//解析html返回doc物件

//根據標籤獲取內容

       Elements elementsByTag = document.getElementsByTag("title");//獲取所有title標籤

       Element element = elementsByTag.get(0);//獲取第0個title標籤

       String text = element.text();//返回元素的文字

       System.out.println("網頁標題為:"+text);

      

       //根據id獲取內容

       Element elementById = document.getElementById("site_nav_top");

       String text2 = elementById.text();

       System.out.println("網頁口號為:"+text2);

       HttpClientUtils.closeHttpClient();

 

 

HTTP 簡介:

http協議:HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW:World Wide Web )伺服器傳輸超文字到本地瀏覽器的傳送協議

HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML 檔案, 圖片檔案, 查詢結果等

HTTP之URL

HTTP使用統一資源識別符號(Uniform Resource Identifiers, URI)來傳輸資料和建立連線。URL是一種特殊型別的URI,包含了用於查詢某個資源的足夠的資訊

URL,全稱是UniformResourceLocator, 中文叫統一資源定位符,是網際網路上用來標識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

從上面的URL可以看出,一個完整的URL包括以下幾部分:
1.協議部分:該URL的協議部分為“http:”,這代表網頁使用的是HTTP協議。在Internet中可以使用多種協議,如HTTP,FTP等等本例中使用的是HTTP協議。在"HTTP"後面的“//”為分隔符

2.域名部分:該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用

3.埠部分:跟在域名後面的是埠,域名和埠之間使用“:”作為分隔符。埠不是一個URL必須的部分,如果省略埠部分,將採用預設埠

4.虛擬目錄部分:從域名後的第一個“/”開始到最後一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”

5.檔名部分:從域名後的最後一個“/”開始到“?”為止,是檔名部分,如果沒有“?”,則是從域名後的最後一個“/”開始到“#”為止,是檔案部分,如果沒有“?”和“#”,那麼從域名後的最後一個“/”開始到結束,都是檔名部分。本例中的檔名是“index.asp”。檔名部分也不是一個URL必須的部分,如果省略該部分,則使用預設的檔名

6.錨部分:從“#”開始到最後,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分

7.引數部分:從“?”開始到“#”為止之間的部分為引數部分,又稱搜尋部分、查詢部分。本例中的引數部分為“boardID=5&ID=24618&page=1”。引數可以允許有多個引數,引數與引數之間用“&”作為分隔符。

Java操作圖片

  載入圖片:

  1. 先得到通過路徑得到要修改的圖片。

final BufferedImage image = ImageIO.read(圖片路徑);  

Graphics2D g= image . createGraphics();//獲取圖片流 使用Graphics2D類接收

  新增文字:

樣式字型的設定和文字的編寫。

  1. Graphics g = image.getGraphics();   
  2. g.setFont(new Font("微軟雅黑",Font.BOLD ,48));//設定字型  
  3. g.setColor(Color.red);//設定顏色  
  4. g.drawString(文字, x座標, y座標);//文字的編寫及位置

g.dispose();  

 

Graphics2D類:

Graphics2D ,Graphics 類,提供了對幾何形狀、座標轉換、顏色管理和文字佈局更為複雜的控制。它是用於在 Java(tm) 平臺上呈現二維形狀、文字和影像的基礎類。驗證碼生成可以用到此類。

public abstract class Graphics2Dextends Graphics 此 Graphics2D 類擴充套件了 Graphics 類,提供了對幾何形狀、座標轉換、顏色管理和文字佈局更為複雜的控制

使用簡介:

以下程式碼在點(3,3)與點(50,50)之間畫線段,在點(100,100)處畫一個點。

   g.drawLine(3,3,50,50);//畫一條線段

   g.drawLine(100,100,100,100);//畫一個點。

 

oracle 面試常見問題:
1.事務概念:事務是這樣一種機制,它確保多個SQL語句被當作單個工作單元來處理。

使用者定義的一個資料庫操作序列,這些操作要麼全部成功完成要麼全部不做,是一個不可分割的整體。定義事務的SQL語句有:BEGIN TRANSACTION,COMMIT,ROLLBACK。 

事務的一致性:是事務原子性的體現,事務所對應的資料庫操作要麼成功要麼失敗沒有第三種情況。事務不管是提交成功與否都不能影響資料庫資料的一致性狀態。 
事務的原子性:就是事務所包含的資料庫操作要麼都做,要麼都不做. 
事務的隔離性:事務對資料的操作不能夠受到其他事務的影響。 
事務的持續性:也就是說事務對資料的影響是永久的

2. view 的概念 ? 何時應用?

view 是對錶級資料的多角度的透視,適用於對查詢安全性、靈活性有一定要求的環境.

3. 介紹一下oracle的體系結構?

邏輯體系結構:塊,區,段,表空間 
  物理體系結構:表空間,三大檔案 
  軟體體系結構:SGA,後臺程式.

11 介紹一下oracle的體系結構?

  邏輯體系結構:塊,區,段,表空間 
      物理體系結構:表空間,三大檔案 
      軟體體系結構:SGA,後臺程式.

013 簡述ORACLE的啟動和關閉各有多少步驟?

  啟動:啟動例項、裝載資料庫資料、開啟資料庫。 關閉:關閉資料庫、解除安裝資料庫資料、關閉例項。

014 ORACLE資料庫都有哪些型別的檔案?

  資料檔案,控制檔案,日誌檔案,引數檔案

015 Oracle中,你所建立的表空間資訊放在哪裡?

  存放在資料字典中,資料字典內容對應於系統表空間SYSTEM表空間。

016 ORACLE的基本資料型別有哪些?

Char()儲存定長字元,定義的時候可以不為他指定長度但是如若往裡插入值則會出錯;varchar2()儲存變長字元定義的時候必須指定長度,date儲存時間日期;Number()數字型別,包括整型,浮點型等;clob()大容量字串;blob()大二進位制物件

 

Oracle語法中truncatedelete的區別?

1. TRUNCATE在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令DELETE將被撤銷,而TRUNCATE則不會被撤銷。 
  2. TRUNCATE是一個DDL語言而DELETE是DML語句,向其他所有的DDL語言一樣,他將被隱式提交,不能對TRUNCATE使用ROLLBACK命令。 
  3. TRUNCATE將重新設定高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過TRUNCATE操作後的表比DELETE操作後的表要快得多。 
  4. TRUNCATE不能觸發觸發器,DELETE會觸發觸發器。 
  5. 不能授予任何人清空他人的表的許可權。 
  6. 當表被清空後表和表的索引講重新設定成初始大小,而delete則不能。 
  7. 不能清空父表。

Oracle中的異常有哪幾類?

oracle中有三種型別的異常。預定義的異常 非預定義的異常 使用者定義的異常 其中第二種非預定義的異常是與特定的oracle錯誤關聯。

使用索引查詢一定能提高查詢的效能嗎?為什麼?

通常,通過索引查詢資料比全表掃描要快.但是我們也必須注意到它的代價. 索引需要空間來儲存,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁碟I/O. 因為索引需要額外的儲存空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢效能,索引範圍查詢(INDEX RANGE SCAN)適用於兩種情況: 
  基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%宜採用; 
  基於非唯一性索引的檢索,索引就是為了提高查詢效能而存在的,如果在查詢中索引沒有提高效能,只能說是用錯了索引,或者講是場合不同

 回滾段的作用是什麼?

  回滾段用於儲存資料修改前的映象,這些資訊用於生成讀一致性資料庫資訊、在資料庫恢復和Rollback時使用。一個事務只能使用一個回滾段。 
  事務回滾:當事務修改表中資料的時候,該資料修改前的值(即前影像)會存放在回滾段中,當使用者回滾事務(ROLLBACK)時,ORACLE將會利用回滾段中的資料前影像來將修改的資料恢復到原來的值。 
  事務恢復:當事務正在處理的時候,例程失敗,回滾段的資訊儲存在undo表空間中,ORACLE將在下次開啟資料庫時利用回滾來恢復未提交的資料。 
  讀一致性:當一個會話正在修改資料時,其他的會話將看不到該會話未提交的修改。 當一個語句正在執行時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性) 當ORACLE執行SELECT語句時,ORACLE依照當前的系統改變號(SYSTEM CHANGE NUMBER-SCN) 來保證任何前於當前SCN的未提交的改變不被該語句處理。可以想象:當一個長時間的查詢正在執行時, 若其他會話改變了該查詢要查詢的某個資料塊,ORACLE將利用回滾段的資料前影像來構造一個讀一致性檢視

SGA主要有那些部分,主要作用是什麼

系統全域性區(SGA:是ORACLE為例項分配的一組共享緩衝儲存區,用於存放資料庫資料和控制資訊,以實現對資料庫資料的管理和操作。 SGA主要包括: 
  1. 共享池(shared pool) :用來儲存最近執行的SQL語句和最近使用的資料字典的資料。 
  2. 資料緩衝區 (database buffer cache):用來儲存最近從資料檔案中讀寫過的資料。 
  3. 重作日誌緩衝區(redo log buffer:用來記錄服務或後臺程式對資料庫的操作。 另外在SGA中還有兩個可選的記憶體結構: 
  4. Java pool: 用來儲存Java程式碼。 
  5. Large pool: 用來儲存不與SQL直接相關的大型記憶體結構。備份、恢復使用。

Oracle系統程式主要有哪些,作用是什麼

資料寫程式(DBWR):負責將更改的資料從資料庫緩衝區快取記憶體寫入資料檔案 
  日誌寫程式(LGWR):將重做日誌緩衝區中的更改寫入線上重做日誌檔案 
  系統監控 (SMON): 檢查資料庫的一致性如有必要還會在資料庫開啟時啟動資料庫的恢復 
  程式監控 (PMON): 負責在一個Oracle 程式失敗時清理資源 
  檢查點程式(CKPT):負責在每當緩衝區快取記憶體中的更改永久地記錄在資料庫中時,更新控制檔案和資料檔案中的資料庫狀態資訊。 
  歸檔程式 (ARCH):在每次日誌切換時把已滿的日誌組進行備份或歸檔 
  恢復程式 (RECO): 保證分散式事務的一致性,在分散式事務中,要麼同時commit,要麼同時rollback

Oracle索引分為哪幾類,說出唯一索引和點陣圖索引的概念。

  Oracle索引有B樹索引,點陣圖索引,函式索引,簇索引等。 
  唯一索引也是B樹索引的一種,它要求被索引的欄位值不可以重複。在建立的時候使用B樹演算法建立。 
  點陣圖索引並不是採用像唯一索引那樣儲存(索引欄位值,記錄ROWID)來建立索引段的,而是為每一個唯一的欄位值建立一個點陣圖,點陣圖中使用位元來對應一個記錄的ROWID。位元到ROWID是通過對映的到的。

oracle 優勢:

1、處理速度快,非常快
2、安全級別高。支援快閃以及完美的恢復,即使硬體壞了 也可以恢復到故障發前的1s
3、幾臺資料庫做負載資料庫,可以做到30s以內故障轉移,
4、網格控制,以及 資料倉儲方面 也非常強大
缺點:
對硬體的要求很高;
價格比較昂貴;
管理維護麻煩一些;
操作比較複雜,需要技術含量較高;


oracle產品及服務都是付費的,而且價格不菲。比其他資料庫要貴,物有所值。oracle不是開源的。不過可以在redhat 或者其他開源作業系統上安裝。
mysql在sun沒被oracle收購是開源的,免費的,之後oracle公司打算 把mysql打造成不開源,收費模式的。

 

簡單敘述一下MYSQL的優化(重點)

  1.資料庫的設計:儘量把資料庫設計的更小的佔磁碟空間. 
    1) 儘可能使用更小的整數型別.(mediumint就比int更合適). 
    2) 儘可能的定義欄位為not null,除非這個欄位需要null. 
    3) 如果沒有用到變長欄位的話比如varchar,那就採用固定大小的紀錄格式比如char. 
    4) 表的主索引應該儘可能的短.這樣的話每條紀錄都有名字標誌且更高效. 
    5) 只建立確實需要的索引。索引有利於檢索記錄,但是不利於快速儲存記錄。如果總是要在表的組合欄位上做搜尋,那麼就在這些欄位上建立索引。索引的第一部分必須是最常使用的欄位.如果總是需要用到很多欄位,首先就應該多複製這些欄位,使索引更好的壓縮。 
    6) 所有資料都得在儲存到資料庫前進行處理。 
    7) 所有欄位都得有預設值。 
    8) 在某些情況下,把一個頻繁掃描的表分成兩個速度會快好多。在對動態格式表掃描以取得相關記錄時,它可能使用更小的靜態格式表的情況下更是如此。 
  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來匯入大量資料,這比單純的insert快好多. 
    8) 經常OPTIMIZE TABLE 來整理碎片. 
    9) 還有就是date 型別的資料如果頻繁要做比較的話儘量儲存在unsigned int 型別比較快。 
  3.系統的瓶頸 
    1) 磁碟搜尋。並行搜尋,把資料分開存放到多個磁碟中,這樣能加快搜尋時間. 
    2) 磁碟讀寫(IO)。可以從多個媒介中並行的讀取資料。 
    3) CPU週期。資料存放在主記憶體中.這樣就得增加CPU的個數來處理這些資料。 
    4) 記憶體頻寬。當CPU要將更多的資料存放到CPU的快取中來的話,記憶體的頻寬就成了瓶頸.

MySQL和Oracle的區別

(1) 自動增長的資料型別處理 
MYSQL有自動增長的資料型別,插入記錄時不用操作此欄位,會自動獲得資料值。ORACLE沒有自動增長的資料型別,需要建立一個自動增長的序列號,插入記錄時要把序列號的下一個值賦於此欄位。

(2)單引號的處理 
MYSQL裡可以用雙引號包起字串,ORACLE裡只可以用單引號包起字串。在插入和修改字串前必須做單引號的替換:把所有出現的一個單引號替換成兩個單引號。

(3)翻頁的SQL語句的處理 
MYSQL處理翻頁的SQL語句比較簡單,用LIMIT 開始位置, 記錄個數;PHP裡還可以用SEEK定位到結果集的位置。ORACLE處理翻頁的SQL語句就比較繁瑣了。每個結果集只有一個ROWNUM欄位標明它的位置, 並且只能用ROWNUM<100, 不能用ROWNUM>80。

(4) 長字串的處理 
長字串的處理ORACLE也有它特殊的地方。INSERT和UPDATE時最大可操作的字串長度小於等於4000個單位元組, 如果要插入更長的字串, 請考慮欄位用CLOB型別,方法借用ORACLE裡自帶的DBMS_LOB程式包。插入修改記錄前一定要做進行非空和長度判斷,不能為空的欄位值和超出長度欄位值都應該提出警告,返回上次操作

(5) 日期欄位的處理 
MYSQL日期欄位分DATE和TIME兩種,ORACLE日期欄位只有DATE,包含年月日時分秒資訊

(6)空字元的處理 
MYSQL的非空欄位也有空的內容,ORACLE裡定義了非空欄位就不容許有空的內容。按MYSQL的NOT NULL來定義ORACLE表結構, 導資料的時候會產生錯誤。因此導資料時要對空字元進行判斷,如果為NULL或空字元,需要把它改成一個空格的字串。

(7)字串的模糊比較 
MYSQL裡用 欄位名 like ‘%字串%’,ORACLE裡也可以用 欄位名 like ‘%字串%’ 但這種方法不能使用索引, 速度不快,用字串比較函式 instr(欄位名,’字串’)>0 會得到更精確的查詢結果。

 

一、sqlserver
優點:
易用性、適合分散式組織的可伸縮性、用於決策支援的資料倉儲功能、與許多其他伺服器軟體緊密關聯的整合性、良好的價效比等;
為資料管理與分析帶來了靈活性,允許單位在快速變化的環境中從容響應,從而獲得競爭優勢。從資料管理和分析角度看,將原始資料轉化為商業智慧和充分利用Web帶來的機會非常重要。作為一個完備的資料庫和資料分析包,SQLServer為快速開發新一代企業級商業應用程式、為企業贏得核心競爭優勢開啟了勝利之門。作為重要的基準測試可伸縮性和速度獎的記錄保持者,SQLServer是一個具備完全Web支援的資料庫產品,提供了對可擴充套件標記語言 (XML)的核心支援以及在Internet上和防火牆外進行查詢的能力;

缺點:
開放性 :SQL Server 只能windows上執行沒有絲毫開放性作業系統系統穩定對資料庫十分重要Windows9X系列產品偏重於桌面應用NT server只適合小型企業而且windows平臺靠性安全性和伸縮性非常有限象unix樣久經考驗尤其處理大資料庫;
伸縮性並行性 :SQL server 並行實施和共存模型併成熟難處理日益增多使用者數和資料卷伸縮性有限;
安全性:沒有獲得任何安全證照。
效能 :SQL Server 多使用者時效能佳 ;
客戶端支援及應用模式: 客戶端支援及應用模式。只支援C/S模式,SQL Server C/S結構只支援windows客戶用ADO、DAO、OLEDB、ODBC連線;
使用風險:SQL server 完全重寫程式碼經歷了長期測試斷延遲許多功能需要時間來證明並十分相容;
二、Oracle
優點:
開放性:Oracle 能所有主流平臺上執行(包括 windows)完全支援所有工業標準採用完全開放策略使客戶選擇適合解決方案對開發商全力支援;
可伸縮性,並行性:Oracle 並行伺服器通過使組結點共享同簇工作來擴充套件windownt能力提供高用性和高伸縮性簇解決方案windowsNT能滿足需要使用者把資料庫移UNIXOracle並行伺服器對各種UNIX平臺叢集機制都有著相當高整合度;
安全性:獲得最高認證級別的ISO標準認證。 
效能:Oracle 效能高 保持開放平臺下TPC-D和TPC-C世界記錄;
客戶端支援及應用模式:Oracle 多層次網路計算支援多種工業標準用ODBC、JDBC、OCI等網路客戶連線
使用風險:Oracle 長時間開發經驗完全向下相容得廣泛應用地風險低

缺點:
對硬體的要求很高;
價格比較昂貴;
管理維護麻煩一些;
操作比較複雜,需要技術含量較高;

三、MySql
優點:
體積小、速度快、總體擁有成本低,開源;
支援多種作業系統;
是開源資料庫,提供的介面支援多種語言連線操作
MySql的核心程式採用完全的多執行緒程式設計。執行緒是輕量級的程式,它可以靈活地為使用者提供服務,而不過多的系統資源。用多執行緒和C語言實現的MySql能很容易充分利用CPU;
MySql有一個非常靈活而且安全的許可權和口令系統。當客戶與MySql伺服器連線時,他們之間所有的口令傳送被加密,而且MySql支援主機認證;
支援ODBC for Windows, 支援所有的ODBC 2.5函式和其他許多函式, 可以用Access連線MySql伺服器, 使得應用被擴充套件;
支援大型的資料庫, 可以方便地支援上千萬條記錄的資料庫。作為一個開放原始碼的資料庫,可以針對不同的應用進行相應的修改。
擁有一個非常快速而且穩定的基於執行緒的記憶體分配系統,可以持續使用面不必擔心其穩定性;
MySQL同時提供高度多樣性,能夠提供很多不同的使用者介面,包括命令列客戶端操作,網頁瀏覽器,以及各式各樣的程式語言介面,例如C+,Perl,Java,PHP,以及Python。你可以使用事先包裝好的客戶端,或者乾脆自己寫一個合適的應用程式。MySQL可用於Unix,Windows,以及OS/2等平臺,因此它可以用在個人電腦或者是伺服器上;

缺點:
不支援熱備份;
MySQL最大的缺點是其安全系統,主要是複雜而非標準,另外只有到呼叫mysqladmin來重讀使用者許可權時才發生改變;
沒有一種儲存過程(Stored Procedure)語言,這是對習慣於企業級資料庫的程式設計師的最大限制;
MySQL的價格隨平臺和安裝方式變化。Linux的MySQL如果由使用者自己或系統管理員而不是第三方安裝則是免費的,第三方案則必須付許可費。Unix或Linux 自行安裝 免費 、Unix或Linux 第三方安裝 收費

Maven有哪些優點和缺點

優點如下:

簡化了專案依賴管理:

易於上手,對於新手可能一個"mvn clean package"命令就可能滿足他的工作

便於與持續整合工具(jenkins)整合

便於專案升級,無論是專案本身升級還是專案使用的依賴升級。

有助於多模組專案的開發,一個模組開發好後,釋出到倉庫,依賴該模組時可以直接從倉庫更新,而不用自己去編譯。

maven有很多外掛,便於功能擴充套件,比如生產站點,自動釋出版本等

缺點如下:

maven是一個龐大的構建系統,學習難度大

maven採用約定優於配置的策略(convention over configuration),雖然上手容易,但是一旦出了問題,難於除錯。

當依賴很多時,m2eclipse 老是搞得Eclipse很卡。

中國的網路環境差,很多repository無法訪問,比如google code, jboss 倉庫無法訪問等。

 

相關文章