Flexiple spent good amount of time understanding our requirements, resulting in accurate recommendations and quick ramp up by quality developers.
Overall Flexiple brought in high-level of transparency with quick turnarounds in the hiring process at a significantly lower cost than any alternate options.
Flexiple has been instrumental in helping us grow at a fast pace. Their vetting process for engineers is top notch and they connected us with quality talent quickly.
Flexiple Developers are reviewed on their experience and complexity of products built. Those who display depth and have worked on end-to-end projects are given an introductory call.
Over a call, the developer’s ability to communicate in an articulate manner is tested. A deeper understanding of the candidate’s technical experience and also motivation to freelance is achieved.
Over one or more F2F interviews, the developer’s involvement and performance in building complex software products are assessed. This sets the platform to delve deeper into technology-specific discussions.
Developers' mental agility and problem-solving abilities are tested through a coding test involving algorithmic as well as skill-specific problems. A mixture of live evaluation and timed coding tests is used.
The live experience of working with developers is verified by reaching out to past clients and/or employers. Inputs on various qualitative factors such as reliability, punctuality, communication and responsiveness are received.
Performance during each engagement is continually assessed. Our developers are expected to maintain Flexiple standards across all engagements with our customers.
NodeJS is a server-side platform built on Google Chrome's JavaScript Engine (V8 Engine) written by Ryan Dahl in 2009, about thirteen years after the introduction of the first server-side JavaScript environment. According to SimilarTech, there are about 165 thousand websites build using NodeJS, with the United States having the highest share.
If you’re looking to hire a freelance NodeJS developer, this guide is going to help you find the perfect fit. We’ve included everything you need to know about hiring a great freelancer for your company.
Before diving into the fundamentals of hiring a freelance NodeJS developer, let's delve into some interesting facts about the history of NodeJS.
We have broken the sections into the following parts:
1. Let's introduce NodeJS to you.
2. Why is NodeJS widespread?
3. Writing the Job Description
4. Interview Questions for hiring a NodeJS developer
- Basic Questions
- Advanced Questions
- Data Structures/Algo Questions
Below are some key points that we at Flexiple have learned through trial and error - a process of filtering through over 15,000 developers.
Now that you have made a quality JD, it can still be tricky to evaluate the skills of your applicants. To help you with that, we have created a pool of questions that a good NodeJS developer should be comfortable with.
It is important to note that the ability to answer these questions doesn't imply that you have a top quality candidate. But it definitely is a big step in that direction.
To help you navigate through these questions, we’ve categorized the interview questions in 3 parts:
A. Basic concepts: Includes all basic concepts used across languages but we've focused on their significance in Node. This will give you an understanding of how strong their programming foundation is.
B. Advanced concepts: Includes all concepts that someone with higher expertise should know.
C. DS/Algorithm questions: To test the logical capability of the candidate.
console.log(1) console.log(2) console.log(3)
1 2 3
console.log(1) setTimeout(() => console.log(2), 0) console.log(3)
1 3 2
fun = () => { promise().then(() => { console.log("executed code") // sequential execution occurring after the promise function is executed }).catch((e) => { console.log(e) }) }
fun = () => { promise().then((data) => { console.log(data) // sequential execution occurring after the promise function is executed // and data is what it returns }).catch((e) => { console.log(e) }) }
fun = () => { promise().then(() => { return "first promise" }).then(() => { return "second promise" }).then(() => { return "third promise" }).catch((e) => { console.log(e) }) }
fun = async () => { const var1 = await promise() const var2 = await promise() const var3 = await promise() }
upstream app_servers { server backend1.example.com; server backend2.example.com; server backend3.example.com; }
server { listen 80; server_name localhost; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://app_servers; } }
Middleware Modules
These are npm packages such as Passport.js, Everyauth and Permit. These are packages that work on top of Node.js frameworks such as Express.js, Koa.js, Hapify.js. They utilise the ‘connect’ middleware conventions. This means that while using the aforementioned frameworks, you can just plug in the modules and use their functionality.app.post('/login', passport.authenticate('local', { successRedirect: '/', failureRedirect: '/login' }));
User Management as a Service
These are services such as Stormpath/Okta, Keycloak and Auth0. Over time, software has moved from on-premise to the cloud, to now a distributed API service. These technologies provide Identity Management APIs for software teams building web, mobile and API driven applications.var spClient = new stormpath.Client({ apiKey: apiKey }); // Grab our app, then attempt to create this user's account. spClient.getApplication(process.env['STORMPATH_APP_HREF'], function(err, app) { if (err) throw err; app.createAccount({ givenName: 'John', surname: 'Smith', username: username, email: username, password: password, }, function (err, createdAccount) { if (err) { return res.render('register', { title: 'Register', error: err.userMessage }); } passport.authenticate('stormpath')(req, res, function () { return res.redirect('/dashboard'); }); }); }); });
Custom Database and Authentication
This is the more do-it-yourself approach, where the developer builds the whole authentication architecture from scratch. It first starts with choosing your tech stack, database, hashing algorithm, method of maintaining sessions and so on. After this, the next part would be to build the user management service.class ValidParentheses{ func isValid(_ s: String) -> Bool { var stc = [Character]() for char in s { if char == "(" || char == "[" || char == "{" { stc.append(char) } else if char == ")" { guard stc.count != 0 && stc.removeLast() == "(" else { return false } } else if char == "]" { guard stc.count != 0 && stc.removeLast() == "[" else { return false } } else if char == "}" { guard stc.count != 0 && stc.removeLast() == "{" else { return false } } } return stc.isEmpty } }
The above code will input 0(false).
var a = 10; var b = 5; var c = 3; if (a / b / c) document.write("hi"); else document.write("hello");
The answer is A because the floating-point division returns a non zero value = 0.66 which evaluates to true and outputs ‘hi’.
var p = 2; var q = 4; var r = 6; if (p > q > r) document.write("true"); else document.write("false");
The answer is False. It may look like the output can be true because 6 > 4 > 2 is true, but PHP evaluates $z > $y first, which returns a boolean value of 1 or true. This value (true or 1) is compared to the next integer in the chain, bool(1) > $z, which will result in NULL and echo “false.”
We will talk to Arjun and get back to you with their availability, fee details and detailed resume within 24 hours!
Just share your contact details :')