Gopher Academy
3.34K subscribers
918 photos
40 videos
279 files
2K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🖐درود به همه دوستان گوفری

😍ما یه چنل زدیم مربوط به موقعیت های شغلی گولنگ (خارجی و داخلی) رو داخلش قرار میدیم

🔷️ از این به بعد موقعیت های شغلی گولنگ و رزومه های کارجویان رو داخل چنل زیر قرار میدیم


😉 و حتی دوستانی که دنبال موقعیت شغلی گولنگ هستن می تونن رزومه خودشون رو بدن به ما و براشون توی چنل بزاریم(فقط رزومه های گولنگی مورد قبول هست)

👇👇👇جوین بدید به چنل جدید 👇👇👇

@gopher_job
👍9🍾21🔥1🕊1
یک سایت جامع برای یادگیری و آشنایی با ابزارها و پروژه‌های اکوسیستم کلود نیتیو که می‌تونه توی مصاحبه‌ها و پیشرفت شغلی‌تون بهتون کمک کنه.

#cloudnative #system #design #devops #kubernetes

https://landscape.cncf.io/


👑 @gopher_academy
👍11
Gopher Academy pinned «🖐درود به همه دوستان گوفری 😍ما یه چنل زدیم مربوط به موقعیت های شغلی گولنگ (خارجی و داخلی) رو داخلش قرار میدیم 🔷️ از این به بعد موقعیت های شغلی گولنگ و رزومه های کارجویان رو داخل چنل زیر قرار میدیم 😉 و حتی دوستانی که دنبال موقعیت شغلی گولنگ هستن می تونن…»
یکی از مهم ترین قابلیت های گولنگ concurrency هست که قدرتش رو از go scheduler داره

این ویدیو سعی کرده بصورت مصور و عمیق scheduler رو بررسی کنه که کلی نکته داره و میتونه دید خوبی به شما بده در مورد نحوه کارش

Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency

https://youtu.be/-K11rY57K7k?si=1Qdlhna11caQIXFK

#DevTwitter | <Hossein Nazari/>


👑 @gopher_academy
🔥82👍1🕊1
‏اگر دوست دارید بدونید که در لایه های مختلف برنامه ای که توسعه دادید چه ابزار هایی هست که بتونید ازشون استفاده کنید (از دیتابیس گرفته تا CI/CD) این سایت احتمالا کمکتون کنه.

به اضافه اطلاعات خیلی خوبی راجع به هر ابزار داده:

landscape.cncf.io

#DevTwitter | <Reza/>

👑 @gopher_academy
👍8🔥2
یک نقشه تعاملی عااالی از کرنل لینوکس Linux kernel
خدایش زحمت کشیده
یک مرجع عالی ،
makelinux.github.io/kernel/map/

#DevTwitter | <MehrdadLinux/>

👑 @gopher_academy
7
🎃

👑 @gopher_academy
🎃8👍2🍾2
🎯کتاب
Seven Concurrency Models in Seven Weeks

🌷 این کتاب به بررسی مدل های مختلف برای مدیریت همزمانی در نرم‌افزار می‌پردازد. این مدل‌ها شامل "Thread and Locks"، "برنامه‌نویسی تابعی"، "مدل Actor"، "فرآیندهای ترتیبی ارتباطی"، "پردازش جریان"، "پیمانه‌بندی داده‌ها"، و "معماری Lambda" هستند. هر فصل به طور عملی و با مثال‌هایی از دنیای واقعی، مزایا و چالش‌های هر مدل را توضیح می‌دهد. کتاب هدف دارد تا توسعه‌دهندگان را برای بهره‌برداری از چند هسته‌ای‌ها، مدیریت هزاران کاربر و داده‌های بزرگ، و اطمینان از کارکرد پایدار نرم‌افزار در مقابل خطاهای سخت‌افزاری و نرم‌افزاری آماده کند.


👑 @gopher_academy
👍102🔥1💯1🍾1
✍️ Rouzbeh SabzeheiRouzbeh Sabzehei


تو سیستم هایی که باید از قدرت پردازش های Concurrent بهره گرفته بشه یا به اصطلاح Multi-thread نوشته بشه. یکی از دغدغه ها همیشه بحث دسترسی به دیتای Share بین Thread های مختلف هست. اگر این دسترسی (از نوع Read و یا Write ) با استفاده از تکنیک های خاصی انجام نشه میتونه مشکلاتی مثل Data Race و یا Undefined Behavior رو بوجود بیاره.

یکی از راه حل ها استفاده از روش Lock هست که معمولا از Mutex یا RwLock و یا روش های مرسوم دیگه استفاده میشه. جدا از افت پرفورمنسی که این روش داره اگر به درستی استفاده نشه ممکنه منجر به Deadlock و یا مشکلات دیگر Sync نگه داشتن دیتا بشه. اینجور باگ ها بسیار خطرناک هستند و به دلیل پیچیدگی لایه های مختلف از اپلیکیشن گرفته تا سیستم عامل و CPU در زمان و نحوه اجرای این Lock ها ممکنه احتمال رخ دادنش کم باشه و خیلی دیر شناسایی بشه.

توی مطالعه هایی که انجام شده استفاده از روش های Lock-Free (استفاده از Atomic ها) میتونه این مشکلات رو حل کنه و تو مواردی تونسته پرفورمنس رو نسبت به حالت مشابه استفاده از Mutex به نزدیک 63% افزایش بده. یکی از کلیدی ترین الگوریتم ها توی این مطالعات CAS یا Compare and Swap بوده.

البته استفاده از Atomic ها تو بعضی سناریو ها میتونه پیچیدگی کد رو چند برابر کنه و ممکنه رو بعضی معماری های پردازنده های مختلف جواب نده.

کد زیر یک نمونه ساده از مقایسه Mutex و Atomic ها برای یک سناروی مشابه افزایش یک شمارنده عددی هست که با Rust نوشته شده.

👑 @gopher_academy
👍8🔥1💅1
✍️ Rouzbeh SabzeheiRouzbeh Sabzehei

ا استفاده از تکنیک Const Expression میتونید موقع کامپایل محاسبات و پردازش هاتون رو انجام بدید. این روش اجازه میده محاسبات مختلفتون موقع ران تایم نباشه و اینجوری سرعت نرم افزار رو تو محاسبات مشخص بالا ببرید. تو ++C میتونید با constexpr و در Rust با const از این ویژگی استفاده کنید.

تو مقاله اخیری که میخوندم برای یک الگوریتم ساده که حلقه ای بود برای محاسبه فاکتوریل یک سری اعداد استفاده از این روش تونسته بود سرعت رو از 2.69 نانوثانیه به 0.245 نانوثانیه در هر پیمایش حلقه کاهش بده یعنی نزدیک 91% بهبود سرعت !


👑 @gopher_academy
👍3🎃2💅2🔥1🍓1
✍️ Rouzbeh SabzeheiRouzbeh Sabzehei

یکی از مواردی که تاثیر زیادی تو Performance نرم افزار داره استفاده از تکنیک Cache Warming هست. به این صورت که دیتای موردنیاز برای پردازش آماده میشه و از قبل در لایه های Cache پردازنده ( L1, L2 و L3 ) Load میشه. در ادامه CPU برای دسترسی به دیتا یا Instruction های موردنیاز لازم نیست از RAM دیتا رو بگیره و میتونه از دیتایی که Cache کرده استفاده کنه.

به طور تقریبی خوندن دیتا از L1 نزدیک ۲۰۰ برابر و L2 نزدیک ۲۰ برابر سریعتر از RAM هست. استفاده از الگو هایی مثل Pre Fetching و Data Oriented Design میتونه باعث Cache Warming بشه


👑 @gopher_academy
🔥7👍21
🔹این مقاله به بررسی ویژگی‌های جدید و بهبودهای اعمال شده در نسخه 1.23 زبان برنامه‌نویسی Go می‌پردازد.

نکات اصلی:

🔻معرفی Iterators: بسته‌های iter، slices و maps برای کار با توالی‌های داده به صورت استاندارد ارائه شده‌اند.
🔻بهبود تایمرها: مشکلات مربوط به توقف و بازنشانی تایمرها بهبود یافته است.

🔻تInterning مقادیر: بهینه‌سازی حافظه با ذخیره تنها یک نمونه از مقادیر تغییرناپذیر انجام شده است.
🔻مدیریت کوکی‌ها و فایل سیستم: قابلیت‌های جدیدی برای مدیریت کوکی‌ها و کپی‌کردن فایل‌ها معرفی شده است.
🔻ابزارها و runtime: ابزارهای جدیدی برای جمع‌آوری داده‌های تلمتری و بهبود عملکرد trace و vet اضافه شده است.

نتایج مهم:

🔻افزایش کارایی و ساده‌سازی مدیریت داده‌ها.
🔻بهبود عملکرد تایمرها و استفاده بهینه‌تر از حافظه.
🔻ارتقاء قابلیت‌های ابزارها و runtime برای تسهیل کار برنامه‌نویسان.

🟢Go 1.23: Interactive release notes
🔵https://antonz.org/go-1-23/


