/Amazon-Front-end-Engineer-Interview-prep

A Simple guide for preparing Amazon Technical Interview for a Front-end Engineer position

Primary LanguageJavaScript

Front-end Engineer Tips

  • Familiarity with prominent programming languages, including the syntax of the language. Pick the one you'r most comfortable with and stick with it.
  • Know how to use languages, libraries, and rendering technologies (e.g., web: JavaScript,templating languages,HTML, CSS; C#, webviews, view frameworks).
  • Showcase your knowledge of front-end system design. i.e. reusable components,separation of concerns (view models from business logic), application state management, and basic n-tier computing concepts (front-end, middle-tier, back-end).
  • Understand the inner workings of common data structures. Be able to compare and contrast their usage in various applications (e.g., retrieving JSON and using it to populate and power a user interface).
  • Research application performance concepts and technology. i.e resource caching (images, fonts),content delivery,asynchronous programming, and real usermetrics.
  • Write syntactically correct code—no pseudo code. Ensure it is scalable, robust,and well-tested.
  • Use object-oriented design or functional programming (logical and maintainable code) best practices to build lasting, scalable software.
  • Familiarity with the devices and/or browsers which run your software. Topics such as system availability, efficient resource usage (CPU, battery, screen size),and performance implications.
  • Familiarity with device and/or browser topics such as security, native API methods, local storage, and compatibility.

Technical Tips

  • Get ready to solve in-depth technical questions on concepts like front-end application design, data structures, and algorithms. This will likely include qualifying requirements, checking edge cases, and white boarding your solutions with engineers. In-person interviews tend to be more in-depth than the typesof questions asked during phone interview.
  • Be prepared to discuss technologies listed on your resume. i.e. if you list JavaScript or Ruby or Python as technical competencies, expect technical questions about your experiences with these technologies. It is helpful to review the job description before your interview to align your qualifications against the job’s specific requirements and responsibilities. When listing frameworks, be prepared to speak about these in depth and compare to other frameworks.
  • Brush up on problem solving and core Computer Science fundamentals.

White Boarding

  • Be prepared to white board. Practice writing code, front-end system design,and creating rough UI wireframes. Consider logical, maintainable, and scalable code or design before you begin drafting.
  • Interact with your interviewer. You will be asked several questions related to design. Engage with your interviewer with necessary questions to complete the exercise.
  • Dig for clarification.
  • Begin drawing a diagram once you've done enough digging to begin white boarding your system design solution. Start with shapes to represent different software components and data sources, and then arrows connecting them to show web services, APIs, and interactions between components.
  • Know how your solution solves the problem. If you suggest technology to help solve, understand how that technology works.
  • Think out loud as you write out your code or system design.
  • Show us your ability to solve problems.
  • Application performance is a critical component of front-end software design. Consider how to store and retrieve data, client-side vs server-side processing, browser/device rendering efficiency, and data flows. Keep this mind when diagramming and designing your software systems.
  • Operational performance is also a critical component of front-end software design. How will you ensure this component or application is working at an acceptable level of performance? If a problem occurs, what will be involved to trouble shoot and resolve quickly? What are the possible points of failure and how can they be made more robust agains failure?
  • Keep the customer front of mind. Who is the customer, and what problem are you solving for them?
  • Write a list of requirements on the board, and keep asking questions. This should be the first thing you write out.

Software Development Topics

Programming Language

  • Familarity with a prominent language is generally a prerequisite for success. Knowing the syntax of languages such as Java, Python, C#, C/C++, or Ruby.

  • You should also know some of the languages’ nuances, such as how memory management works, or the most commonly used collections, libraries, etc.

  • Pick the one language you'r most comfortable with and stick with it.

Data Structures

  • Knowlage storing and providing access to data in efficent ways.

  • Understanding the inner workings of common data structures and be able to compare and contrast their usage in various applications.

  • Knowing the runtimes for common operations as well as how they use memory

Algorithms

  • Having a good understanding of the most common algorithms will likely make solving some of the questions a lot easier.

  • Review common algorithms such as traversals, divide and conquer, breadth-first search vs. depth-first search and understand the tradeoffs for each.

  • Knowing the runtimes, theoretical limitations, and basic implementation strategies of different classes of algorithms is more important than memorizing the specific details of any given algorithm.

Coding

  • Writing syntactically correct code—no pseudo code. Get practice coding with a pen and paper.

  • Writing a scalable, robust, and well-tested code.

  • Make sure that you check for edge cases and validate that no bad input can slip through.

Object-Oriented Design

  • Good software needs to be extensible and maintainable.

  • Use object-oriented design best practices.

  • Should have a working knowledge of a few common and useful design patterns, along with how to write software in an object-oriented way.

  • Able to defen your design choices.

Databases

  • Figuring out how to most efficiently retrieve and store data for future use.

  • No knowlage OR any particular level of expertise REQUIRES with non-relational databases.

  • You should be familiar with broad database concepts and their applications.

  • Knowing about tradeoffs between relational and non-relational databases.

  • DynamoDB

Distributed Computing

  • Understanding of a few basic distributed computing concepts.

  • Understanding topics such as service-oriented architectures, map-reduce, distributed caching, load balancing, and others,

Operating Systems

  • You don't need to know how to build your own operating system from scratch, but you should be familiar with some OS topics that can affect code performance (e.g. memory management, processes, threads, synchronization, paging, and multithreading).

Internet Topics

  • Fundamentals of how the internet works.

  • How browsers function at a high level, from DNS lookups and TCP/IP, to socket connections.

  • Having a solid understanding of the fundamentals of how the worldwide web works is a requirement.

General Machine Learning and Artificial Intelligence

  • Data-driven modeling, train/test protocols, error analysis, and statistical significance.

  • Given a problem definition, you should be able to formulate it as a machine learning problem and propose a solution, including ideas for data sources, annotation, modeling approaches, and potential pitfalls.

  • Understand the basic AI/ML methods and algorithms – revisit your favorite ML and AI textbooks.

Recommendations

  • Reviewing or if you like me learning Computer science fundamentals.

  • Practicing coding outside of an integrated development environment.

Resources