Question library

Ruby interview questions and answers

45 Ruby interview questions with answers: 10 junior, 15 mid-level and 20 senior. Junior answers are free to read.

Junior Mid Senior Updated How these answers are created

* View counts were reset on 18 October 2026, when Interviewplus moved to interviewplus.app. Votes were not affected.

Answer

Ruby is a dynamic, open-source programming language that was first released in 1995 by Yukihiro Matsumoto, also known as Matz. It is a high-level language with a focus on simplicity and productivity, and is designed to be easy to read and write.

Ruby is often described as a "multi-paradigm" language, meaning that it supports different programming styles such as object-oriented, functional, and imperative programming. It is also known for its flexible syntax, which allows developers to write code in a way that feels natural to them.
One of the defining features of Ruby is its use of "gems", which are packages or libraries that can be easily installed and used in Ruby projects. This allows developers to quickly add functionality to their projects without having to reinvent the wheel.
Ruby is often used for web development, and is the language behind the popular web application framework Ruby on Rails. It is also used for scripting, automation, and data analysis, among other things.
Overall, Ruby is a powerful and versatile language that is popular among developers for its ease of use, flexibility, and community support.

Answer

Here's an example of how you can implement a Ruby class that represents a deck of playing cards, including methods for shuffling, dealing cards, and checking for a winning hand in a game.

class Deck
  attr_reader :cards

  SUITS = ['♠', '♣', '♥', '♦']
  RANKS = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

  def initialize
    @cards = build_deck
  end

  def shuffle
    @cards.shuffle!
  end

  def deal(num_cards)
    @cards.shift(num_cards)
  end

  def winning_hand?(hand)
    # Implement your own logic to determine a winning hand
    # For example, check for a Royal Flush, Straight Flush, etc.
    # This example simply checks if the hand has 5 cards of the same suit
    hand.group_by(&:suit).values.any? { |group| group.length >= 5 }
  end

  private

  def build_deck
    SUITS.flat_map do |suit|
      RANKS.map do |rank|
        Card.new(rank, suit)
      end
    end
  end
end

class Card
  attr_reader :rank, :suit

  def initialize(rank, suit)
    @rank = rank
    @suit = suit
  end
end

Now you can use the Deck class to create a deck of playing cards, shuffle the cards, deal cards to players, and check for a winning hand.
Here's an example usage:

# Create a new deck
deck = Deck.new

# Shuffle the deck
deck.shuffle

# Deal 5 cards to a player
hand = deck.deal(5)

# Check if the hand is a winning hand
if deck.winning_hand?(hand)
  puts "Congratulations! You have a winning hand!"
else
  puts "Sorry, your hand did not win."
end

Feel free to customize the winning_hand? method to implement your own logic for determining a winning hand based on the rules of your specific card game.

Answer

In Ruby, puts and print are both methods used to output information to the console, but they have slightly different behaviors.
The print method outputs text to the console without adding a new line character at the end of the output. This means that if you use print multiple times, the output will appear on the same line:

print "Hello, "
print "world!"

Output:

Hello, world!

On the other hand, the puts method also outputs text to the console, but it adds a new line character at the end of the output. This means that if you use puts multiple times, each output will appear on a new line:

puts "Hello, "
puts "world!"

Output:

Hello, 
world!

So, the main difference between puts and print is that puts adds a new line character at the end of the output, while print does not. In general, puts is often used for outputting messages or data that should appear on separate lines, while print is often used for outputting data that should appear on the same line, such as prompts or progress indicators.

Answer

In Ruby, you can define a class using the class keyword followed by the name of the class, which should be capitalized. Here is the basic syntax:

class MyClass
  # class definition goes here
end

Inside the class definition, you can add methods and variables that will be associated with instances of the class. For example, you can define a method that initializes new instances of the class using the initialize method:

class Person
  def initialize(name, age)
    @name = name
    @age = age
  end

  def greet
    puts "Hello, my name is #{@name} and I'm #{@age} years old."
  end
end

In this example, we defined a Person class with an initialize method that takes two arguments (name and age) and sets instance variables (@name and @age) based on those arguments. We also defined a greet method that outputs a greeting using the instance variables.
Once you have defined a class, you can create new instances of the class using the new method:

