某公司的笔试和面试

看到该公司的校招行程有来我所在的城市,离我很近,所以就过去了。

宣讲会当天19:30开始,宣讲完大概八点多,开始笔试~


笔试

笔试难度不大,试卷两张,前半部分我归为基础题:

int str1[] = "89213"

int str2[100] = "89213"

问:sizeof(str1) 和 sizeof(str2) 分别输出什么?

还有:

怎么动态申请二维数组?堆栈的区别?简述进程同步与互斥机制~


我当时基础题做的不太好,有些sizeof输出什么确实不知道,然后进程同步和互斥机制讲的太简单了,我是说为了防止进程对临界资源同时访问而造成死锁,引入了互斥机制,使得进程看起来“同步”执行。(其实我应该还要深入说一下什么信号量之类的...)


后半部分就是一些基础算法:

1.将一个字符串往右循环n位,最后一个字符超出了就移到开头,写代码

我的做法:声明一个char,保存最后一个字符,然后for循环,把全体都网友移,直到第一个字符的时候,把char保存的最后那个字符赋给第一个字符就好。(缺点是时间复杂度太高了...O(n2)...)

2.问100颗棋子,先后拿旗子,每人每次只能拿1、2或4颗,问先手必败还是后手必败

水题不解释。

3.最后一道题,求一个数组是否有两个数相加==某个Sum

我当时是采取了对数组下标进行一个小处理,使得某两个数相加存放在一个二维数组中,二维数组的Array[i][j]表示一位数组Array[i]+Array[j]相加的结果,这样只要对二维数组进行for循环就能搜寻到是否有某两个值相加等于输入的Sum。(HR告诉我,有更优的算法,我当时改成了用二叉树保存,这样查找会快一点;回来的路上小伙伴也给我讲了他们的想法,听不太懂,好像是有更优的求和办法)


过了几天,通知面试了

1.第一面和第二面:

一坐下,技术HR就让我自我介绍,完了就拿着我考过的那份笔试试卷首先问了我,我之前答的动态分配二维数组是不是有错,我就发现当时没有for循环delete一维指针,赶紧加了一个for循环,然后没有再说什么了。

接着,问我项目经历,就扯了5-10分钟。

最高潮的就是各种小问题

问有一张图,怎么算其中一点到另一点的最短距离(路上有障碍),我回答用深搜,然后在草稿上写了大概的代码。他接着问,那如果有多个点呢,怎么保证这几个点连起来的线最短?我开始差点被坑了,后来想起这是双调欧几里得算法,就是解决旅行商问题,我就答可以用双调欧几里德来做~他就没问什么了。

还有问我马赛克代码怎么写,我的回答:根据需要打马赛克的范围,把那个范围的像素值全部找出来,然后进行数值的加权平均操作,如果是平均,那么会造成图像直接糊了,而马赛克是可以看到大体的形态的,所以要用加权平均。

接着又来,你打马赛克要获取像素值,那如果要获取一个范围内像素值最高的点,怎么做?总不能全部for循环吧?我的回答在这里不好描述,当时用一边用草稿纸写,一边给他讲我的思路。总之他好像对我的回答也不是很满意,毕竟我自己都认为还有更好的办法。

其他的就是一些非技术性的问题,但是还是由技术HR面。

例如我简历写我接触并使用过一些开源项目,他们就说举个例子

接着就是问,你对你应聘的职位是怎么理解的?对了,还有针对我的简历问我为什么喜欢在linux下写C/C++?

最后就是很常见的问题了:你还有什么想说的?想问的?(我问了晋升制度and如果我入职了你会分派什么任务给我做)

2.第三面:

就问了平时在宿舍干什么?哪里人?有没有女朋友?说一件你觉得你做过的最牛的事。

我感觉他们问的问题目的就是为了全方位了解,当然,会有一些“内涵”~

例如,就问了我希望得到的薪资,我当然不能说确切的数字,就说我相信公司会给我合适的薪水,但是她还是要我给一个数字,我就给了...

然后结束前我还问了她是不是最后一面了,她说是。接着就问何时能确定结果,她就说过两周。


总之感觉还可以...但是,虽然过了三面,没收到offer还是心里不踏实...

求春哥保佑...

你可能感兴趣的:(学习分享)