سوال محبوب مصاحبه که من را از نقش SDE-2 به SDE-1 تنزل داد

منتشر شده در towardsdatascience به تاریخ ۲۶ جولای ۲۰۲۱
لینک منبع Popular Interview Question that Reduced me to SDE-1 from SDE-2 Role

«این سناریو را تصور کنید» مصاحبه‌کننده بعد از اینکه نتوانست مرا با مجموعه سوالاتی که آماده کرده بود، کاملا منحرف کند، شروع کرد.

این مرد در اینجا یکی از نقاط عطف زندگی حرفه‌ای من را در دست داشت … نقش بی‌حس کننده ذهن، لرزاننده کوه، شکاف دهنده دریا، مهندس-۲ توسعه نرم‌افزار.

برای رسیدن به اینجا از "Hydra HR" نبردهای زیادی طول کشیده بود، تا مرحله نهایی "برنامه‌نویس ارشد شیطان".

اما!

سرنوشت خیلی بخشنده نبود و مصاحبه‌گر من مثل گربه‌ای که با موش بازی می‌کند با من بازی می‌کرد. اما خدا را شکر که من شکار آسانی نبودم. سوالات او را مثل یک قهرمان پاسخ دادم و به گونه‌ای که تابحال کسی ندیده بود مقاومت کردم، تا اینکه برگ برنده خود را بیرون آورد که بسیاری از مهندسان شجاعSDE-1 در آن رد شده‌اند.

این سلاحی بود که تا به حال با آن مواجه نشده بودم … تا الآن.

سناریویی که به «تابع Debounce» نیاز دارد

مصاحبه‌کننده شروع کرد «این سناریو را تصور کنید».

شما یک جعبه جستجو دارید که در آن تکمیل خودکار را زمانی که کاربر تایپ کردن را متوقف کرد نشان می‌دهید، به یاد داشته باشید که برای نشان دادن این پیشنهادها باید درخواست API را به انتهای خط ارسال کنید. چطور از پس آن بر می‌آیید؟

وقتی برای اولین بار این سوال را شنیدم، در ذهنم …

اگر CTC بیش از ۲۰ لیتر باشد، بودجه پارتی باید ۲۰۰۰۰ روپیه باشد، نه شاید باید آن را بیشتر افزایش دهم …

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

اما من همچنین تعجب کردم که چرا او چنین سوال ساده‌ای را به عنوان یک سوال پایانی انتخاب می‌کند؟

این افکار خیلی زود وقتی به اعماق جزییات فرو رفتم به پایان رسید … اجازه دهید توضیح دهم.

فرض کنید که کاربر فایل‌های «s»، «se»، «ser»، «sert» و«serty» را تایپ کرده‌است.

اگر مراقب نباشید، ۵ درخواست API فقط برای یک کاربر ارسال می‌کنید. حتی با نادیده گرفتن مفاهیم رایج در این زمینه، برای ارائه خدمات به بسیاری از درخواست‌ها، ممکن است مشکلاتی نیز در پیش رو داشته باشید.

من آهسته کار خود را شروع کردم و در پایان راه حلی پیدا کردم که از setTimeout برای ارسال درخواست استفاده می‌کند‌، اما همان‌طور که مشخص شد به دلیل تداخل با آن درReact‌، اگر از آن در پروژه واکنش استفاده کنید‌، این راه حل کار نمی‌کند (معلوم شد که من فقط آن را اشتباه در مصاحبه پیاده کردم که یک اشتباه احمقانه است).

بعد از مصاحبه، مصاحبه‌کننده توضیح داد که نامی که من به دنبالش هستم، «تابع Debounce » نام دارد.

خب، من گشتم و این چیزی بود که پیدا کردم.

اصطلاح Debounce چیست؟

اصطلاح «debounce» از الکترونیک گرفته شده‌است. هنگامی که یک دکمه را فشار می‌دهید، بگذارید بگوییم دکمه روشن / خاموش در ریموت تلویزیون شما، میکروچیپ موجود در ریموت سیگنال را خیلی سریع دریافت می‌کند به طوری که حتی چند میلی ثانیه که آن را نگه دارید ، "فشار" را چندین بار ثبت می‌کند.

برای اجتناب از این رفتار، هنگامی که میکروچیپ یک سیگنال را ثبت می‌کند، پردازش سیگنال‌ها از آن دکمه را برای یک بازه مجموعه کوچک که می‌تواند تغییر کند متوقف می‌کند.

تابع Debounce در جاوا اسکریپت

سوالی که از ما پرسیده شد شبیه به مثال بالا است.

تنها زمانی که مطمئن هستید کاربر تایپ کردن را متوقف کرده‌است، می‌خواهید درخواست API را به انتهای خط ارسال کنید.

در واکنش، این امر می‌تواند به راحتی با کتابخانه و کد زیر اجرا شود.

کتابخانه‌ای که این وظیفه از پیش نوشته شده را دارد، lodash.debounce است، پس بیایید آن را وارد کنیم.

import debounce from "lodash.debounce";

حالا می‌خواهیم یک تابع بنویسیم تا از موارد بالا برای واکنش استفاده کنیم.

const timer = 1000const debouncedSave = useRef(debounce((nextValue) => YourFunction(nextValue), timer)).current;

تایمر → می‌توانید با ویرایش ”1000” که به معنی 1 ثانیه است‌، زمانی را که می‌خواهید منتظر بمانید ویرایش کنید.

تابع شما → تابعی که می‌خواهید تا زمانی که کاربر تمام شود به تاخیر بیفتد. مثل این خواهد بود…

const YourFunction = (value)=> {sendAPIRequest(value)}

اگر اجرای دقیق تابع debounce را دوست دارید، می‌توانید نماینده آن را در اینجا بررسی کنید.

اما این یک پیاده‌سازی ساده است که من از اینترنت گرفتم.

function debounce(func, timeout = 300){
let timer;
return (...args) => {
clearTimeout(timer);
timer = setTimeout(() => { func.apply(this, args); }, timeout);
};
}
function saveInput(){
console.log('I have been called');
}
const processChange = debounce(() => saveInput());

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