person1 = Person.new("Alice", 25)
person2 = Person.new("Bob", 30)

person1.greet #=> Hello, my name is Alice and I'm 25 years old.
person2.greet #=> Hello, my name is Bob and I'm 30 years old.

In this example, we created two instances of the Person class (person1 and person2) and called the greet method on each instance to output a greeting specific to that instance.

Answer

Sure, here are some of the operators that are commonly used in Ruby:
1. Assignment operator: = is used to assign a value to a variable.
2. Arithmetic operators: + (addition), - (subtraction), * (multiplication), / (division), % (modulus), and ** (exponentiation) are used to perform basic arithmetic operations.
3. Comparison operators: == (equal to), != (not equal to), > (greater than), < (less than), >= (greater than or equal to), and <= (less than or equal to) are used to compare values.
4. Logical operators: && (logical and), || (logical or), and ! (logical not) are used to perform logical operations.
5. Bitwise operators: & (bitwise and), | (bitwise or), ^ (bitwise exclusive or), ~ (bitwise complement), << (left shift), and >> (right shift) are used to perform bitwise operations.
6. Range operators: .. (inclusive range) and ... (exclusive range) are used to create ranges of values.
7. Membership operators: in and not in are used to check if an object is a member of a collection (such as an array or a hash).
These are just a few examples of the many operators that are available in Ruby. Understanding how to use these operators effectively is an important part of writing effective Ruby code.

Answer

In Ruby, a block is a piece of code that can be passed to a method as an argument. Blocks are often used to perform some kind of operation on each element of a collection (such as an array), but they can be used in a variety of other contexts as well.
Here is an example of a block being used with the each method to iterate over an array:

numbers = [1, 2, 3, 4, 5]
numbers.each do |n|
  puts n * 2
end

In this example, we defined an array of numbers ([1, 2, 3, 4, 5]) and then called the each method on it, passing in a block of code as an argument. The block takes a single argument (n) and outputs the result of multiplying it by 2.
Blocks are denoted by a set of curly braces ({}) or a do/end statement. The do/end syntax is often preferred when the block spans multiple lines, while the curly brace syntax is often used for single-line blocks.
Blocks are a powerful feature of Ruby, as they allow you to write more concise and expressive code that is easier to read and maintain. They are used extensively in many Ruby libraries and frameworks, and are an important part of the language's functional programming capabilities.

Answer

In Ruby, nil and false are both special values that represent the absence of something, but they have different meanings.
nil is a value that represents the absence of any object. It is often used to indicate that a variable or expression has no value, or that a method call did not return anything. nil is a singleton object in Ruby, which means that there is only one instance of it in memory.
On the other hand, false is a Boolean value that represents the absence of a true value. It is often used to indicate that a condition is not true, or that a method call did not succeed. false is also a singleton object in Ruby.
Here is an example that demonstrates the difference between nil and false:

def get_value
  # some code that may or may not return a value
end

result = get_value

if result.nil?
  puts "The result is nil"
elsif result == false
  puts "The result is false"
else
  puts "The result is #{result}"
end

In this example, we defined a method called get_value that may or may not return a value. We then called the method and assigned the result to a variable called result. We then used an if statement to check the value of result. If it is nil, we output a message indicating that the result is nil. If it is false, we output a message indicating that the result is false. If it is anything else, we output a message indicating the actual value of the result.
By checking for both nil and false separately, we can distinguish between the two cases and handle them appropriately in our code.

Answer

Here's an example of a Ruby program that reads a text file, counts the occurrences of each word, and displays the word count in descending order:

def count_words(file_path)
  word_counts = Hash.new(0)

  File.open(file_path, 'r') do |file|
    file.each_line do |line|
      words = line.downcase.scan(/\w+/)
      words.each { |word| word_counts[word] += 1 }
    end
  end

  word_counts
end

def display_word_counts(word_counts)
  sorted_counts = word_counts.sort_by { |word, count| [-count, word] }

  sorted_counts.each do |word, count|
    puts "#{word}: #{count}"
  end
end

