Monthly Archives: January 2011

Interview Techniques

Interview Techniques… you are probably wondering what that has to do with technology.  This is partly to do with technology, partly a way for me to remember these, and partly, well, a ramble as usual.  I have been exposed to some simple interview techniques for “software engineering” positions and they are worth remembering.  These have come in a variety of difficulties, so I will attempt to organize them as such.

First, technology!  See Mike Code, is cool.  It is a way an interviewer can ask simple questions over the phone and see the person write the code.  That gets a darn cool in my book.  Perhaps it is as modern as VHS is these days, but who says a technology needs to be on the order of Star Trek to warrant recognition?

Also, I recently found this:  http://formatmysourcecode.blogspot.com/.  It is excellent for automatically formatting HTML/XML and code for posting in a blog.

Beyond the technology is the questions I have either been asked or found in my own prowling around.  These are thing ones I find to be the most interesting.

Practical Questions:

  • fizz-buzz, written in any language — basically, for some multiplier of a loop print “fizz”, for a different multiplier write “buzz”.  For a multiplier equal to one divisible by A and B, write “fizzbuzz”.
  • given two lists (e.g., friends lists), and assuming list-2 represents changes affected upon list-1, who was added, who was removed, who is the same.  Written in any language.
  • Extend a standard Java class (e.g., HashMap) such that it meets new constraints such as, and using HashMap as an example:
    • limit the number of values that can be stored popping off the oldest when a newer one is inserted
    • disallow overwriting an existing key; key/value must be removed first
    • lock the list if three unsuccessful attempts are made to retrieve a value
    • lock the list if three unsuccessful attempts are make to insert a value (e.g., inserting an existing key)
  • web application to retrieve basic statistics from somewhere like flickr, using web app technology of choice

Conceptual Questions:

  • What information should a bug tracking system have?  How should it be stored?
  • What project did you make the most difference on?  What did you learn?  What would you do differently?
  • Create an interface from a legacy system to a newer UI.  Assume an API or web service exists.  Describe the architecture you would use; describe high-level design considerations; define milestones.
  • A database has been demonstrating progressively degrading performance (either via an application or reports).  What diagnostic steps would you take?

Mean Questions:

  • I file lists like this as mean because they contain a lot of questions that either a person knows from practical use, or can look up.  To put someone on-the-spot to answer deep details like this in an interview is merely a test in making the interviewee squirm.  To me, these questions are a lot like asking a mechanic about metallurgy — while they use metal in their daily work, but they don’t need to know the minute details about the metals they use to get their job done or do their job well.

Upgrade Windows XP to Window 7 on a SATA drive

I chose to go the route of a Windows 7 Upgrade to save a little money.  I think perhaps the full install would have been worth the money to spare me the aggravation.  I will not try to recount this as an epic horror but instead list the series of steps that made this work.  It is worth noting that the “epic” nature of this event was incurred due to switching to a SATA hard drive.  Windows XP is not terribly friendly with these drives if you are installing anything older than Windows XP SP2.  As I understand it a slipstreamed SP2 installer should work fine, but I have not tested that.

Slipstream SATA Drivers to Windows XP Install Disk

There are blogs and directions out there for how to make this work.  Simply put, this didn’t work for me.  That was kind of annoying, but what I am glad about is that I found something that did work.  But for reference here are a couple of places that talk about this process (here and here).

Setting SATA Controller to IDE in BIOS

This is the process that worked for me.  I will note that I was shocked at first to see less than my full drive, but I was installing WinXP SP1.  There is a known issue with WinXP and SP1 where the drive only shows up with about 131 GB of space.  You can expand the partition post-install.  I started to recall past experiences with this issue when configuring my previous hard drive.

Step 1:  Set SATA controller in BIOS to IDE mode.

Step 2:  Install Windows XP, and don’t worry about the drive size being “wrong”

Step 3:  Install Windows 7 Upgrade … and this is where I resized the Windows partition (I halved the disk out of habit).

Step 4:  Set the AHCI parameter in the windows registry.  This was a problem under WinXP that required a lot of dancing around to make it work.  Being a bit of a Linux fan, I have to say that seeing this work so nicely under Win7 impressed me.  The “worst” part about this was the required reboot; and if that’s the worst, then I’m pretty happy.

Step 5:  Reboot and let drivers install

Step 6:  Be happy that Windows 7 installed!  Success is success.

Other Hurdles I Cleared

Sound Blaster Audigy (yes, Audigy) sound card with digital speakers:  Because I’m too cheap to get a new sound card in addition to all this, I had to download drivers, download updates to drivers, and fiddle around with settings to get my digital out to work.  But it works!  The unfortunate thing is that the toggle for the digital out is well hidden — which means switching to my headphones is going to be a process each time I was to do it.

nVidia GTX 460 SE drivers:  The only “hurdle” here is EVGA being unclear on the box that their card is an “SE” not a standard 460.  But, hey, the drivers installed and it works.  What is there to complain about?

Reconnecting my Linux drives:  Because I don’t entirely trust OS installers (any of them), I disconnected my Linux drives.  I had to make sure my SATA controller setting was set properly for them to work.  Once it was set back to AHCI, as apposed to “Standard IDE” or “RAID”, reconnecting the drives resulted in things starting up nicely into Linux.  All hail boot order in the BIOS!  So handy.

Reconfiguring GRUB:  I still use GRUB (not grub2) and setting up new entries is a simple matter of editing the /boot/grub/menu.lst.  And, viola, back to dual-boot.  Of course, there’s a little trial-and-error to figure out the proper drive reference for GRUB.  I was lucky and it was only a matter of uncommenting my Windows XP entry and renaming it — the basic drive reference had remained the same.

No Primary IDE Master:  This was resolved automatically by having my Linux drive connected to SATA-1 again.  I put my Linux drive on that and since I disconnected it for the install, this gave the BIOS something to complain about.  I really like “problems” that resolve themselves…!

And there you have my little journey.