国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

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

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

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

556.用Java怎么實現(xiàn)有每天有1億條記錄的DB儲存?MySQL上億記錄數(shù)據(jù)量的數(shù)據(jù)庫如何設(shè)計?

1.這么大數(shù)據(jù)量首先建議 使用大數(shù)據(jù)的DB,可以用spring batch 來做類似這樣的處理。定量向DB存儲數(shù)據(jù)。如果需要定時,可以考慮 quartz。

Mysql數(shù)據(jù)庫設(shè)計:

1.讀寫分離;

2.縱向橫向拆分庫、表。

MySQL的基本功能中包括replication(復(fù)制)功能。所謂replication,就是確定master以及與之同步的slave服務(wù)器,再加上slave將master中寫入的內(nèi)容polling過來更新自身內(nèi)容的功能。這樣slave就是master的replica(復(fù)制品)。這樣就可以準備多臺內(nèi)容相同的服務(wù)器。

通過master和salve的replication,準備好多臺服務(wù)器之后,讓應(yīng)用程序服務(wù)器通過負載均衡器去處理查詢slave。這樣就能將查詢分散到多臺服務(wù)器上。

應(yīng)用程序?qū)崿F(xiàn)上應(yīng)該只把select等讀取之類的查詢發(fā)送給負載均衡器,而更新應(yīng)當(dāng)直接發(fā)送給master。要是在slave上執(zhí)行更新操作,slave和master的內(nèi)容就無法同步。MySQL會檢測到master和slave之間內(nèi)容差異,并停止replication,這回導(dǎo)致系統(tǒng)故障。Slave可以采用LVS(linux系統(tǒng)自帶的負載均衡器)實現(xiàn)查詢的負載均衡。

使用MySQL的replication是利用的冗余化,實現(xiàn)冗余化需要實現(xiàn)的最小服務(wù)器數(shù)量是4臺,三臺slave和一臺master,slave為什么是需要三臺呢,比如一臺slave死機了,現(xiàn)在需要修復(fù)再次上線,那么意味著你必須停止一臺slave來復(fù)制MySQL的數(shù)據(jù),如果只有兩臺slave,一臺壞了,你就必須停止服務(wù),如果有三臺,壞了一臺,你復(fù)制數(shù)據(jù)時停止一臺,還有一臺可以運維。

對于數(shù)據(jù)的處理是能放入到內(nèi)存中就盡量放入到內(nèi)存中如果不能放入到內(nèi)存中,可以利用MySQL的Partitioning。

Partitioning就是表分割也就是講A表和B表放在不同的服務(wù)器上。簡單來說,Partitioning就是充分利用局部性進行分割,提高緩存利用效率,從而實現(xiàn)Partitioning的效果。其中最重要的一點就是以Partitioning為前提設(shè)計的系統(tǒng)將表分割開,用RDBMS的方式的話,對于一對多的關(guān)系經(jīng)常使用JOIN查詢將兩張表連接起來。但是如果將表分割開了之后,也就是兩張表不在同一個數(shù)據(jù)庫,不在同一個服務(wù)器上怎樣使用JOIN操作,這里需要注意的是如果是用where in操作不是省了一些麻煩了嘛。

557.Mysql的引擎有哪些?支持事物么?DB儲存引擎有哪些?

MySQL有多種存儲引擎,每種存儲引擎有各自的優(yōu)缺點,可以擇優(yōu)選擇使用:

MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。

MySQL支持數(shù)個存儲引擎作為對不同表的類型的處理器。MySQL存儲引擎包括處理事務(wù)安全表的引擎和處理非事務(wù)安全表的引擎。

· MyISAM管理非事務(wù)表。它提供高速存儲和檢索,以及全文搜索能力。MyISAM在所有MySQL配置里被支持,它是默認的存儲引擎,除非你配置MySQL默認使用另外一個引擎。

· MEMORY存儲引擎提供“內(nèi)存中”表。MERGE存儲引擎允許集合將被處理同樣的MyISAM表作為一個單獨的表。就像MyISAM一樣,MEMORY和MERGE存儲引擎處理非事務(wù)表,這兩個引擎也都被默認包含在MySQL中。

注釋:MEMORY存儲引擎正式地被確定為HEAP引擎。

· InnoDB和BDB存儲引擎提供事務(wù)安全表。BDB被包含在為支持它的操作系統(tǒng)發(fā)布的MySQL-Max二進制分發(fā)版里。InnoDB也默認被包括在所 有MySQL 5.1二進制分發(fā)版里,你可以按照喜好通過配置MySQL來允許或禁止任一引擎。

· EXAMPLE存儲引擎是一個“存根”引擎,它不做什么。你可以用這個引擎創(chuàng)建表,但沒有數(shù)據(jù)被存儲于其中或從其中檢索。這個引擎的目的是服務(wù),在 MySQL源代碼中的一個例子,它演示說明如何開始編寫新存儲引擎。同樣,它的主要興趣是對開發(fā)者。

· NDB Cluster是被MySQL Cluster用來實現(xiàn)分割到多臺計算機上的表的存儲引擎。它在MySQL-Max 5.1二進制分發(fā)版里提供。這個存儲引擎當(dāng)前只被Linux, Solaris, 和Mac OS X 支持。在未來的MySQL分發(fā)版中,我們想要添加其它平臺對這個引擎的支持,包括Windows。

· ARCHIVE存儲引擎被用來無索引地,非常小地覆蓋存儲的大量數(shù)據(jù)。

· CSV存儲引擎把數(shù)據(jù)以逗號分隔的格式存儲在文本文件中。

· BLACKHOLE存儲引擎接受但不存儲數(shù)據(jù),并且檢索總是返回一個空集。

