别人技术面试总结(二)

来源:互联网 发布:应用架构 数据架构 编辑:程序博客网 时间:2024/05/23 15:40
地点:北京。 经验:一年 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,其它的东西还有细节性的东西自己能多掌握就多掌握。


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