Interview Questions at Ivanti for Staff Software Engineer

ivanti logo
ivanti
· Staff Software Engineer
April 11, 2026 · 0 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.

Full Experience

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

Interview Questions (3)

1.

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.

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.

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

📣 Found this helpful? Please share it with friends who are preparing for interviews!

Discussion (0)

Share your thoughts and ask questions

Join the Discussion

Sign in with Google to share your thoughts and ask questions

No comments yet

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