Ok, just to throw in some practical experience here.
I work for one of these elite software firms, and I do not find our hiring policies to be geared to "not missing" great talent but to "not hiring" mediocre talent. I have seen that some of these companies really want to hire great people, but they do so by interviewing lots of really good looking (on paper) developers and then culling out the ones that they don't want. Once someone is hired, it is very difficult to get rid of them so it pays to turn down a candidate that you believe may actually be a great fit, but that one of the interviewers saw some red flags on.
At the company I currently work for, I was turned down because one and only one of the interviewers (the most important one) gave me a thumbs down. This interviewer asked me a very domain specific question and did not speak fluent english. They did not hire me, but the team thought that the company would be missing out on a potentially good hire. They sent me to another set of interviews with a different team the next week and I got the job (with "strong hire" marks I might add).
My advice is that if you really believe that you have what it takes, keep interviewing with this company and learn from each experience until you land the job. Most of these companies keep a registry of everyone they interview and they black-list the poor candidates (so they never get another shot). However, the candidates that were good candidates but just didn't perform well that day, or didn't fit well with the team will remain in the hiring pool. You will immediately know if you have been black-listed when the recruiter phone calls just stop one day and every future contact seems to hit deaf ears. If you receive future inquiries from the company, you know that you are fine. There is absolutely no harm in setting up more interviews after your first rejection as long as you weren't black listed. In fact, I would highly recommend interviewing with multiple teams all at once. The interviewers are going to reject you at the first perceived sign of trouble, whether or not it is a real trouble. They are cautious and don't want to make bad hires much more than they want to make good hires.
A few more thoughts:
--None of these companies are going to give you feedback. It is a legal liability. It sucks that this is the way it is, but I can promise you that it isn't going to happen.
--I personally talked to a brilliant engineer when I interviewed with Microsoft who told me it took him 5+ tries before he was finally hired. This guy was a senior level SDE, so MSFT obviously validated that he was a good hire by promoting him.
Know your data structures and algorithms backwards and forwards. You need to know everything all of the way up to graph traversals.
Know architecture, especially distributed systems and problems of scale
Have a list of projects you have led memorized. Have a list with examples of leadership principles you have exhibited in your job memorized. These are the most challenging questions to answer in the interview (behavioral interviews). You can be perfect in the tech side and if you don't survive the behavioral interview you will not be hired.
Don't worry about which programming languages they are looking for. Know one object-oriented language backwards and forwards and code in that. The interviewer doesn't usually care which language you code in and doesn't judge you based on it.
Finally, please email me your resume. ;=)