C ++のエントリから「習熟度」まで、私が踏んだピットを歩き回っていただければ幸いです。

1C++開発の方向性

  • 実験室開発

C ++は、工学部の学生の間で間違いなくNo.1の言語です。C++は、プロセス指向とオブジェクト指向の両方の機能を備えており、優れた実行速度と優れた大規模プロジェクト開発機能の両方を備えています。大学の研究所を支配することができます。

  • バックエンド開発

C ++を学んだ後、最初の選択肢はもちろん、バックグラウンド開発のポジションについて面接することです。

  • クライアント開発

強固なプログラミング基盤とコンピューター理論基盤が必要であり、Windows / C ++のコンパイルとリンクのメカニズム、QTクライアント開発テクノロジシステム、Windowsメッセージメカニズムおよびその他のテクノロジにも精通している場合があります。

  • オーディオおよびビデオ開発/マルチメディア開発

大きなプラットフォームは短いビデオを作成しており、さまざまなライブブロードキャストモードにも常にアクセスしています。このトレンドの中で、オーディオビデオ/マルチメディアの方向性に対する開発需要はますます広がっています。この方向性は、オーディオやビデオの特殊効果などのライブ放送プラットフォームなどのプレーヤーなど、特定のシナリオに傾いています。

  • ゲーム開発 

C ++の基本的な構文を習得した後でも、ゲームの開発は依然として良い選択です。現在、産業レベルの3DゲームエンジンはCまたはC++で記述されています。個人的な能力で巨大なオンラインゲームを完成させることは不可能ですが、それでも、単純なものから始めて、いくつかの小さなゲームを書き、徐々に深くして、段階的に、そして最後に大きなゲーム開発チームに参加することは非常に良い選択です。対応する仕事は主にゲーム開発エンジニア、ゲームエンジンアーキテクトなどです。

  • 組み込み開発 

C / C ++にも非常に大きな雇用の方向性があり、それは埋め込まれています。組み込み自体はもう少しハードウェア指向かもしれませんが、あなたが今していることはソフトとハードの問題です。組み込み開発には、ネットワークプログラミング、並行プログラミングなども含まれます。一般的な説明は、埋め込まれたコードが従来のコンピューターではなく、他の小さなシステムで実行されるというものかもしれません。プログラミング能力に加えて、この方向性には基本的な回路理論のリテラシーも必要です。

  • 人工知能

CまたはC++言語には、人工知能、機械学習、その他の方向性も不可欠です。C ++言語はさまざまな方向に取り組むことができますが、C ++構文を習得するだけでは不十分であり、上記のC++言語のアプリケーション領域が基盤です。これらのフィールドに入力するにはさらに必要です。関連分野の知識と連絡先の詳細な体系的研究。実際の企業プロジェクトの内容。

2.C++文法の基礎

最初は導入段階です。基本的なループ、変数、および判断に加えて、少なくともこれらを習得する必要があります。

  • ポインタ、参照、配列、メモリ

  • 参照とポインタの違い

  • 仮想メカニズム:仮想関数、仮想関数テーブル、純粋仮想関数

  • new、delete、malloc、freeの違いなど、CとC++のいくつかの違い

  • いくつかのキーワードの役割:static、const、volatile、extern

  • 4つの型変換:static_cast、dynamic_cast、const_cast、reinterpret_cast

  • vector、deque、map、hashmapなどの一部のSTLコンテナの実装原則

  • クラスのカプセル化、構築と破棄、静的メンバー、オブジェクト管理。

  • クラス構築(パラメーターコンストラクター、パラメーターなしコンストラクター、コピーコンストラクター、デフォルトコンストラクター)およびデストラクタ。

  • オブジェクトの動的管理、フレンド関数、フレンドクラス、演算子のオーバーロード。

  • C++コンパイラオブジェクト管理モデルの分析。

  • 演算子のオーバーロード(単項演算子、二項演算子、演算子のオーバーロードの問題、プロジェクト開発における演算子のオーバーロード);

  • テンプレートの特殊化、部分的な特殊化、特性スキルの抽出

  • 継承、仮想継承、ダイヤモンド継承など。

  • ポリモーフィズム:動的バインディング、静的ポリモーフィズム

  • 書き直し、オーバーロード

  • スマートポインタの原理:参照カウント、RAII(リソース取得は初期化)のアイデア

  • スマートポインタの使用法:shared_ptr、weak_ptr、unique_ptrなど。

  • コンパイルとリンクのメカニズム、メモリレイアウト(メモリレイアウト)、オブジェクトモデル

  • 右辺値参照、完全転送など、C++11のいくつかの新機能。

