java常见面试题目总结(持续更新)


收集一些常见并且常规的题目。

ip转int,int转ip

思路:ip字符串以‘.’分割,每个分割部分最大为255,可以用一个byte存储,考虑分别使用int的四个byte字段存储ipv4的四个部分,要使用移位运算;int型的数字转换为ip是逆向的过程,考虑什么数据不需要加‘.’

public class Ip2IntUtils {
    public static int ip2Int(String ip) {
        if (ip == null) return -1;
        String[] array = ip.split("\\.");
        if (array.length != 4) return -1;
        int number = 0;
        for (int i = 0; i < array.length; i++) {
            number |= Integer.valueOf(array[i]) << (24 - i * 8);
        }
        return number;
    }

    public static String int2Ip(int ip) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int data = (ip >>> 24 - i * 8) & 0xff;
            sb.append(data);
            if (i != 3) {
                sb.append(".");
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        String ip = "255.56.89.45";
        int ipInt = ip2Int(ip);
        System.out.println(ipInt);
        System.out.println(int2Ip(ipInt));
    }
}

进制转换

关于进制转换的理论描述https://www.cnblogs.com/gaizai/p/4233780.html

思路:看了理论,思路就很明显了,number取余的结果放入字符串,然后number取整,不断循环,直到number为0为止。对于不同的2、8、16进制的处理思路都是一样的,对于16进制的处理,要考虑取余数的结果超过10时怎么表示

public class DecimalUtils {
    private static String[] converter = {"A", "B", "C", "D", "E", "F"};

    /**
     *
     * @param number 待转换数字
     * @param decimal
     * @return
     */
    public static String decimalConvert(int number, int decimal) {
        if (number == 0) return "0";
        StringBuilder sb = new StringBuilder();
        while (number != 0) {
            if (number % decimal >= 10) {
                sb.append(converter[number % decimal - 10]);
            } else {
                sb.append(number % decimal);
            }
            number = number / decimal;
        }
        return replaceString(sb.toString());
    }

    public static String replaceString(String str) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = str.length()-1; i >= 0 ; i--) {
            stringBuilder.append(str.charAt(i));
        }
        return stringBuilder.toString();
    }

    public static void main(String[] args) {
        int number = 255;
        int decimal = 16;
        System.out.println(decimalConvert(number, decimal));
    }
}
发布了35 篇原创文章 · 获赞 81 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/chanllenge/article/details/96163901