更新時間:2020-05-19 15:14:43 來源:動力節點 瀏覽2244次
1.在重寫equals方法時,需要遵循哪些約定,具體介紹一下?
重寫equals方法時需要遵循通用約定:自反性、對稱性、傳遞性、一致性.、非空性
1)自反性
對于任何非null的引用值x,x.equals(x)必須返回true。---這一點基本上不會有啥問題
2)對稱性
對于任何非null的引用值x和y,當且僅當x.equals(y)為true時,y.equals(x)也為true。
3)傳遞性
對于任何非null的引用值x、y、z。如果x.equals(y)==true,y.equals(z)==true,那么x.equals(z)==true。
4)一致性
對于任何非null的引用值x和y,只要equals的比較操作在對象所用的信息沒有被修改,那么多次調用x.eqals(y)就會一致性地返回true,或者一致性的返回false。
5)非空性
所有比較的對象都不能為空。
2.Synchronized優化后的鎖機制簡單介紹一下,包括自旋鎖、偏向鎖、輕量級鎖、重量級鎖?
自旋鎖:
線程自旋說白了就是讓cup在做無用功,比如:可以執行幾次for循環,可以執行幾條空的匯編指令,目的是占著CPU不放,等待獲取鎖的機會。如果旋的時間過長會影響整體性能,時間過短又達不到延遲阻塞的目的。
偏向鎖:
偏向鎖就是一旦線程第一次獲得了監視對象,之后讓監視對象“偏向”這個線程,之后的多次調用則可以避免CAS操作,
說白了就是置個變量,如果發現為true則無需再走各種加鎖/解鎖流程。
輕量級鎖:
輕量級鎖是由偏向所升級來的,偏向鎖運行在一個線程進入同步塊的情況下,當第二個線程加入鎖爭用的時候,偏向鎖就會升級為輕量級鎖;
重量級鎖:
重量鎖在JVM中又叫對象監視器(Monitor),它很像C中的Mutex,除了具備Mutex(0|1)互斥的功能,它還負責實現了Semaphore(信號量)的功能,也就是說它至少包含一個競爭鎖的隊列,和一個信號阻塞隊列(wait隊列),前者負責做互斥,后一個用于做線程同步。
偏向鎖、輕量級鎖、重量級鎖的對比:
3.Redis和Memcache區別對比?如何選擇這兩個技術?
區別:
1)Redis和Memcache都是將數據存放在內存中,都是內存數據庫。不過memcache還可用于緩存其他東西,例如圖片、視頻等等。
2)Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。
3)虛擬內存--Redis當物理內存用完時,可以將一些很久沒用到的value交換到磁盤
4)過期策略--memcache在set時就指定,例如setkey1008,即永不過期。Redis可以通過例如expire設定,例如expirename10
5)分布式--設定memcache集群,利用magent做一主多從;redis可以做一主多從。都可以一主一從
6)存儲數據安全--memcache掛掉后,數據沒了;redis可以定期保存到磁盤(持久化)
7)災難恢復--memcache掛掉后,數據不可恢復;redis數據丟失后可以通過aof恢復
8)Redis支持數據的備份,即master-slave模式的數據備份。
選型:
若是簡單的存取key-value這樣的數據用memcache好一些
若是要支持數據持久化,多數據類型(如集合、散列之類的),用列表類型做隊列之類的高級應用,就用redis
4,Redis的持久化機制是什么?各自的優缺點?
redis提供兩種持久化機制RDB和AOF機制。
1)RDB持久化方式:
是指用數據集快照的方式記錄redis數據庫的所有鍵值對。
優點:
缺點:
優點:
缺點:
5.Mysql的數據庫表鎖、行鎖、頁級鎖?
表級,直接鎖定整張表,在你鎖定期間,其它進程無法對該表進行寫操作。如果你是寫鎖,則其它進程則讀也不允許
行級,,僅對指定的記錄進行加鎖,這樣其它進程還是可以對同一個表中的其它記錄進行操作。
頁級,表級鎖速度快,但沖突多,行級沖突少,但速度慢。所以取了折衷的頁級,一次鎖定相鄰的一組記錄。
以上就是動力節點java培訓機構的小編針對“程序員Java經典筆試題目分享”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習