标签:数组 sim public long hal signed sys hmm href
本文记录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; } }
标签:数组 sim public long hal signed sys hmm href
原文地址:https://www.cnblogs.com/ZJPaang/p/12919836.html