前几天在投递了搜狗Java开发工程师。需要搞一个在线测评,出了一道题目,是程序填空题

要求观察程序,补全decode,输出一句话:

public  class  Test  { public  static  void  encode(byte[]  in,  byte[]  out,  int  password) { int  len  =  in.length; int  seed  =  password  ^  0x1963f9c; for  (int  i  =  0  ;  i  <  len;  ++i)  { byte  a  =  (byte)(  (  in[i]  ^  seed  )  >>>  2  ); byte  b  =  (byte)(  (  (  ((int)in[i])  <<  13  )  ^  seed  )  >>>  (13-6)  ); a  &=  0x3f; b  &=  0xc0; out[i]  =  (byte)(a  |  b); seed  =  (((seed  <<  7)  ^  seed  ^  in[i])  +  5393887); } } public  static  void  decode(byte[]  in,  byte[]  out,  int  password) { int  len  =  in.length; int  seed  =  password  ^  0x1963f9c; for  (int  i  =  0  ;  i  <  len;  ++i)  { byte a = (byte)(in[i] & 0x3f);  byte b = (byte)(in[i] & 0xc0);a = (byte)(((a << 2) ^ seed) & 0xfc);b = (byte)((((((int)b) << (13-6)) ^ seed) >>13) & 0x03); out[i]  =  (byte)(a  |  b);  seed  =  (((seed  <<  7)  ^  seed  ^  out[i])  +  5393887); } } public  static  void  main(String  []  args)  throws  Exception { int  password  =  0x99b90094; byte[]  buf1  =  {113,  87,  1,  -29,  55,  -5,  65,  13,  -85,  78,  50,  23,  -33,  -29,  73,  117,  -97,  106,  77,  -17,  -107,  -62,  -110,  -126,  -15,  32,  -48,  -128,  }; byte[]  buf2  =  new  byte[buf1.length]; decode(buf1,  buf2,  password); System.out.println(new  String(buf2,  "GBK")); } }

思前想后,发现规律。这就是一系列的移位,我们要做的就是反过来再移一次。先看看encode方法,然后再去实现decode。方法如下:

 public  static  void  decode(byte[]  in,  byte[]  out,  int  password) { int  len  =  in.length; int  seed  =  password  ^  0x1963f9c; for  (int  i  =  0  ;  i  <  len;  ++i)  { byte a = (byte)(in[i] & 0x3f);  byte b = (byte)(in[i] & 0xc0);a = (byte)(((a << 2) ^ seed) & 0xfc);b = (byte)((((((int)b) << (13-6)) ^ seed) >>13) & 0x03); out[i]  =  (byte)(a  |  b);  seed  =  (((seed  <<  7)  ^  seed  ^  out[i])  +  5393887); } } 

最后输出的结果是:听歌从搜狗音乐搜索开始!!!

关于搜狗在线测评上面的题目详解相关推荐

  1. u-boot-2009.08在2440上的移植详解(三)

    一.移植环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-b ...

  2. 计算机组成原理课设题目详解

    计算机组成原理课设题目详解 一.实验一 1.实验名称: 验证74LS181运算和逻辑功能 2.实验目的: (1) 掌握算术逻辑单元(ALU)的工作原理: (2) 熟悉简单运算器的数据传送通路: (3) ...

  3. 如何快速掌握MYSQL?附牛客网精选的50道SQL题目详解【入门推荐】

    大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师.欢迎大家跟我一起走进数据分析的世界,一起学习! 感兴趣的朋友可以关注我的数据分析专栏,里面有许多优质的文章跟大家分享哦. 另外也欢迎大家 ...

  4. 申通快递:核心业务系统云原生化上云技术详解

    简介:如果说,快递行业上半场的竞争拼的是规模.服务乃至价格,进入下半场,快递企业们还需要比拼硬核的技术实力.--周金龙(遥方) 随着云计算的快速发展和成熟,越来越多的企业正在把自己的核心系统向云上迁移 ...

  5. #阿里云原生最佳实践# 申通快递:核心业务系统云原生化上云技术详解

    随着云计算的快速发展和成熟,越来越多的企业正在把自己的核心系统向云上迁移,从而享受云计算带来的技术红利.IDC发布的<全球云计算IT基础设施市场预测报告>显示:2019年全球云上的IT基础 ...

  6. 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装爬虫框架Scrapy(离线方式和在线方式)(图文详解)...

    不多说,直接上干货! 参考博客 全网最全的Windows下Anaconda2 / Anaconda3里正确下载安装OpenCV(离线方式和在线方式)(图文详解) 第一步:首先,提示升级下pip 第二步 ...

  7. 【Linux开发】全面的framebuffer详解

    全面的framebuffer详解 一.FrameBuffer的原理 FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口. Linux是工作在保护模式下,所以用户态进程是无法象D ...

  8. 《oracle大型数据库系统在AIX/unix上的实战详解》讨论31: oracle、sybase 数据库的不同访问...

    <Oracle大型数据库系统在AIX/UNIX上的实战详解> 讨论31:  oracle.sybase 数据库的不同访问方式   文平. 用户来信要求更细节比较一下Oracle和sybas ...

  9. Linux操作系统上lsof命令详解

    Linux操作系统上lsof命令详解 2011-10-08 18:31:31 http://xjsunjie.blog.51cto.com/999372/682865 标签:Linux lsof命令 ...

最新文章

  1. 2020 年,AI 芯片内存哪家强?
  2. Ubuntu上安装oracle java 7
  3. 【转摘】Office三剑客之间的格式互换
  4. Spring Batch可重启性
  5. 【自适应盲均衡9】基于判决反馈的多径衰落信道的盲均衡与MATLAB仿真(CMA-DFE)
  6. 串灯控制盒去掉怎么接_暖通小兵设计系列16-集线盒(中央控制器)简介(余小其转载版本)...
  7. Mac支持NTFS两款软件
  8. SAP GR/IR在系统AP中收货和校验对会计业务的影响(详细)
  9. FW软件的安装及简单的使用;
  10. ios 苹果支付(IAP)
  11. 如何设置微信群名称?
  12. 中英文标点符号转换-在线工具
  13. 单电机板机模型,f22
  14. Python字串(string)基础与20种常见操作
  15. JS基础—移动端网页特效
  16. win8“400 bad request”能登QQ,无法上网解决办法d
  17. kali官方ios下载今天刚刚下载的
  18. 前端生成二维码与图片合成
  19. 优秀架构师必须拥有的架构思维习惯
  20. 现在的年轻人真的浮躁吗?

热门文章

  1. java 切片_JAVA自定义注解并切片应用
  2. 支付宝研究员王益的建议:“学好语文,才能写好代码”(转载)
  3. 被勒索后的72 小时“生死时速”
  4. 瞅瞅2019都干了啥
  5. 编程可视化 - 数组排序过程在图像中的映射
  6. 统计学习方法 -半监督学习
  7. 【计量经济学】时间序列回归的渐进性
  8. 用快速迁移功能将数据传输到新的iphone 14后APP一直显示正在载入怎么办?
  9. 云盘共享产品简单比较
  10. 什么才是好的企业云盘