最近找工作,一些面试经历(持续更新)

一.阿里巴巴电面

 

1.C++与Java的区别,java内存怎么回收

C++有指针,Java没指针,C++内存需要手动删除,java内存自动回收
2.声明一个变量和定义一个变量的区别
声明一个变量不占用内存,定义一个变量需要分配内存
3.new与malloc的区别
new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。
new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。

二.亚信科技面试

new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL
new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存
4.友元函数的特性
友元是一种定义在类外部的普通函数,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。友元的作用在于提高程序的运行效率(即减少了类型检查和安全性检查等都需要的时间开销),但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。

三.杭州智贝

去这家公司面试,总体感觉还不错,面试官是个中年花白头发的大叔,不过实力很强,不玩基础,不玩手撕代码,纯考验数学逻辑思维。
1.   如果 9个球,某个球偏重,给出一个天平,那么称几次可以区分异常球。
一开始我使用二分法(4,4,1),那么至少需要3次区分,之后经过面试管提醒,使用三分法(3,3,3),那么只需要两次就OK搞定。
2.   如果球数增加至27个,81个,那么就是类似于递归的问题,三分法解决,分别是3次,4次。
3.   如果球数为26个时候,那么可以分解为(9,9,8)
4.   如果两个天平,25个球,可以用5分法(5,5,5,5,5)....
5.   如果存在5个球,分别编号1~5,1号球为标准球,其他四个球中存在一个异常球(或重或轻),给出一个天平,至少需要称量几次,才能确定哪个球为异常球,同时异常球偏轻还是偏重。
这个问题蛮有意思的,次数至少为2次
第一次天平左边放1和2,天平右边放3和4,若平衡,则异常球为5号球,再将1号球和5号球称重,对比重量显示偏轻还是重。
若第一次称量不平衡,那么确定5为标准球,
第二次称量1和5放在天平左边,2和3放天平右边,若平衡,则异常球为4,且2,3为标准球,第一次称量可以约去公约数2,3,则对比1,4的结果,若不平衡,则确定4为标准球,在第一次称量中约去公约数1,4,则对比2,3的结果。

四.杭州光珀

首先谈一下这次的面试感受,该公司离我学校有点远,在浙大紫金港校区那边,我历经约两个小时路程,先见到的是给我打电话的HR小姐姐,看了一下我的简历,跟我谈了一下以后的人生规划,然后介绍了下光珀公司。之后就是面试了,来了一个面试官,面试过程中又陆续来了几个面试官的同事,然后就是三对一的面试....不过总体感觉这些面试官之间关系很好,同时面试过程也十分愉快,废话不多说,记录面试题目
1.  ROS的一项工程,若运行时发现奔溃,如何产看是那个节点出问题
输入rosnode list可以查看哪些节点正在运行,看节点中哪个节点未运行。
2.  如何查看ROS节点内参数变化
可以使用命令行rosparam list来查看节点中有哪些参数,可以使用rosparam set设置参数,rosparam get 返货参数值等
3.  rqt有哪些
rqt_graph显示节点之间的关系
rqt_plot显示数据流
rqt_gui用于调试
rqt_console用于现实节点输出
4.  ROS运行时用到Linux哪些内核
Linux内核是操作系统的核心,分进程管理,储存管理,文件管理,设备管理和网络管理


4.  摄像头标定的参数输出的意义
有一个参数矩阵(fx,fy,u0,v0)和一个畸变系数(三个径向k1,k2,k3;两个切向p1,p2);内部参数是唯一的,就是一部相机只有一组内部参数,fx=F*Sx,其中的F就是焦距上面的f,Sx是像素/没毫米即上面的dx,dx和dy表示:x方向和y方向的一个像素分别占多少长度单位,即一个像素代表的实际物理值的大小,其是实现图像物理坐标系与像素坐标系转换的关键。u0,v0表示图像的中心像素坐标和图像原点像素坐标之间相差的横向和纵向像素数。
三个轴的旋转参数分别为(ω、δ、 θ),T的三个轴的平移参数(Tx、Ty、Tz),k1,k2,k3径向畸变系数,p1,p2是切向畸变系数,畸变系数其实是相机二阶泰勒展开近似。

五.Nokia上海贝尔研究所杭州分公司

首先进行了笔试,笔试题为诺西2009年笔试题,答案网上都有,之后就是进行了相应的面试。
面试首先自我进行介绍,自我介绍主要讲了学习,项目经历,还有社会工作等,之后面试管让我挑一个自己特别重视的项目,详细讲一下,balaba一堆,然后用英语介绍下家里人的情况,期间讲到大华软件精英挑战赛,面试官比较感兴趣,之后再是讲述了正在做的海康威视软件精英挑战赛
 
其中关于C++的提到的问题有
1.虚函数怎么实现多态
多态的作用:继承是子类使用父类的方法,而多态则是父类使用子类的方法
例子
class A {

public:

A() {}

  (virtual) void print() {

cout << "This is A." << endl;

}

};

class B : public A {

public:

B() {}

void print() {

cout << "This is B." << endl;

}

};

int main(int argc, char* argv[]) {

    B b;

A a;  a = b;a.print;
return 0;

}

那么这里输出的是This is B,如果把virtual去掉,那么输出This is A,加上virtual ,多态了,B中的print被调用了,也就是可以实现父类使用子类的方法。

多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(也就是可以调用子对象中对父对象的相关函数的改进方法)。

当编译器遇到virtual后,会为所在的类构造一个表和一个指针,那个表叫做vtbl,每个类都有自己的vtbl,vtbl的作用就是保存自己类中虚函数的地址,我们可以把vtbl形象地看成一个数组,这个数组的每个元素存放的就是虚函数的地址.指针叫做vptr,指向那个表。而这个指针保存在相应的对象当中,也就是说只有创建了对象以后才能找到相应虚函数的地址。

