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
Junior engineer: Writes code

Mid-level engineer: Reviews code

Senior engineer: Deletes code

Staff engineer: Doesn't interact with the code at all but somehow has more impact than the junior, mid-level, and senior engineers combined


👑 @gopher_academy | 💸 Donate | 💋 Boost
🔥9🎃4🍓3🏆1🍾1💅1💊1
🚬 how we retry on failures

🔹 Linear Backoff
Linear backoff involves waiting for a progressively increasing fixed interval between retry attempts.

Advantages: Simple to implement and understand.

Disadvantages: May not be ideal under high load or in high-concurrency environments as it could lead to resource contention or "retry storms".

🔹 Linear Jitter Backoff
Linear jitter backoff modifies the linear backoff strategy by introducing randomness to the retry intervals. This strategy still increases the delay linearly but adds a random "jitter" to each interval.

Advantages: The randomness helps spread out the retry attempts over time, reducing the chance of synchronized retries across instances.

Disadvantages: Although better than simple linear backoff, this strategy might still lead to potential issues with synchronized retries as the base interval increases only linearly.

🔹 Exponential Backoff
Exponential backoff involves increasing the delay between retries exponentially. The interval might start at 1 second, then increase to 2 seconds, 4 seconds, 8 seconds, and so on, typically up to a maximum delay. This approach is more aggressive in spacing out retries than linear backoff.

Advantages: Significantly reduces the load on the system and the likelihood of collision or overlap in retry attempts, making it suitable for high-load environments.

Disadvantages: In situations where a quick retry might resolve the issue, this approach can unnecessarily delay the resolution.

🔹 Exponential Jitter Backoff
Exponential jitter backoff combines exponential backoff with randomness. After each retry, the backoff interval is exponentially increased, and then a random jitter is applied. The jitter can be either additive (adding a random amount to the exponential delay) or multiplicative (multiplying the exponential delay by a random factor).


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍41💋1
✍️ Massimo Dev

Image preview
توی #گیت دستور git stash چی می‌کنه؟

دستور git stash دستوری در گیت است که تغییراتی که در دایرکتوری کاریت انجام دادی رو به‌طور موقت کنار میذاره (یا "ذخیره" می کنه) تا بتونی بدون نیاز به کامیت کردن این تغییرات، به برنچ دیگه‌ای بری یا روی کار دیگه‌ای تمرکز کنی. وقتی آماده بودی دوباره روی تغییرات کار کنی، می‌تونی اونارو با استفاده از git stash apply یا git stash pop دوباره اعمال کنی.

یک مثال ساده:

1. تغییراتی در دایرکتوری کاریت داری:


$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file1.txt
modified: file2.txt


2. این تغییرات رو stash می‌کنی:


$ git stash
Saved working directory and index state WIP on master: 1234567 Update file1 and file2


3. حالا دایرکتوری کاریت تمیزه:


$ git status
On branch master
nothing to commit, working tree clean


4. می‌تونی به برنچ دیگه‌ای بری یا کار دیگه‌ای انجام بدی. بعداً، وقتی خواستی دوباره تغییرات رو اعمال کنی، می‌تونی از این دستور استفاده کنی:


$ git stash apply

یا برای اعمال تغییرات و حذف اونا از لیست stash:


$ git stash pop

5. تغییرات دوباره به دایرکتوری کاریت اعمال میشن:


$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file1.txt
modified: file2.txt


به‌طور خلاصه، git stash یک روش مفید برای ذخیره موقت کارهاست بدون نیاز به کامیت کردن، که بهت اجازه میده به‌راحتی کارهات رو تغییر بدی.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍11🕊1🍾1
😳 api pagination 101

🔹 Offset-based Pagination:
This technique uses an offset and a limit parameter to define the starting point and the number of records to return.
- Example: GET /orders?offset=0&limit=3
- Pros: Simple to implement and understand.
- Cons: Can become inefficient for large offsets, as it requires scanning and skipping rows.

🔹 Cursor-based Pagination:
This technique uses a cursor (a unique identifier) to mark the position in the dataset. Typically, the cursor is an encoded string that points to a specific record.
- Example: GET /orders?cursor=xxx
- Pros: More efficient for large datasets, as it doesn't require scanning skipped records.
- Cons: Slightly more complex to implement and understand.

