Skip to content

Instantly share code, notes, and snippets.

@Juan931
Forked from jdnichollsc/ABC.md
Created May 6, 2021 00:45
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Juan931/cbd86588ab1cc8fcc39c27cff1ba62e3 to your computer and use it in GitHub Desktop.
Save Juan931/cbd86588ab1cc8fcc39c27cff1ba62e3 to your computer and use it in GitHub Desktop.
The Job Interview Guide

The Job Interview Guide 💼

And English is a Work in Progress ⌛

The STAR Method

A structured manner of responding to a behavioural-based interview question by discussing the specific situation, task, action, and result of the situation you are describing.

  • Situation
  • Task
  • Action
  • Result

Situation

Describe the situation that you were in or the task that you needed to accomplish. You must describe a specific event or situation, not a generalized description of what you have done in the past. Be sure to give enough detail for the interviewer to understand. This situation can be from a previous job, from a volunteer experience, or any relevant event.

Task

What goal were you working toward?

Action

Describe the actions you took to address the situation with an appropriate amount of detail and keep the focus on YOU. What specific steps did you take and what was your particular contribution? Be careful that you don’t describe what the team or group did when talking about a project, but what you actually did. Use the word “I,” not “we” when describing actions.

Result

Describe the outcome of your actions and don’t be shy about taking credit for your behavior. What happened? How did the event end? What did you accomplish? What did you learn? Make sure your answer contains multiple positive results.

Be as specific as possible at all times, without rambling or including too much information.

Axes

  • Motivation, self-motivated, passionate about real problems and company values.
  • Empathy, sees other's perspectives and motivations, fosters consensus and a collaborative work environment.
  • Starting, shows initiative, balances analysis, breaks work into chunks.
  • Finishing, perseveres, maintains focus, balances stress, lands projects.
  • Able to work in an unstructured environment, deals with ambiguity, promotes global ownership.
  • Conflict Resolution, handles challenging relationships appropriately.
  • Growth, knows their own strengths, recognizes their growth areas, invests in self-improvement.
  • Communication, uses clear, concise, compelling language.

How to prepare for a Behavioral interview?

Recall recent situations that show favorable behaviors or actions, especially involving course work, work experience, leadership, teamwork, initiative, planning, and customer service.

  • Prepare short descriptions of each situation; be ready to give details if asked.
  • Be sure each story has a beginning, middle, and an end, i.e., be ready to describe the situation, including the task at hand, your action, and the outcome or result.
  • Be sure the outcome or result reflects positively on you (even if the result itself was not favorable).
  • Be honest. Don't embellish or omit any part of the story. The interviewer will find out if your story is built on a weak foundation.
  • Be specific. Don't generalize about several events; give a detailed accounting of one event.
  • Vary your examples; don’t take them all from just one area of your life.

Using STAR Method

Describe a situation in which you were able to use persuasion to successfully convince someone to see things your way.

  • Creating a new template with ASP.NET MVC to work with designers in a better way (Separation of concerns for the win, instead of using server-side controls).
  • Use hybrid mobile frameworks (depending of the app) to reduce time to market and helping other teams (Become Ionic partners).
  • Creating new native plugins to give a better user experience (Open Source projects).

Describe a time when you were faced with a stressful situation that demonstrated your coping skills.

  • Working until the next day for a release to production (BevyUp)
  • My cat walking on the balcony (During a demo with the client)
    • Situation: I was in a meeting with a client, presenting a demo, when suddenly my wife appeared very scared and asked me for help because something was happening, then I realized that my little cat was walking on the edge of the balcony, I had to pause my presentation because I was so worried.
    • Task: Ask for a break and rescue my cat.
    • Action: I had to be brave and rescue the cat, then I was able to finish the presentation.
    • Result: I was able to face that so stressful situation because I was thinking in the solution instead of the problem, and then I was calm because I had been able to finish the presentation with the help of my team.
  • A PoC with a new technology in a short period of time (StartUp Acquisition)
  • Working in a project with 1 week sprints (working weekends)
  • Excel generation tool migration with a class having more than 30k lines of code and without business formulas.

Give me a specific example of a time when you used good judgment and logic in solving a problem.

  • Creating a new Open Source project to improve UX with a native look & feel (React Native InAppBrowser).
  • Use memoization and Big O notation to reduce complexity with RxJS subscriptions.
  • Found SQL Injection issues concatenating Database queries from a third party system.
  • Using hooks to reduce code complexity and increase test coverage.
  • Using macros from Assembly lenguage to reduce complexity.

Give me an example of a time when you set a goal and were able to meet or achieve it.

  • Using a new strategy to implement a real-time connection.
  • Database migration from NoSQL (MongoDB) to SQL & Multi-tenant (PostgreSQL) takes less than 3 months.

