小药药面试 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
 *
*/
posted @ 2019-06-21 20:17  allenbackpacker  阅读(895)  评论(0编辑  收藏  举报