🔹 Page-based Pagination:
This technique specifies the page number and the size of each page.
- Example: GET /items?page=2&size=3
- Pros: Easy to implement and use.
- Cons: Similar performance issues as offset-based pagination for large page numbers.

🔹 Keyset-based Pagination:
This technique uses a key to filter the dataset, often the primary key or another indexed column.
- Example: GET /items?after_id=102&limit=3
- Pros: Efficient for large datasets and avoids performance issues with large offsets.
- Cons: Requires a unique and indexed key, and can be complex to implement.

🔹 Time-based Pagination:
This technique uses a timestamp or date to paginate through records.
- Example: GET /items?start_time=xxx&end_time=yyy
- Pros: Useful for datasets ordered by time, ensures no records are missed if new ones are added.
- Cons: Requires a reliable and consistent timestamp.

🔹 Hybrid Pagination:
This technique combines multiple pagination techniques to leverage their strengths.
Example: Combining cursor and time-based pagination for efficient scrolling through time-ordered records.
- Example: GET /items?cursor=abc&start_time=xxx&end_time=yyy
- Pros: Can offer the best performance and flexibility for complex datasets.
- Cons: More complex to implement and requires careful design.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍5
🍾 BIOS Infection

‏BIOS Infection یکی از تکنیک‌های پیشرفته و خطرناک در حوزه بدافزارهاست که هدفش آلوده کردن فریمور سیستم، به‌ویژه BIOS یا UEFI کامپیوترها هستش. این نوع حمله به هکرها اجازه می‌ده تا کنترل کاملی روی سیستم قربانی به دست بیارن و حتی بعد از فرمت کردن هارد دیسک یا تعویض اون، همچنان در سیستم باقی بمونن.

مکانیزم کار BIOS Infection به این صورته که مهاجم با استفاده از آسیب‌پذیری‌های موجود در BIOS/UEFI یا از طریق دسترسی فیزیکی به سیستم، کد مخرب خودش رو مستقیماً به فریمور تزریق می‌کنه. این کد معمولاً در بخش‌هایی از حافظه فلش BIOS ذخیره می‌شه که کمتر مورد استفاده قرار می‌گیرن یا در قسمت‌هایی که برای کاستومایز کردن BIOS در نظر گرفته شدن.

یکی از معروف‌ترین نمونه‌های BIOS Infection، بدافزار EquationDrug هستش که توسط گروه Equation Group ساخته شده و قابلیت آلوده کردن فریمور هارد دیسک‌ها رو داره. این بدافزار می‌تونه خودش رو در سکتورهای مخفی هارد دیسک جاسازی کنه و حتی بعد از نصب مجدد سیستم‌عامل، فعال باقی بمونه.

تشخیص BIOS Infection کار بسیار دشواری هستش چون اکثر آنتی‌ویروس‌ها و ابزارهای امنیتی معمول، قادر به اسکن کردن و شناسایی تغییرات در سطح BIOS نیستن. برای مقابله با این تهدید، استفاده از ابزارهای تخصصی مثل Chipsec یا FIDO توصیه می‌شه که می‌تونن ناهنجاری‌های موجود در BIOS رو شناسایی کنن.

پیشگیری از BIOS Infection شامل اقداماتی مثل به‌روزرسانی منظم فریمور، فعال کردن Secure Boot، محدود کردن دسترسی فیزیکی به سیستم و استفاده از پسوردهای قوی برای BIOS می‌شه. همچنین، برخی از تولیدکنندگان سخت‌افزار، مکانیزم‌های امنیتی پیشرفته‌تری مثل Intel Boot Guard رو پیاده‌سازی کردن که از تغییرات غیرمجاز در BIOS جلوگیری می‌کنه.

در صورت آلوده شدن سیستم به BIOS Infection، فرآیند پاکسازی بسیار پیچیده و گاهی غیرممکن می‌شه. در بسیاری از موارد، تنها راه حل قطعی، تعویض کامل مادربورد یا چیپ BIOS هستش. این مسئله نشون می‌ده که چرا BIOS Infection یکی از جدی‌ترین تهدیدات امنیتی در دنیای کامپیوتر به حساب میاد و چرا سازمان‌های امنیتی و شرکت‌های بزرگ فناوری، سرمایه‌گذاری زیادی روی مقابله با این نوع حملات انجام دادن.


~> @PinkOrca

👑 @gopher_academy | 💸 Donate | 💋 Boost
👍72🔥1🕊1💋1
💢 یک کتاب عملی و ساده برای درک اینکه کامپیوترها چطور کار می‌کنن، از مدار‌های low-level تا کدهای high-level، با پروژه‌های عملی متنوع.

✍️ نویسنده: Matthew Justice
🔤 زبان: انگلیسی
📖 سال انتشار: 2020
📄 تعداد صفحات: 396
🔗 مشاهده کتاب در آمازون

👑 @gopher_academy | 💸 Donate | 💋 Boost
👍4🔥2🍾2
CORS یا Cross-Origin Resource Sharing

یک مکانیزم امنیتی است که توسط مرورگرهای وب پیاده‌سازی می‌شود. این مکانیزم به صفحات وب امکان می‌دهد تا منابعی مانند فونت‌ها، تصاویر یا درخواست‌های AJAX را از دامنه‌های دیگر درخواست کنند. به صورت پیش‌فرض، به دلایل امنیتی، مرورگرها اجازه نمی‌دهند که درخواست‌های AJAX به دامنه‌های دیگر ارسال شود (سیاست‌های مبدأ مشترک یا Same-Origin Policy). CORS به شما امکان می‌دهد تا این محدودیت را تحت شرایط خاصی دور بزنید.

### نحوه کار CORS
وقتی که یک درخواست AJAX به یک دامنه دیگر ارسال می‌شود، مرورگر قبل از ارسال درخواست اصلی، یک درخواست پیش‌فلایت (preflight) به سرور مقصد ارسال می‌کند. این درخواست پیش‌فلایت یک درخواست HTTP است که از متد OPTIONS استفاده می‌کند تا ببیند آیا سرور مقصد اجازه دسترسی را می‌دهد یا خیر.

### هدرهای CORS
CORS از طریق هدرهای HTTP کنترل می‌شود. برخی از این هدرها عبارتند از:

- Access-Control-Allow-Origin:
مشخص می‌کند که چه دامنه‌هایی اجازه دارند به منابع دسترسی داشته باشند.

- Access-Control-Allow-Methods:
مشخص می‌کند که چه نوع درخواست‌هایی (GET, POST, PUT, DELETE, ...) مجاز هستند.

- Access-Control-Allow-Headers:
مشخص می‌کند که چه هدرهای سفارشی‌ای مجاز هستند.

- Access-Control-Allow-Credentials:
مشخص می‌کند که آیا کوکی‌ها و اطلاعات احراز هویت نیز می‌توانند ارسال شوند یا خیر.


### نکات مهم
- امنیت:
باید دقت کنید که هدر Access-Control-Allow-Origin را به صورت * تنظیم نکنید مگر اینکه واقعاً قصد داشته باشید منابع شما از هر دامنه‌ای قابل دسترسی باشند
.
- درخواست‌های پیش‌فلایت:
برخی از درخواست‌ها (مانند درخواست‌های با متدهای PUT یا DELETE) نیاز به درخواست پیش‌فلایت دارند. این درخواست‌ها ممکن است بر عملکرد تأثیر بگذارند.

با استفاده صحیح از CORS، می‌توانید به راحتی منابع خود را در اختیار کلاینت‌های مختلف قرار دهید در حالی که همچنان کنترل کاملی بر روی امنیت دسترسی به منابع دارید.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍82🔥1🍾1💋1
درخواست‌های پیش‌فلایت یکی از قسمت‌های کلیدی مکانیزم CORS هستند. این درخواست‌ها قبل از ارسال درخواست اصلی، به سرور ارسال می‌شوند تا بررسی شود آیا سرور مقصد اجازه می‌دهد که درخواست اصلی از دامنه دیگری ارسال شود یا خیر. درخواست‌های پیش‌فلایت با استفاده از متد HTTP OPTIONS ارسال می‌شوند.

### چرا درخواست‌های پیش‌فلایت لازم هستند؟
درخواست‌های پیش‌فلایت برای اطمینان از امنیت بیشتر و جلوگیری از حملات CSRF (Cross-Site Request Forgery) و سایر تهدیدات امنیتی طراحی شده‌اند. این درخواست‌ها قبل از ارسال درخواست‌های حساس یا پیچیده به سرور ارسال می‌شوند تا سرور تصمیم بگیرد که آیا این درخواست باید مجاز باشد یا نه.