👑 @gopher_academy
👍5🕊21
چقدر از مطالبی که گذاشته میشه راضی هستید؟
درکل از روند فعالیت کانال راضی هستید؟
اگر نظر پیشنهادی انتقادی داشتید توی بیو کانال ای دی من هست
Final Results
64%
عالیه
34%
متوسط
5%
ضعیف
11💯1
Gopher Academy pinned «چقدر از مطالبی که گذاشته میشه راضی هستید؟
درکل از روند فعالیت کانال راضی هستید؟
اگر نظر پیشنهادی انتقادی داشتید توی بیو کانال ای دی من هست
»
مقاله "First Impressions of Go 1.23's range-over-func Feature" به بررسی ویژگی جدید "range-over-func" در Go 1.23 می‌پردازد. نویسنده ابتدا با تردید به این ویژگی نگاه می‌کند، اما پس از بررسی عملی و پیاده‌سازی آن در کتابخانه Kivik، به نتایج مثبتی می‌رسد. ویژگی range-over-func امکان ایجاد iteratorهایی با استفاده از توابع را فراهم می‌کند که باعث ساده‌تر شدن کد و افزایش خوانایی آن می‌شود. نتیجه‌گیری نویسنده این است که این ویژگی یادگیری پیچیده‌ای ندارد و می‌تواند به بهبود کدهای موجود کمک کند.


🟢Go 1.23: Interactive release notes
🔵https://boldlygo.tech/posts/2024-07-18-range-over-func/


👑 @gopher_academy
👍61🔥1
🎂🎊امروز زادروز چنل گوفر آکادمی هست🎊🎂

🥂امروز ۸ مرداد دقیقا روزی بود که گوفر آکادمی متولد شد🎂

🍾توی این مسیر کلی چیز یادگرفتم و حتی کلی رفیق خوب پیدا کردم

👑روز های خوب و بد زیادی داشتم تا جای که بود تونستم مقالات مفید و بروز براتون بذارم

🌷کانال ما چهارشنبه ۸ مرداد سال ۹۹ شروع به فعالیت خودش کرد یعنی ۴ سال میگذره از عمر این چنل (خیلی کوچیک بودیم اما زود بزرگ شدیم با تجربه تر شدیم در کنار شما)

🖐 دوستان این چنل ما رو حمایت کنید که همچنان با قدرت کارش رو ادامه بده👑🫡🍾🌷💸🚬


🟢اگر تلگرام پرمیموم داری boost کن 👇

🔵 https://t.me/gopher_academy?boost

🟢لینک حمایت مالی👇

🔵 https://www.coffeete.ir/gopher_academy

🟢 اگرم سوالی نظری انتقادی بود درخدمتم👇

🔵 @mrbardia72

🟢اگر دنبال تبلیغ هستی اینجا پیام بده👇
🔵 @labdon_ads
🍾14👍32🏆1🎃1
در Go، بین دو نوع داده‌ی اشاره‌گر به یک برش از ساختارها (مثل var x *[]Book)
و برش از اشاره‌گرها به ساختارها (مثل var y []*Book) تفاوت‌های مهمی وجود دارد
که می‌تواند بر کارایی و نحوه استفاده از آنها تأثیر بگذارد.

تفاوت‌ها و مزایا/معایب

🔵var x *[]Book:


نوع داده: اشاره‌گر به یک برش از Book.

کاربرد: بیشتر زمانی مفید است که بخواهید برش اصلی را تغییر دهید (مثلاً اندازه آن را افزایش دهید).

مزایا: تغییر اندازه برش (مثل append) مستقیماً بر برش اصلی تأثیر می‌گذارد.

معایب: استفاده پیچیده‌تر از نظر دسترسی به داده‌ها و مدیریت حافظه. استفاده از اشاره‌گر به یک برش معمولاً نیازمند تخصیص و مدیریت دستی حافظه است.

🔵var y []*Book:


نوع داده: برشی از اشاره‌گرها به Book.

کاربرد: معمولاً زمانی استفاده می‌شود که بخواهید بر روی مجموعه‌ای از ساختارها کار کنید و هر کدام از آنها ممکن است به طور مستقل تغییر کند.

مزایا: ساده‌تر برای استفاده و مدیریت. دسترسی مستقیم به هر عنصر بدون نیاز به دنباله‌روی اشاره‌گرها.

معایب: ممکن است نیاز به تخصیص حافظه برای هر عنصر داشته باشد.

بهینه‌تر بودن
در اغلب موارد، استفاده از var y []*Book بهینه‌تر و ساده‌تر است. زیرا:

خوانایی و سادگی: کد ساده‌تر و خواناتر است. دسترسی به عناصر برش بدون نیاز به دنباله‌روی اشاره‌گرها انجام می‌شود.
مدیریت حافظه: برش‌ها در Go به صورت خودکار مدیریت می‌شوند و نیازی به مدیریت دستی حافظه نیست.


