您的位置:首页 > 其它

2018网易校招移动安全工程师笔试题

2017-09-09 17:30 260 查看
**声明,凭记忆写下。如有冒犯公司版权,请通知删除!

笔试题型:

20道单选 40分

3道编程 60分

2道问答 40分

一、单选题

安卓逆向知识:DexClassHeader的内容、快速排序一趟过后的顺序、Anti-Emulator技术、安卓反编译的保护方式、ios迭代、引起ANR的原因

二、编程题

(1)小易最初没有魔法币,但是可以通过魔法机器得到,第一台魔法机器输入x枚魔法币,得到2*x+1枚,第二台魔法器输入x枚银币得到,2*x+2枚。 现给定一个数字n,必须由第一二台魔法器得到。

输出投掷魔法器的顺序(题干中隐含意思是所有银币都要参与交易,不能由2个中拿出一个这样投)

输入:10

输出:122

代码如下

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//小易投的钱币中,设为N
//n的解决方案为:(1)N位偶数,f(n)=f(n/2-1)+"2"
//(2)n为奇数:f(n)=f(n/2)+"1"
int find(int n)
{   int i;
if(n==1)
{
printf("1");
return 0;
}
else if(n==2)
{
printf("2");
return 0;
}

else if(n%2==0)
{
i=n/2;
i--;
find(i);
printf("2");
return 0;
}
else
{
i=n/2;
find(i);
printf("1");
return 0;
}

}
int main(int argc, char** argv) {
int n;

scanf("%d",&n);
find(n);
return 0;
}


已AC

(2)给定一个数列,请你将它排列成符合如下要求的数列:a[i]*a[i+1]可以被4整除。如果可以排列成这种数列,输出Yes,否则输出No.

输入:

(1)第一行表示有多少测试用例

(2)后面每两行的第一行为数列中数的个数

(3)第二行数为数列

样例输入:

2

3

1 10 100

4

1 2 3 4

样例输出:

Yes

No

代码如下,已AC

#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//数列分为2的倍数,4的倍数,以及奇数
//其中2的倍数的最后一个数后面必须是4
//奇数中间必须插4的倍数
//所以满足的条件必须是4的倍数的个数=奇数个数+是否有2

#define MAX 100000
int main(int argc, char** argv) {
int t;
int i;
scanf("%d",&t);
for(i=0;i<t;i++)
{
int n;
int a[MAX];
scanf("%d",&n);
for(int j=0;j<n;j++)
{
scanf("%d",&a[j]);
}
//统计4的倍数,如果不是4的倍数,看是否为奇数
int f4=0;
int istwo=0;//是否有2的倍数
int odd=0;//奇数个数
for(int j=0;j<n;j++)
{
if(a[j]%4==0)
f4++;
else if(a[j]%2==0)
istwo++;
else
odd++;
}
if(istwo!=0)
{
if(f4>=odd)
printf("Yes\n");
else
printf("No\n");
}
else
{
if(f4>=odd-1)
printf("Yes\n");
else
printf("No\n");
}

}
return 0;
}


三、问答题

(1)怎么实现像360助手那样的悬浮框?

答:用windowManager的addView

(2)IOS逆向工具的介绍
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: