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