Preparing for the Role of a (Senior) Full Stack Developer
Tags: webdev, devops, interview, javascript
Published: 2024-01-08 18:40:52

As we embark on a new year, if you are considering a career change or aspiring to step into the realm of a (Senior) Full Stack Developer, it's essential to prepare thoroughly for potential interviews. 

This article aims to guide you on the key topics you should be well-versed in to confidently tackle Full Stack Developer interviews.

## HTML, CSS, JavaScript

Mastering the fundamentals of web development is crucial. As a Full Stack Developer, ensure your proficiency in:

- Accessibility
- SEO
- Forms
- Web APIs (e.g. `localStorage`, `fetch`, `history`)
- CSS Layout (e.g. Flexbox, Grid)
- JavaScript Fundamentals (e.g. `this`, `prototype`, `async`, `await`, `Promise`)

### Example HTML, CSS, JavaScript Questions

- What is the difference between `null` and `undefined`?
- What is event bubbling?

## Web Frameworks

Familiarity with at least one web framework is expected. Notable frameworks include React, Vue, and Angular. Focus on the following areas:

- Components
- State Management
- Routing
- Server Side Rendering

### Example React Question

- Why use `useReducer` instead of `useState`?
- What is prop drilling and how can it be avoided?

## Server Programming Language (e.g. Node.js or Python)

Full stack developers should excel in at least one server programming language, typically Node.js. Key areas of expertise include:

- Express (or other web frameworks)
- REST APIs
- Node.JS event loop
- Async programming (e.g. callbacks, promises, async/await)
- Streams
- WebSockets
- REST APIs
- GraphQL

### Example Node.js Questions

- Why is the following code not a good practice in error handling?

```js

process.on('uncaughtException', (err) => {
  console.log('Caught exception: ' + err);
});

```

- What is the difference between `process.nextTick` and `setImmediate`?

## Web Security

Understanding common web security vulnerabilities is crucial. Equip yourself with knowledge in:

- CORS
- CSRF
- XSS
- SQL Injection
- HTTPS
- Content Security Policy
- Authentication (e.g. JWT, OAuth)

### Example Web Security Questions

- What is the purpose of a CSRF token?
- What is the purpose of a CORS policy?
- What is the purpose of a Content Security Policy?

## DevOps

Efficient deployment and maintenance are integral skills. Focus on the following:

- Docker
- CI/CD
- AWS (or other cloud providers like Azure or GCP)
- Observability (e.g. logging, monitoring, tracing)
- Infrastructure as Code (e.g. Terraform)

### Example DevOps Questions
- What is the relationship between Docker and Kubernetes?
- Why is application observability important?
- What are the common stages in a CI/CD pipeline?
  
## General Engineering Practices

Adopting standard engineering practices is key. Ensure familiarity with:

- Testing (e.g. unit testing, integration testing, end-to-end testing)
- Git (e.g. branching, merging, rebasing, squashing)
- Agile (e.g. Scrum, Kanban)
- Refactoring
- Code Review

### Example General Engineering Questions

- What is the difference between unit testing and integration testing?
- What is the difference between rebasing and merging?


## Databases

Database knowledge is foundational. Key areas of understanding include:

- SQL (e.g. joins, aggregations, indexes)
- NoSQL (e.g. key-value stores, document stores, graph databases)
- ACID
- Transactions
- Database Indexing

### Example Database Questions

- What is the purpose of a database index?
- What is the difference between a `primary key` and a `foreign key`?

Remember, this list is a starting point. Tailor your preparation to align with the specific needs of the company you are applying to.

It's natural to feel overwhelmed, but focus on continuous learning. You can acquire these skills gradually and even on the job. Be curious and open to learning.

To aid your revision for a Full Stack Developer role, consider using the list of questions I've compiled in this repo in the form a quiz with a small web app to practice [Github Revis3](https://github.com/raysca/revis3), categorized by topics:

- [Full Stack Questions](https://revis3.web.app/web)
- [DevOps Questions](https://revis3.web.app/devops)
- [JavaScript Questions](https://revis3.web.app/javascript)
- [React Questions](https://revis3.web.app/react)

I hope you find this useful. If you have any feedback, please let me know.