C言語/C++の学習、C言語/ Cの紹介の共有、学習ルート、電子書籍の推奨とダウンロード、ビデオの推奨、小規模プロジェクト、乾物記事、筆記試験インタビュー、C言語/ C ++仕様、オープンソースプロジェクトにgithubを推奨する、など。

住所:

C言語/C++学習プラットフォームhttps://github.com/tangtangcoding/C-CppLearning

本の推奨事項

「C++Primer Chinese Edition」は、C++言語の初心者向けのとてもフレンドリーな自習用教科書です。著者は、C言語の基本的な概念と注意が必要なプログラミングの詳細を明確に説明し、豊富なルーチンと演習を持っています。それを注意深く読んだ後、C言語を始めるという目標を達成できると思います。

ウォールクラックが推奨する「高品質プログラミングガイド」、この本は読むのがとても楽しいです、本にはいくつかのプログラミング仕様があります、それはプログラムを書く人々に良いです、それは良いコーディング習慣を養うことができ、統合を深めることができますいくつかの知識の。より実用的で、面接前の読書にも適しています。

「EssentialC++Chinese Edition」は、C ++プログラミングのクイックスタートと理解を強調した、小さいながらも非常に実用的なC++入門書です。この本は、ますます複雑になる一連のプログラミング問題と、それらを解決するために使用される言語機能に焦点を当てています。C ++の機能と構成だけでなく、それらの設計目的と理論的根拠についても学びます。

「より効果的なC++(中国語版)」では、55の原則に基づいて構成されており、それぞれがより優れたC ++コードを記述できる方法を紹介し、特別に設計された例を使用して詳細に説明しています。

「C++パフォーマンスを改善するためのプログラミング技術」、この本は、パフォーマンスの欠陥の20%が私たちの時間の80%を占めると信じています。そのため、私たちはエネルギーを最も価値のある場所に集中させます。この本では、一時オブジェクト、メモリ管理、継承、仮想関数、インライン化、参照カウント、およびSTLについて、C++の効率を向上させる可能性のあるすべての詳細について詳しく説明しています。あなたが関連分野の実践者であろうと、C ++プログラミング愛好家であろうと、プログラミングのボトルネックを打ち破り、自己啓発を大幅に改善することを熱望しているプログラミング愛好家であろうと、この本はきっとあなたに多くの利益をもたらします。

「欠陥からC/C ++を学ぶ」は、本質的にC /C++の間違った質問のセットです。本全体には、63の問題、タイトルの欠陥によって引き起こされたエラーが含まれています。また、ピットを回避するためのガイドでもあります。

「C++テンプレート中国語版」、現代のC++テンプレートを深く理解するための実用的な本。この本は、C ++テンプレートの信頼できる説明であるだけでなく、他の一般的なC++のアイデアの詳細な紹介も提供します。

「STLソースコードの分析」では、STLの基盤となる実装メカニズムの詳細な理解と、一般的なデータ構造およびC++メモリ管理の詳細な理解を提供します。

実際、「C ++ Standard Library(2nd Edition)」、「C ++ Concurrent Programming Practice」、「C ++ Programming Ideas(2巻合わせ)」などもあります。紹介された本はすべて購入しましたが、正直なところ、後者いくつかの本は、参考書として一般的に読まれています。

ビデオ

  1. 清華大学-ZhengLi-C++言語プログラミング(基本)

