面試寶典已回答篇_第1頁
面試寶典已回答篇_第2頁
面試寶典已回答篇_第3頁
面試寶典已回答篇_第4頁
面試寶典已回答篇_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

面試寶典已回答篇Java面試寶典(待回答篇)oracle如何實(shí)現(xiàn)讀寫分離

(1)基于RAC架構(gòu)的,使用其中某個(gè)節(jié)點(diǎn)作為讀庫;(2)基于Streams數(shù)據(jù)復(fù)制技術(shù)的,實(shí)時(shí)將數(shù)據(jù)復(fù)制到另外一個(gè)庫供讀?。?3)使用第三方數(shù)據(jù)復(fù)制軟件的,如GoldenGate(已經(jīng)被Oracle收入囊中)、DSG的,也是實(shí)時(shí)復(fù)制數(shù)據(jù)到另外一個(gè)庫中。(4)使用Logicalstandby技術(shù),實(shí)時(shí)復(fù)制數(shù)據(jù)到一個(gè)庫,且該庫是對(duì)應(yīng)用而言是只讀的。說說你對(duì)排它鎖,讀寫鎖的理解

(1)排它鎖,也稱作獨(dú)占鎖,一個(gè)鎖在某一時(shí)刻只能被一個(gè)線程占有,其它線程必須等待鎖被釋放之后才可能獲取到鎖。(2)讀寫鎖拆成讀鎖和寫鎖來理解。讀鎖可以共享,多個(gè)線程可以同時(shí)擁有讀鎖,但是寫鎖卻只能只有一個(gè)線程擁有,而且獲取寫鎖的時(shí)候其他線程都已經(jīng)釋放了讀鎖,而且該線程獲取寫鎖之后,其他線程不能再獲取讀鎖在讀寫鎖的基礎(chǔ)上如何實(shí)現(xiàn)防止幻讀(不能使用MVCC,也不能使用序列化的隔離級(jí)別)

線程池用過嗎?newcachedThreadPool在使用過程中有什么需要注意的嗎

創(chuàng)建一個(gè)可緩存的線程池。如果線程池的大小超過了處理任務(wù)所需要的線程,那么就會(huì)回收部分空閑(60秒不執(zhí)行任務(wù))的線程,當(dāng)任務(wù)數(shù)增加時(shí),此線程池又可以智能的添加新線程來處理任務(wù)。此線程池不會(huì)對(duì)線程池大小做限制,線程池大小完全依賴于\o"操作系統(tǒng)知識(shí)庫"操作系統(tǒng)(或者說JVM)能夠創(chuàng)建的最大線程大小。oracle的聯(lián)合主鍵在創(chuàng)建的時(shí)候有什么需要注意的嗎

談?wù)勀銓?duì)分布式的理解

分布式就是把一個(gè)需要非常巨大的計(jì)算能力才能解決的問題分成許多小的部分,然后把這些部分分配給許多計(jì)算機(jī)進(jìn)行處理,最后把這些計(jì)算結(jié)果綜合起來得到最終的結(jié)果。js寫的怎么樣,js是怎樣實(shí)現(xiàn)繼承的

js常用的繼承方法有:原型鏈、借用構(gòu)造函數(shù)、組合繼承、原型式繼承、寄生式繼承、寄生組合式繼承。struts

Filter和攔截器有什么區(qū)別?

攔截器是基于java的反射機(jī)制的,而過濾器是基于函數(shù)回調(diào)。攔截器不依賴與servlet容器,過濾器依賴與servlet容器。攔截器只能對(duì)action請(qǐng)求起作用,而過濾器則可以對(duì)幾乎所有的請(qǐng)求起作用。攔截器可以訪問action上下文、值棧里的對(duì)象,而過濾器不能訪問。在action的生命周期中,攔截器可以多次被調(diào)用,而過濾器只能在容器初始化時(shí)被調(diào)用一次抽象工廠方法和工廠方法區(qū)別是什么?

