| <html lang="fa" dir="rtl"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>جزوه جامع و حرفهای مهندسی اینترنت - نسخه کامل و نهایی</title> | |
| <style> | |
| @page { size: A4; margin: 25mm 20mm; } | |
| body { font-family: 'B Nazanin', 'Tahoma', sans-serif; font-size: 22px; line-height: 2.5; color: #333; background-color: #fff; text-align: justify; } | |
| h1 { font-size: 48px; color: #1a5276; text-align: center; margin-bottom: 50px; page-break-before: always; border-bottom: 3px solid #1a5276; padding-bottom: 20px; } | |
| h2 { font-size: 36px; color: #2980b9; margin-top: 60px; margin-bottom: 30px; border-right: 5px solid #e74c3c; padding-right: 15px; page-break-before: always; } | |
| h3 { font-size: 28px; color: #c0392b; margin-top: 40px; } | |
| p { margin-bottom: 25px; } | |
| ul, ol { margin-bottom: 30px; padding-right: 40px; } | |
| li { margin-bottom: 15px; } | |
| .cover-page { display: flex; flex-direction: column; justify-content: center; align-items: center; height: 100vh; text-align: center; page-break-after: always; } | |
| .cover-title { font-size: 64px; font-weight: bold; color: #2c3e50; margin-bottom: 20px; } | |
| .cover-subtitle { font-size: 32px; color: #7f8c8d; } | |
| .question-box { background-color: #f8f9fa; border: 2px solid #bdc3c7; padding: 30px; border-radius: 10px; margin-top: 50px; page-break-inside: avoid; } | |
| .question-title { font-weight: bold; color: #e67e22; font-size: 26px; } | |
| .answer { color: #27ae60; font-weight: bold; margin-top: 20px; } | |
| .code-block { background-color: #2c3e50; color: #ecf0f1; padding: 20px; border-radius: 8px; font-family: 'Courier New', Courier, monospace; direction: ltr; text-align: left; font-size: 18px; line-height: 1.5; page-break-inside: avoid; } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="cover-page"> | |
| <div class="cover-title">جزوه جامع و حرفهای مهندسی اینترنت</div> | |
| <div class="cover-subtitle">نسخه فوقالعاده تفصیلی همراه با ۱۶ فصل کامل و نمونه سوالات امتحانی</div> | |
| </div> | |
| <h1>فهرست مطالب</h1> | |
| <ol style="font-size: 26px; line-height: 3;"> | |
| <li>مقدمهای بر مهندسی اینترنت و معماریها</li> | |
| <li>برنامهنویسی سازمانی در جاوا</li> | |
| <li>سرورهای کاربردی و I/O</li> | |
| <li>طراحی وبسایتهای واکنشگرا</li> | |
| <li>معماری MVC و سرولتها</li> | |
| <li>برنامههای تکصفحهای (SPA)</li> | |
| <li>اصول طراحی وبسرویسهای RESTful</li> | |
| <li>کالبدشکافی زبان جاوااسکریپت</li> | |
| <li>فریمورک React</li> | |
| <li>معماریهای لایهای سازمانی</li> | |
| <li>ارتباطات پایگاه داده (JDBC)</li> | |
| <li>مدیریت پایداری دادهها (JPA)</li> | |
| <li>پایگاههای داده NoSQL</li> | |
| <li>مدیریت نشستها و احراز هویت</li> | |
| <li>امنیت پیشرفته در وب</li> | |
| <li>مجازیسازی نوین و کانتینرها</li> | |
| </ol> | |
| <h2>۱. مقدمهای بر مهندسی اینترنت و معماریها</h2> | |
| <p>معماری سیستمهای کامپیوتری مسیر طولانی را طی کرده است. در معماری Mainframe، پردازشها متمرکز بود. با Client-Server، پردازش بین دو گره تقسیم شد اما هزینه نگهداری (Maintenance) نرمافزارهای کلاینت بسیار بالا رفت. بنابراین، معماری برنامههای تحت وب (Web Applications) معرفی شد که در آن، کلاینت فقط از یک مرورگر ساده به عنوان Thin Client استفاده میکند. این کار هزینه استقرار (Deployment) را به صفر رساند و امنیت و سرعت بروزرسانی را به بالاترین سطح ارتقا داد.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۱:</div> | |
| <p>چرا با وجود قدرت بالای کامپیوترهای کلاینت امروزی، همچنان معماری Thin Client در برنامههای تحت وب محبوبتر است؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>دلیل اصلی، کاهش وحشتناک هزینههای نگهداری (Maintenance) و استقرار (Deployment) است. نیازی به نصب و آپدیت روی هزاران سیستم کلاینت نیست. سرور آپدیت میشود و همه کلاینتها فوراً نسخه جدید را دریافت میکنند. همچنین امنیت دادهها به دلیل عدم ذخیرهسازی سمت کاربر، بالاتر است.</p> | |
| </div> | |
| <h2>۲. برنامهنویسی سازمانی در جاوا (Maven, Git, JUnit)</h2> | |
| <p>توسعه سازمانی نیاز به ابزارهای مدرن دارد. Maven وابستگیها (Libraries) را مدیریت میکند. JUnit امکان تست واحد (Unit Test) را برای بررسی صحت عملکرد منطق تجاری سیستم در محیطی ایزوله فراهم میکند. در سرورهای وب که همزمان میزبان صدها کاربر هستند (محیط Multi-thread)، استفاده از کالکشنهای ناامن مثل <code>HashMap</code> فاجعهبار است و منجر به Race Condition میشود. به همین دلیل از <code>ConcurrentHashMap</code> استفاده میشود که به جای قفل کردن کل شیء، فقط بخش کوچکی از حافظه را قفل میکند و در نتیجه سرعت را به شدت بالا میبرد.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۲:</div> | |
| <p>مفهوم Thread-Safety چیست و چرا استفاده از ConcurrentHashMap در وبسرورها توصیه میشود؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>Thread-Safety یعنی جلوگیری از تداخل خواندن/نوشتن چند Thread به طور همزمان. در کانتینرهایی مثل Tomcat، هر درخواست یک نخ (Thread) جدید است. اگر هزاران نخ همزمان در <code>HashMap</code> بنویسند، دادهها خراب میشوند. <code>ConcurrentHashMap</code> با مکانیزم Segment-level Locking، بدون کاهش پرفورمنس، امنیت همزمانی را تضمین میکند.</p> | |
| </div> | |
| <h2>۳. سرورهای کاربردی و جریانهای ورودی/خروجی (I/O)</h2> | |
| <p>جاوا از الگوی طراحی دکوراتور (Decorator Pattern) در سیستم I/O خود بهره میبرد. به جای یک کلاس بزرگ همهکاره، کلاسهای کوچکی مانند <code>BufferedInputStream</code> داریم که به دور یک کلاس خام پیچیده میشوند تا قابلیت بافرینگ اضافه کنند. در زمینه ارتباطات، Socket Programming نقطه پایانی ارسال داده در شبکه است.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۳:</div> | |
| <p>الگوی Decorator در I/O جاوا چگونه کار میکند؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>این الگو اجازه میدهد قابلیتها (مثل بافرینگ یا فشردهسازی) به صورت لایهلایه به یک استریم پایه اضافه شوند. مثلا <code>new BufferedInputStream(new FileInputStream("data.txt"))</code>، بدون نیاز به تغییر در کلاس پایه، قابلیت کَش کردن را به خواندن فایل اضافه میکند که سرعت را صدها برابر میکند.</p> | |
| </div> | |
| <h2>۴. طراحی وبسایتهای واکنشگرا (HTML5, CSS3, RWD)</h2> | |
| <p>تگهای معنایی (Semantic) در HTML5 مانند <code><article></code> و <code><nav></code> برای سئو (SEO) و دسترسیپذیری بسیار مهم هستند. در گذشته طراحی واکنشگرا (Responsive) چالشبرانگیز بود، اما امروز با استفاده از Media Queries در CSS3 (مثلا `@media (max-width: 768px)`)، ظاهر سایت بر اساس عرض صفحه موبایل یا تبلت به صورت داینامیک تنظیم میشود.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۴:</div> | |
| <p>تفاوت طراحی Desktop-First و Mobile-First چیست و کدام بهینهتر است؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>در Mobile-First ابتدا استایلهای سبک مخصوص موبایل نوشته شده و سپس برای دسکتاپ گسترش مییابد. این روش بهینهتر است زیرا گوشیهای ضعیف مجبور به دانلود کدهای سنگین دسکتاپ و سپس مخفی کردن آنها نمیشوند. در نتیجه سرعت لود سایت (Performance) روی موبایل به شدت بالا میرود.</p> | |
| </div> | |
| <h2>۵. معماری MVC، سرولتها (Servlets) و JSP</h2> | |
| <p>سرولتها (Servlets) قلب جاوا در سمت سرور هستند و چرخه حیاتی شامل init (راهاندازی اولیه)، service (پاسخگویی به درخواستهای GET/POST) و destroy (پاکسازی منابع) دارند. از آنجایی که نوشتن کد HTML در جاوا سخت بود، JSP معرفی شد. فایلهای JSP در نهایت توسط سرور به کلاس Servlet ترجمه میشوند. در الگوی MVC، مدل (منطق)، ویو (رابط کاربری) و کنترلر (هماهنگکننده) کاملا جدا میشوند.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۵:</div> | |
| <p>در الگوی MVC نقش دقیق Controller چیست؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>کنترلر (معمولا یک سرولت) واسطی است که درخواستهای کاربر را دریافت کرده، آنها را اعتبارسنجی میکند، سپس متدهای Model را برای انجام پردازش (مانند ثبت در دیتابیس) صدا میزند و در نهایت خروجی را گرفته و کاربر را به View مناسب (صفحه JSP) هدایت میکند. این الگو باعث جلوگیری از کدنویسی اسپاگتی میشود.</p> | |
| </div> | |
| <h2>۶. برنامههای تکصفحهای (SPA) و تکنولوژیهای ناهمگام (AJAX)</h2> | |
| <p>در وب سنتی با هر کلیک کل صفحه رفرش میشد. SPA (Single Page Application) معماری جدیدی است که فقط یک بار فایل HTML لود میشود و پس از آن، تمام اطلاعات جدید از طریق AJAX و با فرمت سبک JSON در پسزمینه از سرور دریافت و با دستکاری DOM روی صفحه تزریق میشود. این روش تجربه کاربری مشابه دسکتاپ ایجاد میکند و بار ترافیکی شبکه را کاهش میدهد.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۶:</div> | |
| <p>در معماری SPA، نقش سرور چه تغییری نسبت به معماری مبتنی بر JSP پیدا میکند؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>در معماری سنتی (JSP)، سرور وظیفه Rendering و تولید صفحات نهایی HTML را دارد (Server-side rendering). اما در SPA، سرور دیگر حتی یک خط کد HTML هم تولید نمیکند، بلکه تنها نقش یک ارائهدهنده وبسرویس (API) را بازی میکند که صرفا دادههای خام را با فرمت JSON ارسال میکند و وظیفه تولید رابط کاربری کاملا به کلاینت (جاوااسکریپت) واگذار میشود.</p> | |
| </div> | |
| <h2>۷. اصول و قواعد طراحی وبسرویسهای RESTful</h2> | |
| <p>معماری REST استاندارد اصلی ارتباطات کلاینت-سرور مدرن است. در این معماری، وضعیت کلاینت روی سرور ذخیره نمیشود (Stateless) و از متدهای HTTP (مانند GET برای خواندن، POST برای ایجاد، PUT برای آپدیت کامل و DELETE برای حذف) به عنوان افعال عملیاتی روی "منابع" استفاده میشود. HATEOAS بالاترین سطح بلوغ REST است که در آن علاوه بر دادهها، لینکهای ناوبری نیز به کلاینت فرستاده میشود.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۷:</div> | |
| <p>چرا در RESTful API روی ویژگی Statelessness تاکید میشود؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>وضعیت بدونحالت (Stateless) یعنی سرور هیچ سابقهای (مثل Session) از کاربر در حافظه خود نگه ندارد. هر درخواست کلاینت باید کاملا مستقل باشد و حاوی تمام اطلاعات هویتسنجی (مثل توکن) باشد. این ویژگی مقیاسپذیری (Scalability) را به شدت بالا میبرد، زیرا درخواستهای کاربر میتوانند بین دهها سرور مختلف در یک کلاستر توزیع شوند بدون اینکه نیاز به همگامسازی Session بین سرورها باشد.</p> | |
| </div> | |
| <h2>۸. کالبدشکافی زبان جاوااسکریپت (DOM, BOM, Closures)</h2> | |
| <p>جاوااسکریپت زبان داینامیک و مبتنی بر رخداد مرورگر است. دو مفهوم گیجکننده آن Hoisting (بالاکشیدن تعاریف متغیر و توابع به بالای scope قبل از اجرا) و Closure (بستار) است. کلوژر به معنی قابلیت یک تابع درونی برای دسترسی به متغیرهای تابع بیرونی خود است، حتی پس از پایان اجرای تابع بیرونی. این ویژگی پایه و اساس شبیهسازی متغیرهای خصوصی (Private) در JS است.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۸:</div> | |
| <p>مفهوم Event Bubbling (حبابسازی رویداد) چیست و چگونه میتوان جلوی آن را گرفت؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>وقتی روی المانی کلیک میشود که داخل المانهای دیگر (تگهای والد) قرار دارد، رویداد کلیک ابتدا برای خود المان اجرا شده و سپس مانند حباب به سمت والدها بالا میرود و هندلرهای آنها را نیز اجرا میکند. با فراخوانی متد `event.stopPropagation()` در هندلر فرزند، میتوان از این حبابسازی جلوگیری کرد.</p> | |
| </div> | |
| <h2>۹. فریمورک React (Virtual DOM, Hooks, State)</h2> | |
| <p>ریکت (React) با استفاده از مفهوم Virtual DOM سرعت رندرینگ را بالا برد. ریکت در حافظه یک نسخه از DOM میسازد، تغییرات State را روی آن اعمال کرده، آن را با DOM قبلی مقایسه (Diffing) کرده و فقط تفاوتها را در مرورگر بروزرسانی میکند. هوکهای `useState` برای مدیریت متغیرهای داخلی و `useEffect` برای مدیریت اثرات جانبی (مثل فراخوانی سرور) استفاده میشوند.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۹:</div> | |
| <p>در هوک `useEffect` در ریکت، تغییر در آرایه وابستگی (پارامتر دوم) چه تاثیری در اجرا دارد؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>اگر آرایه پاس داده نشود، تابع در هر بار رندر اجرا میشود. اگر آرایه خالی `[]` پاس داده شود، تابع فقط یک بار هنگام لود اولیه (Mount) اجرا میشود (محل مناسب برای لود داده از سرور). اگر متغیری در آن باشد `[data]`، هر بار که آن متغیر خاص تغییر کند اجرا خواهد شد.</p> | |
| </div> | |
| <h2>۱۰. معماریهای لایهای سازمانی (Layered Architectures)</h2> | |
| <p>در برنامههای سازمانی، کدها بر اساس مسئولیت به لایههای مختلفی تقسیم میشوند (مانند Presentation، Business Logic و Data Access). این کار باعث میشود توسعه تیمی، تستپذیری و انعطاف سیستم بالا برود. انتقال داده بین این لایهها معمولا توسط اشیائی به نام DTO (Data Transfer Object) انجام میشود.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۱۰:</div> | |
| <p>معماری لازانیا (Lasagna Architecture) چیست و چه مشکلاتی ایجاد میکند؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>لازانیا یک الگوی ضدالگو (Anti-pattern) است که زمانی رخ میدهد که تعداد لایههای معماری بیش از حد نیاز منطقی زیاد شود (گاهی ۷ یا ۸ لایه). این پیچیدگی بیش از حد باعث میشود فهم کد، عیبیابی (Debug) و افزودن قابلیتهای جدید کند و طاقتفرسا شود و کارایی (Performance) سیستم به دلیل پاسکاری بیش از حد دادهها افت کند.</p> | |
| </div> | |
| <h2>۱۱. ارتباطات پایگاه داده در جاوا (JDBC)</h2> | |
| <p>در جاوا، JDBC رابطی برای ارتباط با دیتابیسهای رابطهای است. برای اجرای کوئریها از `Statement` و `PreparedStatement` استفاده میشود. بسیار مهم است که بدانید `Statement` در برابر حملات SQL Injection به شدت آسیبپذیر است. از تکنیک Connection Pooling برای استفاده مجدد از اتصالات فیزیکی پرهزینه به دیتابیس استفاده میشود تا سرعت بالا برود. همچنین مفهوم تراکنشها (Transactions) تضمین میکند که دستهای از عملیاتها یا با هم کامل انجام شوند یا در صورت بروز هر خطایی، کلا لغو (Rollback) شوند تا یکپارچگی دادهها حفظ شود.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۱۱:</div> | |
| <p>تفاوت Statement و PreparedStatement چیست و خطر SQL Injection چگونه برطرف میشود؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>در `Statement`، رشتههای کوئری مستقیما با مقادیر ورودی کاربر جمع (Concat) میشوند که اگر ورودی حاوی کدهای SQL باشد، دیتابیس آن را اجرا میکند (SQL Injection). اما در `PreparedStatement`، کوئری از پیش توسط دیتابیس کامپایل میشود و متغیرهای کاربر فقط به عنوان داده خام جایگزین علامت سوال (?) میشوند؛ در نتیجه دیتابیس هرگز دادهها را به عنوان کد اجرایی نمیخواند و امنیت به ۱۰۰٪ میرسد.</p> | |
| </div> | |
| <h2>۱۲. معماری JPA (Java Persistence API) و مدیریت پایداری دادهها</h2> | |
| <p>پارادایم دیتابیسهای رابطهای با پارادایم شیءگرا در جاوا همخوان نیست (Impedance Mismatch). فریمورکهای ORM (مثل Hibernate) این مشکل را حل میکنند. با انوتیشنهایی مثل `@Entity` یک کلاس به جدول تبدیل میشود. برای روابط بین جدولها از `@OneToMany` و امثال آن استفاده میشود. یکی از استراتژیهای مهم در استخراج دادهها، Eager (بارگذاری بلافاصله تمام دادههای مرتبط) و Lazy (بارگذاری دادهها فقط در زمان نیاز) است.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۱۲:</div> | |
| <p>در JPA، چه زمانی از استراتژی بارگذاری Lazy (تنبل) و چه زمانی از Eager (مشتاق) استفاده میشود؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>زمانی که دو جدول رابطه قوی دارند اما همیشه به اطلاعات فرزندان نیاز نیست (مثل دپارتمانی با ۵۰۰۰ کارمند)، استفاده از Eager باعث میشود یک کوئری سنگین اجرا شده و حافظه رم پر شود. در این حالت از Lazy استفاده میکنیم تا کارمندان فقط در صورت فراخوانی متد `getEmployees` بارگذاری شوند. اما برای روابط سبک یک-به-یک (مثلا کاربر و پروفایل)، Eager مناسبتر است.</p> | |
| </div> | |
| <h2>۱۳. پایگاههای داده NoSQL و تئوری CAP</h2> | |
| <p>دیتابیسهای سنتی برای مقیاسپذیری عمودی طراحی شدهاند. وقتی دادهها به مرز Big Data میرسند، نیاز به مقیاسپذیری افقی روی صدها سرور داریم، که NoSQL برای آن اختراع شد. بر اساس قضیه CAP، در یک سیستم توزیعشده نمیتوان همزمان ۳ ویژگی ثبات (Consistency)، در دسترس بودن (Availability) و تحمل قطعی (Partition Tolerance) را داشت. NoSQL معمولا Consistency را فدای Availability میکند (ثبات نهایی یا Eventual Consistency).</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۱۳:</div> | |
| <p>قضیه CAP چیست و سیستمهای NoSQL چگونه بین اصول آن مصالحه (Trade-off) میکنند؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>قضیه CAP بیان میکند که یک دیتابیس توزیعشده نمیتواند همزمان C (ثبات)، A (در دسترس بودن) و P (مقاومت در برابر قطعی شبکه) را داشته باشد. از آنجا که در شبکههای واقعی P همیشه ممکن است رخ دهد، دیتابیسها باید بین C و A یکی را انتخاب کنند. دیتابیسهای رابطهای سنتی روی C تمرکز دارند اما دیتابیسهای NoSQL مانند کاساندرا روی A (در دسترس بودن مداوم) تمرکز میکنند و تضمین میکنند دادهها بالاخره (نه بلافاصله) بین همه سرورها یکسان خواهد شد.</p> | |
| </div> | |
| <h2>۱۴. مدیریت نشستها و احراز هویت بدون وضعیت (Sessions & JWT)</h2> | |
| <p>از آنجا که HTTP فراموشکار (Stateless) است، در گذشته سرورها Session کاربر را در مموری خود نگه میداشتند که مانع از توزیعشدگی سیستم روی چند سرور میشد. توکن وب JSON (یا JWT) راهحل مدرن است. در JWT تمام اطلاعات کاربر (شامل سطح دسترسی) درون یک رشته متنی رمزگذاری و توسط سرور امضا میشود و کلاینت آن را ذخیره میکند. سرور با دیدن امضا به توکن اعتماد میکند و دیگر نیازی به نگهداری Session در سمت سرور یا دیتابیس نیست.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۱۴:</div> | |
| <p>استفاده از JWT در معماریهای مبتنی بر میکروسرویس چه مزیتی نسبت به Session سنتی دارد؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>در Session سنتی، تمام سرورهای یک کلاستر باید وضعیت Session را از طریق یک دیتابیس متمرکز (مثل Redis) با هم هماهنگ کنند که سربار شبکه بالایی دارد. اما توکن JWT دارای ماهیت Self-contained (خودبسنده) است؛ یعنی هر سرویسدهندهای که کلید امضای سرور اصلی را داشته باشد، میتواند بدون نیاز به ارتباط با دیتابیس مرکزی یا سایر سرورها، اصالت توکن و دسترسی کاربر را در لحظه و روی خود سیستم تایید کند که سرعت و مقیاسپذیری را بینهایت میکند.</p> | |
| </div> | |
| <h2>۱۵. امنیت پیشرفته در وب (Cryptography, SSL/TLS)</h2> | |
| <p>رمزنگاریها به دو دسته متقارن (یک کلید برای باز و بسته کردن) و نامتقارن (یک کلید عمومی برای بستن و یک کلید خصوصی برای باز کردن) تقسیم میشوند. نامتقارن بسیار امن اما کند است. پروتکل HTTPS از روش ترکیبی استفاده میکند: در ابتدای اتصال، مرورگر و سرور با روش نامتقارن یک "کلید متقارن" را امن به هم منتقل میکنند و سپس تمام اطلاعات با آن کلید سریع متقارن رمزگذاری میشود. همچنین پسوردها با روش Hashing یکطرفه به اضافه Salt در دیتابیس ذخیره میشوند.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۱۵:</div> | |
| <p>تکنیک Salt در ذخیرهسازی کلمهعبور (Password) چیست و چه کاربردی دارد؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>هکرها با استفاده از جداول رنگینکمانی (Rainbow Tables)، هش تمام پسوردهای رایج (مثل 123456) را از قبل محاسبه کردهاند. اگر پسورد مستقیما هش شود، به راحتی شکسته میشود. تکنینک نمک (Salt) به این صورت است که سیستم قبل از هش کردن، یک رشته متنی تصادفی و بیربط را به پسورد هر کاربر اضافه میکند. با این کار پسورد کاربر کاملا منحصربهفرد شده و استفاده از جداول از پیش محاسبهشده غیرممکن میشود.</p> | |
| </div> | |
| <h2>۱۶. مجازیسازی نوین و کانتینرها (Docker Ecosystem)</h2> | |
| <p>ماشینهای مجازی (VM) نیازمند تخصیص یک سیستمعامل کامل برای هر برنامه بودند که رم و پردازنده زیادی اشغال میکرد. داکر (Docker) مفهوم کانتینر را آورد که در آن، تمام کانتینرها به جای سیستمعامل، تنها هسته (Kernel) لینوکس سرور میزبان را به اشتراک میگذارند. در نتیجه کانتینرها با حجمی در حد مگابایت، در کمتر از یک ثانیه لود میشوند. نقشهها برای ساخت کانتینر در فایل Dockerfile تعریف شده و به یک Image فقط-خواندنی تبدیل میشوند.</p> | |
| <div class="question-box"> | |
| <div class="question-title">نمونه سوال امتحانی ۱۶:</div> | |
| <p>تفاوت اساسی معماری کانتینرهای Docker با ماشینهای مجازی (Virtual Machines) کلاسیک چیست؟</p> | |
| <div class="answer">پاسخ تشریحی:</div> | |
| <p>ماشینهای مجازی نیازمند مجازیسازی در سطح سختافزار (Hypervisor) هستند و هرکدام یک سیستمعامل مهمان (Guest OS) کامل بوت میکنند که سربار (Overhead) سنگینی دارد. اما کانتینرهای Docker مجازیسازی را در سطح سیستمعامل انجام میدهند. یعنی کانتینرها هسته (Kernel) میزبان را به اشتراک میگذارند و هیچ سیستمعامل اضافی نصب نمیشود. این باعث سبکی شدید، پرفورمنس بسیار بالاتر و قابلیت جابجایی ۱۰۰٪ یکسان بین سرورهای مختلف میشود.</p> | |
| </div> | |
| </body> | |
| </html> | |
Xet Storage Details
- Size:
- 30.3 kB
- Xet hash:
- 6436fbe67285405a55c52dba75ecd2079527a54b2e94d09834148408d647d465
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.