Re: [討論] 面試有鑑別度的問題??
※ 引述《ibmibmibm (BestSteve)》之銘言:
: ※ 引述《littleshan (我要加入劍道社!)》之銘言:
: : 隨便想的幾個題目
: : 1. 若在 class 中定義了 destructor,則通常還需要定義另外兩個 function。
: : 為什麼?
: : 2. mutable 這個關鍵字應該用在什麼地方?
: : 3. 為什麼 C++ 有四種不同的 cast operator?
: : 4. exception 有什麼優點和缺點?
: : 5. C++ 提供多重繼承,但 C# 或 Java 都採用 interface 與單一繼承。
: : 允許多重繼承有什麼缺點?
: : 6. 為什麼我們要避免使用 global variable?
: : Singleton 是 global variable 嗎?為什麼?
: : 第一題算送分的,答不出來可以直接請他回家
: : 愈後面就愈沒有標準答案,屬於讓對方自由發揮的申論題
: : 從對方回答的內容其實很容易看出他的經驗以及觀念
: : 啊我好像沒提到 template...其實是因為我也不太熟
: 來提供一些多形、template和stl相關的題目
: 1. std::vector<bool> 有什麼優缺點?如何避免缺點?
std::vector<bool>並不符合標準對container的需求,
它為了省空間而將所有的值pack在一起,然後透過某種proxy來存取它
: 2. 為什麼不建議讓class繼承 STL 內的容器?
應該只有不建議public繼承,
因為這些container沒有virtual destructor
: 3. 在template class內宣告成員時,何時要用typename關鍵字?
: 何時要用template關鍵字?
當你的dependent name是一個type/template而不是value時,
需使用typename/template做disambiguation
struct foo
{
struct bar
{
};
template<typename T>
struct baz
{
};
};
template<typename T>
void f()
{
// Error: compiler assumes that T::bar is a value.
// T::bar<int> x;
// OK: typename T::bar<int> is a type.
typename T::bar<int> x;
// Error: compiler assumes baz<int> is an expression.
// typename T::baz<int> y;
// OK: typename T::template baz<int> is a type.
typename T::template baz<int> y;
}
f<foo>();
: 4. 什麼是auto_ptr?他有哪兩個缺點而不建議使用?替代方案是?
auto_ptr沒辦法分辨copy和move的語意,(第二個缺點是?
替代方案是std::unique_ptr
: 5. nullptr 是為了解決什麼問題而產生的?
void f(int); // 1
void f(int*); // 2
f(0); // Call 1
f(NULL); // Error: ambiguious
f(nullptr); // Call 2
: 6. type traits 是為了解決什麼問題而產生的?通常與哪些東西一起用?
簡單來說就是當你在寫template的程式碼時,
需要獲得type的一些性質(例如兩個type一不一樣,是不是pod...),
或是需要對type做一些轉換(增加rvalue reference,decay...),
就需要使用到type traits
: 7. 為了讓大家方便使用,overloading會開啟一個後門,請問是什麼後門?
不太清楚你想問什麼?
: 8. 請寫出一份不含marco的程式碼,
: 而使用c編譯器與c++編譯器都能編譯,
: 但是程式的執行結果不一樣。
sizeof('a')
: 題目是照我個人感覺排難易度的XD
: 能回答到越後面表示對stl跟template越熟
: 最後一題就很刁鑽了,不知道有多少解法
再來給幾個題目好了XD
1. 請解釋標準容器的allocator的用途?
(加分題:allocator中的rebind template是幹嘛用的?)
2. 何時會用到operator->*?
3. 請解釋std::bind如何使用以及用途為何?
4. 承上題,請舉例如何用std::bind將參數綁定在一個member function上。
5. 承上題,請解釋std::ref和std::cref的用途為何?
6. 在template的宣告中,class和typename通常是可以互換的,
但在哪一個情況下只能使用class這個keyword而不能使用typename?
7. 請解釋input/output/forward/bidirectional/random access iterator的差異為何,
他們各支援哪些operation?什麼是std::iterator_traits?
8. std::unordered_{set,map}和std::{set,map}有何差別?
9. 請舉例如何使用variadic template與template aliases,並實現std::tuple。
10. 請解釋何謂copy-and-swap idiom。
11. 為何T** -> const T**與derived** -> base**皆不合法?
12. 請解釋以下的這個&的作用,它可以幫助我們避免什麼錯誤?
auto foo::operator=(const foo&) & -> foo&
^
13. 試問以下的lambda為何不合法?要加入什麼才正確?
int i = 0;
auto l = [=](){ return ++i; };
assert(l() == i + 1);
(大家有沒有發現littleshan大大的第二題其實不只一個答案XD)
14. 請寫一個scopeguard,達到以下的使用方式:
{
auto sg1 = scopeguard([](){ std::cout << "1"; });
auto sg2 = scopeguard([](){ std::cout << "2"; });
auto sg3 = std::move(sg1); // sg3 takes sg1's responsibility
// to print 1 on destruction
sg2.dismiss(); // sg2 no longer prints 2 on destruction
} // print "1" here
15. 承上題,請使用scopeguard實作出類似其他語言中finally的功能出來,例如:
at_scope_exit([](){
// ...
});
(提示:可使用許多編譯器提供的__COUNTER__ macro)
16. 試問decltype和std::declval的用途和用法為何?
17. boost::variant與boost::any有何差別?
18. boost::function與boost::any皆中有用到type erasure的技巧,請解釋?
19. 請用constexpr寫出在compile-time計算factorial的function。
20. 請解釋何謂facet?它與locale的關係是?
加分題:有無使用其它boost、loki等函式庫的經驗?用在哪些地方?
其實我覺得題目有點刁鑽...(無誤,裡面3、4、5、7、8、10應該算是比較簡單的題目,
C++11的新功能幾乎每個都可以拿來考:user-defined string literal、random...
用來測驗programmer對C++11新功能的熟悉度,
如果能夠面試的時候非常快速精準的回答這些問題根本就是神了 m(_ _)m
很多題目也是稍微去翻一下才記得...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.235.102
※ 編輯: PkmX 來自: 140.113.235.102 (01/09 15:12)
※ 編輯: PkmX 來自: 140.113.235.102 (01/09 15:14)
→
01/09 15:38, , 1F
01/09 15:38, 1F
→
01/09 15:42, , 2F
01/09 15:42, 2F
推
01/09 15:42, , 3F
01/09 15:42, 3F
推
01/09 16:19, , 4F
01/09 16:19, 4F
→
01/09 16:31, , 5F
01/09 16:31, 5F
→
01/09 16:35, , 6F
01/09 16:35, 6F
推
01/09 16:41, , 7F
01/09 16:41, 7F
→
01/09 16:48, , 8F
01/09 16:48, 8F
→
01/09 16:59, , 9F
01/09 16:59, 9F
→
01/09 17:04, , 10F
01/09 17:04, 10F
推
01/09 17:06, , 11F
01/09 17:06, 11F
→
01/09 17:07, , 12F
01/09 17:07, 12F
→
01/09 17:10, , 13F
01/09 17:10, 13F
→
01/09 17:10, , 14F
01/09 17:10, 14F
→
01/09 17:10, , 15F
01/09 17:10, 15F
→
01/09 17:11, , 16F
01/09 17:11, 16F
→
01/09 17:11, , 17F
01/09 17:11, 17F
→
01/09 17:13, , 18F
01/09 17:13, 18F
→
01/09 17:42, , 19F
01/09 17:42, 19F
→
01/09 17:56, , 20F
01/09 17:56, 20F
→
01/09 18:31, , 21F
01/09 18:31, 21F
→
01/09 19:01, , 22F
01/09 19:01, 22F
→
01/09 19:02, , 23F
01/09 19:02, 23F
→
01/09 19:03, , 24F
01/09 19:03, 24F
→
01/09 19:06, , 25F
01/09 19:06, 25F
→
01/09 19:10, , 26F
01/09 19:10, 26F
→
01/09 19:10, , 27F
01/09 19:10, 27F
→
01/09 19:11, , 28F
01/09 19:11, 28F
→
01/09 19:12, , 29F
01/09 19:12, 29F
→
01/09 19:31, , 30F
01/09 19:31, 30F
→
01/09 19:31, , 31F
01/09 19:31, 31F
→
01/09 19:50, , 32F
01/09 19:50, 32F
→
01/09 19:56, , 33F
01/09 19:56, 33F
→
01/09 19:56, , 34F
01/09 19:56, 34F
→
01/09 20:02, , 35F
01/09 20:02, 35F
→
01/09 20:02, , 36F
01/09 20:02, 36F
→
01/09 20:03, , 37F
01/09 20:03, 37F
→
01/09 20:04, , 38F
01/09 20:04, 38F
→
01/09 20:08, , 39F
01/09 20:08, 39F
→
01/09 20:42, , 40F
01/09 20:42, 40F
※ 編輯: PkmX 來自: 140.113.235.102 (01/09 20:59)
→
01/09 21:01, , 41F
01/09 21:01, 41F
→
01/09 21:02, , 42F
01/09 21:02, 42F
→
01/09 21:09, , 43F
01/09 21:09, 43F
討論串 (同標題文章)