ivanti logo
Ivanti· Staff Software Engineer

Interview Questions at Ivanti for Staff Software Engineer

Posted
11 Apr 2026
179 reads

Summary

I interviewed for a Staff Software Engineer role at Ivanti, went through three rounds covering .NET fundamentals, coding, and system design, but was ultimately not selected.

How it went

Hello, I recently had an interview at Ivanti for Staff Software Engineer on .Net, went through three rounds of interview, and here are the interview questions in case it helps others. Even after clearing all rounds I was told they decided to go with someone else.

Round 1:

Basic .Net questions, then asked to review the following block of code on order processing:

public class OrderProcessor
{
    private readonly IOrderRepository _orderRepository;
    private readonly IPaymentGateway _paymentGateway;
    private readonly IInventoryService _inventoryService;
    private readonly IEmailService _emailService;
public OrderProcessor(IOrderRepository orderRepository, IPaymentGateway paymentGateway, 
                      IInventoryService inventoryService, IEmailService emailService)
{
    _orderRepository = orderRepository;
    _paymentGateway = paymentGateway;
    _inventoryService = inventoryService;
    _emailService = emailService;
}

public async Task<bool> ProcessOrderAsync(Order order)
{
    if (await _inventoryService.CheckAvailabilityAsync(order.Items))
    {
        var paymentResult = await _paymentGateway.ProcessPaymentAsync(order.TotalAmount, order.PaymentDetails);
        if (paymentResult.IsSuccessful)
        {
            _orderRepository.SaveOrderAsync(order);
            _inventoryService.UpdateInventoryAsync(order.Items);
            _emailService.SendOrderConfirmationAsync(order);
            return true;
        }
    }
    return false;
}

}

Then asked to explain how I would write a program for the following:

/*
Given a string s which represents an expression, evaluate this expression and return its value.

The integer division should truncate toward zero.

You may assume that the given expression is always valid. All intermediate results will be in the range of [-2^31, 2^31 - 1].

Note: You are not allowed to use any built-in function which evaluates strings as mathematical expressions, such as eval().

Example 1: Input: s = "6/3+2*2" Output: 7

Example 2: Input: s = " 3/2 " Output: 1

Example 3: Input: s = " 3+5 / 2 " Output: 5

Constraints:

  • s consists of integers and operators ('+', '-', '*', '/') separated by some number of spaces.

  • s represents a valid expression.

  • All the integers in the expression are non-negative integers in the range [0, 2^31 - 1].

  • The answer and any intermediate results are guaranteed to fit in a 32-bit integer. */

Round 2:

Entirely coding round, asked to write the program for the following question and then run it with given samples.

Create a least recently used (LRU) cache and then test it against the following:

private static void TestCache()
{
LRUCache lRUCache = new LRUCache(4);

lRUCache.put(1, 1); // cache is {1=1} lRUCache.Display();

lRUCache.put(2, 2); // cache is {1=1, 2=2} lRUCache.Display();

lRUCache.put(3, 3); // LRU key was 2, evicts key 2, cache is {1=1, 3=3} lRUCache.Display();

lRUCache.put(4, 4); // LRU key was 1, evicts key 1, cache is {4=4, 3=3} lRUCache.Display();

Console.WriteLine("Getting 2:" + lRUCache.get(2)); // return 1

Console.WriteLine("Getting 3: " + lRUCache.get(3)); // returns -1 (not found)

Console.WriteLine("Getting 4: " + lRUCache.get(4)); // return -1 (not found)

Console.WriteLine("Getting 1: " + lRUCache.get(1)); // return 3

lRUCache.put(5, 5); lRUCache.Display(); }

Round 3:

Asked to review a block of code on .Net Core API call and System Design for below:

Functional Requirements:

  • Million of endpoints (laptops and devices)
  • Every 4 hrs Vulnerability data is pushed (JSON) - scan report
  • View it on a dashboard
  • Top 10 vulnerabilities
  • Want to see how many are patched.

Non-Functional:

  • Scalability (<1MB) 1Mil x 4hrs = 0.25M/hr
  • Reliability
  • Durability
  • Cost effective
  • Security

Questions asked (3)

  1. 01

    Evaluate Infix Expression without eval

    Data Structures & Algorithms

    Given a string s which represents an expression, evaluate this expression and return its value.
    
    The integer division should truncate toward zero.
    
    You may assume that the given expression is always valid. 
    All intermediate results will be in the range of [-2^31, 2^31 - 1].
    
    Note: You are not allowed to use any built-in function which evaluates strings
          as mathematical expressions, such as eval().
    
    Example 1:
    Input: s = "6/3+2*2"
    Output: 7
    
    Example 2:
    Input: s = " 3/2 "
    Output: 1
    
    Example 3:
    Input: s = " 3+5 / 2 "
    Output: 5
    
    Constraints:
    - s consists of integers and operators ('+', '-', '*', '/') separated by some number of spaces.
    - s represents a valid expression.
    - All the integers in the expression are non-negative integers in the range [0, 2^31 - 1].
    - The answer and any intermediate results are guaranteed to fit in a 32-bit integer.
    
  2. 02

    Implement LRU Cache

    Data Structures & Algorithms

    Create a least recently used (LRU) cache and then test it against the following sample code:
    
    private static void TestCache()
    {
        LRUCache lRUCache = new LRUCache(4);
    
        lRUCache.put(1, 1); // cache is {1=1}
        lRUCache.Display();
    
        lRUCache.put(2, 2); // cache is {1=1, 2=2}
        lRUCache.Display();
    
        lRUCache.put(3, 3); // LRU key was 2, evicts key 2, cache is {1=1, 3=3}
        lRUCache.Display();
    
        lRUCache.put(4, 4); // LRU key was 1, evicts key 1, cache is {4=4, 3=3}
        lRUCache.Display();
    
        Console.WriteLine("Getting 2:" + lRUCache.get(2));    // return 1
    
        Console.WriteLine("Getting 3: " + lRUCache.get(3));    // returns -1 (not found)
    
        Console.WriteLine("Getting 4: " + lRUCache.get(4));    // return -1 (not found)
    
        Console.WriteLine("Getting 1: " + lRUCache.get(1));    // return 3
    
        lRUCache.put(5, 5);
        lRUCache.Display();
    }
    
  3. 03

    Design Vulnerability Dashboard

    System Design

    Functional Requirements:

    • Million of endpoints (laptops and devices)
    • Every 4 hrs vulnerability data is pushed (JSON) – scan report
    • View it on a dashboard
    • Top 10 vulnerabilities
    • Want to see how many are patched

    Non-Functional Requirements:

    • Scalability (<1MB) 1M x 4hrs = 0.25M/hr
    • Reliability
    • Durability
    • Cost effective
    • Security

Know someone preparing? Send it to them:WhatsAppLinkedInX

Interviewed at Ivanti recently?

Write up your rounds while you still remember the questions. It helps the next person more than you would think.

Share your experience
Discussion 0

Questions for the author, or how your own interview compared.

Join the discussion

Sign in with Google to comment or ask the author a question.

No comments yet

Be the first to share your thoughts and start the discussion!