### مواردی که باعث می‌شوند درخواست‌های پیش‌فلایت ارسال شوند:
- متدهای غیر استاندارد: اگر درخواست اصلی از متدهایی غیر از GET, POST یا HEAD استفاده کند (مانند PUT, DELETE).
- هدرهای غیر استاندارد: اگر درخواست اصلی شامل هدرهای سفارشی‌ای باشد که به صورت پیش‌فرض در درخواست‌های ساده ارسال نمی‌شوند.
- ارسال داده‌های JSON: درخواست‌های POST که بدنه آنها شامل JSON است.


#### درخواست پیش‌فلایت
قبل از ارسال درخواست DELETE`، مرورگر یک درخواست `OPTIONS به سرور ارسال می‌کند:

OPTIONS /resource/1 HTTP/1.1
Host: api.example.com
Origin: http://client.example.com
Access-Control-Request-Method: DELETE
Access-Control-Request-Headers: Authorization


#### پاسخ سرور به درخواست پیش‌فلایت
اگر سرور اجازه دهد، پاسخ به این درخواست به شکل زیر خواهد بود:

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: http://client.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Credentials: true


اگر سرور اجازه ندهد، درخواست اصلی ارسال نخواهد شد و مرورگر درخواست DELETE را مسدود می‌کند.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍4🎉1💋1
📌 Senior Backend Engineer (all genders) - Golang

📝 Type: Visa Sponsorship
🌍 Relocation Package:

🏢 Company: urban sports club

📍 Location: SPAIN

⌨️ Category: #Programming

🔗 Tags: #golang #gcp #c #saas #aws #cloud


👑 @gopher_academy
🔥3🎉2
ادیتور zed
ادیتور خفن و سریعی هست توی عکس هم معلومه
پیشنهاد میدم حتما تستش کنید
سرعتش واقعا خوبه

اونایی که گولنگ کار می کنن از کانفیگ زیر استفاده کنن
کافیه که توی ادیتور لاگین کنن و بعد برن قسمت تنظیمات اونجا همین فایل پایین رو کپی پیست کننید داخلش


👇👇👇👇👇

👑 @gopher_academy
🔥2🎉1🍾1
Gopher Academy
ادیتور zed ادیتور خفن و سریعی هست توی عکس هم معلومه پیشنهاد میدم حتما تستش کنید سرعتش واقعا خوبه اونایی که گولنگ کار می کنن از کانفیگ زیر استفاده کنن کافیه که توی ادیتور لاگین کنن و بعد برن قسمت تنظیمات اونجا همین فایل پایین رو کپی پیست کننید داخلش 👇👇👇👇👇
کانفیگ مخصوص گولنگ و سایر ابزارهاش
{
"auto_update_extensions": {
"sql": true,
"docker-compose": true,
"dockerfile": true,
"make": true
},
"vim_mode": false,
"ui_font_size": 16,
"buffer_font_size": 16,
"theme": {
"mode": "system",
"light": "One Light",
"dark": "One Dark"
},
"copy_on_select": true,
"autosave": {
"after_delay": {
"milliseconds": 100
}
},
"scrollbar": {
"show": "auto",
"cursors": true,
"git_diff": true,
"search_results": true,
"selected_symbol": true,
"diagnostics": true
},
"hints": {
"assignVariableTypes": true,
"compositeLiteralFields": true,
"compositeLiteralTypes": true,
"constantValues": true,
"functionTypeParameters": true,
"parameterNames": true,
"rangeVariableTypes": true
}
}
‍‍



👑 @gopher_academy
8👍1🎉1💋1
در اینجا یک مثال از نحوه پیاده‌سازی درخواست‌های پیش‌فلایت CORS در یک سرور Go با استفاده از بسته net/http آمده است:

package main

import (
"net/http"
)

func main() {
http.HandleFunc("/", handleRequest)

// اجرای سرور HTTP در پورت 8080
http.ListenAndServe(":8080", nil)
}

func handleRequest(w http.ResponseWriter, r *http.Request) {
// تنظیم هدرهای CORS
w.Header().Set("Access-Control-Allow-Origin", "http://client.example.com")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
w.Header().Set("Access-Control-Allow-Credentials", "true")

// پاسخ به درخواست‌های پیش‌فلایت
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusNoContent)
return
}