· FEDERATED存儲引擎把數(shù)據(jù)存在遠程數(shù)據(jù)庫中。在MySQL 5.1中,它只和MySQL一起工作,使用MySQL C Client API。在未來的分發(fā)版中,我們想要讓它使用其它驅(qū)動器或客戶端連接方法連接到另外的數(shù)據(jù)源。

558.以下是學(xué)生考試結(jié)果表

fnamekechengfenshu張三語文81張三數(shù)學(xué)65李四語文76李四數(shù)學(xué)90王五語文61王五數(shù)學(xué)100王五英語90

1.請用一條sql語句從t_result表中查詢出每門課都大于75分的學(xué)生姓名;

select b.fname from
(select fname,count(kecheng) c from t_result group by fname)a,
(Select fname,kecheng,count(fname) c from t_result where fenshu >75 group by fname)b
where a.fname = b.fname and a.c = b.c

2.請用一條sql寫出總分排名前三的學(xué)生姓名,總分,平均分

select fname,sum(fenshu),avg(fenshu) from t_result GROUP By fname order by SUM(fenshu) desc;

559.庫中已經(jīng)存在雇用表表名:

org_employee;表中字段:雇員編號(emp_id),雇員姓名(em_name),雇員年齡(emp_age),雇員部門(depart_name);請寫出執(zhí)行以下操作的sql語句:

1)向表中增加一條數(shù)據(jù):雇員編號(1001),雇員姓名(張三),雇員年齡(24),雇員部門(研發(fā)部);

INSERT INTO org_employee

VALUES(‘1001’,’張三’,’24’,’研發(fā)部’);

2)查詢雇員年齡在55(包含)至60(不包含)歲之間的雇員數(shù)據(jù)

SELECT * FROM org_employee

WHERE emp_age>=55 and emp_age <60;

3)分部門查詢各個部門的雇員數(shù)量

SELECT COUNT(*),depart_name group by depart_name;

4)刪除姓名為張三的雇員數(shù)據(jù)

Delete from org_employee where em_name =’張三’;

5)在表中增加一個日期類型的字段雇員出生日期,字段為emp_brithday

Alter table org_employee add(emp_brithday date);

6)將表org_employee刪除

drop org_employee;


560.如下表1中的數(shù)據(jù),表名為:t_test,記錄某場比賽的結(jié)果。

請用sql語句實現(xiàn)表2的查詢結(jié)果

表1

IDmatchdateresult12015-02-04勝22015-02-04負32015-02-04勝42015-04-07勝52015-04-07勝62015-04-07勝

表2

比賽日期勝負2015-02-04212015-04-0712

SQL語句:


561.請將如下數(shù)據(jù)庫語句進行優(yōu)化,使其執(zhí)行效率更高(提示:…不需要更改)


優(yōu)化的理由:not in 和not exists

如果查詢語句使用了not in 那么內(nèi)外表都進行全表掃描,沒有用到索引;

而not extsts 的子查詢依然能用到表上的索引。所以無論那個表大,用not exists 都比not in 要快。

562.請簡述如何將Oracle中的數(shù)據(jù)庫轉(zhuǎn)至DB2中,需要保證表結(jié)構(gòu)和數(shù)據(jù)不變

使用ETL工具,如infomatic,datastage,kettle等,可以完成異構(gòu)數(shù)據(jù)庫的遷移

以kettle為例

表輸入選擇 oracle庫

表輸出選擇DB庫

循環(huán)執(zhí)行可以進行全庫遷移

563.學(xué)生成績表

姓名:name課程:subject分數(shù):score學(xué)號:stuid張三數(shù)學(xué)891張三語文801張三英語701李四數(shù)學(xué)902李四語文702李四英語802

1.計算每個人的總成績并排名(要求顯示字段:姓名,總成績)

select name,sum(score) s from t_stu GROUP BY name;

2.列出各門課程成績最好的學(xué)生(要求顯示字段:學(xué)號,姓名,科目,成績)

select t1.stuid,t1.name,t1.subject,t1.score from t_stu t1,

(select subject,MAX(score) as maxscore from t_stu group by subject)t2

where t1.subject = t2.subject and t1.score = t2.maxscore;

3.列出各個課程的平均成績(要求顯示字段;課程,平均成績)

select subject,AVG(score)平均成績 from t_stu

group by subject;

564.Oracl數(shù)據(jù)庫中有兩張表Stu(學(xué)生表)和Grade(分數(shù)表),如下圖所示:

Stu表

sid(學(xué)生ID)sname(姓名)sage(年齡)1張三232李四253王五24

Grade表

gid(分數(shù)主鍵)cid(課程ID)sid(學(xué)生主鍵)grade(分數(shù))123862227931280411815137062178

請寫sql統(tǒng)計出有兩門以上的課的分數(shù)在80分以上的學(xué)生的姓名和年齡?

Select sname,sage from Stu where Stu.sid in (

Select sid from Grade where grade >80

)

565.下面是學(xué)生表(Student)的結(jié)構(gòu)說明:

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

下面是教師表(Teacher )的結(jié)構(gòu)說明

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

下面是課程表(Course)的結(jié)構(gòu)說明

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

下面是成績表(SC)的結(jié)構(gòu)說明

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

查詢同名同姓學(xué)生名單,并統(tǒng)計同名人數(shù)

select 姓名,count(學(xué)號) as num

from 學(xué)生表

group by 姓名

having count(學(xué)號)>1 --保證查找到的都是存在2個以上(包括2)的同名同姓的姓名及人數(shù)。

查詢平均成績大于60分的學(xué)生的學(xué)號和平均成績;

Select s_id,avg(score) from sc groupby s_id having avg(score)>60

查詢姓“李”的老師的個數(shù);

Select count(*),teacher.t_name from teacher where teacher.t_name like '李%'

566.取出sql表中低31到40的記錄(以自動增長ID為主鍵)

Sql server方案:

