面试题-编程类

1、写一段代码在遍历 ArrayList 时移除一个元素?
    该问题的关键在于面试者使用的是 ArrayList 的 remove() 还是 Iterator 的 remove()方法。

Iterator it= list.iterator();
while(it.hasNext()) {
      if(...) {
        it.remove();
      }
}

2、怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?

String s1 = "你好";
String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");

3、如何实现字符串的反转及替换?

方法一:通过StringBuiler的reverse()的方法,最快的方式
	public String reverseStr(String str) {
		StringBuilder sb = new StringBuilder(str);
		return sb.reverse().toString();
	}

方法二:逆序遍历法(将字符串转换成字符数组,可对数组进行逆序遍历)
	public String reverseStr(String str){
		char[] c = str.toCharArray();
		StringBuilder sb = new StringBuilder();
		for(int i=c.length-1;i>=0;i--){
			sb.append(c[i]);
		}
		return sb.toString();
	}

方法三:递归法
	public String reverse(String str) {
		if(str == null || str.length() <= 1)
			return str;
		return reverse(str.substring(1)) + str.charAt(0);
	}

4、用Java写一个单例类?

- 饿汉式单例
public class Singleton {
    private Singleton(){}
    private static Singleton instance = new Singleton();
    public static Singleton getInstance(){
        return instance;
    }
}
- 懒汉式单例
public class Singleton {
    private Singleton() {}
    private static Singleton instance = null;
    public static synchronized Singleton getInstance(){
        if (instance == null) 
            instance = new Singleton();
        return instance;
    }
}

      注意:实现一个单例有两点注意事项,①将构造器私有,不允许外界通过构造器创建对象;②通过公开的静态方法向外界返回类的唯一实例。这里有一个问题可以思考:Spring的IoC容器可以为普通的类创建单例,它是怎么做到的呢?(将bean的作用域设置为singleton)

5、用Java写一个冒泡排序?

    /**
     * 冒泡排序
     */
    private static void bubbleSort(int[] arr) {
        int temp;
        boolean flag;//标志位:循环开始时置为true,如果循环中发生数据交换(有排序行为),则置为false;如果没有发生数据交换,则跳出循环
        for (int i = 0; i < arr.length - 1; i++) {
            flag = true;
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    flag = false;
                }
            }
            if (flag) {//没有发生交换(表示已经是有序的了)则退出循环;
                break;
            }
        }
    }

6、用Java写一个折半查找(二分查找)?

    private static int binarySerach(int[] arr, int key) {
        int left = 0;
        int right = arr.length - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (arr[mid] == key) {
                return mid;
            } else if (arr[mid] < key) {
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        return -1;
    }

7、

猜你喜欢

转载自blog.csdn.net/m0_37524661/article/details/81662193