注意

(1)为确保运行时的多态定义的基类与派生类的虚函数不仅函数名要相同,其返回值及参数都必须相同,否则即使加上了virtual,系统也不进行迟后联编。

(2) 虚函数关系通过继承关系自动传递给基类中同名的函数,也就是上例中如果A中print有virtual,那么 B中的print即使不加virtual,也被自动认为是虚函数。

(3) 没有继承关系,多态机制没有意义,继承必须是公有继承

(4)现实中,远不只我举的这两个例子,但是大的原则都是我前面说到的如果发现一个函数需要在派生类里有不同的表现,那么它就应该是虚的。这句话也可以反过来说:如果你发现基类提供了虚函数,那么你最好override

2.代码的鲁棒性

我当时回答了鲁棒性相当于代码的健壮性,但是之后扯到了扩展性,有点失策...

健壮性是指对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。健壮性就是鲁棒性,是指一个程序中对可能导致程序崩溃的各种情况都充分考虑到,并且作相应的处理,在程序遇到异常情况时还能正常工作,而不至于死机。

3.C与C++的区别

第一点就应该想到C是面向过程的语言,而C++是面向对象的语言,一般简历上第一条都是熟悉C/C++基本语法,了解C++面向对象思想,面向对象的三大特性:封装、继承、多态

第二点C和C++动态管理内存的方法不一样,C是使用malloc/free函数,而C++除此之外还有new/delete关键字;

malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符,对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数

第三点C++的类是C所没有的,但是C中的struct是可以在C++中正常使用的

第四点C++支持函数重载,而C不支持函数重载

第五点C++中有引用,而C没有;这样就不得不提一下引用和指针的区别

指针是一个实体他在栈中有自己使用的空间,但是引用没有

引用必须初始化,指针不用但是最好初始化

引用只能初始化一次是个专一的人,指针不是

指针和地址运用自增(++)不同,引用是值进行自增,而指针是地址进行自增  

六.杭州边锋网络游戏科技有限公司

面试是下午一点半开始,进去先填写一个表格和做一份C++研发工程师题,题目都很基础,随意写了一下,题目中比较有新意的是有关于C++11的auto 以及lambda函数,还有就是关于斗地主中三个玩家和服务器之间的发牌、叫分、打牌的补充逻辑示意图,之后就是最后一道最喜欢哪种类型的游戏以及相应的理由。

技术面,面我的直接就是杭电毕业的学长,面试过程中发现也同样是老乡,感觉十分有缘,一开始就是自我介绍,我分别从学习上,科研竞赛上(本人读研期间做的事情真的挺多的,所以balabala了好久,但是面试官并没有不耐烦),还有就是社会工作上来分点介绍自己(真的,思路要清晰,有条理,之后面试官也赞扬我能分点介绍),接着面试官提问关于项目中遇到的困难,怎么去解决,有哪些体现你的学习能力,我直接从我小白身份做过的项目里去介绍这几点,说完面试官很满意,全程笑脸,之后问我看技术书是怎么看的,我说不会从头看到尾,我会先看目录,找到自己项目中相关的信息,然后去做,之后看例子,有个相似的模板就嵌套进去,遇到不懂的再查,面试官也笑了笑,最后面试官就聊了聊该岗位具体要做什么,和我想的差不多,同时也需要做一些前端的事情,之后面试官商量了一下实习时间等,他就去找HR,说如果HR面过了就来实习

HR面,面我的是HR小姐姐,挺有意思的,也问了我项目,同样的回答,HR表示我思路很清晰,之后问了我人生规划以及是否留在杭州,本人表示愿意,然后就是问实习时间还有实习薪资,顿时心里有底了,毕竟并非科班出身,以及自己提了几个问题,关于上班时间,公司规模,具体事物等,HR都一一回答了,聊的也很愉快。

总的来说一次不错的面试经历。

七.浙江大华股份有限公司

网上笔试结束后,大概过来一星期通知去面试,那天下大雨,路上一个多小时的时间...还把雨伞弄丢了..好气

首先是基础面

1.先介绍自己学习方面(我说了一些自己的奖学金)

2.聊一聊项目经历,其中我说明了自己的SCI论文如何发表,在项目中自己做的事情,面试官答题了解了我做的事和在项目中的作用。

3.是否了解TCP/IP,不了解...

4.多线程,回答thread_create来创建多线程,VS上可以用opm.h头文件来进行多线程

之后技术面

1.自我介绍(我分三个方面:学习,科研和项目,社会工作)

2.迭代与递归的区别,递归会消耗更多内存和时间,迭代则不会

3.如何判断链表中是否有环,可以设置两个快慢指针,快指针向前走两步,慢指针向前走一步,如果两个指针相遇,那么该链表中存在环(追击问题)

4.多线程编写,线程切换

用thread_creat创建多线程,sleep用于线程睡眠,SwitchToThread用于线程切换。

5.是否会快速排序,快速排序的思想,能否将快排的递归转换成迭代

快排采用分治法,分而治之,递归转迭代并不会...

6.字符串中找子串如何实现

strstr()函数,我回答使用动态规划,寻找子结构。

7.用过哪些IDE

code::block,eclipse,VS

8.是否了解过智能指针

auto_ptr,使用完毕可以自动销毁内存。

9.是否做过GUI界面

做过GUI界面,但是是用matlab做的。

最后就是HR面,HR小姐姐挺漂亮的

1.自我介绍(学习方面)

2.学习期间最有成就感的事

发表sci论文

3.大华是否是你心中的理想公司

吹了一波

4.实习日期,一周几天等

暂时只有这些,持续更新中,如有错误请指正

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值