select top 10 * from t where id not in

(select top 30 id from t order by id ) orde by id

Mysql方案:select * from t order by id limit 30,10

Oracle方案:

select rownum num,tid from (select rownum num,tid from t_test) where num>=30 and num<=41;

567.下列兩個表,需要用一條sql語句把b表中的ID和NAME 字段的數(shù)值復(fù)制到A表中

A表

IDNAME

B表

IDNAMEOTHER1AaaDdd2BbbEee

insert into a select id,name from b;

568.什么是基本表,什么是視圖,兩者的區(qū)別和聯(lián)系是什么?

它是從一個或幾個基本表中導(dǎo)出的 表,是從現(xiàn)有基本表中抽取若干子集組成用戶的“專用表”。

基本表:基本表的定義指建立基本關(guān)系模式,
而變更則是指對數(shù)據(jù)庫中已存在的基本表進行刪除與修改。
區(qū)別:
1、視圖是已經(jīng)編譯好的sql語句。而表不是
2、視圖沒有實際的物理記錄。而表有。
3、表是內(nèi)容,視圖是窗口
4、表只用物理空間而視圖不占用物理空間,
視圖只是邏輯概念的存在,表可以及時對它進行修改,
但視圖只能有創(chuàng)建的語句來修改
5、表是內(nèi)模式,試圖是外模式
6、視圖是查看數(shù)據(jù)表的一種方法,
可以查詢數(shù)據(jù)表中某些字段構(gòu)成的數(shù)據(jù),
只是一些SQL語句的集合。從安全的角度說,
視圖可以不給用戶接觸數(shù)據(jù)表,從而不知道表結(jié)構(gòu)。
7、表屬于全局模式中的表,是實表;視圖屬于局部模式的表,
是虛表。
8、視圖的建立和刪除只影響視圖本身,不影響對應(yīng)的基本表。
聯(lián)系:視圖(view)是在基本表之上建立的表,它的結(jié)構(gòu)(
即所定義的列)和內(nèi)容(即所有數(shù)據(jù)行)都來自基本表,
它依據(jù)基本表存在而存在。一個視圖可以對應(yīng)一個基本表,
也可以對應(yīng)多個基本表。
視圖是基本表的抽象和在邏輯意義上建立的新關(guān)系


569.什么是事務(wù)?什么是鎖?

事務(wù)與鎖是不同的。事務(wù)具有ACID(原子性、一致性、隔離性和持久性),鎖是用于解決隔離性的一種機制。事務(wù)的隔離級別通過鎖的機制來實現(xiàn)。另外鎖有不同的粒度,同時事務(wù)也是有不同的隔離級別的(一般有四種:讀未提交Read uncommitted,
讀已提交Read committed,
可重復(fù)讀Repeatable read,
可串行化Serializable)。
在具體的程序設(shè)計中,開啟事務(wù)其實是要數(shù)據(jù)庫支持才行的,如果數(shù)據(jù)庫本身不支持事務(wù),那么仍然無法確保你在程序中使用的事務(wù)是有效的。
鎖可以分為樂觀鎖和悲觀鎖:
悲觀鎖:認為在修改數(shù)據(jù)庫數(shù)據(jù)的這段時間里存在著也想修改此數(shù)據(jù)的事務(wù);
樂觀鎖:認為在短暫的時間里不會有事務(wù)來修改此數(shù)據(jù)庫的數(shù)據(jù);
我們一般意義上講的鎖其實是指悲觀鎖,在數(shù)據(jù)處理過程中,將數(shù)據(jù)置于鎖定狀態(tài)(由數(shù)據(jù)庫實現(xiàn))
如果開啟了事務(wù),在事務(wù)沒提交之前,別人是無法修改該數(shù)據(jù)的;如果rollback,你在本次事務(wù)中的修改將撤消(不是別人修改的會沒有,因為別人此時無法修改)。當(dāng)然,前提是你使用的數(shù)據(jù)庫支持事務(wù)。還有一個要注意的是,部分數(shù)據(jù)庫支持自定義SQL鎖覆蓋事務(wù)隔離級別默認的鎖機制,如果使用了自定義的鎖,那就另當(dāng)別論。
重點:一般事務(wù)使用的是悲觀鎖(具有排他性)

570.Student學(xué)生表(學(xué)號,姓名、性別、年齡、組織部門),Course 課程表(編號,課程名稱),Sc選課表(學(xué)號,課程編號,成績)

寫一個SQL語句,查詢選修了計算機原理的學(xué)生學(xué)號和姓名
select 學(xué)號,姓名 from Student where 學(xué)號 in
(select 學(xué)號 from Sc where 課程編號 in
(Select 課程編號 from Course where 課程名稱 = ‘計算機原理’))
寫一個SQL語句,查詢“周星馳”同學(xué)選修了的課程名字
select 課程名稱 from Course where 編號 in (
select Sc.課程編號 from Student,Sc where Student.姓名=’周星馳’ and Student.學(xué)號 = Sc.學(xué)號)
寫一個SQL語句,查詢選修了5門課程的學(xué)生學(xué)號和姓名
Select 學(xué)號,姓名 from Student where 學(xué)號 in (
Select 學(xué)號,count(課程編號) from Sc group by 學(xué)號 having count(課程編號)>=5)

571.sql查詢

