#تجربه
ساختمان داده و الگوریتم؛
بیشترین سوالی که همیشه از من میشه؛ چقدر باید Data structure, Algorithm
بلد باشم و یا چندتا leetcode
باید حل کنم ؟
اول سوال دوم رو جواب میدم؛ تعداد leetcode
هیچ ربطی به سواد الگوریتم شما نداره و ۲ نوع آدم leetcode زیادی حل میکنند :
۱- چالشهای لیتکد براشون تفریح هست و توی اوقات فراغت ترجیح میدند اینکار رو انجام بدند.
۲- درک درست از algorithm, data structure
پیدا نکردند و در تلاش هستند برای حفظ کردن پترن (که اصلاً هم کار بدی نیست)
مسئله اینه که درواقعیت
Data structure, Algorithm
خیلی شبیه به شطرنج میمونه؛ افراد خیلی خیلی کمی توی دنیا وجود دارند که الگوی جدیدی رو بنام خودشون ثبت میکنند اما باقی افراد فقط پترنهای پرتکرار رو تمرین و حفظ میکنند.
نمیدونم تا حالا به اپلیکیشنهای آموزش شطرنج سر زدید یا نه؛ توی تمام موارد تلاش میکنه با تکرار بسیار انواع الگوها رو بهتون آموزش بده، به محض اینکه شما توی مسابقه اون الگو رو ببینید راهکارش رو از حافظه واکشی میکنید.
اما یک راهکار بهتر هم هست؛ که ۹۹٪ اپلیکیشنها به شما نمیگه (پول توی این هست که شما زمان طولانیتری برای یادگیری صرف کنید) راهکار بهتر چیه ؟
اول توضیح هدف:
برای یک شروع موفق توی بازی شطرنج شما باید سوار بر وسط زمین باشی و کنترل وسط زمین رو به دست بگیری
همین توضیح نیاز شما به انجام ۲۰۰ تا تمرین رو به ۱۰ میرسونه.
زمانی که خصوصی برای مصاحبه آموزش میدادم (چندین سال قبل) همیشه بعد از بررسی هر
Data Structure
به افراد یاد میدادم با خوندن سوال اونها رو دسته بندی کنند؛ تمرین بین جلسات هم همین بود.
مثلاً اگر آرایهها رو بررسی کردیم؛ سوالات مربوط به آرایهها رو پیدا کنند، و ۱۰۰ مورد رو بررسی و دستهبندی کنند شاید ۴-۵ دسته میشدند.
بعد از بررسی الگوریتمهای مهم آرایهها؛ فقط کافی بود از هر دسته ۱ سوال یا نهایتاً ۲ سوال رو حل کنند.
و اینطوری با تعداد خیلی کمتری حل leetcode به موفقیت میرسیدند (معمولاً کمتر از ۳ ماه وقت داشتند)
اما سوال اول؛
چقدر
Data Structure, Algorithm
باید بلد باشیم ؟
برای مصاحبه همهی موارد رو باید بشناسید؛ اما مثلاً برای مصاحبه جونیور هیچوقت از شما
red black tree
پرسیده نمیشه یا مثلاً شاید حتی Trie
پس بسته به سطح مصاحبه روی مباحث مختلف وقتتون رو تنظیم کنید.اما توی کار چطور ؟
خیلی بستگی به نوع کار شما داره؛ مثلاً اگر توسعه دهنده دیتابیس باشید حتماً باید B-tree و انواع موارد بهبود یافته اون رو حتی بهتر از
array
بشناسید.اما اگر نه؛ ممکنه هیچوقت بهش نیاز نداشته باشید.
توی ۳ سال اخیر برای من فقط یکبار از
Trie
لازم شده استفاده کردم، اونم برای پردازش string
پس؛ سعی کنید پترن رو یاد بگیرید بدون اینکه مسئله حل کنید. توی لیتکد باید سوالاتی که بنظرتون تکنیک حل یکسان داره رو شناسایی کنید و کنار هم قرار بدید.
تمرکز رو روی مباحثی بذارید که بیشتر به سطح شما میخوره و باقی مباحث رو فقط یکبار بخونید که باهاش آشنا باشید.
شغلی که براش اپلای میکنید رو بررسی کنید و الگوریتم و ساختمان دادههای مهم توی اون کار رو به خوبی هرچه تمامتر یاد بگیرید.
توی دورههای خصوصی بنده برای مصاحبه گوگل، آمازون و متا و ....
دقیقاً این کاری بود که با بچهها انجام میدادم و این تکنیکی هست که خودم برای یادگیری استفاده کردم؛ حل تعداد زیادی لیتکد روش مورد علاقه من نیست.
>>Click here to continue<<