半个月面试十家公司,今天入职,写个总结。

sweird 2011-08-15 09:04:31
地点:北京。 经验:一年 Linux c应用开发。
从开始跳槽找工作到今天找到到工作,面试了十余家公司,有国企,有外企,有私企。大夏天的,说实在的也跑累了,也跑怕了。悲剧的是找来找去,最终还是回到第一次面试的单位。 不过在其它公司面试的经历让我明白了,我缺少什么?我现在值多少?我该怎么选择自己的方向?这一波十折也算是值得。

本以为自己一年的Linux C开发经验可以随便要个高点的价,后来发现高估了自己。在面试的过程我可以清楚的感觉到,除了做C语言笔试题算比较顺利,当面试官问关于系统编程方面和工作经验时,还是挺惘然的. 对于工作中学到什么这个问题,我平时也好好想过,但我真不知道学到了什么,一年的纯C应用开发,让自己变成了蓝领编码工作。我只能说工作一年加深了对C语言的理解,对数组和指针的理解,对于找bug的能力提升,对于看到上百万行的项目代码不再害怕等等,就再也找不出一个实际的技术哪怕是一个技术名词,所以这让我明白了,再找工作就不能是纯C开发了,太纯的C应用开发的后果是你学到的东西少的可怜,下回跳槽时当面试官问你学到什么东西时根本就觉得没有可谈的东西。 所以建议大家最好找一个能把C结合在一起的东西,比如能尽可能多的接触系统编程知识的,网络编程,协议,云计算,虚拟化等等,不要单纯的C应用开的,不然真的学不到东西。



以下是近半个月来自己的一次面试总结,给正在找工作的朋友当个参考,也是对这段时间找工作的记录总结。所写技术内容也不全面,只写出觉得出题概率高的和值得注意的东西。但笔试面试大概也就这种类型,撑握好基础相信面试官怎么问都可以自如回答,在面试时除了技术层面外,自己的态度也很关键,报着学习的心态去找工作,相信一定能找到一份满意的工作。



一,C语言基本知识的考点:

一般面试之前看K&R的书、《C专家编程》和常用的算法(插入,选择,快速,计数排序,大概知散例(Hash算法)是什么等),在这十多天的面试过程中,主要遇到以下考点:

1,strcpy, strncpy的区别;

strcpy,memcpy的区别;

2,比如

view plaincopy to clipboardprint?int *( *( *arr[5])())();
int *( *( *arr[5])())();
要能知识它的含义,这其实就要求面试者对指针数组,数组指针非常熟悉。

3,通过封装函数申请内存时注意传值和传地址的区别,可以通过两种方面申请,一是通过传指针的地址给函数当参数;二是在通过函数返回值内返回一个申请好的内存。这个其实华为的C面试题里出现过。

view plaincopy to clipboardprint?#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 16

void my_malloc1(char *str)
{
str = malloc(sizeof(char)*N);
}

void my_malloc2(char **str)
{
*str = malloc(sizeof(char)*N);
}

char *my_malloc3()
{
char *str = malloc(sizeof(char)*N);

return str;
}

