I applied through a recruiter. The process took four weeks.
I had an interview with the team and then a technical test. It took them three weeks to respond. Their tech stack is quite different, and they use a lot of ClojureScript, Kafka, and Datomic. Having experience with these technologies gives you a lot of advantage.
You were tasked with the creation of a proof of concept for myDB, a brand new JavaScript library that enables the creation of in-memory client-side databases. Your final delivery should consist of a basic version of the library and a demo app that uses it to display a visual representation of an in-memory database. Expect to deal with:
The solution should be maintainable, extensible, and of production quality. We expect:
Both the library and demo app are meant for a web environment. They may be written in JavaScript or any programming language that compiles to JavaScript, such as TypeScript, Elm, ClojureScript, or Reason. You are allowed to use any of the features supported by the most recent versions of Chrome and Firefox.
myDB is a library that allows client applications to create and manipulate in-memory databases. The library should be able to:
[ tableId entityId attributeId ].The library should expose at least the following functions.
It creates and returns a new myDB database.
Inputs:
Outputs:
createDB(); // => new myDB database
Given a database and a tableId, it creates a new table with the specified tableId and adds it to the database. It returns the updated database.
Inputs:
Outputs:
addTable(db, 't'); // => db with a table of id t
Given a database, tableId, and entityBody, it creates a new entity with the provided entityBody and adds it to the specified table of the database, under a unique entityId. It returns the modified database.
Inputs:
Outputs:
addEntity(db, 't', 'i', { attrId: 'attrValue' }); // => db with new entity of id "i" and body {attrId: "attrValue"} added to table "t"
It generates a representation of the state of a given database.
Inputs:
Outputs:
dump(db); // => {t: {e1: {k: 'v'}, {e2: {refToK: ['t', 'e1', 'k']}}}}
It generates a denormalized representation of the state of a given database.
Inputs:
Outputs:
denormalize(db); // => {t: {e1: {k: 'v'}, {e2: {refToK: 'v'}}}}
Using myDB, implement a web app that displays an up-to-date representation of the state of a given database through a GUI. We don't expect either unit or end-to-end tests. Don't worry about animations or responsive behaviors, but try to follow the provided layout to the best of your abilities. The initial state of your app should consist of a sample database. Use your library to create, populate, and output a database containing the following tables and entities:
Customers:
Accounts:
The following metrics were computed from 102 interview experiences for the Nubank Software Engineer role.
Nubank's interview process for their Software Engineer roles is very selective, failing most engineers who go through it.
Candidates reported having mixed feelings for Nubank's Software Engineer interview process.