Gopher Academy
3.47K 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
🎯داکرفایل چند مرحله ای برای ایمیج سبک و سریع در گولنگ🎯
.
🔴 https://vrgl.ir/gFl3o
.

🔰 @gopher_academy
🎯مدیریت سیگنال ها برای Graceful Shutdown در Go🎯
.
🔴 https://vrgl.ir/IWveB
.

🔰 @gopher_academy
🎯پیام‌رسان NATS با هسته‌ قوی و به شکلی باورنکردنی سریع!🎯
.
🔴 https://vrgl.ir/0Theu
.

🔰 @gopher_academy
🎯چند کتاب خوب برای برنامه نویس ها🎯
🔰 @gopher_academy
🎯microservice architecture at NETFLIX🎯
🧐🧐
🔰 @gopher_academy
نظرتون در مورد سری آموزشی gin web framework
Final Results
32%
خوب
10%
متوسط
6%
ضعیف
52%
وقت نشد مطالعه کنم
🔴Go (programming Language) Interview Questions And Answers🔴
.
🔹 https://www.wisdomjobs.com/e-university/go-programming-language-interview-questions.html

🔰 @gopher_academy
🔴MongoDB Interview Questions And Answers🔴
.
🔹 https://www.wisdomjobs.com/e-university/mongodb-interview-questions.html

🔰 @gopher_academy
🔴Linux Interview Questions And Answers🔴
.
https://www.wisdomjobs.com/e-university/linux-interview-questions.html

🔰 @gopher_academy
🔴Blockchain Interview Questions And Answers🔴
.
🔹 https://www.wisdomjobs.com/e-university/blockchain-interview-questions.html

🔰 @gopher_academy
🔴Amazon Web Services (AWS) Interview Questions And Answers🔴
.
🔹 https://www.wisdomjobs.com/e-university/amazon-web-services-aws-interview-questions-answers.html

🔰 @gopher_academy
🎯چه وقت باید از پوینتر استفاده کنیم؟
👇👇👇👇

🔹 https://t.me/gopher_academy/220


🔰 @gopher_academy
🎯مدیریت حافظه توسط برنامه‌نویس:🎯

🔹ز معروف‌ترین زبان‌های برنامه‌نویسی که کنترل حافظه را به خود برنامه‌نویس‌ها سپرده‌اند، می‌توان به c و ++c اشاره کرد. برنامه‌نویس‌های این زبان‌ها باید دائما حواسشون به حافظه و اینکه کِی حافظه را اختصاص و کِی حافظه‌ای را آزاد کنند، باشد.

🔹مزایا:

🔹سرعت بیشتر: شی بی‌مصرف در لحظه و بدون ایجاد وفقه‌ی خاصی ازبین رفته و فضای اختصاص داده شده به حافظه برمی‌گردد.
🔹سادگی: هیچ‌گونه پیچیدگی‌ای ندارد و پیاده‌سازی آن راحت می‌باشد(در واقع پیاده‌سازی‌ای ندارد).
🔹رفتار قابل پیش‌بینی: با توجه به اینکه همه چیز به عهده خود برنامه‌نویس می‌باشد در نتیجه رفتار غیرقابل پیش‌بینی رخ نمی‌دهد. به عنوان مثال یک مرتبه روند اجرای برنامه متوقف و garbage collector شروع به اجرا بکند.

🔹معایب:

🔹معروف‌ترین مورد: memory leaks. البته این مورد ممکن است با garbage collector هم اتفاق بیوفتد، اما در حالتی که حافظه توسط برنامه‌نویس کنترل می‌شود، معمولا بیشتر اتفاق می‌افتد.
🔹افزایش زمان توسعه(سردرد شدید): برنامه‌نویس باید حواسش به اشیا مختلف باشد. کِی حافظه را آزاد کنه و کِی نه و این سردرد به حساب میاد. نتیجه‌ی این بررسی دائم نتیجه‌ی کندتر شدن سرعت توسعه می‌باشد(توجه گردد که به هنگام بحث ما باید همه برنامه‌نویس‌ها را مدنظر داشته باشیم نه فقط برنامه‌نویس‌های senior‌).
🔹استفاده از حافظه خالی شده: بنا به دلایل مختلف ممکن است یک حافظه خالی شده، توسط خود برنامه‌نویس یا یک برنامه‌نویس دیگر دوباره مورد استفاده قرار می‌گیرد.
🔹خالی کردن حافظه خالی: برنامه‌نویس یک خانه از حافظه را که قبلا خالی شده، دوباره خالی می‌کند!


🔰 @gopher_academy
🎯مدیریت حافظه توسط زبان برنامه‌نویسی:🎯

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

🔹مزایا:

🔹افزایش سرعت توسعه و برنامه‌نویسی راحت: برنامه‌نویس به حافظه و اینکه حافظه کی خالی یا پر می‌شود، توجهی نمی‌کند. طبیعتا تو پروژه‌های حساس و یا چالشی که حجم حافظه کمه، ممکن است برنامه‌نویس مجبور باشد به این مورد اهمیت بدهد ولی به طور کلی در اکثر موارد مهم نمی‌باشد.
🔹کمتر شدن مشکلات امنیتی ناشی از مدیریت حافظه: در طی سالیان با کشف باگ‌ها و افزایش تجربه طراحان زبان‌های برنامه‌نویسی این روند رفته رفته بهتر شده است.
🔹رفع بعضی از معایب روش مدیریت دستی.

🔹معایب:

🔹مصرف منابع: برای اجرای دستورات خود garbage collector به cpu نیاز داریم. از سوی دیگر برای نگهداری اطلاعات موردنیاز GC(گاها به جای Garbage Colletor از GC استفاده خواهد شد) به حافظه نیاز داریم که به طبع این‌ها منابع را مصرف و هزینه دارند.
🔹کاهش performance: اول از همه بگم که این‌طوری نیست که یهو performance را خیلی کم کند، نه، اما طبیعتا باعث کاهش هرچند خیلی خیلی جزئی‌ای خواهد شد. طبیعتا در اکثر برنامه‌های موجود در جهان این میزان کاهش اصلا، اصلا، اصلا مطرح و مهم نیستند، چون کار performanceی خاصی انجام نمی‌دهند. اما این کاهش چرا رخ می‌دهد؟ GC نیاز به بررسی حافظه دارد، که این بررسی به زمان نیاز دارد و این زمان یک زمان مفید نمی‌باشد. توجه گردد که در مورد قبل ما درباره استفاده از cpu و حافظه حرف زدیم، اما اینجا درباره خود زمان لازم برای بررسی حرف می‌زنیم(البته طبق ادعای یک مقاله، درمواردی ممکن است، در مجموع نه تنها باعث کاهش performance نگردد بلکه باعث افزایش آن نیز ‌شود).
🔹غیرقابل پیش‌بینی بودن: اینکه garbage collector کی و کجای برنامه شروع به کار می‌کند، برای ما مشخص نیست و این ممکن است در شرایط خیلی خیلی خاصی مشکلاتی را به وجود بیارد. به عنوان مثال این اتفاق شاید شاید در یک سفینه فضایی یا راکتور هسته‌ای باعث مشکلاتی گردد!

🔰 @gopher_academy
🎯سه نکته اساسی را باید به هنگام بحث از garbage collectorها در نظر داشته باشیم. این سه عبارت‌اند از:🎯

🔹حافظه: میزان حافظه heap که برای برنامه اختصاص داده می‌شود.
🔹توان عملیاتی(Throughput): مقدار زمان اجرای کد برنامه نسبت به مدت زمانی که garbage collector اجرا می‌گردد. به عنوان مثال اگر بگیم Throughput برابر %99 می‌باشد یعنی در ۹۹ درصد مواقع کد اصلی(برنامه) اجرا شده و ۱ درصد هم برای garbage collector صرف شده است. طبیعتا هرچقدر این عدد به ۱۰۰ نزدیک‌تر باشد، به معنی بهتر بودن garbage collector خواهد بود.
🔹تاخیر: مدت زمانی که اجرای برنامه اصلی به خاطر garbage collector با تاخیر مواجه شده است.

🔰 @gopher_academy
بخش اول
🎯اضافه کردن Context به یک پروژه آزاد🎯
.
🔹 https://www.youtube.com/watch?v=O7aaLb3_eGU
.
🔴 مدرس Forud Ghafouri

🔰 @gopher_academy
This media is not supported in your browser
VIEW IN TELEGRAM
بخش دوم
🎯اضافه کردن Context به یک پروژه آزاد🎯
.
🔹 https://www.youtube.com/watch?v=mVvi8WoZqWw
.
🔴 مدرس Forud Ghafouri

🔰 @gopher_academy
Gopher Academy
بخش اول 🎯اضافه کردن Context به یک پروژه آزاد🎯 . 🔹 https://www.youtube.com/watch?v=O7aaLb3_eGU . 🔴 مدرس Forud Ghafouri 🔰 @gopher_academy
👆🏻👆🏻👆🏻👆🏻
چندتا نکته ای که توی بخش اول گفته شد
.
🔹سعی کنید برای interface ها کامنت بنویسید
🔹اگر تابعی دارید که قرار در ورودی این تابع یک استراکچر رو بگیره سعی کنید از pointer استفاده کنید. همیشه یه pointer کپی کردن بهتر از یه استراکچر کپی کردن هست چون این عمل باعث memory allcotion میشه. نمونه زیر رو درنظر بگیرید
func save (mu model.user){}

func save (mu *model.user){}
🔹سعی کنید context رو توی فایل اصلی راه اندازی کنید
🔹توی package ها تا سعی دارید از os.exit ااستفاده نکنید چون باعث میشه جلوی تمام defer ها رو بگیره و حتی جلوی باینری کردن رو هم میگیره
🔹بجای اینکه بیاید بعد هر تابع که می نویسید براش چک err انجام دهید یعنی بجای کد زیر
if err != nil {
log.Fatal(err)
}
از این دستور زیر استفاده کنید چون توی بدنه خودش از کد فوق استفاده می کنه یعنی اون nil رو برمیگردونه
return errors.warp(err,"your msg error")
🔹تا حد ممکن توی کتابخونه ها از دستور چاپ استفاده نکنید
🔹تابع بدون بدنه بعنی مثل زیر
func getInfo(a int)
اینجوری تابع رو هر وقت دیدید برید توی فولدر runtime اونجا هست
#note #tip

🔰 @gopher_academy
دوستان می تونن ما رو توی شبکه های اجتماعی و سایت های زیر دنبال کنند
instagram:
🉐https://www.instagram.com/gopher_academy

youtube:
🉐https://www.youtube.com/channel/UC1hnFiO8rUr7SpKgYLxqh7w

github:
🉐https://github.com/mrbardia72?tab=repositories

virgool:
🉐https://virgool.io/@bardiiia

linkedin:
🉐www.linkedin.com/in/bardia-kazemi-76559697

🔸admin: @mrbardia72

🔰 @gopher_academy