- Java中wait和sleep有什么區(qū)別?多線程條件下如何保證數(shù)據(jù)安全?
答:最大區(qū)別是等待時wait會釋放鎖,而sleep會一直持有鎖,wait通常用于線程時交,互,sleep通常被用于暫停執(zhí)行。
- Java中volatile和synchronized有什么區(qū)別?
1.volatile本質(zhì)是在告訴jvm當(dāng)前變量在寄存器(工作內(nèi)存)中的值是不確定的,需要從主存中讀??;synchronized則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞住。
2.volatile僅能使用在變量級別;synchronized則可以使用在變量、方法、和類級別的。
3.volatile僅能實現(xiàn)變量的修改可見性,并不能保證原子性;而synchronized則可以保證變量的修改可見性和原子性。
4.volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞。
5.volatile標(biāo)記的變量不會被編譯器優(yōu)化;synchronized標(biāo)記的變量可以被編譯器優(yōu)化。
-
有了解java的原子類?實現(xiàn)原理是什么?
答:采用硬件提供原子操作指令實現(xiàn)的,即CAS。每次調(diào)用都會先判斷預(yù)期的值是否符合,才進(jìn)行寫操作,保證數(shù)據(jù)安全。
Spring主要使用了哪些?IOC實現(xiàn)原理是什么?AOP實現(xiàn)原理是什么?
答:spring主要功能有IOC,AOP,MVC等,IOC實現(xiàn)原理:先反射生成實例,然后調(diào)用時主動注入。AOP原理:主要使用java動態(tài)代理,
- Mybatis有了解嗎?它與hibernate有什么區(qū)別?項目中,你會選哪個?
答:兩者都是輕量級ORM框架,hibernate實現(xiàn)功能比較多,通過HQL操作數(shù)據(jù)庫,比較簡單方便,但hibernate自動生成的sql相長,不利測試和查找原因。復(fù)雜sql時,編寫比較困難,同時性能也會降低。mybatis是半自動化,手動編寫SQL語句,同時提供豐富的參數(shù)判斷功能。sql語句較清晰,可以直接進(jìn)行測試,性能也較好,操作起來非常簡單。同時hibernate容易產(chǎn)生n+1問題。hibernate學(xué)習(xí)成本較mybatis高。國內(nèi)一些大公司基本上使用mybatis
-
緩存框架有使用過哪些?memcache和redis有什么區(qū)別?項目中,怎么去選擇?
答:緩存有:ehcache,memcache和redis等
區(qū)別:
1、 Redis和Memcache都是將數(shù)據(jù)存放在內(nèi)存中,都是內(nèi)存數(shù)據(jù)庫。不過 memcache還可用于緩存其他東西,例如圖片、視頻等等。2、Redis不僅僅支持簡單的k/v類型的數(shù)據(jù),同時還提供list,set,hash等數(shù)據(jù)結(jié)構(gòu)的 存儲。
3、虛擬內(nèi)存--Redis當(dāng)物理內(nèi)存用完時,可以將一些很久沒用到的value 交換到磁盤
4、過期策略--memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通 過例如expire 設(shè)定,例如expire name 10
5、分布式--設(shè)定memcache集群,利用magent做一主多從;redis可以做一主多從。都 可以一主一從
6、存儲數(shù)據(jù)安全--memcache掛掉后,數(shù)據(jù)沒了;redis可以定期保存到磁盤(持久化)
7、災(zāi)難恢復(fù)--memcache掛掉后,數(shù)據(jù)不可恢復(fù); redis數(shù)據(jù)丟失后可以通過aof恢復(fù)
8、Redis支持?jǐn)?shù)據(jù)的備份,即master-slave模式的數(shù)據(jù)備份。
項目使用選擇:
redis是單線程實現(xiàn),若需要使用控制某些并發(fā)狀態(tài)時,可以使用redis.項目中需要使用 復(fù)雜的list,set操作時,同時可以對數(shù)據(jù)進(jìn)行持久化。
當(dāng)存儲數(shù)據(jù)較大時,如100k以上,那memcache性能較好,在多核上,memcache較 好
-
說說數(shù)據(jù)庫性能優(yōu)化有哪些方法?
答:使用explain進(jìn)行優(yōu)化,查看sql是否充分使用索引。避免使用in,用exist替代,字段值盡可能使用更小的值,任何對列的操作都將導(dǎo)致表掃描,它包括數(shù)據(jù)庫函數(shù)、計算表達(dá)式等等,查詢時要盡可能將操作移至等號右邊。使用連接查詢(join)代替子查詢。
在表的多列字段上建立一個索引,但只有在查詢這些字段的第一個字段時,索引才會被使用。
-
HTTP請求方法get和post有什么區(qū)別?
1:Post傳輸數(shù)據(jù)時,不需要在URL中顯示出來,而Get方法要在URL中顯示。
2:Post傳輸?shù)臄?shù)據(jù)量大,可以達(dá)到2M,而Get方法由于受到URL長度限制,只能 傳遞大約1024字節(jié).
3:Post就是為了將數(shù)據(jù)傳送到服務(wù)器段,Get就是為了從服務(wù)器段取得數(shù)據(jù).而Get 之所以也能傳送數(shù)據(jù),只是用來設(shè)計告訴服務(wù)器,你到底需要什么樣的數(shù)據(jù).Post 的信息作為http請求的內(nèi)容,而Get是在Http頭部傳輸?shù)摹?/p>
-
Linux命令熟悉?查看某個線程命令是什么?查看整個機(jī)器負(fù)載命令?文件內(nèi)容快速查找命令是什么?
查看線程:ps -ef|greptomcat
查看負(fù)載:top
文件內(nèi)容查找:vi /aa test.txt 或者先打開文件,再查找: vi test.txt /aa
-
JVM內(nèi)存模型是如何?垃圾回收機(jī)制有哪些?如何對JVM進(jìn)行調(diào)優(yōu)?
答:由棧和堆組成,棧是運(yùn)行時單位,堆內(nèi)存則分為年輕代、年老代、持久代等,年輕代中的對象經(jīng)過幾次的回收,仍然存在則被移到年老代;持久代主要是保存class,method,filed等對象。
sun回收機(jī)制:主要對年輕代和年老代中的存活對象進(jìn)行回收,分為以下:
年輕代串行(Serial Copying)、年輕代并行(ParNew)、年老代串行(SerialMSC),年老代并行(Parallel Mark Sweep),年老代并發(fā)(Concurrent Mark-Sweep GC,即CMS)等等,目前CMS回收算法使用最廣泛。
JVM調(diào)優(yōu)主要是對堆內(nèi)容和回收算法進(jìn)行配置,需要對jdk產(chǎn)生的回收日志進(jìn)行觀察,同時通過工具(Jconsole,jProfile,VisualVM)對堆內(nèi)存不斷分析,這些優(yōu)化是一個過程,需要不斷地進(jìn)行觀察和維護(hù)。
-
如銀行內(nèi)部轉(zhuǎn)賬功能,如何保證數(shù)據(jù)一致性,即要么同時成功,要么同時失敗?高并發(fā)時,又如何保證性能和數(shù)據(jù)正確?
答:如果是單機(jī)內(nèi)完成這些操作,那使用數(shù)據(jù)庫的事務(wù),即可輕松實現(xiàn)。若是分布式呢?
-
有了解分布式事務(wù)如何實現(xiàn)?
答:分布式事務(wù)可以采用分布式鎖進(jìn)行實現(xiàn),目前zookeeper就提供此鎖;分布式鎖需要犧牲一定性能去實現(xiàn),若業(yè)務(wù)支付最終一致性,那此方法是最佳方案。如在京東下訂單,過一會才會告訴你訂單審核通過,而不是馬上響應(yīng)訂單結(jié)果。
-
java抽象類和接口有什么區(qū)別?項目中怎么去使用它們?
相同點:
A. 兩者都是抽象類,都不能實例化。
B. interface實現(xiàn)類及abstractclass的子類都必須要實現(xiàn)已經(jīng)聲明的抽象方法。
不同點:
A. interface需要實現(xiàn),要用implements,而abstractclass需要繼承,要用extends。
B. 一個類可以實現(xiàn)多個interface,但一個類只能繼承一個abstractclass。
C. interface強(qiáng)調(diào)特定功能的實現(xiàn),而abstractclass強(qiáng)調(diào)所屬關(guān)系。
D. 盡管interface實現(xiàn)類及abstrctclass的子類都必須要實現(xiàn)相應(yīng)的抽象方法,但實現(xiàn)的 形式不同。interface中的每一個方法都是抽象方法,都只是聲明的 (declaration, 沒有方 法體),實現(xiàn)類必須要實現(xiàn)。而abstractclass的子類可以有選擇地實現(xiàn)。
使用:
abstract:在既需要統(tǒng)一的接口,又需要實例變量或缺省的方法的情況下,使用abstract;
interface:使用: 類與類之前需要特定的接口進(jìn)行協(xié)調(diào),而不在乎其如何實現(xiàn)。 作為能 夠?qū)崿F(xiàn)特定功能的標(biāo)識存在,也可以是什么接口方法都沒有的純粹標(biāo)識。需要將一組類 視為單一的類,而調(diào)用者只通過接口來與這組類發(fā)生聯(lián)系。需要實現(xiàn)特定的多項功能, 而這些功能之間可能完全沒有任何聯(lián)系。
-
對socket熟悉?TCP通訊有幾次握手?有使用過哪些socket框架?
答:3次握手,客戶端-->服務(wù)端,服務(wù)端-->客戶端,客戶端-->服務(wù)端,當(dāng)這些過程完成之后,才真正建立起通信。java中比較有名的socket框架有:mina,netty,都是韓國小棒子寫的。
-
了解java反射機(jī)制?反射生成類,能訪問私有變量?
答:即動態(tài)生成java的實例,可以
-
RPC是什么?有使用過哪些RPC框架?
答:即遠(yuǎn)程進(jìn)程調(diào)用,本地機(jī)器調(diào)用遠(yuǎn)程的服務(wù),在項目規(guī)模大到一定程度,需要使用RPC相關(guān)框架進(jìn)行服務(wù)化部署。如:hessian 、webservice等
熟悉js或css?jquery如何綁定頁面某元素的點擊事件?
答:
$("#btn").click(function(){
})
作者:Crazy曉楓
來源:CSDN
原文:https://blog.csdn.net/u010664947/article/details/78518456
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!