今天腾讯笔试,自我感觉良好,但是做完之后想到诸多问题。。。。目前把记得的题目记录一下以便之后复习和思考。
首先是一道选择题:一个有五个节点的二叉树有多少种可能性?当时并没有提升到理论高度,只是单纯的分情况讨论,结果把自己给弄混了,随便选了一个,现在来整理一下:
一个有N个节点的二叉树有多少种可能。。这个问题确切地说是一个数学问题,跟数据结构联系并不是很大,数学推导占据了很大成分。
首先考虑n=1的情况。显然只有根节点f(1) = 1;
n = 2时,有一个根节点,还有n-1 = 1个节点可以作为左子树或者右子树,即 f(2) = f(0)*f(1)+f(1)*f(0) = 2。f(0) = 1,表示没有节点的情况。
n = 3时,f(3) = f(0)*f(2)+f(1)*f(1)+f(2)*f(0) = 5个。
因此可知:f(n) = f(n-1)*f(0)+……+f(0)*f(n-1)。
恰好为卡特兰数,具体推导公式在此不列出,通项公式为
f(n) = C(n,2n)/(n+1)(n=1,2,3……)
选择题中只有这一道题印象比较深刻了,其他题目大多是语法题目,还有道快排的,因为快排实现方式很多种,并不清楚哪一种是他用的,但是貌似只找到一个符合快速排序生成的序列的,就选上了。语法题比较不得其解的是我报的应该是C/C++方向,结果问了许多python、java和ios开发的。。。。基本碰到就只能瞎猜了。。
大题感觉并没有上次那些摸不着头脑,也可能是最近确实提升了一点^_^
一道题目是用C语言求出当前系统整型变量的字长,当时我想了两种方法,第一种是定义一个整型和一个bool变来那个,相除即得倍数,而bool在不同系统中是固定大小的,可以轻易求得,但是转而想到如果能求出一个整型的长度,那就算直接求出了结果,没有必要再与bool类型算来算去,于是就同时定义了两个整型,用后面那个的地址减去前面那个的地址,当时觉得是正确的,事后一思考,突然发现了bug:两个整型并不是相邻的,因此地址可能风马牛不相及!同时想到了定义数组的方法,用相邻元素的地址相减必然是整型的长度。
一道题目是服务器能够承载的访问量/sec有限,设计一种方法能够减轻负载对服务器的损耗。我瞬间就想到的计算机网络中讲到的拥塞控制,但是那个是协议方面的,不知道答上去对不对,后来跟女朋友交流了下,她想到了直觉上更可行的验证码,也是一个不错的思路。我当时写的就是使用随机早期检测,设置最大门限和最小门限,然后在三段区间分别执行不同的策略,感觉也是个不错的方法,但是不知道服务器能否执行这个方法。相比而来验证码反而更为有效。事后我也想到了其他方法:限制指定ip的访问频率,比如设置访问请求后过3s或者5s才能进行下一个请求,但是对于高度使用用户可能会影响用户体验。
有一道题给了一个xml格式的文档,并使用里面的数据进行编程。感觉上就是考察一下对xml文档的使用,还有怎么使用配置文件等,遗憾的是我并没有学到。因此我就定义了两个常量并使用他们编程了。
还有一道题目是问结构体内各个变量的地址。我想了想感觉结构体的话并不是随着实例化初始化的,这里考察到的可能是定义和初始化的问题。我是觉得结构体内的变量应该是在它被初始化的时候分配的变量,因此就按照这个思路来画图,而且它初始化的时候也直接分配了地址,如果这么来看,还是很水的一道题目。。。
有一道完全蒙圈的题目:进程之间是如何进行资源共享的。这个我依稀记得操作系统中讲了几种方式,但是事到临头别说优缺点和使用场景了,连名字都不太记得,只写了文件映射、内存共享和管道方式,操作系统还是有待加强,之后的计划是读《深入理解计算机系统》(在这里感谢蓝色大神的指点,为我指出我操作系统方面的不足)
总而言之这次的题目如果没有什么陷阱,那并不是很难的一次笔试,但是我答的情况也不是特别好,还是希望能收到信息吧!以后继续加油~
原文:http://www.cnblogs.com/kangyun/p/4405254.html