# Example usage:
file_path = 'text_file.txt'  # Replace with the actual file path
word_counts = count_words(file_path)
display_word_counts(word_counts)

In this program, we define a count_words method that takes a file path as an argument. It uses a hash (word_counts) to store the count of each word in the file. We iterate over each line in the file, convert the line to lowercase, and use a regular expression (/\w+/) to extract words. We then update the corresponding count in the word_counts hash.
The display_word_counts method takes the word_counts hash and displays the word count in descending order. It first sorts the word_counts hash by count in descending order and word in ascending order. Then, it iterates over the sorted counts and prints each word and its count.
To use the program, provide the path to the text file you want to analyze by replacing 'text_file.txt' with the actual file path. The program will read the file, count the occurrences of each word, and display the word count in descending order.
Please make sure to replace 'text_file.txt' with the actual file path in the file_path variable before running the program.

Answer

In Ruby, load and require are used to load external code libraries or files into a Ruby program.
require is the most commonly used method to load external code. It is used to load external code libraries or files, and it makes sure that the same file is not loaded twice. Once a file is loaded with require, its contents are cached and subsequent calls to require with the same filename will not load the file again. Here's an example of how to use require to load an external library:

require 'my_library'

This code will look for a file named my_library.rb in the load path and load its contents into the current program.
load, on the other hand, loads the specified file every time it is called. This means that if you make changes to the file, they will be reflected in your program the next time you call load. Here's an example of how to use load to load an external file:

load 'my_file.rb'

This code will load the contents of my_file.rb into the current program every time it is called.
In summary, require is used to load external code libraries or files that you do not intend to modify frequently, while load is used to load external files that you may modify frequently and want to see the changes in your program.

Answer

In Ruby, a lambda is a type of anonymous function that can be assigned to a variable, passed as an argument to a method, or returned from a method. It is a way to create a small block of code that can be reused throughout your program.
A lambda is defined using the lambda keyword or the shorthand -> syntax. Here's an example of how to define a lambda in Ruby:

my_lambda = lambda { |a, b| a + b }

This code defines a lambda that takes two arguments a and b and returns their sum.
Lambdas are similar to blocks in that they can be used as a parameter to a method, but unlike blocks, they can be assigned to a variable and used in other parts of your code. Here's an example of how to use a lambda in Ruby:

my_lambda = lambda { |a, b| a + b }
result = my_lambda.call(2, 3)
puts result

In this code, we define a lambda that takes two arguments and returns their sum. We then call this lambda with the call method, passing in the arguments 2 and 3, and assign the result to a variable named result. Finally, we output the result to the console.
Lambdas can be a useful tool in Ruby programming, especially when you need to pass small pieces of functionality as arguments to methods or reuse code throughout your program.

Answer preview

Certainly! Here's an example of a Ruby method that takes a string as input and returns the reversed version of the string: In this method, we define reverse_string that takes a string str as input. We initialize an empty string reversed_str to store the reversed version of the input string. We iterate over each…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Sure! Here's an example of a function in Ruby that takes an array of numbers and a discount value as input, and applies the discount to each number in the array: In this code, we define a method named `apply_discount` that takes two arguments: an array of numbers `numbers`, and a discount value `discount`. We then use…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, a `while` loop is a control structure that repeatedly executes a block of code while a certain condition is true. The syntax for a `while` loop in Ruby is as follows: In this code, `condition` is any expression that returns a boolean value (`true` or `false`). The block of code inside the loop will be…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Ruby doesn't have a `do-while` loop construct, but it has an equivalent control structure called `begin..while`, which has a similar behavior. The `begin..while` loop will execute the code block at least once, and then continue executing the code block repeatedly while the specified condition is true. The syntax for a…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, an `until` loop is a control structure that repeatedly executes a block of code while a certain condition is false. The `until` loop is the opposite of the `while` loop, which executes while the condition is true. The syntax for an `until` loop in Ruby is as follows: In this code, `condition` is any…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Certainly! Here's an example of a Ruby program that calculates the factorial of a given number using recursion: In this program, we define a method factorial that takes a number n as input. Inside the method, we have a base case when n is equal to 0, in which case we return 1 since the factorial of 0 is defined as 1…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, the `next` statement is a control structure that allows you to skip over the rest of the current iteration of a loop and move on to the next iteration. When executed inside a loop, `next` will immediately stop executing the current iteration of the loop and transfer control back to the top of the loop to…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, the `redo` statement is a control structure that allows you to repeat the current iteration of a loop from the beginning, without evaluating the loop condition again. When executed inside a loop, `redo` will cause the current iteration to start again from the top of the loop, without re-evaluating the loop…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, you can use two different styles of comments: 1. Single-line comments, which start with a hash character (`#`) and continue to the end of the line. For example: 2. Multi-line comments, which start with `=begin` and end with `=end`. For example: It's important to note that multi-line comments are actually…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, an object is an instance of a class that encapsulates data and behavior. Every value in Ruby is an object, including numbers, strings, arrays, and even classes themselves. When you create a new object in Ruby, you're essentially creating a new instance of a particular class. For example, you can create a new…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

"Duck typing" is a concept in programming, particularly in dynamically-typed languages like Ruby, that allows an object to be used based on its behavior rather than its class or type. The idea is that if an object can respond to a certain set of methods, it can be treated as if it belongs to a particular class or…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Certainly! Here's an example of a Ruby class that represents a binary search tree: In this example, we define two classes: Node and BinarySearchTree. The Node class represents a single node in the binary search tree, while the BinarySearchTree class represents the binary search tree itself. The Node class has an…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, both the `include` and `extend` methods are used to mix in module functionality into a class, but they work in slightly different ways: - The `include` method is used to add instance methods from a module to a class. When you include a module in a class, the module's instance methods become available as…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, exceptions are raised by code when an error occurs, and they can be handled by enclosing the code that may raise an exception in a `begin`/`rescue` block. Here's the basic syntax for handling exceptions in Ruby: In this syntax: - The `begin` block contains the code that may raise an exception. - The `rescue`…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, it's possible to create custom exception classes that inherit from the built-in `Exception` class. This allows you to define your own exception types with custom messages and behavior. Here's an example: In this example, we've defined a new class called `CustomException` that inherits from `Exception`. We've…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Sure! Here's an example of a Ruby method that checks whether a given string is a palindrome, ignoring whitespace and punctuation: In this method, we first remove whitespace and punctuation from the given string using the gsub method. The regular expression [^a-z] matches any character that is not a lowercase letter…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, every object has a class associated with it that defines the methods and properties that the object can have. Similarly, every class itself is an object, and just like any other object, it has a class associated with it. The class that is associated with a class is called its metaclass or singleton class. A…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, `attr_accessor`, `attr_reader`, and `attr_writer` are helper methods that generate getter and/or setter methods for instance variables of a class. They provide a convenient way to define instance variables and accessor methods without having to write repetitive code. `attr_accessor` is a shorthand method that…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, `method_missing` is a special method that is called whenever an object receives a method call that it does not have a corresponding method for. It is a way to handle dynamic method dispatch in Ruby. When Ruby encounters a method call that an object cannot handle, it looks for a `method_missing` method in the…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Memoization is a technique used to speed up a program by caching the results of expensive method calls and returning the cached result when the method is called again with the same arguments. This can be particularly useful in situations where the method is called repeatedly with the same arguments. In Ruby…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Certainly! Here's an example of a Ruby program that generates the Fibonacci sequence up to a specified limit and stores the sequence in an array: In this program, we define the fibonacci_sequence method that takes a limit as an argument. Inside the method, we initialize an empty array called sequence to store the…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, you can create a new time instance using the `Time` class. The `Time` class provides a number of methods for working with dates and times in Ruby. To create a new time instance, you can call the `Time.new` method, which returns a new time object representing the current date and time. You can also pass…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, a range represents an interval of values between two endpoints. A range can be defined using two dots `..` or three dots `...`: - Two dots `..` include both endpoints of the range. - Three dots `...` exclude the endpoint on the right side of the range. Here are some examples: In the first example, we define a…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Certainly! Here's an example of a Ruby class that represents a linked list: In this example, we define two classes: Node and LinkedList. The Node class represents a single node in the linked list and has two attributes: value to store the node's value and next_node to store the reference to the next node in the list…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

