秋招的小小总结

快要国庆了,秋天又要结束了呢。

渣硕一枚,出去面试才发现自己有多渣。。

总结一下面试中遇到的一些问题,希望自己有所成长。

1.华为

    综合面:

    a.做项目过程中遇到问题是怎么解决的?举一个具体的例子。

    答:咨询导师,请教师兄,查阅文献,上网查找啊,去社区提问之类的。面试官不太满意,也许是想听结合具体问题的一系列思             考解决过程吧。

    b.对未来发展的规划

    答:想继续做无人驾驶,想继续深入研究,在一定深度的基础上扩宽知识面。(答的比较宽泛,确实没有想好详细的规划,想着先提升自身实力)

2.飞步

   a.问:解释下多态

扫描二维码关注公众号,回复: 4218856 查看本文章

     答:提供多个接口,在程序运行时才会确定具体的调用函数。

     问 :编译期间可以确定调用的函数吗?

     答:不能。

回来百度了一下,发现还有静态编译。https://www.cnblogs.com/QG-whz/p/5132745.html

在面向对象C++编程中,多态是OO三大特性之一,这种多态称为运行期多态,也称为动态多态;在泛型编程中,多态基于template(模板)的具现化与函数的重载解析,这种多态在编译期进行,因此称为编译期多态或静态多态。

运行期多态

运行期多态的设计思想要归结到类继承体系的设计上去。对于有相关功能的对象集合,我们总希望能够抽象出它们共有的功能集合,在基类中将这些功能声明为虚接口(虚函数),然后由子类继承基类去重写这些虚接口,以实现子类特有的具体功能。

运行期多态的实现依赖于虚函数机制。当某个类声明了虚函数时,编译器将为该类对象安插一个虚函数表指针,并为该类设置一张唯一的虚函数表,虚函数表中存放的是该类虚函数地址。运行期间通过虚函数表指针与虚函数表去确定该类虚函数的真正实现。

运行期多态的优势还在于它使处理异质对象集合称为可能。

运行期多态通过虚函数发生于运行期。

编译期多态

对模板参数而言,多态是通过模板具现化和函数重载解析实现的。以不同的模板参数具现化导致调用不同的函数,这就是所谓的编译期多态。
相比较于运行期多态,实现编译期多态的类之间并不需要成为一个继承体系,它们之间可以没有什么关系,但约束是它们都有相同的隐式接口。

在编译之前,函数模板中t.shout()调用的是哪个接口并不确定。在编译期间,编译器推断出模板参数,因此确定调用的shout是哪个具体类型的接口。不同的推断结果调用不同的函数,这就是编译器多态。这类似于重载函数在编译器进行推导,以确定哪一个函数被调用。

运行期多态与编译期多态优缺点分析

运行期多态优点

  1. OO设计中重要的特性,对客观世界直觉认识。
  2. 能够处理同一个继承体系下的异质类集合。

运行期多态缺点

  1. 运行期间进行虚函数绑定,提高了程序运行开销。
  2. 庞大的类继承层次,对接口的修改易影响类继承层次。
  3. 由于虚函数在运行期在确定,所以编译器无法对虚函数进行优化。
  4. 虚表指针增大了对象体积,类也多了一张虚函数表,当然,这是理所应当值得付出的资源消耗,列为缺点有点勉强。

    编译期多态优点

  5. 它带来了泛型编程的概念,使得C++拥有泛型编程与STL这样的强大武器。
  6. 在编译器完成多态,提高运行期效率。
  7. 具有很强的适配性与松耦合性,对于特殊类型可由模板偏特化、全特化来处理。

编译期多态缺点

  1. 程序可读性降低,代码调试带来困难。
  2. 无法实现模板的分离编译,当工程很大时,编译时间不可小觑。
  3. 无法处理异质对象集合。

    

关于显式接口与隐式接口

所谓的显式接口是指类继承层次中定义的接口或是某个具体类提供的接口,总而言之,我们能够在源代码中找到这个接口.显式接口以函数签名为中心。在运行期多态中的接口皆为显式接口。

而对模板参数而言,接口是隐式的,奠基于有效表达式。

b.解释下样条的原理,b样条为什么叫作b?

以下转自:https://blog.csdn.net/wang15061955806/article/details/52621268

原理的话涉及到公式推导,比较复杂。

Bezier曲线、B样条和NURBS的基本概念

一个有四个控制点的Bezier曲线:

可以通过改变一个控制点的位置来改变曲线的形状,比如将上图曲线中左边第二个控制点往上移,就可以得到下面的曲线:

可以看到,这种曲线生成方式比较直观和灵活,我只需要放置控制点,然后调整控制点的位置来得到想要的曲线,这就避免了和复杂的数学方程打交道,岂不快哉?

Bezier曲线、B样条和NURBS都是根据控制点来生成曲线的,那么他们有什么区别了?简单来说,就是:

§  Bezier曲线中的每个控制点都会影响整个曲线的形状,而B样条中的控制点只会影响整个曲线的一部分,显然B样条提供了更多的灵活性;

§  Bezier和B样条都是多项式参数曲线,不能表示一些基本的曲线,比如圆,所以引入了NURBS,即非均匀有理B样条来解决这个问题;

Bezier曲线只是B样条的一个特例而已,而B样条又是NURBS的一个特例,它们的关系可以图示为:

 

B样条克服了Bezier曲线的一些缺点,Bezier曲线的每个控制点对整条曲线都有影响,也就是说,改变一个控制点的位置,整条曲线的形状都会发生变化,而B样条中的每个控制点只会影响曲线的一段参数范围,从而实现了局部修改;

选了几个印象比较深的问题,不想再跑秋招了。想去闭关修炼。

猜你喜欢

转载自blog.csdn.net/crystalb13/article/details/82876904