Re: [問題] 外國高級工程師的面試題
: ※ 引述《zuki326 (Zukisa)》之銘言:
: : 這裡有一份外國公司的高級工程師面試題
: : 不知道有沒有人可以答得出來
: : 1. Explain in detail what is wrong with the following code-block
: : and provide a correct implementation:
: : 解釋以下程式碼有何錯誤,並提供正確的寫法
: : private string GetString()
: : {
: : string value = string.Empty;
: : for (int i = 0; i < 85000; i++)
: : value += i.ToString();
: : return value;
: : }
: 因為String 在語言設計上通常都是 immutable 的,所以String + operator
: 每次操作都得產生新的String才行,而上面的程式裡每次for loop產生出來的
: 新String除了給下次用以外沒有其他用途。這是一種可怕的浪費。
: 我想到的解法是給new char[85000] ,塞數字,然後語言本身一定有方法可以
: 直接轉String。
你只要產生一個 string object, 用他來做 num->str 的轉換, 然後 append
to result string 即可避免過多的 temp string 占用記憶體.
不過這問題問得不好, 原先是最直覺的寫法. 有錯嗎? (wrong) 不覺得.
不好嗎? (bad) 記憶體觀點是沒錯.
效率不好嗎? 不一定, 要看 instantiate string object 的 cost 跟
你實作 num->str 的 cost, 做得不好的話:
num->str 也會產生 temp string, append to existing string, free temp string.
這都要看 string library 如何實作.
So no exact answer. 是要考申論題嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.198.77
→
11/17 23:27, , 1F
11/17 23:27, 1F
→
11/17 23:27, , 2F
11/17 23:27, 2F
→
11/18 00:02, , 3F
11/18 00:02, 3F
→
11/18 00:03, , 4F
11/18 00:03, 4F
→
11/18 08:48, , 5F
11/18 08:48, 5F
→
11/18 15:49, , 6F
11/18 15:49, 6F
→
11/18 16:22, , 7F
11/18 16:22, 7F
→
11/18 16:24, , 8F
11/18 16:24, 8F
→
11/18 16:25, , 9F
11/18 16:25, 9F
→
11/18 18:32, , 10F
11/18 18:32, 10F
→
11/18 18:33, , 11F
11/18 18:33, 11F
→
11/18 18:35, , 12F
11/18 18:35, 12F
→
11/18 18:35, , 13F
11/18 18:35, 13F
→
11/18 23:08, , 14F
11/18 23:08, 14F
→
11/18 23:12, , 15F
11/18 23:12, 15F
→
11/18 23:14, , 16F
11/18 23:14, 16F
→
11/19 00:08, , 17F
11/19 00:08, 17F
討論串 (同標題文章)