Student(S#,Sname,Sage,Ssex)學(xué)生表
S#:學(xué)號
Sname:學(xué)生姓名
Sage:學(xué)生年齡
Ssex: 學(xué)生性別
Course(C#,Cname,T#)課程表
C#,課程編號;
Cname:課程名字;
T#:教師編號;
SC(S#,C#,score)成績表
S#:學(xué)號;
C#,課程編號;
Score:成績;
Teacher(T#,Tname)教師表
T#:教師編號;
Tname:教師名字
查詢“001”課程比“002”課程成績高的所有學(xué)生學(xué)號
select SC1.S#
from SC SC1 JOIN SC SC2 ON SC1.S#=SC2.S#
WHERE SC1.C#='001' AND SC2.C#='002' AND SC1.score>SC2.score
查詢平均成績大于60分的同學(xué)的學(xué)號和平均成績
select S#,AVG(score) 平均成績
from SC
group by S#
having AVG(score)>60
查詢所有同學(xué)的學(xué)號、姓名、選課數(shù)、總成績
select Student.S#,Sname,COUNT(*) 選課數(shù),SUM(score) 總成績
from Student JOIN SC on Student.S#=SC.S#
group by Student.S#,Sname
查詢姓“李”的老師的個數(shù)
Select count(*) from Teacher where Tname like ‘李%’;
查詢沒學(xué)過“葉平”老師課的同學(xué)的學(xué)號、姓名
SELECT stu2.s#,stu2.stuname FROM Student stu2 WHERE stu2.s# NOT IN
(SELECT DISTINCT stu.s# FROM student stu, course c,teacher tea,score score
WHERE stu.s#= score.s# AND course.c#= score.c#
AND tea.t#= course.t#AND tea.tname= '葉平' )

JVM

572.簡述Java內(nèi)存管理機制,以及垃圾回收的原理和使用過Java調(diào)優(yōu)工具

內(nèi)存管理的職責(zé)為分配內(nèi)存,回收內(nèi)存。 沒有自動內(nèi)存管理的語言/平臺容易發(fā)生錯誤。

典型的問題包括懸掛指針問題,一個指針引用了一個已經(jīng)被回收的內(nèi)存地址,導(dǎo)致程序的運行完全不可知。

另一個典型問題為內(nèi)存泄露,內(nèi)存已經(jīng)分配,但是已經(jīng)沒有了指向該內(nèi)存的指針,導(dǎo)致內(nèi)存泄露。 程序員要花費大量時間在調(diào)試該類問題上。

573.描述JVM加載class文件的原理機制

JVM中類的裝載是由類加載器(ClassLoader)和它的子類來實現(xiàn)的,Java中的類加載器是一個重要的Java運行時系統(tǒng)組件,它負責(zé)在運行時查找和裝入類文件中的類。

由于Java的跨平臺性,經(jīng)過編譯的Java源程序并不是一個可執(zhí)行程序,而是一個或多個類文件。當(dāng)Java程序需要使用某個類時,JVM會確保這個類已經(jīng)被加載、連接(驗證、準備和解析)和初始化。類的加載是指把類的.class文件中的數(shù)據(jù)讀入到內(nèi)存中,通常是創(chuàng)建一個字節(jié)數(shù)組讀入.class文件,然后產(chǎn)生與所加載類對應(yīng)的Class對象。加載完成后,Class對象還不完整,所以此時的類還不可用。當(dāng)類被加載后就進入連接階段,這一階段包括驗證、準備(為靜態(tài)變量分配內(nèi)存并設(shè)置默認的初始值)和解析(將符號引用替換為直接引用)三個步驟。最后JVM對類進行初始化,包括:1)如果類存在直接的父類并且這個類還沒有被初始化,那么就先初始化父類;2)如果類中存在初始化語句,就依次執(zhí)行這些初始化語句。

 類的加載是由類加載器完成的,類加載器包括:根加載器(BootStrap)、擴展加載器(Extension)、系統(tǒng)加載器(System)和用戶自定義類加載器(java.lang.ClassLoader的子類)。從Java 2(JDK 1.2)開始,類加載過程采取了父親委托機制(PDM)。PDM更好的保證了Java平臺的安全性,在該機制中,JVM自帶的Bootstrap是根加載器,其他的加載器都有且僅有一個父類加載器。類的加載首先請求父類加載器加載,父類加載器無能為力時才由其子類加載器自行加載。JVM不會向Java程序提供對Bootstrap的引用。下面是關(guān)于幾個類加載器的說明:

Bootstrap:一般用本地代碼實現(xiàn),負責(zé)加載JVM基礎(chǔ)核心類庫(rt.jar);

Extension:從java.ext.dirs系統(tǒng)屬性所指定的目錄中加載類庫,它的父加載器是Bootstrap;

System:又叫應(yīng)用類加載器,其父類是Extension。它是應(yīng)用最廣泛的類加載器。它從環(huán)境變量classpath或者系統(tǒng)屬性java.class.path所指定的目錄中記載類,是用戶自定義加載器的默認父加載器。

574.說說JVM原理?內(nèi)存泄漏與溢出的區(qū)別?何時產(chǎn)生內(nèi)存泄漏?

答:JVM原理:

JVM是Java Virtual Machine(Java虛擬機)的縮寫,它是整個java實現(xiàn)跨平臺的最核心的部分,所有的Java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執(zhí)行,也就是說class并不直接與機器的操作系統(tǒng)相對應(yīng),而是經(jīng)過虛擬機間接與操作系統(tǒng)交互,由虛擬機將程序解釋給本地系統(tǒng)執(zhí)行。JVM是Java平臺的基礎(chǔ),和實際的機器一樣,它也有自己的指令集,并且在運行時操作不同的內(nèi)存區(qū)域。JVM通過抽象操作系統(tǒng)和CPU結(jié)構(gòu),提供了一種與平臺無關(guān)的代碼執(zhí)行方法,即與特殊的實現(xiàn)方法、主機硬件、主機操作系統(tǒng)無關(guān)。JVM的主要工作是解釋自己的指令集(即字節(jié)碼)到CPU的指令集或?qū)?yīng)的系統(tǒng)調(diào)用,保護用戶免被惡意程序騷擾。JVM對上層的Java源文件是不關(guān)心的,它關(guān)注的只是由源文件生成的類文件(.class文件)。

內(nèi)存泄漏與溢出的區(qū)別:

1) 內(nèi)存泄漏是指分配出去的內(nèi)存無法回收了。