工廠方法:用來生產(chǎn)同一等級(jí)結(jié)構(gòu)中的固定產(chǎn)品。(支持增加任意產(chǎn)品)

抽象工廠:用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。(對(duì)于增加新的產(chǎn)品,無能為力;支持增加產(chǎn)品族)在負(fù)載不能支撐的情況下,如何將redis實(shí)例從10個(gè)擴(kuò)充到20個(gè)

11、說說你對(duì)ThreadLocal的理解

(1)每個(gè)線程都有自己的局部變量

每個(gè)線程都有一個(gè)獨(dú)立于其他線程的上下文來保存這個(gè)變量,一個(gè)線程的本地變量對(duì)其他線程是不可見的(有前提,后面解釋)(2)獨(dú)立于變量的初始化副本

ThreadLocal可以給一個(gè)初始值,而每個(gè)線程都會(huì)獲得這個(gè)初始化值的一個(gè)副本,這樣才能保證不同的線程都有一份拷貝。(3)狀態(tài)與某一個(gè)線程相關(guān)聯(lián)

ThreadLocal不是用于解決共享變量的問題的,不是為了協(xié)調(diào)線程同步而存在,而是為了方便每個(gè)線程處理自己的狀態(tài)而引入的一個(gè)機(jī)制,理解這點(diǎn)對(duì)正確使用ThreadLocal至關(guān)重要。http協(xié)議,put用過嗎?講講,如何使用http協(xié)議傳送多個(gè)文件

(1)在form中設(shè)置多個(gè)文件輸入框,用數(shù)組命名他們的名字(2)在form中設(shè)置多個(gè)文件輸入框,但名字不同可重入鎖與syncronized區(qū)別()

完美世界:

ReentrantLock除了synchronized的功能,多了三個(gè)高級(jí)功能.等待可中斷,公平鎖,綁定多個(gè)Condition.(1)等待可中斷在持有鎖的線程長時(shí)間不釋放鎖的時(shí)候,等待的線程可以選擇放棄等待.

tryLock(longtimeout,TimeUnitunit)(2)公平鎖按照申請(qǐng)鎖的順序來一次獲得鎖稱為公平鎖.synchronized的是非公平鎖,ReentrantLock可以通過構(gòu)造函數(shù)實(shí)現(xiàn)公平鎖.

newRenentrantLock(booleanfair)(3)綁定多個(gè)Condition通過多次newCondition可以獲得多個(gè)Condition對(duì)象,可以簡單的實(shí)現(xiàn)比較復(fù)雜的線程同步的功能.通過await(),signal();約瑟夫問題知道嗎?15分鐘寫出來

public

class

