java面試:手寫代碼


二分查找法。

/**
 *   二分查找法:給定一組有序的數組,每次都從一半中查找。直到找到要求的數據。
 *   主要是得找到下標的表示方法。
 */
public class BinaryFind {

    /**
     * 使用二分法,找到有序數組中的某個數,返回下標。
     * @param sortedArray
     * @param number
     * @return
     */
    public int find(int[] sortedArray,int number){
          if(sortedArray==null)  {
              throw new IllegalArgumentException();
          }
          int last=sortedArray.length-1;
          int start=0;

          //沒找到對應的數據,就一直循環查找
          while ( start<= last ) {
              //先找到中間的元素的下標 , mid是首尾下標的和的一半
               int mid= (start+last)/2 ;
               if( sortedArray[mid] > number   ) {
                   last=mid-1;
               }else if(sortedArray[mid] <number ){
                   start=mid+1;
               }else {
                   return  mid;
               }

          }
         return  -1;

}

排序算法

1.快速排序

/**
 * 快速排序.
 * https://gitbook.cn/books/59f6a752d97c2122653a169e/index.html
 */
public class QuicklySort {

    /**
     *
     * @param a 數組
     * @param low  數組開始的下標。也就是0。
     * @param high  數組末尾的下標。也就是length-1。
     */
    public int[] sort(int a[],int low,int high){
        if(low>high || a==null) {
            return null;
        }

        int i=low;
        int j=high;
        //key設置為數組首位
        int key=a[low];

        //while結束后,小於key的全部放在key的左邊,大於key的全部放在右邊。。
         while (i<j) {
               //最后面的下標,從后向前遍歷,找到第一個大於key的數據,將它賦給數組首位
                while (i<j && key<=a[j]) {
                     j--;
                }
                a[i]=a[j];
                //最前面的下標,從前向后遍歷,找到第一個小於key的數據
                while (i<j && key>=a[i]) {
                    i++;
                }
                a[j]=a[i];
                a[i]=key;
            }
        //以下的i就是key的下標,對key兩邊的數據分別進行排序。
           sort(a,low,i-1);
           sort(a,i+1,high);

        return  a;

    }
}

2.冒泡排序
比較低端,不建議寫。

多線程

1.手寫一下生產者消費者模式,不要用BlockingQueue。
思路:可以使用wait(),notify()
2.手寫一個死鎖。

設計模式

設計模式的代碼詳情見:
設計模式代碼示例
1.手寫一下單例模式。
單例模式示例
2.手寫一下工廠模式。
3.手寫一下觀察者模式。
觀察者模式示例
說起來很尷尬,我曾經在面試時因為沒能手寫觀察者模式,十分鍾就結束了面試。當時的心情真的好難受。

其他

其他的LeetCode算法解題思路,詳情見: https://www.cnblogs.com/expiator/p/10226647.html

待補充。
參考資料:
十大排序算法全面解析-Java實現
《劍指offer》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM