Tech Stuff
پرفورمنس hash table پرفورمنس hash tableها بطور متوسط (average case) پیچیدگی زمانی O(1) داره. هم توی سرچ، هم insert و هم حذف. اما توی worst case به O(n) میرسه که اصلا چیز خوبی نیست. یعنی توی بدترین حالت مثل آرایهست توی insert و delete و مثل linked list توی…
با بزرگ شدن LF باید slotهای بیشتری به hash tableمون اضافه کنیم که بهش میگن resizing. منطقیه که سایز آرایه رو دو برابر کنیم. بعدش تمام آیتمهای موجود رو با hash function دوباره توی hash table جدید وارد میکنیم. هرچی LF کمتر، تعداد collisionها هم کمتر. قانون کلیش هم اینه که وقتی LF بزرگتر از 0.7 شد resize کنیم. resizing هم هزینهبره؛ اما اغلب اوقات لازم نمیشه که resize کنیم و بطور متوسط resizing هم پیچیدگی O(1) داره.
یه hash function خوب هم مقادیر رو بطور مساوی داخل آرایه توزیع میکنه.
(2/2)
#Grokking_Algorithms #algorithm
@techstuff100
یه hash function خوب هم مقادیر رو بطور مساوی داخل آرایه توزیع میکنه.
(2/2)
#Grokking_Algorithms #algorithm
@techstuff100
❤5
قانون پارکینسون میگه کار اونقدر کش پیدا میکنه تا زمانی که برای تکمیلش داریم رو پر کنه. پروژههایی که ددلاینی ندارن، بیشتر از اونچه که باید زمان میگیرن و ست کردن ددلاینهای چالشی (منظور ددلاین غیرممکن نیست) باعث میشه نتایج بهتری بگیریم. اینجا مفهومی به اسم Iron Triangle میاد وسط که سه تا محدودیت کلیدی یه پروژه رو تعریف میکنه: اسکوپ، منابع و زمان. با تغییر یکی، دو تای دیگه تغییر میکنن.
[مقاله]
#recent_reads
@techstuff100
[مقاله]
#recent_reads
@techstuff100
Substack
Parkinson's Law: It's Real, So Use It
Yes, just set that deadline.
👍6❤1👏1
خروجی کد بالا (1) چیه؟
شاید اینطور فکر کنیم که وقتی به
ا Completion Record به آبجکتی گفته میشه که نتیجه اجرای یه دستور یا عبارت رو مشخص میکنه. js با اجرای هر statement یه Completion Record ایجاد میکنه و ۳ تا فیلد داره:
یک. type برای نوع نتیجه که یکی از مقادیر normal (اجرای عادی)، break، continue، return و throw میتونه باشه.
دو. value برای مقدار تولید شده.
سه. target که مقصد رو برای break و continue مشخص میکنه.
توی مثال وقتی return "try" اجرا میشه، یه Completion Record با مشخصات (2) ایجاد میشه. اما قبل از اینکه تابع واقعا return کنه، بلاک finally اجرا میشه. داخل finally هم یه return داریم که Completion Record (3) رو تولید میکنه و نتیجه قبلی جایگزین میشه. پس در نهایت مقدار "finally" برگردونده میشه.
اگه finally بهصورت normal تموم میشد و Completion جدیدی مثل return یا throw تولید نمیکرد، نتیجه قبلی حفظ میشد.
#javascript
@techstuff100
شاید اینطور فکر کنیم که وقتی به
return "try" میرسیم، اجرای تابع متوقف میشه و خروجی کد "try" میشه؛ اما "finally" چاپ میشه. برای درک بهتر این موضوع لازمه با Completion Record آشنا بشیم.ا Completion Record به آبجکتی گفته میشه که نتیجه اجرای یه دستور یا عبارت رو مشخص میکنه. js با اجرای هر statement یه Completion Record ایجاد میکنه و ۳ تا فیلد داره:
یک. type برای نوع نتیجه که یکی از مقادیر normal (اجرای عادی)، break، continue، return و throw میتونه باشه.
دو. value برای مقدار تولید شده.
سه. target که مقصد رو برای break و continue مشخص میکنه.
توی مثال وقتی return "try" اجرا میشه، یه Completion Record با مشخصات (2) ایجاد میشه. اما قبل از اینکه تابع واقعا return کنه، بلاک finally اجرا میشه. داخل finally هم یه return داریم که Completion Record (3) رو تولید میکنه و نتیجه قبلی جایگزین میشه. پس در نهایت مقدار "finally" برگردونده میشه.
اگه finally بهصورت normal تموم میشد و Completion جدیدی مثل return یا throw تولید نمیکرد، نتیجه قبلی حفظ میشد.
#javascript
@techstuff100
❤6🔥2👏2👍1
فاصله Levenshtein حداقل تعداد عملیاتهای ممکن (insertion، deletion و substitution) برای تبدیل یه رشته به یه رشته دیگه رو اندازهگیری میکنه. از کاربردهاش هم میشه به spell-checking و autocorrect و همینطور پیدا کردن اسمها یا عبارتهای مشابه بخصوص توی سرچ اشاره کرد.
این مثال رو در نظر بگیرید. فاصله بین kitten و sitting سه هستش:
kitten -> sitten -> sittin -> sitting
برای محاسبهش از dynamic programming استفاده میکنیم. grid پرشده مثال این شکلی میشه (1). مقدار هر سلول طبق فرمول (2) بدست اومده و عدد داخلش نشون میده حداقل فاصله ویرایشی بین دو prefix متناظر با اون سلول چقدره. مثلا سلول (3,2) مقدار 2 داره؛ این یعنی فاصله بین si و kit دو هستش. مقدار سلول پایین-راست هم جواب نهاییمونه.
برای تمرینش میتونین مسئله لیتکد 72. Edit Distance رو حل کنین.
#algorithm
@techstuff100
این مثال رو در نظر بگیرید. فاصله بین kitten و sitting سه هستش:
kitten -> sitten -> sittin -> sitting
برای محاسبهش از dynamic programming استفاده میکنیم. grid پرشده مثال این شکلی میشه (1). مقدار هر سلول طبق فرمول (2) بدست اومده و عدد داخلش نشون میده حداقل فاصله ویرایشی بین دو prefix متناظر با اون سلول چقدره. مثلا سلول (3,2) مقدار 2 داره؛ این یعنی فاصله بین si و kit دو هستش. مقدار سلول پایین-راست هم جواب نهاییمونه.
برای تمرینش میتونین مسئله لیتکد 72. Edit Distance رو حل کنین.
#algorithm
@techstuff100
❤8🎉1🤣1
با
میتونیم یکبار این دستور رو اجرا کنیم:
از این به بعد با اجرای
البته
@techstuff100
alias میتونیم توی شل برای یه دستور اسم کوتاهتری تعریف کنیم. مثلا بجای هربار بجای این دستور طولانی:git log --oneline --graph --decorate
میتونیم یکبار این دستور رو اجرا کنیم:
alias gl='git log --oneline --graph --decorate'
از این به بعد با اجرای
gl دستور کامل اجرا میشه.البته
alias بصورت پیشفرض فقط توی همون سشن ترمینال در دسترسه و با بستن ترمینال از بین میره. برای دائمی کردنش میتونیم به .bashrc اضافهش کنیم:echo "alias gl='git log --oneline --graph --decorate'" >> ~/.bashrc
@techstuff100
👍7❤3👏2
چیزهایی که نباید در مصاحبه فنی بگیم
در طول مصاحبه فرصت زیادی برای صحبت داریم؛ چه زمانی که داریم یه سوال مستقیم رو جواب میدیم یا زمانی که ازمون میخوان که درباره خودمون صحبت کنیم یا وقتی که میگن هر سوالی که داریم بپرسیم. توی چنین مواقعی قطعا باید خودمون باشیم ولی بعضی وقتا زیادی ریلکس بودن مشکلسازه. مثلا همه مصاحبهکنندهها شاید حس طنز ما رو نداشته باشن. برای اینکه تصویر خوبی از خودمون بسازیم، یسری چیزا رو بهتره نگیم:
۱. اینجا دقیقا چه کاری انجام میدید؟
نشون میده درباره شرکت، خوب تحقیق نکردیم. مثلا بهتره بگیم «اینجا چطور با نود کار میکنید؟».
۲. نمیدونم. تاحالا چنین کاری انجام ندادم.
نشون میده که وقتی با مشکلات جدید مواجه میشیم، بلاک میشیم و نمیتونیم حلشون کنیم. بهتره بگیم «نمیدونم ولی امتحانش میکنم تا ...».
۳. از اون محل متنفر بودم.
وقتی میپرسن که چرا از کار قبلیمون اومدیم بیرون، بهتره از اونجا (حداقل بطور رسمی) متنفر نباشیم؛ چون ممکنه باعث نشون دادن بدترین وجه خودمون بشه. بهتره روی چیزای مثبت و چیزایی که از اونجا یاد گرفتیم تمرکز کنیم.
۴. هیچکس دیگه از اون استفاده نمیکنه.
از عبارات قطعی استفاده نکنیم. چطور میتونیم با قاطعیت بگیم فلان چیز توی صنعت به این بزرگی دیگه استفاده نمیشه؟ اگه بگیم «تا جایی که من میدونم ...» بهتره.
۵. توی رزومهم گذاشتمش.
توی مصاحبه ممکنه درباره چیزی که چیزایی که توی رزومهمون نوشتیم بپرسن. نگیم که توی رزومهم هستش. مصاحبهکننده تنبل نیست.
۶. نه، هیچ سوالی ندارم.
مصاحبه فقط برای این نیست که اونا ما رو بشناسن. ما هم باید بشناسیمشون. پس سوالات مناسب داشته باشیم.
۷. من یه توسعهدهنده Reactم.
با این جمله داریم خودمون رو محدود به React میکنیم. ما توسعهدهنده هستیم و اصول برنامهنویسی رو بلدیم. تکنولوژیها میان و میرن. این نشون میده ما انعطافپذیریم.
۸. لینوکس؟ ازش متنفرم. عاشق ویندوزم.
متنفر بودن از تکنولوژی توی مصاحبه فنی یه چراغ قرمزه. ممکنه با یه چیزی حال نکنیم. ولی ابزار، ابزاره و باید با اونی که برای شرایط فعلیمون مناسبه پیش بریم.
#Skills_of_a_Successful_Software_Engineer
@techstuff100
در طول مصاحبه فرصت زیادی برای صحبت داریم؛ چه زمانی که داریم یه سوال مستقیم رو جواب میدیم یا زمانی که ازمون میخوان که درباره خودمون صحبت کنیم یا وقتی که میگن هر سوالی که داریم بپرسیم. توی چنین مواقعی قطعا باید خودمون باشیم ولی بعضی وقتا زیادی ریلکس بودن مشکلسازه. مثلا همه مصاحبهکنندهها شاید حس طنز ما رو نداشته باشن. برای اینکه تصویر خوبی از خودمون بسازیم، یسری چیزا رو بهتره نگیم:
۱. اینجا دقیقا چه کاری انجام میدید؟
نشون میده درباره شرکت، خوب تحقیق نکردیم. مثلا بهتره بگیم «اینجا چطور با نود کار میکنید؟».
۲. نمیدونم. تاحالا چنین کاری انجام ندادم.
نشون میده که وقتی با مشکلات جدید مواجه میشیم، بلاک میشیم و نمیتونیم حلشون کنیم. بهتره بگیم «نمیدونم ولی امتحانش میکنم تا ...».
۳. از اون محل متنفر بودم.
وقتی میپرسن که چرا از کار قبلیمون اومدیم بیرون، بهتره از اونجا (حداقل بطور رسمی) متنفر نباشیم؛ چون ممکنه باعث نشون دادن بدترین وجه خودمون بشه. بهتره روی چیزای مثبت و چیزایی که از اونجا یاد گرفتیم تمرکز کنیم.
۴. هیچکس دیگه از اون استفاده نمیکنه.
از عبارات قطعی استفاده نکنیم. چطور میتونیم با قاطعیت بگیم فلان چیز توی صنعت به این بزرگی دیگه استفاده نمیشه؟ اگه بگیم «تا جایی که من میدونم ...» بهتره.
۵. توی رزومهم گذاشتمش.
توی مصاحبه ممکنه درباره چیزی که چیزایی که توی رزومهمون نوشتیم بپرسن. نگیم که توی رزومهم هستش. مصاحبهکننده تنبل نیست.
۶. نه، هیچ سوالی ندارم.
مصاحبه فقط برای این نیست که اونا ما رو بشناسن. ما هم باید بشناسیمشون. پس سوالات مناسب داشته باشیم.
۷. من یه توسعهدهنده Reactم.
با این جمله داریم خودمون رو محدود به React میکنیم. ما توسعهدهنده هستیم و اصول برنامهنویسی رو بلدیم. تکنولوژیها میان و میرن. این نشون میده ما انعطافپذیریم.
۸. لینوکس؟ ازش متنفرم. عاشق ویندوزم.
متنفر بودن از تکنولوژی توی مصاحبه فنی یه چراغ قرمزه. ممکنه با یه چیزی حال نکنیم. ولی ابزار، ابزاره و باید با اونی که برای شرایط فعلیمون مناسبه پیش بریم.
#Skills_of_a_Successful_Software_Engineer
@techstuff100
❤13👏4
قبلا بخش زیادی از کار برنامهنویسی صرفا این بود که بتونیم چیزی رو بسازیم و به مرحله اجرا برسونیم. الان با کمک AI ساختن نرمافزار راحتتر شده و تقریبا هرکسی میتونه یه خروجی قابلقبول تولید کنه. برای همین چیزی که اهمیت بیشتری پیدا کرده taste یا همون قدرت تشخیص کیفیت و تصمیمگیریه؛ اینکه بتونیم بهترین راهحل رو انتخاب کنیم و به هر چیزی که صرفا کار کنه راضی نشیم.
نویسنده میگه این مهارت از اشتباه کردن و یاد گرفتن از شکستها بدست میاد. مشکل اینه که AI با حذف سختیهای مسیر ممکنه فرصت یادگیری از همین اشتباهات رو هم ازمون بگیره.
[مقاله]
#recent_reads
@techstuff100
نویسنده میگه این مهارت از اشتباه کردن و یاد گرفتن از شکستها بدست میاد. مشکل اینه که AI با حذف سختیهای مسیر ممکنه فرصت یادگیری از همین اشتباهات رو هم ازمون بگیره.
[مقاله]
#recent_reads
@techstuff100
👍13❤4👏1
Forwarded from TheAliBigdeli Channel
رویداد آشنایی با skill به همراه ساخت یک Skill شخصی
در زمان کد نویسی با Ai مفاهیمی مثل Skill و تاثیرش در خروجی چی هستش؟ ساختار skill ها به چه صورته؟ چطور میشه یک skill طراحی کرد؟ و از دسته سوالاتی که در زمان انتخاب و استفاده ممکنه براتون پیش بیاد رو توی این رویداد بررسی کردیم.
https://thealibigdeli.ir/r/hodrJn/
@thealibigdeli_channel
#event
در زمان کد نویسی با Ai مفاهیمی مثل Skill و تاثیرش در خروجی چی هستش؟ ساختار skill ها به چه صورته؟ چطور میشه یک skill طراحی کرد؟ و از دسته سوالاتی که در زمان انتخاب و استفاده ممکنه براتون پیش بیاد رو توی این رویداد بررسی کردیم.
https://thealibigdeli.ir/r/hodrJn/
@thealibigdeli_channel
#event
❤7👏1🤣1
توی بحث rate limiting دو تا رویکرد داریم. hard rate limiting و soft rate limiting. توی hard limit وقتی تعداد درخواستها از حد مجاز رد بشه، درخواستهای اضافه رد میشن و معمولا 429 (Too Many Requests) میگیریم یا حتی ممکنه با هدر Retry-After به کلاینت بگیم چه زمانی دوباره درخواست بفرسته. این روش مثلا برای محدود کردن ترافیک کاربران رایگان یا محافظت از اندپوینتهای پرهزینه جوابه.
توی soft limit حتی بعد از رد شدن از سقف تعیین شده درخواستها همچنان پردازش میشن. ولی در عوض میتونیم این رد شدن از محدودیت رو لاگ کنیم، هشدار بدیم یا اطلاعات مربوط به سهمیه مصرفشده رو توی response headerها برگردونیم. این روش بیشتر برای پلنهای پولی و مشتریهای سازمانی مناسبه که قطع شدن ناگهانی سرویس براشون مشکلسازه. البته که اگه همین مصرف اضافی هم درست کنترل نشه میتونه هزینه یا فشار زیادی به سیستم وارد کنه.
#system_design
@techstuff100
توی soft limit حتی بعد از رد شدن از سقف تعیین شده درخواستها همچنان پردازش میشن. ولی در عوض میتونیم این رد شدن از محدودیت رو لاگ کنیم، هشدار بدیم یا اطلاعات مربوط به سهمیه مصرفشده رو توی response headerها برگردونیم. این روش بیشتر برای پلنهای پولی و مشتریهای سازمانی مناسبه که قطع شدن ناگهانی سرویس براشون مشکلسازه. البته که اگه همین مصرف اضافی هم درست کنترل نشه میتونه هزینه یا فشار زیادی به سیستم وارد کنه.
#system_design
@techstuff100
❤10👍3🔥2👏1
دو سه سالی میشه چیزایی که میخونم/میبینم/گوش میدم رو بصورت هفتگی ثبت میکنم. این کار باعث میشه که بدونم مثلا نسبت به هفتههای پیش چطور عمل کردم. همینطور وقتی که این حس «چند وقته هیچ کار خاصی انجام ندادم» اومد سراغم حداقل بدونم که واقعیه یا ساخته ذهنمه. کوشیار عظیمیان هم توی یکی از لایوهاش در موردش صحبت کرده بود.
من توی گوگل داک نوشتمشون ولی احتمالا ابزار بهتری براش وجود داشته باشه.
@techstuff100
من توی گوگل داک نوشتمشون ولی احتمالا ابزار بهتری براش وجود داشته باشه.
@techstuff100
❤23🔥4
طراحی یک Unique ID Generator در سیستمهای توزیعشده
این پست ۴ روش برای طراحی چنین سیستمی رو بررسی میکنه:
- multi-master replication
- UUID
- ticket server
- Twitter snowflake
#system_design #system_design_interview_volume_1
@techstuff100
این پست ۴ روش برای طراحی چنین سیستمی رو بررسی میکنه:
- multi-master replication
- UUID
- ticket server
- Twitter snowflake
#system_design #system_design_interview_volume_1
@techstuff100
❤10🔥1👏1
مفهومی وجود داره به اسم Chaos Engineering یا مهندسی آشوب. توش سعی میکنیم خرابیهایی رو که ممکنه توی دنیای واقعی اتفاق بیفتن، بهصورت کنترلشده توی سیستم شبیهسازی کنیم. مثلا یکی از سرویسها رو از دسترس خارج کنیم یا تاخیر شبکه رو بالا ببریم و ببینیم بقیه سیستم چه واکنشی نشون میده.
هدف اینه که قبل از اینکه چنین اتفاقهایی واقعا بیفتن، بفهمیم کجای سیستم مشکل داره و چطور میتونیم در برابر خرابیها مقاومترش کنیم.
اینجا در موردش بیشتر بخونین.
#system_design
@techstuff100
هدف اینه که قبل از اینکه چنین اتفاقهایی واقعا بیفتن، بفهمیم کجای سیستم مشکل داره و چطور میتونیم در برابر خرابیها مقاومترش کنیم.
اینجا در موردش بیشتر بخونین.
#system_design
@techstuff100
👍8❤4👏1
توی backtracking جواب رو مرحله به مرحله میسازیم. الگوریتم هر وقت تشخیص بده که اون جواب جزئی نمیتونه منجر به یه جواب معتبر بشه، ازش backtrack میکنه. باهاش معمولا مسائل ترکیبیاتی مثل جایگشتها (permutation) و ترکیبها و پازلهایی مثل سودوکو رو حل میکنیم.
مسئله Letter Combinations of a Phone Number لیتکد رو هم میتونین برای تمرین backtracking حل کنین.
#algorithm
@techstuff100
مسئله Letter Combinations of a Phone Number لیتکد رو هم میتونین برای تمرین backtracking حل کنین.
#algorithm
@techstuff100
LeetCode
Letter Combinations of a Phone Number - LeetCode
Can you solve this real interview question? Letter Combinations of a Phone Number - Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.
A mapping of…
A mapping of…
❤4🤔1
Forwarded from Go Casts | Systems & Agents 🚀
اگه یه مهارت باشه که لازمه به خودمون اضافه کنیم تا ریسک شغلی مون کمتر بشه مهارت بررسی و investigate کردن proactive محصول برای بهبودشه. یعنی صبر نکنیم تا یکی بهمون بگه چی بسازیم و خودمون دنبال مشکل ها و فرصت های بهبود محصول بگردیم.
معمولا ما که سابقه کاری مون بیشتر مهندسی نرم افزار و برنامه نویسیه این یه زمین بازی کاملا جدیده و تجربه مون توش کمه.
برای اینکه یاد بگیریم چطور این کارو بکنیم خوندن این مطالب میتونه مفید باشه
1. The Product-Minded Software Engineer - Gergely Orosz
https://blog.pragmaticengineer.com/the-product-minded-engineer/
2. Product Discovery - Marty Cagan
https://www.svpg.com/product-discovery/
3. Continuous Discovery Habits - Teresa Torres
https://www.producttalk.org/continuous-discovery-habits/
@gocasts
معمولا ما که سابقه کاری مون بیشتر مهندسی نرم افزار و برنامه نویسیه این یه زمین بازی کاملا جدیده و تجربه مون توش کمه.
برای اینکه یاد بگیریم چطور این کارو بکنیم خوندن این مطالب میتونه مفید باشه
1. The Product-Minded Software Engineer - Gergely Orosz
https://blog.pragmaticengineer.com/the-product-minded-engineer/
2. Product Discovery - Marty Cagan
https://www.svpg.com/product-discovery/
3. Continuous Discovery Habits - Teresa Torres
https://www.producttalk.org/continuous-discovery-habits/
@gocasts
The Pragmatic Engineer
The Product-Minded Software Engineer
Product-minded engineers are developers with lots of interest in the product
itself. They want to understand why decisions are made, how people use the
product, and love to be involved in making product decisions. They're someone
who would likely make a good…
itself. They want to understand why decisions are made, how people use the
product, and love to be involved in making product decisions. They're someone
who would likely make a good…
❤9👏2👍1
حمله Password Spraying
این حمله نوعی از حمله brute force هست که در اون مهاجم یه پسورد یکسان رو روی تعداد زیادی اکانت تست میکنه. اثرگذاری این حمله هم به این برمیگرده که بعضی از کاربران از پسوردهای ساده مثل "12345678" و یا "password" استفاده میکنن.
نحوه انجامش هم اینطوریه که مهاجم اول یه لیست از نام کاربریها مثل کارکنان یه شرکت و همینطور یه لیست از پسوردهای رایج یا پیشفرض بدست میاره. بعد هر پسورد رو با تعداد زیادی از نام کاربریها تست میکنه و بعد سراغ پسورد بعدی میره. معمولا بین تلاشها هم فاصله میذاره تا احتمال شناسایی حمله یا قفل شدن اکانتها کمتر بشه.
تفاوتش هم با brute force معمولی اینه که توی brute force معمولا پسوردهای احتمالی مختلف روی یه اکانت تست میشن؛ ولی توی password spraying تعداد محدودی پسورد رایج و ساده روی تعداد زیادی اکانت تست میشن. برای همینه که وقتی که حمله انجام میشه، کلی کاربر بصورت یکجا هدف قرار میگیرن.
برای جلوگیری از حمله هم میتونیم از کاربران بخوایم پسوردهای قوی و غیرقابلحدس انتخاب کنن، برای هر سرویس پسورد جداگونه داشته باشن، از MFA استفاده کنیم و لاگهای ورود رو برای شناسایی تلاشهای ناموفق روی چند اکانت مختلف، مخصوصا از یه IP یا در یک بازه زمانی کوتاه مانیتور کنیم.
#cyber_security
@techstuff100
این حمله نوعی از حمله brute force هست که در اون مهاجم یه پسورد یکسان رو روی تعداد زیادی اکانت تست میکنه. اثرگذاری این حمله هم به این برمیگرده که بعضی از کاربران از پسوردهای ساده مثل "12345678" و یا "password" استفاده میکنن.
نحوه انجامش هم اینطوریه که مهاجم اول یه لیست از نام کاربریها مثل کارکنان یه شرکت و همینطور یه لیست از پسوردهای رایج یا پیشفرض بدست میاره. بعد هر پسورد رو با تعداد زیادی از نام کاربریها تست میکنه و بعد سراغ پسورد بعدی میره. معمولا بین تلاشها هم فاصله میذاره تا احتمال شناسایی حمله یا قفل شدن اکانتها کمتر بشه.
تفاوتش هم با brute force معمولی اینه که توی brute force معمولا پسوردهای احتمالی مختلف روی یه اکانت تست میشن؛ ولی توی password spraying تعداد محدودی پسورد رایج و ساده روی تعداد زیادی اکانت تست میشن. برای همینه که وقتی که حمله انجام میشه، کلی کاربر بصورت یکجا هدف قرار میگیرن.
برای جلوگیری از حمله هم میتونیم از کاربران بخوایم پسوردهای قوی و غیرقابلحدس انتخاب کنن، برای هر سرویس پسورد جداگونه داشته باشن، از MFA استفاده کنیم و لاگهای ورود رو برای شناسایی تلاشهای ناموفق روی چند اکانت مختلف، مخصوصا از یه IP یا در یک بازه زمانی کوتاه مانیتور کنیم.
#cyber_security
@techstuff100
❤8👍2👏1