Gopher Academy
3.83K subscribers
923 photos
40 videos
280 files
2.08K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
The Two Reasons I Prefer Passing Struct Pointers Around

🟢 خلاصه مقاله:
استفاده از اشاره‌گرها یا نکردن آن هنگام ارسال ساختارها به توابع ممکن است گاهی اوقات دشوار باشد. در مقاله‌ای که توسط پرسلاو نوشته شده، رویکردهای مبتنی بر اصول طراحی مبتنی بر دامنه (DDD) پیشنهاد شده تا در این تصمیم‌گیری کمک کند. این اصول به توسعه‌دهندگان کمک می‌کند تا کدی پایدارتر و قابل نگهداشت تر تولید کنند. معیارهایی که پرسلاو ارائه می‌دهد، شامل بررسی اندازه ساختار، پرهیز از تکرار داده‌ها، حفاظت از داده‌ها در برابر تغییرات ناخواسته، و بهبود کارایی برنامه با کاهش مصرف حافظه است. توصیه می‌شود که از اشاره‌گرها استفاده شود زمانی که ساختارها بزرگ هستند یا نیاز به مدیریت داده‌ها در محیط‌های چند نخی وجود دارد. این توصیه‌ها منجر به کدی می‌شود که نه تنها کارامدتر است بلکه از نظر منطقی نیز قابل فهم‌تر است.

🟣لینک مقاله:
https://preslav.me/2024/04/23/two-reasons-to-prefer-struct-pointers-in-golang/


👑 @gopher_academy
🔥32
🔵 عنوان مقاله
Gohalt: A General Purpose Throttling Library

🟢 خلاصه مقاله:
مقاله‌ای که مد نظر قرار دارد، به بررسی استفاده از زبان برنامه‌نویسی Go در ساخت سیستم‌های کنترلی مانند خط لوله‌های جریان محدود (throttling pipelines) و سیستم‌های محدودسازی نرخ (rate limiters) می‌پردازد. نکته جالب توجه در این مقاله، استقبال نویسنده از لوگوی گوفر استفاده شده برای زبان Go است. همچنین، آپدیت و پشتیبانی Go از نسخه 1.22 در این مقاله مورد توجه قرار گرفته است که نشان‌دهنده قابلیت ارتقا و تطبیق پذیری این زبان با نسخه‌های جدید است. این موضوعات به خوبی توضیح داده شده‌اند که چگونه می‌توان از Go برای توسعه سیستم‌های مدیریتی اثربخش تر و کارآمد استفاده کرد.

🟣لینک مقاله:
https://github.com/1pkg/gohalt


👑 @gopher_academy
👍41
🔵 عنوان مقاله
Using Go Instead of Bash for Scripts

🟢 خلاصه مقاله:
استفاده از زبان برنامه‌نویسی Go به جای اسکریپت‌های مخصوص به سیستم‌عامل‌ها به شما این امکان را می‌دهد که تنها یک بار اسکریپت خود را بنویسید و آن را بر روی تمامی پلتفرم‌ها به کار ببرید، بدون اینکه نیاز باشد زبان‌های اسکریپت‌نویسی خاص به هر سیستم‌عاملی را فرا بگیرید. با اینکه استفاده از Go ممکن است به مقدار بیشتری کدنویسی نیاز داشته باشد، اما این مسئله می‌تواند هزینه کوچکی باشد که مزایای آن، بویژه در زمینه‌ بهینه‌سازی و سهولت در نگهداری کد، بر هزینه‌های آن غلبه می‌کند. با استفاده از Go، دیگر نیازی به نوشتن چندین اسکریپت برای سیستم‌های مختلف وجود ندارد، که این امر می‌تواند به کاهش خطاها و صرفه‌جویی در وقت بینجامد.

🟣لینک مقاله:
https://golangweekly.com/link/159855/web


