在計算機世界裏「數據結構+算法=程序」,所以算法在程序開發中起着相當重要的做用。雖然咱們在開發中本身設計算法的狀況很少,在工做中卻離不開算法。不管是開發包提供的算法仍是咱們本身設計的算法,算法在程序中都無處不在。程序員
經常使用的算法有查找算法和排序算法。查找算法有線性查找算法、深度優先搜索算法、廣度優先搜索算法和二分查找算法,而最經常使用也最快速的就是二分查找算法了。面試
二分查找算法又叫做折半查找,要求待查找的序列有序,每次查找都取中間位置的值與待查關鍵字進行比較,若是中間位置的值比待查關鍵字大,則在序列的左半部分繼續執行該查找過程,若是中間位置的值比待查關鍵字小,則在序列的右半部分繼續執行該查找過程,直到查找到關鍵字爲止,不然在序列中沒有待查關鍵字。算法
下圖中,在有序數組[3,4,6,20,40,45,51,62,70,99,110] 中查找key=20的數據,根據二分查找算法,只需查找兩次便能命中數據。數據庫
這裏須要強調的是,二分查找算法要求要查找的集合是有序的,若是不是有序的集合,則先要經過排序算法排序後再進行查找。編程
二分查找算法的Java實現以下,代碼定義了方法binarySearch()用於二分查找,在該方法中有3個變量low、mid和high,分別表示二分查找的最小、中間和最大的數據索引。設計模式
1 publicstatic int binarySearch(int []array,inta){ 2 intlow=0; 3 inthigh=array.length-1; 4 intmid; 5 while(low<=high){ 6 mid=(low+high)/2;//中間位置 7 if(array[mid]==a){ 8 return mid; 9 }else if(a>array[mid]){ //向右查找 10 low=mid+1; 11 }else{ //向左查找 12 high=mid-1; 13 } 14 } 15 return -1; 16 }
在以上代碼中,經過一個while循環在數組中查找傳入的數據,在該數據大於中間位置的數據時向右查找,即最大索引位置不變,將最小索引設置爲上次循環的中間索引加1;在該數據小於中間位置的數據時向左查找,即最小索引位置不變,而後將最大索引設置爲上次循環的中間索引並減1。重複以上過程,直到中間索引位置的數據等於要查找的數據,說明找到了要查找的數據,將該數據對應的索引返回。若是遍歷到low>high尚未找到要查找的數據,則說明該數據在列表中不存在,返回-1。數組
面試官一般會在短短兩小時內對面試者的知識結構進行全面瞭解,面試者在回答問題時若是拖泥帶水且不能直擊問題的本質,則很難充分表現本身,最終影響面試結果。緩存
針對這種狀況,**《Offer來了:Java面試核心知識點精講(原理篇)》**一書出版上市。本書在講解知識點時不拖泥帶水,力求精簡,詳細介紹了Java程序員面試時常被問及的核心知識點。 網絡
面試在即,Java知識點很凌亂?別急,本書是對Java程序員面試必備知識點的總結,詳細講解了JVM原理、多線程、數據結構和算法、分佈式緩存、設計模式等內容,除了原理講解,還有Java實現!但願本書可以幫助你對Java的基礎原理有更深刻、全面的理解。數據結構
面試時的原理+動手實現腦海已就位,整裝待發!互聯網寒冬怕什麼~
▉ 關於做者
王磊,現任國內某知名互聯網公司大數據技術架構師,有十餘年豐富的物聯網及大數據研發和技術架構經驗,對物聯網及大數據的原理和技術實現有深入的理解。長期從事海外項目的研發和交付工做,對異地多活數據中心的建設及高可用、高併發系統的設計有豐富的實戰經驗。
▉ 大咖推薦
▉ 章節架構
第1章 講解JVM原理,涉及JVM運行機制、JVM內存模型、經常使用垃圾回收算法和JVM類加載機制等內容。
第2章 講解Java基礎知識,涉及集合、異常分類及處理、反射、註解、內部類、泛型和序列化等內容。
第3章 講解Java併發編程知識,涉及Java多線程的工做原理及應用、Java線程池的工做原理及應用,以及鎖、進程調度算法等內容。
第4章 講解數據結構知識,涉及棧、隊列、鏈表、散列表、二叉樹、紅黑樹、圖和位圖等內容。
第5章 講解Java中的經常使用算法,涉及二分查找、冒泡排序、插入排序、快速排序、希爾排序、歸併排序、桶排序、基數排序等算法。
第6章 講解網絡與負載均衡原理,涉及TCP/IP、HTTP、經常使用負載均衡算法和LVS原理等內容。
第7章 講解數據庫及分佈式事務原理,涉及數據庫存儲引擎、數據庫併發操做和鎖、數據庫分佈式事務等內容。
第8章 講解分佈式緩存的原理及應用,涉及分佈式緩存介紹、Ehcache原理及應用、Redis原理及應用、分佈式緩存設計的核心問題等內容。
第9章 講解設計模式,涉及常見的23種經典設計模式。
本文由博客一文多發平臺 OpenWrite 發佈!