Tell me about a time when you had to use your presentation skills to influence someone's opinion.

  • Comparison between React Native and NativeScript for cross-platform native UI apps.
  • Web Components and compilers instead of a Framework (Be agnostic, it Depends... maybe You don't need it).
  • Using promises for HTTP requests from Unity.
  • Divide and conquer (Avoid blocking tasks)
    • Situation: Implementing new features from a React Native app was giving us some problems, specially because we're using React class components with nested code, having complex local states with large components and repeated code, so it was difficult to maintain unit tests and increase test coverage.
    • Task: My goal was to help another Senior developer with a new feature adding a real-time connection from some screens of a chat module and increasing the test coverage of a complex component.
    • Action: We had some sessions of pair programming but I was stuck waiting for my partner to finish the dependent task assigned to him, so I decided to investigate on my own how to reduce the complexity of the current code and avoid adding nested code to the chat component. I learned about a new way to reuse code, extend behaviors easily and have components as small functions using functional programming and React hooks, while also implementing the real-time connection. As my colleague did not agree to do it in a different way, I proceeded to speak with the PM about the advantages that this new utility offered us and I made a presentation to share the knowledge gained about this new React feature with the rest of the team.
    • Result: We agreed with the team to use this new strategy for this implementation and thanks to this we were able to finish the feature 2 weeks ahead of schedule and increase test coverage by 20% by having small features that were much easier to maintain and test. Also, a few months later I made a talk about these topics for the rest of the company and it was shared on YouTube.

Give me a specific example of a time when you had to conform to a policy with which you did not agree.

  • Using fingerprint to register arrival and departure time at work

Please discuss an important written document you were required to complete.

  • Documenting multi-tenant architecture
    • Situation: Architecture documentation was required by the client.
    • Task: Create architecture documentation of the project about purpose, scope, business and technical architecture, data migration and deployment strategies, version management and environment set-up.
    • Action: I designed the first version of the document about architectural overview of the solution, to capture and convey the significant architectural decisions which have been made on the system.
    • Result: The documentation created was a good guide for new developers to understand the scope of the project, listing all definitions, references and human operations involved to support business processes which are triggered and generate business events. With this guide I defined each business process, design patterns and principles used in the project, coding conventions, describing frameworks, services and dependencies involved in the execution, defining the tiers where the software components are deployed and executed, listing functional and non-functional requirements and about technical architecture I generated component, deployment, package, use case and entity relationship diagrams to illustrate the logical structure and organization of the project. I identified opportunities for improvement about deployment strategies to automate the process publishing new releases to Production environment and avoiding risks to access to the database externally due to default configurations.

Tell me about a time when you had to go above and beyond the call of duty in order to get a job done.

  • Use personal time to update deprecated templates and avoid code refactors of the project in the future.
  • Create a fully working prototype instead of a PoC to make a good impression with a partner.
  • Committed working in a PoC until early the next day.
  • Attending a meeting with the client while I was in a recreational activity of the company (playing bowling with coworkers).
  • Working in a presentation during weekends for all-hands meeting.

Tell me about a time when you had too many things to do and you were required to prioritize your tasks.

  • Daily meetings to prioritize tasks.
  • Stoping/Delegating my tasks to help coworkers and other teams of the project (Releases to production, Hotfixes).

Give me an example of a time when you had to make a split second decision.

  • Reverting deployment testing on production (CodePush not working with a hotfix to log native exceptions).
  • Stop a presentation with the client to rescue my cat while he was walking on the balcony outdoor.

What is your typical way of dealing with conflict? Give me an example.

  • Take the decision with the rest of the team.
  • Analyze other perspectives, but review what we did and let's see what to do for improvement (Flexible).
  • Keep a cool head because it's just work (New PMs, coworkers getting frustration, etc).

Tell me about a time you were able to successfully deal with another person even when that individual may not have personally liked you (or vice versa).

  • It's work, never mix business with personal matters (Loss of professionalism, maintain a balance between personal and professional lives).
  • PM taking bad decisions with the client, so taking decisions with the rest of the team and the software architect.

Tell me about a difficult decision you've made in the last year.

  • Study for this interview, remember concepts that I'd not reviewed since college (Practice algorithms and many other things in a short time)
    • Situation: Many other professionals prepare months and even years to present themselves to a FAANG company, this is my first time and the recruiter contacted me because of my contributions, I was not prepared, It has really been a lot of work these days, preparing for these meetings, a lot to do in a short time.
  • Taking a remote job with only 4 months working as a Software Architect in another company

Give me an example of a time when something you tried to accomplish and failed.

  • A big refactor took longer than estimated

Give me an example of when you showed initiative and took the lead.

  • Help the company to be a trusted partner of a technology by sharing my own side projects

Tell me about a recent situation in which you had to deal with a very upset customer or coworker.

  • Perfect is the enemy of good having strict deadlines

Give me an example of a time when you motivated others.

  • Being speaker in local communities like CodeYourFuture
  • Helping another developer to get a new role (Being a mentor)

Tell me about a time when you delegated a project effectively.

  • Delegating leadership while helping to develop her confidence (nobody is indispensable, avoid comfort zones, upgrade her skills, adopt a proactive approach)

Give me an example of a time when you used your fact-finding skills to solve a problem.

  • Stranger things with the code (Strange behaviors, code not working as expected)
  • Creating templates and fixing issues learning new technologies with Open Source projects

Tell me about a time when you missed an obvious solution to a problem.

  • Ignoring brute force solutions thinking about Big O Notation and Cyclomatic complexity

Describe a time when you anticipated potential problems and developed preventive measures.

  • Sharing with the team about semantic versioning and the correct way to use that with CodePush from production

Tell me about a time when you were forced to make an unpopular decision.

  • Not using Redux (Popular State management)

Please tell me about a time you had to fire a friend.

  • Informed but they didn't take me into account

Describe a time when you set your sights too high (or too low).

  • Being a perfectionist and trying to do everything on my own (not settling for what already exists and works, but trying to improve it)

Credits:

Dynamic Programming

Dynamic Programming (DP) is a similar approach to Divide & Conquer. It also breaks the problem into similar subproblems, but they are actually overlapping and codependent — they’re not solved independently. Each subproblem’s result can be used anytime later and it is built using memoization (precalculation). DP is mostly used for (time & space) optimization and it is based on finding a recurrence.

Big O Notation

A method which describes algorithm complexity, the execution time required or the space used in memory by an algorithm, where "n" represents size of the data structure.

Time complexity

Describe the rough estimate of the number of "steps" to complete the algorithm.

  • Rules:
  • O(1) * O(n) = O(n) ------------ do something n times => loop
  • O(n) * O(n) = O(n^2) ------------ outer loop runs n times * inner loop runs n times (nested loop)
  • O(1) + O(n) = O(n) ------------ constant time + loop
  • O(n) + O(n^2) = O(n^2) ---------- loop + loop with nested loop
  • O(1) + O(n) + O(n^2) = O(n^2)
  • O(1) + O(n/2) + O(100) = O(n) --- As n gets really big, any operation has a decreasingly significant effect
  • O(n^3 + 50n^2 + 10000) = O(n^3)
  • O((n+30) * (n+5)) = O(n^2)

Assuming "n" becomes very large, the notation with slower increase speed could be ignored 🐌 (as the nature of large scale data in computer engineering, everything else is quickly eclipsed as n gets very large)

  • Speed: O(1) < O(log(n)) < O(n) < O(n log(n)) < O(n^2)

  • Sort Algorithms (Worst case):

    • Mergesort, Timsort, Heapsort = O(n log(n))
    • Quicksort, Bubble Sort, Insertion Sort, Selection Sort = O(n^2)

Space complexity

About memory cost, to optimize an algorithm for using less memory. When comparing different algorithms, we often compare how much "extra" space complexity is needed to solve the problem. In an algorithm, we need to create an array of size n to store the temporary results before getting the final result. If we assume that the size of a element in the array is a constant "C" which is independent to "n", the space complexity for using the array is Cn which is O(n) * O(C) = O(n) * O(1) = O(n)

O(1) space complexity if more efficient than O(n)

  • Data Structures:
    • Array, Stack, Queue, Hash Table, BST = O(n)
    • Skip list = O(n log(n))
  • Sort Algorithms:
    • Heapsort, Bubble Sort, Insertion Sort, Selection Sort = O(1)
    • Quicksort = O(log(n))
    • Mergesort, Timsort = O(n)

LIFO

Last In, First Out, e.g: Stacks

Stack Push Stack Pop

FIFO

First In, First Out, e.g: Queues

Queue Add Queue Remove

Call stack

A stack data structure that stores information about the active subroutines of a computer program. (also known as an execution stack, program stack, control stack, run-time stack, or machine stack). It's used to keep track of the point to which each active subroutine should return control when it finishes executing. An active subroutine is one that has been called, but is yet to complete execution, after which control should be handed back to the point of call.

Graphs

Graphs are used to represent networks. It's a data structure that consists of the following two components:

  • A finite set of vertices also called as nodes.
  • A finite set of ordered pair of the form (u, v) called as edge. The pair of the form (u, v) indicates that there is an edge from vertex u to vertex v. The edges may contain weight/value/cost. Example:
  (u, v)
[0] -- [1]
 |    /   \
 |   /     [2]
 |  /     /
[4] -- [3]

Adjacency Matrix

A 2D array of size V x V where V is the number of vertices in a graph (used to represent weighted graphs). e.g:

[[0, 1, 0, 0, 1],
 [1, 0, 1, 0, 1],
 [0, 1, 0, 1, 0],
 [0, 0, 1, 0, 1],
 [1, 1, 0, 1, 0]];
  • Consumes more space O(V^2).
  • Adding a new vertex the storage must be increases to (|V|+1)^2, complexity is O(V^2).
  • Adding an edge requires O(1) time.
  • Removing a vertex the storage must be decreased to V^2 from (|V|+1)^2, complexity is O(V^2).
  • Removing an edge takes O(1) time.
  • Finding for an existing edge, given two vertices, can be checked in O(1) time.

Adjacency List

A graph is represented as an array of linked list. The size of the array is equal to the number of vertices.

[
  [1, 4],
  [0, 2, 4],
  [1, 3],
  [2, 4],
  [0, 1, 3]
];
  • Saves space O(|V|+|E|).
  • Adding a vertex is easier O(1).
  • Adding an edge requires O(1) time.
  • Removing a vertex takes O(|V|+|E|) time (search for the vertex and traverse the edges).
  • Removing an edge takes O(|E|) time (traversing through the edges).
  • Queries like whether there is an edge from vertex u to vertex v are not efficient and can be done O(V).

Tree traversal (walking the tree)

Refers to the process of visiting (checking and/or updating) each node in a tree data structure, exactly once. As a tree is a self-referential (recursively defined) data structure, traversal can be defined by recursion or, more subtly, corecursion, in a very natural and clear fashion; in these cases the deferred nodes are stored implicitly in the call stack.

Traversing a tree

Involves iterating over all nodes in some manner:

Traversing a tree

Depth-first search (DFS)

Starts at the root node and explores as far as possible along each branch before backtracking, with a DFS you push the children of the current node onto a stack, so they will be popped and processed before everything else. It's easily implemented via a stack, including recursively via the call stack:

  • Pre-order (NLR): It's a topologically sorted one, because a parent node is processed before any of its child nodes is done.
  • In-order (LNR): Retrieves the keys in ascending sorted order.
  • Reverse in-order (RNL): Retrieves the keys in descending sorted order.
  • Post-order (LRN): The trace of a traversal is called a sequentialisation of the tree. The traversal trace is a list of each visited root.

Breadth-first search (BFS)

Starts at the tree root and explores all of the neighbor nodes at the present depth prior to moving on to the nodes at the next depth level, with a BFS you push the children onto the end of a queue, so they will be popped and processed after everything else. It's easily implemented via a queue, including corecursively.

Credits:

Algorithms

  • Dijkstra (Shortest paths between nodes in a graph)
  • Rabin-Karp (a string-searching that uses hashing to find an exact match of a pattern string in a text)
  • Aho–Corasick (a string-searching that locates elements of a finite set of strings within an input text like "dictionary-matching")

Arrays

Given an array of size N in which every number is between 1 and N, determine if there are any duplicates

// Time complexity: O(n^2) - BAD
function hasDup (list: Array<number>): boolean {
  for (let i = 0; i < list.length; i++) {
    for (let j = i+1; j < list.length; j++) {
      if (list[i] === list[j]) return true
    }
  }
  return false
}
// Time complexity: O(n) - GOOD
function hasDup (list: Array<number>): boolean {
  list.sort()
  for (let i = 0; i < list.length - 1; i++) {
    if (list[i] === list[i+1]) return true
  }
  return false
}

Given an array of words, get a list of these words bucket by anagrams

Input: ["star", "rats", "car", "arc", "xml"]
Output: [["star", "rats"], ["car", "arc"], ["xml"]]
function getWordsBucketByAnagram(list: Array<string>): Array<Array<string>> {
  const bucket: { [key: string]: Array<string> } = {}
  for (let i = 0; i < list.length; i++) {
    const word = list[i]
    const key = word.split('').sort().join('')
    bucket[key] = [...(bucket[key] || []), word]
  }
  return Object.keys(bucket).map(key => bucket[key]) // Same as Object.values(bucket)
}
console.log(getWordsBucketByAnagram(["star", "rats", "car", "arc", "xml"]))

Given a list of calendar events, determine if any events conflicts

[
  [1, 2, 'a'],   // start, end, id
  [3, 5, 'b'],   -┐
  [4, 6, 'c'],   -┘
  [7, 10, 'd'],  -┐
  [8, 11, 'e'],   |
  [10, 12, 'f'], -┘
  [13, 14, 'g']
];
// SOLUTION 1: Brute force; Compare every event to every other event, Slow => O(n^2) complexity
// SOLUTION 2: If the list is sorted, you can just compare the previous event, O(n) complexity
function getConflicts (events: Array<Array<any>>) {
  return events.reduce(function (result, event, index) {
    const previousEvent = events[index-1]
    if (previousEvent && event[0] < previousEvent[1]) {
      result.push(event[2])
    }
    return result
  }, [])
}
// SOLUTION 3: Merge conflicts of the sorted list of events
function findConflicts (events) {
  let conflicts = []
  let temp = [events[0][2]]
  let end = events[0][1]
  for (let i = 1; i < events.length; i++) {
    if (events[i][0] >= end) { // No conflict :)
      if (temp.length > 1) {
        conflicts = conflicts.concat(temp)
      }
      temp = []
    }
    end = Math.max(events[i][1], end)
    temp.push(events[i][2])
  }
  if (temp.length > 1) {
    conflicts = conflicts.concat(temp)
  }
  return conflicts
}

Given a table for N people, figure out every possible seating of the table for all of your friends

# SOLUTION: Power set
                         start
        leave              |             take
           |‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|
           -                              1
    |‾‾‾‾‾‾‾‾‾‾‾‾‾|                |‾‾‾‾‾‾‾‾‾‾‾‾‾|
    --           -2               1-            12
    |             |                |             |
 |‾‾‾‾‾|       |‾‾‾‾‾|          |‾‾‾‾‾|       |‾‾‾‾‾|
---   --3     -2-   -23        1--   1-3     12-   123
                     |               |       |
                   -234             1-34    12-4  
/**
 * Power set
 * Time complexity: O(2^n)
 */ 
function findDinnerParties(friends: Array<string>, tableSize: number) {
  function combineFriends(
    friends: Array<string>,
    tableSize: number,
    groups: Array<Array<string>> = [],
    group: Array<string> = [],
    pos = 0
  ) {
    if (group.length === tableSize) groups.push(group)
    else if (pos < friends.length) {
      combineFriends(friends, tableSize, groups, group, pos + 1)
      
      const newGroup = [...group]
      newGroup.push(friends[pos])

      combineFriends(friends, tableSize, groups, newGroup, pos + 1)
    }
    return groups
  }

  return combineFriends(friends, tableSize)
}
findDinnerParties(['Sara', 'Juan', 'Valentina', 'Julian', 'Laura'], 3)

Sorting

Merge Sort

function mergeSort(arr: Array<number>): Array<number> {
  if(arr.length <= 1) return arr;

  const mid = Math.ceil(arr.length / 2);
  const left = mergeSort(arr.splice(0, mid));
  const right = mergeSort(arr.splice(-mid));

  const result = [];
  while(left.length && right.length){
    if(left[0] > right[0]) {
      result.push(right.shift());
    } else {
      result.push(left.shift());
    }
  }
  return [
    ...result,
    ...left,
    ...right
  ];
}

Quick Sort

function quickSort(arr: Array<number>): Array<number> {
  if (arr.length < 2) {
    return arr;
  }
  const pivot = arr[Math.floor(Math.random() * arr.length)];

  const left = [];
  const right = [];
  const equal = [];

  for (let val of arr) {
    if (val < pivot) {
      left.push(val);
    } else if (val > pivot) {
      right.push(val);
    } else {
      equal.push(val);
    }
  }
  return [
    ...quickSort(left),
    ...equal,
    ...quickSort(right)
  ];
}

Binary trees

class TreeNode {
  public left!: TreeNode
  public right!: TreeNode
  constructor (
    public value: number
  ) { }
}

Perform in order traversal on a binary tree

function inOrder (node: TreeNode): Array<number> {
  if (!node) return []
  return [
    ...inOrder(node.left),
    node.value,
    ...inOrder(node.right)
  ]
}
function addNode (node: TreeNode, value: number) {
  if(!node) return new TreeNode(value)
  if(value >= node.value) {
    node.right = addNode(node.right, value)
  } else {
    node.left = addNode(node.left, value)
  }
  return node
}
function setNodes (node: TreeNode, values: Array<number>) {
  values.forEach(value => addNode(node, value))
  return node
}
const tree = new TreeNode(5)
setNodes(tree, [8, 4, 3, 1])
console.log(inOrder(tree)) // Output: [1, 3, 4, 5, 8]

Given a binary tree, get the average value at each level of the tree

Input:
     4
    / \
   7   9
  / \   \
 10  2   6
      \
       6
      /
     2
Output: [4, 8, 6, 6, 2]
type Level = {
  total: number
  count: number
}

function collect (node: TreeNode, levels: Array<Level>, levelIndex = 0) {
  if(!node) return
  const level = levels[levelIndex]
  if (!level) {
    levels[levelIndex] = { total: node.value, count: 1 }
  } else {
    level.total += node.value
    level.count += 1
  }
  levelIndex++
  collect(node.left, levels, levelIndex)
  collect(node.right, levels, levelIndex)
}
function getAvgByLevel(node: TreeNode) {
  const levels: Array<Level> = []
  collect(node, levels)
  return levels.map(({ total, count }) => total / count)
}
const tree = new TreeNode(4);
tree.left = new TreeNode(7);
tree.left.left = new TreeNode(10);
tree.left.right = new TreeNode(2);
tree.left.right.right = new TreeNode(6);
tree.left.right.right.left = new TreeNode(2);
tree.right = new TreeNode(9);
tree.right.right = new TreeNode(6);
console.log(getAvgByLevel(tree))

Graphs

// Using Adjacency Matrix
const graph =
  [[1, 1, 0, 0, 1, 0],
   [1, 0, 1, 0, 1, 0],
   [0, 1, 0, 1, 0, 0],
   [0, 0, 1, 0, 1, 1],
   [1, 1, 0, 1, 0, 0],
   [0, 0, 0, 1, 0, 0]];

Returns whether there's a path between two nodes in a graph

/**
 * DFS is easy to implement recursively because you can use the call stack as the stack.
 * Time complexity: O(|V|^2).
 */
function hasPath(
  graph: Array<Array<number>>,
  current: number,
  goal: number
): boolean {
  const stack: Array<number> = [];
  const visited: Array<boolean> = [];
  stack.push(current);
  visited[current] = true;
  while (stack.length > 0) {
    const node = stack.pop();
    if (node === goal) {
      return true;
    }
    for (let i = 0; i < graph[node].length; i += 1) {
      if (graph[node][i] && !visited[i]) {
        stack.push(i);
        visited[i] = true;
      }
    }
  }
  return false;
}
console.log(hasPath(graph, 1, 5)) // Output: true

Returns the shortest path between startNode and targetNode

/**
 * BFS visits the neighbor vertices before visiting the child vertices, and a queue is used in the search process.
 * Time complexity: O(|V|^2).
 */
function shortestPath (
  graph: Array<Array<number>>,
  startNode: number,
  targetNode: number
): Array<number> | null {
  const parents = [];
  const queue = [];
  const visited = [];
  queue.push(startNode);
  parents[startNode] = null;
  visited[startNode] = true;
  while (queue.length > 0) {
    const current = queue.shift();
    if (current === targetNode) {
      return buildPath(parents, targetNode);
    }
    for (var i = 0; i < graph.length; i += 1) {
      if (i !== current && graph[current][i] && !visited[i]) {
        parents[i] = current;
        visited[i] = true;
        queue.push(i);
      }
    }
  }
  return null;
}
function buildPath (
  parents: Array<number>,
  targetNode: number
): Array<number> {
  const result = [targetNode];
  while (parents[targetNode]) {
    targetNode = parents[targetNode];
    result.push(targetNode);
  }
  return result.reverse();
}
console.log(shortestPath(graph, 1, 5)) // Output: [1, 2, 3, 5]

Given a graph represented as an adjacency lists and a source vertex, get an array of objects describing each vertex with the distance from the source and the vertex's predecessor

type Vertex = {
  distance: number,
  predecessor: number | null
}
function getVertexDistanceAndPredecessor (
  graph: Array<Array<number>>,
  source: number
): Array<Vertex> {
  const bfsInfo: Array<Vertex> = [];
  bfsInfo[source] = {
    distance: 0,
    predecessor: null
  };
  const queue: Array<number> = [];
  queue.push(source);
  
  while (queue.length > 0) {
    const current = queue.shift() as number;
    for (let i = 0; i < graph[current].length; i++) {
      const v = graph[current][i];
      if (!bfsInfo[v]) {
        bfsInfo[v] = {
          predecessor: current,
          distance: bfsInfo[current].distance + 1
        };
        queue.push(v);
      }
    }
  }
  return bfsInfo;
}

Search

Binary Search

function binarySearch(arr: Array<number>, goal: number): number {
    let low = arr[0]
    let high = arr[arr.length - 1]
    while (low < high) {
        const mid = Math.floor(low + (high-low)/2)
        if (arr[mid] > goal) {
            high = mid
        } else {
            low = mid + 1
        }
    }
    return high
}

Optimization

Given a sorted array, insert a new element keeping the order

function insertSorted(arr: Array<number>, num: number) {
    let low = 0
    let high = arr.length
    while (low < high) {
        const mid = Math.floor(low + (high-low)/2)
        if (arr[mid] - num > 0) {
            high = mid
        } else {
            low = mid + 1
        }
    }
    return [
       ...arr.slice(0, low),
       num,
       ...arr.slice(low)
    ]
}

Real Life problems

Duplicated Transactions

Sometimes when a customer is charged, there is a duplicate transaction created. We need to find those transactions so that they can be dealt with. Everything about the transaction should be identical, except the transaction id and the time at which it occurred, as there can be up to a minute delay.

A transaction is looks like:

{
  "id": 123,
  "sourceAccount": "my_account",
  "targetAccount": "coffee_shop",
  "amount": -30,
  "category": "eating_out",
  "time": "2018-03-12T12:34:00Z"
}
// Input: list of transactions (Transaction[])
findDuplicateTransactions(transactions)
// Output: list of all the duplicate transaction groups, ordered by time ascending (Transaction[][])

Find all transactions that have the same sourceAccount, targetAccount, category, amount, and the time difference between each consecutive transaction is less than 1 minute.

Array.prototype.flatMap = function(lambda) { 
  return [].concat.apply([], this.map(lambda)) 
}
function diffMinutes(dt2, dt1) 
{
  const diff = (dt2.getTime() - dt1.getTime()) / 1000 / 60
  return Math.abs(diff)
}
// Sort with FP (Inmutability, Pure function)
function sortFP (
  transactions,
   timeProp = 'time'
) {
  return [...transactions].sort(
    (a, b) => new Date(a[timeProp]) - new Date(b[timeProp])
  )
}

// return your result from this function
function findDuplicateTransactions (transactions = []) {
  transactions = sortFP(transactions)
  /**
   * key: sourceAccount__targetAccount__category__amount
   * groups: Array<Object>]
   *   firstTime: for sorting groups  
   *   lastTime: last transaction time
   *   transactions: []
   */
  const map = {}
  transactions.forEach((tr) => {
    const key = [
      tr.sourceAccount,
      tr.targetAccount,
      tr.category,
      tr.amount
    ].join('__')
    const time = new Date(tr.time)
    const transactionMap = map[key] = map[key] || {
      key,
      groups: []
    }
    // Find the group with identical transactions
    const group = transactionMap.groups.find(
      g => diffMinutes(g.lastTime, time) <= 1
    )
    if (group) {
      group.lastTime = time
      group.transactions.push(tr)
    } else {
      transactionMap.groups.push({
        firstTime: time,
        lastTime: time,
        transactions: [tr]
      })
    }
  })
  const groups = Object.values(map).flatMap(m => m.groups)
  const result = sortFP(
    groups,
    'firstTime'
  ).reduce((duplicatedGroups, group) => {
    // Include groups with duplicated transactions
    if (group.transactions.length > 1) {
      duplicatedGroups.push(
        group.transactions
      )
    }
    return duplicatedGroups
  }, [])
  
  return result
}

Credits:

Frontend

Key points

  • Drive the interview
  • Explored the problem
  • Reason about your decisions
  • Think about trade-offs
  • Long Story short
  • Be quick the 2 problems has to solve in 30 minutes
  • Break down the problem into logical chunks and solved them

Strings

  • What format is the word/values given to us?
  • How do we define a nearby word?
  • Do we need to remove duplicate words/values in the output?

Arrays

  • Does the output need to be sorted?
  • Can I expect empty arrays? To avoid edge cases and errors at runtime
  • Are they all integers?
  • Can I destroy or modify the array?
  • Will the array ever be empty?

Binary Tress

  • What is the expected type of input values?
  • Is it ok to return just integers?

Solutions

  • Can I try that approach?

Remember

  • Are there any details I need?
  • Are there any restrictions?
  • Always discuss pitfalls and trade offs
  • Do I know everything I need to?
  • Can I identify a pattern by drawing it?
  • Iterative or recursive?
  • Will I be able to code this approach?
  • How can I improve this approach?

Credits:

Frontend

Backend

Cover Letter

[Date]

[Contact/Team Name]
[Contact Role]
[Company Name]
[Company Address]

To Whom It May Concern:

I am a software engineer with a background in web and mobile development, having 8+ years of practice and leadership building interactive experiences. I am writing to apply for the position of [Role Name] at [Company Name] posted in [LinkedIn/StackOverflow/etc]. As a huge fan of [Field Name] and also because Technology is changing all of the time, and I feel the skills, qualities and values I possess are a good match [for your company/to your growing team].

Work History/Results

[Company Name]'s commitment to [Field Name] is of particular interest to me because of my passion for [Field Name] development. I currently serve as a [Current Role Name] for [Current Company Name], where I work closely with the [Current Team Name] team on a number of high-priority cases. During my time here, I [implemented/designed] a new [Nice Feature/System Name] that ensures [Feature/System Benefit]. This [Feature/System] has prevented [missed deadlines/bad experiences] and [helped/allowed] for better [Results].

Previously, as a [Role Name] for the [Company Name], I received praise for my overall support of the [Name Team] and my positive attitude.

Additionally, in my role as [Role Name], I led our team in creating a [Strategy/Responsability] to drive our [Effort Name] efforts and promote our [Solution Name] on platforms including [Platforms]. With so many frameworks and technologies each day, I had to continually be creative in my approach to developing and delivering solutions that would be compelling and effective. As result of my efforts, our [Team/Project Name] experienced a [Percentage] increase in our [Program Name].

Optional

I am very hard working, always looking to improve my skills and research about new [strategies/technologies] to figure out new ways to do my job better, and also I am someone who is completely commited to building the best software products for the world.

I would love to be part of a great team when we're making a great impact solving interesting challenges, always we need the help of others, and with my experience I feel I have a lot to offer in regard to technical expertise and my passion to a shared goal.

I am very good at what I do because of my discipline and commitment, I know that if I'm part of your team I will start to contribute positively to the team's objectives quickly, always with the best attitude. I'm excited at the prospect of bringing the skills I developed through this experience to the [Role Name] at [Company Name].

  • Option A: I would love the opportunity to discuss how I can contribute to your team. Thank you in advance for your consideration, and I look forward to hearing from you.

  • Option B: For a greater illustration of my background and qualifications, please review my enclosed resume, I am eager to speak with you about this opportunity and thoroughly appreciate your consideration.

Sincerely,
[Name]
[Email]
[Phone Number]

Resume/CV

Credits

Amazon Dashboard

  • Define Objective/Requeriments
    • Create a Search textbox for products
  • Define Limitations
    • Ranking system
    • Number of products (database)
    • Number of categories (database)
    • Number of write Transactions per month
    • Number or read Transactions per month
  • Out of Scope
    • Suggestions
    • Infinite scrolling
  • Actions/Actors
    • Users (JWT roles)

Credits:

Systems

  • Design a system that allow people to report fake accounts on Facebook

Remember

  • Are there any details I need?
  • Are there any restrictions?
  • What are all the major parts?
  • Then, refine as much as possible.

Credits

I am a Software Engineer with more than 8 years of experience creating different kind of applications

My experience has been through the following processes:

  • Social applications and games; like contests and games on Facebook, using technologies like Canvas/WebGL, JavaScript libraries (jQuery, React, Phaser, etc), Angular, ASP.NET MVC, SQL Server in order to create dynamic websites with an excellent user experience and a flexible architecture that is capable of scaling to customer needs.
  • Hybrid mobile apps; using Frameworks like PhoneGap/Cordova/Capacitor, Ionic, Angular, etc in order to reduce technical debt creating cross-platform apps with technologies like HTML, CSS and JS, having a time to market adventage with a rapid prototyping and development.
  • Native mobile apps; using Frameworks like React Native and NativeScript to improve the user experience having a responsive UI and native behavior creating plugins/bridges for connecting third party SDKs using native code with Objective C and Java.
  • APIs and Cloud services; integrating cloud based services with Firebase, Azure and GCP to scale services on demand, using technologies like NodeJS (Express, NestJS) and ASP.NET Web API, Cloud Functions, Table and Blob storages, Apps Services (AppCenter), SQL Databases, IoT Hub, Bot Framework, Redis Cache, Azure DevOps, etc.
  • Database architecture; designing and implementating different kind of SQL and NoSQL Databases depending on the business information, like Microsoft SQL Server, Postgress, MongoDB, etc.
  • Continuous integration/deployment; using technologies like Azure DevOps, TeamCity, AppCenter and GitLab pipelines.
  • Investigating; performing POCs about new technologies that allow solving problems or improving processes.
  • Leadership; delegating strategies for decision making, helping the team with new ideas and sharing knowledge to continue improving different aspects of development.
  • Documenting; defining and creating technical and functional documentation of the products delivered to the client.
  • Methodologies; implementing Extreme programming and Scrum based on Kanban-style tools (JIRA, Azure DevOps, Trello, etc).
  • Speaker; creating talks and workshops about important topics for the team.
  • Open Source contributor; creating side projects to take advantage of the community to create components and libraries that can grow over time, while also solving business needs.

I am available for positions such as: Software Architect, Frontend, Backend, Mobile or Full Stack Developer.

Let me show you how I can be part of your work team, applying my experience and knowledges to help the company.

Positive comments!

  • Great work so far!

Ask or give Clarifications

  • I can go into more details if you'd like
  • Can you point me in the right direction?
  • It's not responsible for handling that
  • Here you go!
  • Not quite sure what you meant by this...
  • I'm not sure about...
  • But without success so far
  • As simple as that
  • As I mentioned earlier...
  • So by doing this,
  • I understand but the point of this is to introduce...

Questions

  • Can you tell me more about that?
  • What do you mean?
  • Hmm. Could you give me an example?
  • Is there a valid way to do that?
  • What do you expect to see in this exercise?
  • Shoud the project provide documentation?
  • Sorry to interrupt. Could you give me a moment please?
  • Are we assuming the time/complexity to fix the problem?
  • Could you break it into specific issues?
  • How long have you been working together?
  • How long ago did you meet she?
  • Why don't you go to take a time to rest?
  • Is there anything else I can do for you?
  • Have you had any of this?
  • What have you been up to?
  • hmm.. What cud be the next step in your view? Do you want me to check something specific with XXX?
  • Do you ever feel too tired to finish something?
  • Do you have a special talent for a particular skill or ability?
  • What are some things that you don't consider to be rocket science?
  • What do you go the extra mile for?
  • Have you ever gotten a second wind?
  • What do you have down to a science?
  • Will they be able to cope with the work?

Confirm

  • I got it (Si yo entiendo)
  • I think that's fine for the moment.

Continue discussion

  • I really don't remember, let me think in the meantime and let's move on!
  • Uh that's all I can remember
  • He must do a lot of good things
  • Well in a nutshell (Pocas palabras)

Idioms

  • Fortunately, this project isn't rocket science.
  • Finding a good Co-Founder is rocket science to me, it's like finding a great wife!
  • The project's deadline is set in stone, we need more developers to be able to fix all issues.
  • The schedule isn't set in stone (Flexible).
  • My boss at that company wasn't very down to earth (Unrealistic requests, etc).
  • A good colleague is a down to earth person with no pretensions.
  • He's a nice coworker, always ready to go the extra mile for his colleagues.
  • I feel proud when I felt tired after many hours of work, but I got the second wind and finished a lot because I'm so excited with the project, especially when this's a side project!
  • I stayed up all night to got the second wind when preparing for the exam.
  • I have my work routine down to a science, I have more time to research and still improving myself.
  • My wife have making brownies technique down to a science.
  • Government spend the lion's share of our taxes on rich companies instead of people.
  • Most companies have reported about a very wide range of information about Coronavirus and working remotely strategies.
  • As the company's work environment problems worsened, several colleagues resigned.
  • I resigned from that company in order to take a more challenging job and having the opportunity to improve my english.
  • The schedule is set in stone, it's only a matter of time before you're forced to resign.
  • You seems to thrive on hard work, that's not my case.
  • They are offering a trial of the platform while the quarantine finish.
  • Because of Covid Friday, most of Colombians are in debt to the bank.
  • Because of good decisions, the company isn't deep in debt.
  • Get a good night's sleep and you'll feel better able to cope.

Apologize

  • I'm sorry I'm late - I got sidetracked.

Open minded attitude

  • Hope to see you soon, but feel free to contact me if you have any questions

Future plans

  • I want to travel around the world, exist any problem to work from different countries?

Thanks

  • Thank you very much for your time, I look forward to hearing from you soon.

Introduce yourself

Personal

I'm J.D Nicholls and I'm from Medellin, Colombia 🇨🇴

I am the kind of person who loves to solve problems with technology, learn new ways to optimize processes, and create open source projects that can change the world by connecting people with small contributions. I am also a developer who likes to work in collaboration, being part of a team and engage everyone to share knowledge, the passion to create new things with code and find better ways to solve problems while we're working together to create solutions that can be used around the world and reach millions of people.

Known for be a disciplined, organized, humble and righteous person. Committed to good morals, continuous learning, innovation and development of optimal solutions.

I had always wanted to travel around the world, to meet people, participate in community and collaborate with others. It was one of my dreams so I decided to start working remotely few years ago in order to have the possibility to travel and to meet different cultures, so thats what I have been doing for the last years to be prepared for new experiences.

I believe anyone can be successful if they try hard enough.

Professional

I work as a Frontend developer at S4N, specially working for Nordstrom in their Employee Selling Tools as a Team Leader. I have 8 years of experience working as Software developer, I've experience playing different roles as Frontend, Backend and Software Architect.

Work History

In college, I studied Software Engineering at Universidad de Medellin (UdeM), then I had the opportunity to work as a Backend developer when I was finishing my bachelor's degree. During my first job I had the chance to work with awesome designers, using agile methodologies like pair programming sessions for creating web sites and social games. With this experience, I started working as a Frontend developer, creating better interactive experiences for almost 2 years.

Then I worked for 1 year as a Team leader helping other teams using Microsoft technologies.

Later I worked for almost 2 years as a Backend and Full Stack developer at Yuxi Pacific, during this time I become a Team leader again and I designed the baseline for cross-platform mobile applications using new technologies (Cordova, Ionic), with these results the company became an Ionic Trusted Partner.

Then I worked for a brief as a Software Architect where I helped to define architectural baselines for the development of reactive applications using new technologies (MeteorJS and NodeJS).

In my current job, I had the opportunity to start working for a Startup called BevyUp that later was acquired by Nordstrom, and with that acquisition I started working at Seven4n. I was responsible for researching new Frontend technologies, migrate apps using deprecated frameworks (AngularJS, Ionic 1) and then I've accomplished to define a modular architecture with React Native that allows multiple teams work in the same project adding new features at the same time.

Hobbies

  • Making 2d games (Video games)
  • Writing about my projects
  • Creating video tutorials for my YouTube channel
  • Programming/Coding
  • Public Speaking (Teaching about Code)
  • Being a Mentor (Volunteering)
  • Taking Free Online Classes
  • Playing tennis
  • People Watching
  • Inventing projects with technology
  • Astronomy

STRENGTHS

I think I'm very good at working in a team, I've been doing that since I've been working so I think I've become very good at that. And I believe I have good technical skills using different lenguages and tools and good communication skills. I'm very responsible, reliable and disciplined person.

WEAKNESSES

  • I get distracted easily and do not feel so motivated when I work alone, for that reason I use to have pair programming meetings with my team, to share knowledge but most important to be focus on my tasks and have a lot of motivation working together.
  • Sometimes I used to be stubborn when I knew that something can be done better and I took extra part of my personal time to achieve it, because of that I started giving these points for improvement in retrospective meetings, during the planning of our sprints, to take these into account as part of the estimation process because nothing is perfect, everything can be improved, to avoid procrastination.
  • In a job where you have to work under pressure and have to commit to strict deadlines, estimating used to be a complicated task for me, so with experience I began to prioritize tasks and dip complexity into simpler tasks with small deadlines to be more efficient while seeing progress soon.
  • I used to be a perfectionist in my work, but with experience working with others I learned that Good is better than perfect, because there's trade-off between being agreeable and being execution oriented, when you move fast, you can be aggresive and frustrate the people who want to get things done too

Tell me about a situation when you failed

  • Scaling a problem instead of having a direct conversation with my coworker first.
  • I remember once I started on a project that was delayed, having sprints of a week and also I got a hard deadline here. This project was using deprecated libraries and I spent a lot of time updating everything to avoid code refactors in the future, in the end it was a success but I was tired and bored because I had invested a lot of my free time.

It's better if you keep iterating and make it better as well as you need instead of trying to make everything perfect the first time, to avoid frustration because nothing will ever truly be perfect (Perfect is the enemy of good) and being able to recognize the value of constructive criticism.

How would your boss and co-workers describe you?

  • Recognized for being helpful with the team
  • Known for being assertive in proposing solutions and ideas

Why are you leaving your current job?

I'm no sure if I'm going to leave my current job, honestly I'm curious about the kind of challenges I could face working with you and see if I'm interested because right now I'm working for an excellent company with an amazing team, creating solutions for clients like Nordstrom that can reach a lot of people and face great challenges too.

What do you expect with this job?

  • Being able to support others and give back to my community is very important to me (mentorship, speaker).
  • Working with you I expect to have the opportunity to express my ideas. Be authentic, creative, and allow me to solve interesting problems that can impact people's lives.
  • I would love the possibility to have a career path well defined to grow into the company, to be able to develop my skills and become the best version of myself.
  • I hope the chance to share knowledge, continue learning together and get awesome experiences.

What's your dream job?

  • A job that allows me to work from anywhere, being able to be an international speaker and mentor, attend interesting events, share about technology with other people and help tech communities like CodeYourFuture.
  • A job that allows me to meet people and innovate while solving complex problems (like magic).
  • A job that allows me to research and learn interesting things in order to solve problems with technology.
  • Supporting Open Source projects while I'm creating awesome apps.

How you deal with getting stuck?

I prefer to rely on my team instead of spending a lot of time solving any problem on my own.

  • Else if, I try to find out if it's a common mistake or if someone has had the same problem.
  • Else if none of the above works, I seek to report the error in case someone else can help me and in the meantime I try to figure this out for myself.

How do you deal with pressure or stressful situations?

  • Stopping to take a moment (10 deep breaths), break the problem into specific issues and priorize to solve that critical situation.

What do you like to do outside of work?

  • I like to share knowledge as speaker/mentor in local communities like ColombiaDev, MedellinJS, CodeYourFuture, etc.
  • I like working on open source projects that could be useful for my work and at the same time help others while receiving external feedback to continue learning.
  • I also like to spend time with my girlfriend and do exercise, watch movies and series, travel and continue studying.
  • I want to create more side projects, apps and games of my own ideas.

What are your salary expectations?

  • I would really like to hear better offers than I currently have.
  • I was wondering if in the future I would like to go to live elsewhere, would there be the possibility of analyzing the cost of living to adjust the salary?

What are you looking for in a new position?

  • New challenges
  • New ways of doing things to constantly improve

Where do you see yourself in 5 years?

  • I’m looking forward to being an interviewer in the next 2 years, I’ve been practicing algorithms, mock interviews and behavioral questions with some books like Cracking the Coding Interview, also participating in communities, and I started creating a resource called “The Job Interview Guide”, in order to help other developers to get a great job!
  • Developing into a great developer, being an international speaker and helping other developers to grow in this profession is something I'm really excited about.
  • I'd like to be seen as someone with deep expertise as Sofwate Architect, being able to build large-scale systems that can face many interesting challenges.
  • Well, hopefully working for your company. I would like to first become very good at my job. And then after that I will be ready to asume new responsabilities and go for the next step.

What type of work environment do you prefer?

  • I like working remotely, but I also like working with others, having the opportunity to have flexible schedule to share with my colleagues and my family.

What's time you exercised leadership?

  • Most of the time during meetings, talking about development, etc but I prefer to delegate responsibilities, so anyone on the team can be a leader!

What's time you disagreed with a decision that was made at work?

  • I remember once a PM had coordinated a delivery with the client, so we have a meeting with the Architect because I did not agree to make decisions without taking the team into account, at the end of the day we had the opportunity to clarify everything and make a better decision all together :)

