2022-我的秋招之旅

1. 自我介绍

​ 版1:(实习)

​ 面试官好,我叫xx,来自xx,目前研究生xx,就读于xx,在研究生期间,担任的职务为xx,在校期间参加各种比赛,如xx等,在校期间也获得了xx学业学金。研究生阶段方向是:xx,主要是基于xx,比如xx。以上就是我的基本情况,谢谢。


​ 版2:(xx银行)

​ 面试官好,我叫xx,来自xx,就读于xx,目前研究生x年级,计算机专业,本科期间四六级已过,获得xx;研究生期间,多次参加竞赛,也获得xx等证书;目前担任的职务为xx;研究生阶段方向是:xx;成果如下,xx。以上就是我的基本情况,谢谢。

​ 版3:(互联网)

​ 面试官好,我叫xx,来自xx,现就读于xx,计算机专业,目前研究生x年级,本科期间四六级已过,获得xx;研究生期间,获得了xx,多次参加竞赛,也获得xx等证书;现担任的职务为xx员;研究生阶段方向是:xx,主要是基于xx进行研究,比如在xx,增加xx,通过xx等;申请xx一项,发表xx一篇。今年暑假两个月在xx实习,在实习期间,xxxxx。以上就是我的基本情况,谢谢。

2. 神经网络

	1.	cnn 基础架构哪些,cnn总体可以分为哪两类任务
   1. LeNet
   2. AlexNet
   3. VGG-16
   4. GoogleNet
   5. ResNet
   6. MobileNet V1、V2、V3
   7. ShuffleNet V1、V2
   8. EfficientNet V1、V2 
   9. EfficientNet-lite v1-v5
   10. Transfomer

3. 描述BA

BA[1](光束平差法,捆集约束)的本质是一个图优化模型,其主要目的是构建最小化重投影误差模型或光度误差模型,用于优化相机位姿和地图点。一般选择LM(Levenberg-Marquardt)算法并在此基础上利用BA模型的稀疏性进行计算;可以直接计算(可以使用g2o或者Ceres等优化库进行计算)。
Bundle Adjustment : 从视觉重建中提炼出最优的3D模型和相机参数(内参和外参),好似每一个特征点都会反射几束光线,当把相机位姿和特征点位置做出最优的调整后,这些光线都收束到相机光心。也就是根据相机的投影模型构造构造代价函数,利用非线性优化(比如高斯牛顿或列文伯格马夸而尔特)来求最优解,利用雅克比矩阵的稀疏性解增量方程,得到相机位姿和特征点3D位置的最优解。
基本流程

首先构建残差模型(最小重投影误差或光度误差);
LM或GN优化残差模型(利用其稀疏性求解Hessin矩阵)

4. 描述PnP

Perspective-n-Points, 是求解3D到2D点对运动的方法。通常用于特征点法,在已经有三角化以后的3D地图点(拥有世界坐标)和当前图像帧像素点的匹配对时(例如ORB SLAM里是通过计算描述子匹配 3D 地图点和像素点),通过重投影地图点到当前帧以获取重投影误差获取当前帧的位姿的过程,称为PNP。

5. 视觉SLAM方法一般分为 特征点法、直接法、和光流法,简述概念,及优缺点。

特征点法——根据提取和匹配特征点来估计相机运动,优化的是重投影误差,对光照变化不敏感,是比较成熟的方案。常见的开源方案:ORB_SLAM
优点:
① 特征点本身对光照、运动、旋转比较不敏感,所以较稳定
② 相机运动较快(相对直接法来说)也能跟踪成功,鲁棒性较好
③ 研究时间较久,方案较成熟
缺点:
① 关键点提取、描述子计算、特征点匹配耗时长
③ 只能构建稀疏地图
④ 只使用特征点,丢弃大量可能有用的信息

直接法——根据相机的亮度信息估计相机运动,可以不需要计算关键点和描述子,优化的是光度误差,根据使用像素数量可以分为稀疏、半稠密、稠密。常见的开源方案:SVO
优点:
① 速度快,可以省去特征点提取、计算、匹配时间
② 只要图像有深度即可
④ 可以构建稀疏、半稠密、稠密地图
缺点:
① 灰度不变假设,易受光照影响

光流法——用光流跟踪代替描述子计算和特征点匹配,估计相机运动。
优点:
① 不需要计算描述子和匹配特征点
② 只会特征跟丢,很少会误匹配
缺点:
① LK光流的结果依赖于图像梯度,局部梯度不能预测长期图像走向 (可以用多层光流来解决)
② 图像边界的点,光流不好追踪 (直接法弥补了这个缺点)
③ 灰度不变假设,易受光照影响

6. 视觉SLAM常用相机包括:单目,双目,RGB-D相机,简述优缺点、常用的相机型号?

单目——种类多
优点:
① 应用广,成本低
② 体积小,标定简单,硬件搭建简单
③ 可用于室内、外 (适当光照下)
缺点:
① 纯视觉传感器通病:光照变化较大、纹理特征缺失、快速运动导致模糊的情况下无法使用
② 尺度不确定性,需要专门初始化
③ 必须通过运动估计深度 (帧间匹配三角化)

