Forwarded from Rust for Python developers
قطعا اگر با
همیشه هم راهکار ساده هست و با گوگل سرچ اول بدست میاد. شما
سوالی که امروز توی فروم دیدم؛ من که توی مثال بالا غیر از چاپ کردن
بخش اول سوال جوابش بر میگرده به خود
اما بخش دوم؛ سواد
FnOnce : خود
دقیقا هم
برای همین هست که باید توی مثال تصویر؛
multi-threading توی Rust کار کرده باشید؛ حتما این ارور رو دیدید.همیشه هم راهکار ساده هست و با گوگل سرچ اول بدست میاد. شما
move رو قبل از closure میذاری و مشکل حل میشه وقتی هم که سرچ میزنی چرا همه زدند که move بصورت زوری ownership رو میده به closure.سوالی که امروز توی فروم دیدم؛ من که توی مثال بالا غیر از چاپ کردن
counter کاری باهاش نمیکنم پس چرا با reference کار نمی کنه ؟ یا از کجا باید بدونم چه زمان هایی باید از move استفاده کنم ؟بخش اول سوال جوابش بر میگرده به خود
ownership و تفکیک بودن thread ها از هم؛ یادتون باشه توی Rust هر value باید فقط و فقط یک owner داشته باشه که توی threading ممکنه نقض بشه اگر راهکار فعلی براش نبود.اما بخش دوم؛ سواد
closure رو میخواد و ربطی به thread نداره؛ closure هارو به ۳ حالت توی annotation استفاده میکنند.Fn : که بعنوان ورودی یک رفرنس میگیرهFnMut : که بعنوان ورودی یک رفرنس با قابلیت تغییر میگیرهFnOnce : خود
value رو میگیرهدقیقا هم
FnOnce توی ویژگی هایی هست که متد spawn بهش نیاز داره و بررسی می کنه و اسم FnOnce هم برای این Trait کاملا عالی هست؛ چون Ownership اون value رو میگیره و بعد دیگه غیر قابل استفاده میشه.برای همین هست که باید توی مثال تصویر؛
closure رو مجبور کنیم که ownership متغییر counter رو بگیره چراکه خود کلوژر می دونه به reference فقط نیاز داره و Fn براش کفایت می کنه اما spawn نیاز به FnOnce داره برای امن بودن threading, ownership پس با استفاده از move کلوژر رو میبریم روی FnOnce.Forwarded from 🎄 یک برنامه نویس تنبل (Raymond Dev)
🔶 در این سایت لیستی از کتابخانه های UI برای پروژه های Vue3 و Nux3 جمع آوری شده است.
https://ui-libs.vercel.app/
@TheRaymondDev
https://ui-libs.vercel.app/
@TheRaymondDev
UI Lib Picker
🎨 Pick the Right UI Library for your Vue 3 or Nuxt 3/4 Project
Forwarded from Meitix
عژب جمله ای:
Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change.
Forwarded from Geek Alerts
This media is not supported in your browser
VIEW IN TELEGRAM
از امروز انتشار حالت صوتی پیشرفته چتجیپیتی برای همه کاربران Plus و Team شروع میشه و تا هفته آینده برای همه کسانی که این پلنها رو دارن در دسترس قرار میگیره. همچنین حالا ۵ صدای جدید، Custom Instructions و حافظه هم داره، و به پنجاه زبان زنده دنیا میتونه بگه که «ببخشید دیر کردم!».
Tweet
hadi @geekalerts
Tweet
hadi @geekalerts
Forwarded from Python Hints
برای اونایی که میرن کارآموزی پول هم میدن به شرکت که دارن میرن کار آموزی
اصن خود این قضیه خندهداره، ولی ما کی باشیم که آدما رو قضاوت کنیم ؟
قضاوت کار خداست
ما فقط مسخره میکنیم
خلاصه، اگر خواستید برید کارآموزی و پول هم بدید.
بیاید من ۵۰-۶۰ تا پروژه بیدر و پیکر دارم، پول بدید میدم کد بزنید.
تهش اگر چیز خوبی شد میرم میفروشم، اگرم پولش خیلی خوب بود.
یک ریکام قوی میدم بهتون، یک شرکت خوب استخدام بشید، حقوق جونیور رو بگیرید.
نکنید، زیر بار هرچیزی نرید.
هرکاری رو نکنید.
اصن خود این قضیه خندهداره، ولی ما کی باشیم که آدما رو قضاوت کنیم ؟
قضاوت کار خداست
ما فقط مسخره میکنیم
خلاصه، اگر خواستید برید کارآموزی و پول هم بدید.
بیاید من ۵۰-۶۰ تا پروژه بیدر و پیکر دارم، پول بدید میدم کد بزنید.
تهش اگر چیز خوبی شد میرم میفروشم، اگرم پولش خیلی خوب بود.
یک ریکام قوی میدم بهتون، یک شرکت خوب استخدام بشید، حقوق جونیور رو بگیرید.
نکنید، زیر بار هرچیزی نرید.
هرکاری رو نکنید.
Forwarded from کانال مهرداد لینوکس (Mehrdad Linux)
حرف باز (HarfBuzz ) 10.0.0 منتشر شد
✅ یک کتابخانه برای شکل دهی به متون یونیکده. از انواع مختلف تکنولوژی های مرتبط با فونت ها پشتیبانی می کنه. قابلیت شکل دهی متون و رندر و طرح بندی با پانگو ( که حرف باز در آن گنجانده شده ) دارد
اهداف پروژه زیبایی، قدرت، انعطاف، کارامدی و قابل حمل بودن
💠 حرف باز می تواند در برنامه هایی نظیر ابزارهای ساخت واسط گرافیکی کاربر، مرورگرهای وب، ابزارهای طراحی فونت، شبیه ساز ترمینال ها، پردازشگرهای دسته ای اسناد و موتورهای TeX مورد استفاده قرار گیرد.
توسعه دهنده اصلی این برنامه بهداد اسفهبد
دیدم خارجی ها همه دارن در مورد انتشارش حرف میزنند توی کامیونیتی فارسی خبری نیست 😁 چرا؟
✅ یک کتابخانه برای شکل دهی به متون یونیکده. از انواع مختلف تکنولوژی های مرتبط با فونت ها پشتیبانی می کنه. قابلیت شکل دهی متون و رندر و طرح بندی با پانگو ( که حرف باز در آن گنجانده شده ) دارد
اهداف پروژه زیبایی، قدرت، انعطاف، کارامدی و قابل حمل بودن
💠 حرف باز می تواند در برنامه هایی نظیر ابزارهای ساخت واسط گرافیکی کاربر، مرورگرهای وب، ابزارهای طراحی فونت، شبیه ساز ترمینال ها، پردازشگرهای دسته ای اسناد و موتورهای TeX مورد استفاده قرار گیرد.
توسعه دهنده اصلی این برنامه بهداد اسفهبد
دیدم خارجی ها همه دارن در مورد انتشارش حرف میزنند توی کامیونیتی فارسی خبری نیست 😁 چرا؟
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
🔸ویژگیهای هسته لینوکس 6.12 :
🔸تغییرات جدید در AMD:
• پشتیبانی از تشخیص قفل باس AMD که به عنوان AMD Bus Lock Trap نیز شناخته میشود.
• درایور گرافیکی AMD با معرفی تنظیمات مجدد برای هر صف و پشتیبانی از جداسازی فرآیندها در لینوکس 6.12.
• رفع اشکالات بیشتر RDNA3.5 و بهبودهای دیگر.
ه بهبود پشتیبانی صوتی ASUS ROG Ally X برای دستگاههای دستی بازی جدید که با پردازندههای AMD کار میکنند.
🔸تغییرات جدید در Intel:
• گرافیک Intel Xe2 Lunar Lake و گرافیک مجزای Battlemage به صورت پیشفرض فعال شدهاند و بنابراین به صورت آماده به کار خواهند
🔸سایر تغییرات
• گزارش سرعت فن درایور گرافیک اینتل برای کارتهای گرافیک مجزا بالاخره ارائه شد.
• پشتیبانی درایور Idle و P-State برای Intel Granite Rapids.
• پشتیبانی از صدای HDMI برای Intel Panther Lake.
• پشتیبانی از کنترل تأخیر بهرهوری “ELC” اینتل برای درایور uncore آنها.
• پشتیبانی از “PREEMPT_RT” در زمان واقعی برای هسته اصلی.
• پشتیبانی از نمایش کدهای QR در هنگام بروز خطای هسته.
• یک بخش قدیمی از کد که باعث کند شدن فرایند بررسی و تنظیم سرعت پردازنده (CPU) میشد، حذف شده است.
• کنترل دقیقتر بر کاهشهای امنیتی CPU در زمان ساخت.
• یک درایور شبکه Rust PHY جدید قرار است ادغام شود.
• پشتیبانی getrandom() vDSO برای معماریهای CPU بیشتر.
• پشتیبانی از mountهای Idmapped برای سیستمهای فایل FUSE و در ابتدا برای VirtIO-FS.
• گزارش آسیبپذیریهای عمومی CPU برای RISC-V.
• درایور نمایش Rockchip اکنون میتواند نمایشگرهای HDMI با وضوح 4K @ 60Hz را پشتیبانی کند.
• پشتیبانی بهبود یافته از NAS QNAP TS-433 در هسته اصلی.
• بهروزرسانی کد XZ برای پیادهسازی هسته لینوکس.
• رفع اشکالات سیستم فایل NILFS2 و پشتیبانی از برخی IOCTLهای جدیدتر سیستم فایل.
🔸تغییرات جدید در AMD:
• پشتیبانی از تشخیص قفل باس AMD که به عنوان AMD Bus Lock Trap نیز شناخته میشود.
• درایور گرافیکی AMD با معرفی تنظیمات مجدد برای هر صف و پشتیبانی از جداسازی فرآیندها در لینوکس 6.12.
• رفع اشکالات بیشتر RDNA3.5 و بهبودهای دیگر.
ه بهبود پشتیبانی صوتی ASUS ROG Ally X برای دستگاههای دستی بازی جدید که با پردازندههای AMD کار میکنند.
🔸تغییرات جدید در Intel:
• گرافیک Intel Xe2 Lunar Lake و گرافیک مجزای Battlemage به صورت پیشفرض فعال شدهاند و بنابراین به صورت آماده به کار خواهند
🔸سایر تغییرات
• گزارش سرعت فن درایور گرافیک اینتل برای کارتهای گرافیک مجزا بالاخره ارائه شد.
• پشتیبانی درایور Idle و P-State برای Intel Granite Rapids.
• پشتیبانی از صدای HDMI برای Intel Panther Lake.
• پشتیبانی از کنترل تأخیر بهرهوری “ELC” اینتل برای درایور uncore آنها.
• پشتیبانی از “PREEMPT_RT” در زمان واقعی برای هسته اصلی.
• پشتیبانی از نمایش کدهای QR در هنگام بروز خطای هسته.
• یک بخش قدیمی از کد که باعث کند شدن فرایند بررسی و تنظیم سرعت پردازنده (CPU) میشد، حذف شده است.
• کنترل دقیقتر بر کاهشهای امنیتی CPU در زمان ساخت.
• یک درایور شبکه Rust PHY جدید قرار است ادغام شود.
• پشتیبانی getrandom() vDSO برای معماریهای CPU بیشتر.
• پشتیبانی از mountهای Idmapped برای سیستمهای فایل FUSE و در ابتدا برای VirtIO-FS.
• گزارش آسیبپذیریهای عمومی CPU برای RISC-V.
• درایور نمایش Rockchip اکنون میتواند نمایشگرهای HDMI با وضوح 4K @ 60Hz را پشتیبانی کند.
• پشتیبانی بهبود یافته از NAS QNAP TS-433 در هسته اصلی.
• بهروزرسانی کد XZ برای پیادهسازی هسته لینوکس.
• رفع اشکالات سیستم فایل NILFS2 و پشتیبانی از برخی IOCTLهای جدیدتر سیستم فایل.
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
بروزرسانی بزرگ LXQt 2.1: محیط دسکتاپ سبک و سریع با ویژگیهای جدید
محیط دسکتاپ LXQt به زودی با نسخه 2.1 خود یک بهروزرسانی بزرگ دریافت خواهد کرد که قرار است در اواسط نوامبر 2024 منتشر شود. این نسخه، ویژگیهای جدید و بهبودهای قابل توجهی را به ارمغان میآورد، از جمله یک جلسه آزمایشی Wayland و بهبودهای ظاهری در آن صورت گرفته است.
https://lxqt-project.org/
نویسنده: حسین سیلانی
منبع : کانال لینوکسی: لینوکس تی ان تی
@linuxtnt
حمایت -donate
https://zarinp.al/learninghive.ir
محیط دسکتاپ LXQt به زودی با نسخه 2.1 خود یک بهروزرسانی بزرگ دریافت خواهد کرد که قرار است در اواسط نوامبر 2024 منتشر شود. این نسخه، ویژگیهای جدید و بهبودهای قابل توجهی را به ارمغان میآورد، از جمله یک جلسه آزمایشی Wayland و بهبودهای ظاهری در آن صورت گرفته است.
https://lxqt-project.org/
نویسنده: حسین سیلانی
منبع : کانال لینوکسی: لینوکس تی ان تی
@linuxtnt
حمایت -donate
https://zarinp.al/learninghive.ir
Forwarded from محتوای آزاد سهراب
شما برای ثبت یک شرکت و مدیرعامل شدن توی اون، حداقل باید این شرایط رو داشته باشید.
اصلاً دلم نمیخواد درمورد میزان احمقانه بودن این شرایط صحبتی بکنم، هرکسی بخونه میفهمه.
@SohrabContents
اصلاً دلم نمیخواد درمورد میزان احمقانه بودن این شرایط صحبتی بکنم، هرکسی بخونه میفهمه.
@SohrabContents
Forwarded from LearnPOV | لرن پی او وی
Forwarded from LearnPOV | لرن پی او وی
Forwarded from LearnPOV | لرن پی او وی
IMG_20240925_022631.jpg
4.3 MB
فایلش با کیفیت اصلی، بدون اضافیات 🚀
Forwarded from ⚝
آخرش هم نفهمیدم ضمیر متّصل رو باید با نیمفاصله بیارم یا نه.
اوایل به خاطر ارتقای سطح خوانش و خوندن راحتتر، با نیمفاصله میآوردم تا متونم، بهینهتر و خواناتر باشه. امّا الان که فکر میکنم، باید یه قاعدهای برای نگارشش پیدا کنم.
اینجا تلاش کردم تا فرهنگ املایی فرهنگستان رو برای این مورد بررسی کنم ولی حقیقتاً بیشتر گیج شدم.
«کشتیمان» یا «کشتی مان» یا «کشتیمان»؟
اگه قرار به متّصل بودن با نیمفاصلهست، «پایمان» رو بدونش آوردن و اگه قرار به عدم وجودشه، «پیمان» یا «پی مان» و «کشتیمان» یا «کشتی مان» چرا به این شکل نگاشته شدن؟
#note #موقت
اوایل به خاطر ارتقای سطح خوانش و خوندن راحتتر، با نیمفاصله میآوردم تا متونم، بهینهتر و خواناتر باشه. امّا الان که فکر میکنم، باید یه قاعدهای برای نگارشش پیدا کنم.
اینجا تلاش کردم تا فرهنگ املایی فرهنگستان رو برای این مورد بررسی کنم ولی حقیقتاً بیشتر گیج شدم.
«کشتیمان» یا «کشتی مان» یا «کشتیمان»؟
اگه قرار به متّصل بودن با نیمفاصلهست، «پایمان» رو بدونش آوردن و اگه قرار به عدم وجودشه، «پیمان» یا «پی مان» و «کشتیمان» یا «کشتی مان» چرا به این شکل نگاشته شدن؟
#note #موقت
Forwarded from Gopher Academy
🔵 عنوان مقاله
go2type: A Go to TypeScript API Client Generator
🟢 خلاصه مقاله:
مقاله مورد نظر به بررسی یک ابزار خط فرمان ساده (CLI) میپردازد که برای تولید انواع دادهها و پرسوجوها در رابطهای کاربری برنامههای تحت وب استفاده میشود، به ویژه آن دسته که از بکاندهای نوشته شده با زبان برنامهنویسی Go استفاده میکنند. این ابزار به توسعهدهندگان کمک میکند تا با کاهش نیاز به نوشتن کدهای تکراری و زمانبر، بهرهوری خود را افزایش داده و تطابق بین کد بکاند و فرانتاند را بهبود ببخشند. این تولیدکننده اتوماتیک با استفاده از تحلیل ساختار کدهای Go، انواع دادهها و پرسوجوهای مورد نیاز فرانتاند را تشخیص داده و آنها را میسازد. این کار به کاهش خطاهای ممکن در همرسانی دادهها کمک کرده و سرعت توسعه نرمافزار را افزایش میدهد. به این ترتیب، توسعهدهندگان میتوانند بر روی بهبود ویژگیهای کاربردی و نوآوریهای نرمافزاری تمرکز کنند.
🟣لینک مقاله:
https://golangweekly.com/link/160167/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go2type: A Go to TypeScript API Client Generator
🟢 خلاصه مقاله:
مقاله مورد نظر به بررسی یک ابزار خط فرمان ساده (CLI) میپردازد که برای تولید انواع دادهها و پرسوجوها در رابطهای کاربری برنامههای تحت وب استفاده میشود، به ویژه آن دسته که از بکاندهای نوشته شده با زبان برنامهنویسی Go استفاده میکنند. این ابزار به توسعهدهندگان کمک میکند تا با کاهش نیاز به نوشتن کدهای تکراری و زمانبر، بهرهوری خود را افزایش داده و تطابق بین کد بکاند و فرانتاند را بهبود ببخشند. این تولیدکننده اتوماتیک با استفاده از تحلیل ساختار کدهای Go، انواع دادهها و پرسوجوهای مورد نیاز فرانتاند را تشخیص داده و آنها را میسازد. این کار به کاهش خطاهای ممکن در همرسانی دادهها کمک کرده و سرعت توسعه نرمافزار را افزایش میدهد. به این ترتیب، توسعهدهندگان میتوانند بر روی بهبود ویژگیهای کاربردی و نوآوریهای نرمافزاری تمرکز کنند.
🟣لینک مقاله:
https://golangweekly.com/link/160167/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - dx314/go2type: A Go to TypeScript API client generator.
A Go to TypeScript API client generator. Contribute to dx314/go2type development by creating an account on GitHub.
Forwarded from LinConfig (Pakrohk)
سلام و درود خدمت دوستان عزیز دنبال کننده لین آکادمی
از امروز به مدت یک ماه، در کنال لین کانفیگ یک مسابقه داریم که طبق اون شما کانفیگ های زیبای خودتون از محیط دسکتاپتون رو برای دوست عزیزمون دلاتو میفرستید و اون برای نظر سنجی ارسالش می کنه توی کانال.
قوانین هم سادست :
۱ - باید یک عکس fastfetch داشته باشید حتما.
۲ - تصاویر شما حتما باید از سیستم عاملی آزاد یا اوپن سورس باشه.
۳ - از ارسال بگراند های ناهنجار بپرهیزید ( خشونت زیاد یا پورنوگرافی )
روش رای دادن :
❤️ = محشر
👍 = خوب
👎 = بد
منتظر ارسال های زیبای شما هستیم.
@LinConfig @LinAcademy
از امروز به مدت یک ماه، در کنال لین کانفیگ یک مسابقه داریم که طبق اون شما کانفیگ های زیبای خودتون از محیط دسکتاپتون رو برای دوست عزیزمون دلاتو میفرستید و اون برای نظر سنجی ارسالش می کنه توی کانال.
قوانین هم سادست :
۱ - باید یک عکس fastfetch داشته باشید حتما.
۲ - تصاویر شما حتما باید از سیستم عاملی آزاد یا اوپن سورس باشه.
۳ - از ارسال بگراند های ناهنجار بپرهیزید ( خشونت زیاد یا پورنوگرافی )
روش رای دادن :
❤️ = محشر
👍 = خوب
👎 = بد
منتظر ارسال های زیبای شما هستیم.
@LinConfig @LinAcademy
Forwarded from Meitix
عمو باب میگه هر چقدر میریم جلوتر عمر نرم افزارها طولانی تر میشه و بیشتر maintain میشن. کد بد در کوتاه و بلند هزینه maintain رو بالا میبره و هیچ آورده ای نداره و خلاصه دلخوش نباشید به این todo های که میزنید که
بعد اصلاح کنید.
میفرمایند:
همین باعث میشه که بیشتر از قبل تلاش میکنی رو یک پروژه ولی خروجیات کمتر بید. و اینجاس که متوجه میشیم معماریمون ضعیفه
بعد اصلاح کنید.
میفرمایند:
The only way to go fast, is to go well.
همین باعث میشه که بیشتر از قبل تلاش میکنی رو یک پروژه ولی خروجیات کمتر بید. و اینجاس که متوجه میشیم معماریمون ضعیفه
The goal of software architecture is to minimize the human resources required to build and maintain the required system.
Forwarded from Gopher Academy
✍️Massimo DevMassimo Dev
سوال مصاحبه: چطور میشه بررسی کرد که نام کاربری بین یک میلیارد کاربر تکراری نباشه؟ 🤔
این روزها با رشد سریع کسبوکارها، ثبتنام کاربرهای جدید هم به یه چالش تبدیل شده. یکی از مهمترین بخشها اینه که مطمئن بشیم هر کاربر یه نام کاربری منحصربهفرد داره. اخیراً در مورد این موضوع یه تحقیقی کردم و دو راهحل خوب پیدا کردم: استفاده از حافظه Redis و فیلتر Bloom. هر دو کمک میکنن سریع و بدون فشار زیاد به سیستم، نام کاربری جدید رو بررسی کنیم.
### مشکل کجاست؟ 😟
اگه بخوایم از روشهای سنتی و دیتابیس برای بررسی نام کاربری استفاده کنیم، با زیاد شدن کاربرها سیستم کند میشه و با مشکلات زیر روبهرو میشیم:
- کندی در درخواستها ⌛️
- فشار زیاد به دیتابیس💥 که باعث مصرف زیاد منابع میشه.
- مشکل در مقیاسپذیری 🚧 یعنی وقتی تعداد درخواستها زیاد بشه، سرور نمیتونه همه رو مدیریت کنه.
### استفاده از Redis: سریع ولی پرمصرف ⚡️💾
ردیس Redis کمک میکنه که بررسی نام کاربری خیلی سریع بشه، چون دادهها رو توی حافظه ذخیره میکنه. اما این روش یه مشکل بزرگ داره: حافظه زیادی مصرف میکنه. مثلاً برای یک میلیارد نام کاربری به 15 گیگابایت حافظه نیاز داریم! 😳 که تو سیستمهای بزرگ، خیلی پرهزینه و غیرعملی میشه.
### فیلتر Bloom: ساده، بهینه و کممصرف 💡
حالا بریم سراغ فیلتر Bloom. این فیلتر یه روش خیلی بهینهتره که فضای حافظه خیلی کمتری استفاده میکنه. برای همون یک میلیارد نام کاربری، فقط 1.67 گیگابایت حافظه نیاز داره! 😎
اما فیلتر Bloom چیه؟ بذار یه مثال ساده بزنم:
فرض کن یه کیف داری که یه سری جیب کوچیک داره. هر بار که میخوای یه نام کاربری جدید رو ذخیره کنی، یه سری کلید (یعنی همون الگوریتمهای هش) بهت میگه تو کدوم جیبهای کیف بذاری. بعد اگه بخوای ببینی اون نام کاربری قبلاً ذخیره شده یا نه، فقط کافیه جیبهای مشخص شده رو چک کنی. اگه تو هر جیب چیزی باشه، یعنی احتمالاً اون نام کاربری قبلاً استفاده شده. ولی اگه یکی از جیبها خالی باشه، مطمئنی که اون نام کاربری وجود نداره. 😄
با این روش:
- حافظه کمی استفاده میشه 🧠
- سرعت بررسی خیلی بالاست ⚡️
البته یه نکته کوچیک داره: بعضی وقتا ممکنه به اشتباه بگه که یه نام کاربری هست در حالی که نیست (این همون خطای مثبت یا False Positive هست)، ولی در اکثر مواقع این خطا قابل چشمپوشیه.
### نتیجهگیری 🎯
اگه با سیستمهایی کار میکنید که میلیونها یا حتی میلیاردها کاربر دارن، فیلتر Bloom یه راهحل خیلی بهینه و هوشمند برای بررسی یونیک بودن نام کاربریه. هم توی حافظه صرفهجویی میکنه، هم سرعت بررسی رو بالا نگه میداره.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
سوال مصاحبه: چطور میشه بررسی کرد که نام کاربری بین یک میلیارد کاربر تکراری نباشه؟ 🤔
این روزها با رشد سریع کسبوکارها، ثبتنام کاربرهای جدید هم به یه چالش تبدیل شده. یکی از مهمترین بخشها اینه که مطمئن بشیم هر کاربر یه نام کاربری منحصربهفرد داره. اخیراً در مورد این موضوع یه تحقیقی کردم و دو راهحل خوب پیدا کردم: استفاده از حافظه Redis و فیلتر Bloom. هر دو کمک میکنن سریع و بدون فشار زیاد به سیستم، نام کاربری جدید رو بررسی کنیم.
### مشکل کجاست؟ 😟
اگه بخوایم از روشهای سنتی و دیتابیس برای بررسی نام کاربری استفاده کنیم، با زیاد شدن کاربرها سیستم کند میشه و با مشکلات زیر روبهرو میشیم:
- کندی در درخواستها ⌛️
- فشار زیاد به دیتابیس💥 که باعث مصرف زیاد منابع میشه.
- مشکل در مقیاسپذیری 🚧 یعنی وقتی تعداد درخواستها زیاد بشه، سرور نمیتونه همه رو مدیریت کنه.
### استفاده از Redis: سریع ولی پرمصرف ⚡️💾
ردیس Redis کمک میکنه که بررسی نام کاربری خیلی سریع بشه، چون دادهها رو توی حافظه ذخیره میکنه. اما این روش یه مشکل بزرگ داره: حافظه زیادی مصرف میکنه. مثلاً برای یک میلیارد نام کاربری به 15 گیگابایت حافظه نیاز داریم! 😳 که تو سیستمهای بزرگ، خیلی پرهزینه و غیرعملی میشه.
### فیلتر Bloom: ساده، بهینه و کممصرف 💡
حالا بریم سراغ فیلتر Bloom. این فیلتر یه روش خیلی بهینهتره که فضای حافظه خیلی کمتری استفاده میکنه. برای همون یک میلیارد نام کاربری، فقط 1.67 گیگابایت حافظه نیاز داره! 😎
اما فیلتر Bloom چیه؟ بذار یه مثال ساده بزنم:
فرض کن یه کیف داری که یه سری جیب کوچیک داره. هر بار که میخوای یه نام کاربری جدید رو ذخیره کنی، یه سری کلید (یعنی همون الگوریتمهای هش) بهت میگه تو کدوم جیبهای کیف بذاری. بعد اگه بخوای ببینی اون نام کاربری قبلاً ذخیره شده یا نه، فقط کافیه جیبهای مشخص شده رو چک کنی. اگه تو هر جیب چیزی باشه، یعنی احتمالاً اون نام کاربری قبلاً استفاده شده. ولی اگه یکی از جیبها خالی باشه، مطمئنی که اون نام کاربری وجود نداره. 😄
با این روش:
- حافظه کمی استفاده میشه 🧠
- سرعت بررسی خیلی بالاست ⚡️
البته یه نکته کوچیک داره: بعضی وقتا ممکنه به اشتباه بگه که یه نام کاربری هست در حالی که نیست (این همون خطای مثبت یا False Positive هست)، ولی در اکثر مواقع این خطا قابل چشمپوشیه.
### نتیجهگیری 🎯
اگه با سیستمهایی کار میکنید که میلیونها یا حتی میلیاردها کاربر دارن، فیلتر Bloom یه راهحل خیلی بهینه و هوشمند برای بررسی یونیک بودن نام کاربریه. هم توی حافظه صرفهجویی میکنه، هم سرعت بررسی رو بالا نگه میداره.
➖➖➖➖➖➖➖➖
👑 @gopher_academy