diff --git a/tech_interviews/00_introduction.md b/tech_interviews/00_introduction.md new file mode 100644 index 0000000..a45c86a --- /dev/null +++ b/tech_interviews/00_introduction.md @@ -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. + diff --git a/tech_interviews/01_the_basics.md b/tech_interviews/01_the_basics.md new file mode 100644 index 0000000..18752fd --- /dev/null +++ b/tech_interviews/01_the_basics.md @@ -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 diff --git a/tech_interviews/02_rps_challenge.md b/tech_interviews/02_rps_challenge.md new file mode 100644 index 0000000..73e81f5 --- /dev/null +++ b/tech_interviews/02_rps_challenge.md @@ -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.** + + + diff --git a/tech_interviews/03_twitter.md b/tech_interviews/03_twitter.md new file mode 100644 index 0000000..5101836 --- /dev/null +++ b/tech_interviews/03_twitter.md @@ -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). diff --git a/tech_interviews/04_unter.md b/tech_interviews/04_unter.md new file mode 100644 index 0000000..d098ff7 --- /dev/null +++ b/tech_interviews/04_unter.md @@ -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 \ No newline at end of file diff --git a/tech_interviews/05_final_tech_interview.md b/tech_interviews/05_final_tech_interview.md new file mode 100644 index 0000000..4179b94 --- /dev/null +++ b/tech_interviews/05_final_tech_interview.md @@ -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. \ No newline at end of file