频道栏目
首页 > 资讯 > 其他综合 > 正文

搜狗2016研发工程师笔试题(二)

17-09-12        来源:[db:作者]  
收藏   我要投稿

 

已知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"<

正确答案: 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

TCP长连接与短连接的区别
数据库中长连接和短连接的区别分析


用二进制表示十进制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。

相关TAG标签
上一篇:微软windows最新内核级漏洞bug破绽:通杀一切Windows版本
下一篇:leetcode学习 Merge Intervals
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站