RingTest{

public

static

void

main(String[]

args){

System.out.println("程序說明如下:");

System.out.println("由m個(gè)人圍成一個(gè)首尾相連的圈報(bào)數(shù)。從第一個(gè)人開始,從1開始報(bào)數(shù),報(bào)到n的人出圈,剩下的人繼續(xù)從1開始報(bào)數(shù),直到所有的人都出圈為止。對(duì)于給定的m和n,求出所有人的出圈順序.");

//提示輸入總?cè)藬?shù)

System.out.println("請(qǐng)輸入做這個(gè)游戲的總?cè)藬?shù):");

Scanner

sca=new

Scanner(System.in);

int

m=sca.nextInt();

//提示輸入要出圈的數(shù)值

System.out.println("請(qǐng)輸入要出圈的數(shù)值:");

int

n=sca.nextInt();

System.out.println("按出圈的次序輸出序號(hào):");

//創(chuàng)建有m個(gè)值的數(shù)組

int[]

a=new

int[m];

//初始長度,以后出圈一個(gè),長度就減一

int

len=m;

//給數(shù)組賦值

for(int

i=0;i<a.length;i++)

a[i]=i+1;

//i為元素下表,j代表當(dāng)前要報(bào)的數(shù)

int

i=0;

int

j=1;

while(len>0){

if(a[i%m]>0){

if(j%n==0){//找到要出圈的人,并把圈中人數(shù)減一

System.out.print(a[i%m]+"

");

a[i%m]=-1;

j=1;

i++;

len--;

}else{

i++;

j++;

}

}else{//遇到空位了,就跳到下一位,但j不加一,也就是這個(gè)位置沒有報(bào)數(shù)

i++;

}

}

}}session的實(shí)現(xiàn)機(jī)制

Session保存在服務(wù)器端,為了獲得更高的存取速度,服務(wù)器一般把Session保存在內(nèi)存里。需要注意的是只有訪問jsp、Servlet等程序時(shí)才會(huì)創(chuàng)建Session,訪問HTML、IMAGE等靜態(tài)資源時(shí)并不會(huì)創(chuàng)建Session。Session生成后,只要用戶繼續(xù)訪問,服務(wù)器就會(huì)更新Session的最后訪問時(shí)間,并維護(hù)該Session。由于會(huì)有越來越多的用戶訪問服務(wù)器,因此Session也會(huì)越來越多。為防止內(nèi)存溢出,服務(wù)器會(huì)把長時(shí)間沒有活躍的用戶的Session從內(nèi)存里刪除。這個(gè)時(shí)間就是Session的超時(shí)時(shí)間。如果超過了超時(shí)時(shí)間沒訪問服務(wù)器,Session就自動(dòng)失效了。生產(chǎn)者消費(fèi)者模型的實(shí)現(xiàn)

(1)采用某種機(jī)制保護(hù)生產(chǎn)者和消費(fèi)者之間的同步;(2)在生產(chǎn)者和消費(fèi)者之間建立一個(gè)管道。第一種方式有較高的效率,并且易于實(shí)現(xiàn),代碼的可控制性較好,屬于常用的模式。第二種管道緩沖區(qū)不易控制,被傳輸數(shù)據(jù)對(duì)象不易于封裝等,實(shí)用性不強(qiáng)。介紹垃圾回收機(jī)制

在\o"JavaSE知識(shí)庫"\t"/zsuguangh/article/details/6429592/_blank"Java中,當(dāng)沒有對(duì)象引用指向原先分配給某個(gè)對(duì)象的內(nèi)存時(shí),該內(nèi)存便成為垃圾。JVM的一個(gè)系統(tǒng)級(jí)線程會(huì)自動(dòng)釋放該內(nèi)存塊。垃圾回收能自動(dòng)釋放內(nèi)存空間,減輕編程的負(fù)擔(dān)。這使Java虛擬機(jī)具有一些優(yōu)點(diǎn)。首先,它能使編程效率提高。在沒有垃圾回收機(jī)制的時(shí)候,可能要花許多時(shí)間來解決一個(gè)難懂的存儲(chǔ)器問題。在用Java語言編程的時(shí)候,靠垃圾回收機(jī)制可大大縮短時(shí)間。其次是它保護(hù)程序的完整性,垃圾回收是Java語言安全性策略的一個(gè)重要部份如何確定TCP連接關(guān)閉(4次握手)

由于TCP連接時(shí)全雙工的,因此,每個(gè)方向都必須要單獨(dú)進(jìn)行關(guān)閉,這一原則是當(dāng)一方完成數(shù)據(jù)發(fā)送任務(wù)后,發(fā)送一個(gè)FIN來終止這一方向的連接,收到一個(gè)FIN只是意味著這一方向上沒有數(shù)據(jù)流動(dòng)了,即不會(huì)再收到數(shù)據(jù)了,但是在這個(gè)TCP連接上仍然能夠發(fā)送數(shù)據(jù),直到這一方向也發(fā)送了FIN。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方則執(zhí)行被動(dòng)關(guān)閉shell用過嗎?python用過嗎

Shell本身是一個(gè)用C語言編寫的程序,它是用戶使用Linux的橋梁。Shell既是一種命令語言,又是一種程序設(shè)計(jì)語言。作為命令語言,它交互式地解釋和執(zhí)行用戶輸入的命令;作為程序設(shè)計(jì)語言,它定義了各種變量和參數(shù),并提供了許多在高級(jí)語言中才具有的控制結(jié)構(gòu),包括循環(huán)和分支。Shell有兩種執(zhí)行命令的方式:?交互式(Interactive):解釋執(zhí)行用戶的命令,用戶輸入一條命令,Shell就解釋執(zhí)行一條。

?批處理(Batch):用戶事先寫一個(gè)Shell腳本(Script),其中有很多條命令,讓Shell一次把這些命令執(zhí)行完,而不必一條一條地敲命令。Python是一種開放源代碼的腳本編程語言,這種腳本語言特別強(qiáng)調(diào)開發(fā)速度和代碼的清晰程度。它可以用來開發(fā)各種程序,從簡單的腳本任務(wù)到復(fù)雜的、面向?qū)ο蟮膽?yīng)用程序都有大顯身手的地方。Python還被當(dāng)作一種入門程序員最適合掌握的優(yōu)秀語言,因?yàn)樗赓M(fèi)、面向?qū)ο?、擴(kuò)展性強(qiáng)同時(shí)執(zhí)行嚴(yán)格的編碼標(biāo)準(zhǔn)。使用java語言將一個(gè)整數(shù)分解成一系列的2的n次冪的和,要求輸出的順序從小到大,分解后的數(shù)目個(gè)數(shù)最小,分解后的數(shù)目個(gè)數(shù)最小

