Hey , the question levels are just awesome.. I can't even imagine that this type of questions can be asked in interviews... Will follow this series to be updated
Chirag, I have following you since a while, I would say you are doing a great job. 👍👍 The Problem statements you come up with are very unique and organised, I am learning a lot from this series. I was expecting someone from same experience level to come for this series. I wish I would be there some day on this series as well 😂, Just Kidding. For Pavan, I would say, He should be pushed to next Round. 👍 keep up the great work.
Hi Chirag,I have 1.5 years of experience. Just one week ago, an interviewer asked me the same first question (auto retry api). At that time, I wasn’t able to answer that question😢. I wish I had found this video a little earlier😅. Thank you, Chirag, always love your videos.
Yooo!!! Best js interview of the whole Chakde frontend interview series. My solution: //LRU cache automatic cache clear // approach 1: which came to my mind at first /* lets have a cache array in which i'll be putting cache data and will try to add the time when we have added it in it. will run a auto clear cache function after certain time and it will check sort the array based on time, the items which are added. will remove least recently used */ let count = 0; let cache = new Array(5); cache.fill({ item: "2", time: 10 }); function addToCache(data) { let currentTime = Date.now(); cache.push({ item: data, time: currentTime + count }); count++; } function LRU(data) { cache.sort((a, b) => a - b); let leastRecentlyUsed = cache[0]; console.log("leastRecentlyUsed", leastRecentlyUsed); cache.shift(); addToCache(data); } function pushDataToCache(data) { if (cache.length !== 5) { addToCache(data); } else { LRU(data); } } pushDataToCache(40); pushDataToCache(50); pushDataToCache(60); pushDataToCache(30); pushDataToCache(10); pushDataToCache(1); pushDataToCache(50); console.log(cache); function getValueFromCache(data){ let finding = cache.find(item => item.item === data); if(!finding){ console.log(data, "Not found"); return; } console.log(data, "Yes item found",finding); } getValueFromCache(50); getValueFromCache(40); Thank you, Chirag Sir
The interesting thing about this interview series is that Chirag always gives you a chance to correct your mistakes. We know that while doing live feature development or coding, we will make small mistakes. Chirag notices those mistakes and give small hints to correct the issues. Thank you, Chirag, for making this amazing series. 👍
I think Pawan was updating the timestamp at the time of getting the data/key, that's why the timestamps at the end are the same (same problem as the setAsyncData being passed 0 for timeout value in setTimeout).
Chirag, You are doing fabulous. I'm learning a lot from your mock interviews. But I do have one query here that your advise to keep map as data structure of cache which will maintain the insertion order and will help us to identify which key should be going to delete while setting new key but when we are going to set one more key in the cache after getting/accessing values from cache then the time will be updated but not the insertion order then still we need to figure out which time stamp is lowest to be excluded using loop. Please correct if I'm thinking in a wrong way and thanks in advance!
We Can solve like this. We don't need to use Math.random we can write like this if promise reject then function should call Max Count time. async function fetchAutomatically(fetcher, maxCount) { if (maxCount { return new Promise((res, rej) => rej('Passed')); }; fetchAutomatically(fetcherFn, 5);
can some help me if for the first question where we need to create a function that retry a promise n number of times will this code work this is not proper production ready just a rough to get the idea function retryFetch(fetch, maxRetyCount) { fetch().then(function (res) { console.log(res); }).catch(function (err) { console.log(err); if (maxRetyCount) { maxRetyCount -= 1; retryFetch(fetch, maxRetyCount); }else{ console.log("rety attempt failed",err); } }); } function fetcher() { return ( new Promise(function (res, rej) { if (Math.random() > 0.5) { res("resolved"); } else { rej("rejected"); } }) ); } I tested it myself seems to be working cna someone proof read it for me I just tried to keep it simple
Hi Chirag Sir, I have 2-3 years of Experience in JavaScript can i get a chance to do a Mock Interview With you or at least can i get some advice to crack the frontend Coding Interviews from you? Awaiting for your Acknowledgment, Thank you
You bring really good question @chirag but I will not select this man as he has 9yr of exp. and instead of making thing simple, he just make it more complicated. btw thanks for bringing such a question which will help people to thinks in real-time when a person giving interview.
Hi Chirag, I have 5+ years of experience in UI development with Tech skills: HTML5,CSS3 Bootstrap,Tailwind CSS,Responsive Design, Media Queries. I have knowledge on Javascript and Vuejs framework just i want to improve deep knowledge and Strong experience in Javascript and other Framework like React. I know the way how to do but coming to real time, i am facing difficulty to solve problems and logical ways. Can you suggest how can I overcome from this difficulties to solve problems in logical way.
It sounds monotonous but the fact is you can overcome your fear by practicing more and more. Also, you can leverage AI (ChatGpt) where ever you stuck while coding first try to solve on your own & still won't be able figure out then go and ask Gpt. You can try this method.
Great set of questions, Chirag. Though, I have a doubt here, Using Map would be helpfull to handle the space complexity better but how is the order insertion helpful? As in map order is only updated at the time whn the values are set for the first time so later on when we set it or last access it, order wont be updated.
I've had some bad experiences with object in terms of maintaining the order. If the key is something that can be sorted the object follows the sorting stuff. Really weird shit in js. new Map() is what i had solved some of the order maintaining challenges so that should work here as well. I must say pawan's skills are top notch💯 Thanks again for bringing the best content out there Chirag!!!
Hi sir my self raju .I have been completd gradution since 2018 bsc(science background).After i am prepared competative exms but could not clear the exms.i am intrested to frontend developer can i learn frontend course.your valuble suggestion sir. i am also telugu medium background student
What platform you are using to write code? Btw nice and informative video, a request is, your voice echoes a lot so please if possible improve it thanks for the video ❤
Made an LRU Cache and Implemented it inside a memorize function (from 1st interview video) - class LRUCache { constructor(capacity) { this._capacity = capacity; this._map = new Map(); } get = (key) => { //see if the key exists if (this._map.has(key)) { // Key exists, get the value and move it to the last index because it is the recently used const value = this._map.get(key); this._map.delete(key); this._map.set(key, value); return value; } else { // Key doesnt exists, return -1 return -1; } }; set = (key, value) => { // see if the key exists const prevValue = this.get(key); //if key exists, then move it to the right. if (prevValue !== -1) { this._map.delete(key); this._map.set(key, value); } // if key doesnt exists, delete the least used and insert this one. else { // Key doesnt exists, see if the capacity is reached if (this._map.size === this._capacity) { //delete the first index for (let [firstKey] of this._map) { this._map.delete(firstKey); break; } } // insert the key this._map.set(key, value); } }; } function memoize(fn, cacheSize) { const cache = new LRUCache(cacheSize); return function (...args) { console.log(cache._map); const key = args.join(); if (cache.get(key) !== -1) { console.log("Getting for cache"); return cache.get(key); } else { const result = fn(...args); cache.set(key, result); return result; } }; }
Best interview series on internet. This video made my day. Thanks Chirag sir once again for this gem
Thanks a ton ❤️
Hey , the question levels are just awesome.. I can't even imagine that this type of questions can be asked in interviews... Will follow this series to be updated
Awesome. Keep learning, keep sharing 🚀
Amazing work @Chirag. Even though I have 13 years of experience and have learned a lot from you, Thanks, bro
Chirag, I have following you since a while, I would say you are doing a great job. 👍👍
The Problem statements you come up with are very unique and organised, I am learning a lot from this series.
I was expecting someone from same experience level to come for this series.
I wish I would be there some day on this series as well 😂, Just Kidding.
For Pavan, I would say, He should be pushed to next Round. 👍
keep up the great work.
Thanks for the feedback ❣️
Good stuff, many things to learn
Glad you liked it. Keep watching, keep sharing 🚀
Hi Chirag,I have 1.5 years of experience. Just one week ago, an interviewer asked me the same first question (auto retry api). At that time, I wasn’t able to answer that question😢. I wish I had found this video a little earlier😅. Thank you, Chirag, always love your videos.
🎉🎉🎉🎉
Awesome. More videos to come. Keep learning, keep sharing 🚀
❤️❤️
which company and can you please tell me some more intresting questions asked
Great interview and top candidate 🚀
Awesome ❣️ Many more to come. Keep watching, keep sharing 🚀
Please keep on doing this.. i love it chirag! Thanks ❤❤
Keep supporting me, keep sharing these videos on LinkedIn and I will try to bring more and more quality content on RUclips.
#goodkarma
Yooo!!! Best js interview of the whole Chakde frontend interview series.
My solution:
//LRU cache automatic cache clear
// approach 1: which came to my mind at first
/*
lets have a cache array in which i'll be putting cache data
and will try to add the time when we have added it in it.
will run a auto clear cache function after certain time and it will check
sort the array based on time, the items which are added.
will remove least recently used
*/
let count = 0;
let cache = new Array(5);
cache.fill({ item: "2", time: 10 });
function addToCache(data) {
let currentTime = Date.now();
cache.push({ item: data, time: currentTime + count });
count++;
}
function LRU(data) {
cache.sort((a, b) => a - b);
let leastRecentlyUsed = cache[0];
console.log("leastRecentlyUsed", leastRecentlyUsed);
cache.shift();
addToCache(data);
}
function pushDataToCache(data) {
if (cache.length !== 5) {
addToCache(data);
}
else {
LRU(data);
}
}
pushDataToCache(40);
pushDataToCache(50);
pushDataToCache(60);
pushDataToCache(30);
pushDataToCache(10);
pushDataToCache(1);
pushDataToCache(50);
console.log(cache);
function getValueFromCache(data){
let finding = cache.find(item => item.item === data);
if(!finding){
console.log(data, "Not found");
return;
}
console.log(data, "Yes item found",finding);
}
getValueFromCache(50);
getValueFromCache(40);
Thank you, Chirag Sir
Great you liked it ❤️
The interesting thing about this interview series is that Chirag always gives you a chance to correct your mistakes. We know that while doing live feature development or coding, we will make small mistakes. Chirag notices those mistakes and give small hints to correct the issues. Thank you, Chirag, for making this amazing series. 👍
❤️
One more Gem from Chakde frontend ❤❤❤
Keep watching, keep sharing 🚀 Many more to come ❤️
Thank you so much for spending time in mock interviews and sharing with us.
Wonderful session as always ☺️
Glad you enjoyed it! ❣️
ese kehte interview questions great
I think Pawan was updating the timestamp at the time of getting the data/key, that's why the timestamps at the end are the same (same problem as the setAsyncData being passed 0 for timeout value in setTimeout).
amazing session. So much to learn. Thanks a lot, Chirag for the take up this series.
Glad you liked it❤️
Keep the series going, really helpful
Keep learning, keep sharing 🚀
Geeting something new everytime,
Really good choice of questions. Learnt a lot
Glad to hear! ❣️
Really nice learning something different from you always new things, please add time stamps if its possible?
Noted. 👍
Can we maintain a counter for times of access then we compare based on it least accessed to identify. Will it work?
Chirag, You are doing fabulous. I'm learning a lot from your mock interviews. But I do have one query here that your advise to keep map as data structure of cache which will maintain the insertion order and will help us to identify which key should be going to delete while setting new key but when we are going to set one more key in the cache after getting/accessing values from cache then the time will be updated but not the insertion order then still we need to figure out which time stamp is lowest to be excluded using loop. Please correct if I'm thinking in a wrong way and thanks in advance!
very knowledgeable
Thanks Sirji...❤🎉
❣️
1st Question - I created a counter and a function which will be executed inside it
async function fetchWithAutoRetry(fetcher, maxtry = 5) {
let count = 1;
async function fetchData() {
try {
return await fetcher();
} catch (err) {
console.error(`Attempt ${count} failed.`, err);
if (count < maxtry) {
count++;
return await fetchData();
} else {
throw new Error("Max retry reached");
}
}
}
return await fetchData();
}
const p1 = () => {
return new Promise((res, rej) => res(1));
};
const p2 = () => {
return new Promise((res, rej) => (Math.random() < 0.1 ? res(2) : rej(3)));
};
fetchWithAutoRetry(p1, 5)
.then((item) => {
console.log("fetcher 1", item);
})
.catch((err) => {
console.error("fetcher 1", err);
});
fetchWithAutoRetry(p2, 5)
.then((item) => {
console.log("fetcher 2", item);
})
.catch((err) => {
console.error("fetcher 2", err);
});
We Can solve like this. We don't need to use Math.random we can write like this if promise reject then function should call Max Count time.
async function fetchAutomatically(fetcher, maxCount) {
if (maxCount {
return new Promise((res, rej) => rej('Passed'));
};
fetchAutomatically(fetcherFn, 5);
Good stuff. Chiraj could you please upload the mock interview for 2 years experienced candidates.
Definitely. It's in pipeline. Will be live soon 🚀
@@engineerchirag Thanks
can some help me if for the first question where we need to create a function that retry a promise n number of times will this code work this is not proper production ready just a rough to get the idea
function retryFetch(fetch, maxRetyCount) {
fetch().then(function (res) {
console.log(res);
}).catch(function (err) {
console.log(err);
if (maxRetyCount) {
maxRetyCount -= 1;
retryFetch(fetch, maxRetyCount);
}else{
console.log("rety attempt failed",err);
}
});
}
function fetcher() {
return (
new Promise(function (res, rej) {
if (Math.random() > 0.5) {
res("resolved");
} else {
rej("rejected");
}
})
);
}
I tested it myself seems to be working cna someone proof read it for me I just tried to keep it simple
Hi Chirag Sir,
I have 2-3 years of Experience in JavaScript can i get a chance to do a Mock Interview With you or at least can i get some advice to crack the frontend Coding Interviews from you?
Awaiting for your Acknowledgment,
Thank you
You bring really good question @chirag
but I will not select this man as he has 9yr of exp. and instead of making thing simple, he just make it more complicated.
btw thanks for bringing such a question which will help people to thinks in real-time when a person giving interview.
Thanks for feedback 👍
Hi chirag, I'm interested to give mock interview
Love from kerala ❤
🥳me too
What is the code editor that you are using Chirag ?
Please make videos for react interview as well
Hey watch this react interview and stay tuned more react interviews are lined up
ruclips.net/video/uHGtzBn8luI/видео.htmlsi=O24RWRLpjAbZlEm0
Please share which tool you are using for questions? First i thought it was codepen. But it is something different. Is it made by you?
DM pls
@@engineerchirag hello sir, tried to DM on Twitter but it is only for blue tick users. Cannot dm there. Should I dm on LinkedIn?
Hi Chirag, I have 5+ years of experience in UI development with Tech skills: HTML5,CSS3 Bootstrap,Tailwind CSS,Responsive Design, Media Queries. I have knowledge on Javascript and Vuejs framework just i want to improve deep knowledge and Strong experience in Javascript and other Framework like React. I know the way how to do but coming to real time, i am facing difficulty to solve problems and logical ways. Can you suggest how can I overcome from this difficulties to solve problems in logical way.
It sounds monotonous but the fact is you can overcome your fear by practicing more and more. Also, you can leverage AI (ChatGpt) where ever you stuck while coding first try to solve on your own & still won't be able figure out then go and ask Gpt. You can try this method.
Hi chirag , So for LRU cache question , are you expecting the solution with map & linked list?
Both are good options 😃
can i know where can i get practice problems like those in the video
Every Saturday on Chakde Frontend Interview series 😛
Hi Chirag sir, can you suggest some resources where we can practice these kind of questions to prepare for our interview.
Chakde Frontend Interviews series 😛
Hi Chirag, Can you please suggest some resource where we can practice these type of question?
Chakde Frontend Interviews series 😛
How should junior developer should answer in interview and explain our approach to the interviewer.
These interviews will help you
Asking Just out of curiosity
Being an engineering manager at MS, how much you need to code in daily basis?
I find time for coding 😃
can you make video on how senior developer code and review code of junior developer
Noted 👍
+1
Great set of questions, Chirag. Though, I have a doubt here, Using Map would be helpfull to handle the space complexity better but how is the order insertion helpful? As in map order is only updated at the time whn the values are set for the first time so later on when we set it or last access it, order wont be updated.
❤️
In case of update, we can first delete the old key from map and then re-insert it, that will maintain the order.
I've had some bad experiences with object in terms of maintaining the order. If the key is something that can be sorted the object follows the sorting stuff. Really weird shit in js. new Map() is what i had solved some of the order maintaining challenges so that should work here as well.
I must say pawan's skills are top notch💯
Thanks again for bringing the best content out there Chirag!!!
❤️
Hi Chirag, would you be open to conducting a mock interview with me? I’d really appreciate your guidance and feedback. Thanks!
Fill the form
what online compiler are you using to code?
DM pls
Hi sir my self raju .I have been completd gradution since 2018 bsc(science background).After i am prepared competative exms but could not clear the exms.i am intrested to frontend developer can i learn frontend course.your valuble suggestion sir. i am also telugu medium background student
What motivates you to learn and choose frontend development?
If you answer this then only I can help you with better suggestion.
What platform you are using to write code? Btw nice and informative video, a request is, your voice echoes a lot so please if possible improve it thanks for the video ❤
Let me work on Audio quality 👍
@@engineerchiragthank you sirji btw what platform it is on which candidate is coding?
❤
❣️
Sir, what about backend mock interview 😅
Haha apka hukum sar akho par 😛
I want to give the mock interview. But I don't think I can pass! 😂
Fill the form.
Great learning. One doubt, If we use a map then time complexity would still be O(n). Right? What do you think about my solution? I didn't use timestamp. Just used a queue.
class LRUCache {
constructor(size = 20) {
this.cache = {};
this.keys = [];
this.size = size;
}
#moveToMostRecentlyUsed(key) {
let indexOfKey = this.keys.indexOf(key);
while (indexOfKey < this.keys.length - 1) {
const temp = this.keys[indexOfKey];
this.keys[indexOfKey] = this.keys[indexOfKey + 1];
this.keys[indexOfKey + 1] = temp;
indexOfKey++;
}
}
set(key, data) {
if (Object.hasOwn(this.cache, key)) {
this.#moveToMostRecentlyUsed(key);
} else {
if (this.keys.length >= this.size) {
const lruKey = this.keys.shift();
delete this.cache[lruKey];
}
this.keys.push(key);
this.cache[key] = data;
}
}
get(key) {
if (!Object.hasOwn(this.cache, key)) {
return;
}
this.#moveToMostRecentlyUsed(key);
return this.cache[key];
}
delete(key) {
if (!Object.hasOwn(this.cache, key)) return;
delete this.cache[key];
this.keys.splice(this.keys.indexOf(key), 1);
}
}
/************ Test Cases **************/
const lruCache = new LRUCache((size = 3));
// lruCache.set("1", "one");
// lruCache.set("2", "two");
// lruCache.set("3", "three");
// lruCache.set("2");
// lruCache.set("4", "four");
// // lruCache.delete("4");
// console.log(lruCache.keys.at(-1));
function asyncData(key, data, time) {
setTimeout(() => {
lruCache.set(key, data);
}, time);
}
asyncData("1", "one", 0);
asyncData("2", "two", 0);
asyncData("3", "three", 0);
asyncData("4", "four", 0);
setTimeout(() => {
console.log(lruCache.keys.at(-1));
console.log(lruCache.get("2"));
console.log(lruCache.keys.at(-1));
}, 2000);
Lovey @chirag. Best of Luck
❤️
Made an LRU Cache and Implemented it inside a memorize function (from 1st interview video) -
class LRUCache {
constructor(capacity) {
this._capacity = capacity;
this._map = new Map();
}
get = (key) => {
//see if the key exists
if (this._map.has(key)) {
// Key exists, get the value and move it to the last index because it is the recently used
const value = this._map.get(key);
this._map.delete(key);
this._map.set(key, value);
return value;
} else {
// Key doesnt exists, return -1
return -1;
}
};
set = (key, value) => {
// see if the key exists
const prevValue = this.get(key);
//if key exists, then move it to the right.
if (prevValue !== -1) {
this._map.delete(key);
this._map.set(key, value);
}
// if key doesnt exists, delete the least used and insert this one.
else {
// Key doesnt exists, see if the capacity is reached
if (this._map.size === this._capacity) {
//delete the first index
for (let [firstKey] of this._map) {
this._map.delete(firstKey);
break;
}
}
// insert the key
this._map.set(key, value);
}
};
}
function memoize(fn, cacheSize) {
const cache = new LRUCache(cacheSize);
return function (...args) {
console.log(cache._map);
const key = args.join();
if (cache.get(key) !== -1) {
console.log("Getting for cache");
return cache.get(key);
} else {
const result = fn(...args);
cache.set(key, result);
return result;
}
};
}
Keep the series going, really helpful
Thanks, pls help to spread this series 🙏❤️
Please share which tool you are using for questions? First i thought it is codepen. But it is something different. Is it made by you?
DM pls