更新時(shí)間:2019-12-30 14:07:35 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3276次
1. java 中 volatile 和 synchronized 有什么區(qū)別?
A. volatile 本質(zhì)是在告訴jvm 當(dāng)前變量在寄存器(工作內(nèi)存)中的值是不確定的, 需要從主存中讀取;synchronized 則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞住。
B. volatile 僅能使用在變量級別;synchronized 則可以使用在變量、方法、和類級別的。
C. volatile 僅能實(shí)現(xiàn)變量的修改可見性,并不能保證原子性;而 synchronized則可以保證變量的修改可見性和原子性。
D. volatile 不會造成線程的阻塞;synchronized 可能會造成線程的阻塞。
E. volatile 標(biāo)記的變量不會被編譯器優(yōu)化;synchronized 標(biāo)記的變量可以被編譯器優(yōu)化。
2. 有了解 java 的原子類?實(shí)現(xiàn)原理是什么?
答:采用硬件提供原子操作指令實(shí)現(xiàn)的,即 CAS。每次調(diào)用都會先判斷預(yù)期的值是否符合,才進(jìn)行寫操作,保證數(shù)據(jù)安全。
3. spring 主要使用了哪些?IOC 實(shí)現(xiàn)原理是什么?AOP 實(shí)現(xiàn)原理是什么?
答:spring 主要功能有 IOC,AOP,MVC 等,IOC 實(shí)現(xiàn)原理:先反射生成實(shí)例,然后調(diào)用時(shí)主動(dòng)注入。AOP 原理:主要使用 java 動(dòng)態(tài)代理
4. mybatis 有了解嗎?它與 hibernate 有什么區(qū)別?項(xiàng)目中,你會選哪個(gè)?
答:兩者都是輕量級 ORM 框架,hibernate 實(shí)現(xiàn)功能比較多,通過 HQL 操作數(shù)據(jù)庫,比較簡單方便,但 hibernate 自動(dòng)生成的 sql 相長,不利測試和查找原因。復(fù)雜 sql 時(shí),編寫比較困難,同時(shí)性能也會降低。mybatis 是半自動(dòng)化,手動(dòng)編寫 SQL 語句,同時(shí)提供豐富的參數(shù)判斷功能。sql 語句較清晰,可以直接進(jìn)行測試,性能也較好,操作起來非常簡單。同時(shí) hibernate 容易產(chǎn)生n+1 問題。hibernate 學(xué)習(xí)成本較 mybatis 高。國內(nèi)一些大公司基本上使用mybatis
5. 說說數(shù)據(jù)庫性能優(yōu)化有哪些方法?
答:使用 explain 進(jìn)行優(yōu)化,查看 sql 是否充分使用索引。避免使用 in, 用exist 替代,字段值盡可能使用更小的值,任何對列的操作都將導(dǎo)致表掃描,它包括數(shù)據(jù)庫函數(shù)、計(jì)算表達(dá)式等等,查詢時(shí)要盡可能將操作移至等號右邊。使用連接查詢 (join) 代替子查詢。
在表的多列字段上建立一個(gè)索引,但只有在查詢這些字段的第一個(gè)字段時(shí),索引才會被使用。
6. linux 命令熟悉?查看某個(gè)線程命令是什么?查看整個(gè)機(jī)器負(fù)載命令?文件內(nèi)容快速查找命令是什么?
查看線程:ps -ef|greptomcat
查看負(fù)載:top
文件內(nèi)容查找:vi /aa test.txt 或者先打開文件,再查找: vi test.txt /aa
7. 緩存框架有使用過哪些?memcache 和 redis 有什么區(qū)別?項(xiàng)目中,怎么去選擇?
答:緩存有: ehcache,memcache 和 redis;
memcache 和 redis 等區(qū)別:
1、 Redis 和 Memcache 都是將數(shù)據(jù)存放在內(nèi)存中,都是內(nèi)存數(shù)據(jù)庫。不過 memcache 還可用于緩存其他東西,例如圖片、視頻等等。
2、Redis 不僅僅支持簡單的 k/v 類型的數(shù)據(jù),同時(shí)還提供 list,set, hash 等數(shù)據(jù)結(jié)構(gòu)的 存儲。
3、虛擬內(nèi)存 --Redis 當(dāng)物理內(nèi)存用完時(shí),可以將一些很久沒用到的value 交換到磁盤
4、過期策略 --memcache 在 set 時(shí)就指定,例如 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ù)備份。項(xiàng)目使用選擇:redis 是單線程實(shí)現(xiàn),若需要使用控制某些并發(fā)狀態(tài)時(shí),可以使用 redis. 項(xiàng)目中需要使用 復(fù)雜的 list,set 操作時(shí),同時(shí)可以對數(shù)據(jù)進(jìn)行持久化。當(dāng)存儲數(shù)據(jù)較大時(shí),如 100k 以上,那 memcache 性能較好,在多核上,memcache較好
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“2020年百度Java開發(fā)面試題目”的內(nèi)容,希望對大家有幫助,如有疑問,請?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)推薦
最新最全java面試題及答案(初級到高級)
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743