int main(void)
{
char *p;

//my_malloc1(p);//申请不到,函数内部的p其实只是这个p的一个拷贝,明白传值和传地址的真正含义就可以了。
//my_malloc2(&p);//可以申请
//p = my_malloc3();//可以申请
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define N 16

void my_malloc1(char *str)
{
str = malloc(sizeof(char)*N);
}

void my_malloc2(char **str)
{
*str = malloc(sizeof(char)*N);
}

char *my_malloc3()
{
char *str = malloc(sizeof(char)*N);

return str;
}

int main(void)
{
char *p;

//my_malloc1(p);//申请不到,函数内部的p其实只是这个p的一个拷贝,明白传值和传地址的真正含义就可以了。
//my_malloc2(&p);//可以申请
//p = my_malloc3();//可以申请





4,自己实现库函数strstr(),这是考官很喜欢出的问题。而且笔试卷中也会出现相应代码,让你写出该代码的功能。

给出两个版本的strstr()。

view plaincopy to clipboardprint?#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *m_strstr(char *s, char *t)
{
char *s1 = s;
char *t1 = t;

while(*s && *t)
{
if(*s++ != *t++)
{
t = t1;
s = ++s1;
}
}

if(*t == '\0')
return s1;
else
return NULL;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *m_strstr(char *s, char *t)
{
char *s1 = s;
char *t1 = t;

while(*s && *t)
{
if(*s++ != *t++)
{
t = t1;
s = ++s1;
}
}

if(*t == '\0')
return s1;
else
return NULL;
}
view plaincopy to clipboardprint?char *m_strstr2(char s[], char t[])//K&R书上找的
{
int i, j, k;

for(i = 0; s[i] != '\0'; i++)
{
for(j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)
;
if(k > 0 && t[k] == '\0')
return s[i];
}

return NULL;
}
char *m_strstr2(char s[], char t[])//K&R书上找的
{
int i, j, k;

for(i = 0; s[i] != '\0'; i++)
{
for(j = i, k = 0; t[k] != '\0' && s[j] == t[k]; j++, k++)
;
if(k > 0 && t[k] == '\0')
return s[i];
}

return NULL;
}

5,给定任意自然数大小,比如给定int n = 4;输出:(n * n 大小矩阵, 规律如下),所谓的蛇弄矩阵。

这题当时没作出来,在csdn上发的帖子,可以参考:点击打开链接


view plaincopy to clipboardprint?1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7


6,给定一个文件,文件内容为浮点数,浮点数和浮点数之间用逗号隔开,如:

view plaincopy to clipboardprint?0.12,-98.011,8,-7.22
0.12,-98.011,8,-7.22

问题:获得文件内容并通过C库中的qsort()函数进程排序,并输出。

这题是上机题,要是手写我真写不出来,上机就好了,当然不能上网的,有man手册啊,好搞定。

挺简单的,具体代码就不贴出了,因为没有备份过。



7,数组和指针的区别,怎么通过指针获得数组的元素等等。很容易考到的,这方面知识把《C专家编程》的三章相关知识掌握即可。

8,C语言用实现动态内存存储数据,就是申请一块固定大小内存,往里面写东西,如果写到内存末尾,就重头开始。这个当时也没做出来……

9,怎么用一个链表动态增加数据。

10,经典的出局游戏,就是那个M个人围一圈,数到第N个人出局,最后留下的为胜者,链表实现。

11,还有很多,链表的定义,野指针,数组越界啊等等就不一一举例了。



二, Linux基本命令的考察:
比如:ifconfig, mount, tar, ps, kill等等

还有常用的shell脚本命令。正则表达式awk,sed的基本作用是什么

gdb跟踪调试的基本使用,如何实现动态跟踪?



三,Linux系统编程:
逃不了的几个问题:

1,socket编程流程,描述三次握手,TCP/UDP协议的区别,poll和select。

2,进程和线程的区别?进程间通信方式?线程间同步,互斥锁,信号量等。

3,其它的东西还有细节性的东西自己能多掌握就多掌握。


最后面试收获:虽然答应了这家公司,下周一入职,但有好几家公司通知复试,或者准备录用,就直接拒绝了。

原博客文章:http://blog.csdn.net/rosetta/article/details/6682857
...全文
3246 46 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeC 2011-10-10
  • 打赏
  • 举报
回复
我今年刚毕业,从实习面试,加上后来面试,超过40家,历时1.5个月
sczvip 2011-10-10
  • 打赏
  • 举报
回复
up!!!大家加油~!
xiaoping8411 2011-09-03
  • 打赏
  • 举报
回复
哥们也有心,很善于总结,祝你好运!
dongtian0359 2011-09-02
  • 打赏
  • 举报
回复
关注,准备找工作...
lx_616_at_yeah_net 2011-09-02
  • 打赏
  • 举报
回复
strstr写得还不错。

// 但一看~应该稍微觉得 K&R是不会这样写的吧

char *m_strstr2(char s[], char t[])//K&R书上找的
{
......
if(k > 0 && t[k] == '\0')
return s[i];

我也只是按感觉来猜测而以~
昨天与今天 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 sing2016 的回复:]
额。。那天在人才网公开了简历,结果第二天来了10个电话通知去面试。。o(≧v≦)o~~
[/Quote]

才10个呀,我把手机静音去面试一个上午,出来一看手机,未接电话40个!!!!
CCSOY 2011-09-01
  • 打赏
  • 举报
回复
楼主真是够辛苦的了 祝福下
grimmchen 2011-09-01
  • 打赏
  • 举报
回复
好贴, 经验之谈啊
starytx 2011-09-01
  • 打赏
  • 举报
回复
这几天也在跑,几乎天天都有面试,还是多跑跑比较好,为了面包,必须的。
ps:你们都去北京吧,哥在西安就安心了:)
光武 2011-09-01
  • 打赏
  • 举报
回复
果断马克
sing2016 2011-08-30
  • 打赏
  • 举报
回复
额。。那天在人才网公开了简历,结果第二天来了10个电话通知去面试。。o(≧v≦)o~~
彩票虫虫 2011-08-30
  • 打赏
  • 举报
回复
我跟楼主有同感啊我也刚结束面试没多久,想当初我可是把一两周的时间都安排满了啊每天至少两个面试,那个囧啊后来我是实在的太累了,结果选了一家公司,把后面的几家公司直接推掉了,嗨面试真不容易啊.
w495771636 2011-08-30
  • 打赏
  • 举报
回复
MARK
richardstar 2011-08-25
  • 打赏
  • 举报
回复
LZ真牛啊,不但技术强,还有体力也强////////
cjh200102 2011-08-25
  • 打赏
  • 举报
回复
面试也是一种成长的机会。
huangliguan 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 sundesheng125 的回复:]

面试能使人进步!
[/Quote]
同意
coding码场 2011-08-24
  • 打赏
  • 举报
回复
面试能使人进步!
sweird 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 lutinghuan 的回复:]

从文章看楼主比较偏技术,没有除了技术以外的分享了吗?
呵呵~~我试过十天以内面了好多家公司,不过那些目的性不是很强。
[/Quote]
个人觉得搞技术的,用人单位主要关注技术,其它方面不是很差就好。
最起码的为人做事礼貌合作当然是要的。
lutinghuan 2011-08-23
  • 打赏
  • 举报
回复
从文章看楼主比较偏技术,没有除了技术以外的分享了吗?
呵呵~~我试过十天以内面了好多家公司,不过那些目的性不是很强。
akcw007 2011-08-23
  • 打赏
  • 举报
回复
大的系统都是有思想的,
C最难的不是指针,而是用指针实现一个大的系统使它具有架构性,
函数指针,回调,消息循环。。。
加载更多回复(25)

662

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