双目——ZED、小觅、Indemind
优点:
① 相比单目,静止时能根据左右相机视差计算深度
② 基线距离越大,测量距离越远
③ 可用于室内、外 (适当光照下)
缺点:
④ 纯视觉传感器通病:光照变化较大、纹理特征缺失、快速运动导致模糊的情况下无法使用
① 双目标定计算复杂
② 用视差计算深度比较耗资源

RGB-D——Kinect系列、realsence系列
优点:
① 使用物理测距方法测量深度,在无光照、快速运动时都可以测距
② 相对双目,输出帧率较高,更适合运动场景
③ 深度值较准 (结合RGB信息,容易实现手势识别、人体姿态估计等应用)
缺点:
① 测量范围窄,易受日光影响,只能用于室内
② 标定较复杂
③ 分辨率不能很高 (VGA:640x480)
④ 遇到透射材料、反光表面、黑色物体时表现不好,造成深度图缺失

7. 关键帧是什么?作用?如何选择关键帧?

**概念:**在局部一系列普通帧中选出一帧作为局部帧的代表。(班长就是关键帧)
**作用:**面向后端优化的算力与精度的折中
选择标准:
① 如果当前帧和最新关键帧之间跟踪的特征点的平均视差超出某个特定阈值,则将该帧视为新关键帧 【避免关键帧太密集】;
② 跟踪点的特征数量低于某一阈值 【避免跟踪特征完全丢失】
注:当出现纯旋转的时候特征点无法被三角化,无法计算出旋转值,也就无法计算跟踪点间的平均视差。为了解决这一问题,采用短时的陀螺仪观测值来补偿旋转,从而计算出视差,这一过程只应用到平均视差的计算,不会影响真实的旋转结果。

8. SLAM中为什么要引入李群李代数?关系?

**原因:**旋转矩阵自身是带有约束的,R是正交矩阵且行列式为1,他们作为优化变量时,会引入额外的约束,优化变的困难。通过李群李代数的转换关系,把位姿估计变成无约束的优化问题。
关系:
① 李群—对数变换—》李代数;李群《—指数变换—李代数
② 李群——矩阵;李代数——向量
③ 矩阵求导,加法不封闭;而李代数向量,加法封闭

9. 对极约束(对极几何)、PnP、ICP 。 P3P求解过程,缺点及改进 EPNP 概述

对极约束——(单目)一般使用八点法计算本质矩阵E。然后通过SVD分解出相机的运动R和t;再通过三角测量求解三维点的坐标
概念:相机在不同位置拍摄了两幅图像,如果一个空间点P在两幅图像上分别有两个成像点。已知左图成像点为p1,那么右图成像点P2一定在 相对于p1的极线上 (可以简洁的给出匹配点的空间位置关系,相对暴力匹配极大减少待匹配的点的数量)。
RANSAC:有外点(误匹配)时
PNP——输入数据为3对3D-2D匹配点;利用三角形的相似性,求解3个2D投影点在相机坐标系下的3D坐标;然后根据3D-3D的点对,计算相机的运动R,t。
线性方法:先求相机位姿,再求空间点位置;非线性优化:把它们都看成优化变量,放在一起优化
ICP—— 对于一副点云中的每个点,用迭代最近法,在另一副点云中计算匹配点;极小化匹配点间的匹配误差,计算位姿R和t;然后将位姿作用于点云,再重新计算匹配点

P3P——输入数据为3对3D-2D匹配点;利用三角形的相似性,求解3个2D投影点在相机坐标系下的3D坐标;然后根据3D-3D的点对,计算相机的运动R,t。
P3P缺点:只利用3个点的信息,难以利用更多信息;受噪声或者误匹配影响
P3P改进: EPNP——利用更多信息,且迭代的方式对相机位姿进行优化,以消除噪声影响

10. 单目SLAM初始化过程?单目SLAM流程?

**单目SLAM初始化过程:**是通过前两帧之间2D-2D匹配点,使用对极几何计算出相机的R、t;并将该t初始化为单位1,解决单目的尺度不确定性问题。且在初始化时,要保证两帧图片之间的运动必须包括平移(不能只是纯旋转)。
**单目SLAM流程:**单目初始化—PnP—三角化—PnP—三角化……。具体方法是依赖对极几何的相关知识,根据2D-2D匹配点对计算本质矩阵(或基本矩阵),并对其进行分解得到相机运动,再依据三角化原理计算特征点深度。至此即得到3D-2D匹配点对,后续的相机位姿的估计就是PnP问题了,后续3D点的计算仍采用三角化方式。

11. 单目视觉SLAM尺寸漂移产生原因?解决办法?

**产生原因:**使用单目估计相机位姿和3D点坐标时,需要通过对极几何、三角化进行估计,在这个过程中会产生误差(特征点精度误差、计算误差);经过多帧累积,误差变大,造成尺度漂移
解决办法:
① 视觉与IMU融合,借助IMU测得的高帧率的加速度、角速度对视觉进行修正、补充;
② 后端优化时,把尺度作为一个优化变量进行优化,可以减少尺度漂移。

