14年的面试官经验分享,看完必有收获
Posted 局外人一枚
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14年的面试官经验分享,看完必有收获相关的知识,希望对你有一定的参考价值。
面试,是找到好工作的过程中,最最重要的一环。
在我14年的职业生涯中,亲自面试的人应该不下1000人了。
看过的简历还要更多,尤其是微软上海早期扩张的时候。
所以今天,我就从自身经历出发,给你分享一些面试经验。
定制化面试
想象一下,明天你要和心仪的女生第一次下午茶约会了,你会做哪些准备呢?
你会研究对方喜欢喝什么,是喜欢喝茶还是咖啡?
喜欢星巴克?还是更小众有特色的咖啡馆?
对方喜欢什么口味的饮品?喜欢什么品种的花?
甚至分析对方的星座,血型,去过哪里?爱看什么书?
是喜欢听巴赫,还是莫扎特?等等…
你会想方设法去打听这些事,这是很正常的心态。
同样的,面试,其实就是一场和女神的下午茶约会。
那你要做什么准备工作呢?
你当然要对公司和职位做好充足的调研。
细化下来,你要了解几件事。
公司财报,公司竞品,公司核心产品,公司优势和你自己的优势。
公司在业内处于什么样的水平?为什么招这个职位?
最近公司有什么战略举措?职位最主要的要求是什么?
你有没有好友在这家公司?问问对方公司的真实情况怎么样?
在网上看看这家公司 CEO 的访谈,了解一下公司的愿景、使命、价值观是什么?
尽可能多地详细了解对方,然后针对性地进行定制化面试。
这就是求职者正确的心态。
如果你觉得太麻烦了,算了,我还是随便准备一下吧。
有这种心态的时候,就相当于你在“海投简历”。
不要小看HR,一个职位你是否“心仪”,对方是能够感觉出来的,对方一见面,就知道你对职位是否感兴趣。
硬技能和软技能
职位需求,大致分为硬技能和软技能。
什么叫硬技能?
硬技能是那些很容易测量和定义的技能。
比如:计算机编程,人工智能算法,设计(比如品牌包装设计、视频设计、三维动画、插画设计等)。
你的编程水平怎么样?你有没有获奖的设计作品?
你的硬技能越稀缺,你通过面试的可能性就越大。
特别稀缺的硬技能,面试到最后,你会发现,不是公司在面试你,而是你在面试公司。
什么叫软技能呢?
难以直接测量的技能。
比如销售技能,职业化程度,沟通技能,领导与管理技能等。
越是到中高级职位越是偏软技能,越是基层的职位越是偏硬技能。
首先做个区分,你是准备面试硬技能职位,还是软技能职位?
提前学会规划,区分你的技能属性。
来,介绍一下你自己
一个面试官,他首先希望从面试者身上看到什么?
强烈的渴求心。
对招聘需求方做了充分研究,对适合度做了充分的思考。
求职的本质,是将自己这款产品展示给客户,并超预期地满足对方的核心需求。
总之,是做了准备,花了心思。这是诚意。
有的招聘方面试过后,会留下一个作业给面试者。
这其实是一个故意放置的测试诚意环节。
有部分面试者在收到消息之后可能在想:面试之后还要考试,写这么多的方案,还是算了吧。
这说明,他对这份工作,并不渴望。
在面试时,各行各业都会有几个标准问题。
第1个标准问题是什么?
“来,介绍一下你自己。”
为什么会这么问呢?
一个部门负责人需要你加入,但是负责人非常忙,在HR的陪同之下,他来面试你。
但是。但是。简历实在太多了。负责人不一定记得你。
在你自我介绍的3~5分钟之内,其实同时他也在翻阅你的简历。
我曾经面试过这样的人。
我说:麻烦你先介绍一下自己。
对方:我叫XX,做过什么,其它的,简历上都有。很快结束问答。
我看到这样的面试者时,首先就会有个判断,这个人情商比较低,对吧?
虽然不至于直接pass掉,但是本来可能比较有能力的人,印象分上就降了一大格。
这个人,以后怎么共事?
简历里,虽然有很多关于你自己的介绍,但是你也可以从不同角度来讲讲。
既然别人提了这个问题,肯定有背后的原因。
你可以很礼貌地说:简历里有很多关于我的介绍,但是,我觉得这几点是我特别想要表达的。
然后把简历里最核心的词和信息提炼出来。
这个环节也是在考验你的“系统结构化思维”和“沟通技能”。
我叫什么名字?我毕业于什么学校?在过去几年我一直在哪家公司就职?
之前还有过几份工作?最后的一个职位是什么?主要负责什么?取得过什么样的成就?
然后我在哪里待了多少年?是否非常喜欢做有挑战的事情?等等。
你看,这就是一个比较结构化的介绍。
记住:
1)学会系统结构化思维。
2)理解每一个简单问题背后,都有其必然逻辑。
你遇到最大的困难是什么
“你遇到最大的困难是什么?你是如何解决的?”
你对这个问题的回答,其实很大程度上会体现你的能力水平。
这个回答本身并不是针对问题的,而是HR会根据你的回答,抽丝剥茧,探寻本质,匹配需求。
问题本身只是让你提供素材,HR会在你的回答里搜寻自己想要的答案。
什么答案?
你是不是一个善于解决问题的人?
你是不是一个有执行力的人?
你是不是一个有管理能力的人?
你是不是一个有领导力的人?
你是不是一个懂得协作的人?
你是否能承担压力?
如果你没有提前准备,想了半天说我这辈子好像没遇到过多大困难。
你觉得自己回答挺巧妙,但其实没有提供给对方素材。
所以面试之前好好梳理一下,自己经历过最大的困难是什么?并用故事化的表述方式,让对方被你吸引。
举个我自己年轻时在微软的例子:
有一次,晚上快下班的时候,康柏公司内部的计算机系统出了问题。
一千多台电脑的邮件都不能访问,也就意味着一千多人背后的生意、订单、客户沟通都受到影响。
我留下来紧急处理这个棘手的问题,不知不觉就干到凌晨三四点,但是依然没有解决。
对方特别着急,康柏全球CIO直接一个越洋电话打来警告我,如果不能在凌晨五点解决,他就立刻打给微软全球CFO投诉,他们在剑桥的时候,是同班同学。
我只能假装镇定地回复:没问题,一切尽在掌握。
挂了电话,然后想:怎么办,怎么办,怎么办?
这个问题,只有解决,和没解决两种情况。
那1000多台电脑如果不能访问,你找3000个理由,都是死路一条,绝无“差不多”这种状态。
临晨四点,我只能顶着巨大的压力,一个人继续排查错误。
一口气忙到早上9点,大家陆续来上班。
此时,我已经连续工作一天一夜。我有一个选择,就是把这个问题交给别人接着处理,自己去睡一觉。
但是,这一夜,我做了很多工作,哪些是有意义的,哪些是就算没有解决也已经排除的,要和下一个负责人交代一遍是非常复杂的。
为了给康柏节省时间,我决定接着干。
本以为在整个团队的协助下,可以在白天解决,但是这个涉及到源代码级别的问题,到了晚上,仍然没有被攻克。
精力被极度透支的我,根本没有挣扎,又干了整整一个通宵。
问题终于,终于完美解决了。
两天两夜,对方换了几波人,而我是连续作战精疲力竭。
但是攻坚克难后的兴奋,让我进入“回光返照”的状态,根本睡不着,于是又工作了一整个白天,处理完堆积的公务。
三天两夜,55个小时没合眼。
你看,这就是一个非常好的面试表述。
把经历和能力变成故事,用故事来传递你的专业程度。
你有什么缺点
“你有什么缺点?”
这个问题,其实是有陷阱的。
你要怎么回答这个问题?
有的人自作聪明,说我最大的缺点就是太勤奋。
如果你回答:我不知疲倦,勤奋刻苦,加班很频繁,不辞辛劳。
这是自认为很聪明。
有的人会回答说:我最大的问题就是不见南墙不回头,然后特别能坚持。遇到一些困难之后还是想攻克它。
这个也是自夸。
稍微有点经验的都能看出来。
所以这种问题,应该怎么回答?
原则上,你要表现出:自己对一个目标的追求,然后没有得到的那种场景。
什么意思?
比如:我最大缺点,就是我演讲能力太弱。
我在团队里面开个会可以,但有一次面对一个1000人的场合,老板让我上台演讲,我讲完之后特别紧张,我觉得这是我应该攻克的一个缺点。
不要把自己的优点包装成缺点,大家都不傻。
要表述出自己对一个目标的追求,然后没有得到的那种场景。
我问完了,你有什么要问我吗?
“我问完了,你有什么要问我吗?”
面试临近结束的时候,其实是一个特别好的机会。
有些同学在面试结束时,神经开始松懈,以为终于结束了。
其实,真正的考验,往往在最后出现。
如果你问:公司是双休吗?这个工作要出差吗?要交社保吗?要加班吗?
你可能之前的印象分比较高。然后,你每问一个,分数就开始下滑。
正确的问法是什么呢?
原则:你要学会让对方开口表达。
比如,我应聘这个职位后,要汇报的那位经理和主管,大概是一个什么样的人,我能了解一下吗?
让对方开口表达,然后表示出那种非常渴望了解的兴趣。
只要让对方开始表达,他跟你的距离就近了。
为什么?
因为他在你身上花了时间,他给你提供了信息。
然后你还可以问什么?
这个职位最核心的考核目标是什么?
对方就会有种感觉,你是真的想来干这个事。
然后他会讲考核的目标是什么。
这时,有趣的事情就发生了。
对方向你表述的这些内容,其实是在越来越触及之前隐藏的、没有说出来的真需求。
他说完之后,你直接针对性回复,哪些事情是你特别擅长的。
这个时候,你得到这个工作的机会就更大了。
真正的考验,往往在最后出现。
你要学会让对方开口表达。
最后的话
今天,我给你介绍了一些面试的经验。
找到一份合适的工作,就像找到一个合适的对象一样,非常不容易。
这中间最重要的,就是你和工作之间的匹配程度。
你要抱着找对象一样的心态去找工作。
记住这个心法:详细了解对方,匹配自己优势,然后定制化面试。
祝你能找到最适合自己的工作。
祝秋安。
c语言指针详解 看完必有收获!!!!
C语言指针
文章目录
1.字符串指针
- 注: void* 类型的指针可以接收任意类型的指针
- void 类型的指针不能进行解引用的操作,也不能进行加减整数的操作*
int main()
{
char arr1[]="abcdef";
char arr2[]="abcdef";
char* p1="abcdef"; //常量字符串 不能修改
char* p2="abcdef";
if(arr1==arr2) //arr相当于数组首地址 所以不相等
{
printf("相等\\n");
}else
{
printf("不相等\\n");
}
if(p1==p2) //指针里面放的常量字符串 ,所以相等
{
printf("相等\\n");
}else
{
printf("不相等\\n");
}
}
2.指针数组
指针数组是数组,存放指针的数组
int main()
{
int arr1[]={1,2,3,4,5};
int arr2[]={2,3,4,5,6};
int arr3[]={3,4,5,6,7};
int* parr[]={arr1,arr2,arr3};
int i=0,j=0;
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
printf("%d ",*(parr[i]+j))
}
printf("\\n");
}
return 0;
}
打印结果为:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
3.数组指针
数组指针—指向数组的指针—存放数组的地址
int* p1[10]; 指针数组
int (*p2)[10] 数组指针
arr表示的是数组首元素的地址
&arr表示的是数组的地址,而不是数组首元素的地址
int mian()
{
char* arr[5];
char* (*p)[5]=&arr; //&arr取出的是一个数组的地址
return 0;
}
int main()
{
int arr[5]={1,2,3,4,5};
int (*p)[5]=&arr;
int i=0;
// for(i=0;i<5;i++)
//{
// printf("%d ",*(*p+i)); //*p=arr
// }
//或者下面这种写法
for(i=0;i<5;i++)
{
printf("%d ",(*p)[i]); //打印出1,2,3,4,5
}
return 0;
}
#include <stdio.h>
void print1(int arr[3][5],int x,int y)
{
int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
printf("%d ",arr[i][j]);
}
printf("\\n");
}
}
void print2(int (*p)[5],int x ,int y)
{
int i,j;
for(i=0;i<x;i++)
{
for(j=0;j<y;j++)
{
printf("%d ",*(*(p+i)+j)); //*(p+i)代表每行首元素的地址
}
printf("\\n");
}
}
int main()
{
int arr[3][5]={{1,2,3,4,5}, {2,3,4,5,6}, {9,3,4,5,6}};
print1(arr,3,5);
print2(arr,3,5); //传的是一维数组的地址
//数组名arr代表首原素的地址
//但是二维数组的首元素是二维数组的第一行,所以这里传递arr,其实相当于第一行的地址,是一维数组的地址,可以用数组指针来接收
return 0
}
下面看看几种常见的写法:
int arr[5]; //arr是一个5个元素的整形数组
int* parr1[10]; //parr是一个数组,数组有10个元素,每个元素的类型是int*,parr1是指针数组
int (*parr2)[10]; //parr2是一个数组,数组有10个元素,每个元素的类型是int, parr2是数组指针
int (*parr3[10])[5]; //parr3是一个数组,该数组有10个元素,每个元素是一个数组指针,该数组指针指向的数组有5个元素,每个元素是int.
4.数组参数,指针参数
二维数组传参可以省略行,但不能省略列.
二级指针传参可以传哪些参数: 如下代码中的三种都行
void test(char **p)
{
}
int main()
{
char c = 'b';
char*pc = &c;
char**ppc = &pc;
char* arr[10];
test(&pc);
test(ppc);
test(arr);//Ok?
return 0;
}
5.函数指针 - 指向函数的指针
函数指针 - 指向函数的指针----存放函数地址的指针
int Add(int x ,int y)
{
int z = x+y;
return z;
}
int main()
{
int a = 10 ;
int b = 20 ;
//&函数名和函数名都是函数的地址
int (*p)(int, int)=Add;// 把add的地址传给了p
printf("%d\\n", (*p)(2,3));//5
printf("%d\\n",p(2,3)); //5
//*可以加也可以不加
return 0;
}
void (* signal(int ,void(*)(int)))(int) (1)
typedef void(*pfun)(int); (2)
pfun signal(int , pfun) (3)
(2)(3)等效为(1)
6.函数指针数组
int Add(int x ,int y)
{
return x + y ;
}
int Sub(int x , int y)
{
return x - y;
}
int Mul(int x ,int y)
{
return x * y;
}
int Div (int x , int y)
{
return x/y ;
}
int main()
{
int i = 0;
//下面这个函数指针数组可以存放4个函数的地址
int (*parr[4])(int , int ) = {Add , Sub , Mul , div}
for(i=0;i<4;i++)
{
printf("%d\\n",parr[i](2,3)); //5 -1 6 0
}
return 0;
}
//char* my_strcpy(char* dest , const char* src)
//1.写一个函数指针pf,能够指向my_strcpy
char* (*pf)(char* , const char*)
//2.写一个函数指针数组,能够存放4个my_strcpy函数的地址
char* (*fp[4])(char* , const char*)
函数指针数组的用途 : 转移表
int Add(int x ,int y)
{
return x + y ;
}
int Sub(int x , int y)
{
return x - y;
}
int Mul(int x ,int y)
{
return x * y;
}
int Div (int x , int y)
{
return x/y ;
}
void meun()
{
printf("**********************\\n");
printf("**** 1.Add 2.Sub ****\\n");
printf("**** 3.Mul 4.Div ****\\n");
printf("****** 0.exit ********\\n");
printf("**********************\\n");
}
int main()
{
int x =0 ,y=0;
int input = 0;
meun();
printf("请选择哪种算法\\n:");
scanf("%d",&input);
printf("请输入两个数:> ");
scanf("%d%d",&x , &y);
int (*parr[5])(int ,int )={0,Add,Sub,Mul,Div};
do
{
if(input>=1&&input<=4)
{
printf("%d\\n",parr[inpnt](x,y));
}else if(input==0)
{
printf("退出\\n");
}else
{
printf("选择错误\\n");
}
}while(input)
return 0;
}
//注: 这题也可以用swich case ,但代码长度较长
小结
int Add(int x , int y)
{
return x+y;
}
int main()
{
//指针数组
int* parr[4];
//数组指针
int* (*P)[4]=&parr;
// 函数指针
int (*p)(int ,int )=Add;
//函数指针的数组
int (*parr[4])(int , int)={Add,Sub,Mul,Div};
//指向函数指针的数组的指针
int (*(*parr)[4])(int , int);
}
-
回调函数: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其他所指向的函数时,我们就是说这是一个回调函数.回调函数不是由该函数的现实方直接调用,而是在特定的事件或条件发生时有另一方调用的,由于对该事件或条件进行响应. 如 :
void cola (int (*fp)(int ,int))
cola(Add);
//cola 函数能Add函数的地址void print(char* str) { printf("%s",str) ; } void test(void(*p)(char *)) { printf("TEST "); p("hello world"); } int main() { test(print); //输出:TEST hello world return 0 ; }
7.库函数qsort的用法: qsort(void* p,int num1 , int num2 , int (cmp)(counst void e1, counst void* e2) )
第一个参数 : 待排序数组首元素的首地址
第二个参数 : 待排序数组元素的个数
第三个参数 : 待排序数组每个数组元素的大小—单位为字节
第四个参数 : 函数指针–比较两个元素函数的地址,这个函数要自己实现
//自己实现一个qsort排序
struct stu
{
char name[10];
int age;
};
void swap(char *p1 ,char *p2, int witdh)
{
int i= 0;
for(i=0;i<witdh;i++)
{
char temp=*p1;
*p1=*p2;
*p2=temp;
p1++;
p2++;
}
}
void bubble_sort(void* base, int sz ,int width , int (*cmp)(void *e1, void *e2))
{
int i=0;
//趟数
for(i=0;i<sz-1;i++)
{
int j=0 ;
//每一趟比较的对数
for(j=0;j<sz-1-i;j++)
{
//两个元素的比较 得到两个元素的首地址
if( cmp((char*)base+j*width , (char*)base+(j+1)*width ) >0 )
{
//交换
swap((char*)base+j*width , (char*)base+(j+1)*width ,width);
}
}
}
}
int cmp_init(void* p1,void* p2)
{
return *(int*)p1-*(int*)p2;
}
void test1()
{
int i=0;
int arr[]={9,8,7,6,5,4,3,2,1,0};
int sz=sizeof(arr)/sizeof(arr[0]);
bubble_sort(arr,sz,sizeof(arr[0]),cmp_init);
for(i=0;i<sz;i++)
{
printf("%d",arr以上是关于14年的面试官经验分享,看完必有收获的主要内容,如果未能解决你的问题,请参考以下文章
Spring循环依赖 | Spring三级缓存 | 看完必有收获