Thank you for this advice. I was always under the impression that it should come naturally, so when I didn't do so well during the interviews as some of my friends, I started worrying that I shouldn't be pursuing programming as a career after graduation.
Preparation really is the key. There may be folks out there that can ace technical interviews at Google or Facebook on any random day without preparation but in my experience, and I know many smart engineers, those people are by far the exception not the rule. As the below comment says, just like the SAT, prepare. Really.
Over the years, I have seen a particular scenario play itself over several times - the scenario is a very smart and high quality engineer decides to take an interview with Google, FB, MSFT, Amazon etc etc on a whim without preparation, have a pretty bad day and remember rudely that the interview experience is pretty different from their day to day job, go back home, take a month or so to prepare diligently, and then take interviews again and have excellent results.
My attitude reinforced over the years is that my edge going into interviews over other candidates is my ability to prepare. I take it seriously and don't fuck around. The return on investment on that month or two of preparation has been very worthwhile and each time you invest in it makes the next time easier.