1. 程式人生 > >秋招的小小總結

秋招的小小總結

快要國慶了,秋天又要結束了呢。

渣碩一枚,出去面試才發現自己有多渣。。

總結一下面試中遇到的一些問題,希望自己有所成長。

1.華為

    綜合面:

    a.做專案過程中遇到問題是怎麼解決的?舉一個具體的例子。

    答:諮詢導師,請教師兄,查閱文獻,上網查詢啊,去社群提問之類的。面試官不太滿意,也許是想聽結合具體問題的一系列思             考解決過程吧。

    b.對未來發展的規劃

    答:想繼續做無人駕駛,想繼續深入研究,在一定深度的基礎上擴寬知識面。(答的比較寬泛,確實沒有想好詳細的規劃,想著先提升自身實力)

2.飛步

   a.問:解釋下多型

     答:提供多個介面,在程式執行時才會確定具體的呼叫函式。

     問 :編譯期間可以確定呼叫的函式嗎?

     答:不能。

回來百度了一下,發現還有靜態編譯。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樣條中的每個控制點只會影響曲線的一段引數範圍,從而實現了局部修改;

 

選了幾個印象比較深的問題,不想再跑秋招了。想去閉關修煉。