12. SLAM后端一般有两种方法:滤波方法和非线性优化方法,优缺点?

滤波

**思路:**假设马尔科夫性,认为k时刻状态只与k-1时刻状态有关,而与再之前的无关。用前一个时刻的值来估计下一个时刻,以EKF为代表。
优点:
① 形式简洁、应用广泛;
② 在计算资源受限、待估计量较简单时,EKF为代表的滤波比较有效,常用于激光SLAM
缺点:
① 滤波器方法基于马尔科夫性,对于很久之前时刻的数据难以处理;
② 存在非线性误差,扩展卡尔曼滤波器只在固定点作一次线性化,但在离开工作点较远处不一定能够近似整个函数;
③ 不适用于大型场景,扩展卡尔曼滤波需要存储状态量的均值和方差,并对其更新维护,若状态中加入路标,存储量是相当大。
优化

**思路:**考虑k时刻状态与之前所有状态的关系,把所有状态看成变量,把运动方程和观测方程看成变量间的约束,构造误差函数,然后最小化这个误差的二次型。
优点:
① 把所有数据放在一起优化,可以实现全局优化
② 根据BA的稀疏性和边缘化,通过图优化可以实现实时
缺点:
① 包含大量特征点和相机位姿的稠密BA计算量很大,受硬件资源的影响,无法实时;
② 早期通过梯度下降法求解BA,矩阵求逆的时间复杂度为O(n3)。

13. SLAM中回环检测(闭环检测)目的?方法?

**目的:**有效地检测相机经过同一个地方,然后构建一个约束,从而减少累积误差
**方法:**利用词袋来进行回环检测,通过单词来度量图像间的相似性评分 (图像的相似性=word的相似性)
词袋(DBoW)——就是一个大的数据库字典,通过对图像提取特征点然后训练成不同的单词,用单词来描述一幅图像。
单词选择:k-means——从图像中提取了N个特征点,需要分成k个单词的字典。我们可以先随机选取k个中心点;对N个特征点,计算最近的k点作为聚类;再对每一类重新计算中心点;如果中心点收敛了,则退出;否则继续迭代。
k-means缺点——效率低。所以:用kd-tree解决——每一个根节点分为k个分支,深度为d,可容纳k^d个单词;对数级别查找效率

14. 词袋模型在回环检测和重定位中的区别?

词袋模型在SLAM中的应用:当前帧与关键帧的特征匹配、重定位的特征匹配、回环检测的特征匹配;(第一个是后两个的基本原理,后两个是应用场景)
注:连续帧间特征匹配采用的并不是词袋模型。
**(1)重定位:**主要是通过当前帧与关键帧的特征匹配,定位当前帧的相机位姿。
**(2)回环检测:**优化整个地图信息,包括3D路标点、及相机位姿、相对尺度信息。回环检测提供了当前帧与所有历史帧的关系

15. 地图点的构建方法?

**单目:**关键帧匹配构造、普通帧构造
**双目:**立体匹配、快匹配
**RGB-D:**彩色深度图对齐得到深度d,再根据彩色(u,v)坐标,根据相机投影公式计算3D点坐标

16. 如何计算相机运动

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lSwfzqQS-1670821620035)(C:\Users\ren\AppData\Roaming\Typora\typora-user-images\image-20220612124257724.png)]

实习

一、锐明技术一面

1.1 面试问题

1. 单目初始化流程?

/*

  • @brief 单目的地图初始化
    *

并行地计算基础矩阵和单应性矩阵,选取其中一个模型,恢复出最开始两帧之间的相对姿态以及点云,得到初始两帧的匹配、相对运动、初始MapPoints

  • Step 1:(未创建)得到用于初始化的第一帧,初始化需要两帧

  • Step 2:(已创建)如果当前帧特征点数大于100,则得到用于单目初始化的第二帧

  • Step 3:在mInitialFrame与mCurrentFrame中找匹配的特征点对

  • Step 4:如果初始化的两帧之间的匹配点太少,重新初始化

  • Step 5:通过H模型或F模型进行单目初始化,得到两帧间相对运动、初始MapPoints

  • Step 6:删除那些无法进行三角化的匹配点

  • Step 7:将三角化得到的3D点包装成MapPoints
    */

  • @brief 计算基础矩阵和单应性矩阵,选取最佳的来恢复出最开始两帧之间的相对姿态,并进行三角化得到初始地图点

  • Step 1 重新记录特征点对的匹配关系

  • Step 2 在所有匹配特征点对中随机选择8对匹配特征点为一组,用于估计H矩阵和F矩阵

  • Step 3 计算fundamental 矩阵 和homography 矩阵,为了加速分别开了线程计算

  • Step 4 计算得分比例来判断选取哪个模型来求位姿R,t(更偏向于非平面,从基础矩阵恢复)

​ 计算两张图像的平移t,令此时的t为单位1。(初始化时,两张图像之间必须有一定程度的平移,而后的轨迹和地图都将以此步的平移为单位。PS.在实践当中,如果初始化时平移太小,会使得位姿求解与三角化结果不稳定, 从而导致失败。相对的,如果把相机左右移动而不是原地旋转,就容易让单目 SLAM 初始化。因而有经验的 SLAM 研究人员,在单目 SLAM 情况下,经常选择让相机进行左右平移以顺利地进行初始化)

