I plan to write this post to (try to) make it your one stop destination answer to the question – ‘How to study to get placed?’ It’ll cover everything I came across and studied (or planned to study), followed by my views on placement processes. That also means this is going to be a long post, and you don’t have to finish reading everything today. If you wish to follow whatever is here, you can keep it bookmarked and keep coming back. I may be editing and adding more things too.
I also plan to rekindle my blog from this post, so there may be many posts on different subjects coming in the coming weeks.
However, all of this may not have any credibility if you don’t find my placement interesting or catchy. Firstly, that’s perfectly okay because I am not joining Apple/Google/Twitter or any silicon valley startup like snapchat. I got placed into Endurance International Group. They are a conglomeration of various major web hosting and domain registration companies like BlueHost, HostGator, FatCow, domain.com, etc. Furthermore, they acquired Directi Web technologies in the last year. Now, to be precise, I got placed in Directi (as a subsidiary of Endurance International Group) as a Software Engineer. This means when you’ll next be using a Directi web product, there’s a good chance I would have worked on making your experience smoother and sweeter.
I still think you feel this is just like another IT firm job. Yes it is, except Directi allows you to arrive at office at your own timings, wearing t-shirt and shorts, coding up a project you prefer doing, while sipping free oreo shakes from the cafe. Moreover, hierarchy is non-existent and promotions can be as fast as you can work. Package is 15 lpa, and there are tons of other benefits besides joyful company of some of the smartest people and sweetest new technologies. They came as the first IT company on campus on day 0 and I was placed on the same day.
Onto the real stuff…
Look, the placement process will consist of a MCQ/Coding round to shortlist candidates followed by ‘x’ number of technical interviews followed by an optional HR round. So, to ace it (and mind you, don’t think of anything lesser than that) you’ll need three things :
1. Proficiency in Competitive Coding
2. Decent knowledge and quizzing of Major CS Subjects
3. Sensible mind so as to not screw up HR round
1. Proficiency in Competitive Coding
This will be tested in most (NOT all) companies as their first round. You will be given 2-4 coding questions to be completed in a limited amount of time. Usually, it comes out to 30mins per question; if 3 questions are given, they give around 90 minutes of time. Questions span these topics : strings, DP, linked lists, greedy, stacks, queues, divide and conquer(recursion), trees and graphs. I’ve written them in the order of importance. There’s an extremely high possibility that your coding test will have a question from strings and one from DP, however chances are very less for a question from graphs or trees.
Hackerrank : There are many websites you could choose from – projecteuler, spoj, codechef (subset of spoj), codeforces, etc. Don’t go for codeforces until and unless you find others easy. ProjectEuler is great to become a great programmer given you have time. Codechef is decent too, it has huge number of questions, but I don’t like how slow it gets at some times as well as its compiler. SPOJ just scared me by the number of questions. So, I went to hackerrank and completed all easy, medium and very few hard questions of ‘Algorithms’ and ‘Data Structures’ section. That was enough to bring my rank down from 1 lac 40 thousands something to under 2500. It’s not great, but will make you sufficiently comfortable with your language of choice and ready for placements coding tests.
Karumanchi : No matter how much anybody may prefer Cormen or the more sophisticated Algorithms’ books, when it comes to placements, Karumanchi is a perfectly cooked christmas turkey. It’s nothing extra, and nothing less. You must read and understand every single chapter in this book, go through its questions and if you’re not very confident about coding – go ahead and code the problems at the back, on your machine. Buy this book here. It’s available in all major languages – C/C++/Java. Choose the one you work with.
If you’re thinking you’re extremely sharp on logic and just being able to get to the logic of a problem will do, let me tell you I made a ‘learnings.txt’ file which just has things related to C++ and Java I learned as I coded for problems and that file is now 300+ lines long. Don’t be lazy right now. Every minute you spend on this will earn you more than you can think of.
EXTRA Things you could look at once done with all that I’ve talked about : TRIES, Suffix Array Questions
2. Decent knowledge
Getting through with coding round is not too tough. It can be prepared with practice. Once you do 20 questions or so of strings, and understand and code 30-40 standard DP questions, there’s a good chance you’ll get through the coding round. However, from this point on, it’s going to be all about what you learned in your courses and how well you can apply that. They’ll ask questions from DSA, DAA (Design and Analysis of Algorithms), Operating Systems, Computer Networks, Database Management Systems, and about whatever languages you’ve mentioned in your résumé.
OS : Questions would mostly touch virtual memory, threads, processes and forking, cache, mutex and deadlocks
Networks : Well, you need to be very thorough with every part of OSI layer. Keep a few days for Networks Revision because this is a huge amount of stuff to read; from Data Link layer to the application layer, you should be well versed with everything. I was asked in LinkedIn interview – Some signal is coming to the server, explain what happens from the lowermost layer to the uppermost layer using OSI model in as much detail as possible. I don’t think he was satisfied with my answer. I wasn’t able to tell about all TCP was doing.
DBMS : Mostly, they’ll ask about normalization or B+ trees. They will also judge your mySQL skills if you have that in your resume, so don’t forget revising mySQL, it takes only an hour or two. Also read ACID properties. I don’t understand the point of asking questions about ACID, but they do ask that.
DSA, DAA : Interview questions would mostly be on hashing, binary trees, AVL & Red black trees, heaps and graphs. Other than this, they can give you a situation and ask what data structure would you apply there. You should be knowing complexities of sorting and searching algorithms, and of insertion/deletion/updation/search in all major data structures. You can safely skip all the theorems & proofs you did in these two courses.
C Language : Just go through C language slides once more. And, do quiz questions from websites on it. Less chances, but they can always ask you on C, specially in the MCQ (round 1).
C++/Java : Whichever is your choice of language, make sure you have given quizzes on it. They’ll ask on peculiarities of the languages, if they ask. I was asked about how try/catch will behave if we have
System.out.exit(0)
inside try block.
This is not the end, however. Don’t forget skimming over the CS electives you’ve done, be it Cryptography or Parallel Computing, or Data Mining. You may get an interviewer working in the same area and they won’t leave the opportunity to grill you on it. You’re not required to be as thorough with it as you were during your final exams, but you should know what, how and why of every thing you studied there. Or at least the important parts that are being used in the industry. An ‘I don’t know’ or blank face may be a bad thing once you’ve mentioned a subject as an elective.
Resources for this
1. If you made any notes or highlights in the books for the courses mentioned above, first and foremost thing is to go through them. They’ll be the fastest way to get through with a course.
2. GeeksforGeeks. Data Structures and Algorithms Page. In total, they make around 800 articles. Read as many as you can. At least read and understand them if you’re not feeling like coding what’s in every article. Trust me, this should be number 1 on your priority after becoming decent with coding. This place is like IIT Coaching Center for Placements. Also, use geeksforgeeks for company wise questions. They have ‘sets’ for each company.
3. Crackingthecoding interview 4th edition. Pdf wouldn’t be hard to find if you’re a good googler.
4. Linux Case Study in Operating Systems Book. There are two standard OS books – one by Silberschatz and the other by Tanenbaum. Both have a linux case study one of which you should be reading, specially if you want to leave an impression that you really like OS.
5. Cheatsheets for languages, and complexity. Google on your own.
6. Quizzes : http://www.geeksquiz.com and http://www.indiabix.com. Do all the topics you should – C, C++/Java, DBMS, OS, Networks.
7. Knowledge about the company and their tests : http://www.glassdoor.co.in
8. Placement Compendium . This is BITS version of Placement information, where placed people at different companies have filled out their experience of placement. Should be a good read for when you know which companies are coming. https://goo.gl/uhF3kD
9. Companies Question Papers . This is something that is distributed at IITs to students. Sad, we don’t have such a thing yet in BITS. It contains the coding questions each company that visited each IIT campus asked. https://goo.gl/L0Vzmk
3. Sensible mind to not screw up HR round
If you’ve gone through majority of what I mentioned, you’ll be in a great state for on-campus placements, to be honest. The probability is high you’ll get to the HR round. Now, all you have to be is yourself and all you have to avoid being is stupid.
Firstly, if you have plans for immediate MS/MBA, then just don’t register for placements. You’re taking someone’s seat. How would you feel if someone took yours and did MS/MBA and wasn’t even interested in it?
Second, prepare yourself on your projects. The discussion on projects can happen in the technical interview rounds as well. I didn’t give much time to this and luckily wasn’t grilled on them either. I had just gone through my projects once and written down 1-2 paragraphs about what work I had done in it, what technologies/libraries I had used. Ideally, besides this summary, you should also prepare on what was the most challenging part of each project, what did you learn out of it, if it was a team project were there any conflicts? If yes, how did you manage them?, What did you enjoy most in the project?
Then, of course, DON’T make a long resume. I’ve done plenty of projects while being on campus, designed many websites, wrote numerous automation scripts that I’m proud of, and designed magazines and posters too. I have 2 publications as well, but I didn’t put all of it there. You should try your absolute best to reduce your résumé to just 1 page. Make it crispy, small and solid. Nobody’s interested in reading two pages, they usually just glance on your résumé for a few seconds. Also, make sure your résumé is suited to the profile you wanna work for. I have done a lot of work in designing while on campus, however didn’t wish to go into design so I excluded almost everything that was related to design from my résumé. It might hurt a little on the inside, but it’s for your betterment only. Ask your friends to act like recruiters and present their opinions on your résumé.
Fourth, try to sell your project/internship work/responsibility/publication like a product. Most probably, they’ll pick just one thing out of your résumé. Make sure you sell that thing with a smile on your face and shining interest in your eyes so they’re sold the very next second.
Last, but not the least, prepare for the standard questions :
– What are your top 3 strengths and weaknesses?
– Tell me something about yourself in ‘x’ minutes.
– If we hire you, when can you give meaningful contribution to our organization?
– Where do you see yourself in ‘x’ years?
Remember that, this is the last thing to do – being sensible for HR rounds. Don’t waste most of your time preparing this. All of what I said here can be done in 2 days or less. In fact, I did it on the very day of my placement, finding voids in between interviews and preparing on these things.
Some more resources :
These are some of the links I had kept bookmarked. They’ll help you.
1. Unix Shell Commands Source Codes. Companies like Directi don’t believe in asking standard DP/Greedy/Strings questions for shortlisting. They ask you to code a unix command. Here’s a good place to learn more : http://stackoverflow.com/questions/8417373/source-code-of-shell-commands
2. Puzzles : http://puzzles.nigelcoldwell.co.uk/
3. Indiabix Quizzes : http://www.indiabix.com/technical/interview-questions-and-answers/
4. Unix/OS Quiz : http://www.geekinterview.com/Interview-Questions/Operating-System [ skip questions related to windows and those that don’t seem to be related to linux or OS in general.]
5. What happens when you type a URL in browser (Standard Networks Question ) : http://edusagar.com/articles/view/70/What-happens-when-you-type-a-URL-in-browser
6. A great blog you can read whenever free : https://tianrunhe.wordpress.com/
7. How does Garbage collector work in Java : http://javarevisited.blogspot.in/2011/04/garbage-collection-in-java.html [I was asked if I have to design a garbage collector from start, how would I go ahead with it?]
8. Another great blog for placements : http://www.ritambhara.in/
9. Inner and Outer joins, because people always confuse them : http://stackoverflow.com/questions/38549/difference-between-inner-and-outer-joins
10. CodersMaze Interview questions with code : http://codersmaze.com/company-interview-questions/google-interview-questions/ [you can see for other companies as well. This is a great website]
Some great questions (to code) :
Sometimes breaking the logic isn’t enough. While coding, you realize you don’t know how to do this in your language. Then, you realize the complexity you chose isn’t good enough. But, you must not quit. So, going forward, you ultimately end up getting to know a new data structure. Or maybe something else. There are problems like these which teach you more than just 1 thing. Here are a few of those which screwed up my mind but helped me equally too.
Coin Partition : http://projecteuler.net/problem=31
Bytelandian gold coins : http://www.spoj.com/problems/COINS/
Maximise Sum : https://www.hackerrank.com/challenges/maximise-sum
Bigger is Greater : https://www.hackerrank.com/challenges/bigger-is-greater
Morgan and a String : https://www.hackerrank.com/challenges/morgan-and-a-string
Some words of advice
Work hard. Aim for the very best and give it everything you can. I aimed of completing everything I’ve written above but I couldn’t. I tried my best though. The best approach I ultimately used was whenever you start getting bored with one topic, completely shift to something else. Like, if you were doing DP problems on hackerrank and you’ve done some of them and now mind feels like it needs a break, shift to reading about the companies on glassdoor, then maybe do away with a few geeksforgeeks articles, or why not pick up your notebook/textbook and revise some course? There’s plenty to do. Just keep on shifting, you’ll get optimum usage out of your brain.
Also, things like Cracking the coding interview book, linux case study were not properly coded by me. In fact, I used to read them while walking to the mess, or just before falling asleep while I’m on my bed. I read networks while companies were presenting their PPTs. I liked filling voids like these to study things that only needed to be read or understood.
I’m not the guy with a good memory. It’s best at average. I do like slicing problems with swords of logic, though. I gave placements about a month and 2 weeks of proper study. All I mentioned should be possible within that, or may take less, or more, depending upon how much randomness goes inside your head. Mine is pretty random, to be honest. Speaking of randomness, you should know that placements are a little random too. I sat for amazon and answered everything in the interview but was not chosen for the next round. However, in Endurance I was shortlisted after the first round of interview even though I couldn’t even think of answers to some questions. It could be that you give it your best and it doesn’t work out and it could be pretty opposite of this too. But, what I can assure you of is, once you’re done doing all I’ve listed out, you are getting placed really soon. If not the first company, maybe the second one. If not the first day, maybe the second one. You would be knowing lots and lots of stuff, and that is more than enough.
Also, keep remembering your driving force towards this. That’ll keep you strong and moving. All the very best.
Acknowledgments
I am pretty happy to receive the offer and even though I worked decently for this, there are many without which this wasn’t possible. You may skip this just like you skip casting at the end of a movie. I know this part should come at the starting but then many of the readers would have skipped a lot of portion of the post. So, bear with me on the logically wrong ordering.
First and foremost thanks goes to the placement team, the amount of work they put in is praiseworthy and inspirational, and it’s sad how less they get in return. Thank you, you guys, for working so hard to get us placed. I owe you people one. Specially, Sonali, Rohan and Rachit, thanks for bearing my countless doubts, requests and worries.
Besides placement team, this was not possible without the worry Dad and Maa clinged onto for waking me up everyday through phone calls. Mita ma’am, Ipsita, Rajat (Mishra) have been human equivalents of some inspirational youtube video; they picked me up every time I took a dirty fall and were the turbo boost of my life through these days. Divyansh has been my dearest brother, thinking for the good of ‘us’ at each moment, even though we were competing in the same placements. And there are countless names that are popping up in my head which should be thanked for their heartfelt good wishes for me and all the moral support. Thank you to all those relatives, cousins and friends from the core of my heart with a big smile on my face. Treat coming soon.
Oh, and getPlaced (Specially, Danish) deserves a big thank you from my side. I am sorry Danish, I couldn’t write a proper feedback to you, but you would be happy knowing that you re-introduced me to C++ and I’ve used only that for the coding I did through my placements. You and your team are doing a great job – you’ve got some passionate teachers in the team to be honest, and they put the important stuff forward very well. I knew it the day you taught of how to judge the complexity from the question that these sessions will be worth much more than what I paid for. Thank you for all the knowledge and time.
As it happens with all the credits, the last one is left for the director of the project. The one who puts his best foot forward to make the project successful. In my case, these directors are the teachers I’ve met here at BITS. Biju sir’s Computer Architecture lessons still echoes in my head, and Lucy ma’am’s innocence and interest that was amalgamated into OS’s and Networks’ lectures sticks close to both mind and heart. Theoretical computer science wouldn’t have looked easy-going without Bharat sir. I would have never crossed paths with Hadoop or SVM if Aruna ma’am had not taken Data Mining the way she did. And, Bhaskar sir’s logical way of proceeding not only brought out the best of A.I. but made me feel unjust and guilty if I didn’t work hard for the course. I would be far far away from computer science had it not been these teachers and other CS faculty as well. Thank you for all the knowledge and inspiration.
If any of you readers have anything to add in here, I’ll be glad if you could comment it below or let me know so I add it to the post. Seniors and all these websites have made placements easy for us, we can make it easier for them.
Also, let me know if you guys want a detailed post of my placement experience with Endurance (read Directi).
Share your thoughts