2) 內(nèi)存溢出是指程序要求的內(nèi)存,超出了系統(tǒng)所能分配的范圍,從而發(fā)生溢出。比如用byte類型的變量存儲10000這個數(shù)據(jù),就屬于內(nèi)存溢出。

3) 內(nèi)存溢出是提供的內(nèi)存不夠;內(nèi)存泄漏是無法再提供內(nèi)存資源。

何時產(chǎn)生內(nèi)存泄漏:

1) 靜態(tài)集合類:在使用Set、Vector、HashMap等集合類的時候需要特別注意,有可能會發(fā)生內(nèi)存泄漏。當(dāng)這些集合被定義成靜態(tài)的時候,由于它們的生命周期跟應(yīng)用程序一樣長,這時候,就有可能會發(fā)生內(nèi)存泄漏。

2) 監(jiān)聽器:在Java中,我們經(jīng)常會使用到監(jiān)聽器,如對某個控件添加單擊監(jiān)聽器addOnClickListener(),但往往釋放對象的時候會忘記刪除監(jiān)聽器,這就有可能造成內(nèi)存泄漏。好的方法就是,在釋放對象的時候,應(yīng)該記住釋放所有監(jiān)聽器,這就能避免了因為監(jiān)聽器而導(dǎo)致的內(nèi)存泄漏。

3) 各種連接:Java中的連接包括數(shù)據(jù)庫連接、網(wǎng)絡(luò)連接和io連接,如果沒有顯式調(diào)用其close()方法,是不會自動關(guān)閉的,這些連接就不能被GC回收而導(dǎo)致內(nèi)存泄漏。一般情況下,在try代碼塊里創(chuàng)建連接,在finally里釋放連接,就能夠避免此類內(nèi)存泄漏。

4) 外部模塊的引用:調(diào)用外部模塊的時候,也應(yīng)該注意防止內(nèi)存泄漏。如模塊A調(diào)用了外部模塊B的一個方法,如:public void register(Object o)。這個方法有可能就使得A模塊持有傳入對象的引用,這時候需要查看B模塊是否提供了去除引用的方法,如unregister()。這種情況容易忽略,而且發(fā)生了內(nèi)存泄漏的話,比較難察覺,應(yīng)該在編寫代碼過程中就應(yīng)該注意此類問題。

5) 單例模式:使用單例模式的時候也有可能導(dǎo)致內(nèi)存泄漏。因為單例對象初始化后將在JVM的整個生命周期內(nèi)存在,如果它持有一個外部對象(生命周期比較短)的引用,那么這個外部對象就不能被回收,而導(dǎo)致內(nèi)存泄漏。如果這個外部對象還持有其它對象的引用,那么內(nèi)存泄漏會更嚴重,因此需要特別注意此類情況。這種情況就需要考慮下單例模式的設(shè)計會不會有問題,應(yīng)該怎樣保證不會產(chǎn)生內(nèi)存泄漏問題。

575.GC線程是否為守護線程?

GC線程是守護線程。線程分為守護線程和非守護線程(即用戶線程)。只要當(dāng)前JVM實例中尚存在任何一個非守護線程沒有結(jié)束,守護線程就全部工作;只有當(dāng)最后一個非守護線程結(jié)束時,守護線程隨著JVM一同結(jié)束工作。

576.Java的類加載器都有哪些,每個類加載器都有加載那些類,什么是雙親委派模型,是做什么的?

類加載器按照層次,從頂層到底層,分為以下三種:

(1)啟動類加載器(Bootstrap ClassLoader)

這個類加載器負責(zé)將存放在JAVA_HOME/lib下的,或者被-Xbootclasspath參數(shù)所指定的路徑中的,并且是虛擬機識別的類庫加載到虛擬機內(nèi)存中。啟動類加載器無法被Java程序直接引用。

(2)擴展類加載器(Extension ClassLoader)

這個加載器負責(zé)加載JAVA_HOME/lib/ext目錄中的,或者被java.ext.dirs系統(tǒng)變量所指定的路徑中的所有類庫,開發(fā)者可以直接使用擴展類加載器

(3)應(yīng)用程序類加載器(Application ClassLoader)

這個加載器是ClassLoader中g(shù)etSystemClassLoader()方法的返回值,所以一般也稱它為系統(tǒng)類加載器。它負責(zé)加載用戶類路徑(Classpath)上所指定的類庫,可直接使用這個加載器,如果應(yīng)用程序沒有自定義自己的類加載器,一般情況下這個就是程序中默認的類加載器

雙親委派模型:

雙親委派模型要求除了頂層的啟動類加載器外,其他的類加載器都應(yīng)當(dāng)有自己的父類加載器。這里類加載器之間的父子關(guān)系一般不會以繼承關(guān)系來實現(xiàn),而是都使用組合關(guān)系來復(fù)用父加載器的代碼

工作過程:

如果一個類加載器收到了類加載的請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每一個層次的類加載器都是如此,因此所有的加載請求最終都應(yīng)該傳遞到頂層的啟動類加載器中,只有當(dāng)父類加載器反饋自己無法完成這個請求(它的搜索范圍中沒有找到所需的類)時,子加載器才會嘗試自己去加載。

好處:

Java類隨著它的類加載器一起具備了一種帶有優(yōu)先級的層次關(guān)系。例如類Object,它放在rt.jar中,無論哪一個類加載器要加載這個類,最終都是委派給啟動類加載器進行加載,因此Object類在程序的各種類加載器環(huán)境中都是同一個類,判斷兩個類是否相同是通過classloader.class這種方式進行的,所以哪怕是同一個class文件如果被兩個classloader加載,那么他們也是不同的類。