Have you ever worked with an engineer who wasn't performing well?

  • I remember once a developer lied to me about an assigned task because he had been late in completing it, a colleague told me what happened but I preferred to give him a second chance, help him understand the problem he had to avoid it happen again and then he was able to perform the tasks very well.

What is it about you that makes you a good fit for this position?

  • I have the experience you're looking for, but most important, I'm most excited when I work in a team, I love to propose new ideas and take risks, I have experience creating projects for others, which help to generate a great impact while solving all kinds of technical problems.
  • With my experience, I know we can face a lot of interesting challenges and deliver better consumer experiences while we're connecting people around the world and learning together.
  • I have experience creating tools that are used across the world which allows developers to scale their solutions in many projects, teams and large organizations.

Why do you want to work for us?

Personally I want to work with you because of the impact you have on people, nothing motivates me more than seeing that my work can make people's live easier, adding my "grain of sand" to change the world by creating creative/innovative solutions that can help to empower people. Also, I like your values, when someone can be authentic, take risks and help others (I believe that most of the world's problems can be solved by connecting people).

Profesionally, the opportunity to work with talented proffesionals, looking to solve interesting problems with technology but also to have good spaces for sharing knowledge to help me make better decisions, build better products and create better experiences for everyone.

Maybe mention your own ideas about social changes, etc, e.g => https://github.com/proyecto26/social-change

What professional accomplishment are you most proud of?

  • Designed the baseline for cross-platform mobile applications in different companies.
  • At Yuxi, I had the opportunity to mentor a junior developer by delegating leadership responsibilities, helping her develop confidence, and take on new challenges to enhance her soft skills. Because at the end of the day it does not matter who the leader is, but rather that we're happy in what we're doing.
  • At my current company I had the opportunity to start working for a Startup that later was acquired by Nordstrom, I had the responsability to investigate new Frontend technologies (Frameworks), migrate some apps and then I defined a modular architecture with React Native that today is used for multiple teams. With the help of the team, 2 weeks ago, on the Nordstrom Anniversary, the app reached a million dollars in one day, that was impressive!

What's your greatest professional achievement?

  • My best professional achievement is Proyecto 26, I created it with the idea of Changing the world with small contributions, basically Open Source projects that can have a positive impact on the world. I've reach more than 1 million downloads with one of my plugins (A native plugin for platforms like iOS and Android in order to improve the user experience), so it's used by a lot of projects and during the process I've had the opportunity to work with people from all over the world and learn a lot!

Do you have any questions for us?

  • How does that balance with life?
  • How much of my life do you expect me to be here? (Horas nalgas o por objetivos)
  • What are the key responsabilities for the job?
  • What can you tell me about your plans for growth?
  • What's your favorite part about working here?
  • What do you like most about working here?
  • What's the culture at your company like?
  • What's the work expectation here?
  • What would a normal day of work be like at your company?
  • What is the interaction like?
  • How does project planning happen on the team?
  • How much did the people on the teams tend to work?
  • What's a typical day like?
  • What other projects are you currently working on?
  • How does the reward structure work?
  • Was this an efficient discussion? (Request feedback)
  • If I have any other questions that I can't think of now, will I be able to email you or give you a call?
  • I'm very interested in scalability, and I'd love to learn more about it. What opportunities are there at this company to learn about this?
  • I'm not familiar with technology X, but it sounds like a very interesting solution. Could you tell me a bit more about how it works?
  • what makes this company different from its competitors?
  • About opportunities, if I excel, what would I be doing next year?
  • About careers, do I have a mentor? how does training look like?
  • How did you come to work here?
  • What do you like the most about working here?
  • Who's the most successful hire here recently and why?
  • Who did not succeed as a hire and why?
  • What's the company's biggest challenge this year and how will you help to overcome it?
  • How will I measure my performance so I know that I will have a positive impact on this challenge?
  • What kind of skills and additional experience you wish I had that would make me a better fit for this job?
  • What are the next steps in the process?
  • Do you use third party packages or you write everything from scratch?