👑 @gopher_academy
👍5🍾1
در برنامه‌نویسی، مفاهیم همزمان (Synchronous) و ناهمزمان (Asynchronous) به نحوه اجرای عملیات‌ها و تعامل با سیستم اشاره دارند. در ادامه، تفاوت‌های کلیدی بین این دو نوع اجرای عملیات را بررسی می‌کنیم:

1. عملیات همزمان (Synchronous)
در عملیات همزمان، دستورات به ترتیب و یکی پس از دیگری اجرا می‌شوند. به این معنا که پردازش باید منتظر تکمیل یک عملیات شود تا عملیات بعدی آغاز شود.

ویژگی‌ها:
ترتیب خطی: دستورات به صورت خطی و به ترتیب اجرا می‌شوند.
مسدودکننده: تا زمانی که یک عملیات به پایان نرسیده باشد، عملیات بعدی شروع نمی‌شود.
ساده‌تر: پیاده‌سازی و درک آن معمولاً ساده‌تر است.
مثال:
در یک برنامه همزمان، اگر تابعی برای خواندن داده‌ها از یک فایل داشته باشید، برنامه تا زمانی که خواندن کامل نشود، متوقف می‌شود و سپس ادامه پیدا می‌کند.

2. عملیات ناهمزمان (Asynchronous)
در عملیات ناهمزمان، عملیات‌ها به طور هم‌زمان و مستقل از یکدیگر اجرا می‌شوند. این به این معناست که برنامه می‌تواند بدون منتظر ماندن برای تکمیل یک عملیات، به کار خود ادامه دهد.

ویژگی‌ها:
غیرترتیبی: عملیات‌ها به صورت مستقل و غیرترتیبی اجرا می‌شوند.
غیرمسدودکننده: برنامه می‌تواند به انجام کارهای دیگر ادامه دهد در حالی که عملیات‌های دیگر در پس‌زمینه در حال اجرا هستند.
پیچیده‌تر: پیاده‌سازی و مدیریت کد ناهمزمان می‌تواند پیچیده‌تر باشد و نیاز به مدیریت مناسب اشتباهات و همزمانی دارد.

👑 @gopher_academy
3👍7
🔵 عنوان مقاله
Cryptography in Go: AES Encryption

🟢 خلاصه مقاله:
مقاله‌ای که مطالعه کرده‌اید آخرین بخش از سه بخش برگرفته شده از کتاب جان درباره Go و رمزنگاری است. در این بخش، به چالش‌هایی در زمینه رمزنگاری و رمزگشایی با استفاده از AES در زبان برنامه‌نویسی Go پرداخته شده است. جان، مسائلی را در این زمینه مطرح کرده و سپس پاسخ‌ها و توضیحات مفصلی برای آنها ارائه داده است. این توضیحات شامل جزئیات فنی چگونگی استفاده از کتابخانه‌های AES و تکنیک‌های موثر برای ایمن‌سازی فرایند رمزنگاری در Go می‌باشد. این بخش به خوانندگان کمک می‌کند تا درک بهتری از کاربرد AES در عملیات رمزنگاری با Go به دست آورند و از طریق مثال‌های عملی، مهارت‌های خود را در این زمینه تقویت کنند.


🟣لینک مقاله:
https://golangweekly.com/link/159856/web


👑 @gopher_academy
4
🔵 عنوان مقاله
Streamline Your Product Delivery with monday dev

🟢 خلاصه مقاله:
مقاله‌ای که ارائه شده به بررسی ابزاری به نام "monday dev" می‌پردازد که فرآیند تولید و عرضه محصولات را تسریع بخشیده و ساده‌سازی می‌کند. این ابزار تمام مراحل مختلف توسعه محصول، از مرحله ایده‌پردازی تا عرضه نهایی، را در یک پلتفرم یکپارچه ارائه می‌دهد. استفاده از "monday dev" به تیم‌ها این امکان را می‌دهد که به طور موثرتر و هماهنگ‌تری کار کنند، به این ترتیب از پراکندگی منابع و زمان در جریان توسعه محصول جلوگیری می‌کند. این پلتفرم با ارائه امکانات و ابزارهای جامع، روند ایده‌پردازی تا تحویل محصول را بهینه‌سازی کرده و بدین ترتیب می‌تواند به تسریع در عرضه محصول کمک کند، در حالی که همزمان اطمینان حاصل می‌شود که تمامی جوانب مورد نیاز در نظر گرفته شده‌اند.