There are many iterators available in Ruby, but some of the most commonly used ones include: - each - times - map - select - each_with_index - inject - each_key - each_value There are many others, and developers can even create their own custom iterators using Ruby's yield keyword.

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Here are some of the methods available for IO console input and output in Ruby: 1. puts: Outputs a string to the console, followed by a newline character. 2. print: Outputs a string to the console, without a newline character. 3. gets: Reads a line of input from the console, including any newline characters. 4. chomp…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

To implement a custom exception class in Ruby, you can define a new class that inherits from the built-in `StandardError` class. For example, to create a custom `MyError` class, you can write: This creates a new exception class `MyError` that inherits from `StandardError` and defines an `initialize` method to set the…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, method aliasing is a technique used to give an existing method another name without changing its behavior. It is done by creating a new name for an existing method, so that both the original method name and the new alias can be used interchangeably. To alias a method, the `alias_method` keyword is used…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Yes, in Ruby, both `include` and `extend` are used to mix modules into a class, but they work differently: 1. `include`: It is used to mix in module methods as instance methods of a class. When a module is included in a class, all the instance methods of that module become available as instance methods of that class…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, `Enumerable` is a module that provides a set of methods to traverse, search, and manipulate collections of objects such as arrays, hashes, and ranges. It is included in the core Ruby library and can be used with any class that implements the `each` method. By including the `Enumerable` module in a class, you…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

To implement a binary search algorithm in Ruby, you can use the following steps: 1. Define a method that takes an array and a target value as its arguments. 2. Define two variables, `low` and `high`, which represent the lowest and highest indices of the array. 3. Use a `while` loop to repeat the following steps until…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Here's an example of a Ruby program that generates a random password with a specified length: In this example, we define a generate_password method that takes a length parameter specifying the desired length of the password. We create an array called chars that contains all the possible characters to choose from. It…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Here's an example of a Ruby method that sorts an array of integers using the bubble sort algorithm and displays each step of the sorting process: In this example, we define a bubble_sort method that takes an array of integers as input. We start by printing the original array. Then, we use nested loops to iterate…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

In Ruby, the `tap` method is used to perform operations on an object and then return that same object. It is commonly used for method chaining or to perform a quick check on an object's state. The `tap` method takes a block as an argument, and passes the object to that block as a parameter. The block can then perform…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

Answer preview

Optimizing the performance of a Ruby application can be achieved through several techniques, including: 1. Benchmarking: Identify the parts of the code that are consuming the most time and resources by using benchmarking tools like Ruby's built-in Benchmark module, or third-party tools like the Ruby Prof profiler. 2…

Sign in to view this answer

Mid and senior level answers are included in every paid plan. Sign in to choose a plan, or browse the junior level answers for free.

More practice

Go further with Ruby

Ruby code challenges

10 challenges with answers

Behavioral Questions

10 questions with answers

Cultural Fit Questions

10 questions with answers

Competency-Based Questions

10 questions with answers

Motivational Questions

10 questions with answers

Communication Skills Questions

10 questions with answers

Scenario-Based Questions

10 questions with answers

Problem-Solving and Analytical Questions

10 questions with answers

Ethical and Integrity Questions

10 questions with answers

Industry-Specific Questions

10 questions with answers

Leadership and Management Questions

10 questions with answers

Personal Questions

10 questions with answers

About this topic

Ruby interview questions and answers

This page lists 45 Ruby interview questions with answers, ordered from junior to senior level. Commonly asked questions include "What is Ruby programming language?", "Implement a Ruby class that represents a deck of playing cards, including methods for shuffling, dealing cards, and checking for a winning hand in a game." and "What is the difference between puts and print in Ruby?".

Other frequently asked questions include "Name some operators used in Ruby.", "What is a block in Ruby?" and "Create a Ruby method that takes a string as input and returns the reversed version of the string.". Review each answer and consider how you would adapt it to your own experience.

Practise Ruby in a mock interview

Answer questions one at a time and receive a score with written feedback on each answer.

Start a mock interview

Reviews and comments