👑 @gopher_academy
👍101
مفهوم "propagate" یا "پراپاگیت کردن" در علوم کامپیوتر و برنامه‌نویسی به معنای انتقال یا گسترش اطلاعات، سیگنال‌ها، تغییرات، یا خطاها از یک بخش به بخش دیگر سیستم است. به عنوان مثال، در شبکه‌های عصبی مصنوعی، پراپاگیت کردن شامل انتقال سیگنال‌های ورودی از طریق لایه‌های مختلف شبکه به خروجی‌ها است. در مدیریت خطا، پراپاگیت کردن خطا به معنای انتقال یک خطا از یک بخش کد به بخش دیگر است که ممکن است باعث ایجاد خطاهای مرتبط در آن بخش‌ها شود. این مفهوم در بسیاری از زمینه‌های علمی و مهندسی به کار می‌رود.


👑 @gopher_academy
👍91🍾1
مقاله موجود در سایت Blacksmith به معرفی یک سرویس جدید برای اجرای GitHub Actions می‌پردازد که به جای استفاده از سخت‌افزارهای قدیمی سرور، از CPUهای پیشرفته مخصوص بازی استفاده می‌کند. این سرویس تا 2 برابر سریع‌تر و بیش از 50٪ ارزان‌تر از رقبای خود مانند GitHub است. Blacksmith با ارائه ابزارهای قوی برای ساخت سریع‌تر و ارزان‌تر پروژه‌ها، بهره‌وری توسعه‌دهندگان را افزایش می‌دهد. این سرویس با پشتیبانی از ساخت‌های همزمان نامحدود، I/O سریع با NVMe، و قابلیت‌های امنیتی بالا، یک انتخاب جذاب برای تیم‌های توسعه است.

🟢Run GitHub Actions Up to 2x Faster at Half the Cost
🔵https://blacksmith.sh/


👑 @gopher_academy
💋42
در این مقاله به بررسی روشی کارآمد برای شناسایی باگ‌های نرم‌افزاری با استفاده از ترکیب git bisect و مقایسه‌های مبتنی بر هش می‌پردازد. این روش در زبان Go برای شناسایی کامیت‌های مشکل‌دار که باعث ایجاد خطا می‌شوند، استفاده می‌شود. git bisect با جستجوی باینری در تاریخچه کامیت‌ها و استفاده از هش برای مقایسه‌ها، فرآیند شناسایی باگ‌ها را تسریع می‌کند. نتایج نشان می‌دهند که این روش زمان شناسایی کامیت‌های مشکل‌دار را به طور قابل توجهی کاهش می‌دهد و خودکارسازی آن تلاش دستی را کمتر می‌کند.

برای مثالی عملی از روش اشکال‌زدایی مبتنی بر bisect، فرض کنید شما در حال کار روی یک پروژه نرم‌افزاری هستید و متوجه می‌شوید که یکی از تست‌های پروژه اخیراً شکست خورده است. شما می‌دانید که این تست در گذشته به درستی کار می‌کرد. برای شناسایی کامیت مشکل‌دار، می‌توانید از git bisect استفاده کنید.

ابتدا git bisect start را اجرا کنید.
سپس کامیتی که تست در آن سالم است را با git bisect good و کامیتی که تست در آن شکست خورده را با git bisect bad مشخص کنید.
git bisect به صورت خودکار به میانه‌ی تاریخچه کامیت‌ها می‌رود و شما باید تست را اجرا کنید تا وضعیت تست (سالم یا شکسته) را مشخص کنید.
این فرآیند را تکرار کنید تا کامیت مشکل‌دار شناسایی شود.

🟢Hash-Based Bisect Debugging in Compilers and Runtimes
🔵https://research.swtch.com/bisect


👑 @gopher_academy
👍8
ساختار داده‌های interface:

در زمان کامپایل، هر interface به صورت یک ساختار داده‌ای خاص ذخیره می‌شود که شامل دو بخش اصلی است:
نوع (Type): نوع داده‌ای که پیاده‌سازی واقعی را انجام می‌دهد.

مقدار (Value): مقداری که در این نوع داده‌ای خاص ذخیره شده است.

این ساختار داده‌ای به نام interface value شناخته می‌شود. یک interface در واقع از دو بخش تشکیل شده است:

یک اشاره‌گر به نوع پیاده‌سازی (در واقع نوع داده‌ای که متدهای interface را پیاده‌سازی کرده است).
یک اشاره‌گر به مقدار واقعی آن نوع داده.


👑 @gopher_academy
🔥6👍3🕊1🏆1🍓1