🟣لینک مقاله:
https://golangweekly.com/link/159869/web


👑 @gopher_academy
👍2
🔵 عنوان مقاله
Tokens for LLMs: Byte Pair Encoding in Go

🟢 خلاصه مقاله:
مقاله مورد بحث به بررسی نقش توکن‌ها در مدل‌های زبانی بزرگ (LLMs) می‌پردازد و تاکید دارد که فهم نحوه کدگذاری و کدگشایی این توکن‌ها به درک بهتر عملکرد LLM‌ها کمک می‌کند. توکن‌ها واحدهای اساسی داده‌ها هستند که در LLM‌ها برای مدل‌سازی زبان استفاده می‌شوند. این مقاله اشاره‌ای دارد به فرایند کاری LLM‌ها که شامل دو مرحله عمده‌ی کدگذاری و کدگشایی است. در مرحله کدگذاری، توکن‌ها به نمایش‌های عددی تبدیل می‌شوند که قابلیت پردازش توسط مدل را دارند، و در مرحله کدگشایی، خروجی‌های مدل به زبان طبیعی تبدیل می‌شوند که این امر امکان تولید متن به زبانی که برای انسان‌ها قابل فهم است را فراهم می‌آورد. این فرآیندها بنیادی برای توانایی LLM‌ها در درک و تولید زبان به شکلی که ما آن را تجربه می‌کنیم هستند. از این رو، فهم این توکن‌ها و چگونگی کارکرد آن‌ها کلیدی است تا بتوان به طور کامل قابلیت‌ها و محدودیت‌های مدل‌های زبانی بزرگ را فهمید.

🟣لینک مقاله:
https://eli.thegreenplace.net/2024/tokens-for-llms-byte-pair-encoding-in-go/


👑 @gopher_academy
4
🔵 عنوان مقاله
How I Made My GitHub Profile README Dynamic

🟢 خلاصه مقاله:
مقاله‌ی مورد بحث شرح می‌دهد که چگونه می‌توان پروفایل GitHub خود را با افزودن اطلاعات اضافی مانند پست‌های وبلاگ، جذاب‌تر کرد. این کار به نظر پیچیده نیست و با استفاده از ابزارهایی که GitHub فراهم می‌کند، می‌توان اطلاعاتی مانند آخرین پست‌های وبلاگ یا سایر داده‌های مرتبط را به نمایه شخصی اضافه کرد. این شیوه می‌تواند به افزایش دیداری و جذابیت پروفایل کمک کند و توجه سایر کاربران و بالقوه کارفرمایان را به خود جلب نماید. این مقاله به طور خاص نشان می‌دهد که چگونه این فرآیند می‌تواند به صورت گام به گام پیاده‌سازی شود و نمونه‌هایی از این کاربرد را ارائه می‌دهد. این راهنمای کاربردی برای افرادی که به دنبال بهبود حضور آنلاین خود هستند، مفید خواهد بود.

🟣لینک مقاله:
https://tduyng.github.io/blog/dynamic-github-profile-readme/


👑 @gopher_academy
👍3🍾1
🔵 عنوان مقاله
µ micro: A Go-Powered Terminal-Based Text Editor

🟢 خلاصه مقاله:
"Micro" یک ویرایشگر متن است که با هدف جانشینی برای ویرایشگر "nano" طراحی و توسعه داده شده است. این پروژه که سال‌هاست در حال توسعه قرار دارد، به عنوان یک نمونه بالغ و خوب از پیاده‌سازی یک ویرایشگر متن با استفاده از زبان برنامه‌نویسی Go مطرح است. کد منبع میکرو در مخزن GitHub قابل دسترسی و مشاهده است، که نشان‌دهنده انتشار آزاد و قابلیت همکاری گسترده‌ای بین توسعه‌دهندگان می‌باشد. این ویرایشگر متن با هدف فراهم آوردن تجربه‌ای ساده و کارآمد در ویرایش متون برنامه‌نویسی و دیگر اسناد متنی راه‌اندازی شده است.