清華大学-ZhengLi-C++言語プログラミング

https://www.bilibili.com/video/BV1PA411b75a?p=92

  1. ホウジエ先生の8つのパート:

  • Hou JieC++標準11-14

  • HouJieSTLとジェネリックプログラミング

  • Hou JieC++メモリ管理

  • Hou JieC++オブジェクト指向の高度な開発

  • HouJieSTLとジェネリックプログラミング

  • HouJieのC++スタートアップが明らかに:C++プログラムの生涯と死後

  • Chen Shuoの3番目のセット、LinuxCC++ネットワークプログラミングの練習-ChenShuo 

Hou JieC++ビデオ全集およびネットワークプログラミングhttps://mp.weixin.qq.com/s/302poB-agGUSepqNlmi9sQ

  1. QTビデオチュートリアル:

QTビデオチュートリアル

https://www.bilibili.com/video/BV1jK4y1m7d4

データ構造とアルゴリズム

データ構造を体系的に学びたい場合は、「Dahua Data Structure」、「Algorithm(4th Edition)」、「Data StructureandAlgorithmAnalysis」を読むことをお勧めします。

データ構造に慣れていない場合は、「アルゴリズムの図解」と「私の最初のアルゴリズムの本」から始めることができます。

ビデオ

  1. HaoBinのデータ構造

比較的古いですが、より詳細でわかりやすく、初心者にもとてもフレンドリーです。

https://www.bilibili.com/video/BV1Ut411a7rN?from=search&seid=14411767501116137153

  1. データ構造-浙江大学

このコースは、ChenYueとHeQinmingが共同で録音したもので、ステーションbとMOOC.comの両方がより明確です。

https://www.icourse163.org/course/ZJU-93001?from=searchPage#/info

  1. データ構造とアルゴリズムの基礎

このコースは青島大学の王卓氏によって記録されたもので、大学院入試に非常に適しており、多くのトピックがあります。

https://www.bilibili.com/video/BV1nJ411V7bd?p=1

より実践的な

やる、やる、やる。重要なことを3回言います。

ハンズオンには、マスターベーションと「マルチペインティング」が含まれます

学び、描く。データ構造内のストレージ構造、特にツリー構造とグラフ構造の場合、ストレージ構造は確かに複雑であり、空間的な想像力によってのみ開示されることは避けられず、多くの「ピット」を回避できることがよくあります。自分で絵を描くことで、アルゴリズムを使った記事では、アニメーションもいくつか追加します。

データ構造をグラフ化して視覚化します。データ構造がどのように見えるかを直感的に理解できます。それを使用するのはどのようなものか、抽象的かつ具体的にどのように見えるのか。それが最も重要なことです。そして、それが単純なキュー、スタック、またはバランスの取れたツリーのいずれであっても、重要かつ効果的です。データ構造を描くと頭の中で想像できます。要するに、これらのデータ構造を直感的に理解するだけです。

いくつかのアルゴリズムを学ぶときは、描画を使用して理解を深めることもできます。コードを読みながら絵を描くことができるので、コードの実装ロジックをより迅速に明らかにすることができます。

「マルチペインティング」によるストレージ構造と実装ロジックの理解に基づいて、初心者も実装コードを書くために「マルチコード」する必要があります。特定のストレージ構造またはアルゴリズムでは、3つ以上の独立した実装プロセスなしで統合を実現することは困難です。

さらに、leetcodeとNiuke.comでさらに質問を書くことができます。

コンピュータネットワーク

TCP/IPの分野で聖書と呼ばれています。著者のW.リチャードスティーブンスは、ユーザー(プログラマー)の観点から、TCPプロトコルを説明するためのツールとしてtcpdumpを使用しています。これは素晴らしいことです。TCPプロトコルの設計者も、パッケージを送受信するための何百ものタイミング図を描くほど辛抱強く、細心の注意を払って説明するのは難しいと思います。

古典的な本、TCP/UDPの部分に焦点を当てます。

ビデオ

  1. コンピュータネットワークマイクロクラス

https://www.bilibili.com/video/BV1c4411d7jb?p=1

  1. Han Ligang Computer NetworkXieXiren第7版

https://www.bilibili.com/video/BV1gV411h7r7?p=1

データベース

簡単なデータ検索の概要から始まり、結合、サブクエリ、正規表現、全文ベースの検索、ストアドプロシージャ、カーソル、トリガー、テーブル制約などの使用を含む、より複雑なコンテンツに進む入門書。

高度な本、mysqlの分野の古典。データベース管理者(dba)が読むのに適しているだけでなく、開発者が学ぶのにも適しています。あなたがデータベースの初心者であろうと専門家であろうと、私はあなたがこの本から何かを得ることができると信じています。

昇華ブックでは、InnoDBストレージエンジン内の各機能モジュールの実装原理について詳しく説明しています。これは、InnoDBのソースコードを読んで理解するための重要なガイドとして重要です。高性能で高可用性のMySQLデータベースシステムの構築と管理を検討しているすべての開発者とDBAをお読みください。

その他の本:

「データベースシステムの実装」、「Redisの設計と実装」。

ビデオ

MySQL_Basic +AdvancedChapter-データベース-sql-mysqltutorial_mysqlvideo_mysqlはじめに

https://www.bilibili.com/video/BV12b411K7Zu?from=search&seid=2779357081480449466

コンピュータ構成の原則

コンピュータシステムの深い理解(オリジナルブック第3版)

これは、すべてのCS学生が読むべき非常に詳細で方向性のある本であり、優れたプログラマーになるためには、コンピューターの基本原理を理解することに集中する必要があることを示しています。

その他の本:

コンピュータ構成の原理と設計。

ビデオ

  1. コンピュータ構成の原則清華大学の劉衛東が58年に全国の優れたコースについて講義します

https://www.bilibili.com/video/BV1c4411w7nd?p=1

  1. コンピュータ構成の原則(Liu Hongwei、ハルビン工業大学)135講義(フル)HD

https://www.bilibili.com/video/BV1t4411e7LH?p=1

オペレーティング・システム

この本は、オペレーティングシステムの分野で古典的であり、プロセス、スレッド、ストレージ管理、ファイルシステム、I / O、デッドロック、インターフェイスデザイン、マルチメディア、パフォーマンスのトレードオフ、およびオペレーティングシステムデザインの最新トレンドについて説明しています。最新のオペレーティングシステムの原則と実践だけでなく、Linuxオペレーティングシステム、Windows Vistaオペレーティングシステム、組み込みオペレーティングシステム、リアルタイムオペレーティングシステム、およびマルチメディアオペレーティングシステムにも特別な注意を払っています。したがって、それはインタビューで書かれたテストオペレーティングシステムのコレクションでもあります。

その他の本:

「オペレーティングシステムの真実を取り戻す」、「30日間の自作オペレーティングシステム」。

ビデオ

  1. オペレーティングシステム(ハルビン工業大学Li Zhijun氏)32回の講義(フル)超クリア

https://www.bilibili.com/video/BV1d4411v7u7?p=1

  1. 2020年南京大学「オペレーティングシステム:設計と実装」(Jiang Yanyan)

https://www.bilibili.com/video/BV1N741177F5?p=1

ネットワークプログラミング