**单目SLAM初始化过程:**是通过前两帧之间2D-2D匹配点,使用对极几何计算出相机的R、t;并将该t初始化为单位1,解决单目的尺度不确定性问题。且在初始化时,要保证两帧图片之间的运动必须包括平移(不能只是纯旋转)。
**单目SLAM流程:**单目初始化—PnP—三角化—PnP—三角化……。具体方法是依赖对极几何的相关知识,根据2D-2D匹配点对计算本质矩阵(或基本矩阵),并对其进行分解得到相机运动,再依据三角化原理计算特征点深度。至此即得到3D-2D匹配点对,后续的相机位姿的估计就是PnP问题了,后续3D点的计算仍采用三角化方式。

  • 虽然我们不知道它的实际长度是多少,但我们以这时的 为单位 ,计算相机运动和特征点的 3D 位置。这被称为单目 SLAM的初始化。在初始化之后,就可以用 3D-2D 计算相机运动了。初始化之后的轨迹和地图的单位,就是初始化时固定的尺度。因此,单目 SLAM 有一步不可避免的初始化。初始化的两张图像必须有一定程度的平移,而后的轨迹和地图都将以此步的平移为单位。
  1. ORB-SLAM2框架
  • 输入。有三种模式可以选择:单目模式、双目模式和RGB-D模式。
  • 跟踪。初始化成功后首先会选择参考关键帧跟踪,然后大部分时间都是恒速模型跟踪,当跟踪丢失的时候启动重定位跟踪,在经过以上跟踪后可以估计初步的位姿,然后经过局部地图跟踪对位姿进行进一步优化。同时会根据条件判断是否需要将当前帧新建为关键帧。
  • 局部建图。输入的关键帧来自跟踪里新建的关键帧。为了增加局部地图点数目,局部地图里关键帧之间会重新进行特征匹配,生成新的地图点,局部BA会同时优化共视图里的关键帧位姿和地图点,优化后也会删除不准确的地图点和冗余的关键帧。
  • 闭环。通过词袋来查询数据集检测是否闭环,计算当前关键帧和闭环候选关键帧之间的Sim3位姿,仅在单目时考虑尺度,双目或RGB-D模式下尺度固定为1。然后执行闭环融合和本质图优化,使得所有关键帧位姿更准确。
  • 全局BA。优化所有的关键帧及其地图点。
  • 位置识别。需要导入离线训练好的字典,这个字典是由视觉词袋模型构建的。新输入的图像帧需要先在线转化为词袋向量,主要应用于特征匹配、重定位、闭环。
  • 地图。地图主要由地图点和关键帧组成。关键帧之间根据共视地图点数目组成了共视图,根据父子关系组成了生成树
    在这里插入图片描述

3. ORB-SLAM2里面如何解决暴力匹配问题?(特征匹配)

SearchForInitialization——初始化的时候使用的匹配
初始化的时候一定是相邻的两个普通帧之间进行初始化,所以可以认为二者之间的位姿相差不会太大
在F2(第2帧)中直接以F1(第1帧)中的特征点坐标为中心,在半径为100的圆内进行搜索。这种方式可以避免暴力匹配,同时在周围的一个圆形区域内进行匹配成立的原因就是1中所述,因为两帧之间的位姿相差不大,所以匹配的特征点一定距离很近。
由于是初始化,所以对匹配的要求比较高,所以使用了匹配唯一性和旋转一致性进行筛选。问题:匹配唯一性的比例是0.9比较高,按理说这是初始化部分应该要求唯一性高一点,也就是比例要低一点啊?

  • 暴力匹配

3. 单应矩阵和本质矩阵优缺点?

  • 初始化的纯旋转问题。从E分解至R,t 的过程中,如果相机发生的是纯旋转,导致 t 为零,那么,得到的E也将为零,这将导致我们无从求解。不过,此时我们可以依靠H求取旋转。但是单应矩阵需要假设特征点位于平面上,并不适应与大多情况,所以工程实践中一般使用本质矩阵来计算旋转和平移。
  • 相机只有旋转而无平移的时候,两视图的对极约束不成立,基础矩阵F为零矩阵,这时候需要使用单应矩阵H,场景中的点都在同一个平面上,可以使用单应矩阵计算像点的匹配点。 相机的平移距离相对于场景的深度较小的时候,也可以使用单应矩阵H。

@brief 计算单应矩阵,假设场景为平面情况下通过前两帧求取Homography矩阵,并得到该模型的评分

  • 原理参考Multiple view geometry in computer vision P109 算法4.4
  • Step 1 将当前帧和参考帧中的特征点坐标进行归一化
  • Step 2 选择8个归一化之后的点对进行迭代
  • Step 3 八点法计算单应矩阵矩阵
  • Step 4 利用重投影误差为当次RANSAC的结果评分
  • Step 5 更新具有最优评分的单应矩阵计算结果,并且保存所对应的特征点对的内点标记