🟣لینک مقاله:
https://golangweekly.com/link/159257/web


👑 @gopher_academy
👍1
🔵 عنوان مقاله
Telemetry in Go 1.23 and Beyond

🟢 خلاصه مقاله:
در ابتدای سال 2023، Russ Cox مفهوم 'تلمتری شفاف' را برای زبان برنامه نویسی Go معرفی کرد. در ابتدا، این ویژگی به طور پیش‌فرض فعال بود، اما به دلیل واکنش‌های منفی برخی افراد، تبدیل به ویژگی اختیاری شد و در نسخه 1.23 Go گنجانده شد. در این مقاله، Robert توضیح می‌دهد که چگونه این نوع تلمتری می‌تواند مفید باشد، اگر شما تصمیم به فعال کردن آن داشته باشید. توانایی‌های تلمتری شفاف شامل جمع‌آوری داده‌ها و اطلاعات به صورت زمان‌واقعی درباره عملکرد و استفاده از نرم افزار است که می‌تواند کمک شایانی به بهبود و توسعه‌ی بیشتر Go کند. اما با وجود فواید آن، مساله حفظ حریم خصوصی و اطمینان از امنیت داده‌ها همچنان موضوع مهمی است که باید مورد توجه قرار گیرد.

🟣لینک مقاله:
https://golangweekly.com/link/159550/web


👑 @gopher_academy
1
🔵 عنوان مقاله
Garble: A Toolchain to Obfuscate Go Builds

🟢 خلاصه مقاله:
مقاله مورد نظر درباره روشی به نام Garble برای مخفی‌سازی اطلاعات در برنامه‌های نوشته شده با زبان برنامه‌نویسی Go بحث می‌کند. این ابزار، که مناسب برای نسخه‌های 1.22 و بالاتر Go است، به کاربران امکان می‌دهد تا اطلاعات کمتری را در مورد کد منبع اصلی در باینری‌های خود نگه دارند. با این حال، مقاله تأکید می‌کند که استفاده از روش‌های محافظتی مثل Garble به منزله تضمین امنیت کامل نیست، بلکه صرفاً یک راهکار برای کاهش میزان اطلاعات قابل استخراج از برنامه توسط افراد خارجی محسوب می‌شود. این تکنیک همچنین می‌تواند به عنوان یک بخشی از استراتژی امنیتی متعادل استفاده شود، اما نباید به عنوان تنها اقدام امنیتی در نظر گرفته شود.

🟣لینک مقاله:
https://golangweekly.com/link/159570/web


👑 @gopher_academy
1
🔵 عنوان مقاله
Go is Not Java

🟢 خلاصه مقاله:
مقاله بحث می‌کند که برخلاف تصور رایج، زبان برنامه‌نویسی Go ممکن است در واقع خصوصیات شی‌گرایی را بهتر از زبان‌های برنامه‌نویسی Java و C++ پیاده‌سازی کرده باشد. این استدلال براساس نظرات خالق مفهوم شی‌گرایی مطرح شده است. مقاله تاکید دارد که مفهوم شی‌گرا بیشتر به چگونگی کپسوله‌سازی داده‌ها، به ارمغان آوردن کد قابل استفاده‌ مجدد و ایجاد واسط‌های فراگیر برای اشیاء مربوط می‌شود، و این که زبان Go توانسته است این خصوصیات را به شیوه‌ای کارآمد فراهم آورد. نویسنده با اشاره به تفاوت‌های موجود بین Go و سایر زبان‌های برنامه‌نویسی معروف در پیاده‌سازی شی‌گرایی، چگونگی برتری Go را توضیح داده است. این مقاله می‌تواند دیدگاهی جدید به برنامه‌نویسان برای انتخاب زبان مناسب برای پروژه‌های آینده خود بدهد.

