搜狗2016研发工程师笔试题(二)
https://www.nowcoder.com/test/980452/summary
已知i为整数,d[i]表示i的正约数的和,已知10000除以1到10000所有整数的余数和为17743986,求1<=i<=10000范围内所有d(i)的和的末4位()
智力题
A. 1774
B. 3986
C. 6014
D. 8225
正确答案: C
对于 ∑ d(i) = d(1)+d(2)+……d(10000)这个式子来说,因为1-10000每个数都有可能是1-10000中某个数的约数,所以上式可以写成∑ d(i) = d(1)+d(2)+……d(10000)= 1*n1+2*n2+3*n3+……10000*n,而对于式子中的n1,n2,n3….可以理解为10000以内存在约数等与这个数字的个数,很明显n1 = 10000因为10000以内的每个数都有约数1,n2 = 5000因为10000以内约数中有2的数字有5000个,类似的可以得到n = 10000/x 也就是说10000中有10000/x个数的约数中有x
在区间[-2,2]里任取2个实数,它们的平方和>1的概率是大约是()
概率统计
A. 84%
B. 80%
C. 65%
D. 57%
正确答案: B
该区间内任意取两个数就相当于在直角坐标系中任意取一个点,转化为如下问题:
在正方形范围内,任意取一点落在黄色区域的概率。
圆半径 R 的平方 = X 的平方 + Y 的平方
(16-3.14)/16约为0.8
关于代码输出正确的结果是()(Linux g++ 环境下编译运行)
C/C++
int main(int argc, char *argv[])
{
string a="hello world";
string b=a;
if (a.c_str()==b.c_str())
{
cout<<"true"<<endl;
}
else cout<<"false"<<endl;
string c=b;
c="";
if (a.c_str()==b.c_str())
{
cout<<"true"<<endl;
}
else cout<<"false"<<endl;
a="";
if (a.c_str()==b.c_str())
{
cout<<"true"<<endl;
}
else cout<<"false"<<endl;
return 0;
}
A. false false false
B. true false false
C. true true true
D. true true false
正确答案: D
string. c_str
是 Borland封装的String类中的一个函数,它返回指向当前字符串的指针 。
string b=a 拷贝后 , a与b的 地址是不同的。a.c_str()==b.c_str()
相当于p1==p2
。判断指针是否指向同一个地址 ,故 为假
一班只在上午有课,二班只在下午有课,同学A某天下午要上课,则以下说法正确的是()
智力题
A. A不是二班的
B. A是一班的
C. A是二班的
D. A不是一班的
正确答案: D
一班的人一定是而且必须是上午上课,而这货下午上课,肯定不是一班的,但是可能是别班的,不一定是二班
以下说法中正确的是()
机器学习
A. SVM对噪声(如来自其他分布的噪声样本)鲁棒
B. 在AdaBoost算法中,所有被分错的样本的权重更新比例相同
C. Boosting和Bagging都是组合多个分类器投票的方法,二者都是根据单个分类器的正确率决定其权重
D. 给定n个数据点,如果其中一半用于训练,一般用于测试,则训练误差和测试误差之间的差别会随着n的增加而减少
正确答案: B D
以下计算斐波那契数列的函数时间复杂度为()
编程基础
A. O(nlogn)
B. O(n^2)
C. O(n)
D. O(2^n)
正确答案: D
有三个线程T1,T2,T3,下面方法可以确保它们按顺序执行的有()该线程继续执行
并发
A. 先启动最后一个(T3调用T2,T2调用T1)
B. 可以用线程类的join()方法在一个线程中启动另一个线程,另一个线程完成
C. 先启动第一个(T3调用T2,T2调用T1)
D. 以上选项说法都不正确
正确答案: A B C
应该选ABC.亲测!!!!
实际上先启动三个线程中哪一个都行,
因为在每个线程的run方法中用join方法限定了三个线程的执行顺序。
即便是第二个线程先启动执行了,由于t1.join()方法,
使得线程2需要等待线程1运行结束后才能继续运行。
所以三个线程的启动顺序无关紧要!!!
public class JoinTest2 {
// 1.现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行
public static void main(String[] args) {
final Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("t1");
}
});
final Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
// 引用t1线程,等待t1线程执行完
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t2");
}
});
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
try {
// 引用t2线程,等待t2线程执行完
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("t3");
}
});
t3.start();//这里三个线程的启动顺序可以任意,大家可以试下!
t2.start();
t1.start();
}
}
下面关于synflood攻击的说法,错误的是()
网络基础
A. 服务端由于连接队列被占满而不能对外服务
B. 不但能攻击TCP服务,还可以攻击UDP服务
C. 大量连接处于SYN_RECV状态
D. 使用硬件防火墙可以一定程度上抵御攻击
正确答案: B
以下属于Hash碰撞解决方法的是()
哈希
A. 线性探测
B. 二次探测
C. 拉链法
D. 二次散列
正确答案: A B C D
常见哈希冲突解决办法:
1.开放地址法 2.线性探测法 3.链地址法(拉链法) 4.二次探测法
5.伪随机探测法 6.再散列(双重散列,多重散列) 7.建立一个公共溢出区
单旋转法是建立散列函数的一种方法, ,将最后一位数,旋转放置到第一位
常见的散列函数有,直接定址法,数字分析法,平法取中法,取余法,折叠法,随机法
关于HTTP协议头描述不正确的是()
网络基础
A. cookie是通过http请求正文到服务器端
B. cookie是保存在客户端的
C. 服务器端可以读取用户端的所有cookie
D. cookie是通过http请求报头传到服务器端
正确答案: A C
下列哪些函数的返回类型是属于windows内核对象()
Windows
A. CreatePen
B. CreateEvent
C. CreateFile
D. CreateSemaphore
正确答案: B C D
在Windows操作系统中我们常常接触的有三种对象类型:
Windows内核对象 (事件对象,文件对象,进程对象,I/O完成端口对象,互斥量对象,进程对象,线程对象等等):由执行体(Excutive)对象管理器(Object Manager)管理,内核对象结构体保存在系统内存空间(0x80000000-0xFFFFFFFF),句柄值与进程相关。
Windows GDI对象 (画笔对象,画刷对象等):由Windows子系统管理,句柄值在系统,会话范围 (system-wide / session-wide) 有效。
Windows USER对象 (窗口对象,菜单对象等) :由Windows子系统管理,句柄值在系统,会话范围 (system-wide / session-wide) 有效。
四个选项分别为画笔对象,事件对象,文件对象,互斥量(信号量)对象,所以B,C,D正确
下面说法正确的有()
网络基础
A. 短连接多用于操作频繁,点对点的通讯,且连接数不能太多的情况
B. 数据库的连接一般都用长连接
C. web网站的http服务一般都用短连接
D. 长连接多用于并发量大,但是每个用户又不需频繁操作的情况
正确答案: B
用二进制表示十进制1-4,分别为1,10,11,100,这些二进制数每一位上1的个数共为5个.那么,用二进制表示的十进制数1-128,每一位上1的个数共有()
编程基础
A. 1025
B. 448
C. 449
D. 1024
答案是:128 * 7 / 2 + 1 = 449
因为127=1111111,七个1。即每一位上可以是0或者1。总共128个数,每一位上有一半是0,一半是1。所以除以2。
128即是第8位为1。所以需要加1。