Datadog tech screening
Question Details
Sharing the questions I got for Datadog tech screen and the solution I used in the interview. For both the problems the expectation is to run at least one test...
Full Details
Sharing the questions I got for Datadog tech screen and the solution I used in the interview. For both the problems the expectation is to run at least one test case presented in the question. Difficulty level - Easy to Medium.
Overall interview experience: Positive
Interview date: July-2024
Duration: 60 min (10 min intro, 45 min problem solving, 5 min wrap up)
Verdict Pass
Question 1
Given a list of (positive integer) latencies, a number of buckets and bucket width, calculate how frequently each range of latencies occurs
The first bucket always starts at 0. For instance, the ranges for 11 buckets of width 10 are: 0-9, 10-19, 20-29, 30-39, 40-49, 50-59, 60-69, 70-79, 80-89, 90-99, >=100
For example:
latencies = [90, 11, 3, 35, 17, 28, 64, 53, 52, 87, 63, 46, 40, 50, 31, 92, 45, 32, 22, 54, 87, 108, 62, 33, 87, 12, 67, 56, 94, 119, 96, 23, 21, 25, 86, 5, 32, 77, 3, 16, 8, 61, 105, 88, 49, 57, 114, 118, 20, 79, 44, 55, 113, 23, 13, 86, 16, 81, 1, 111, 84, 76, 24, 54, 110, 7, 100, 40, 3, 37, 96, 37, 67, 48, 79, 47, 108, 36, 15, 112, 37, 13, 40, 66, 39, 110, 47, 87, 34, 50, 55, 112, 70, 88, 2, 86, 110, 20, 2, 57]
number_of_buckets = 11
bucket_width = 10
calc_buckets(latencies, number_of_buckets, bucket_width)
0- 9: 9
10-19: 8
20-29: 9
30-39: 11
40-49: 10
50-59: 11
60-69: 7
70-79: 5
80-89: 11
90-99: 5
100+ : 14
*/
class Solution {
int[] calc_buckets(int[] latencies, int number_of_buckets, int bucket_width) {
int[] out = new int[number_of_buckets];
for (int i=0; i<latencies.length; ++i) {
int idx = latencies[i]/bucket_width;
if (idx >= number_of_buckets) {
idx = number_of_buckets-1;
}
out[idx]++;
}
**return** out;
}
public static void main(String[] args) {
int[] latencies = {90, 11, 3, 35, 17, 28, 64, 53, 52, 87, 63, 46, 40, 50, 31, 92, 45, 32, 22, 54, 87, 108, 62, 33, 87, 12, 67, 56, 94, 119, 96, 23, 21, 25, 86, 5, 32, 77, 3, 16, 8, 61, 105, 88, 49, 57, 114, 118, 20, 79, 44, 55, 113, 23, 13, 86, 16, 81, 1, 111, 84, 76, 24, 54, 110, 7, 100, 40, 3, 37, 96, 37, 67, 48, 79, 47, 108, 36, 15, 112, 37, 13, 40, 66, 39, 110, 47, 87, 34, 50, 55, 112, 70, 88, 2, 86, 110, 20, 2, 57};
**Solution** obj = new Solution();
int out[] = obj.calc_buckets(latencies, 11, 10);
for (int i=0; i<out.length; ++i) {
System.out.println(i + " " + out[i]);
}
}
}
Question 2
Given a file system structure representing directories and files,
return the total size of files in the structure. The follow up to this was to find if the given path exists and then provide the size. I didn\'t get chance to correctly implement the follow up but I was able to explain the approach.
My solution to this problem might not be accurate as I had modified it for the follow up which I was not able to complete.
home/
\u251C\u2500\u2500 me/
\u2502 \u251C\u2500\u2500 foo.txt : 416
\u2502 \u251C\u2500\u2500 metrics.txt : 5892
\u2502 \u2514\u2500\u2500 src/
\u2502 \u251C\u2500\u2500 site.html : 6051
\u2502 \u251C\u2500\u2500 site.css : 5892
\u2502 \u2514\u2500\u2500 data.csv : 332789
\u2514\u2500\u2500 you/
\u2514\u2500\u2500 dict.json : 4913364
bin/
\u251C\u2500\u2500 bash: 618416
\u251C\u2500\u2500 cat: 23648
\u2514\u2500\u2500 ls: 38704
var/
\u2514\u2500\u2500 log/
\u251C\u2500\u2500 dmesg : 1783894
\u251C\u2500\u2500 wifi.log : 924818
\u2514\u2500\u2500 httpd/
\u251C\u2500\u2500 access.log : 17881
\u2514\u2500\u2500 access.log.0.gz : 4012
total_size(file_system) -> 8675777
Add a path parameter and return only the size underneath the specified path.
def total_size(file_system, path):
return 0
Expected results:
total_size(file_system, "/")
8675777
total_size(file_system, "/home")
5264404
total_size(file_system, "/bin")
680768
total_size(file_system, "var/")
2730605
total_size(file_system, "/home/me/")
351040
total_size(file_system, "/var/log/wifi.log")
924818
class Solution {
public static abstract class FSEntry {
String name;
private FSEntry(String name) {
this.name = name;
}
}
public static class Directory extends FSEntry {
public List<FSEntry> content;
public Directory(String name, FSEntry... entries) {
super(name);
this.content = List.of(entries);
}
}
public static class File extends FSEntry {
public int size;
public File(String name, int size) {
super(name);
this.size = size;
}
}
public static void main(String[] args) {
Directory root = new Directory(
"",
new Directory(
"home",
new Directory(
"me",
new File("foo.txt", 416),
new File("metrics.txt", 5892),
new Directory(
"src",
new File("site.html", 6051),
new File("site.css", 5892),
new File("data.csv", 332789))),
new Directory("you",
new File("dict.json", 4913364))),
new Directory("bin",
new File("bash", 618416),
new File("cat", 23648),
new File("ls", 38704)),
new Directory(
"var",
new Directory(
"log",
new File("dmesg", 1783894),
new File("wifi.log", 924818),
new Directory(
"httpd",
new File("access.log", 17881),
new File("access.log.0.gz", 4012)))));
System.out.println(getTotalSize(root, "/home"));
}
// Code till here was provided as part of the question setup
public static int getTotalSize(FSEntry entry, String path) {
if(path == null || path.length() == 0) {
**return** 0;
}
if (path.equals("/")) {
**return** getTotalSizeUtil(entry);
}
String paths[] = path.split("/");
FSEntry outEntry = getEntry(paths, 0, entry);
**return** getTotalSizeUtil(outEntry);
}
static FSEntry getEntry(Stack<String> currPath, FSEntry entry) {
if (entry.name == currPath.peek()) {
currPath.pop();
\t\tif (!currPath.isEmpty())
\t\t\treturn getEntry(currPath, entry);
\t\treturn entry;
}
if (entry instanceof Directory) {
Directory currD = (Directory)entry;
for (int i=0; i<currD.content.size(); ++i) {
FSEntry entryL = getEntry(currPath, currD.content.get(i));
if (entryL != null) {
**return** entryL;
}
\t\t}
\t }
**return** null;
}
static int getTotalSizeUtil(FSEntry entry) {
if (entry == null) {
**return** 0;
}
\t
\tint total = 0;
if (entry instanceof File) {
File curr = (File)entry;
total = curr.size;
}
else if (entry instanceof Directory) {
Directory curr = (Directory)entry;
for (int i=0; i<curr.content.size(); ++i) {
total += getTotalSizeUtil(curr.content.get(i));
}
}
**return** total;
}
}
About This Question
This is a reported interview question from a datadog interview for a swe role reported in 2025.
It covers the following topics: Stack, Strings .
Difficulty rating: Easy