🟣لینک مقاله:
https://blog.vertigrated.com/go-is-not-java


👑 @gopher_academy
5👍5🍾3🔥1
🔵 عنوان مقاله
FAIR: A Go Library for Serving Resources 'Fairly'

🟢 خلاصه مقاله:
مقاله‌ای که مورد بررسی قرار گرفته است، به بررسی و طراحی سیستمی می‌پردازد که هدف آن تضمین انصاف در توزیع منابع در محیط‌هایی با منابع محدود است. این سیستم به گونه‌ای طراحی شده که منابع موجود را به طور مساوی بین چندین مشتری تقسیم می‌کند. این کار از طریق اعمال الگوریتم‌های خاصی که به حفظ تعادل و عدالت کمک می‌کنند، انجام می‌شود. توزیع عادلانه منابع نه تنها برای افزایش بهره‌وری ضروری است، بلکه در جلوگیری از تمرکز زیاد منابع در دست عده‌ای خاص و ایجاد فرصت‌های برابر برای همه ذینفعان نیز مهم می‌باشد. سیستم مورد مطالعه می‌تواند در زمینه‌های مختلفی مانند فناوری اطلاعات، بهداشت و درمان و توزیع منابع عمومی کاربرد داشته باشد. این رویکرد با تاکید بر اصل عدالت و انصاف، به دنبال یافتن راه‌حل‌هایی برای بهبود شرایط در موقعیت‌های محدودیت منابع است.

🟣لینک مقاله:
https://golangweekly.com/link/159873/web


👑 @gopher_academy
2
🔰تعریف مهندسی معکوس

مهندسی معکوس یک فرایند حل مسئله است که به جای آنکه از سوال آغاز شود، از پاسخ موجود آغاز می‌شود.

🔵کاربرد اصلی مهندسی معکوس در یکی از دو مورد زیر است:

🔴وقتی جواب یک مسئله را می‌دانیم. اما نمی‌دانیم این جواب پاسخ به چه سوالی است.

🔴وقتی سوال و پاسخ را می‌دانیم. اما نمی‌دانیم مسیر و فرایند رسیدن به این پاسخ چه بوده است.


👑 @gopher_academy
👍5🔥1
😢یادش بخیر دوران دبیرستان😅
چه ذوقی میکردیم وقتی اجرا میکردیم

👑 @gopher_academy
10🍾2👍1🔥1
🔵 عنوان مقاله
Awesome Ebitengine: A Curated List of Ebitengine Resources

🟢 خلاصه مقاله:
مقاله‌ی مورد بررسی به معرفی و بررسی Ebitengine، یک API قدرتمند برای برنامه‌نویسی گرافیک‌های 2D و توسعه بازی‌ها به زبان Go، پرداخته است. Ebitengine به دلیل عملکرد بالا و سادگی استفاده، در میان توسعه‌دهندگان بازی پرطرفدار است. مقاله شامل فهرستی از بازی‌هایی است که با استفاده از این API نوشته شده‌اند، کتابخانه‌هایی که می‌توان به همراه آن استفاده کرد، و اطلاعات بیشتری در این زمینه. این فهرست می‌تواند به عنوان منبعی کامل برای توسعه‌دهندگان علاقه‌مند به استفاده از Ebitengine و گسترش قابلیت‌های آن در پروژه‌های خود عمل کند و کمک‌های فراوانی در فرآیند توسعه بازی‌های 2D به آن‌ها ارائه دهد.

🟣لینک مقاله:
https://github.com/sedyh/awesome-ebitengine


👑 @gopher_academy
2
🔵 عنوان مقاله
Secure Randomness in Go 1.22