@brief 计算基础矩阵,假设场景为非平面情况下通过前两帧求取Fundamental矩阵,得到该模型的评分

  • Step 1 将当前帧和参考帧中的特征点坐标进行归一化
  • Step 2 选择8个归一化之后的点对进行迭代
  • Step 3 八点法计算基础矩阵矩阵
  • Step 4 利用重投影误差为当次RANSAC的结果评分
  • Step 5 更新具有最优评分的基础矩阵计算结果,并且保存所对应的特征点对的内点标记

4. RANSAC函数?

作用:经常被用于虑除误匹配。

img

于是就求出了在最小二乘意义下的 矩阵。不过,当可能存在误匹配的情况时,我们会更倾向于使用随机采样一致性( Random Sample Concensus, RANSAC) 来求,而不是最小二乘。RANSAC 是一种通用的做法,适用于很多带错误数据的情况,可以处理带有错误匹配的数据。

RANSAC算法理解

5. 激光SLAM了解吗?

类似LOAM、SVO(Semi-Direct Monocular Visual Odometry)、Catargrapher算法、Suma、Suma++、A-LOAM

Cartographer是Google推出的一套基于图优化的激光SLAM算法,它同时支持2D和3D激光SLAM,是目前落地应用最广泛的激光SLAM算法之一。

数据集中有静止的车辆,你是如何区分开的?

6. Dyna-SLAM里面是如何具体实现动态物体检测?

使用多视图几何的方法检测图中动态物体(Multi-view Geometry)

系统用于动态物体检测的方法有两种:1、卷积神经网络,2、多视图几何

通过神经网络分割出图片中的动态物体,如:人、车、猫狗等。可以根据不同情况的需求,来训练网络,使其能判断出自己认为的实际环境中大概率会出现的动态物体。

使用多视图几何的方法检测图中动态物体

​ 1、选择五个(这是作者在精度和计算量上做的权衡)与当前帧共视程度最高的关键帧。
 2、将关键帧中的关键点 Xkf 根据计算的相对位姿投影到当前帧中,获得匹配的关键点 Xcur ,以及 Xcur 在当前帧的深度 Zproj 。
 3、根据当前帧对应的深度图获得 Xcur 实际测得的深度值 Zcur。计算 ΔZ=Zproj-Zcur 。如果 ΔZ 大于某个阈值 threshold ,则认为关键点 Xcur 是在动态物体上,需要将其剔除。(作者权衡了判断的准确率和召回率,将阈值 threshold 设为0.7)
 4、此外还有个判断方法:如果关键点 Xkf 和 Xcur 之间的视差角大于30°,则也会将 Xcur 从图像中剔除。(这也是在TUM数据集上的普遍使用的判断条件)

7. 简历中xx用到了激光,具体是怎么使用的?

8. 项目中多线程是怎样设计的?

二、电政信息科技二面(技术)2022.6.15

2.1 面试问题

一、激光SLAM算法和视觉SLAM算法的区别?

二、单目初始化流程?

三、Faster RCNN目标检测算法的两个阶段?

​ 在2016年,Shaoqing Ren等人在Fast R-CNN[6]的基础上继续做出了创新,提出了Faster R-CNN模型。Faster R-CNN在提取候选口的时候,取消了使用SS(选择搜索算法),提出了一种RPN(区域生成网络)网络,RPN是一种全卷积网络,该网络是输入一张任意大小的图像,输出的则是一组候选框。生成的候选框送入Fast R-CNN的训练网络进行目标检测与精确定位。

R-CNN是最经典两阶段目标检测模型,但其缺点有很多,比如说,训练步骤繁琐,训练的速度满,精度不够,训练的时候占据太多的物理空间。于是后面相继提出SPP NET,Fast R-CNN、Faster R-CNN以及Mask R-CNN[14](Mask R-CNN本文未进行介绍)等模型。

​ Faster R-CNN的结构是,首先将图片放入一个全卷积网络,在输出feature map的时候,将feature map送入RPN(区域生成)网络,RPN网络输出一批候选框,这些候选框与之前的feature map进行相应的映射,然后将其送入ROI Pooling,生成固定的feature map,然后再对其进行特征提取,最后进行分类与回归。因此Faster R-CNN也可以理解为RPN+Fast R-CNN的结合。Faster R-CNN的结构图,如图4所示。

​ 纵观本文介绍的几种目标检测模型的思路,其实其基本的思路就是去模拟一个人的思考的方式。当你去遇见一个陌生的物品的时候,首先你可以知道这个物品的具体位置,这就是候选框。然后我们就可以在这个物品上观察它的特征,比如说颜色,形状等等,这就是提取特征的过程。在特征提取结束之后,我们就可以将这个物品进行分类。所以说,想要在其进行创新,还是要抓住人的思维方式。此外,本人之前在查阅资料的时候,发现设计模式居然也可以改进CNN网络。之后如果CNN网络能够再进一步创新,那么再以Faster R-CNN或以Mask R-CNN模型为基础进行改进,那么目标检测的训练速度与精度又是有了新的创新。

