歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

C/C++刁鑽問題各個擊破

是程序員都會寫C/C++程序。這是不是就說明C/C++比較容易掌握呢?非也!相比其他編程語言來說C/C++要龐大得多、復雜得多,要想用好C/C++不是易事。我用C編程有5個年頭了,用C++也有4個年頭了,然而我時常犯錯,很多錯誤甚至是屢次三番的犯。

在實踐中,我發現導致編程出錯都是那些平時很少使用的貌似“偏僻”的C/C++特性,這些特性我們曾經都在某本教科書上學習過,但是印象不深刻,原因是這些教科書大都注重基礎知識的教學,並且認為花費過多篇幅去介紹這些貌似“偏僻”的弊大於利:這些特性容易導致混淆,掌握不好很容易讓程序出現很難更正的錯誤,因此大多數教科書都把這些特性分散到各個角落,並且是一筆帶過。是的,我覺得這些教科書並沒有錯,它們這樣降低了學習C/C++的難度,使得我們很快就能入門,然而,入門就夠了麼?一名好的程序員是永遠不會滿足於現狀的,因此我們渴求掌握更多、更高級的語言特性。因為這些特性對我們來說相當重要!

這些特性“貌似偏僻”實質非常重要。舉例為證:我畢業時(也就是今年的事)參加了許多公司的筆試和面試,其中包含:百度,華為,阿裡巴巴,趨勢科技,聯華科技,銀聯商務……,這裡可以給大家分享一下筆試面試的重點:其中百度筆試題目通常全部是算法題目,這些題目對時空復雜度要求非常高,而面試開始時通常會有C/C++的問題,這些問題都比較難,然後又是算法問題;華為我沒參加任何筆試面試就被錄用了(至今仍懷疑華為的招聘機制),因此沒有發言權;阿裡巴巴我是進行的電話面試,問了1個小時的C++問題+十分鐘設計模式問題,其中c++問題包含有不同變量(全局變量,static變量,局部變量等)的存儲位置、虛函數機制、位域,成員對齊,const,static,數組與指針的關系,構造函數,析構函數,運算符重載,變量的生存期……趨勢科技的筆試幾乎全部考察C++特性,每一道題目都是那些“貌似偏僻”的特性,當然最後還有一個算法分析題目;其他幾個企業也都差不多。根據我的經驗,現在的IT企業在面試筆試時都注重考察那些貌似偏僻的特性,這或許是因為他們覺得這樣能很好地考察一個人是否學的深入,是否知識面廣泛。事實上,這些貌似偏僻的特性非常重要,因為我們不可避免的要使用這些東西,而這些東西是我們很容易出錯的,並且錯誤還非常隱蔽,一旦出現很難排查,因此掌握這些特性是必須的!

小時候媽媽經常教育我:“頭次上了當,二次照個亮”,因此我經常會把犯過的錯誤記錄在案,偶爾翻來品讀,以免再在同一條河裡嗆水(事實上我還是經常在同一條河裡多次嗆水過),即便這不能完全解決問題,至少也有相當大的作用的。為此,我把這些貌似偏僻,實際上非常重要的特性(這些特性曾經讓我經常迷惑,也經常出錯)按專題整理出來,其目的有三:(1)通過整理,讓自己對這些知識點進行回顧,加深理解;(2)與各位讀者分享,以對各位提高C/C++編程水平盡微薄之力;(3)把自己的理解擺出來,讓大家幫忙審審,對那些錯誤的或者不恰當的理解,希望各位指正。

雖然程序的精髓在於“數據結構+算法”。即便如此,掌握一門語言特性仍然是程序員的最基本,也是最重要的要求。如果說將“數據結構和算法”比作內功的話,那麼編程語言就是外功。外功是內功的外在表象形式,如果外功不佳,那麼就會想段玉那樣:雖然會了六脈神劍但是不知道如何發招!

在寫本系列時,我盡量做到排版清晰,並將需要重點關注的話語用加粗的方式來起到醒目作用,以便閱讀。本系列中沒有任何創新的東西,這些知識點你可以在其他書籍中尋找到蹤跡,但是它們往往隱藏得很深,這就導致我們往往對這些知識點印象不深刻。如果你是第一遍讀,你可以較仔細的通讀,以後你可以采取只看標題和加粗部分的方式來浏覽本系列文章。

如果您覺得本系列寫得不錯,您可以轉載,轉載時請注明出處;您也可以復制下來作為平時的學習資料,或者作為參加求值面試之前的復習資料,或者拿去修改修改作為考察求職者水平的筆試面試資料,但是在未經本人書面允許的情況下,請不要用於其他商業目的。如果您覺得本系列質量太差,那麼請提出您寶貴的意見,指出其中的錯誤之處,或者你可以一笑了之。

由於本系列包含的專題較多,而且目前只完成了一部分,我會及時的把完成的專題進行更新。因此不能提供一個完整的目錄或者大綱。在本系列完成之後我會整理出大綱,方便閱讀。

Copyright © Linux教程網 All Rights Reserved