What was the hardest bug you've faced?

What is the last significant thing you learned to do your job better?

What would you do differently in your next role?

How do you deal with conflict?

How do you like to give and receive feedback?

  • Getting positive suggestions for the future
  • No judging or critiquing ideas
  • Giving it face to face
  • Opportunity to seek advice
  • Create safety (build confidence)

What were some of the best things you've built?

  • Open Source projects

What are the most interesting projects you’ve worked on?

  • Plugins for games
  • Packages for mobile apps

What are some of the biggest professional challenges you’ve faced?

  • Reach millions of downloads with my side projects

What major changes to your workflow have happened in the last year?

  • Modular architecture to work with multiple teams

Why are you working as a software engineer?

  • Because I love to be a creator, using technology to create new things

How do you collaborate with your peers?

Tell me about your best collaboration experience

Tell me about a challenging interaction with a teammate

Tell me about a time when you advocated for and pushed your own ideas forward despite opposition?

Have you ever worked fully remote before? How do you feel about this experience?

Describe your typical project, workflow, or product development experience when working with backend or frontend applications

Tips

  • Ask for clarification if you're not sure about something
  • Explain what you're trying to do

Credits

“What is your current salary?”

Examples

Oh, yeah, I was going to ask you, do you know the budget for the role?

Can you tell me about the salary range you have budgeted for this role?