577.垃圾回收器(GC)的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?如何通知虛擬機進行垃圾回收?

1、對于GC來說,當(dāng)程序員創(chuàng)建對象時,GC就開始監(jiān)控這個對象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對象。通過這種方式確定哪些對象是"可達的",哪些對象是"不可達的"。當(dāng)GC確定一些對象為"不可達”時,GC就有責(zé)任回收這些內(nèi)存空間。

2、可以。程序員可以手動執(zhí)行System.gc(),通知GC運行,但是Java語言規(guī)范并不保證GC一定會執(zhí)行。

3. System.gc();或者Runtime.getRuntime().gc();

578.Java 中會存在內(nèi)存泄漏嗎,請簡單描述。

答:理論上Java因為有垃圾回收機制(GC)不會存在內(nèi)存泄露問題(這也是Java被廣泛使用于服務(wù)器端編程的一個重要原因);然而在實際開發(fā)中,可能會存在無用但可達的對象,這些對象不能被GC回收也會發(fā)生內(nèi)存泄露。一個例子就是hibernate的Session(一級緩存)中的對象屬于持久態(tài),垃圾回收器是不會回收這些對象的,然而這些對象中可能存在無用的垃圾對象。下面的例子也展示了Java中發(fā)生內(nèi)存泄露的情況:


上面的代碼實現(xiàn)了一個棧(先進后出(FILO))結(jié)構(gòu),乍看之下似乎沒有什么明顯的問題,它甚至可以通過你編寫的各種單元測試。然而其中的pop方法卻存在內(nèi)存泄露的問題,當(dāng)我們用pop方法彈出棧中的對象時,該對象不會被當(dāng)作垃圾回收,即使使用棧的程序不再引用這些對象,因為棧內(nèi)部維護著對這些對象的過期引用(obsolete reference)。在支持垃圾回收的語言中,內(nèi)存泄露是很隱蔽的,這種內(nèi)存泄露其實就是無意識的對象保持。如果一個對象引用被無意識的保留起來了,那么垃圾回收器不會處理這個對象,也不會處理該對象引用的其他對象,即使這樣的對象只有少數(shù)幾個,也可能會導(dǎo)致很多的對象被排除在垃圾回收之外,從而對性能造成重大影響,極端情況下會引發(fā)Disk Paging(物理內(nèi)存與硬盤的虛擬內(nèi)存交換數(shù)據(jù)),甚至造成OutOfMemoryError。?

579.GC 是什么?為什么要有GC?

答:GC是垃圾收集的意思,內(nèi)存處理是編程人員容易出現(xiàn)問題的地方,忘記或者錯誤的內(nèi)存回收會導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動監(jiān)測對象是否超過作用域從而達到自動回收內(nèi)存的目的,Java語言沒有提供釋放已分配內(nèi)存的顯示操作方法。Java程序員不用擔(dān)心內(nèi)存管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調(diào)用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() ,但JVM可以屏蔽掉顯示的垃圾回收調(diào)用。

垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個單獨的低優(yōu)先級的線程運行,不可預(yù)知的情況下對內(nèi)存堆中已經(jīng)死亡的或者長時間沒有使用的對象進行清除和回收,程序員不能實時的調(diào)用垃圾回收器對某個對象或所有對象進行垃圾回收。在Java誕生初期,垃圾回收是Java最大的亮點之一,因為服務(wù)器端的編程需要有效的防止內(nèi)存泄露問題,然而時過境遷,如今Java的垃圾回收機制已經(jīng)成為被詬病的東西。移動智能終端用戶通常覺得iOS的系統(tǒng)比Android系統(tǒng)有更好的用戶體驗,其中一個深層次的原因就在于Android系統(tǒng)中垃圾回收的不可預(yù)知性。

補充:垃圾回收機制有很多種,包括:分代復(fù)制垃圾回收、標記垃圾回收、增量垃圾回收等方式。標準的Java進程既有棧又有堆。棧保存了原始型局部變量,堆保存了要創(chuàng)建的對象。Java平臺對堆內(nèi)存回收和再利用的基本算法被稱為標記和清除,但是Java對其進行了改進,采用“分代式垃圾收集”。這種方法會跟Java對象的生命周期將堆內(nèi)存劃分為不同的區(qū)域,在垃圾收集過程中,可能會將對象移動到不同區(qū)域:

伊甸園(Eden):這是對象最初誕生的區(qū)域,并且對大多數(shù)對象來說,這里是它們唯一存在過的區(qū)域。

幸存者樂園(Survivor):從伊甸園幸存下來的對象會被挪到這里。

終身頤養(yǎng)園(Tenured):這是足夠老的幸存對象的歸宿。年輕代收集(Minor-GC)過程是不會觸及這個地方的。當(dāng)年輕代收集不能把對象放進終身頤養(yǎng)園時,就會觸發(fā)一次完全收集(Major-GC),這里可能還會牽扯到壓縮,以便為大對象騰出足夠的空間。

與垃圾回收相關(guān)的JVM參數(shù):

-Xms / -Xmx --- 堆的初始大小 / 堆的最大大小

-Xmn --- 堆中年輕代的大小

-XX:-DisableExplicitGC --- 讓System.gc()不產(chǎn)生任何作用

-XX:+PrintGCDetail --- 打印GC的細節(jié)

-XX:+PrintGCDateStamps --- 打印GC操作的時間戳?

Linux操作

580.請寫出常用的linux指令不低于10個,請寫出linux tomcat啟動。

