阅文java服务端开发_阅文笔试复盘

本文作者回顾了阅文集团Java服务端开发的笔试经历,分享了关于多播IP地址、DNS顶级域名的选择题,以及编程题目的解题思路,包括位运算求汉明重量、数组乘积最大化的优化和日期差计算。此外,还提及了附加题中涉及的MD5算法应用,尽管未能成功解答。
摘要由CSDN通过智能技术生成

本文记录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;

}

附加题

fb7785f14623c16fde95d1ca4d0d2151.png

偷一下牛客其他人发的图,这个题我是真的没想到要靠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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值