阅文笔试复盘

本文记录2020-05-19的阅文Java方向笔试复盘,有些题目不是很记得了,把自己记得的写一下吧。

单选题

  多播的IP地址是哪一类?

    说实话这个题一开始我也懵逼,虽然自己有点记忆但是不是很敢选,后来结束后查了一下是D类地址,还好选对了。

多选题

  DNS顶级域名有哪些?

    这个题做的时候一直不敢选.cn,我模模糊糊记得.cn是好像不属于顶级域名,就选了.net和.com,结果翻车了。

编程题

  1. 剑指Offer原题,给一个整数,让你求出它二进制数1的个数。https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/

  说实话这个题都已经做烂了,直接位运算秒杀掉。

  

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int count = 0;
        while(n != 0){
            count += n&1;
            n = n>>>1;
        }
        return count;
    }
}

  2.给定一个数组,要求你删除其中某一个数之后让整个数组乘积最大,返回第一个被删除的数的下标。

  这个题我寻思暴力解好像没啥问题,但是用以下的代码只能过80%,没搞懂

public int find(long[] nums){
        int index = -1;
        long sum = 1;
        long max = 0;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] == 0){
                return i;
            }
            sum *= nums[i];
        }
        for(int i = 0; i < nums.length; i++){
            long temp = sum / nums[i];
            if(i == 0){
                max = temp;
                index = i;
                continue;
            }
            if(temp > max && nums[i] != nums[index]){
                max = temp;
                index = i;
            }
        }
        return index;
    }  

  难不成是输入只有1个数据的时候???不是很懂

  3.给定两个时间,让你求出他们之间相差多少秒,格式是 yyyy-MM-dd HH:mm:ss

  这个题说道我就自己气死,明明有系统自带的api,我干嘛还手动写一个去浪费时间呢?????

  贴一下用API大法

  

private static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";
    /***
     * 两个日期相差多少秒
     *
     * @param date1
     * @param date2
     * @return
     */
    public  int getTimeDelta(Date date1,Date date2){
        long timeDelta=(date1.getTime()-date2.getTime())/1000;//单位是秒
        int secondsDelta=timeDelta>0?(int)timeDelta:(int)Math.abs(timeDelta);
        return secondsDelta;
    }

    /***
     * 两个日期相差多少秒
     * @param dateStr1  :yyyy-MM-dd HH:mm:ss
     * @param dateStr2 :yyyy-MM-dd HH:mm:ss
     */
    public  int getTimeDelta(String dateStr1,String dateStr2){
        Date date1=parseDateByPattern(dateStr1, yyyyMMddHHmmss);
        Date date2=parseDateByPattern(dateStr2, yyyyMMddHHmmss);
        return getTimeDelta(date1, date2);
    }

    public  Date parseDateByPattern(String dateStr,String dateFormat){
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        try {
            return sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

附加题

  

   偷一下牛客其他人发的图,这个题我是真的没想到要靠md5,当初上信息安全课和网络安全自己用过md5这个算法,结果特么现在居然真的考到了,可惜我早已忘记相关的API 555555

  然后我就死在了第四步上~~

  还是贴一下自己的代码吧,尽管好像输出跟题目给的输出不一样?

    public String createToken (ArrayList<String> querys) {
        // write code here
        String[][] str = new String[querys.size()][];
        for(int i = 0; i < querys.size(); i++){
            str[i] = querys.get(i).split("=");
        }
        String[] keys = new String[str.length];
        HashMap<String,String> map = new HashMap<>();
        for (String[] strings : str) {
            map.put(strings[0], strings[1]);
        }
        for(int i = 0; i < str.length; i++){
            keys[i] = str[i][0];
        }
        Arrays.sort(keys);
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < keys.length; i++){
            sb.append(keys[i]);
            sb.append("=");
            sb.append(map.get(keys[i]));
            if(i != keys.length-1){
                sb.append("&");
            }
        }
        System.out.println(sb.toString());
        return MD5Utils.stringToMD5(sb.toString());
    }
package com.company;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {
    public static String stringToMD5(String plainText) {
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("md5").digest(
                    plainText.getBytes());
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("没有这个md5算法!");
        }
        String md5code = new BigInteger(1, secretBytes).toString(16);
        for (int i = 0; i < 32 - md5code.length(); i++) {
            md5code = "0" + md5code;
        }
        return md5code;
    }

}

猜你喜欢

转载自www.cnblogs.com/ZJPaang/p/12919836.html
今日推荐