一文搞定HashMap的實現原理和面試-編程思維

                                                                               原文  https://juejin.im/post/5d09f2d56fb9a07ec7551fb0   HashMap在日常開發中基本是天天見的,而且都知道什麼時候需要用HashMap,根據Key存取Value,但是存和取的時候那些操

InterV 1:基礎-編程思維

一、面向對象 1、面向對象和面向過程的區别 面向對象關注于一個功能實現的行為,将一些行為封裝為一個對象來統一調用。 面向過程關注于一個功能實現的步驟,按步驟編程實現功能。 面向對象是以對象為中心的編程思想。 面向過程是一種事件為中心的編程思想。就是分析出解決問題所需的步驟,然後用函數把這些步驟實現,并按順序調用。 2、四個基本特性 抽象:将一類具有相同屬性和行為的事物抽象形成類的過程。Java中

InterV 2:線程-編程思維

1. 什麼是線程?   線程是操作系統能夠進行運算調度的最小單位,它被包含在進程之中,是進程中的實際運作單位。程序員可以通過它進行多處理器編程,你可以使用多線程對運算密集型任務提速。比如,如果一個線程完成一個任務要100毫秒,那麼用十個線程完成改任務隻需10毫秒。 2. 線程和進程有什麼區别?   線程是進程的子集,一個進程可以有很多線程,每條線程并行執行不同的任務。不同的進程使用不同的内存空間

InterV 3:流行框架與技術-編程思維

一、 Spring 1) Spring有哪些特點? 應用解耦,簡化開發(注解),IOC,AOP,事物管理 2) 使用Spring有什麼好處? 1  應用解耦 2  依賴注入 3  AOP 4  事務管理 5  MVC 6  集成開發 3) Spring應用程序看起來像什麼? 一些接口及其實現 一些POJO類 一些xml配置文件 4) Spring核心容器模塊是什麼? Spring core/IO

InterV 4:分布式系統微服務-編程思維

一、架構設計相關 0. 什麼是微服務?什麼是分布式系統?什麼是集群? 微服務:構建分布式系統的一種架構方式, 核心思路是:去中心化。 分布式系統: 一件事情,多系統協同完成。 集群:多機器做同一件事情。比如在淘寶買東西,會有一個商品展示的系統,看到合適的商品了就會下單這是會有一個訂單系統,下單完成了就進入發貨階段,這個時候就會有一個物流系統,買東西就形成了一個分布式系統,而每個系統又由多個微服務

InterV 8:通訊協議-編程思維

一、三次握手簡單例子 A:客戶端 B:服務端 第一次握手: A給B打電話說,你可以聽到我說話嗎? 第二次握手: B收到了A的信息,然後對A說: 我可以聽得到你說話啊,你能聽得到我說話嗎?   第三次握手: A收到了B的信息,然後說我能聽到你說話,我要給你發信息啦! 圖文說明: 第一次握手:客戶端通過調用connect發起主動打開。客戶端向服務器發出連接請求的TCP報文段,其TCP首部中的同步比

InterV 9:源碼分析-編程思維

一. Hashmap的原理 源碼分析參考文章:http://www.cnblogs.com/xwdreamer/archive/2012/06/03/2532832.html 題目參考文章:http://www.importnew.com/7099.html 總結: HashMap基于hashing原理,我們通過put()和get()方法儲存和獲取對象。當我們将鍵值對傳遞給put()方法時,它調

前端工程師在面試過程中常遇到的知識點-編程思維

1、盒子模型,塊級元素和行内元素特性與區别。 2、行内塊的使用,兼容性解決。 3、清除浮動的方式以及各自的優劣。 4、文檔流的概念、定位的理解以及z-index計算規則&浏覽器差異性。 5、CSS選擇器以及優先級計算。 6、常用的CSS hack。 7、遇到的兼容性問題與解決方法。 8、垂直水平居中的實現方式。 9、常用布局的實現(兩列布局、三列適應布局,兩列等高適應布局等)。 Java

js事件相關面試題-編程思維

