5 ms·
Anecdotally, I've learned to expect nothing. I used to ask a graph-based question -- I had to adjust it so that the first step was doing a dead-simple DFS. This
by ng12 10y ago
Anecdotally, I've learned to expect nothing. I used to ask a graph-based question -- I had to adjust it so that the first step was doing a dead-simple DFS. This tended to weed out a good sixth of candidates and save us both a lot of time. And this was pretty constant against education level and background.
- somedangedname 10y agoDFS == Depth First Search?
- ng12 10y agoYeah, given an acyclic graph print out each node's value. Passing candidates generally got it in five minutes.
- jnordwick 10y agoSometimes I get these questions in interviews and I really don't know if I should be offended. My resume is pretty good, and I wonder who T.F. applies to these places that they have to have such simple weeder questions. Then I get all paranoid that there is some hidden complication and soon I'm producing FizzBuzz in TensorFlow: http://joelgrus.com/2016/05/23/fizz-buzz-in-tensorflow/ http://joelgrus.com/2016/05/23/fizz-buzz-in-tensorflow/
- vacri 10y agoI think you shouldn't be offended at interview questions around skill unless you've been on the other side of the table. It's eye-opening, the range of people that apply for these positions.
- sheeshkebab 10y agowas writing DFS from scratch ever needed to perform dev job or was it a thing that stumped 95% of applicants (and let you read some hacker news/email on your phone/laptop in the mean time)?
- ng12 10y agoIt only stumped the candidates that clearly wouldn't make it through the rest of the problem. One sixth was a probably a high estimate. DFS for an acyclic graph is about five lines of code and shows me that you A. know a programming language B. can figure out a data structure. I would argue both are needed to perform a dev job.
- DontGiveTwoFlux 10y agoEh, I had to write a DFS the other day at work.
- ap22213 10y agoI've written DFS about 1-2 times a year, on average, for the last 15 years. Why do I need to? Usually, because I need to modify or create a data structure that is kind of graph-like but not quite. If someone didn't know how to write one or at least derive it, they would confuse a lot of people, so yeah it's kind of important.
- lawnchair_larry 10y agoNo, they'd probably look it up, skim a blog for a few minutes, then figure it out and promptly forget. This is no different than forgetting the order of the arguments to socket() and accusing that person of being incapable of writing networking code.
- ap22213 10y agoThe difference is that the arguments to socket() were arbitrarily defined, but DFS is an algorithm. Anyone who has taken a intro data structures course should be able to at least derive the pseudo code for DFS.
- morgante 10y agoIf you ignore the terminology, DFS is basically just recursively walking a graph, something which actually happens all the time in most dev jobs. I'm sure I wrote a DFS long before I had heard the term. I hate brain teaser interviews as much as the next guy, but being able to do basic operations on basic data structures is pretty much the minimum to be a developer.
- dastbe 10y agoDo you give them a graph data structure or something that is explicitly a tree?
- dnautics 10y agoA acyclic graph is isomorphic to a tree, but the way you access the vertices and edges is completely different.
- palunon 10y agoDepends on your memory representation of the graph. If you simply use the obvious one (a node have a list of pointers to its successors), I don't see the difference except for successors[]/children[]
- dnautics 10y agoYou're right. I mentioned acyclic graph and my mind slipped to general graphs. Although often graphs are represented as say a sparse matrix.
- deleted 10y ago[deleted]
- kirab 10y agoShould every node's value be printed out exactly once and if so, are there nodes which have two parents? If so, I would keep the pointers in a set to mark nodes as processed but is there a more elegant solution?
- drakonandor 10y agoEach node is an object and has a "checked" variable.
- ng12 10y agoI would explicitly tell them that you should revisit nodes, and give them a few examples illustrating that point -- so all they needed to do was traverse edges.