网易CC研发工程师 笔试题2016-04-15
题目:
1.判断一个数是否是3的幂。
2.判断一个数是否是3的幂,不用循环或递归。
3.正则表达式用来匹配电话号码。
例:(020) 12345678
020-12345678
还有一题正则表达式判断是否可以匹配到cc.163.com。
4.浏览器输入一个url然后都发生了什么?
5.输入年月日时分秒,给出下一秒的时间,如2004年12月31日23时59分59秒,输出2005年1月1日0时0分0秒。
void nextSecond(int *nYear,int *nMonth,int *nDate,int *nHour,int *nMinute,int *nSecond);
6.数据库中有表Person,保存ID和Email两列信息,用select语句找出重复的Email。
7.将0~3999之间的十进制数字转换成罗马数字表示。(I,V,X,D,L,C,M)
8.输入一个整数,判断从0到该整数的二进制数分别有多少个1.返回一个数组。
9.编程题:实现String类的构造函数,拷贝构造函数,析构函数和赋值(等号重载)函数。
10.编程题:每一行输入三个字符串,判断第三个字符串中字符出现的顺序是否符合第一第二个字符串。如: abc def abdefc
11.填空题:int (*ptr)()中ptr是?
12.填空题:32位计算机中int a[3][4],问sizeof(a)=?
13.给出11个数:1,2,12,8,9,10,4,5,6,7,11,求平衡二叉树是?
14.填空题:栈和队列有什么区别?
15.判断一个float类型变量x是不是为0的表达式?
粗略的看了下,15个题,差不多能做一般,算法题,难度一般,正则表达式匹配的没接触我,没有思绪。数据库的题很基础,可是也不记得了。0.0
题解:
2.这是leetcode 326. Power of Three的一道题,不用循环和递归。
ceil(x)返回不小于x的最小整数值(然后转换为double型)。
floor(x)返回不大于x的最大整数值。
round(x)返回x的四舍五入整数值。
#include "iostream" #include "math.h" using namespace std; int main() { while (true) { int n; cin >> n; double ans = log(n) / log(3); if (floor(ans) == ceil(ans)) cout << "YES"<<endl; else cout << "NO"<<endl; //abs(ans - round(ans)) < 1e-10 也可 } }
如果是判断2,4,可用移位操作,右移>>1.
或者,2的n次方,2进制中必然只有一个1,且不在最右位,n&(n-1) ==0
4.以下是一个大概流程:
- 浏览器向DNS服务器查找输入URL对应的IP地址。
- DNS服务器返回网站的IP地址。
- 浏览器根据IP地址与目标web服务器在80端口上建立TCP连接
- 浏览器获取请求页面的html代码。
- 浏览器在显示窗口内渲染HTML。
- 窗口关闭时,浏览器终止与服务器的连接。
这其中最有趣的是第1步和第2步(域名解析)。我们输入的网址(域名)是IP地址的一个别名, 在一个DNS内,一个域名对应一个IP地址。域名系统(DNS) 的工作就是将域名与它的IP地址对应起来。DNS是分布式的,同时也是具有层级关系的。
一个域名服务器虽然只记录一个小的子网内的主机名和IP地址, 但所有的域名服务器联合起来工作,就能将全网内的域名与它们的IP地址对应起来。 这也就意味着,如果一个域名服务器无法找到某个请求域名所对应的IP地址, 它就会向其它的域名服务器发出请求进行寻找。