本文记录2020-05-19的阅文Java方向笔试复盘,有些题目不是很记得了,把自己记得的写一下吧。
单选题
多播的IP地址是哪一类?
说实话这个题一开始我也懵逼,虽然自己有点记忆但是不是很敢选,后来结束后查了一下是D类地址,还好选对了。
多选题
DNS顶级域名有哪些?
这个题做的时候一直不敢选.cn,我模模糊糊记得.cn是好像不属于顶级域名,就选了.net和.com,结果翻车了。
编程题
说实话这个题都已经做烂了,直接位运算秒杀掉。
public classSolution {//you need to treat n as an unsigned value
public int hammingWeight(intn) {int count = 0;while(n != 0){
count+= n&1;
n= n>>>1;
}returncount;
}
}
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){returni;
}
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;
}
}returnindex;
}
难不成是输入只有1个数据的时候???不是很懂
3.给定两个时间,让你求出他们之间相差多少秒,格式是 yyyy-MM-dd HH:mm:ss
这个题说道我就自己气死,明明有系统自带的api,我干嘛还手动写一个去浪费时间呢?????
贴一下用API大法
private static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";/***
* 两个日期相差多少秒
*
*@paramdate1
*@paramdate2
*@return
*/
public intgetTimeDelta(Date date1,Date date2){long timeDelta=(date1.getTime()-date2.getTime())/1000;//单位是秒
int secondsDelta=timeDelta>0?(int)timeDelta:(int)Math.abs(timeDelta);returnsecondsDelta;
}/***
* 两个日期相差多少秒
*@paramdateStr1 :yyyy-MM-dd HH:mm:ss
*@paramdateStr2 :yyyy-MM-dd HH:mm:ss*/
public intgetTimeDelta(String dateStr1,String dateStr2){
Date date1=parseDateByPattern(dateStr1, yyyyMMddHHmmss);
Date date2=parseDateByPattern(dateStr2, yyyyMMddHHmmss);returngetTimeDelta(date1, date2);
}publicDate parseDateByPattern(String dateStr,String dateFormat){
SimpleDateFormat sdf= newSimpleDateFormat(dateFormat);try{returnsdf.parse(dateStr);
}catch(ParseException e) {
e.printStackTrace();
}return null;
}
附加题
偷一下牛客其他人发的图,这个题我是真的没想到要靠md5,当初上信息安全课和网络安全自己用过md5这个算法,结果特么现在居然真的考到了,可惜我早已忘记相关的API 555555
然后我就死在了第四步上~~
还是贴一下自己的代码吧,尽管好像输出跟题目给的输出不一样?
public String createToken (ArrayListquerys) {//write code here
String[][] str = newString[querys.size()][];for(int i = 0; i < querys.size(); i++){
str[i]= querys.get(i).split("=");
}
String[] keys= newString[str.length];
HashMap 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= newStringBuilder();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());returnMD5Utils.stringToMD5(sb.toString());
}
packagecom.company;importjava.math.BigInteger;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;public classMD5Utils {public staticString 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;
}returnmd5code;
}
}