12. Commvault

Role

Senior Software Engineer

Profile

C++, DSA, Design Patterns

12.1. Round 1

Date

2024-02-13T11:30:00+0530

# Commvault - Senior Engineer
# Round 1 - 2024-02-13T11:30:00+0530

# Brute force: TC O(n^2), SC O(1)
def _01_subarrays_equal_0s_1s(nums):
    c = 0
    m = {0: 0, 1: 1}
    for i in range(len(nums) - 1):
        for j in range(i, len(nums)):
            m[nums[i]] += 1
        if m[0] == m[1]:
            c += 1
    return c

# Optimized: TC O(n), SC O(1)
def _02_subarrays_equal_0s_1s(nums):
    b = 0, e = 0, c = 0
    m = {0: 0, 1: 1}
    pass

12.2. Round 2

Date

TBD

// CommVault round 2
// generate prime numbers

// mutex
// conditional variables

int print_prime_number()
{
	int i = 0;
	for (;;) {
		if (stop_signal) continue;
		if (is_prime(i)) fprintf(fd, "%d\n", i);
	}
}
}

int update_ui()
{
	sigset_t st;
	sigaction_t stop_signal
}

int main()
{
	update_ui();          // thread 1
	print_prime_number(); // thread 2
}

// async program
int async_print_prime_number()
{
	int i = 0;
	for (;;) {
		if (stop_signal) continue;
		if (is_prime(i)) fprintf(fd, "%d\n", i);
	}
}
}

int async_update_ui()
{
	sigset_t st;
	sigaction_t stop_signal;
	async_pause(async_print_prime_number);
	// after servicing ui action
	async_start(async_print_prime_number);
}

int main()
{
	async_update_ui();          // thread 1
	async_print_prime_number(); // thread 2
}

// conditional variable
std::mutex mx;
std::conditional_variable cv;

static int sd = 0;

int print_odd()
{
	while (1) {
		std::unique_locak<std::mutex> lk(mx);
		cv.wait(lk, []() { return sd % 2 }); // handles spurious wakes
		cout << sd << endl;
		cv.notify_all();
	}
}

int main()
{
std:;
	thread t1(print_odd, nullptr); // thread 1

	while (1) {
		std::unique_locak<std::mutex> lk(mx);
		cv.wait(lk); // handles spurious wakes
		sd++;
		cv.notify_all();
	}

	t1.join();
}