Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions tech_interviews/00_introduction.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
## Welcome to this course

We at Craft Academy are commited to make sure that all of our students are job ready at the end of the bootcamp. This means that besides coding our students need to know how to handle technical interviews. The tech interviews that companies conduct do vary.

We have collected different types of tech interviews over the years and are sharing the most common ones. You will conduct these interviews with the oversight of a coach this is so that we can assess you but also give you feedback in order for your to improve your coding skills but most of all your communication skills, as these are very important when being interviewed.

The complexity of the tech interviews will grow as we move along in the bootcamp, so make sure that you are constantly coding but also pairprogramming to practice these important skills.

We will release a new tech interview every other week and they will be held on fridays.

73 changes: 73 additions & 0 deletions tech_interviews/01_the_basics.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@

You have 40 minutes to complete the assessment. You can look wherever you want for help with your answers (Google, StackOverflow, course materials, etc.), as long as you do not ask me (the coach) for help.

As you work on this exercise, please 'think aloud.' That means verbally describing your mental process as it develops, including the doubts and questions you have, the solution strategies you consider, and the reasons that justify your decisions.

### [](https://github.com/CraftAcademyLabs/coach-guides/blob/master/miscellaneous/assessments/assessment_1.md#think-aloud-protocol)Think Aloud Protocol

The 'Think-aloud' protocol involve the participant thinking aloud as he or she are performing a set of specified tasks or working on an excercise. The participant are asked to say whatever comes into his/her mind as he complete the task. This might include what he/she is looking at, thinking, doing, and feeling. This gives the coach valuable insight into the participant's cognitive processes (rather than only their final product), to make thought processes as explicit as possible during task performance. Sessions should be recorded so that coaches can go back and refer to what participants did and how they reacted.

## Setup

Let's get started..

- Create a folder called `tech_interviews` and initialize `git` inside this folder.

- Create a repo on your github account that is called `tech_interviews` and att the repo as your remote in your `tech_interviews` folder.

- Create a new branch called `week_1_tech_interview`

- Create a folder named `week_1_assessment` and add a text file called `answers.md` where you can write down your answers.

- Commit and push up your code and share your repo with your coach.


## Question 1 - Variables

Create a variable and set it equal to 'variable'.
What kind of datatype is this?

Write some few examples datatypes in your answers file.


## Question 2

Hashes and Arrays

Open irb. We're going to make some cars.
- Create two hashes, one for each car, with the following attributes: `wheels`, `max_speed`, `color`

- Create an array that contains both cars.

- How do we use the array to access the second car? How do we find the second car's color?

- Add the code to your answers file, commit and push


## Question 3

**Classes and Methods**

- Create a new folder called `cars` and inside of that folder, create a file called `car.rb`

Inside that file create a class `Car` and add a method to "paint" a car a new color.

- Open irb. Load your 'car.rb' file.

- Create an instance of a Car and change its color.

- Once you have changed the cars color, commit and push your code.


## Question 4

RSpec
- Create a unit test for our Car class to test our "painting" method.
- A car should have a driver. Create an instance_double Driver. Write a second test for this and make it pass.

Please answer the following questions in your `answers` file
- How do you initialize rspec in a folder?
- We would ordinarily have written our tests first, then written code to make them pass. Why?
- What are the benefits of TDD?
- Write a user story for the painting method.
- Commit and push to your repo
48 changes: 48 additions & 0 deletions tech_interviews/02_rps_challenge.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
title: "Rock - Paper - Scissors Challenge"
author: [Craft Academy]
date: Version 1 - 2018
subject: "Career Training"
keywords: [Ruby, JavaScript, Web based applications, Example, Learn To Code]
subtitle: "Career Training"
titlepage: true
titlepage-color: f28e24
titlepage-text-color: "FFFFFF"
titlepage-rule-color: "FFFFFF"
titlepage-rule-height: 2
...

# Rock - Paper - Scissors

**Note: This is a simulation of a work interview. Please act accordingly.**

In order to assess your coding skills, we want you to accept an programming challenge as part of the hiring process. Your challenge is to build a Rock, Paper, Scissors game.

