第一次面试之TCL面试总结

来源:互联网 发布:360电脑软件管家 编辑:程序博客网 时间:2024/05/17 07:21
第一次参加校园招聘,没什么经验,其中不少地方做的不好,导致没有拿到Offer,止步于一面。
TCL的招聘流程是网申--->-在线测评-->宣讲会--->通讯类线下笔试--->一面--->二面--->offer,在线测评主要是些职业测评,只要认真做了,应该都能过,宣讲会主要是介绍公司和问答,不用再投纸质简历,不去亦可。同学线上笔试主要考的C语言,我是线下笔试。软件开发的试题只有三道题目,看起来很简单。我因为闹肚子,匆匆忙忙做完就交了,没有检查。结果笔试成绩不理想,一面时看到最后一题40分只得了15分。其他的估计也不高,下面说下三道笔试题:
第一题:求1+2/1+3/2+ 5/3 + 8/5 + 。。。。。。前20项之和。
初看这道题都以为很简单,直接秒杀,于是分分钟写下如下代码:
int i;double sum0 = 1.0,sum1 = 1.0,sum2 = 2.0,temp;for(i = 0; i < 19; ++i){sum0 += sum2 / sum1;temp = sum1 + sum2;sum1 = sum2;sum2 = temp;}printf("sum20 = %lf\n",sum0);


但是很遗憾,30分只能得到5~10分,我就是这样写的。后来问同学才知道精度问题,应该先通分,再相除。。。细节决定成败。于是我们又可以写出以下类似代码:
#include <stdio.h>int maxDivisor(int m,int n){while( m != n){if(m > n){m = m-n;}else if(m < n){n = n-m;}}return m;}int main(){int i,a1 = 1,a2 =1,b1 = 2,b2 = 1,temp,min;double sum;for(i = 1; i < 20;++i){temp = a2;a2 = a2 * b2;a1 = a1 * b2 + b1 * temp;min = maxDivisor( a2, a1 );a2 /= min;a1 /= min;/*min = maxDivisor(a2,b2);temp = a2;a2 = b2*a2/min;a1 = (a2 / temp) * a1 + (a2 / b2)*b1;*/temp = b1;b1 = b1 + b2;b2 = temp;printf("min = %d,a1 = %d,a2= %d,b1 = %d,b2 = %d\n",min,a1,a2,b1,b2);}sum = (double)a1 / double(a2);printf("%lf\n",sum);return 0;}
但是很可惜,又有溢出问题,变成long的话也会在第12项左右溢出,我想到的解决方案是用大整数。。。但是写起来的话卷子上那三分之一面的空白处应该是写不完的,我想应该有更好的方法。亦或是出题的人只想考我们精度,自己也没考虑溢出的情况。
第二题是线程A往队列Q写数据,线程B从队列读数据,写伪代码即可。
一看感觉就是生产者消费者问题,也是分分钟写完,具体分数不知道,同学写的源代码。整张卷子只扣了4分。

第三题是求abbcde的全排列,其中e不能在第三位,ad不能相邻。
因为之前看过这题,考前还和同学请教了下,于是题目只看到前面就写了,以为就写个全排列,很快写完,就交卷上WC去了,结果就悲剧了,只得了15分,所以说细节决定成败。面试完后回来自己写了份代码,其实静下心来也不难,同学满分秒杀。。。。。。。
#include <stdio.h>bool isSwap(char a[],int start,int end){for(int i = start; i < end; ++i){if(a[i] == a[end])return false;}return true;}void swap(char &a,char &b){char temp;temp = a;a = b;b = temp;}bool isNotPrintf(char a[],int n){int ai,bi,i;for(i = 0; i < n; ++i){if(a[i] == 'a'){ai = i;}if(a[i] == 'd'){bi = i;}}ai = ai - bi;if(ai == -1 || ai == 1){return true;}if(a[2] == 'e')return true;return false;}void (char a[],int k,int n){int i;if(k == n){if(isNotPrintf(a,n)){return;}for(i = 0; i <= n; ++i){printf("a[%d] = %c ",i,a[i]);}printf("\n");}else{for(i = k; i <= n; ++i){if(isSwap(a,k,i)){swap(a[k],a[i]);Arrange(a,k + 1,n);swap(a[k],a[i]);}}}}int main(){char a[] = {'a','b','b','c','d','e'};Arrange(a,0,5);return 0;}
所幸的是20分都能进一面,可想而知多少人掉进了坑里,或者和我一样潇洒自信回头上WC。。。。。。
一面的时候去之前听同学说不是技术面,是无领导讨论小组,所以就没准备,到那里才知道一对一技术面。。。。。进去后,先自我介绍,然后开始问问题,主要就是根据简历问,一开始问了下我C++的继承,还有重写和重载的区别,由于没有我想去的工作地点,所以表现的可能有点傲慢,直接举例秒杀,就用了一两分钟。。。。之后的问题也差不多,没过多的解释,都是直接讲完。后面问了下项目,具体实现什么功能,用了哪些技术,本人在项目中的工作等等,然后就问到TCP协议,网络编程,还有多线程编程,其中问到多线程编程时的通信方式,我只讲了共享资源和信号量的方式,他问我还知道或听说过其他的方式么?我说不知道了,面试官说还有管道。。。。。。(尼玛,不是进程间通信么?线程间通信也用?)后来回来百度,确实有人写博客写过线程间通信用管道,书上没有找到。。。。然后我就说自己数据结构与算法不错,想引导他问我数据结构的,结果他看了下简历说shell编程和MakeFile怎么样?我说Shell基本的编程会,难度高一点就不会了,MakeFile只局限于看得懂。。。。然后我又说我数据结构与算法不错,结果他就开始和我聊家常了,最后问我有什么问他的么?我第一句就问薪资怎么样。。。。。。。他说这不是他决定的,之后就随便问了下后就叫我回去等消息(白白)。。。
整个面试过程感觉挂的地方应该是在具体的问题上没有详细的介绍和解释,但是后面那个人连重写和重载都不知道的人是怎么过的???????惊叹!!!!!根据同学面试得第一的情况来看,应该是尽量在自己会的问题上多讲,自己多说,把面试官一直引导到自己擅长的领域里面去。
0 0