First thing one needs to understand as a developer is that there is not one dream job in the world but many. For a college level student a dream job might be to get into a good company with a decent package while for an experienced developer it might be get a better company and work in a field of their interest or even work at senior level positions at their own companies. So definitions of dream jobs keeps on changing and so does the efforts required for getting them. If you get accepted it was because you put up enough efforts and interviewers appreciated your answers better than others if not then there might be n number of factors why you got rejected. Instead of feeling dejected if one starts thinking over the reasons they got rejected and try to rectify them in the next one then they can surely get a good job. Now contributing to opensource projects or participating in coding competitions/hackathons or other stuff for increasing your chances of getting accepted is an aspect of personal preference. Some like to do it while some don't and also sometimes there are time constraints. If you don't feel like doing then study core programming concepts and languages and build small projects on the way. Some company will surely find you the right candidate for their position and you will get a good job eventually. Because at the end of the day it's the talent and skill that matters the most while getting a good job according to me :D