比如:65分解輸出

1

64;51分解輸出1

2

16

32

8、 21、Spring

IOC和AOP簡單介紹下

IOC:

InversionofControl(控制反轉(zhuǎn))是一種設(shè)計(jì)思想,就是容器控制應(yīng)用程序所需要外部資源的創(chuàng)建和管理,然后將其反轉(zhuǎn)給應(yīng)用程序。對(duì)象及其依賴對(duì)象的創(chuàng)建及維護(hù)都不需要在應(yīng)用程序中實(shí)現(xiàn),將其交給IOC容器去管理。對(duì)于IOC而言,它強(qiáng)調(diào)是將主動(dòng)變?yōu)楸粍?dòng),由IOC容器來負(fù)責(zé)依賴對(duì)象的創(chuàng)建和查找,由IOC容器來進(jìn)行注入組合對(duì)象,我們只需要在相關(guān)的配置文件中維護(hù)對(duì)象之間的依賴關(guān)系即可。AOP利用一種稱為“橫切”的技術(shù),剖解開封裝的對(duì)象內(nèi)部,將那些影響多個(gè)類的公共行為封裝到一個(gè)可重用模塊,并將其名為方面(Aspect)。所謂“方面”,簡單地說,就是將那些與業(yè)務(wù)無關(guān),卻為業(yè)務(wù)模塊所共同調(diào)用的邏輯封裝起來的部分。以便于減少系統(tǒng)的重復(fù)代碼,降低模塊間的耦合度,并有利于系統(tǒng)維護(hù)。jdk1.5以后出來的并發(fā)包了解嗎?介紹lock接口的signal與notify區(qū)別,wait與await()區(qū)別CyclicBarrier是JDK5中\(zhòng)o"JavaSE知識(shí)庫"Java.util.Concurrent包中提出的同步類。CyclicBarrier可以用來等待子任務(wù)都完成后執(zhí)行最后的任務(wù)。所有的線程等待其它線程到達(dá)Barrier。CyclicBarrier初始化時(shí)指定需要等待的線程數(shù),通過調(diào)用CyclicBarrier.await()方法,所有線程阻塞等待直到都調(diào)用了await()方法。(1).lock不再用synchronize把同步代碼包裝起來;

(2).阻塞需要另外一個(gè)對(duì)象condition;

(3).同步和喚醒的對(duì)象是condition而不是lock,對(duì)應(yīng)的方法是await和signal,而不是wait和notify。如何解決閉環(huán)的鏈表(快慢指針或者mark換效率)

生產(chǎn)者消費(fèi)問題實(shí)現(xiàn)(1)wait()/nofity()方法是基類Object的兩個(gè)方法,也就意味著所有Java類都會(huì)擁有這兩個(gè)方法,這樣,我們就可以為任何對(duì)象實(shí)現(xiàn)同步機(jī)制。wait()方法:當(dāng)緩沖區(qū)已滿/空時(shí),生產(chǎn)者/消費(fèi)者線程停止自己的執(zhí)行,放棄鎖,使自己處于等等狀態(tài),讓其他線程執(zhí)行。notify()方法:當(dāng)生產(chǎn)者/消費(fèi)者向緩沖區(qū)放入/取出一個(gè)產(chǎn)品時(shí),向其他等待的線程發(fā)出可執(zhí)行的通知,同時(shí)放棄鎖,使自己處于等待狀態(tài)。(2)在JDK5.0之后,Java提供了更加健壯的線程處理機(jī)制,包括同步、鎖定、線程池等,它們可以實(shí)現(xiàn)更細(xì)粒度的線程控制。await()和signal()就是其中用來做同步的兩種方法,它們的功能基本上和wait()/nofity()相同,完全可以取代它們,但是它們和新引入的鎖定機(jī)制Lock直接掛鉤,具有更大的靈活性。通過在Lock對(duì)象上調(diào)用newCondition()方法,將條件變量和一個(gè)鎖對(duì)象進(jìn)行綁定,進(jìn)而控制并發(fā)程序訪問競爭資源的安全。數(shù)據(jù)結(jié)構(gòu)了解嗎?HashMap實(shí)現(xiàn)原理?

數(shù)據(jù)結(jié)構(gòu)主要指邏輯結(jié)構(gòu)和物理結(jié)構(gòu);數(shù)據(jù)之間的相互關(guān)系稱為邏輯結(jié)構(gòu)。通常分為四類基本結(jié)構(gòu):集合結(jié)構(gòu)中的數(shù)據(jù)元素除了同屬于一種類型外,別無其它關(guān)系。線性結(jié)構(gòu)結(jié)構(gòu)中的數(shù)據(jù)元素之間存在一對(duì)一的關(guān)系。樹型結(jié)構(gòu)結(jié)構(gòu)中的數(shù)據(jù)元素之間存在一對(duì)多的關(guān)系。圖狀結(jié)構(gòu)或網(wǎng)狀結(jié)構(gòu)結(jié)構(gòu)中的數(shù)據(jù)元素之間存在多對(duì)多的關(guān)系HashMap結(jié)構(gòu)的實(shí)現(xiàn)原理是將put進(jìn)來的key-value封裝成一個(gè)Entry對(duì)象存儲(chǔ)到一個(gè)Entry數(shù)組中,位置(數(shù)組下標(biāo))由key的哈希值與數(shù)組長度計(jì)算而來。如果數(shù)組當(dāng)前下標(biāo)已有值,則將數(shù)組當(dāng)前下標(biāo)的值指向新添加的Entry對(duì)象。hibernate

orm的實(shí)現(xiàn)原理(xml解析,反射調(diào)用javaBean方法)

在使用它實(shí)現(xiàn)ORM功能的時(shí)候,主要的文件有:映射類(*.java)、映射文件

(*.hbm.xml)以及數(shù)據(jù)庫配置文件(*.properties或*.cfg.xml),它們各自的

作用如下。

⑴映射類:它的作用是描述數(shù)據(jù)庫表的結(jié)構(gòu),表中的字段在類中被描述成屬性,

將來就可以實(shí)現(xiàn)把表中的記錄映射成為該類的對(duì)象。

⑵映射文件:它的作用是指定數(shù)據(jù)庫表和映射類之間的關(guān)系,包括映射類和數(shù)據(jù)

庫表的對(duì)應(yīng)關(guān)系、表字段和類屬性類型的對(duì)應(yīng)關(guān)系以及表字段和類屬性名稱的對(duì)

應(yīng)關(guān)系等。

⑶數(shù)據(jù)庫配置文件:它的作用是指定與數(shù)據(jù)庫連接時(shí)需要的連接信息,比如連接

哪中數(shù)據(jù)庫、登錄用戶名、登錄密碼以及連接字符串等。對(duì)http協(xié)議了解嗎?get,post,put,delete使用場景以及http1.1與1.0區(qū)別(長短連接)

http叫超文本傳輸協(xié)議,是一個(gè)基于請(qǐng)求與響應(yīng)模式的、無狀態(tài)的、應(yīng)用層的協(xié)議,?;赥CP的連接方式,HTTP1.1版本中給出一種持續(xù)連接的機(jī)制,絕大多數(shù)的Web開發(fā),都是構(gòu)建在HTTP協(xié)議之上的Web應(yīng)用。GET:請(qǐng)求指定的頁面信息,并返回實(shí)體主體。

POST:請(qǐng)求服務(wù)器接受所指定的文檔作為對(duì)所標(biāo)識(shí)的URI的新的從屬實(shí)體。

PUT:從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。

DELETE:請(qǐng)求服務(wù)器刪除指定的頁面1,HTTP/1.0協(xié)議使用非持久連接,即在非持久連接下,一個(gè)tcp連接只傳輸一個(gè)Web對(duì)象,;

2,HTTP/1.1默認(rèn)使用持久連接(然而,HTTP/1.1協(xié)議的客戶機(jī)和服務(wù)器可以配置成使用非持久連接)。在持久連接下,不必為每個(gè)Web對(duì)象的傳送建立一個(gè)新的連接,一個(gè)連接中可以傳輸多個(gè)對(duì)象!介紹下你的項(xiàng)目,sql常用的優(yōu)化技巧(結(jié)構(gòu)優(yōu)化,索引優(yōu)化,sql優(yōu)化)

(1)不要在建立的索引的數(shù)據(jù)列上進(jìn)行下列操作:

避免對(duì)索引字段進(jìn)行計(jì)算操作

避免在索引字段上使用not,<>,!=

避免在索引列上使用ISNULL和ISNOTNULL

避免在索引列上出現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換

避免在索引字段上使用函數(shù)

避免建立索引的列中使用空值

(2)SELECT子句中避免使用’*’(3)使用表的別名(Alias)(4)ORACLE采用自下而上的順序解析WHERE子句,根據(jù)這個(gè)原理,表之間的連接必須寫在其他WHERE條件之前,那些可以過濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾談?wù)勀銓?duì)分布式和cluster的理解

所謂分布式計(jì)算是一門計(jì)算機(jī)科學(xué),它研究如何把一個(gè)需要非常巨大的計(jì)算能力才能解決的問題分成許多小的部分,然后把這些部分分配給許多計(jì)算機(jī)進(jìn)行處理,最后把這些計(jì)算結(jié)果綜合起來得到最終的結(jié)果。簇(cluster),我們知道磁盤是由一個(gè)一個(gè)扇區(qū)組成的,若干個(gè)扇區(qū)合為一個(gè)簇,文件存取是以簇為單位的,哪怕這個(gè)文件只有1個(gè)字節(jié)。每個(gè)簇在文件分配表中都有對(duì)應(yīng)的表項(xiàng),簇號(hào)即為表項(xiàng)號(hào),每個(gè)表項(xiàng)占1.5個(gè)字節(jié)(磁盤空間在10MB以下)或2個(gè)字節(jié)(磁盤空間在10MB以上)。介紹jvm內(nèi)存模型和垃圾回收機(jī)制(棧幀,堆,方法區(qū),分代回收機(jī)制)

JVM內(nèi)存模型1.棧

Java棧是與每個(gè)線程關(guān)聯(lián)的,JVM在創(chuàng)建每一個(gè)線程的時(shí)候,會(huì)分配一定的??臻g給線程.存儲(chǔ)局部變量,引用,方法,返回值等.StackOverflowError:如果在線程執(zhí)行的過程中,??臻g不夠用,那么JVM就會(huì)拋出此異常,這種情況一般是死遞歸造成的.2.堆

JVM堆一般分為三個(gè)部分:

(1).Young:年輕代Young區(qū)被分為三個(gè)部分,Eden區(qū)和兩個(gè)大小嚴(yán)格相同的Survivor區(qū),其中Survivor區(qū)間中,某一時(shí)刻只有其中一個(gè)是被使用的,另外一個(gè)留做垃圾收集時(shí)復(fù)制對(duì)象用,在Young區(qū)間變滿的時(shí)候,minorGC就會(huì)將存活的對(duì)象一到空閑的Survivor區(qū)間中,根據(jù)JVM的策略,在經(jīng)過幾次垃圾收集后,仍然存活于Suvivor的對(duì)象被移動(dòng)到Tenured區(qū)間.(2)Tenured:老年代Tenured區(qū)主要保存生命周期長的對(duì)象,一般是一些老的對(duì)象,當(dāng)一些對(duì)象在Young復(fù)制轉(zhuǎn)移一定的次數(shù)以后,對(duì)象就會(huì)被轉(zhuǎn)移到Tenured區(qū),一般如果系統(tǒng)中用了application級(jí)別的緩存,緩存中的對(duì)象往往會(huì)被轉(zhuǎn)移到這一區(qū)間.(3)Perm持久代:

Perm代主要保存class,method,filed等對(duì)象,這部分空間一般不會(huì)溢出.\o"JavaSE知識(shí)庫"Java.lang.OutofMemoryError:PermGenspace的錯(cuò)誤,造成這個(gè)錯(cuò)誤的很大原因就是可能每次都重新部署,但重新部署后,類的class沒有被卸載掉,這樣就造成了大量class對(duì)象保存在了perm中,這種情況下,一般重新啟動(dòng)應(yīng)用服務(wù)器可以解決問題.3.堆的大小

-Xmx:指定JVM堆得最大內(nèi)存,在JVM啟動(dòng)以后,會(huì)分配-Xmx參數(shù)指定大小的內(nèi)存給JVM,但是不一定全部使用,JVM會(huì)根據(jù)-Xms參數(shù)來調(diào)節(jié)真正用于JVM的內(nèi)存

-Xms:指定了JVM初始啟動(dòng)以后初始化內(nèi)存

-Xmx-Xms之差就是三個(gè)Virtual空間的總大?。贻p代、年老代、持久代)JVM垃圾回收機(jī)制分代垃圾回收

不同的對(duì)象生命周期不同,與業(yè)務(wù)信息有關(guān)的對(duì)象生命周期較長,如Http請(qǐng)求中的Session對(duì)象,線程,socket連接.程序運(yùn)行過程中的臨時(shí)變量生命周期較短,如String對(duì)象.

把不同生命周期的對(duì)象放在不同代上,不同代上采用最合適它的垃圾回收方式進(jìn)行回收。JVM中共劃分為三個(gè)代:年輕代、年老代和持久代,其中持久代主要存放Java類的類信息,與垃圾收集要收集的Java對(duì)象關(guān)系不大,年輕代和年老代的劃分是對(duì)垃圾收集影響較大的。

年輕代:存放所有新生的對(duì)象

年老代:在年輕代中經(jīng)歷了N次垃圾回收仍然存活的對(duì)象,將被放到年老代中,故都是一些生命周期較長的對(duì)象;

持久代:用于存放靜態(tài)文件,如Java類,方法等,(持久代對(duì)垃圾回收沒有顯著影響,但是有些應(yīng)用可能動(dòng)態(tài)生成或者調(diào)用一些class,例如Hibernate等,在這種時(shí)候需要設(shè)置一個(gè)比較大的持久代空間來存放這些運(yùn)行過程中新增的類)

新生代的垃圾收集器命名為"minorGC",l老生代的GC命名為"fullGC"或"MajorGC",其中用System.gc()強(qiáng)制執(zhí)行的是FullGC.對(duì)CMS回收了解嗎?