私が最初に働き始めたとき、私の最初のプロジェクトはIoTバックエンドサーバーソフトウェアでした。インターネット上には、インスタントチャットソフトウェア用のバックエンドサーバー、オンラインゲームサーバー、金融取引システム、インターネット企業向けの分散型大容量ストレージなど、同様のネットワークサービスプログラムがあります。マイクロブログ。投稿などの内部ブロードキャスト通知。もちろん、組み込みシステムにはTCP/IPプロトコルスタックの移植や保守などもあります。

  • WINDOWSシステムで使用されるIOCPなど、一部のネットワークモデルに精通している。Linuxシステムで使用されるモデルをエポール、選択、およびポーリングします。

  • ソケットサーバー、RPCフレームワークなどのいくつかの一般的なライブラリに精通している

  • メモリ管理。新規/削除、メモリプール、オブジェクトプール処理をオーバーロードします。

  • メモリリークの検出、メモリアクセスの範囲外のアラート、およびメモリの断片化の回復。

  • 事前に割り当てられたプールは、スイッチングとスケジューリング、前処理されたスレッドプール、およびデータベース接続プールなどの接続プールを削減します。

  • マルチプロセスプログラミング、マルチスレッドプログラミング

  • 5つのIOモデル:同期、非同期、ブロッキング、非ブロッキング、信号駆動

  • プロセス間通信方法:セマフォ、パイプ、共有メモリ、ソケットなど。

  • スレッドセーフの問題、ロック処理、重要なリソース

  • 負荷分散の概念、データの準備、およびリアルタイムの計算。時間のかかるビジネスがある場合は、マイクロサービスと負荷分散を検討できます。

  • タイマー、ハートビート、デッドリンクの定期的なチェックなど。

ネットワークとオペレーティングシステムの基盤を持つことが重要です。

TCP/IPネットワークプログラミング

初心者が学ぶのに非常に適しており、ネットワークプログラミングの説明は明確でわかりやすく、初心者が始めるのに完全に適しており、ネットワークプログラミングのすべてのステップを記述します。

Unixの学習に必要で、重要な章を読み、参考書として使用できる古典的な本。

プロセス制御、スレッド制御、プロセス環境、プロセス通信は特にエキサイティングであり、ネットワーク部分は比較的浅いですが、それで十分です。この本全体は、Linuxのすべての側面をカバーしていると言え、非常に詳細ですらあります。

この本は、Linuxサーバープログラミングの分野における古典的な作品です。ネットワークプロトコルTCP / IPから、サーバープログラミングのコア要素、LinuxネットワークプログラミングAPI、高度なI / O機能、Linuxサーバープログラミング仕様、高性能サーバープログラミングフレームワーク、I / O多重化、信号、タイマー、高性能I / OフレームワークライブラリLibevent、マルチプロセスプログラミング、マルチスレッドプログラミング、プロセスプール、スレッドプールなど、記述の方法、スキル、アイデアを包括的に説明します。高性能Linuxサーバーアプリケーション。また、高性能サーバーの最適化と実際の戦闘の観点からのシステム監視ツールの使用について説明する2つの包括的な事例も含まれています。

この本はChenShuoの作品であり、適応性の高いマルチスレッドサーバーのプログラミングモデル、つまりスレッドごとに1つのループの説明に焦点を当てています。これは、Linuxでユーザーモードの高性能ネットワークプログラムを母国語で作成するための最も成熟したモードです。習得すると、さまざまな一般的なサーバー側ネットワークアプリケーションをスムーズに開発できます。この本は、このプログラミングモデルの使用法と注意事項を説明するための例としてmuduoネットワークライブラリを取り上げています。

ビデオとソースコード

ChenShuoの「LinuxCC++ネットワークプログラミングプラクティス」とオープンソースライブラリmuduoをお勧めします

https://github.com/tangtangcoding/CC- https://github.com/chenshuo/muduo

libeventは、イベントコールバックメカニズムに基づく軽量のネットワークプログラミングライブラリであり、Linux、Solaris、Windows、およびその他のシステムをサポートできます。C言語で記述されており、エントリレベルの読み取りに適しています。

https://github.com/libevent/libevent

Asioは、C++言語で記述されたboostのネットワークプログラミングライブラリです。それは、特定の言語の難しさを持っている多数のテンプレートの使用を含む、多くのブーストデータ構造と技術を使用します。

https://www.boost.org/doc/libs/1_75_0/doc/html/boost_asio.html

最後に

役に立ったら、いいね!

おすすめ

転載: blog.csdn.net/weixin_41055260/article/details/123633726