// منطق درخواست اصلی
if r.Method == http.MethodDelete {
// منطق حذف منابع
w.WriteHeader(http.StatusOK)
w.Write([]byte(`{"message": "Resource deleted"}`))
return
}

// مدیریت سایر درخواست‌ها
w.WriteHeader(http.StatusMethodNotAllowed)
}


این کد یک سرور HTTP ساده را پیاده‌سازی می‌کند که درخواست‌های پیش‌فلایت CORS را مدیریت می‌کند و در صورت دریافت درخواست‌های `DELETE`، یک پاسخ مناسب برمی‌گرداند. برای درخواست‌های پیش‌فلایت، سرور با یک وضعیت 204 (بدون محتوا) پاسخ می‌دهد و هدرهای CORS مورد نیاز را تنظیم می‌کند.


👑 @gopher_academy | 💸 Donate | 💋 Boost
👍6🔥1🕊1
کنت بک (Kent Beck)
کنت بک خالق برنامه‌سازی مفرط و یکی از 17 بنیان‌گذار توسعه نرم‌افزاری چابک است. او درباره برنامه نویسی می‌گوید:
کدی بنویسید که کار کند، درست و اصولی باشد و سریع اجرا شود.


خوش‌بینی، یک آفت شغلی در برنامه‌ نویسی است. بازخورد گرفتن از کاربران نیز درمان آن است.

من یک برنامه نویس عالی نیستم. من فقط یک برنامه نویس خوب با عادات عالی هستم.


👑 @gopher_academy
👍13🍾1
✍️Rouzbeh SabzeheiRouzbeh Sabzehei

این یه مقاله خیلی جالب از Quickwit هست

که نشون میده چجوری بایننس ۲۱ میلیون خط معادل ۱۸ گیگ لاگ در ثانیه رو تونسته با Quickwit ذخیره و اسکیل کنه

و در مقایسه با Elasticsearch که قبلا استفاده میکردن توسنته ۵ برابر هزینه های پردازشی و ۲۰ برابر هزینه های ذخیره سازی رو کمتر کنه.

نرم افزار Quickwit یک search engine بسیار بهینه نوشته شده با زبان Rust هست

❇️ https://quickwit.io/blog/quickwit-binance-story


👑 @gopher_academy
👍5🔥4🍾3
آسیب پذیری افشای اطلاعات مسافران بروی پروتکل MQTT

https://vrgl.ir/LfP5x

👑 @gopher_academy
👍10🕊1🍓1
جان جانسون (John Johnson)
جان جانسون مدرس سیستم های اطلاعات کامپیوتری برای گروه بازرگانی درباره برنامه نویسی نقل قولی دارد که می‌گوید:
اول مشکل را حل کنید. سپس، کدش را بنویسید.



👑 @gopher_academy
👍92💯1🍾1💅1
🎃🚬

👑 @gopher_academy
💊12🎃4🕊2🍾2💯1💋1💅1
کریستین هایلمن (Christian Heilmann)
کریستین هایلمن مدیر برنامه اصلی در مایکروسافت، 20 سال آخر عمر خود را وقف کارکرد و پیشرفت وب کرد. او نویسنده چندین کتاب در زمینه جاوا اسکریپت و کتاب راهنمای توسعه‌دهندگان است. او می‌گوید:

شباهت Java با JavaScript مانند شباهت Car با Carpet است.


👑 @gopher_academy
👍114🍾2🔥1🎃1
📌 Software Engineer (all genders) Golang for Retail Operations

📝 Type: Visa Sponsorship
🌍 Relocation Package:

🏢 Company: zalando

📍 Location: GERMANY

⌨️ Category: #Programming

🔗 Tags: #react #golang #kubernetes #aws #microservices #cloud #sql


👑 @gopher_academy
💋3👍2
📢درود به همگی 📢

🚦دوستانی که دنبال تبادل و یا تبلیغ هستن با چنل ما

🔹 به ای دی زیر می تونن پیام بدن👇

📉 @gopher_ads


👑 @gopher_academy
💋5🍾2👍1
دن سالومون (Dan Salomon)
گاهی‌ اوقات بهتر است در روز تعطیل، در رختخواب خوابید تا اینکه تمام هفته‌ی بعد را مجبور به دیباگ کردن کدهای آن روز، تعطیل کرد.




👑 @gopher_academy
👍10🔥1🍓1🎃1💅1