[Feature] approach a system design interview question

pull/240/head
Farhad Yasir 2018-11-04 12:37:57 +11:00
parent 957afcdd5a
commit 38bfa12a72
1 changed files with 76 additions and 8 deletions

View File

@ -86,7 +86,7 @@
## সিস্টেম ডিজাইনের বিষয়গুলোর সূচি ## সিস্টেম ডিজাইনের বিষয়গুলোর সূচি
> বিভিন্ন সিস্টেম ডিজাইনের বিষয়গুলোর সুবিধা-অসুবিধাসহ সারমর্ম **সবকিছুর ভাল-মন্দ দিক আছে**. > বিভিন্ন সিস্টেম ডিজাইনের বিষয়গুলোর সুবিধা-অসুবিধাসহ সারমর্ম **সবকিছুর ভাল-মন্দ দিক আছে**.
> >
> প্রতিটি সেকশনে কিছু লিঙ্ক রয়েছে যা আপনাকে আরও গভীর রিসোর্সে নিয়ে যাবে। > প্রতিটি সেকশনে কিছু লিঙ্ক রয়েছে যা আপনাকে আরও গভীর রিসোর্সে নিয়ে যাবে।
@ -132,7 +132,7 @@
* [মাস্টার-স্লেভ রেপ্লিকেশন](#master-slave-replication) * [মাস্টার-স্লেভ রেপ্লিকেশন](#master-slave-replication)
* [মাস্টার-মাস্টার রেপ্লিকেশন](#master-master-replication) * [মাস্টার-মাস্টার রেপ্লিকেশন](#master-master-replication)
* [ফেডারেশন](#federation) * [ফেডারেশন](#federation)
* [শারিং](#sharding) * [শারিং](#sharding)
* [ডিনরমালিজেশন](#denormalization) * [ডিনরমালিজেশন](#denormalization)
* [এস কিউ এল(SQL) টিউনিং](#sql-tuning) * [এস কিউ এল(SQL) টিউনিং](#sql-tuning)
* [নো এস কিউ এল (NoSQL)](#nosql) * [নো এস কিউ এল (NoSQL)](#nosql)
@ -164,7 +164,7 @@
* [রিমোট প্রসিডিউর কল (RPC)](#remote-procedure-call-rpc) * [রিমোট প্রসিডিউর কল (RPC)](#remote-procedure-call-rpc)
* [রিপ্রেসেন্টেশনাল স্টেট ট্রান্সফার (REST)](#representational-state-transfer-rest) * [রিপ্রেসেন্টেশনাল স্টেট ট্রান্সফার (REST)](#representational-state-transfer-rest)
* [সিকুরিটি](#security) * [সিকুরিটি](#security)
* [উপাঙ্গ](#appendix) * [পরিশিষ্ট](#appendix)
* [দুটি টেবিলের পাওয়ারস](#powers-of-two-table) * [দুটি টেবিলের পাওয়ারস](#powers-of-two-table)
* [লেটেন্সি সংখ্যা যা সব প্রোগ্রামারের জানা উচিত](#latency-numbers-every-programmer-should-know) * [লেটেন্সি সংখ্যা যা সব প্রোগ্রামারের জানা উচিত](#latency-numbers-every-programmer-should-know)
* [আরও সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন](#additional-system-design-interview-questions) * [আরও সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন](#additional-system-design-interview-questions)
@ -198,9 +198,9 @@
বিশদভাবে শুরু করুন এবং কয়েকটি বিষয়ে গভীর যান। এটা বিভিন্ন প্রধান সিস্টেম ডিজাইন বিষয় সম্পর্কে জানতে একটু সাহায্য করে। আপনার সময়রেখা, অভিজ্ঞতা, কোন অবস্থানের জন্য আপনি ইন্টার্ভিউ দিচ্ছেন এবং আপনি কোন সংস্থাগুলির সাথে ইন্টার্ভিউ দিচ্ছেন তার উপর ভিত্তি করে নিচের নির্দেশিকা সামঞ্জস্য করুন। বিশদভাবে শুরু করুন এবং কয়েকটি বিষয়ে গভীর যান। এটা বিভিন্ন প্রধান সিস্টেম ডিজাইন বিষয় সম্পর্কে জানতে একটু সাহায্য করে। আপনার সময়রেখা, অভিজ্ঞতা, কোন অবস্থানের জন্য আপনি ইন্টার্ভিউ দিচ্ছেন এবং আপনি কোন সংস্থাগুলির সাথে ইন্টার্ভিউ দিচ্ছেন তার উপর ভিত্তি করে নিচের নির্দেশিকা সামঞ্জস্য করুন।
* **সংক্ষিপ্ত সময়রেখা** - আপনার লক্ষ্য হবে সিস্টেম ডিজাইন বিষয়ে **প্রশস্ত** ধারণা নেওয়া। **কিছু** ইন্টার্ভিউয়ের প্রশ্ন সমাধান করে প্রস্তুতি নিন। * **সংক্ষিপ্ত সময়রেখা** - আপনার লক্ষ্য হবে সিস্টেম ডিজাইন বিষয়ে **প্রশস্ত** ধারণা নেওয়া। **কিছু** ইন্টার্ভিউয়ের প্রশ্ন সমাধান করে প্রস্তুতি নিন।
* **মাঝারি সময়রেখা** - আপনার লক্ষ্য হবে সিস্টেম ডিজাইন বিষয়ে **প্রশস্ত** এবং **কিছু গভীর** ধারণা নেওয়া। **অনেক** ইন্টার্ভিউয়ের প্রশ্ন সমাধান করে প্রস্তুতি নিন। * **মাঝারি সময়রেখা** - আপনার লক্ষ্য হবে সিস্টেম ডিজাইন বিষয়ে **প্রশস্ত** এবং **কিছু গভীর** ধারণা নেওয়া।**অনেক** ইন্টার্ভিউয়ের প্রশ্ন সমাধান করে প্রস্তুতি নিন।
* **দীর্ঘ সময়রেখা** - আপনার লক্ষ্য হবে সিস্টেম ডিজাইন বিষয়ে **প্রশস্ত** এবং **অনেক গভীর** ধারণা নেওয়া। **প্রায় সব** ইন্টার্ভিউয়ের প্রশ্ন সমাধান করে প্রস্তুতি নিন। * **দীর্ঘ সময়রেখা** - আপনার লক্ষ্য হবে সিস্টেম ডিজাইন বিষয়ে **প্রশস্ত** এবং **অনেক গভীর** ধারণা নেওয়া। **প্রায় সব** ইন্টার্ভিউয়ের প্রশ্ন সমাধান করে প্রস্তুতি নিন।
| | সংক্ষিপ্ত | মাঝারি | দীর্ঘ | | | সংক্ষিপ্ত | মাঝারি | দীর্ঘ |
|---|---|---|---| |---|---|---|---|
@ -209,5 +209,73 @@
| কিছু [বাস্তব জীবনের আর্কিটেকচার](#real-world-architectures) পড়ুন | :+1: | :+1: | :+1: | | কিছু [বাস্তব জীবনের আর্কিটেকচার](#real-world-architectures) পড়ুন | :+1: | :+1: | :+1: |
| পর্যালোচনা করুন [কিভাবে সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন মোকাবেলা করবেন](#how-to-approach-a-system-design-interview-question) | :+1: | :+1: | :+1: | | পর্যালোচনা করুন [কিভাবে সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন মোকাবেলা করবেন](#how-to-approach-a-system-design-interview-question) | :+1: | :+1: | :+1: |
| [সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন, সমাধানসহ](#system-design-interview-questions-with-solutions) নিয়ে কাজ করুন | কিছু | অনেক | প্রায় সব | | [সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন, সমাধানসহ](#system-design-interview-questions-with-solutions) নিয়ে কাজ করুন | কিছু | অনেক | প্রায় সব |
| [অবজেক্ট ওরিয়েন্টেড ডিজাইন ইন্টারভিউ প্রশ্ন, সমাধানসহ] নিয়ে কাজ করুন (#object-oriented-design-interview-questions-with-solutions) | কিছু | অনেক | প্রায় সব | | [অবজেক্ট ওরিয়েন্টেড ডিজাইন ইন্টারভিউ প্রশ্ন, সমাধানসহ](#object-oriented-design-interview-questions-with-solutions) নিয়ে কাজ করুন | কিছু | অনেক | প্রায় সব |
| পর্যালোচনা করুন [আরও সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন](#additional-system-design-interview-questions) | কিছু | অনেক | প্রায় সব | | পর্যালোচনা করুন [আরও সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন](#additional-system-design-interview-questions) | কিছু | অনেক | প্রায় সব |
## কিভাবে সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন মোকাবেলা করবেন
> কিভাবে একটি সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্নের উত্তর দিবেন।
সিস্টেম ডিজাইন ইন্টারভিউ একটি **খোলামেলা কথোপকথন**। আপনার থেকে এটার নেতৃত্ব আশা করা হবে।
আপনি আলোচনা গাইড করার জন্য নিম্নলিখিত ধাপগুলি ব্যবহার করতে পারেন। এই প্রক্রিয়া দৃঢ় করতে সাহায্য করার জন্য, আপনি [সিস্টেম ডিজাইন ইন্টারভিউ প্রশ্ন, সমাধানসহ](#system-design-interview-questions-with-solutions) সেকশনটি নিমোক্ত ধাপগুলো অনুসরণ করে কাজ করতে পারেন।
### ধাপ ১ঃ ব্যবহার ক্ষেত্রের রূপরেখা, সীমাবদ্ধতা, এবং অনুমান
প্রয়োজনীয় তথ্য সংগ্রহ করুন এবং সমস্যাটিকে একটি ক্ষেত্রের মধ্যে আনুন। ব্যবহার ক্ষেত্রে এবং সীমাবদ্ধতা ব্যাখ্যা করতে প্রশ্ন জিজ্ঞাসা করুন. অনুমান নিয়ে আলোচনা করুন।
* কে এটি ব্যবহার করতে যাচ্ছে?
* তারা কিভাবে এটি ব্যবহার করতে যাচ্ছেন?
* এর কতজন ব্যবহারকারী আছে?
* সিস্টেমটি কি করে?
* সিস্টেমের ইনপুট এবং আউটপুট কি কি?
* আমরা কি পরিমাণ ডাটা পরিচালনা করব বলে আশা করি?
* আমরা প্রতি সেকেন্ডে কত পরিমাণ রিকোয়েস্ট আশা করি?
* রিড টু রাইট এর প্রত্যাশিত অনুপাত কত?
### ধাপ ২ঃ একটি হাই লেভেল ডিজাইন তৈরি
সমস্ত গুরুত্বপূর্ণ উপাদান নিয়ে একটি হাই লেভেল ডিজাইনের রূপরেখা তৈরি করুন।
* প্রধান উপাদানসমুহ এবং তাদের মাঝে সংযোগ স্থাপন করে একটি খসড়া চিত্র আঁকুন।
* আপনার ধারণনার ন্যায্যতা প্রমাণ করুন।
### ধাপ ৩ঃ কোর উপাদান ডিজাইন
প্রতিটি কোর উপাদানের বিস্তারিত জানার জন্য গভীরে চলে যান। উদাহরণস্বরূপ, যদি আপনাকে বলা হয় [একটি ইউআরএল শর্টনিং সেবা ডিজাইন করুন](solutions/system_design/pastebin/README.md), তবে নিমোক্ত বিষয়গুলো আলোচনা করুনঃ
* সম্পূর্ণ ইউআরএল এর হ্যাশ তৈরি এবং সংরক্ষণ
* [এমডি৫](solutions/system_design/pastebin/README.md) এবং [বেস৬২](solutions/system_design/pastebin/README.md)
* হ্যাশ কলিশন্স
* এসকিউএল বা নোএসকিউএল
* ডাটাবেজ স্কিমা
* একটি হ্যাশেড ইউআরএল থেকে সম্পূর্ণ ইউআরএল অনুবাদ
* ডাটাবেজ সন্ধান
* এপিআই এবং অবজেক্ট ওরিয়েন্টেড ডিজাইন
### ধাপ ৪ঃ ডিজাইন স্কেল
যেসব সীমাবদ্ধতা বিঘ্ন ঘটাতে পারে তাদের সনাক্ত এবং সম্বোধন করুন। উদাহরণস্বরূপ, আপনার স্কেলবিলিটি সমস্যা মোকাবেলার জন্য কি নিম্নলিখিত বিষয়গুলো প্রয়োজন?
* লোড ব্যালেন্সার
* অনুভূমিক স্কেলিং
* কেশিং
* ডাটাবেজ শারডিং
সম্ভাব্য সমাধান এবং ভালোমন্দ দিক নিয়ে আলোচনা করুন। সবকিছুর ভাল-মন্দ দিক আছে। [স্কেলেবল সিস্টেম ডিজাইনের প্রিন্সিপাল](#index-of-system-design-topics) মেনে সীমাবদ্ধতাগুলো সম্বোধন করুন।
### ব্যাক-অফ-দ্যা-এনভেলপ গণনা
আপনি কিছু অনুমান খসড়া করতে বলা হতে পারে। নিমোক্ত রিসোর্সগুলোর জন্য [পরিশিষ্ট](#appendix) উল্লেখ করা হলঃ
* [ব্যাক-অফ-দ্যা-এনভেলপ গণনা করুন](http://highscalability.com/blog/2011/1/26/google-pro-tip-use-back-of-the-envelope-calculations-to-choo.html)
* [দুটি টেবিলের পাওয়ারস](#powers-of-two-table)
* [লেটেন্সি সংখ্যা যা সব প্রোগ্রামারের জানা উচিত](#latency-numbers-every-programmer-should-know)
### আরও সোর্স এবং পড়ার উপকরণ
একটি ভাল ধারণা পেতে কি আশা করা উচিত তার জন্য নিম্নলিখিত লিঙ্ক দেখুনঃ
* [কিভাবে একটি সিস্টেম ডিজাইন ইন্টারভিউ জয় করবেন](https://www.palantir.com/2011/10/how-to-rock-a-systems-design-interview/)
* [সিস্টেম ডিজাইন ইন্টারভিউ](http://www.hiredintech.com/system-design)
* [ইন্ট্রো টু আর্কিটেকচার এন্ড সিস্টেম ডিজাইন ইন্টারভিউ](https://www.youtube.com/watch?v=ZgdS0EUmn70)