小葯葯面試 java


//小葯葯面試
//題1: 一個數組 int[] A = {2,3,0,-2,-6,23,0,4,4......n}  如何把里面所有的正數放在左側,0 放在中間,負數放在右側?   (基於  三色排序法 )
//題2: 數組 {1,1,2,3,5,8,13,21,34,..........n}.如何計算出 f(100) (遞歸)
//題3:  try/catch/finally,finally總會執行么?如果 try / catch 里 return, finally 還執行么?
//題4:線程安全怎么實現的?synchronized 那是怎么實現安全的?一般是加在哪些線程上?一般加到哪些線程上才能保證既是同步的,也不沖突?
//題5:ArrayList 和鏈表 (LinkedList) 的區別
//題6:如何實現序列化
//題7:如何連接數據庫,有哪些參數
//題8:如何訪問 Excel 表中某個行列的某個數據? 用的那個包?
//題9:用過 java 反射么? java 反射的原理的?和類的實例化有。。。?是如何做到反射的?
//題10: 工作中都用到 java 哪些類?
//


// 沒有 api: 都是自己去抓, 接口測試和 ui 都有。
// 用 fiddler 驗證接口消息對不對,然后用 java/python寫腳本。用 java 方法發請求。。。


package sort.algorithm;

public class XiaoYaoYaoInterview
{
    public static void main(String[] args)
    {
        //第一題
        int[] a = {3,2,0,-2,-3,0,-7,0,-3,55,23,1};
        Q1_Way1(a);
        Q1_Way2_ThreeColorSort(a);
        
        //第二題: https://blog.csdn.net/qq_41532872/article/details/85160344
        System.out.println("Result of the recursion is:" + Q2_recursion(8));
        
    }
    
    //題一,方法一,用到兩個數組。第一個(也就是要處理的數組),先計算出多少個>0 =0 <0 的,比如分別是 i,j,k 個。
    //然后第二個數組是個同尺寸的空的,把第一個取出的值一個一個檢驗后放進去,對於>0 的從新數組的頭開始放。=0 的從位置 i 開始放。
    //<0 的,從 i+j 開始放。
    public static void Q1_Way1(int[] a)
    {
        int len = a.length;
        int i=0;//>0
        int j=0;//=0
        int k=0;//<0
        
        for(int p=0; p < len; p++)
        {
            if(a[p] > 0)
            {
                i++;
            }
            else if (a[p]==0)
            {
                j++;
            }
            else {
                k++;
            }
        }
        System.out.println("i="+i+" j="+j+" k="+k);
        
        int[] b = new int[len]; //同尺寸新 array
        int iCount=0;//>0 的計數
        int jCount=0;//=0 的計數
        int kCount=0;//<0 的計數
        
        for(int q = 0; q < len; q++)
        {
            if(a[q]>0)
            {
                b[iCount] = a[q];
                iCount++;
            }
            else if (a[q]==0)
            {
                b[i+jCount]=a[q];
                jCount++;
            }
            else {
                b[i+j+kCount]=a[q];
                kCount++;
            }
            
        }
        for (int bb : b)
        {
            System.out.print(bb+" ");
        }
        System.out.println("");
    }
    
    /**
     * 題一,方法2,就是操作當前數組。設置兩個下標(指針) p0/p1, p0 從頭往后掃,p1從后往前掃
     * 參見: 算法練習:兩指針之三色排序 (https://blog.csdn.net/s634772208/article/details/46740191)
     */
    public static void Q1_Way2_ThreeColorSort(int[] AA)
    {
        int p0 = 0;
        int p1 = AA.length -1;
        int i = 0;
        
        while (i <= p1)
        {
            //當前值為負數,與尾指針p1指向的值相互交換,p1向前移動一位, i、p0 位置不變
            if(AA[i]<0)
            {
                int temp = AA[i];
                AA[i] = AA[p1];
                AA[p1] = temp;
                p1--;
            }
            //當前值為正數,與首指針p0指向的值相互交換,p0 向后移動一位, i、p1位置不變
            else if (AA[i]>0 && i>p0)
            {
                int temp = AA[i];
                AA[i] = AA[p0];
                AA[p0] = temp;
                p0++;
            }
            //當前值為 0,i 要向后移動一位,p0、p1位置不變。
            else
            {
                i++;
            }
        }
        
        for (int A : AA)
        {
            System.out.print(A + " ");
        }
        System.out.println("");
    }
    public static void switchNums (int a, int b)
    {
        int temp = a;
        a = b;
        b = temp;
    }

    
    //題二:采用遞歸
    public static int Q2_recursion(int a)
    {
        if(a<1)
        {
            System.out.println("!Check input. Should be a positive integer.");
            return 0;
        }
        else if(a>0 && a<3)
        {
            return 1;
        }
        else
        {
            return Q2_recursion(a-1) + Q2_recursion(a-2);
        }
    }

}

/*** 題三:
* finally 塊:無論是否捕獲或處理異常,finally塊里的語句都會被執行。而且finally也會捕獲異常!當在try塊或catch塊中遇到return語句時,finally語句塊將在方法返回之前被執行。在以下4種特殊情況下,finally塊不會被執行:
1)在finally語句塊中發生了異常。
2)在前面的代碼中用了 System.exit() 退出程序。
3)程序所在的線程死亡。
4)關閉CPU。
*/

/***題四:
 * 多線程 synchronized
 *
*/


免責聲明!

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



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