You guys know the market and are good at what you do, I trust you to make a great offer if you're interested.

I'm not prepared to discuss numbers yet, but if we each decide that we're a good fit, I'm sure we'll find something we are happy with.

Can you make a written offer?

Why is it relevant? ... Ah, I see. Thanks for the clarification. Look, I want to be transparent: If you were to make me an offer, it's unlikely I would accept it. Your company isn’t a great fit for me at this time. So I don't want to waste more of your time. But if you wind up brushing up on your interviewing process and making improvements, feel free to reach out to me again for consideration (10x DEVELOPER)

I am unable to provide my current salary: As I am sure you understand, my employer considers employee salaries to be confidential, and access to this information is limited to management inside our organization. So, I am unable to share it with you. However, if you share the salary level and range for this position, I can confirm that my salary is within that range or not. I'm sure you'll understand me cause if we would work together and will have any private conversations with you the company could be sure 'll never disclose it as well.

I don't think that my current salary is relevant, but if you must have that information, I will provide it after you share the salary level and range for this job.

I will share my salary expectations with you, and we can see if it fits into your salary range for this position.

I have done my initial homework, and salary information on the Internet indicates I’m in the range. For now we should assume that salary won’t be an issue. Plus, I need to understand the full extent of the opportunity and the benefits you provide to employees plus what the salary range is for this role.

