تفاوت revert و reset در git
git revert
یک کامیت جدید ایجاد میکند که تغییرات کامیت مشخصشده را برعکس (undo) میکند
git reset
شاخه (branch) را به یک نقطه قبلی در تاریخچه برمیگرداند. این یعنی تاریخچه بازنویسی میشود.
#git #interview
git revert
یک کامیت جدید ایجاد میکند که تغییرات کامیت مشخصشده را برعکس (undo) میکند
git revert abc123
git reset
شاخه (branch) را به یک نقطه قبلی در تاریخچه برمیگرداند. این یعنی تاریخچه بازنویسی میشود.
git reset --hard abc123
#git #interview
ویژگی satisfied در TypeScript از نسخه 4.9 معرفی شده و برای بررسی نوع در زمان کامپایل بدون تغییر نوع اصلی متغیر استفاده میشود.
کاربرد اصلی satisfies
به شما اجازه میدهد مطمئن شوید که یک مقدار با یک تایپ خاص سازگار است.
اما برخلاف as، نوع مقدار را تغییر نمیدهد، فقط بررسی میکند.
در نتیجه:
• اگر اشتباه تایپی باشد، خطا میدهد.
• اگر درست باشد، نوع اصلی مقدار حفظ میشود.
مثال ساده
اینجا user باید تمام الزامات Person را برآورده کند.
اما همچنان نوع user برابر با { name: string; age: number; extra: boolean } میماند.
اگر name را حذف کنیم، خطا میدهد:
تفاوت با as
اینجا TypeScript فقط نوع را Cast میکند، حتی اگر چیزی کم باشد، ممکن است بدون خطا عبور کند (در حالت غیر strict).
ولی satisfies اجازه نمیدهد چیزی که ناقص است قبول شود.
مثال کاربردیتر با enum یا union
#ts #interview
کاربرد اصلی satisfies
به شما اجازه میدهد مطمئن شوید که یک مقدار با یک تایپ خاص سازگار است.
اما برخلاف as، نوع مقدار را تغییر نمیدهد، فقط بررسی میکند.
در نتیجه:
• اگر اشتباه تایپی باشد، خطا میدهد.
• اگر درست باشد، نوع اصلی مقدار حفظ میشود.
مثال ساده
type Person = {
name: string;
age: number;
};
const user = {
name: "Ali",
age: 30,
extra: true
} satisfies Person;
اینجا user باید تمام الزامات Person را برآورده کند.
اما همچنان نوع user برابر با { name: string; age: number; extra: boolean } میماند.
اگر name را حذف کنیم، خطا میدهد:
const user = {
age: 30
} satisfies Person; // ❌ خطا: name وجود ندارد
تفاوت با as
const user = {
name: "Ali",
age: 30
} as Person;
اینجا TypeScript فقط نوع را Cast میکند، حتی اگر چیزی کم باشد، ممکن است بدون خطا عبور کند (در حالت غیر strict).
ولی satisfies اجازه نمیدهد چیزی که ناقص است قبول شود.
مثال کاربردیتر با enum یا union
type Theme = "light" | "dark";
const config = {
theme: "light"
} satisfies { theme: Theme };
// اگر بنویسی:
const config2 = {
theme: "blue"
} satisfies { theme: Theme }; // ❌ خطا
#ts #interview
تفاوت git rebase و git merge در Git اساسی است، چون هر دو برای ترکیب تغییرات استفاده میشوند ولی نحوهی ادغام و تاریخچه کاملاً فرق دارد.
--------------------------
💡 git merge
• چه میکند؟
تغییرات دو شاخه را با هم ادغام میکند و یک کامیت جدید (merge commit) ایجاد میکند.
• تاریخچه حفظ میشود به صورت شاخهای (branching history).
• مزیت: سابقه واقعی و ترتیب زمانی کامیتها حفظ میشود.
• عیب: تاریخچه ممکن است شلوغ شود (کامیتهای Merge زیاد).
نتیجه:
A---B---C (main)
\
D---E (feature)
\
M (merge commit)
--------------------------
💡git rebase
• چه میکند؟
کل کامیتهای شاخهی فعلی را بر اساس شاخهی هدف بازنویسی میکند (history rewrite).
• کامیتها را جوری قرار میدهد که انگار از همان ابتدا بر اساس آخرین کامیت شاخهی هدف ساخته شدهاند.
• مزیت: تاریخچه خطی (linear history) و تمیز.
• عیب: بازنویسی تاریخچه خطرناک است (نباید در شاخههای اشتراکی استفاده شود).
نتیجه:
A---B---C---D'---E' (feature)
#interview #git
--------------------------
💡 git merge
• چه میکند؟
تغییرات دو شاخه را با هم ادغام میکند و یک کامیت جدید (merge commit) ایجاد میکند.
• تاریخچه حفظ میشود به صورت شاخهای (branching history).
• مزیت: سابقه واقعی و ترتیب زمانی کامیتها حفظ میشود.
• عیب: تاریخچه ممکن است شلوغ شود (کامیتهای Merge زیاد).
git checkout main
git merge feature
نتیجه:
A---B---C (main)
\
D---E (feature)
\
M (merge commit)
--------------------------
💡git rebase
• چه میکند؟
کل کامیتهای شاخهی فعلی را بر اساس شاخهی هدف بازنویسی میکند (history rewrite).
• کامیتها را جوری قرار میدهد که انگار از همان ابتدا بر اساس آخرین کامیت شاخهی هدف ساخته شدهاند.
• مزیت: تاریخچه خطی (linear history) و تمیز.
• عیب: بازنویسی تاریخچه خطرناک است (نباید در شاخههای اشتراکی استفاده شود).
git checkout feature
git rebase main
نتیجه:
A---B---C---D'---E' (feature)
#interview #git
تفاوت بین Promise.all و Promise.allSettled در جاوااسکریپت
--------
💡Promise.all
• همهی پرامیسها رو به صورت موازی اجرا میکنه.
• اگر حتی یکی از پرامیسها reject بشه، کل Promise.all رد (reject) میشه.
• مقدار خروجی: آرایهای از نتایج resolve شده (اگه همه موفق باشن).
• فقط اولین خطا رو برمیگردونه، بقیه رو نادیده میگیره.
--------
💡Promise.allSettled
• همهی پرامیسها رو به صورت موازی اجرا میکنه.
• منتظر میمونه تا همه settle بشن (چه resolve چه reject).
• هیچوقت reject نمیشه. همیشه resolve میشه با آرایهای از نتایج.
• هر نتیجه یک آبجکت با این شکل:
{ status: "fulfilled", value: ... } یا
{ status: "rejected", reason: ... }
هیچ خطایی throw نمیکنه، چون همه رو گزارش میده.
#js #interview
--------
💡Promise.all
• همهی پرامیسها رو به صورت موازی اجرا میکنه.
• اگر حتی یکی از پرامیسها reject بشه، کل Promise.all رد (reject) میشه.
• مقدار خروجی: آرایهای از نتایج resolve شده (اگه همه موفق باشن).
const p1 = Promise.resolve(10);
const p2 = Promise.reject("Error");
const p3 = Promise.resolve(30);
Promise.all([p1, p2, p3])
.then(result => console.log(result))
.catch(error => console.log("Rejected:", error));
// خروجی: Rejected: Error
• فقط اولین خطا رو برمیگردونه، بقیه رو نادیده میگیره.
--------
💡Promise.allSettled
• همهی پرامیسها رو به صورت موازی اجرا میکنه.
• منتظر میمونه تا همه settle بشن (چه resolve چه reject).
• هیچوقت reject نمیشه. همیشه resolve میشه با آرایهای از نتایج.
• هر نتیجه یک آبجکت با این شکل:
{ status: "fulfilled", value: ... } یا
{ status: "rejected", reason: ... }
const p1 = Promise.resolve(10);
const p2 = Promise.reject("Error");
const p3 = Promise.resolve(30);
Promise.allSettled([p1, p2, p3])
.then(results => console.log(results));
/*
[
{ status: "fulfilled", value: 10 },
{ status: "rejected", reason: "Error" },
{ status: "fulfilled", value: 30 }
]
*/
هیچ خطایی throw نمیکنه، چون همه رو گزارش میده.
#js #interview
تفاوت unknown و any در TypeScript
--------------
💡 any
• وقتی از any استفاده میکنی، TypeScript همهی چکهای تایپ را غیرفعال میکند.
• هر کاری میتونی با اون مقدار انجام بدی بدون خطا:
• مشکل: Type safety از بین میره. عملاً مثل جاوااسکریپت عادی میشه.
--------------
💡 unknown
• شبیه any هست از نظر اینکه میتونی هر مقداری بهش اختصاص بدی.
• اما برعکس any، نمیتونی مستقیماً باهاش عملیات انجام بدی مگر اینکه اول تایپش رو چک کنی (type narrowing).
• باید قبلش بررسی کنی:
#ts #interview
--------------
💡 any
• وقتی از any استفاده میکنی، TypeScript همهی چکهای تایپ را غیرفعال میکند.
• هر کاری میتونی با اون مقدار انجام بدی بدون خطا:
let x: any = "Hello";
x.toUpperCase(); // ✅ بدون خطا
x.push(123); // ✅ حتی اگه string باشه
• مشکل: Type safety از بین میره. عملاً مثل جاوااسکریپت عادی میشه.
--------------
💡 unknown
• شبیه any هست از نظر اینکه میتونی هر مقداری بهش اختصاص بدی.
• اما برعکس any، نمیتونی مستقیماً باهاش عملیات انجام بدی مگر اینکه اول تایپش رو چک کنی (type narrowing).
let y: unknown = "Hello";
y.toUpperCase(); // ❌ خطا
• باید قبلش بررسی کنی:
if (typeof y === "string") {
console.log(y.toUpperCase()); // ✅ حالا مجازه
}
#ts #interview
با هشتگ #interview میتونید به تمام سولات مصاحبهای که توی این چند سال بهشون برخوردم ، دسترسی داشته باشید.
فرض کنید یه پلیلیست توی یوتیوب هست ، نمیدونید مجموعا زمانش چه قدر میشه.
از طریق سایت زیر میتونید این زمان رو پیدا کنید
https://ytplaylist-len.sharats.dev/
#youtube
از طریق سایت زیر میتونید این زمان رو پیدا کنید
https://ytplaylist-len.sharats.dev/
#youtube
یک نکته کم کاربرد مخصوص دوستان مکار
اگر برای دانلود فایل از folx go استفاده میکنید ، هرزگاهی برای بعضی سایتها مخصوصا سایتهای ایرانی سکته میزنه و دانلود نمیکنه.
باید مشابه تصویر ادیتش کنید و referer بذارید
اگر برای دانلود فایل از folx go استفاده میکنید ، هرزگاهی برای بعضی سایتها مخصوصا سایتهای ایرانی سکته میزنه و دانلود نمیکنه.
باید مشابه تصویر ادیتش کنید و referer بذارید
توسعه فردی چه جوری اعتماد به نفسمون رو نابود میکنه؟
https://youtu.be/TmFFAXg97sU?si=ylQ134QOgNBH8AG4
نگاه خیلی جالبی داره
https://youtu.be/TmFFAXg97sU?si=ylQ134QOgNBH8AG4
نگاه خیلی جالبی داره
این دو تا بات گرامی خودشون رو شهید کردن اینقدر رکوست دادن.
اگر کسی رو فیزیکی نمیشناسید ، باهاش کانکشن نگیرید
اگر کسی رو فیزیکی نمیشناسید ، باهاش کانکشن نگیرید
همه از تو موفق تر بنظر میرسن تا وقتی این حقیقت ناگفته را بفهمی !؟
https://www.youtube.com/watch?v=-32g5NtYIQU
https://www.youtube.com/watch?v=-32g5NtYIQU
YouTube
همه از تو موفق تر بنظر میرسن تا وقتی این حقیقت ناگفته را بفهمی !؟
آیا رسیدن به اهدافمون بعد از 30-40 سالگی ، دیگه مزه نمیده ؟
آیا حقمون این نیست که وقتی تلاش میکنیم ، به وقتش بهش برسیم ؟
کانال تلگرام : https://news.1rj.ru/str/wordpowerss
ویدیو چارلز بوکوفسکی : https://youtu.be/Wdq1AQxJvcM
بخش بندی ویدیو ها
00:00-آیا بعد 30 سالگی…
آیا حقمون این نیست که وقتی تلاش میکنیم ، به وقتش بهش برسیم ؟
کانال تلگرام : https://news.1rj.ru/str/wordpowerss
ویدیو چارلز بوکوفسکی : https://youtu.be/Wdq1AQxJvcM
بخش بندی ویدیو ها
00:00-آیا بعد 30 سالگی…
توصیه:
اگر دنبال کار خارجی هستید
- توی لینکدین هیچ گونه مطلب و کامنت فارسی نذارید.
- هیچ پست فارسی هم لایک نکنید.
- هر گونه فعالیت فارسی تا الان کردید پاک کنید.
- همه چی پروفایلتون رو انگلیسی کنید.
- لوکیشن رو به غیر ایران تغییر بدید.
- شروع کنید با آدمای ساکن کشور مورد نظرتون کانکشن بگیرید.
- پست آدمهای معروف حوزه خودتون رو لایک کنید و کامنت بذارید.
- پستهای تخصصی انگلیسی و خوب بذارید.
- صبر کنید تا یک ماه قبل از فصل استخدام و تا اون موقع اپلای نکنید.
- قبل از شروع اپلای ، لینکدینتون رو پرمیوم کنید.
- سعی کنید آدمای ایرانی یا حتی خارجی اون شرکت رو پیدا کنید و ازشون خواهش کنید رفرال شما بشن. بیشتر از پنجاه درصد نفرات کمکتون میکنن. حالا یا از سر انساندوستی یا به خاطر پاداش چندهزار دلاری که میگیرن.
- بدون رفرال اپلای نکنید که شانستون نسوزه.
- ایزی اپلای نکنید. یه آمار اومده که میگه زیر ۲٪ شرکتها با ایزی اپلای استخدام میکنن.
- رزومتون دقیقا مو به مو باید عین پروفایل لینکدینتون باشه.
- هر روز توی گیتهاب فعالیت کنید گرافتون سبز بشه.
- هر منطقه قواعد خودش رو برای رزومه داره. رزومه فلهای درست نکنید.
- شما فقط ۱۰ ثانیه وقت دارید که رزومتون تاثیرگذار باشه. این هم در صورتی هستش که الگوریتمها به رزومتون امتیاز کافی داده باشن و رجکت نشده باشید.
از اهمیت لینکدین براتون همینقدر بگم که حتی برای برخی شغلهای جنرال مثل فروشنده هم بعضیجاها ازتون آدرس لینکدین میخوان. یه جورایی تبدیل شده به هویت دیجیتال.
اگر دنبال کار خارجی هستید
- توی لینکدین هیچ گونه مطلب و کامنت فارسی نذارید.
- هیچ پست فارسی هم لایک نکنید.
- هر گونه فعالیت فارسی تا الان کردید پاک کنید.
- همه چی پروفایلتون رو انگلیسی کنید.
- لوکیشن رو به غیر ایران تغییر بدید.
- شروع کنید با آدمای ساکن کشور مورد نظرتون کانکشن بگیرید.
- پست آدمهای معروف حوزه خودتون رو لایک کنید و کامنت بذارید.
- پستهای تخصصی انگلیسی و خوب بذارید.
- صبر کنید تا یک ماه قبل از فصل استخدام و تا اون موقع اپلای نکنید.
- قبل از شروع اپلای ، لینکدینتون رو پرمیوم کنید.
- سعی کنید آدمای ایرانی یا حتی خارجی اون شرکت رو پیدا کنید و ازشون خواهش کنید رفرال شما بشن. بیشتر از پنجاه درصد نفرات کمکتون میکنن. حالا یا از سر انساندوستی یا به خاطر پاداش چندهزار دلاری که میگیرن.
- بدون رفرال اپلای نکنید که شانستون نسوزه.
- ایزی اپلای نکنید. یه آمار اومده که میگه زیر ۲٪ شرکتها با ایزی اپلای استخدام میکنن.
- رزومتون دقیقا مو به مو باید عین پروفایل لینکدینتون باشه.
- هر روز توی گیتهاب فعالیت کنید گرافتون سبز بشه.
- هر منطقه قواعد خودش رو برای رزومه داره. رزومه فلهای درست نکنید.
- شما فقط ۱۰ ثانیه وقت دارید که رزومتون تاثیرگذار باشه. این هم در صورتی هستش که الگوریتمها به رزومتون امتیاز کافی داده باشن و رجکت نشده باشید.
از اهمیت لینکدین براتون همینقدر بگم که حتی برای برخی شغلهای جنرال مثل فروشنده هم بعضیجاها ازتون آدرس لینکدین میخوان. یه جورایی تبدیل شده به هویت دیجیتال.