![](https://github.com/CraftAcademyLabs/coach-guides/raw/master/miscellaneous/assessments/assets/rock_paper_scissors.png)

The rules are well known to everyone, but in case you don't remember, they are as follows:

```
Rock vs Paper-> Paper wins
Rock vs Scissors-> Rock wins
Paper vs Scissor-> Scissor wins
```

This is a two part challenge that will span over 14 days. There are no right or wrong answers or deliveries. It is totally up to you HOW you want to work, what programming language you want to use, if you want to deliver game logic only or if you want to build a web based interface where a player is challenged by the computer or where two players can play against each other.


#### What do we expect from you is:


1. During the first interview, describe how you would go about with the project as a whole but also on how you would approach implementing the game logic. Describe your thoughts about the process as you think you would have to employ to make this happen.

2. Sometime during the period between the two inteviews we would need you to deliver the code to us. How would you do that?

3. During the second inteview, we would need you to talk us through the problem, what challenges did you encounter, how did you go about writing the implementation, what are the main features you think make your game interesting and how can it be expanded upon in the next iteration. We also want you to demo the code and show us how the game works.

This is a challenge that will show us your level of ambition and your ability to execute your plans. It's a solo project and you are not supposed to collaborate with any other students other than for benchmarking purposes. Talk, discuss, get inspired but write your own code.

**Remember that Craft Academy Labs uses an agile approach to software development and that we value Test Driven Development and all the techniques that comes with XP.**



20 changes: 20 additions & 0 deletions tech_interviews/03_twitter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## The Twitter Challenge

## Think Aloud Clarification
The 'Think-aloud' protocol involve the participant thinking aloud as he are performing a set of specified tasks or working on an excercise. The participant are asked to say whatever comes into his mind as he complete the task. This might include what he is looking at, thinking, doing, and feeling. This gives the coach valuable insight into the participant's cognitive processes (rather than only their final product), to make thought processes as explicit as possible during task performance. Sessions should be recorded so that coaches can go back and refer to what participants did and how they reacted.


### Setup
- Create a new branch called `week_7_tech_interview` in your `tech_interview` folder
- Create a new folder called `twitter_challenge`

## The Challenge

### Resources
* The twitter gem can be found on [https://github.com/sferik/twitter](https://github.com/sferik/twitter)
* The user name you want to search for is @ThomasOchman or @CraftAcademySE
* You need to register an application with Twitter here: [https://apps.twitter.com/](https://apps.twitter.com/)
* If you are facing a choice what method to use you should go with the “REST Client” (you’ll understand when you’ve read the gem documentation)

## Instructions
“Today we want to assess your ability to read documentation, research and make use of gems and use third party services. We want you to use of a gem called “twitter” and use it to access the TwitterAPI in order to get the 5 last tweets from CraftAcademy (@CraftAcademySE), Thomas (@ThomasOchman) or David Heinemeier Hansson @dhh (The Father of Rails).
107 changes: 107 additions & 0 deletions tech_interviews/04_unter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# Setting up a project
## Rails with testing frameworks and CI/CD

This week we would like to assess your ability to scaffold a new Rails API project.

**Assessment time - up to 30 minutes**

As you work on this exercise, please '_**think aloud**_'. That means verbally describing your mental process as it develops, including the doubts and questions you have, the solution strategies you consider, and the reasons that justify your decisions.

### Think Aloud Clarification

The 'Think-aloud' protocol involve the participant thinking aloud as s/he is performing a set of specified tasks or working on an excercise. The participant is asked to say whatever comes into mind as s/he completes the task. This might include what s/he is looking at, thinking, doing, and feeling. This gives the coach valuable insight into the participant's cognitive processes (rather than only their final product), to make thought processes as explicit as possible during task performance. Sessions should be recorded so that coaches can go back and refer to what participants did and how they reacted.


## Challenge

Your project team will be starting a new project - a crowdsourced transportation platform called **Unter**. You were assigned the following API chores by your team:

### Set up main repository
**Description**


```gherkin
As a development team
In order to be able to collectively work on the same codebase
We would like to have a main repository on GitHub we all can use as the upstream repository
```

**Tasks (Acceptance Criteria)**

- [ ] Set up a repository on GitHub (Please treat your own account as the account for this organization for the sake of this exercise)
- [ ] Create a `development` branch and set it as the main branch of the project
- [ ] Share repo with team

### Set up application structure

**Description**

```gherkin
As a development team
In order to be able to start adding features
We would like to have an basic application structure
```

**Tasks (Acceptance Criteria)**

- [ ] Scaffold a Rails API application
- [ ] Turn off generators for helpers, assets and all specs (accept model specs)
- [ ] Clean up the generated code from unnecessary comment for good readability


### Set up testing environment

**Description**

```gherkin
As a development team
In order to be able to make sure our code is doing what it is supposed to do
We would like to be able to write and run automated tests
```

**Tasks (Acceptance Criteria)**

- [ ] Add and configure Rspec for Unit and Request specs
- [ ] Configure shoulda matchers

### Set up Continuous integration

**Description**

```gherkin
As a development team
In order to make sure that the code we add to the code base is functional
We would like to run full test suite on a remote service
```

**Tasks (Acceptance Criteria)**

- [ ] Set up CI on Semaphore

### Set up Test Coverage Metrics
**Description**

```gherkin
As a development team
In order to see how much of our code is covered in tests
We would like to measure test coverage using a remote service
```

**Tasks (Acceptance Criteria)**

- [ ] Set up Coveralls for the main repository
- [ ] Add and configure Coveralls for RSpec

### Set up Continious Deployment
**Description**

```gherkin
As a development team
In order to automate the deployment process during development
We would like all code that has been merged into the main code base, to be deployed to a server
```

**Tasks (Acceptance Criteria)**

- [ ] Create an application on Heroku
- [ ] Set up deployment using the CI tool
95 changes: 95 additions & 0 deletions tech_interviews/05_final_tech_interview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
## Final assessment

The goal of this is to assess your skills in programming and associated tasks (version control, DevOps, agile, etc). You will be given 2 programming challenges and some programming related questions.

1. Comments Challenge
2. Viaplay Challenge
3. Written submission

#### Time & Format
4 hours during which you need to be online in a coach supervised conference call (Google Meet). You need to share your screen/monitor where your IDE is displayed.

#### Delivery:

All code must be delivered in the form of a **Pull Request** against the repositories that the examiner will provide to you (one for each challenge). Please note that the repositories will be set in **public** mode for the duration of the assessment, and closed sourced once we finish the assessment. We, the coaches of CA will be the only ones that can see them. We undertake this step to protect your privacy.

## Comments Challenge
You are challenged to implement a feature for the Crafty News API.

Title: "User can comment on an article"

User story:
```
As a User
In order to voice my opinion on an article
I would like to be able to leave a comment
```
Tasks:
- [ ] Write request spec
- [ ] Add comment model
- [ ] Comment needs to contain a body
- [ ] Add association between comment and article
- [ ] Only authenticated user can comment, add user model with devise token auth
- [ ] Add association between comment and user


You need to fork the repository and clone the forked repository to your computer. Then you need to branch off from the development branch. When you feel that you are done, you need to create a pull request towards the upstream repository. Make sure that the PR contains the correct information. The user story and what changes that are proposed in the PR.

Link to the upstream repository: https://github.com/CraftAcademy/crafty_news_API_tech_interview

Good luck!

## Viaplay Challenge

You are challenged with the task of replicating a UI. It is a desktop-only web application listing TV series from Viaplay.

The presented UI looks like this:

![](./viaplay_challenge_ui.png)


You need to fetch the data from the Viaplay API and find the appropriate attributes that hold the information you need.

The API is located at:

```
https://content.viaplay.se/pc-se/serier/samtliga
```

The TV series listings can be found at:
```js
yourDataObject._embedded['viaplay:blocks'][0]._embedded['viaplay:products']
```

You can find a logo with a transparent background at:
```
https://kundservice.viaplay.se/wp-content/themes/viaplaycs/assets/dist/images/viaplay_white.svg
```

Displaying the shows in a row with the right formatting is a bit challenging. To help you, we've chosen to provide an example solution that is proven to yield good results. It is up to you if you want to use it though. The rest of the css needed to replicate the UI is up to you to define.

Link to the upstream repository: https://github.com/CraftAcademy/final_exam_viaplay_challenge

```css
.display-show {
display: inline-block;
width: 23%;
width: calc(25% - ( ( 20px ) * 0.75 ) );
margin-right: 20px;
margin-bottom: 20px;
}

.display-show:nth-child(4n+4) {
margin-right: 0;
}

.display-show img {
width: 100%;
height: auto;
}
```

Good luck and Happy Coding.

## Written submission
Please explain the steps you think are necessary to perform to get a feature done, from an idea to an implemented solution that is running in production. Be as detailed as possible.