Re: [討論] 面試有鑑別度的問題??
L大你好
看完你的文章有些地方想請教
因為沒這方面觀念也不太知道你講的含意
=====================================
3. 過 multithread 會爆炸
你要在 thread 邊界接下來
=====================================
不太了解什麼叫做thread邊界?
======================================
4. C++ 的 ABI 沒有標準
所以你可能要在 module 邊界接下來轉成 error code
======================================
不太了解什麼叫做model邊界, 以及ABI 我查了一下相當的抽象, 有沒有比較好理解的解
釋呢?
======================================
C++ 的 memory model 其實沒考慮到 thread
所以如果在進入 multithread 之後才想要初始化
那祝你好運 :)
======================================
不太懂甚麼叫做進入後才初始化耶@@
是說開一條thread
在thread裡面呼叫getInstance做第一次的初始化
這樣有可能會造成main thread跟這條 thread沒有做好sync 造成getInstance那部出問題
?
另外~~
想請問 exception 發生時會讓程式的performance變很差的根本原因是什麼呢?
看到一些比較淺的文章都是在用程式去測performance
結論是exception 沒發生的話 效率是近乎一樣
但exception發生 會效率很差
不太了解 root cause~
謝謝
※ 引述《legnaleurc (CA)》之銘言:
: : 推 xvid:這篇有好心人願意解答嗎? 01/08 00:5
: 我是斗M,快來鞭我 ._./
: ※ 引述《littleshan (我要加入劍道社!)》之銘言:
: : 標題: Re: [討論] 有鑑別度的問題??
: : 時間: Mon Jan 7 00:13:59 2013
: : 隨便想的幾個題目
: : 1. 若在 class 中定義了 destructor,則通常還需要定義另外兩個 function。
: : 為什麼?
: copy assignment operator 和 copy constructor
: 如果有需要自訂解構行為通常也會影響到 copy 語意
: 不過因為 C++ 夭壽複雜的規則,有時也會有例外
: : 2. mutable 這個關鍵字應該用在什麼地方?
: 被 mutable 修飾的成員即使在 const method 裡也可以被修改
: 這跟 volitale 一樣是不太常用的 cv 修飾字
: 用途嘛 ... 有時候你會需要在 const method 重用 non-const 版本
: 不過我個人是會避開就是了
: : 3. 為什麼 C++ 有四種不同的 cast operator?
: static_cast: 顯式轉型(e.g.: 大轉小,有號無號 ... etc.)
: const_cast: 去掉 CV 修飾字
: dynamic_cast: 向下轉型,失敗會是 nullptr
: reinterpret_cast: 以上三種以外的情況用這種,但後果要看 compiler
: 不是不好,很多時候只能這麼轉,像是 function pointer
: 不同場合用不同的 cast,用 grep 比較好找(?)
: : 4. exception 有什麼優點和缺點?
: 戰文。
: ....
: 雖然現在的普世價值觀是 exception > error code,但仍有一票人
: 不喜歡 C++ exception,像是 Joel 曾寫一篇 blog 批評 C++ exception
: 優點是它可以把錯誤處理的程式碼分開,較為清晰好讀,也較好維護
: 缺點是 ... 嗯,只講 C++ 好了
: 1. 你要懂 exception-safety
: 然後你就要知道 RAII
: 知道為什麼你不可以在資源回收或 swap 時丟 exception
: 以及思考你要採取哪種保證
: 2. C++ 的 exception 沒有 frame stack 資訊
: 苦命地開 debugger 吧
: 3. 過 multithread 會爆炸
: 你要在 thread 邊界接下來
: 4. C++ 的 ABI 沒有標準
: 所以你可能要在 module 邊界接下來轉成 error code
: : 5. C++ 提供多重繼承,但 C# 或 Java 都採用 interface 與單一繼承。
: : 允許多重繼承有什麼缺點?
: 最明顯的問題是可能會出現鑽石狀繼承圖
: Java 所有物件都繼承自 Object,要是能多重繼承,鑽石就來了
: C++ 讓使用者自已解決
: 好處是設計自由,衍生出如 policy-based design 等手法
: 但壞處是你要處處小心不要炸了自已的腳,還要記得用 virtual inheritance
: 另外 C++ 很鳥的地方是多重繼承後的指標,在大部分的 compiler 上會有 offset
: 比方說 class C: public A, public B {};
: C * c = new C;
: A * a = c;
: B * b = c;
: 指標的值,b 會和 c 不一樣,但是 b == c 是 true
: 這代表什麼,代表存在陣列裡的多型指標都不可信
: 因為陣列需要計算指標的 offset
: : 6. 為什麼我們要避免使用 global variable?
: : Singleton 是 global variable 嗎?為什麼?
: 一個非 const 變數存在的 context 越大,它就越難掌控
: 你很難一眼看出來哪些程式碼依賴這個變數
: 還有最重要的 multithreading 同步問題
: 關於 Singleton,還是戰文
: 我的看法是,這東西就是包裝精美的全域變數
: 全域變數有的缺點它全都有,只不過它讓你有方法補救
: 在 C++ 它的重點有二:
: 1. 正確解構順序
: 一般來說沒什麼難的,但如果你有用到 dll ...
: 2. 在 multithread 環境正確初始化
: C++ 的 memory model 其實沒考慮到 thread
: 所以如果在進入 multithread 之後才想要初始化
: 那祝你好運 :)
: 好好的一個人,何苦學 C++?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.163.58.205
推
01/08 18:43, , 1F
01/08 18:43, 1F
討論串 (同標題文章)