正如上一篇文章 支持向量机通俗导论(理解SVM的三层境界)末尾所述:” 额,blog许久未有更新了,因为最近实在忙,无暇顾及blog。“与此同时,工作之余,也在一直闲心研究学习数据挖掘:" 神经网络将可能作为Top 10 Algorithms in Data Mining之番外篇第1篇,同时,k-最近邻法(k-nearest neighbor,kNN)算法谈到kd树将可能作为本系列第三篇。这是此系列接下来要写的两个算法,刚好项目中也要用到KD树“。
但很显然,若要等到下一篇数据挖掘系列的文章时,说不定要到年底去了,而最近的这段时间,9月,正是各种校招/笔试/面试火热的时节,自己则希望能帮助到这些找工作的朋友,故此,怎能无动于衷,所以,3个多月后,blog今天更新了。
再者,虽然如我的这条微博:http://weibo.com/1580904460/yzs72mmFZ所述,blog自10年10月开通至11年10月,一年的时间内整理了300多道面试题(这300道题全部集锦在此文中第一部分:http://blog.csdn.net/v_july_v/article/details/6543438)。但毕竟那些题已经是前年或去年的了,笔试面试题虽然每年类型变化不大,但毕竟它年年推陈出新,存着就有其合理性。
OK,以下是整理自8月下旬至9月中旬各大公司的笔试面试二十题,相信一定能给正在参加各种校招的诸多朋友多少帮助,学习参考或借鉴(当然,你手头上若有好的笔试/面试题,欢迎通过微博私信:http://weibo.com/julyweibo,或邮箱:[email protected]发给我,或者干脆直接评论在本文下,再者,如果你对以下任何一题有任何看法.想法.思路或建议,欢迎留言评论,大家一起讨论,享受思考的乐趣)。
9月11日, 京东:
谈谈你对面向对象编程的认识
4**9 的笔试题,比较简单:
1.求链表的倒数第二个节点
2.有一个整数数组,求数组中第二大的数
360PHP笔试全套试题:
1、手工写代码一个HTML提交表单,注意(表单对齐方式)
JavaScript代码
1.
XML/HTML代码
1.
2、写一段上面表单的PHP验证程序
PHP代码
1.
3、继上一题写出HTTP请求与接收的报文(摘录)
(1)请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。这里介绍最常用的GET方法和POST方法。
GET:当客户端要从服务器中读取文档时,使用GET方法。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind。
POST:当客户端给服务器提供信息较多时可以使用POST方法。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据。
(2)请求头部
请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表。
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
(3)空行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
(4)请求数据
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
4、正则匹配邮箱地址
PHP代码
1.
Shell代码
1. grep -r hello *.xml
5、autoload机制
在$object = new UFO;时,试图调用一个未引入的类文件在系统报错之前,会尝试使用__autoload进行加载类,如果定义了__autoload方法将按照此规则进行加载类文件
6、实现strrev()函数“360奇虎”,不使用mb_substr情况下。
PHP代码
1. 0xa0) {
10. $rev_string = substr($string, $i, $byte_len) . $rev_string;
11. $i+= $byte_len;
12. } else {
13. $rev_string = substr($string, $i, 1) . $rev_string;
14. $i++;
15. }
16. }
17. echo $rev_string;
7、使用了索引查询的语句,EXPLAIN
SQL代码
1. SELECT * FROM user where name='a';
2.
3. SELECT * FROM user where name='a' OR name='b';
4.
5. SELECT * FROM user where name like 'a%';
多玩YY 2012校园招聘笔试题 C++ A卷
时间:120分钟 提示:请注意代码风格
1、请给出以下程序的输出:(12分)
class A
{
public:
A()
{
puts("In A");
}
~A()
{
puts("Out A");
}
};
class B
{
public:
B()
{
puts("In B");
}
~B()
{
puts("Out B");
}
};
class X
{
public:
X()
{
puts("In X");
}
~X()
{
puts("Out X");
}
virtual void test()
{
puts("test in X");
}
};
class C:public X
{
public:
C(): b(), a()
{
puts("In C");
}
~C()
{
puts("Out C");
}
virtual void test()
{
puts("test in C");
}
private:
A a;
B b;
};
int main()
{
X* p = new C;
p->test();
delete p;
return 0;
}
2、请简述以下const的作用(8分)
1)const int a = 10;
2)const int*
3)int * const a
4)void T::test() const
3、请问以下过程调用的时拷贝构造函数还是赋值运算符:(6分)
class Test{…}
Test a,b;
a = b; 1)
Test a;
Test b = a; 2)
Test a;
Test b(a); 3)
4、请完成以下函数的填空:(9分)
int binarySearch(int from, int to, int target, int *array)
{
/*
功能:从array中查找target,返回target在array中的下标
*/
if(from <= to)
{
int middle = (from + to) /2;
if(array[middle] == target)
else if(array[middle]
5、请给出以下程序的输出:(5分)
class T
{
public:
T()
{
puts("T()");
}
~T()
{
puts("~()");
}
private:
};
void test(T t)
{
}
int main()
{
T t;
test(t);
return 0;
}
6、下面的代码段有几处错误,请根据程序的意图,写出正确的server类(10分)
提示:这段代码实现的功能是定期向各个server 发ping包,各个server对象是在不同时间创建的
class Server
{
Server()
{
}
~Server()
{
}
void checkSendPing()
{
/*
每隔5秒给该服务器发ping
*/
static int lastSendPing = (int)time(NULL);
int now = (int)time(NULL);
if(now < lastSendPing + 5)
return;
//send ping to peer
}
private:
};
void monitorServer(std::vector& x)
{
/*
监控所有服务器的状态,这个函数每秒运行一次
*/
for(std::vector::iterator it = x.begin();
it != x.end();++it)
it->checkSendPing();
}
7、(编程题)100万个数据,数据值在0~65535之间,请用尽可能少的内存和最快的速度从小到大排序(10分)
void sort(int* array, int n)
{
//n的值在100万左右
//你的实现
}
8、(编程题)请完成如下函数,从长度为n的数组array中删除值等于v的元素,返回删除后的数组array和元素个数(10分)
int remove(int* array, int n, int v)
{
//你的实现
}
9、(编程题)请看以下的Maixu结构:(15分)
struct Maixu
{
int sid; //id
std::list userlist: //队列
int validTime; //预定时间,每个结构不一样,平均5分钟左右,以秒为单位
int leftTime; //剩余时间,以秒为单位
};
其中队列userlist中每一项都在预定的时间validTime后出队,比如当前队列是{1,2,3},validTime是5秒,则5秒后1出列,队列变为{2,3},再过5秒2出队,队列变为{3},相应的实现代码如下:
std::vector m_maixus; /*这个vector长度最多可以达到100000*/
void Timer() //Timer函数每秒运行一次
{
for(std::vector::iterator it = m_maixus.begin();
it !=m_maixus.end();++it)
{
if(it->userlist.empty())
continue;
if(--it->leftTime == 0)
{
//时间到
it->userlist.pop_front();
it->leftTime = it->validTime;
//其他操作
}
}
}
请问上面的实现方式有没有什么问题?如何改进?请提出你的改进方案并重写上面的代码段。
10、(思考题)有服务器S1、S2…Sn(100>n>50),每个服务器上维护着连接到该服务器的用户的信息,服务器之间互相连接,当用户信息有更新,必须通知到与它相连的其它服务器。比如S1上的用户a改了昵称,必须通知到S2 、S3…但由于网络的不可靠,更新通知不一定每次都能到达其它服务器,假设S2丢了通知,则S2必须同步上的用户信息,最差情况下,S2~Sn都可能同时丢了S1的通知而导致同步。
每个服务器大概维护10000个用户,用户的信息结构如下,大小平均约100B:(15分)
struct UserInfo
{
int userId; //用户id
string nickname; //昵称
string sign; //签名
//其它用户信息
};
问题:
1) S2如何发现它丢了S1的通知?
2) 每个服务器的带宽限制10M/s,请给出一个可用的同步方案,保证服务器带宽不超过限制的情况下完成同步工作;
3) 显然如果通知越可靠,同步将会大大减少,请提出一些能提高通知可靠性的方案并简单说明它的实现。