|
所在平台: Udemy |
课程主页: https://www.udemy.com/course/advance-programming-concepts/
课程评论:没有评论
课程名:Linux系统编程技术与概念 课程概述: 本课程意在帮助学员准备系统编程的技术面试,适合初级到中级开发者。本课程并不教授C/C++语言的基本知识,而是着重于编程技术及其在系统编程中的应用,尤其是如何在实际工作中编写更好管理、可扩展的代码。课程分为两个发布版本,第一部分关注库的构建与管理,第二部分涵盖Linux的内存管理概念。 课程大纲: ********************************************** 第一部分:构建和管理库 ********************************************** 1. 库的简介:库与应用程序的关系,示例(双向链表库)等。 2. 头文件:源文件与头文件的关系,文本替换方法等。 3. 预处理指令:解决头文件重复包含的问题。 4. 结构体与函数的正确使用:定义和使用的原则,递归依赖问题及其解决方案。 5. 静态和动态库的创建:如何创建和链接库。 6. 编译的四个阶段:C/C++编译的步骤,动态链接与静态链接的比较。 7. 使用Makefile构建:Makefile的功能和编写步骤。 8. 运行时可编程库:编写及注册回调函数的步骤。 9. 使用宏编写迭代器:迭代宏的用法及练习。 10. 粘合库和数据结构:粘合库的定义与介绍。 11. 位级编程:逻辑运算符及位操作的实现。 ********************************************** 第二部分:内存管理概念 ********************************************** 1. Linux进程的内存布局:虚拟内存基础及实例。 2. 堆栈内存管理:堆栈内存的基础和内容,常见问题等。 3. 堆内存管理:如何使用malloc及内存管理系统调用。 4. 分页概念:介绍分页及其在物理和虚拟地址中的应用。 5. 多级分页和需求分页。 6. 多线程进程的内存管理。 为什么选择本课程? 1. 本课程适合具有中等编程基础的学员,若您是刚入门者则不适合。 2. 本课程不依赖任何第三方库,所有逻辑需从头实现。 警告:课程有系统生成的字幕,可能不够准确,建议根据需要关闭。 总结: 本课程为想要在C/C++及系统编程领域提升技能的开发者提供了深入的技术知识,帮助学员在竞争激烈的技术面试中脱颖而出。通过实用的案例和完整的库构建与内存管理知识,学员能够更好地组织和编写代码。
There are already innumerable courses/tutorials on the internet/Udemy which teach almost every aspect of C programming language. All those courses sound the same, talk the same and deliver more or less the same knowledge. How is this course different from others? The intention of this course is to make you ready for System programming Technical interviews, interview level - from Beginner to Intermediate. This course is for (future) Developers, not for testers or System Administrators.I choose to create this course to fill the gap between novice/beginner and intermediate/Advanced Programmers. This course assumes that you are at least above average in programming (in any programming language, but preferable in C/C++) - know memory allocations, all kinds of loops, function calls, pointers etc. In this course, I won't teach C/C++ (there are already many courses on it online) but would teach programming techniques and low-level details regarding how C program works behind the scenes - All topics are very important from an interview point of view. My Target is to grow this course into Linux/C Bible.Yet, I always feel, you need to outsmart your fellow colleagues in this era of stiff competition, and therefore, I tried this attempt to present you the wisdom and knowledge which is of utmost importance for a programmer. I have seen though students could write good C/C++ programs, yet they lack the clarity on how one should write better organized, Manageable, extensible, and programmable codes in the form of libraries. For example, Students are too good at competitive programming, yet do not know how to write a simple Makefile, the reason being, Academics do not teach and students do not care to learn. In this course, I will cover the topics related to creating Linux System Libraries (release 1) with Advanced language-agnostic Programming Concepts (release 2) which can be well applied if you happen to become a programmer in other languages tomorrow. The Concepts like MultiThreading, Thread-Synchronization, Socket Programming, IPCs, etc demand a separate course on each topic altogether. Currently, I have a course on IPC, pls check it out. These topics are out of scope for this course. The Course shall be delivered into two Releases: Release 1 Building and Managing a Library: This covers the basics regarding how one should create and organize his code as a Library. Release 2 Memory Management Concepts: This covers Advance concepts on Linux Memory Management specifically. Please check the Table of Contents for more info.Why you should *NOT* do this course?1. Please Excuse this course if you are the ultimate beginner in C programming!!2. There is no point of doing this course if you don't like hitting the keyboard, and are lazy enough to watch lecture VDOs only3. If you want everything cooked and served on your plate. Course Pre-requisite:Above Beginners Level in C/C++ programmingGood to have basic OS knowledgeZeal to excel and CodeNo Third-Party librariesWhatever logic you implement, you need to implement it from scratch. Like all my other courses, this course does not suggest taking the help of any third-party library to get the jobs done. The use of external libraries completely defeats the purpose of the course. Warning: This course has auto system-generated subtitles which may not be perfect. Please disable subtitles at your convenience.Curriculum:**********************************************Release 1 Building and Managing a Library**********************************************Section 1: Introduction to Libraries What is LibraryRelationship between Library and ApplicationEx: Doubly linked list as a LibraryQuick Compilation StepsSummarySection 2: Header FilesRelationship between Source and header filesText Substitution MethodText Substitution Method - Example and DemoSection 3: Preprocessing DirectivesProblem of Duplicate inclusion of Hdr filesPre-processing DirectivesSolution to Duplicate inclusion of Hdr filesSection 4: Correct way of Using Structures and FunctionsStructures - Define and Use thumb RuleFunctions - Declare and Use thumb ruleThe problem of Recursive DependencyA solution to Recursive DependencySection 5: Creation of Static and Dynamic LibrariesResuming with Doubly Linked List LibraryQuick Creation of Static and Dynamic LibrariesLinking with Static LibraryLinking with Dynamic LibrarySection 7: Understanding four stages of Compilation Four stages of C/C++ CompilationHow Dynamic Library works ?Dynamic Linking: Linking with Dynamic LibraryComparison - Static Vs Dynamic LinkingSection 8: Building using a Makefile What are Makefiles and why do we need itFunctions of MakefileMakefile Dependency treeSteps of Writing a MakefileAssignment on MakefileSection 9: Run-time Programmable libraries What are Programmable Libraries?Steps to Program the librariesRegistering of the callbacks with Librarieskey_match callbackcomparison_fn callbackDelegation of Application-specific operations to LibrariesSection 10: Writing Iterators using MacrosWhat are Iterative Macros ?Why we need Iterative Macros ?How to Write Iterative Macros - For Trees and Linked ListsExercisesSection 11: Glue Based Libraries and Data structuresWhat are the Glue Based Libraries?Introducing Glthreads - A Glued LinkedListGlthreads Vs Traditional Linked ListStructure field offsetGLThread Operations Code WalkGLThread Benefits Section 12: Bit Level ProgrammingLogical OperatorsImplementing BIT manipulating C macrosUsing Enums as BitsBit Pattern MatchingBitMaps************************************************Release 2 Memory Management Concepts************************************************Section 13: Memory Layout of Linux ProcessVirtual Memory Basics Memory Layout of Linux Process Example: Memory Layout of Linux Process Exercise on size command Section 14: Stack Memory ManagementStack Memory Basics and Contents Stack-Overflow and Prevention Stack Memory Corruption Common Cpu RegistersProcedure Call Mechanism - Step by StepPurpose of Base Pointer register (ebp) Procedure Return Mechanism - Step by StepLab session Section 15: Heap Memory ManagementIntroduction and GoalsHow Malloc Works Top of Heap Memory region - break pointerHeap Memory Mgmt Sys Calls - brk and sbrkMeta and Data BlocksHow free() worksBlock SplittingBlock MergingMemory Illness - Problem of FragmentationSection 16: Concept of PagingIntroduction to PagingByte Addressable Memory32 bit and 64 bit Machine ArchitectureAddress Bus and Data bus Physical Vs Virtual AddressPhysical Memory Frames Virtual Address CompositionPage TablePaging In ActionShared Physical MemorySection 17: Multilevel PagingSection 18: Demand PagingSection 19: Memory Management for Multi-threaded ProcessThe intention of this course is to make you ready for System programming Technical interviews from beginners to upto 8-9 yrs of experience.Q. What are the frequently asked questions by interviewers in a technical round when someone writes C/C++/System Programming language on their resume?Answer: If i am interviewer, what questions i would ask depends on his no of years of experience in C.1-3 yrs of experience - I would have asked:Double pointersdesign a Macro to return the size of the structureTwo Dimensional Arrays, passing and returning arrays from a fnDifferent stages of C program compilationhow fork() worksWhat are various ways to debug memory corruptions.various IPCsHeap and Stack memory-based Question4-6 yrs of experience - I would have asked:How memory is allocated by the OSInternal and external fragmentation, what can be done to avoid itSystem calls, strace()Trade-of of one IPC over othervarious ways to communicate with kernel and comparisonData (De)Serialization in CRPC in Ccallbacks advanced applicationtypedef Vs #defineGeneric programming in C using macrosThread SynchronizationHeap and Stack memory-based Question7+ yrs of experience - I would have askedHave you designed any system module to solve any problemDesign thread library 0 what functionalities would you incorporate in and how?What are Dos and Dont's for writing a robust and flexible libraryHow to write generic code in CVarious ways to implement timers in C, and comparison of approachesHow do Interrupts work ?IPCs and comparisonHow would you convert a C code to C++ and vice versaHow to write a tool to detect memory leaks Or garbage collectionDesign your own memory allocation tool. Why would you write your own memory allocation scheme?When to go for Multi-process design over Multi-threaded design and vice versaHow ValGrind tool worksIn production code, would you favor recursive but simple logic, Or Nonrecursive but complex logic, and why?If you analyze the pattern,Candidate with 1-3 yrs of experience, I would choose to ask more of a direct and straightforward Questions.Candidate with 4-6 yrs of experience, I would choose to ask more advanced technical C Question plus some comparison of approaches based QuestionsCandidate with 7+ yrs of experience, I would choose to ask more of a design and Analysis based Question.Note that, since the Question pertains to C and System Programming, so I have not mentioned Data structures and Algorithms.