• 阅文笔试复盘


    本文记录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;
        }
    
    }
  • 相关阅读:
    【Cookie】java.lang.IllegalArgumentException An invalid character [32] was present in the Cookie value
    【会话技术】Cookie技术 案例:访问时间
    进程池
    管道和Manager模块(进程之间的共享内容)
    队列
    锁Lock,信号量Semaphore,事件机制Event
    multiprocess模块
    进程
    reduce
    struct模块
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/12919836.html
Copyright © 2020-2023  润新知