I am seeking a base pay of $XX,XXX (HIGHER END OF YOUR RANGE), but I can be flexible depending on the benefits and any incentives you may offer.

Sharing my current salary is inappropriate for me. I'm expecting to be compensated conmesurately with my experience and the role that I’ll have at this company.

Understand that "your mileage may vary." If the employer isn’t very interested (or has many other people they could hire), they probably won’t do much negotiation. If they are very interested in you, they will negotiate. Many employers expect to negotiate starting salaries. However, some do not want to negotiate and may even withdraw a job offer if pressed for a higher starting salary.

What is your salary expectation?

Examples

So you know what you need, how badly you need it, what you're willing to pay for it?

You know I really don't know. I don't have a number in mind right now. I'd like to think about the value that I can add to this firm and this team. I'm excited for this opportunity based on what I know about it. And I can't wait to learn more about it and continue talking to people in the interview process.

You know I'm really not comfortable sharing my current salary and what my employer pays people that do the kind of work that I do, and I'd rather focus on the value that I can add in this position. And I'm really looking forward to this move being a big step forward for me in terms of both responsibility and compensation and I can't wait to talk about the position and the opportunity that's ahead of me.

I don’t have a specific number in mind for a desired salary, and you know better than I do what value my skillset and experience could bring to your company. I want this move to be a big step forward for me in terms of both responsibility and compensation.

