Wednesday, September 19, 2007

Senior Software Engineer at Etsy Inc.

Location: United States

There are over 500,000 items listed on Etsy, and they need to be indexed in near-real-time. We're looking for an engineer who has a solid foundation and who loves talking about algorithms over lunch.

This job opening is in our San Francisco office. Interested candidates should send their solutions to the problems at the bottom of this page, along with their resume, to work@etsy.com.

Qualifications:
  • BS or MS in Computer Science (preference given to a strong program)
  • 5+ years of software development experience
  • 2+ years of writing production-class, maintainable, multi-threaded, performant C/C++ code on Unix
  • Prior network programming experience
  • Facility with data structures/algorithms and complexity estimation
Pluses:
  • Experience with Unix/Linux or Windows environments, distributed systems, machine learning, information retrieval, network programming and/or developing large software system
Technical Problems:
  • Provide Memory and Time Complexity for your solution to both below. Use Java, C/C++ or Python.
  • Given 2 strings, determine whether one is an anagram of the other. Implement this in a function "bool isAnagram(str1, str2)" which should be production-worthy code. It is OK to assume the normal English alphabet.
  • Given a list of integers in no particular order, return when you find 3 that sum to 0. You can return any 3.
  • Imagine a graph that consists of directional links between nodes identified by small non-negative integers <>
  • Imagine an application that allows insertion of links, but wants to prevent insertion of links that close cycles in the graph.
  • For example, starting from an empty graph, inserting links 1 -> 2 and 2 -> 3 would succeed; but inserting a third link 3 -> 1 would fail, since it would close the cycle 1 -> 2 -> 3 -> 1. However, inserting a link 1 -> 3 instead would succeed.
  • In Java or C/C++, declare data structures to represent your graph, and give code for an "insert link" function that fails if a new link would close a cycle. What, roughly, is the space- and time-complexity of your solution?
Link

No comments: