面試知識匯總-2019.7.16

手撕代碼題:

  1. 其他
    數(shù)據(jù)結(jié)構(gòu)與算法中有那些奇技淫巧
    位運算裝逼指南 ---- 帶你領(lǐng)略位運算的魅力

  2. 單項列表實現(xiàn)加法運算
    舉例:list1:1->2->3; list2: 4->5->6->7;返回list:4->6->9->0
    思路:用2個棧存儲兩個list,然后一起彈出,并記錄進位,然后把每一次計算的結(jié)果拼接成list返回即可
    代碼:后續(xù)補充。。。。

  3. 求一個整數(shù)二進制表示中1的個數(shù)
    最笨的方式是逐位取值,判斷是否為1;復雜度是O(n)
    快速的方式是只找1的位置,n&(n+1)是找到最右邊的1,然后n-n&(n+1)是舍棄最右邊的1,當n變成0,即所有的1都找到了
    代碼:

int n = 0b10001010010100;
int count = 0;
while(n != 0){
  count++;
  n -= n&(~n + 1);
}
System.out.println(count);
  1. Bit-map
    海量數(shù)據(jù)下 BitMap 理解及應用場景
    如何只用2GB內(nèi)存從20億,40億,80億個整數(shù)中找到出
  2. 打家劫舍
  3. 找到數(shù)組中出現(xiàn)次數(shù)大于N/k的數(shù)

線程安全&不安全

  1. volatile、AtomicInteger、LongAdder、synchronize
    · volatile解決多線程內(nèi)存不可見問題。對于一寫多讀,是可以解決變量同步問題,但是如果多寫,同樣無法解決線程安全問題。如果是count++操作,使用如下類實現(xiàn):AtomicInteger count = new AtomicInteger(); count.addAndGet(1); 如果是JDK8,推薦使用LongAdder對象,比AtomicLong性能更好(減少樂觀鎖的重試次數(shù))。
    CAS是一個原子性操作

  2. 理解線程安全與不安全
    https://www.cnblogs.com/kubidemanong/p/9505944.html

  3. 對象實例
    對象實例由對象頭、實例數(shù)據(jù)組成,其中對象頭包括markword和類型指針,如果是數(shù)組,還包括數(shù)組長度;
    Mark word
    Mark word與鎖的關(guān)系


  4. 鎖膨脹:
    偏向鎖->輕量級鎖(自旋鎖、自適應自旋鎖,也叫作非阻塞同步、樂觀鎖)->重量級鎖(又被叫做互斥鎖MutexLock、阻塞同步、悲觀鎖)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容