Site reliability engineer Interview Questions

1K

Site Reliability Engineer interview questions shared by candidates

Top Interview Questions

Sort: Relevance|Popular|Date
LinkedIn
Site Reliability Engineer was asked...15 July 2014

There were two and they both happened during the live-debugging portion of the interview. All of the live debugging questions revolved around a simple website that had something broken in it. You were to fix the brokenness to be able to move on to the next page. In total there were 4 questions, each getting progressively more difficult to debug. The first question was a simple permissions problem on a file being requested by the client. The ownership of the file (a blank text file) was too restrictive, so it was raising an error. You could verify this in the apache web logs. The second error was due to a permission problem too, however this time the file was hidden in a sub directory of the main web site. You could only determine this by looking at the apache configuration file to see that the shtml file was located somewhere else. After that, change the permissions to fix. The third was a head scratcher. The filename in question was raising a 500 error and showing urlencoded characters in the filename in the web log. Looking at the name of the file on disk though, showed nothing out of the ordinary. It turns out that the unicode representations for the characters in the file name are printed in the terminal as english ascii characters. The only way you can tell that this is the case is to open the file and do a search for the filename itself and see if it matches. For example, if the correct filename is called "challenge1.shtml" you can search for that exact string but NOT find the unicode version of it. Once you find the incorrect file name, delete it and type the correct file name (in this case "challenge3.shtml" into the file and the page works. The final question was a segfault occurring in apache. It resulted in no information being returned to the client. You could see this occurring in the apache web logs as well as the Chrome tools. The apache web logs noted that a core file was dumped. This challenge required that you know a little bit about gdb and C programming. Basically, you need to run the core dump through gdb. gdb /path/to/apache /path/to/core/dump It will spew out a lot of stuff. In particular, it mentions that there is something happening in an apache module; mod_rewrite or something...it doesnt really matter. The output also points to the C source file for that module which is, conveniently on disk. Open that file in vi and jump to the line number mentioned in the gdb output (line 1861 or something). There you will see that if the filename matches challenge4.shtml to SIGSEGV; there's your smoke gun. They dont ask you to fix the final challenge, only to explain what the strstr is doing. The error in question basically looks like this if (strstr($r->filename, "challenge4.shtml") != NULL) { SIGSEGV } Just point out to them that, yeah, it's segfaulting when I ask for that file.

11 Answers

FYI, in 2020, this is still relevant.

Relevant in 2021 too.

OP here. Yes, for my interview on site they only asked two

Show More Responses
Booking.com

They gave me the below question to solve in 30 mins. Based on customer research, we know that our guests get confused when they are searching for accommodation and they found multiple hotels with the same name in the same city. To avoid this, we want to create a tool to identify "confusing" cities: cities with at least 3 hotels with the same name. Given a list of tuples (hotel_id, hotel_name, city) return a list of all "confusing" cities. Input: [ {hotel_1234, "Sheraton", "Amsterdam"} , {hotel_1000, "Sheraton", "Buenos Aires"} , {hotel_1001, "Hilton", "Amsterdam"} , {hotel_1002, "Royal Palace", "Bogota"} , {hotel_1003, "Hilton", "Amsterdam"} , {hotel_1004, "Sheraton", "Buenos Aires"} , {hotel_1005, "Sheraton", "Buenos Aires"} ] Output: [ "Buenos Aires" ]

8 Answers

Another approach would be to create a hashtable/dict with key as a tuple (city,hotel name) and value to be the occurrence of the hotel name in that city (count, keep incrementing the count when seen). When the hashtable is created, iterate over items and see whose value >= 3 and return the tuple's/key 1st value Less

def confuse(): hotels = [("hotel_1234", "Sheraton", "Amsterdam") ,("hotel_1000", "Sheraton", "Buenos Aires") ,("hotel_1001", "Hilton", "Amsterdam") ,("hotel_1002", "Royal Palace", "Bogota") ,("hotel_1003", "Hilton", "Amsterdam") ,("hotel_1004", "Sheraton", "Buenos Aires") ,("hotel_1005", "Sheraton", "Buenos Aires"),("hotel_1234", "Sheraton", "Amsterdam")] from collections import defaultdict d = defaultdict(int) for hotel in hotels: d[(hotel[1], hotel[2])] += 1 for k, v in d.items(): if v >= 3: print(k) Less

using golang ---- package main import ( "fmt" ) func main() { input := [][]string{{"hotel_1234", "Sheraton", "Amsterdam"}, {"hotel_1000", "Sheraton", "Buenos Aires"}, {"hotel_1001", "Hilton", "Amsterdam"}, {"hotel_1002", "Royal Palace", "Bogota"}, {"hotel_1003", "Hilton", "Amsterdam"}, {"hotel_1004", "Sheraton", "Buenos Aires"}, {"hotel_1005", "Sheraton", "Buenos Aires"}, } confuse_cities := []string{} Cities := make(map[string]map[string]int) for _, line := range input { if _, ok := Cities[line[2]]; ok { if val, ok2 := Cities[line[2]][line[1]]; ok2 { Cities[line[2]][line[1]] = val + 1 if Cities[line[2]][line[1]] == 3 { confuse_cities = append(confuse_cities, line[2]) } } } else { Cities[line[2]] = map[string]int{} Cities[line[2]][line[1]] = 1 } } fmt.Println(confuse_cities) } Less

Show More Responses
Google

What's 2^32 ?

6 Answers

4 giga

The correct approach is to show that you can break down the problem. 2^32 = 2^10 * 2^10 * 2^10 * 2^2. 2^10 = 2^8 * 2*2 = 256 * 4 ~(roughly) 1000 So: 2^32 ~ 1000 * 1000 * 1000 * 4 = 4,000,000,000 Less

The number that will overflow a variable of type unsigned 32-bit int. const MAX_U32INT = 2^32 -1 Less

Show More Responses
LinkedIn

You need to distribute a terabyte of data from a single server to 10,000 nodes, and then keep that data up to date. It takes several hours to copy the data just to one server. How would you do this so that it didn't take 20,000 hours to update all the servers? Also, how would you make sure that the file wasn't corrupted during the copy?

6 Answers

P2P is the first thing that came to my mind. BitTorrent is a good tool and I believe Twitter or Facebook has developed this kind of distributing tool based on BitTorrent protocol. And I don't believe the 1TB data will be read at the same time. We can write a FUSE module that mount the directory from the central server. When one of the files was read, we can copy it and cache it locally. Less

P2P is the best solution. If P2P is not allowed. We can use broadcast, for example: server1-> server2, then we have 2 sources, server1->server3, server2-server4; then it will take about (time to transfer one copy)*log(10000)= 3*3.32192809489*(time to transfer one copy). For fault tolerance, redundancy or retry. Or deploy a distributed file system so that file can be accessed. Central server solution is like NFS, however, NFS's server could be bottleneck. Less

We can take checksum of the file when it is correct and compare it with the checksum of the same file in future. If both checksum are found to be same then the file isn't corrupted otherwise it is corrupted. Less

Show More Responses
Google

What happens when I type "ps" into a UNIX prompt?

4 Answers

Those are not the answers that they are looking for. You basically answered what happens when you turn your computer on with: "The picture appears on the monitor". A proper answer involves: shell word splitting, searching PATH, loading dynamic libs, argument parsing, syscalls, /proc. If you don't know what ps is doing, it isn't hard to find out. Less

It's a question to check if you understand behind the scenes of a terminal when a command is issued. I would answer it in that way: when I type a command and press enter, the Shell has a command line parser that checks if the text entered is a available command in the PATH or not, if not found it checks the system libs to see if it can find the definition of it, if nothing is found, it throws error ": command not found". In the successful case, where the command is found it loads the binary from the defined path and a system call is executed accordingly to fetch the process data from the OS. Less

see list of all processes

Show More Responses
Google

Find all pairs of 3 in an array that add to n.

4 Answers

Wrote code.

This is what I came up with, probably not the smartest way : #!/usr/bin/env python def sum_to_n(numbers, n): """ Pick the first two numbers in the list first, then add the third one. Return if the sum is equal to n. Then remove the first two, since you are done with them. Do the same thing as long as you have at least 3 elements in the list """ numbers = numbers.split(",") output = [] first = int(numbers[0]) second = int(numbers[1]) while len(numbers) > 2: for item in numbers[2:]: if first + second + int(item) == n: output.append((first, second, item)) numbers.pop(0) numbers.pop(1) first = int(numbers[0]) second = int(numbers[1]) return output numbers = raw_input("Enter a comma separated list of integers:") n = raw_input("Enter an integer:") print sum_to_n(numbers, int(n)) Less

public static void printPairSums(int[] array, int sum) { Arrays.sort(array); // 2 pointeurs int first = 0; int last = array.length - 1; while (first < last) { int s = array[first] + array[last]; if (s == sum) { System.out.println("( "+array[first] + " ," + array[last]+ " )"); ++first; --last; } else { if (s < sum) ++first; else --last; } } } //Exemple public static void main(String[] args) { // TODO Auto-generated method stub int[] myIntArray = new int[]{1,2,3,-1,4,5,-2,7,1}; printPairSums (myIntArray, 3); } Less

Show More Responses
Google

Enumerate the following from 1 to 4, being 1 the fastest to execute and 4 the slowest: - read cpu register - disk seek - context switch - read from main memory

4 Answers

context switch - 3

1 CPU 2 Memory 3 Context switching 4 Disk

context switching is costlier than RAM access. I think we all have read this in those operating system lectures. Less

Show More Responses
Google

Given a string, return true if after jumbling/rearranging the characters of the string will it be a palindrome. and false if not. eg: given string "evlel", it can be rearranged to "level" and thus it is a palindrome, and return true. eg: 1234 cannot be rearranged to become a palindrome hence false.

4 Answers

A palindrome is a word that has the same spelling forward and backwards. “1234” are numbers and cannot be a palindrome. Less

“acrecar” is a palindrome by that definition of the word, “racecar”, “dad”, “pop”, “poop”. These I feel like may be better examples. “454” would be an example of a palindrome that is a number. Less

This solution uses an unordered map to be O(n) #include #include #include int main() { std::unordered_map map; const std::string test = "aabbbaaccc"; for(size_t i = 0; i ::const_iterator it = map.begin(); it != map.end(); ++it) { if (it->second % 2 != 0) { oddNumber++; if (oddNumber > 1) { std::cout << "Not palindrome" << std::endl; return -1; } } } std::cout << "Palindrome" << std::endl; return 0; } Less

Show More Responses
Google

What signal is sent by default in the unix kill command

4 Answers

SIGTERM is the correct answer

or the number 15.

sigkill

Show More Responses
LinkedIn

Q: Write a program which prints out all numbers between 1 and 100. When the program would print out a number exactly divisible by 4, print "Linked" instead. When it would print out a number exactly divisible by 6, print "In" instead. When it would print out a number exactly divisible by both 4 and 6, print "LinkedIn."

3 Answers

Your python skills are just garbage.. here is how is done for i in range(1,101): if i % 4 == 0 and i % 6 == 0: print('LinkedIn') elif i % 6 == 0: print('In') elif i % 4 == 0: print('Linked') Less

standard fizzbuzz algorithm. I answered in python.

for i in range(1,101): a=i if(i%4==0): a='linked' if(i%6==0): a='in' if((i%4==0) and (i%6==0)): a="linkedin" print a Less

Viewing 1 - 10 of 1,493 Interview Questions

See Interview Questions for Similar Jobs