​ 经过实验对比,Faster R-CNN在VOC 2007数据集上Fast R-CNN提取一张图片的候选框需要2秒,而Faster R-CNN仅需0.2秒,而且mAP值与Fast R-CNN保存一致。Faster R-CNN提出了RPN网络,使Faster R-CNN整个网络结构实现了全局权值共享,实现了两阶段目标检测的端对端的训练,这是两阶段目标检测的一个大的突破。
​ 区域生成网络RPNs + Fast R-CNN”的系统,用区域生成网络RPN代替FastR-CNN中的Selective Search方法

img

四、分类算法?

五、C++多线程?

六、期望实习工资?期望转正工资?

七、能实习多久?

八、产生漂移的原因?


三、电信面试 2022.7.5

3.1 面试问题
  1. 问题都是简历里面的,所以要重视简历。

  2. 栈和队列是两种重要的线性结构。从数据结构来看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集(也具有顺序结构和链式结构),它们是操作受限的线性表,因此,可称为限定性的数据结构。

  3. mysql,oracle的区别?

  4. 怎样将深度学习与视觉融合?

四、重庆银行面试 2022.7.9

4.1 面试问题

一面:(4位hr)非技术面,了解情况

  1. 你的研究方向,最新方法介绍?
  2. 你了解金融科技岗位吗?
  3. 实习过程中会学习金融相关的知识,你愿意接受吗?
  4. 实习时间?

五、重庆联想 2022.8.14

5.1 准备:RPC基本概念和流程、八股文、数据库

