1、记录目的
本文旨在提升自身技术水平,发现自身不足,并了解大厂和中小型公司面试要求上的区别,不会涉及具体工作内容,如涉及到公司机密,请联系删除。
(估计不会涉及,因为面试没有通过,有点遗憾,感触有一些,相信会进一步激励自己加强学习侧重点)
一些客套话和礼仪、基本自我介绍、语速就不谈了,本文重在学习和总结技术。
2、一面(常规基础知识)
(1)STL基础:说一下vector和list的区别以及各自的优缺点?
答:存储方式:vector是线性存储,在内存中是连续的存储空间;而list是链式存储,在内存中不是连续的存储空间。
优缺点: vector由于是连续的存储,故随机访问数据效率高,以及在收尾插入或删除元素效率高;带来的缺点就是在中间(非首尾)插入或删除效率低,为了保证数据元素存储的连续性,需要重新分配空间或者移动数据。
list由于是链式存储,故访问效率低下,它需要从首元素一个一个向后访问;带来的优点是可以快速的实现任意位置的插入和删除。
总结:这里着重从存储方式,元素增删和访问效率入手。
这里还可以有类似变式问法,读者可以思考一下:map和set的区别和优缺点?什么实现的?(红黑树的原理)
(2)C++基础:什么是虚函数?虚函数调用原理是什么(怎么实现的)?
注意:这里不仅仅是需要回答虚函数表,虚函数指针、父类和子类之间虚函数的关系,更需要进一步回答怎么实现的多态调用
(这里我回答的面试官不是很满意,望聪慧的读者解答)
总结:这里可以看得出来大厂不要求你什么都会,比如既会C++,又会pathon,又会java,又通数据库,操作系统,linux等等,但是它对基础知识的要求比较高,知其然并知其所以然(清楚里面的原理)
而普通中小企业一般要求你懂某个东西(比如招聘要求上描述的),而且实际工作中用过是最好的,它会要求你懂的相对多,不需要太专
(3)逻辑题:一个水池(水量无限多),给你两个桶,一个5L,一个6L,问怎么能取到3L的水量?(限时3分钟内答出)
答:(为了方便描述,我简称5L的桶为A桶,6L的桶为B桶,这里画图更好理解,不要吝啬向面试官要纸笔,他们都很温柔的,嘻嘻)
第一步,把B桶装满水,导入A桶中(装满),B桶剩下1L水;
第二步,A桶将水清空,把B桶剩下1L水转入A桶中,再把B桶装满水,将水转入装有1L水的A桶中(装满),B桶剩下2L;
第三步,A桶清空,B桶的2L水倒入A桶,再将B桶装满水,将水转入装有2L水的A桶中(装满),B桶剩下3L。
总结:没什么好说的,就是看看你逻辑能力。这个题可以有很多变法,比如:6L、7L的桶,要取5L等等。
因为是面试题,都不会特别复杂,也不会是脑筋急转弯,肯定是能答上的,不要紧张。如果是笔试题,可能逻辑题就变成:一块钱可以买一瓶汽水,两个空瓶可以换一瓶汽水,问10块钱最多能喝多少瓶汽水?
或者加点难度,如果三个瓶盖也能换一瓶汽水,最多能喝到多少瓶汽水?(有些会让你用编程的方式实现)
(4)设计模式:这里有多种问法,比如你工作中用到过哪些设计模式,介绍一下?或者直接问你熟悉哪些设计模式?再或者问你某个具体模式相关实例看你怎么解决?
最常被问到的设计模式就是“单例模式”,所以举个例子:有两个单例A和B,A中函数FunA需要调用B的FunB函数,要求A不能后生成,B不能先释放,如何实现?
(因为没有碰到过,也可能没有太理解面试官要问什么,抱歉,这个问题没答出来,呜呜呜~ 看一下聪明的读者有没有方法?)
总结:这类问题不好准备,尤其是这种开放性问题,碰到过就好回答,会就是会,不会就不会。最好增强自己的知识储备,对某个知识点了解的够深,实际工作中或学习中能用到深入探索。
(5)网络协议:讲讲TCP和UDP各自特点
(因为本人之前工作经历没用到这些知识,我只回答了很基础的东西,比如TCP的三次握手和四次挥手)
答:(不完善,大家可以网上去搜)
- TCP 是面向连接的,UDP 是面向无连接的
- UDP程序结构较简单
- TCP 是面向字节流的,UDP 是基于数据报的
- TCP 保证数据正确性,UDP 可能丢包
- TCP 保证数据顺序,UDP 不保证
三次握手:
四次挥手:
3、二面(专业知识)
是的,面试官会结合该岗位工作中要用到技术展开问答,看你了解是否足够深入。下面是岗位要求,各位读者可根据自己应聘的岗位对号入座,查漏补缺。
4、总结
(1)如果你的工作经历和应聘的岗位匹配,相信面试官会对你的简历感兴趣;如果你的工作经历和他要求的岗位职能不是特别匹配,他不会太结合你的简历去展开问答,而是结合基础知识和工作中会用到的技术进行问答
(2)大厂就像建造航母一样,而你就是它培养的一颗螺丝钉,不需要处处用到你,但一旦把你钉在某处就要扎的很深,很牢固,而且不要有瑕疵
(3)深入学习,举一反三很重要,诚实更重要
(4)总结反思