答:linux指令
arch 顯示機器的處理器架構(gòu)(1)
uname -m 顯示機器的處理器架構(gòu)(2)
shutdown -h now 關(guān)閉系統(tǒng)(1)
shutdown -r now 重啟(1)
cd /home 進入 '/ home' 目錄'
cd .. 返回上一級目錄
cd ../.. 返回上兩級目錄
mkdir dir1 創(chuàng)建一個叫做 'dir1' 的目錄'
mkdir dir1 dir2 同時創(chuàng)建兩個目錄
find / -name file1 從 '/' 開始進入根文件系統(tǒng)搜索文件和目錄
find / -user user1 搜索屬于用戶 'user1' 的文件和目錄
linuxtomcat啟動
進入tomcat下的bin目錄執(zhí)行 ./catalina.sh start直接啟動即可,然后使用tail -f /usr/local/tomcat6/logs/catalina.out查看tomcat啟動日志。

581.當(dāng)使用RMI技術(shù)實現(xiàn)遠程方法調(diào)用時,能為遠程對象生成Sub和Skeleton命令的是(

A.Mic

B.mid

C.mitegistry

D.policytool

答案:A

582.以下哪個是服務(wù)()

A.kill

B.tar

C.rsyne

D.policytool

答案:c

分析:

A:kill命令,常用于殺死進程;

B:tar命令,tar命令是Unix/Linux系統(tǒng)中備份文件的可靠方法,幾乎可以工作于任何環(huán)境中,它的使用權(quán)限是所有用戶

C:類unix系統(tǒng)下的數(shù)據(jù)鏡像備份工具

D:在終端下輸入lsof即可顯示系統(tǒng)打開的文件,因為 lsof 需要訪問核心內(nèi)存和各種文件,所以必須以 root 用戶的身份運行它才能夠充分地發(fā)揮其功能

583.下面的網(wǎng)絡(luò)協(xié)議中,面向連接的的協(xié)議是: ()

A.傳輸控制協(xié)議

B.用戶數(shù)據(jù)報協(xié)議

C.網(wǎng)際協(xié)議

D.網(wǎng)際控制報文協(xié)議

答案:A

584.在/etc/fstab 文件中指定的文件系統(tǒng)加載參數(shù)中, () 參數(shù)一般用于CD-ROM 等移動設(shè)備。

A.defaults

B.sw

C.rw 和 ro

D.noauto

答案:D

585.Linux 文件權(quán)限一共10 位長度,分成四段,第三段表示的內(nèi)容是 ()

A.文件類型B.文件所有者的權(quán)限C.文件所有者所在組的權(quán)限D(zhuǎn).其他用戶的權(quán)限

答案:C

586.終止一個前臺進程可能用到的命令和操作 ()

A.kill

B.< CTRL >;+C

C.shut down

D.halt

答案:B

587.在使用mkdir 命令創(chuàng)建新的目錄時,在其父目錄不存在時先創(chuàng)建父目錄的選項是 ()

A.-m

B.-d

C.-d

D.-p

答案:D

588.下面關(guān)于i 節(jié)點描述錯誤的是 ()

A.i 節(jié)點和文件是一一對應(yīng)的(每個文件都有唯一一個索引結(jié)點號與之對應(yīng),而對于一個索引結(jié)點號,卻可以有多個文件名與之對應(yīng))

B.i 節(jié)點能描述文件占用的塊數(shù)

C.i 節(jié)點描述了文件大小和指向數(shù)據(jù)塊的指針

D.通過i 節(jié)點實現(xiàn)文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)的轉(zhuǎn)換

答案:A

589.一個文件名字為rr.Z,可以用來解壓縮的命令是: ()

A.tar

B.gzip

C.compress

D.uncompress

答案:D

590.具有很多C 語言的功能,又稱過濾器的是 ()

A.csh

B.tcsh

C.awk

D.sed

答案:C

591.一臺主機要實現(xiàn)通過局域網(wǎng)與另一個局域網(wǎng)通信,需要做的工作是 ()

A.配置域名服務(wù)器

B.定義一條本機指向所在網(wǎng)絡(luò)的路由

C.定義一條本機指向所在網(wǎng)絡(luò)網(wǎng)關(guān)的路由

D.定義一條本機指向目標網(wǎng)絡(luò)網(wǎng)關(guān)的路由

答案:C

592.建立動態(tài)路由需要用到的文件有 ()

A./etc/hosts

B./etc/HOSTNAME

C./etc/resolv.conf

D./etc/gateways

答案:D

593.局域網(wǎng)的網(wǎng)絡(luò)地址192.168.1.0/24,局域網(wǎng)絡(luò)連接其它網(wǎng)絡(luò)的網(wǎng)關(guān)地址是192.168.1.1。主機192.168.1.20 訪問172.16.1.0/24 網(wǎng)絡(luò)時,其路由設(shè)置正確的是 ()

A.route add –net 192.168.1.0 gw 192.168.1.1 netmask 255.255.255.0 metric 1

B.route add –net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.0 metric 1

C.route add –net 172.16.1.0 gw 172.16.1.1 netmask 255.255.255.0 metric 1

D.route add default 192.168.1.0 netmask 172.168.1.1 metric 1

答案:B

594.下列提法中,不屬于ifconfig 命令作用范圍的是 ()

A.配置本地回環(huán)地址

B.配置網(wǎng)卡的IP地址

C.激活網(wǎng)絡(luò)適配器

D.加載網(wǎng)卡到內(nèi)核中

答案:D

595.下列關(guān)于鏈接描述,錯誤的是()

A.硬鏈接就是讓鏈接文件的i 節(jié)點號指向被鏈接文件的i 節(jié)點

B.硬鏈接和符號連接都是產(chǎn)生一個新的i 節(jié)點

C鏈接分為硬鏈接和符號鏈接

D.硬連接不能鏈接目錄文件

答案:B

596.在局域網(wǎng)絡(luò)內(nèi)的某臺主機用ping 命令測試網(wǎng)絡(luò)連接時發(fā)現(xiàn)網(wǎng)絡(luò)內(nèi)部的主機都可以連同,而不能與公網(wǎng)連通,問題可能是()