RPC

  • 为什么需要RPC?

    • 随着项目业务越来越复杂,业务量越来越大,单个应用或者一台机器的资源肯定是背负不起的。那现在应该怎么做?将核心业务抽取出来,作为独立的服务,放到其他服务器上或者形成集群。这个时候就会请出RPC,系统演变为分布式的架构

    在这里插入图片描述

  • RPC(Remote Procedure Call Protocol)远程过程调用协议。客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象一样。(一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议)

  • 一次完整的RPC同步调用流程

    • (1)服务消费方(client)以本地调用的方式调用客户端存根
          客户端存根就是远程方法在本地的模拟对象,一样也有方法名,方法参数。client stub接收到调用后负责将方法名、方法参数等包装,并将包装后的消息通过网络发送到服务端。
      (2)服务端收到消息后,交给代理存根在服务器的部分后进行解码为实际的方法名和参数。
      (3)server stub根据解码结果调用服务器上本地的实际服务。
      (4)本地服务执行并将结果返回给server stub。
      (5)server stub将返回结果打包成消息并发送至消费方。
      (6)client stub接收到消息,并进行解码。
      (7)服务消费方得到最终结果。
      RPC框架的目标是要将中间步骤都封装起来,让我们进行远程方法调用的时候感觉到就像在本地调用一样。
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/98b06384e09e432ea21ac49c907b2a26.png#pic_center)
      
    • RPC框架的目标是要将中间步骤都封装起来,让我们进行远程方法调用的时候感觉到就像在本地调用一样。
      
  • 公司使用什么 RPC 框架?,可以介绍一下 RPC 的工作原理吗?(参考CSDN

    • RPC 是一个分布式计算的 CS 模式,总是由 Client 向 Server 发出一个执行若干过程请求,Server 接受请求,使用者客户端提供的参数,计算完成之后将结果返回给客户端。

      使用最广泛的 Spring Cloud,基于 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的解决方案。

      国内开源的框架中,使用比较广泛的有阿里的 Dubbo,后来捐献给了 Apache。还有腾讯的 Tars 框架,还有 Thrift 框架,也有基于 Thrift 二次开发的 RPC 框架,比如美团的 Mtthrift。

  • 目前典型的RPC实现包括:Dubbo、Thrift、GRPC、Hetty等

5.2 技术一面(2022.8.11)
  1. 简历中的两个项目简单介绍
  2. C++八股文
    • malloc 0返回值是什么?
    • 常量指针和指针常量?
      • 指针常量是指定义了一个指针,这个指针的值只能在定义时初始化,其他地方不能改变
      • 常量指针 是指定义了一个指针,这个指针指向一个只读的对象,不能通过常量指针来改变这个对象的值
      • 指针常量强调的是指针的不可改变性,而常量指针强调的是指针对其所指对象的不可改变性。
    • 大小端和主程序?
    • 如何辨别变量是0
      • int
      • bool
      • char
      • char *
      • flot
  3. Linux命令?
    • 如何查看当前运行的进程? ps命令
    • 如何查看进程中的线程?
  4. 算法
    • 归并算法思想?
    • 堆排序?
    • 递归 变成 迭代 如何实现?
  5. hr介绍目前团队工作?
    • 边缘云(BU)、纯软开、5G基站、上层、车联网、底层软件、云网(容器)、上层5G应用、边缘、技术栈
    • 内部研发 (软开) 需求->任务(2-3个人)
    • 设计写代码、go语言、python语言用得多,原生!!!

总结

最后选择去cq银行实习了一个多月,收获很大,衷心感谢领导和哥哥姐姐们的热情帮助,耐心指导,无微不至的照顾。


秋招

一、重庆电信

2022.10.13 上午电信一面

  1. 面试准备

    1. 1栈和队列的区别?

      • 首先说一下栈和队列的共同点,它们都是由几个数据特性相同的元素组成的有限序列,也就是所谓的线性表,但二者都是操作受限的线性表。
      • 队列遵循先进先出规则,只允许在一端插入元素,也就是队尾,在另一端删除元素,也就是队头。
      • 栈遵循后进先出,只能在栈顶插入和删除元素,不含元素时是空栈。
    2. 2 mysql,oracle的区别?

      • mysql与oracle都是关系型数据库,应用于各种平台。

      • mysql开源免费的,而oracle则是收费的。

      • mysql软件体积小,安装使用简单且易于维护,mysql安装后差不多一两百兆,而oracle则有3G左右,且使用的时候oracle占用特别大的内存空间和其他机器性能。

      • mysql可以使用Navicat,Oracle一般用PLSQL图形化工具。oracle支持大并发,大访问量。

      1.3 研究过程中遇到的问题?

      如何将深度学习算法与视觉融合,这是我遇到的问题,首先…

      1.4怎样将深度学习与视觉融合?

    3. 加上面试助理共6位老师,年级都偏大,感觉是领导。两位HR问了3个问题(主城-大数据与IT开发应用支撑/网络安全工程师)?一个研究领域问题,另外两个网络安全的问题。

    4. 第一个问题:第一个研究内容疑难点?

    5. 第二个问题:在xx实习,信息安全这一块有什么初步了解没有?

    6. 第三个问题:xx网络安全是怎样防护的?

2022.10.26下午13:50重庆电信二面

  1. 自我介绍,并回答之前那三个问题

  2. 聊了简历上的两个项目

  3. 本科和研究生学的知识很多,最擅长哪一块?

  4. 对网络相关知识了解多少?

  5. 电信在你心目中排第几?(还问了好几个问题,我忘了)

  6. 你对电信有什么了解?

  7. 你最后还有什么问题?

    ​ 我回答:加入我能进入贵公司,我大概需要做哪些工作呢?

    ​ 大数据分析相关工作。

二、经纬恒润 2022.10.14 上午

一面 2022.10.14

hr人很好,会尽量让你去说,聊项目,聊学习过的技术,很浅地问了哈八股文。

问题1:堆和栈的区别?

C++中的存储区分为全局数据区、代码区、堆、栈。

  • 全局数据区存放静态数据、全局变量、常量。
  • 代码区存放所有类成员函数和非成员函数的代码。
  • 栈区存放用于函数的返回地址、形参、局部变量、返回类型。
  • 堆区存放余下的内存(new和delete)。
  • 堆和栈的区别:
    • 申请方式不同:栈是系统自动分配,堆是程序员申请。
    • 空间大小不同:栈是一块连续的区域,大小一般是1~2M;堆是不连续的区域,空间很大,上限取决于有效的虚拟内存。
    • 碎片问题:栈是后进先出的队列,内存是连续的,而堆则在多次的new和delete后会产生很多碎片。
    • 生长方向:栈是向下,堆是向上。
    • 分配效率:栈的效率比较高,堆是C++函数库提供的,效率低

问题2:C++中const和static的区别?

在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量

在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量

问题3:C++里面的继承?

它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生的新类,称派生类(或子类),被继承的类称基类(或父类)。

1.限定变量为不可修改。
2.限定成员函数不可以修改任何数据成员。

2022.10.28 终面

在终面之前做了一个笔试,很简单,涉及到C语言、Linux、计算机网络相关知识,不难,还有两个编程题。

面试时,作为加分项您可以准备一份ppt(可选),要求如下:

  1. 介绍代表个人最高水平的工作产品(项目)
  2. PPT讲述的时间为15-20分钟;
  3. PPT和邮件主题标注为:姓名-面试岗位-XX月XX日XX:XX-复试PPT。

我大概就讲了我的论文,包括研究背景、应用,研究内容,花了大概15分钟讲完,中途HR问了一个关于论文实验的问题,问我是用的什么仿真平台?我解释了一下。后面就问了我偏向于做应用还是xx那一块,我说偏向于应用,然后hr说可能会去xx实习xx个月,应为偏应用方面xx研发。

三、重庆联通 2022.10.18 下午

2022.10.18 下午一面

两位女HR,一位男HR,感觉都是领导。

  1. 3-5分钟自我介绍
  2. 实习经历,你去xx实习两个月,是学校安排的吗?
  3. 在xx实习,你的收获是什么?
  4. 为什么会选择重庆联通?

2022.10.28 上午 终面

线下,光电园下车后往前走500米左右

面试时,三位面试官,2位男HR,一位女HR,应该都是领导

首先3分钟自我介绍

第一个问题:你对应聘岗位的认识?(我报的xx,大概说了一下之前考证时学习到的内容)

第二个问题:你去xx交流一年,是什么政策吗?去了学到什么知识?

第三个问题:在你所参与的项目中,有涉及到网络IT相关的知识吗?

第四个问题:有没有后端经验,(我回答有的)如果让你去做后端开发,你愿意吗?

第五个问题:说一说你用过或者见过的网络设备。(交换机、路由器)

四、比亚迪 2022.10.18

  1. 电话面试,做自我介绍
  2. 有没有做过信息管理系统相关项目?
  3. 学过前端,还记得哪些前端知识?
  4. 聊项目
  5. 只有深圳岗

五、重庆奥普新通 2022.10.19

  1. 自我介绍

  2. 聊简历上的项目

  3. 网络相关的知识,问了好多问题。

    • OSI七层协议

    • TCP/IP五层协议

    • ARP协议作用

    • 你考过xx证书,这个证书考实操吗?实操部分具体是怎样配置路由协议的?通过学习这个证书,你学习了哪些边界网关协议?

    • 请说说红黑树和平衡二叉树?

六、重庆人文科技学院

需要自我介绍完毕后,开始讲研究内容,由于时间原因,无快讲完时被院长打断了,后面就过了一下。

问题一:副院长问了简历上的项目,问得很浅。

问题二:在你研究中加入激光雷达,有没有考虑过含噪点怎样去除?(这个是学院的院长问的,问得还是很有水平的。)

七、梧桐车联 2022.10.28 下午

投错岗位了,面试问题就不写了。

八、中移物联 2022.11.24

1.锁?

通过锁机制,能够保证在多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作数据的一致性。

所谓的锁,可以理解为内存中的一个整型数,拥有两种状态:空闲状态和上锁状态。加锁时,判断锁是否空闲,如果空闲,修改为上锁状态,返回成功。如果已经上锁,则返回失败。解锁时,则把锁状态修改为空闲状态。

2.多态?

基类指针可以按照基类的方式来执行对应功能,也可以按照派生类的方式来执行对应功能,他有多种形态,或者说多种表现形式,我们将这种现象称为多态;

3.栈和堆的区别?

参考:一文读懂堆与栈的区别

栈由操作系统自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈。

堆由开发人员分配和释放, 若开发人员不释放,程序结束时由 OS 回收,分配方式类似于链表。

(1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;

(2)空间大小不同。每个进程拥有的栈大小要远远小于堆大小。理论上,进程可申请的堆大小为虚拟内存大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;

(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有 2 种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca()函数分配,但是栈的动态分配和堆是不同的,它的动态分配是由操作系统进行释放,无需我们手工实现。

(5)分配效率不同。栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多。

(6)存放内容不同。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(EBP),再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量,注意静态变量是存放在数据段或者BSS段,是不入栈的。出栈的顺序正好相反,最终栈顶指向主函数下一条语句的地址,主程序又从该地址开始执行。堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。

4.内存溢出?

是指程序在申请内存时,没有足够的内存空间供其使用。

5.数组和链表的区别?

九、重庆星网 2022.11.26

  1. 动态库和静态库的区别?

1,命名方式不同

  • 静态库libxxx.a:库名前加”lib“,后缀用”.a“,"xxx"为静态库名/
  • 动态库libxxx.so:库名前加"lib",后缀变为".so"。

2,链接时间不同

  • 静态库的代码时在编译过程中被加载入程序中,
  • 动态库的代码时当程序运行到相关函数才调用动态库的相关函数。

3,链接方式不同

  • 静态库的链接是将整个函数库的所有数据在编译时都整合(复制???)进了目标代码。
  • 动态库的链接是程序执行到哪个函数就链接那个函数的库。(用哪个链接哪个)
  1. 堆和栈的区别?
  2. 说一说编译的过程?
  3. pyqt里面怎样选择组件?

​ QRadioButton按钮

  1. 进程和线程?

十、中国银行重庆分行 2022.11.30

1.半结构化面试。讲述在什么情况下接受了什么任务?讲的事例一定要具体。请大家按照这样的方式来讲,这件事你是在

什么情况下,面临一个什么样的任务,采取了哪些具体的措施,最后达成

了怎样的结果。因为时间有限,请大家重点讲一下处理这个事情的步骤措

施。请不要谈自己的思路,这不是我们所关注的,请大家讲具体做的事,

重点是讲清楚解决问题的具体措施。如果是在团队中完成的事,请讲清楚

自己在团队中的角色和贡献。

2.是否接受调剂?

3.期望薪资?

4.上午10点进入的会议,发现大概有24位应聘者,每位同学都会进行身份认证,一直等到11.40才到我面试,等了1个半小时,体验感贼差,面试这么多公司,很少碰到公司等这么久。

十一、交通银行重庆分行 2022.12.2

  1. java和C++区别?
  2. 问考的证书情况
  3. 问偏向于做硬件还是软件?
  4. 个人家庭情况,是否独生子女
  5. 有没有拿到其它银行offer

总结:

  • 交通银行重庆分行开了13+,工作地点在渝中。
  • 重庆电信开了15+,工作地点在渝北。
  • 奥普泰开了15+,工作地点在光电园。
  • 经纬恒润开了20+,工作地点在成都。
  • 重庆人文科技学院开了8+,工作地点在合川。

猜你喜欢

转载自blog.csdn.net/xiaoren886/article/details/128285555