پشت صحنه کوئریهای SQL
وقتی یه کوئری مثل
رو اجرا میکنیم، پشت صحنه چند تا مرحله اتفاق میفته که باعث میشه دیتابیس بتونه بهترین و سریعترین نتیجه رو برگردونه. این مسیر از چک کردن دسترسی کاربر شروع میشه، بعدش کوئری بررسی و بهینهسازی میشه، و در نهایت به موتور ذخیرهسازی میرسه که دادهها رو از دیسک میخونه.
اما چطور این فرآیند سریع و بهینه انجام میشه؟ دیتابیس از چند تا بخش هوشمند مثل Query Optimizer (که بهترین روش اجرای کوئری رو انتخاب میکنه) و Execution Engine (که مراحل اجرای کوئری رو هماهنگ میکنه) استفاده میکنه. مثلا، Lock Manager از تداخل دسترسیها جلوگیری میکنه و Buffer Manager اول حافظه رو چک میکنه تا از خوندن غیرضروری از دیسک جلوگیری بشه.
لینک مقاله:
https://newsletter.systemdesigncodex.com/p/the-journey-of-a-sql-query-through
@techstuff100
وقتی یه کوئری مثل
SELECT name, age FROM users WHERE city = 'New York';رو اجرا میکنیم، پشت صحنه چند تا مرحله اتفاق میفته که باعث میشه دیتابیس بتونه بهترین و سریعترین نتیجه رو برگردونه. این مسیر از چک کردن دسترسی کاربر شروع میشه، بعدش کوئری بررسی و بهینهسازی میشه، و در نهایت به موتور ذخیرهسازی میرسه که دادهها رو از دیسک میخونه.
اما چطور این فرآیند سریع و بهینه انجام میشه؟ دیتابیس از چند تا بخش هوشمند مثل Query Optimizer (که بهترین روش اجرای کوئری رو انتخاب میکنه) و Execution Engine (که مراحل اجرای کوئری رو هماهنگ میکنه) استفاده میکنه. مثلا، Lock Manager از تداخل دسترسیها جلوگیری میکنه و Buffer Manager اول حافظه رو چک میکنه تا از خوندن غیرضروری از دیسک جلوگیری بشه.
لینک مقاله:
https://newsletter.systemdesigncodex.com/p/the-journey-of-a-sql-query-through
@techstuff100
👍5👏1
ساخت تایپهای deep immutable در تایپاسکریپت
گاهی وقتها لازم داریم مطمئن باشیم که یک آبجکت بعد از مقداردهی اولیه مقادیرش تغییر نکنه. توی این پست با const assertion و Object.freeze بررسی میکنم که چطوری میشه یه آبجکت رو هم در زمان کامپایل و هم در زمان اجرا فریز کرد.
@techstuff100
گاهی وقتها لازم داریم مطمئن باشیم که یک آبجکت بعد از مقداردهی اولیه مقادیرش تغییر نکنه. توی این پست با const assertion و Object.freeze بررسی میکنم که چطوری میشه یه آبجکت رو هم در زمان کامپایل و هم در زمان اجرا فریز کرد.
@techstuff100
👍4🔥1👏1
حال خوب برای مامان باباها ❤️
تو تعطیلات عید فرصت شد یه آپدیت جدید برای اپلیکیشن «حال خوب / Good Mood» آماده کنم؛ با یه قابلیت تازه: حالت والدین.
با فعالسازی این قابلیت روی گوشی مامان یا بابا، براشون پیامهایی مثل «مامانجون، صبح بخیر قلب من» و «شب بخیر باباجون، دوستت دارم» ارسال میشه؛ همونطور که اونا همیشه با عشق باهامون حرف میزنن.
پ.ن: اگه اولین باره اسم این اپ رو میشنوین، «حال خوب» یه برنامهست که صبح بهمون صبحبخیر میگه، شبها شببخیر، و توی روز نوتیفهای مثبت و انگیزشی میفرسته. هدفش اینه که حالمون بهتر شه و روزمون رو با انرژی بیشتری بگذرونیم.
نصب «حال خوب» از بازار:
http://cafebazaar.ir/app/?id=com.seyedmahdii.goodmood&ref=share
@techstuff100
تو تعطیلات عید فرصت شد یه آپدیت جدید برای اپلیکیشن «حال خوب / Good Mood» آماده کنم؛ با یه قابلیت تازه: حالت والدین.
با فعالسازی این قابلیت روی گوشی مامان یا بابا، براشون پیامهایی مثل «مامانجون، صبح بخیر قلب من» و «شب بخیر باباجون، دوستت دارم» ارسال میشه؛ همونطور که اونا همیشه با عشق باهامون حرف میزنن.
پ.ن: اگه اولین باره اسم این اپ رو میشنوین، «حال خوب» یه برنامهست که صبح بهمون صبحبخیر میگه، شبها شببخیر، و توی روز نوتیفهای مثبت و انگیزشی میفرسته. هدفش اینه که حالمون بهتر شه و روزمون رو با انرژی بیشتری بگذرونیم.
نصب «حال خوب» از بازار:
http://cafebazaar.ir/app/?id=com.seyedmahdii.goodmood&ref=share
@techstuff100
❤5👏2👍1
فرستادن تابع به ref در React
توی React میتونیم به جای استفاده از useRef، یه تابع مستقیم به ref بدیم و رفتار المنتها رو موقع رندر و unmount مدیریت کنیم.
@techstuff100
توی React میتونیم به جای استفاده از useRef، یه تابع مستقیم به ref بدیم و رفتار المنتها رو موقع رندر و unmount مدیریت کنیم.
@techstuff100
👍8🔥1🎉1
Tech Stuff
Photo
توی نسخههای قبل موقع unmount شدن المنت، React اون تابع رو با null صدا میزد. توی React 19 میتونیم برای توابع refمون یه تابع cleanup تعریف کنیم که در این صورت، اون مرحله صدا زدن تابع با null موقع unmount اسکیپ میشه.
@techstuff100
@techstuff100
👍4🔥2👏1
تجربه مصاحبه با دیجیکالا
تابستون ۱۴۰۳ برای موقعیت شغلی Front-End Engineer در دیجیکالا رزومه فرستادم. اواخر مرداد، تیم Talent Acquisition باهام تماس گرفتن و برای دو روز بعد، مصاحبه الگوریتمی به صورت live coding تنظیم شد.
طول مصاحبه الگوریتمی ۳۰ دقیقه بود و از طریق MS Teams برگزار شد. یکی از مصاحبهکنندهها سر وقت حاضر شد، ولی برای مصاحبهکننده دوم حدود ۳ دقیقه منتظر موندیم. چون ایشون حاضر نشدن، مصاحبه رو دونفره شروع کردیم.
مصاحبه فقط شامل یک سوال بود: آرایهای از رشتهها داده شده، و باید پیدا میکردیم چندتا از این رشتهها معکوسشون (reverse) هم داخل آرایه وجود داره. مثلا برای آرایه زیر، جواب ۲ هست:
["ac", "bc", "ca", "cb", "zz"]
راهحلی که پیادهسازی کردم اینطوری بود که یه شمارنده count و یه آبجکت (در JS) یا هشمپ برای ذخیره وجود هر عضو (یعنی حالت flag) تعریف کردم. یه بار روی آرایه لوپ زدم، و اگه عضو فعلی داخل هشمپ نبود، reverse اون عضو رو توی هشمپ true کردم. در غیر این صورت، مقدار count رو افزایش دادم. طبیعتا پیچیدگی زمانی O(n) میشد.
@techstuff100
تابستون ۱۴۰۳ برای موقعیت شغلی Front-End Engineer در دیجیکالا رزومه فرستادم. اواخر مرداد، تیم Talent Acquisition باهام تماس گرفتن و برای دو روز بعد، مصاحبه الگوریتمی به صورت live coding تنظیم شد.
طول مصاحبه الگوریتمی ۳۰ دقیقه بود و از طریق MS Teams برگزار شد. یکی از مصاحبهکنندهها سر وقت حاضر شد، ولی برای مصاحبهکننده دوم حدود ۳ دقیقه منتظر موندیم. چون ایشون حاضر نشدن، مصاحبه رو دونفره شروع کردیم.
مصاحبه فقط شامل یک سوال بود: آرایهای از رشتهها داده شده، و باید پیدا میکردیم چندتا از این رشتهها معکوسشون (reverse) هم داخل آرایه وجود داره. مثلا برای آرایه زیر، جواب ۲ هست:
["ac", "bc", "ca", "cb", "zz"]
راهحلی که پیادهسازی کردم اینطوری بود که یه شمارنده count و یه آبجکت (در JS) یا هشمپ برای ذخیره وجود هر عضو (یعنی حالت flag) تعریف کردم. یه بار روی آرایه لوپ زدم، و اگه عضو فعلی داخل هشمپ نبود، reverse اون عضو رو توی هشمپ true کردم. در غیر این صورت، مقدار count رو افزایش دادم. طبیعتا پیچیدگی زمانی O(n) میشد.
@techstuff100
👍5❤2
Tech Stuff
تجربه مصاحبه با دیجیکالا تابستون ۱۴۰۳ برای موقعیت شغلی Front-End Engineer در دیجیکالا رزومه فرستادم. اواخر مرداد، تیم Talent Acquisition باهام تماس گرفتن و برای دو روز بعد، مصاحبه الگوریتمی به صورت live coding تنظیم شد. طول مصاحبه الگوریتمی ۳۰ دقیقه بود…
فضای مصاحبه و رفتار مصاحبهکننده خوب بود؛ ولی با اینکه سوال رو حل کرده بودم، در پایان مصاحبه حس خوبی نداشتم.
حدود یک ماه از مصاحبه گذشت و خبری از ایمیل پذیرش یا رد شدن نیومد. فکر کردم که رد شدم و تقریبا بیخیال قضیه شده بودم که دوباره تماس گرفتن برای هماهنگی مصاحبه دوم (مصاحبه فنی) که اواخر شهریور برگزار شد. این مصاحبه یک ساعته بود و از طریق Skype انجام شد.
برخی از سوالهایی که پرسیده شد:
۱. مفهوم event loop
۲. اسکوپها (scope) و TDZ
۳. خروجی کد (پست بعدی)
۴. روشهای ذخیرهسازی داده در مرورگر و تفاوتهاشون
۵. هدر set-cookie
۶. مفهوم event bubbling
۷. استفاده از preventDefault برای تگهای a
۸. مفاهیم debounce و throttle
۹. پوزیشنهای CSS
۱۰. قوانین هوکها
۱۱. توضیح useEffect و useLayoutEffect و تفاوتهاشون
۱۲. توضیح توابع cleanup در useEffect
۱۳. توضیح event batching
۱۴. مفاهیم LCP، CLS و Performance وب
۱۵. مفاهیم و جزئیات memo و useMemo
و ۳-۴ تا سوال دیگه که دقیق یادم نیست.
فرایند مصاحبه بیشتر شبیه به یک گفتوگوی فنی بود و در فضایی صمیمی پیش رفت. مصاحبهکننده هم بسیار حرفهای و خوشبرخورد بودن.
نتیجهی مصاحبه حدود یک هفته بعد از طریق ایمیل اعلام شد. این مصاحبه برام تجربه خیلی خوبی بود و چیزهای زیادی یاد گرفتم.
@techstuff100
حدود یک ماه از مصاحبه گذشت و خبری از ایمیل پذیرش یا رد شدن نیومد. فکر کردم که رد شدم و تقریبا بیخیال قضیه شده بودم که دوباره تماس گرفتن برای هماهنگی مصاحبه دوم (مصاحبه فنی) که اواخر شهریور برگزار شد. این مصاحبه یک ساعته بود و از طریق Skype انجام شد.
برخی از سوالهایی که پرسیده شد:
۱. مفهوم event loop
۲. اسکوپها (scope) و TDZ
۳. خروجی کد (پست بعدی)
۴. روشهای ذخیرهسازی داده در مرورگر و تفاوتهاشون
۵. هدر set-cookie
۶. مفهوم event bubbling
۷. استفاده از preventDefault برای تگهای a
۸. مفاهیم debounce و throttle
۹. پوزیشنهای CSS
۱۰. قوانین هوکها
۱۱. توضیح useEffect و useLayoutEffect و تفاوتهاشون
۱۲. توضیح توابع cleanup در useEffect
۱۳. توضیح event batching
۱۴. مفاهیم LCP، CLS و Performance وب
۱۵. مفاهیم و جزئیات memo و useMemo
و ۳-۴ تا سوال دیگه که دقیق یادم نیست.
فرایند مصاحبه بیشتر شبیه به یک گفتوگوی فنی بود و در فضایی صمیمی پیش رفت. مصاحبهکننده هم بسیار حرفهای و خوشبرخورد بودن.
نتیجهی مصاحبه حدود یک هفته بعد از طریق ایمیل اعلام شد. این مصاحبه برام تجربه خیلی خوبی بود و چیزهای زیادی یاد گرفتم.
@techstuff100
👍10❤3👏1
ارتباط بین پنجرهها با postMessage
این متد جاوااسکریپت، بهمون اجازه میده از یه صفحه وب (مثلا یه iframe) به یه صفحه دیگه (مثلا parentش) پیام بفرستیم. توی این پست به همراه مثال توضیحش دادم.
@techstuff100
این متد جاوااسکریپت، بهمون اجازه میده از یه صفحه وب (مثلا یه iframe) به یه صفحه دیگه (مثلا parentش) پیام بفرستیم. توی این پست به همراه مثال توضیحش دادم.
@techstuff100
👍15👏1🎉1