說是面試題,其實也相當于是對js事件部分知識點的一個總結。簡單内容一筆帶過,了解詳情我都給出了參考鍊接,都是之前寫的一些相關文章。JavaScript本身沒有事件模型,但是環境可以有。 DOM:addEventListener、removeEventListener、dispatchEventIE-DOM:attachEvent、detachEvent、fireEventjQuery:on、of

javascript ES3小測試-編程思維

一、溫故知新 做做題,總是能有溫故知新的體驗。這套題是2010年的了,比較老了, http://perfectionkills.com/  還有一套http://perfectionkills.com/javascript-quiz-es6 比較新ES6相關的。 在這個頁面有14道ECMAScript相關的題,我試了下答錯了6道題,有些知識,感覺着會了,别人說出來肯定能懂,但是自己做題卻不一定對

Java對象創建過程-編程思維

基本概念 指針碰撞 一般情況下,JVM的對象都放在堆内存中(發生逃逸分析除外)。當類加載檢查通過後,Java虛拟機開始為新生對象分配内存。如果Java堆中内存是絕對規整的,所有被使用過的的内存都被放到一邊,空閑的内存放到另外一邊,中間放着一個指針作為分界點的指示器,所分配内存僅僅是把那個指針向空閑空間方向挪動一段與對象大小相等的實例,這種分配方式就是指針碰撞. 空閑列表 如果Java堆内存中的内

Java 高級面試題收集-編程思維

Java概念題 拆箱裝箱的原理 自動裝箱時編譯器調用valueOf将原始類型值轉換成對象,同時自動拆箱時,編譯器通過調用類似intValue(),doubleValue()這類的方法将對象轉換成原始類型值。 隻有double和float的自動裝箱代碼沒有使用緩存,每次都是new 新的對象,其它的6種基本類型都使用了緩存策略。 使用緩存策略是因為,緩存的這些對象都是經常使用到的(如字符、-128至

Java集合與泛型中的陷阱-編程思維

List,List<Object>區别 List<Integer> t1 = new ArrayList<>(); // 編譯通過 List t2 = t1; //編譯失敗 List<Object> t3 = t1; t1 可以賦給 t2, 但是 t1 不能賦給 t3,會抛出如下異常 Error:(16, 35) java:

緩存穿透,并發,雪崩,熱點-編程思維

緩存穿透 概念 查詢一個根本不存在的數據,緩存層和存儲層都不會命中,但是出于容錯的考慮,如果從存儲層查不到數據則不寫入緩存層。 緩存穿透将導緻不存在的數據每次請求都要到存儲層去查詢,失去了緩存保護後端存儲的意義。 解決方案: 緩存空對象 需要過多的存儲空間,數據不一緻 布隆過濾攔截 代碼維護複雜,存儲空間小 緩存并發 概念 網站并發訪問高,一個緩存如果失效,可能出現多個進程同時查詢DB,同時設置

用阻塞隊列實現一個生産者消費者模型?synchronized和lock有什麼區别?-編程思維

多線程當中的阻塞隊列 主要實現類有 ArrayBlockingQueue是一個基于數組結構的有界阻塞隊列,此隊列按FIFO原則對元素進行排序 LinkedBlockingQueue是一個基于鍊表結構的阻塞隊列,此隊列按FIFO排序元素,吞吐量通常要高于ArrayBlockingQueue SynchronousQueue是一個不存儲元素的阻塞隊列,單個插入操作必須等到另一個線程調用移除操作,否

多線程的這些鎖知道嗎?手寫一個自旋鎖?-編程思維

多線程中的各種鎖 1. 公平鎖、非公平鎖 1.1 概念: 公平鎖就是先來後到、非公平鎖就是允許加塞 Lock lock = new ReentrantLock(Boolean fair); 默認非公平 公平鎖是指多個線程按照申請鎖的順序來獲取鎖,類似排隊打飯。 非公平鎖是指多個線程獲取鎖的順序并不是按照申請鎖的順序,有可能後申請的線程優先獲取鎖,在高并發的情況下,有可能會造成優先級反轉或者節現