From 315aa55ab73cc8c8b68a20b5f95c59da99a88092 Mon Sep 17 00:00:00 2001 From: Mike Holloway Date: Mon, 28 Jun 2021 21:06:26 -0400 Subject: [PATCH] On branch master Changes to be committed: modified: Questions_Answers.md Markdown adjustments for legibility --- Questions_Answers.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Questions_Answers.md b/Questions_Answers.md index 7d72173..5cdf638 100644 --- a/Questions_Answers.md +++ b/Questions_Answers.md @@ -1,43 +1,43 @@ ## Level 1 Questions - How would you prove the code is correct? +1. How would you prove the code is correct? To prove the code is correct I suppose I could set up a test environment where I could account for all connections and run tests like ssh connections, dhclient or dig (dns) connections, nmap port scans, and then ensure the connections I expect from the tests appear in the program's output. - How would you make this solution better? +2. How would you make this solution better? I'd improve the solution by making the functions more focused on specific tasks, improving how I present the interface of each function to each other to more specifically eliminate type or value errors. I'd also allot more time to complete the task since I wasn't able to find enough before the deadline. - Is it possible for this program to miss a connection? +3. Is it possible for this program to miss a connection? Yes, if the connection is brief enough so as not to last more than 10 seconds and thereby be missed by the most recent read of the /proc/net/tcp file - If you weren't following these requirements, how would you solve the problem of logging every new connection? +4. If you weren't following these requirements, how would you solve the problem of logging every new connection? I would likely find a solution that leverages inotify to detect any change to the file and then read it, rather than polling it every 10 seconds. ## Level 2 Questions - Why did you choose 'x' to write the build automation? +1. Why did you choose 'x' to write the build automation? I would simply choose bash, as it's what I'm most familiar with and it can reliably use the go build tools as well as invoke testing systems like kvm/qemu, docker/podman and the like. - Is there anything else you would test if you had more time? +2. Is there anything else you would test if you had more time? If I had more time I'd spend it fleshing out my testing as outlined above and doing a more thorough job of structuring my data in the way that I've modeled it in my head - the choice of go definitely consigned me to reading more than writing with the little time I had. Should have gone with bash I think. - What is the most important tool, script, or technique you have for solving +3. What is the most important tool, script, or technique you have for solving problems in production? Explain why this tool/script/technique is the most important. ## Level 3 Questions - If you had to deploy this program to hundreds of servers, what would be your +1. If you had to deploy this program to hundreds of servers, what would be your preferred method and why? I would use ansible and use git to clone, build, and install the script. @@ -45,7 +45,5 @@ troubleshoot in the event that I run into issues and ansible doesn't require a central orchestrator node. It's also the Infrastructure-as-code tool I'm most familiar with. - What is the hardest technical problem or outage you've had to solve in your +2. What is the hardest technical problem or outage you've had to solve in your career? Explain what made it so difficult? - -