Taro Logo

Software Engineer Interview Experience

July 6, 2020
Negative ExperienceNo Offer

Process

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.

Questions

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:

  • Data normalization and denormalization.
  • Recursion.
  • Reactive user interfaces.
  • Immutability.

The solution should be maintainable, extensible, and of production quality. We expect:

  • Clean, concise code.
  • Adoption of functional programming patterns. Feel free to use libraries that facilitate functional operations.
  • Semantic use of your chosen language.
  • Accurate implementation of provided graphical references. Feel free to use frameworks, but avoid UI component libraries such as Material UI and Bootstrap.
  • Quality unit tests for the library.
  • Documentation.
  • A README file containing comprehensive instructions on how to set up, run, and test your code.

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.

Library

myDB is a library that allows client applications to create and manipulate in-memory databases. The library should be able to:

  • Create databases.
  • Add new tables to a database.
  • Add new entities to tables.
  • An entity attribute can either be a value, which is a string, boolean, or scalar, or a reference to another attribute.
  • A reference should be described with a triplet following the format: [ tableId entityId attributeId ].
  • Resolve the value of a given reference.
  • Generate a normalized representation of the state of a database.
  • Generate a denormalized representation of the state of a database.

The library should expose at least the following functions.

createDB

It creates and returns a new myDB database.

Inputs:

  • None

Outputs:

  • database: object

createDB(); // => new myDB database

addTable

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:

  • database: object
  • tableId: string

Outputs:

  • database: object

addTable(db, 't'); // => db with a table of id t

addEntity

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:

  • database: object
  • tableId: string
  • entityId: string
  • entityBody: object

Outputs:

  • database: object

addEntity(db, 't', 'i', { attrId: 'attrValue' }); // => db with new entity of id "i" and body {attrId: "attrValue"} added to table "t"

dump

It generates a representation of the state of a given database.

Inputs:

  • database: object

Outputs:

  • database: object

dump(db); // => {t: {e1: {k: 'v'}, {e2: {refToK: ['t', 'e1', 'k']}}}}

denormalize

It generates a denormalized representation of the state of a given database.

Inputs:

  • database: object

Outputs:

  • database: object

denormalize(db); // => {t: {e1: {k: 'v'}, {e2: {refToK: 'v'}}}}

Frontend

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:

  • Entity ID 0: Birthday 15/12/1987, CPF 234.528.218-70, e-mail joao.silva@email.com, Name João da Silva e Silva
  • Entity ID 1: Birthday 18/01/1962, CPF 682.245.830-22, e-mail maria.goncalves@email.com, Name Maria Gonçalves Oliveira
  • Entity ID 2: Birthday 20/03/1989, CPF 207.772.923-16, e-mail janaina.araujo@email.com, Name Janaina Araújo dos Santos

Accounts:

  • Entity ID 0: Balance 633400, CPF reference to Customers Table - Entity 2 - CPF, Status ACCOUNT_STATUS_ACTIVE
  • Entity ID 1: Balance -2357000, CPF reference to Customers Table - Entity 0 - CPF, Status ACCOUNT_STATUS_BLOCKED
This content was translated from Portuguese
View Original

Was this helpful?

Interview Statistics

The following metrics were computed from 102 interview experiences for the Nubank Software Engineer role.

Success Rate

21%
Pass Rate

Nubank's interview process for their Software Engineer roles is very selective, failing most engineers who go through it.

Experience Rating

Positive48%
Neutral9%
Negative43%

Candidates reported having mixed feelings for Nubank's Software Engineer interview process.

Nubank Work Experiences