🟢 خلاصه مقاله:
این مقاله به بررسی تحولات اخیر در مولد تصادفی زبان برنامه‌نویسی Go پرداخته و تاثیرات آن بر امنیت را توضیح می‌دهد. نویسندگان تشریح کرده‌اند که چگونه پیش از این، استفاده از تابع تولید اعداد تصادفی در Go می‌توانست منجر به کد ناامن شود. با این حال، با ارتقاء به الگوریتم ChaCha(Rand8)، نه تنها سرعت و امنیت تولید اعداد تصادفی بهبود یافته، بلکه این تغییرات در نسخه 1.22 Go بدون نیاز به تغییری در کد برنامه‌ها، امنیت آن‌ها را افزایش داده است. این بهبودها نشان‌دهنده تمرکز بر روی امنیت بیشتر در استفاده‌های که نیازمند امنیت بالا هستند می‌باشد و Go را به ابزاری قوی‌تر برای توسعه‌دهندگان مبدل ساخته است. این تغییرات به ویژه برای کاربرد‌هایی که نیاز به تضمین امنیت دارند، مثل تراکنش‌های مالی یا ارتباطات رمزنگاری شده، حائز اهمیت است.

🟣لینک مقاله:
https://go.dev/blog/chacha8rand


👑 @gopher_academy
3
🔵 عنوان مقاله
Nimble Terminal Charts: Charting for Bubble Tea

🟢 خلاصه مقاله:
این مقاله راهکارهایی را برای رسم نمودارهای میله‌ای، خطی، پراکندگی، سری زمانی و سایر نمودارها با استفاده از Bubble Tea ارائه می‌دهد. Bubble Tea یک کتابخانه برنامه‌نویسی است که به توسعه‌دهندگان امکان می‌دهد برنامه‌های کاربردی اینترفیس متنی را طراحی و پیاده‌سازی کنند. مقاله همچنین با ذکر مثال‌های متعدد، نحوه استفاده از این کتابخانه برای ایجاد انواع مختلف نمودارها را نشان می‌دهد. این مثال‌ها به خوانندگان کمک می‌کند تا درک بهتری از قابلیت‌ها و کاربردهای این کتابخانه در زمینه تصویرسازی داده‌ها داشته باشند. در نهایت، این مقاله منبع ارزشمندی برای توسعه‌دهندگانی است که می‌خواهند با استفاده از Bubble Tea، نمودارهای زیبا و کاربردی را در برنامه‌های کاربردی خود ادغام کنند.

🟣لینک مقاله:
https://github.com/NimbleMarkets/ntcharts


👑 @gopher_academy
👍2
🔵 عنوان مقاله
go2type: A Go to TypeScript API Client Generator

🟢 خلاصه مقاله:
مقاله مورد نظر به بررسی یک ابزار خط فرمان ساده (CLI) می‌پردازد که برای تولید انواع داده‌ها و پرس‌وجوها در رابط‌های کاربری برنامه‌های تحت وب استفاده می‌شود، به ویژه آن دسته که از بک‌اند‌های نوشته شده با زبان برنامه‌نویسی Go استفاده می‌کنند. این ابزار به توسعه‌دهندگان کمک می‌کند تا با کاهش نیاز به نوشتن کدهای تکراری و زمان‌بر، بهره‌وری خود را افزایش داده و تطابق بین کد بک‌اند و فرانت‌اند را بهبود ببخشند. این تولیدکننده اتوماتیک با استفاده از تحلیل ساختار کدهای Go، انواع داده‌ها و پرس‌وجوهای مورد نیاز فرانت‌اند را تشخیص داده و آن‌ها را می‌سازد. این کار به کاهش خطاهای ممکن در هم‌رسانی داده‌ها کمک کرده و سرعت توسعه نرم‌افزار را افزایش می‌دهد. به این ترتیب، توسعه‌دهندگان می‌توانند بر روی بهبود ویژگی‌های کاربردی و نوآوری‌های نرم‌افزاری تمرکز کنند.

🟣لینک مقاله:
https://golangweekly.com/link/160167/web