Before I give you a number, I'd like to understand how you compensate employees and how this job fits into your compensation structure. I'm curious to know the salary grade for this position, the salary range and midpoint for that grade, and where that grade fits into your compensation system? That will give me a better idea of how this position fits into your structure and my career plans.

Before I give you a number, I'd like to understand more about company, the work environment, the requirements of the job, and other important considerations like the opportunity for growth. Then, I'll have a better idea what an appropriate salary would be.

I need to understand and evaluate the total compensation package before I give you a salary number. Could you share the standard benefits you provide?

Thank you for that question. On this stage let us check first that we are a great fit for each other and we could circle back to that questions later.

Thank you for that question. Hey, I'm just an engineer, I'm sure you know the market better than me so I trust you to evaluate my skill set first and if we are a great fit to circle back to that topic.

They offer a lower salary: Thank you, my current salary rate is higher, but you could always call me back at any time if you still think we are a great fit for each other.

They offer an equal salary: Thank you, I think we are on the same page in terms of salary ranges but let us circle back to that conversation later after we will check how good is our mutual fit.

I need a number to fill a form: Just put a dollar so we could circle back to that later.

Listen, you need somebody to do this job. I'm somebody who can do that job. Let me describe to you how well I can do that job and how well I understand what your needs are. And then we can talk about what's the appropriate price for you to pay me to do that job. And we can collaborate to find something that we both feel is good.

I don't have one. Look, I know you want to be fair. You have salary ranges for employees with a given skillset and responsibility, right? I don't want to be paid less than everybody else. I don't want to be paid more than everybody else. Just give me something in the middle.

Based on my research and the information you have provided, I believe that a salary in the range of $XX,XXX to $XX,XXX with [# of weeks of] paid vacation, [other benefits important to you which have been stated as included], and your other benefits would be appropriate.

Benefits/Perks

  • Signing bonus (only increasing the first year income)
  • Monthly bonuses (Sodexo Pass)
  • Annual, quarterly, or other bonuses
  • Commissions (usually for sales jobs)
  • Stock, a stock purchase plan, and/or stock options
  • Annual (or more frequent) salary increases
  • Vacation days
  • Personal days
  • Sick days
  • 401K and/or pension
  • Medical insurance
  • Life insurance
  • Dental insurance
  • Vision insurance
  • Working from home
  • Flexible hours (Schedule flexibility)
  • Training
  • Tuition reimbursement
  • English coaching
  • Parking or public transportation reimbursement
  • Career Path and Career Growth (Udemy account, etc)
  • Competitive compensation
  • Company car, culture, etc

Remember

  • Be assertive
  • Take the lead
  • Remember they need you
  • Be confident
  • Come prepared
  • Talk, but also listen
  • Be professional, but losen up a bit
  • Be amicable
  • Keep eye contact
  • Remind then why you are there
  • Make them talk about why they need you

What are your salary (or hourly rate) expectations?

I'm absolutely comfortable somewhere in the top quartile of my market value. I'm happy to email you tonight the latest report with information about my market value (Cost of Living):

Promotions

Hey I've already been doing this for a while. I don't know if you noticed but I have been. Here's the work that I've been doing. Any chance we could talk about making this official with a promotion?

Credits

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment