Looking at what Big Companies like Google, Microsoft, Apple, FaceBook, Amazon, IBM etc when hiring software engineer, you must have wondered what they look at for and what skills they require.
Wonder no more, Its may seem much but if you start learning from now, its will be playing around in few months to come. Learning using this as a guideline will prepare you as a world standard Software engineer/Developer.
Here is an extract from the requirements of a software engineering role from a Google Recruiter.
General: I suggest you know HTTP and Cookies in depth: what various HTTP codes are and what they're used for, HTTP pipelining/persistence, how Cookies are used by web companies both to the advantage of the user and the company itself (e.g. ads). Also study up on TCP/IP and how the Internet works (its infrastructure . Know a lot about databases on a high level. Look up the CAP theorem. Know what SQL and NoSQL are and when to use which.
Algorithms: Approach problems with both bottom-up and the top-down Algorithms. Sorting (plus searching and binary search), Divide-and-Conquer, Dynamic Programming / Memorization, Greediness, Recursion or algorithms linked to a specific data structure.
You will be expected to know the complexity of an algorithm and how you can improve/change it. Big-O notations also known as the run time characteristic of an algorithm. For leisure try to study up on fancier algorithms, such as Dijkstra and A*. For more information on algorithms you can visit TopCoder.
Data structures: You should study up on as many data structures as possible. Data structures most frequently used are Arrays, Linked Lists, Stacks, Queues, Hash-sets, Hash-maps, Hash-tables, Dictionary, Trees and Binary Trees, Heaps and Graphs (Graphs can be used to solve a number of problems) . You should know the data structure inside out, and what algorithms tend to go along with each data structure.
Mathematics: Some interviewers ask basic discrete math questions. This is more prevalent at Google than at other companies because counting problems, probability problems and other Discrete Math 101 situations surrounds us. essentials of elementary probability theory and combinatorics. You should be familiar with n-choose-k problems
Graphs: To consider a problem as a graph is often a very good abstraction to apply, since well known graph algorithms for distance, search, connectivity, cycle-detection etc. will then yield a solution to the original problem. There are 3 basic ways to represent a graph in memory (objects and pointers, matrix, and adjacency list); familiarize yourself with each representation and its pros/cons. You should know the basic graph traversal algorithms, breadth-first search and depth-first search. Know their computational complexity, their tradeoffs and how to implement them in real code.
Recursion: Many coding problems involve thinking recursively and potentially coding a recursive solution. Prepare for recursion, which can sometimes be tricky if not approached properly.
Operating systems: You should understand processes, threads, concurrency issues, locks, mutexes, semaphores, monitors. Understand deadlock, livelock and how to avoid them. Know what resources a process needs and a thread needs.
Understand how context switching works, how it's initiated by the operating system and underlying hardware. Know a little about scheduling. The world is rapidly moving towards multi-core, so know the fundamentals of "modern" concurrency constructs.
Coding style: There have been lot of argument on code style such as Kernighan and Ritchie style ("Egyptian brackets"), using space or tabs, indentation, line wrapping, alignment, Horizontal and vertical whitespace, Variable declarations, comment type etc
here are links to Google Coding style and why some of these are preferred.Being Knowledgeable in several coding style will help you to be able to contribute to several open source project ( strict coding style are enforced ).
For Java we don't publish anything official, however we base it heavily on this: click here - java
For C++ and Python code style guides: click here -C++/python
There is also an Android style guide that is quite similar: click here - android.
Books: Try get your hands on these books in the library or read them online if possible:
Elements of Programming Interviews: The Insiders' Guide
Cracking the Coding Interview, 6th Edition: 189 Programming Questions and Solutions Also contains a section on Big O (algorithm complexity) analysis and a section on System Design.
Data Structures and Algorithms in Java
Introduction to Algorithms (Textbook For reference and extra reading only)
The Algorithm Design Manual (More like an encyclopedia)
Algorithms in a Nutshell: A Desktop Quick Reference
http://maniali.wikispaces.com/
http://mitpress.mit.edu/sites/
http://cad6.csie.fju.edu.tw/
Programming Interviews Exposed
PRACTICE!
TopCoder
Project Euler
Happy Coding....
No comments:
Post a Comment
You can use Anonymous to comment if you like.
Disclaimer: You are responsible for your comment.