در حال حاضر دورهها/آموزشهای بیشماری در اینترنت/Udemy وجود دارد که تقریباً همه جنبههای زبان برنامهنویسی C را آموزش میدهند. همه آن دوره ها یکسان هستند، یکسان صحبت می کنند و کم و بیش همان دانش را ارائه می دهند. این دوره چه تفاوتی با بقیه دارد؟
هدف از این دوره این است که شما را برای مصاحبه های فنی برنامه نویسی سیستم، در سطح مصاحبه - از مبتدی تا متوسط آماده کند. این دوره برای توسعه دهندگان (آینده) است، نه برای آزمایش کنندگان یا مدیران سیستم.
من این دوره را برای پر کردن شکاف بین برنامه نویسان مبتدی/مبتدی و متوسط/پیشرفته انتخاب می کنم. این دوره فرض می کند که شما حداقل در برنامه نویسی بالاتر از حد متوسط هستید (در هر زبان برنامه نویسی، اما در C/C++ ترجیح داده می شود) - تخصیص حافظه، انواع حلقه ها، فراخوانی توابع، اشاره گرها و غیره را بدانید. در این دوره، من آموزش نمی دهم. C/C++ (در حال حاضر دوره های زیادی در مورد آن به صورت آنلاین وجود دارد) اما تکنیک های برنامه نویسی و جزئیات سطح پایین در مورد نحوه عملکرد برنامه C در پشت صحنه را آموزش می دهد - همه موضوعات از نقطه نظر مصاحبه بسیار مهم هستند. هدف من این است که این دوره را به Linux/C Bible تبدیل کنم.
با این حال، من همیشه احساس میکنم، شما باید در این دوران رقابت سخت از همکاران خود پیشی بگیرید، و بنابراین، من سعی کردم تا خرد و دانشی را که برای یک برنامهنویس بسیار مهم است به شما ارائه دهم. من دیدهام که اگرچه دانشآموزان میتوانند برنامههای C/C++ خوبی بنویسند، اما در مورد نحوه نوشتن کدهای سازمانیافته، قابل مدیریت، توسعهپذیر و قابل برنامهریزی بهتر در قالب کتابخانهها، شفافیت ندارند. برای مثال، دانشآموزان در برنامهنویسی رقابتی بسیار خوب هستند، اما نمیدانند چگونه یک Makefile ساده بنویسند، دلیل آن این است که دانشگاهیان تدریس نمیکنند و دانشآموزان برای یادگیری اهمیتی ندارند.
در این دوره، من موضوعات مربوط به ایجاد کتابخانه های سیستم لینوکس (نسخه 1) را با مفاهیم برنامه نویسی پیشرفته زبان-آگنوستیک (نسخه 2) پوشش خواهم داد که اگر فردا برنامه نویس زبان های دیگر شوید، می تواند به خوبی اعمال شود.
مفاهیمی مانند MultiThreading، Thread-Synchronization، Socket Programming، IPCها، و غیره نیاز به یک دوره جداگانه برای هر موضوع دارد. در حال حاضر، من یک دوره در مورد IPC دارم، لطفاً آن را بررسی کنید. این موضوعات خارج از محدوده این دوره هستند.
دوره باید در دو نسخه ارائه شود:
انتشار 1 ساخت و مدیریت کتابخانه : این بخش اصول اولیه را در مورد نحوه ایجاد و سازماندهی کد خود به عنوان کتابخانه پوشش می دهد.
Release 2 Memory Management Concepts: این به طور خاص مفاهیم پیشرفته مدیریت حافظه لینوکس را پوشش می دهد. لطفاً فهرست مطالب را برای اطلاعات بیشتر بررسی کنید.
چرا نباید *نباید* این دوره را انجام دهید؟
1. لطفاً اگر مبتدی نهایی در برنامه نویسی C هستید، این دوره را ببخشید!!
2. اگر علاقه ای به زدن صفحه کلید ندارید و به اندازه کافی تنبل هستید که فقط VDOهای سخنرانی را تماشا کنید، انجام این دوره بی فایده است
3. اگر می خواهید همه چیز پخته و در بشقاب شما سرو شود.
پیش نیاز دوره:
بالاتر از سطح مبتدی در برنامه نویسی C/C++
داشتن دانش اولیه سیستم عامل خوب است
علت به اکسل و کدگذاری
هیچ کتابخانه شخص ثالثی وجود ندارد
هر منطقی که پیاده سازی می کنید، باید آن را از ابتدا پیاده سازی کنید. مانند سایر دورههای من، این دوره برای انجام کارها کمک از هیچ کتابخانه شخص ثالثی را پیشنهاد نمیکند. استفاده از کتابخانه های خارجی به طور کامل هدف دوره را شکست می دهد.
اخطار: این دوره دارای زیرنویسهای خودکار تولید شده توسط سیستم است که ممکن است کامل نباشند. لطفاً زیرنویسها را در صورت تمایل غیرفعال کنید.
برنامه درسی:
************************************************
انتشار 1 ساخت و مدیریت کتابخانه
************************************************
بخش 1: مقدمه ای بر کتابخانه ها
کتابخانه چیست
رابطه بین کتابخانه و برنامه
مثلا: فهرست پیوندی دوگانه به عنوان کتابخانه
مراحل تدوین سریع
خلاصه
بخش 2: فایل های سرصفحه
رابطه بین فایل های منبع و سرصفحه
روش جایگزینی متن
روش جایگزینی متن - مثال و نسخه نمایشی
بخش 3: دستورالعمل های پیش پردازش
مشکل درج تکراری فایلهای Hdr
دستورالعمل های پیش پردازش
راه حل برای درج تکراری فایل های Hdr
بخش 4: روش صحیح استفاده از ساختارها و توابع
ساختارها - قانون شست را تعریف و استفاده کنید
توابع - اعلام و استفاده از قانون شست
مشکل وابستگی بازگشتی
راه حلی برای وابستگی بازگشتی
بخش 5: ایجاد کتابخانه های ایستا و پویا
ازسرگیری با کتابخانه فهرست پیوندی دوگانه
ایجاد سریع کتابخانه های ایستا و پویا
پیوند با کتابخانه استاتیک
پیوند با کتابخانه پویا
بخش 7: درک چهار مرحله از کامپایل
چهار مرحله از C/C++ Compilation
کتابخانه پویا چگونه کار می کند؟
پیوند پویا: پیوند با کتابخانه پویا
مقایسه - پیوند استاتیک در مقابل پیوند پویا
بخش 8: ساخت با استفاده از Makefile
Makefiles چیست و چرا به آن نیاز داریم
توابع Makefile
درخت وابستگی Makefile
مراحل نوشتن یک Makefile
تکالیف در Makefile
بخش 9: کتابخانه های قابل برنامه ریزی زمان اجرا
کتابخانه های قابل برنامه ریزی چیست؟
مراحل برنامه نویسی کتابخانه ها
ثبت تماسها با کتابخانهها
کلید_بازخوانی
comparison_fn پاسخ به تماس
واگذاری عملیات ویژه برنامه به کتابخانه ها
بخش 10: نوشتن تکرار کننده ها با استفاده از ماکرو
ماکروهای تکراری چیست؟
چرا به ماکروهای تکراری نیاز داریم؟
نحوه نوشتن ماکروهای تکراری - برای درختان و فهرستهای پیوندی
تمرینات
بخش 11: کتابخانه های مبتنی بر چسب و ساختارهای داده
کتابخانههای مبتنی بر چسب چیست؟
معرفی Glthreads - A Glued LinkedList
Glthreads در مقابل فهرست پیوندی سنتی
تغییر فیلد ساختار
عملیات GLThread
Code Walk
مزایای GLThread
بخش 12: برنامه نویسی سطح بیت
اپراتورهای منطقی
اجرای BIT دستکاری ماکروهای C
استفاده از Enums به عنوان بیت
تطابق الگوی بیت
BitMaps
******************************************** *
2 مفهوم مدیریت حافظه را منتشر کنید
******************************************** *
بخش 13: چیدمان حافظه فرآیند لینوکس
مبانی حافظه مجازی
طرح بندی حافظه فرآیند لینوکس
مثال: چیدمان حافظه فرآیند لینوکس
دستور اندازه را تمرین کنید
بخش 14: مدیریت حافظه پشته
مبانی و محتویات حافظه را روی هم قرار دهید
سرریز پشته و پیشگیری
خرابی پشته حافظه
رجیسترهای رایج Cpu
مکانیسم تماس رویه - گام به گام
هدف ثبت نشانگر پایه (ebp)
مکانیسم بازگشت روش - گام به گام
جلسه آزمایشگاه
بخش 15: مدیریت حافظه Heap
مقدمه و اهداف
چگونه Malloc کار می کند
بالای منطقه حافظه Heap - نشانگر شکست
حافظه Heap Mgmt Sys تماس - brk و sbrk
بلوک های متا و داده
نحوه کارکرد free()
تفکیک بلوک
مسدود کردن ادغام
بیماری حافظه - مشکل تکه تکه شدن
بخش 16: مفهوم صفحه بندی
مقدمه ای بر صفحه بندی
حافظه آدرس پذیر بایت
معماری ماشین 32 بیتی و 64 بیتی
اتوبوس آدرس و گذرگاه داده
آدرس فیزیکی در مقابل مجازی
قابهای حافظه فیزیکی
ترکیب آدرس مجازی
جدول صفحه
Paging In Action
حافظه فیزیکی مشترک
بخش 17: صفحه بندی چند سطحی
بخش 18: صفحه بندی تقاضا
بخش 19: مدیریت حافظه برای فرآیند چند رشته ای
هدف از این دوره این است که شما را برای مصاحبه های فنی برنامه نویسی سیستم از مبتدی تا 8 تا 9 سال تجربه آماده کند.
س. وقتی کسی زبان برنامه نویسی C/C++/System را در رزومه خود می نویسد، سؤالات متداول مصاحبه کنندگان در یک دور فنی چیست؟
پاسخ: اگر من مصاحبه کننده هستم، چه سوالاتی می پرسم بستگی به سال ها تجربه او در C دارد.
1-3 سال تجربه - من می پرسیدم:
نشانگرهای دوگانه
یک ماکرو برای برگرداندن اندازه ساختار طراحی کنید
آرایه های دو بعدی، ارسال و برگرداندن آرایه ها از یک fn
مراحل مختلف تدوین برنامه C
fork() چگونه کار می کند
روش های مختلف برای رفع اشکال خرابی حافظه چیست.
IPC های مختلف
سوال مبتنی بر حافظه پشته و پشته
4-6 سال تجربه - من می پرسیدم:
نحوه تخصیص حافظه توسط سیستم عامل
تجزیه داخلی و خارجی، برای جلوگیری از آن چه کاری می توان انجام داد
تماسهای سیستمی، strace()
تجارت یک IPC بر دیگری
روش های مختلف برای برقراری ارتباط با هسته و مقایسه
سریال سازی داده ها در C
RPC در C
برنامه پیشرفته پاسخ به تماس
typedef در مقابل #define
برنامه نویسی عمومی در C با استفاده از ماکروها
همگام سازی موضوع
سوال مبتنی بر حافظه پشته و پشته
بیش از 7 سال تجربه - من می پرسیدم
آیا ماژول سیستمی برای حل هر مشکلی طراحی کرده اید
کتابخانه رشته طراحی 0 چه ویژگی هایی را در آن گنجانده اید و چگونه؟
کارهای باید و نباید برای نوشتن یک کتابخانه قوی و منعطف چیست
نحوه نوشتن کد عمومی در C
روشهای مختلف برای پیاده سازی تایمرها در C و مقایسه رویکردها
وقفه ها چگونه کار می کنند؟
IPC و مقایسه
چگونه یک کد C را به C++ و بالعکس تبدیل می کنید
نحوه نوشتن ابزاری برای تشخیص نشت حافظه یا جمع آوری زباله
ابزار تخصیص حافظه خود را طراحی کنید. چرا می خواهید طرح تخصیص حافظه خود را بنویسید؟
چه زمانی باید به طراحی چند فرآیندی روی طراحی چند رشته ای و بالعکس
چگونه ابزار ValGrind کار می کند
در کد تولید، آیا منطق بازگشتی اما ساده را ترجیح می دهید، یا منطق غیر بازگشتی اما پیچیده، و چرا؟
اگر الگو را تجزیه و تحلیل کنید،
کاندیدایی با 1 تا 3 سال تجربه، من ترجیح میدهم بیشتر سؤالات مستقیم و سرراست بپرسم.
نامزد با 4 تا 6 سال تجربه، من ترجیح می دهم سوال فنی پیشرفته تر C را بپرسم به اضافه مقداری مقایسه سوالات مبتنی بر رویکردها
نامزدی با بیش از 7 سال تجربه، من ترجیح می دهم بیشتر از یک سؤال مبتنی بر طراحی و تجزیه و تحلیل بپرسم.
توجه داشته باشید که از آنجایی که سوال مربوط به C و برنامه نویسی سیستم است، بنابراین من به ساختارهای داده و الگوریتم ها اشاره نکرده ام.
نمایش نظرات