A.主機IP設(shè)置有誤

B.沒有設(shè)置連接局域網(wǎng)的網(wǎng)關(guān)

C.局域網(wǎng)的網(wǎng)關(guān)或主機的網(wǎng)關(guān)設(shè)置有誤

D.局域網(wǎng)DNS服務(wù)器設(shè)置有誤

答案:C

597.下列文件中,包含了主機名到IP 地址的映射關(guān)系的文件是:

A./etc/HOSTNAME

B./etc/hosts

C./etc/resolv.conf

D./etc/networks

答案:B

598.不需要編譯內(nèi)核的情況是()

A.刪除系統(tǒng)不用的設(shè)備驅(qū)動程序時B.升級內(nèi)核時C.添加新硬件時D.將網(wǎng)卡激活

答案:D

599.在shell 中變量的賦值有四種方法,其中,采用name=12 的方法稱 ()

A.直接賦值

B.使用read命令

C.使用命令行參數(shù)

D.使用命令的輸出

答案:A

600.()命令可以從文本文件的每一行中截取指定內(nèi)容的數(shù)據(jù)。

A.cp

B.dd

C.fmt

D.cut

答案:D

601.下列不是Linux 系統(tǒng)進程類型的是()

A.交互進程

B.批處理進程

C.守護進程

D.就緒進程

答案:D

602.在日常管理中,通常CPU 會影響系統(tǒng)性能的情況是: ()

A.CPU 已滿負荷地運轉(zhuǎn)

B.CPU 的運行效率為30%

C.CPU 的運行效率為50%

D.CPU 的運行效率為80%

答案:A

603.若一臺計算機的內(nèi)存為128MB,則交換分區(qū)的大小通常是

A.64MB

B.128MB

C.256MB

D.512MB

答案:C

604.在安裝Linux 的過程中的第五步是讓用戶選擇安裝方式,如果用戶希望安裝部分組件(軟件程序),并在選擇好后讓系統(tǒng)自動安裝,應(yīng)該選擇的選項是()

A.full

B.expert

C.newbie

D.menu

答案:D

605.Linux 有三個查看文件的命令,若希望在查看文件內(nèi)容過程中可以用光標上下移動來查看文件內(nèi)容,應(yīng)使用()命令

A.cat

B.more

C.less

D.menu

答案:C

606.下列信息是某系統(tǒng)用ps –ef 命令列出的正在運行的進程 ()進程是運行Internet 超級服務(wù)器,它負責(zé)監(jiān)聽Internet sockets 上的連接,并調(diào)用合適的服務(wù)器來處理接收的信息。

A.root 1 4.0 0.0 344 204? S 17:09 0:00 initB.root 2 0.0 0.1 2916 1520? S 17:09 0:00 /sbin/gettyC.root 3 0.0 0.2 1364 632? S 17:09 0:00 /usr/sbin/syslogdD.root 4 0.0 1344 1204? S 17:09 0:10 /usr/sbin/inetd

答案:D

607.在TCP/IP 模型中,應(yīng)用層包含了所有的高層協(xié)議,在下列的一些應(yīng)用協(xié)議中, ()是能夠?qū)崿F(xiàn)本地與遠程主機之間的文件傳輸工作

A.telnet

B.FTP

C.SNMP

D.NFS

答案:B

608.當(dāng)我們與某遠程網(wǎng)絡(luò)連接不上時,就需要跟蹤路由查看,以便了解在網(wǎng)絡(luò)的什么位置出現(xiàn)了問題,滿足該目的的命令是()

A.ping

B.ifconfig

C.traceroute

D.netstat

答案:C

609.對名為fido 的文件用chmod 551 fido 進行了修改,則它的許可權(quán)是()

A.-rwxr-xr-x

B.-rwxr--r--

C.-r--r--r--

D.-r-xr-x—x

答案:C

610.用ls –al 命令列出下面的文件列表,()文件是符號連接文件

A.-rw-rw-rw- 2 hel-s users 56 Sep 09 11:05 hello

B.-rwxrwxrwx 2 hel-s users 56 Sep 09 11:05 goodbey

C.drwxr--r-- 1 hel users 1024 Sep 10 08:10 zhang

D.lrwxr--r-- 1 hel users 2024 Sep 12 08:12 cheng

答案:D

611.DNS 域名系統(tǒng)主要負責(zé)主機名和()之間的解析。

A.IP地址

B.MAC地址

C.網(wǎng)絡(luò)地址

D.主機別名

答案:A

612.WWW 服務(wù)器是在Internet 上使用最為廣泛,它采用的是()結(jié)構(gòu)

A.服務(wù)器/工作站

B.B/S

C.集中式

D.分布式

答案:B

613.Linux 系統(tǒng)通過()命令給其他用戶發(fā)消息。

A.less

B.mesg

C.write

D.echo to

答案:C

614.NFS 是()系統(tǒng)。

A.文件

B.磁盤

C.網(wǎng)絡(luò)文件

D.操作

答案:C

615.()命令可以在Linux 的安全系統(tǒng)中完成文件向磁帶備份的工作

A.cp

B.tr

C.dir

D.cpio

答案:D

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

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

分享到微博請遵守國家法律
西昌市| 武宁县| 许昌市| 南宫市| 会理县| 合川市| 眉山市| 岚皋县| 古浪县| 嵩明县| 保康县| 高尔夫| 永善县| 商水县| 克山县| 屏东县| 尼木县| 偃师市| 读书| 郴州市| 徐水县| 沙坪坝区| 南汇区| 华池县| 当涂县| 噶尔县| 安庆市| 武夷山市| 丁青县| 绥芬河市| 南雄市| 达尔| 漳州市| 陆良县| 镇宁| 惠州市| 宣城市| 东源县| 伊宁县| 三门县| 都昌县|