👑 @gopher_academy
👍3🔥1
✍️Massimo DevMassimo Dev

سوال مصاحبه: چطور میشه بررسی کرد که نام کاربری بین یک میلیارد کاربر تکراری نباشه؟ 🤔

این روزها با رشد سریع کسب‌وکارها، ثبت‌نام کاربرهای جدید هم به یه چالش تبدیل شده. یکی از مهم‌ترین بخش‌ها اینه که مطمئن بشیم هر کاربر یه نام کاربری منحصربه‌فرد داره. اخیراً در مورد این موضوع یه تحقیقی کردم و دو راه‌حل خوب پیدا کردم: استفاده از حافظه Redis و فیلتر Bloom. هر دو کمک می‌کنن سریع و بدون فشار زیاد به سیستم، نام کاربری جدید رو بررسی کنیم.

### مشکل کجاست؟ 😟
اگه بخوایم از روش‌های سنتی و دیتابیس برای بررسی نام کاربری استفاده کنیم، با زیاد شدن کاربرها سیستم کند میشه و با مشکلات زیر روبه‌رو می‌شیم:
- کندی در درخواست‌ها ⌛️
- فشار زیاد به دیتابیس💥 که باعث مصرف زیاد منابع میشه.
- مشکل در مقیاس‌پذیری 🚧 یعنی وقتی تعداد درخواست‌ها زیاد بشه، سرور نمی‌تونه همه رو مدیریت کنه.

### استفاده از Redis: سریع ولی پرمصرف ⚡️💾
ردیس Redis کمک می‌کنه که بررسی نام کاربری خیلی سریع بشه، چون داده‌ها رو توی حافظه ذخیره می‌کنه. اما این روش یه مشکل بزرگ داره: حافظه زیادی مصرف می‌کنه. مثلاً برای یک میلیارد نام کاربری به 15 گیگابایت حافظه نیاز داریم! 😳 که تو سیستم‌های بزرگ، خیلی پرهزینه و غیرعملی میشه.

### فیلتر Bloom: ساده، بهینه و کم‌مصرف 💡
حالا بریم سراغ فیلتر Bloom. این فیلتر یه روش خیلی بهینه‌تره که فضای حافظه خیلی کمتری استفاده می‌کنه. برای همون یک میلیارد نام کاربری، فقط 1.67 گیگابایت حافظه نیاز داره! 😎

اما فیلتر Bloom چیه؟ بذار یه مثال ساده بزنم:
فرض کن یه کیف داری که یه سری جیب کوچیک داره. هر بار که می‌خوای یه نام کاربری جدید رو ذخیره کنی، یه سری کلید (یعنی همون الگوریتم‌های هش) بهت میگه تو کدوم جیب‌های کیف بذاری. بعد اگه بخوای ببینی اون نام کاربری قبلاً ذخیره شده یا نه، فقط کافیه جیب‌های مشخص شده رو چک کنی. اگه تو هر جیب چیزی باشه، یعنی احتمالاً اون نام کاربری قبلاً استفاده شده. ولی اگه یکی از جیب‌ها خالی باشه، مطمئنی که اون نام کاربری وجود نداره. 😄

با این روش:
- حافظه کمی استفاده میشه 🧠
- سرعت بررسی خیلی بالاست ⚡️

البته یه نکته کوچیک داره: بعضی وقتا ممکنه به اشتباه بگه که یه نام کاربری هست در حالی که نیست (این همون خطای مثبت یا False Positive هست)، ولی در اکثر مواقع این خطا قابل چشم‌پوشیه.

### نتیجه‌گیری 🎯
اگه با سیستم‌هایی کار می‌کنید که میلیون‌ها یا حتی میلیاردها کاربر دارن، فیلتر Bloom یه راه‌حل خیلی بهینه و هوشمند برای بررسی یونیک بودن نام کاربریه. هم توی حافظه صرفه‌جویی می‌کنه، هم سرعت بررسی رو بالا نگه می‌داره.


👑 @gopher_academy
7🔥1🍾1