CMS(ConcurrentMark-Sweep)是以犧牲吞吐量為代價(jià)來獲得最短回收停頓時(shí)間的垃圾回收器。對(duì)于要求服務(wù)器響應(yīng)速度的應(yīng)用上,這種垃圾回收器非常適合。在啟動(dòng)JVM參數(shù)加上-XX:+UseConcMarkSweepGC

,這個(gè)參數(shù)表示對(duì)于老年代的回收采用CMS。CMS采用的基礎(chǔ)\o"算法與數(shù)據(jù)結(jié)構(gòu)知識(shí)庫"算法是:標(biāo)記—清除。String的引用在哪里,對(duì)象在哪里

在java中引用也是對(duì)象。(1)堆棧:一般存儲(chǔ)引用和基本類型變量,堆棧主要是通過堆棧指針上下移動(dòng)來對(duì)內(nèi)存進(jìn)行分配和釋放?;绢愋妥兞坎⒉贿m應(yīng)于new進(jìn)行創(chuàng)建,因?yàn)槠渌嫉膬?nèi)存較小。(2)堆:用于存儲(chǔ)java對(duì)象,當(dāng)程序執(zhí)行new的時(shí)候,堆就會(huì)分配一個(gè)空間給這個(gè)對(duì)象,記住堆進(jìn)行內(nèi)存的分配和釋放是比堆棧進(jìn)行存儲(chǔ)和釋放內(nèi)存消耗更多的時(shí)間,這就是基本類型變量要存在堆棧中了,因?yàn)榛绢愋妥兞渴怯玫淖铑l繁的,頻繁的存儲(chǔ)和釋放內(nèi)存,在消耗更多的時(shí)候,性能可想而知的說說redis的數(shù)據(jù)類型(String

list

set

lset)

(1)全局key操作(2)String(字符串)(3)Hashes類型:(map)(4)List類型(5)set類型(6)Sorted-Sets類型為什么要使用緩存?

緩存離客戶端更近,因此,從緩存請(qǐng)求內(nèi)容比從源服務(wù)器所用時(shí)間更少,呈現(xiàn)速度更快,網(wǎng)站就顯得更靈敏。在實(shí)際項(xiàng)目中如何解決并發(fā)問題,并發(fā)和并行的區(qū)別?

大型網(wǎng)站,比如門戶網(wǎng)站,在面對(duì)大量用戶訪問、高并發(fā)請(qǐng)求方面,基本的解決方案集中在這樣幾個(gè)環(huán)節(jié):使用高性能的服務(wù)器、高性能的數(shù)據(jù)庫、高效率的編程語言、還有高性能的Web容器。HTML靜態(tài)化、圖片服務(wù)器分離、數(shù)據(jù)庫集群、庫表散列、緩存、鏡像、負(fù)載均衡、CDN加速技術(shù)。并發(fā)與并行是兩個(gè)既相似而又不相同的概念:并發(fā)性,又稱共行性,是指能處理多個(gè)同時(shí)性活動(dòng)的能力;并行是指同時(shí)發(fā)生的兩個(gè)并發(fā)事件,具有并發(fā)的含義,而并發(fā)則不一定并行,也亦是說并發(fā)事件之間不一定要同一時(shí)刻發(fā)生。并發(fā)的實(shí)質(zhì)是一個(gè)物理CPU(也可以多個(gè)物理CPU)在若干道程序之間多路復(fù)用,并發(fā)性是對(duì)有限物理資源強(qiáng)制行使多用戶共享以提高效率。并行性指兩個(gè)或兩個(gè)以上事件或活動(dòng)在同一時(shí)刻發(fā)生。在多道程序環(huán)境下,并行性使多個(gè)程序同一時(shí)刻可在不同CPU上同時(shí)執(zhí)行。運(yùn)行時(shí)異常和一般異常有何異同Java提供了兩類主要的異常:運(yùn)行時(shí)異常runt

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論