Skip to content

Instantly share code, notes, and snippets.

@ganapativs
Last active July 30, 2025 18:32
Show Gist options
  • Save ganapativs/ef29259f1a047e8642b9b7f742aadb89 to your computer and use it in GitHub Desktop.
Save ganapativs/ef29259f1a047e8642b9b7f742aadb89 to your computer and use it in GitHub Desktop.
Platform Engineer: Interview Questions(Basics)

Platform Engineer: Interview Questions(Basics)

Linux Fundamentals

1. What happens internally when you run a command like ls in a shell?

Answer:

The shell parses the command and calls fork() to create a child process.

The child calls exec() to replace its memory with /bin/ls.

The kernel handles file access via syscalls (e.g. open(), readdir(), write()).

Output is written to stdout (file descriptor 1).

// Underlying C system calls
fork();
execvp("ls", args);

Scorecard:

  • 5 – Mentions fork/exec, syscalls, file descriptors
  • 3 – Describes at a high level (command, output)
  • 1 – Can’t explain or confuses core parts

For: Junior, Senior


2. How do fork and exec work in Linux, and why are they important?

Answer:

fork() creates a duplicate process.

exec() replaces the child’s memory space with a new program.

This is how Linux spawns new processes without loading a full new shell.

pid_t pid = fork();
if (pid == 0) execvp(cmd, args);  // child

Scorecard:

  • 5 – Explains fork/exec separation and process model clearly
  • 3 – Describes behavior but not relationship
  • 1 – Confuses their roles or thinks they’re the same

For: Junior, Senior


3. What's the difference between a process and a thread?

Answer:

A process has its own memory space and system resources.

A thread shares the memory and resources of the parent process.

Threads are lightweight and faster to spawn but require synchronization.

# View threads of a process
ps -T -p <PID>

Scorecard:

  • 5 – Clearly distinguishes memory/resource sharing and gives examples
  • 3 – Understands difference but lacks depth
  • 1 – Confuses or interchanges the two

For: Junior, Senior


4. How can you find which process is using a specific port?

Answer:

Use tools like lsof, netstat, or ss.

lsof -i :8080
netstat -tulnp | grep 8080
ss -ltnp | grep 8080

These commands show the PID and process name.

Scorecard:

  • 5 – Knows multiple tools and explains output
  • 3 – Uses one command correctly
  • 1 – Doesn’t know or guesses incorrectly

For: Junior, Senior


5. Explain what a zombie process is and how to clean it up.

Answer:

A zombie is a completed child process not reaped by its parent.

It stays in the process table with a status Z.

You can clean it by killing the parent or ensuring it calls wait().

ps aux | grep Z

Scorecard:

  • 5 – Understands the parent-child relationship and wait()
  • 3 – Defines zombie but not cleanup
  • 1 – Thinks it’s an active or harmful process

For: Junior, Senior


6. How does Linux handle memory allocation (RSS vs Virtual Memory)?

Answer:

RSS (Resident Set Size): Actual physical memory used.

Virtual Memory: Total memory the process can access (may include swapped or unmapped pages).

cat /proc/<pid>/status

Scorecard:

  • 5 – Correctly explains both and uses tools like /proc or smem
  • 3 – Vaguely aware of virtual memory
  • 1 – Confuses the two or guesses

For: Junior, Senior


7. What are inodes and how do they relate to files?

Answer:

An inode stores metadata about a file (owner, permissions, timestamps, etc.).

The filename is just a pointer to an inode.

ls -i file.txt
stat file.txt

Scorecard:

  • 5 – Explains metadata concept and separation from filename
  • 3 – Understands inode basics
  • 1 – Thinks inode is part of filename or doesn’t know

For: Junior, Senior


8. What’s the difference between a hard link and a symbolic link?

Answer:

A hard link points directly to the same inode.

A symlink points to the file path and can break if the target is removed.

ln original.txt hardlink.txt
ln -s original.txt symlink.txt

Scorecard:

  • 5 – Correctly explains and shows both use cases
  • 3 – Understands one type
  • 1 – Thinks they're the same

For: Junior, Senior


9. How would you check disk I/O performance?

Answer:

Use iostat, iotop, or dstat.

iostat -dx 1
iotop
dstat -cdngy

Look for high await, util, or heavy I/O processes.

Scorecard:

  • 5 – Uses appropriate tools and knows metrics
  • 3 – Names tools but not interpretation
  • 1 – No clue or uses wrong tools (e.g. top only)

For: Junior, Senior


10. What happens if you delete a file that is still open by a process?

Answer:

The file is removed from the directory listing, but the data remains on disk until all file descriptors are closed.

lsof | grep deleted

Scorecard:

  • 5 – Explains descriptor-handle concept and cleanup
  • 3 – Partial understanding
  • 1 – Thinks file is immediately wiped

For: Junior, Senior


11. How do file permissions work in Linux? (chmod, chown, etc.)

Answer:

Permissions: r (4), w (2), x (1) — for owner, group, others

chmod 750 script.sh
chown user:group file
ls -l file

Scorecard:

  • 5 – Explains bits, uses examples, understands chown and chmod
  • 3 – Knows how to use commands
  • 1 – No clue or misuses commands

For: Junior, Senior


12. How does the fstab file work and when is it used?

Answer:

/etc/fstab defines filesystems to mount at boot.

Each line contains device, mount point, type, and options.

/dev/sda1 / ext4 defaults 0 1
mount -a  # to test

Scorecard:

  • 5 – Explains format, knows testing and troubleshooting
  • 3 – Knows it's for auto-mounting
  • 1 – Never used it or confuses with mount

For: Junior, Senior


13. What does the fstat() syscall do and how is it different from stat()?

Answer:

  • stat() works with file paths.
  • fstat() works with file descriptors.
struct stat s;
fstat(fd, &s);  // open file

Scorecard:

  • 5 – Understands syscall-level detail
  • 3 – Vaguely explains usage
  • 1 – Doesn’t know or mixes up terms

For: Senior


14. How do you check open files on a system or per-process?

Answer:

lsof              # all open files
lsof -p <PID>     # per-process
ls /proc/<pid>/fd

Useful for file descriptor leaks or log cleanup.

Scorecard:

  • 5 – Uses multiple tools with correct context
  • 3 – Knows lsof
  • 1 – Doesn’t know any method

For: Junior, Senior


15. How do you monitor real-time file system usage (space and inodes)?

Answer:

df -h     # disk usage
df -i     # inode usage
du -sh *  # per-directory usage

Check for inode exhaustion on systems with lots of small files.

Scorecard:

  • 5 – Differentiates inode vs block usage
  • 3 – Knows df but not -i
  • 1 – Uses wrong tools or guesses

For: Junior, Senior


Networking

1. What is the difference between TCP and UDP?

Answer:

  • TCP is connection-oriented, reliable, with built-in error handling and retransmission.
  • UDP is connectionless, faster, but does not guarantee delivery or order.

Used cases:

  • TCP: web, SSH, email
  • UDP: DNS, video streaming, games
# Check listening TCP and UDP ports
ss -tuln

Scorecard:

  • 5 – Explains reliability, ordering, connection model
  • 3 – Describes high-level idea with correct use cases
  • 1 – Confuses them or doesn't know differences

For: Junior, Senior


2. How does DNS resolution work?

Answer:

  1. Check /etc/hosts
  2. Check DNS cache
  3. Query recursive resolver (configured in /etc/resolv.conf)
  4. Resolver queries root → TLD → authoritative DNS
  5. Returns IP to client
dig openai.com
nslookup openai.com

Scorecard:

  • 5 – Explains resolution chain clearly with tools
  • 3 – Describes recursion or lookup vaguely
  • 1 – Thinks it’s hardcoded or local only

For: Junior, Senior


3. What is a socket and how is it used in networking?

Answer:

A socket is an abstraction for a network endpoint (IP + port). Used in inter-process or remote communication.

# Simple TCP server in Python
import socket
s = socket.socket()
s.bind(('0.0.0.0', 8000))
s.listen()

Scorecard:

  • 5 – Understands socket lifecycle and protocols
  • 3 – Knows basic usage
  • 1 – Doesn’t know or confuses with files

For: Junior, Senior


4. What happens when you curl google.com?

Answer:

  1. DNS resolution
  2. TCP connection handshake
  3. TLS handshake (HTTPS)
  4. HTTP request (GET /)
  5. Server responds → data printed to stdout
curl -v https://google.com

Scorecard:

  • 5 – Mentions DNS, TCP, TLS, HTTP layers
  • 3 – Partial flow described
  • 1 – Just says “it shows a page”

For: Junior, Senior


5. How do you troubleshoot a network issue between two hosts?

Answer:

  1. Ping test (basic connectivity)
  2. traceroute or mtr to find route issues
  3. Check firewall with telnet, nc, or ss
  4. Use tcpdump or wireshark for packet-level issues
ping <host>
traceroute <host>
nc -zv host port

Scorecard:

  • 5 – Uses structured approach with tools
  • 3 – Uses 1–2 tools only
  • 1 – Guesswork or unclear steps

For: Junior, Senior


6. What is MTU and what problems can it cause?

Answer:

MTU (Maximum Transmission Unit) is the largest packet size sent without fragmentation.

Mismatched MTUs can cause dropped packets or degraded performance (esp. in VPNs or tunnels).

ip link | grep mtu
ping -M do -s 1472 <host>

Scorecard:

  • 5 – Knows MTU concept and troubleshooting
  • 3 – Defines MTU, no impact explanation
  • 1 – Doesn’t know or misuses term

For: Senior


Security

1. What’s the difference between authentication and authorization?

Answer:

  • Authentication is verifying identity (e.g., username/password).
  • Authorization is checking if the authenticated user has permission to do something (e.g., access a file).

Think:

  • AuthN → Who are you?
  • AuthZ → What can you do?

Scorecard:

  • 5 – Clearly separates both with real-world analogy or example
  • 3 – Understands both but mixes terminology
  • 1 – Uses the terms interchangeably or incorrectly

For: Junior, Senior


2. How do Linux file permissions contribute to system security?

Answer:

They enforce access control via:

  • Owner, group, others permissions (rwx)
  • Prevent unauthorized access/modification
  • Controlled using chmod, chown, and umask
chmod 640 config.yml
chown root:admin config.yml

Scorecard:

  • 5 – Explains use cases like protecting logs, keys
  • 3 – Understands syntax but not implications
  • 1 – Uses chmod/chown without understanding

For: Junior, Senior


3. How would you secure SSH access on a Linux server?

Answer:

  • Disable root login
  • Use key-based auth (disable password login)
  • Change default port
  • Use fail2ban or rate limiting
  • Restrict by IP using AllowUsers or firewall
# Disable root login
PermitRootLogin no

# Enforce key auth
PasswordAuthentication no

Scorecard:

  • 5 – Covers config, firewall, key management
  • 3 – Lists 1–2 things
  • 1 – Just says "use SSH"

For: Junior, Senior


4. How do you check which services are listening and which ports are open?

Answer:

ss -tuln
netstat -tuln
nmap localhost

ss and netstat show open ports; nmap scans from external or internal point of view.

Scorecard:

  • 5 – Uses right tools and interprets results
  • 3 – Knows one tool, limited understanding
  • 1 – Confuses outbound vs inbound

For: Junior, Senior


5. What is SELinux/AppArmor and how do they enhance security?

Answer:

They are Mandatory Access Control (MAC) systems.

  • SELinux/AppArmor enforce fine-grained access policies beyond standard Unix permissions.
  • Restrict what processes can read/write/execute, regardless of user.
getenforce  # check SELinux status
aa-status   # for AppArmor

Scorecard:

  • 5 – Explains MAC and differences from DAC (file permissions)
  • 3 – Knows they restrict access
  • 1 – Doesn’t know or confuses with firewall

For: Senior


6. How do you securely store secrets in a script or system?

Answer:

  • Never hard-code secrets into source code.
  • Use environment variables, encrypted secrets managers (e.g., AWS Secrets Manager, Vault).
  • Use file permissions or gpg-encrypted files if local.
export DB_PASS=$(aws secretsmanager get-secret-value --secret-id db_pass)

Scorecard:

  • 5 – Understands secret lifecycle and secure practices
  • 3 – Uses env vars or hardcoded with justification
  • 1 – Admits to hardcoding or storing in Git

For: Junior, Senior


Scripting (Python / Shell)

1. How would you write a shell script to monitor disk space and alert if usage > 80%?

Answer:

Use df to check usage and send an alert if over threshold:

#!/bin/bash
THRESHOLD=80
df -h | awk 'NR>1 {print $5 " " $6}' | while read output; do
  usep=$(echo $output | awk '{ print $1}' | tr -d '%')
  partition=$(echo $output | awk '{ print $2}')
  if [ $usep -ge $THRESHOLD ]; then
    echo "Running out of space on $partition ($usep%)"
  fi
done

Scorecard:

  • 5 – Dynamic partitions, parameterized threshold, alert logic
  • 3 – Hardcoded logic, partial check
  • 1 – Doesn’t know df or how to parse it

For: Junior, Senior


2. How does Python handle exception handling and why is it important?

Answer:

Use try-except blocks to handle predictable errors and prevent crashes.

try:
    value = int(input("Enter number: "))
except ValueError:
    print("Invalid input.")

This avoids program termination and allows logging or recovery.

Scorecard:

  • 5 – Knows try/except, can explain error boundaries
  • 3 – Can use syntax but unsure when to use
  • 1 – Doesn't use error handling at all

For: Junior, Senior


3. What are some differences between Bash and Python scripting? When would you choose each?

Answer:

  • Bash: Great for orchestration, system commands, glue logic
  • Python: Better for complex logic, data structures, REST APIs
# Bash: quick disk check
df -h

# Python: parse JSON from API
import requests
r = requests.get("https://api.example.com/data")

Scorecard:

  • 5 – Explains purpose-fit choices
  • 3 – Knows one but not when to use the other
  • 1 – Uses everything in one language poorly

For: Junior, Senior


4. How would you parse a large log file in Python to find lines with errors?

Answer:

Read line-by-line for efficiency:

with open("app.log") as f:
    for line in f:
        if "ERROR" in line:
            print(line)

Avoids loading entire file into memory.

Scorecard:

  • 5 – Uses efficient iteration and explains performance
  • 3 – Works but loads whole file
  • 1 – Doesn’t know how to process files

For: Junior, Senior


5. How do you pass arguments to a shell script or Python script?

Answer:

Shell:

echo "Hello $1"
./script.sh World

Python:

import sys
print("Hello", sys.argv[1])

Or better with argparse.

Scorecard:

  • 5 – Uses argparse or positional args clearly
  • 3 – Only hardcodes inputs
  • 1 – Doesn't know how to pass arguments

For: Junior, Senior


6. How would you schedule a script to run every night at midnight?

Answer:

Use cron:

# Edit crontab
crontab -e

# Run at midnight
0 0 * * * /usr/local/bin/myscript.sh >> /var/log/script.log 2>&1

Scorecard:

  • 5 – Correct syntax and redirection
  • 3 – Knows cron but gets time syntax wrong
  • 1 – Doesn’t know cron at all

For: Junior, Senior


Cloud & AWS

1. What is the difference between EC2, S3, and RDS in AWS?

Answer:

  • EC2: Virtual machines (compute)
  • S3: Object storage for files/blobs
  • RDS: Managed relational database (e.g., MySQL, Postgres)

Use case mapping:

  • EC2 → host apps
  • S3 → store backups, media
  • RDS → production-grade SQL DBs without self-managing

Scorecard:

  • 5 – Maps each to real-world use cases
  • 3 – Knows what they are but not when to use
  • 1 – Confuses them or mixes terms

For: Junior, Senior


2. What is an IAM role and how is it different from an IAM user?

Answer:

  • IAM User: Long-lived identity (username/password, access keys)
  • IAM Role: Temporary, assumed by services (EC2, Lambda, etc.)

Roles help implement least privilege without hardcoding keys.

aws sts assume-role --role-arn ...

Scorecard:

  • 5 – Explains temp credentials, use in automation
  • 3 – Knows roles are different but not why
  • 1 – Thinks they’re the same

For: Junior, Senior


3. What is an AWS VPC and why is it important?

Answer:

A VPC (Virtual Private Cloud) is a logically isolated network in AWS.

You define:

  • Subnets (public/private)
  • Route tables
  • Security groups and NACLs
  • Internet gateways/NAT gateways

This gives you control over network access.

Scorecard:

  • 5 – Explains network isolation and control
  • 3 – Understands high-level concept
  • 1 – Thinks it’s just another EC2 type

For: Junior, Senior


4. How would you create an EC2 instance with a specific security group and key pair?

Answer:

Using AWS CLI:

aws ec2 run-instances \
  --image-id ami-1234 \
  --count 1 \
  --instance-type t2.micro \
  --key-name my-key \
  --security-groups my-sec-group

Or via Console with the same inputs.

Scorecard:

  • 5 – CLI and/or Console understanding with right parameters
  • 3 – Knows general steps but not all config
  • 1 – Has never launched one

For: Junior, Senior


5. What’s the difference between a security group and a network ACL in AWS?

Answer:

  • Security Group: Stateful firewall at instance level
  • NACL (Network ACL): Stateless firewall at subnet level

Security group remembers connections; NACLs require inbound/outbound rules.

# Example: allow 22 from IP
aws ec2 authorize-security-group-ingress \
  --group-id sg-123456 --protocol tcp --port 22 --cidr 1.2.3.4/32

Scorecard:

  • 5 – Explains stateful/stateless behavior clearly
  • 3 – Knows they are for access control
  • 1 – Confuses or thinks they’re the same

For: Senior


6. How would you set up an auto-scaling group in AWS?

Answer:

Steps:

  1. Create Launch Template
  2. Define Auto Scaling Group (ASG)
  3. Attach target group or ELB
  4. Set scale-in/out policies based on metrics
# CloudWatch scaling
aws autoscaling put-scaling-policy ...

Scorecard:

  • 5 – Understands full lifecycle and policies
  • 3 – Knows basic scaling concept
  • 1 – Never used ASG or confuses with EC2 instance

For: Senior


Ansible & Infrastructure as Code (IaC)

1. What is Ansible and how does it differ from other tools like Terraform or Chef?

Answer:

  • Ansible is a push-based configuration management tool using YAML playbooks and SSH.
  • Terraform is declarative IaC for provisioning infrastructure.
  • Chef is pull-based, uses Ruby DSL, more complex agent model.

Ansible is agentless and great for config tasks (installing packages, deploying code).

Scorecard:

  • 5 – Explains execution model, use case comparison
  • 3 – Knows basic tool usage but not trade-offs
  • 1 – Doesn’t differentiate or confuses with other tools

For: Junior, Senior


2. Write a simple Ansible playbook to install NGINX on a remote host.

Answer:

- name: Install NGINX
  hosts: web
  become: yes
  tasks:
    - name: Install NGINX package
      apt:
        name: nginx
        state: present

Scorecard:

  • 5 – Correct playbook with privilege escalation
  • 3 – Knows tasks and modules, minor syntax errors
  • 1 – Can’t write or understand basic playbook

For: Junior, Senior


3. What is the difference between roles, tasks, and handlers in Ansible?

Answer:

  • Tasks: Core actions (e.g., install package)
  • Handlers: Triggered on notify (e.g., restart service)
  • Roles: Reusable unit (grouping tasks, handlers, vars, templates)
- name: Reload nginx
  service:
    name: nginx
    state: reloaded
  listen: reload_nginx

Scorecard:

  • 5 – Explains how they compose scalable playbooks
  • 3 – Understands usage but mixes terminology
  • 1 – Uses only tasks or misuses handlers

For: Junior, Senior


4. How would you make an Ansible playbook idempotent?

Answer:

Use modules (like apt, copy, template) that check state before acting. Avoid shell unless necessary.

- name: Ensure NGINX is present
  apt:
    name: nginx
    state: present

Avoids re-running if already installed.

Scorecard:

  • 5 – Understands idempotency and implications
  • 3 – Follows examples but not the principle
  • 1 – Writes commands that always change things

For: Junior, Senior


5. How do you manage secrets or sensitive variables in Ansible?

Answer:

Use Ansible Vault to encrypt variables:

ansible-vault encrypt secrets.yml
ansible-playbook site.yml --ask-vault-pass

Alternatively, use ansible-vault with environment variables or HashiCorp Vault integration.

Scorecard:

  • 5 – Knows vault and production-grade practices
  • 3 – Encrypts secrets manually or insecurely
  • 1 – Hardcodes secrets in playbooks

For: Junior, Senior


6. What is the difference between inventory and host_vars in Ansible?

Answer:

  • Inventory: List of managed hosts
  • host_vars: Variables specific to a given host
  • Can be defined in file-based or dynamic inventory setup.
[web]
web1 ansible_host=192.168.1.10

# host_vars/web1.yml
nginx_port: 8080

Scorecard:

  • 5 – Understands scope and inheritance clearly
  • 3 – Uses inventory but not vars
  • 1 – Doesn’t understand inventory file or variable system

For: Junior, Senior


Advanced Linux Systems – Filesystem, Processes, File Permissions, fstat, fstab, etc.

1. What happens internally when you run a command like ls in a shell?

Answer:

  • The shell parses the command and calls fork() to create a child process.
  • The child process uses exec() to run /bin/ls.
  • The kernel handles syscalls like open(), readdir(), and write() for file listing.
fork();
execvp("ls", args);

Scorecard:

  • 5 – Mentions fork/exec, syscalls, file descriptors
  • 3 – Describes at a high level (command, output)
  • 1 – Can’t explain or confuses core parts

For: Junior, Senior


2. What is the difference between hard and soft links?

Answer:

  • Hard link: Points to the same inode. File continues to exist until all hard links are deleted.
  • Soft link (symlink): Pointer to another file path.
ln file.txt file_hard
ln -s file.txt file_soft

Scorecard:

  • 5 – Explains inode-level concept with examples
  • 3 – Describes symbolic vs hard link only
  • 1 – Doesn’t know or confuses terms

For: Junior, Senior


3. How does Linux handle process IDs and parent-child processes?

Answer:

  • Each process has a unique PID; child processes have a PPID of the parent.
  • ps, pstree show hierarchy.
ps -ef | grep nginx
pstree -p

Scorecard:

  • 5 – Knows about PID, PPID, forking
  • 3 – Understands ps only
  • 1 – Doesn’t know what PPID means

For: Junior, Senior


4. What are file descriptors and how are they used?

Answer:

  • Integers representing open files:

    • 0 = stdin
    • 1 = stdout
    • 2 = stderr
  • Used in redirection and syscalls.

echo "Hello" > out.txt  # uses fd 1

Scorecard:

  • 5 – Understands use in syscalls, redirection
  • 3 – Can list but not apply
  • 1 – Thinks they are "file names"

For: Junior, Senior


5. How do permissions work in Linux (rwx, chmod, chown)?

Answer:

  • Permissions are divided by user/group/other.
  • chmod changes mode, chown changes ownership.
chmod 755 script.sh
chown user:group script.sh

Scorecard:

  • 5 – Knows permission matrix and security impact
  • 3 – Can set perms but doesn't know what they mean
  • 1 – Doesn't use these commands properly

For: Junior, Senior


6. How do fstab and the mount process work?

Answer:

  • /etc/fstab lists filesystems to auto-mount at boot.
  • Fields: device, mount point, fs type, options, dump, pass.
# Example line:
UUID=... /data ext4 defaults 0 2

Use mount -a to test.

Scorecard:

  • 5 – Knows all fields and recovery strategies
  • 3 – Knows where fstab is, not full format
  • 1 – Thinks it's dynamic or for user config only

For: Senior


7. What is the purpose of /proc and how can it be used to debug processes?

Answer:

  • Virtual FS exposing kernel and process info.
  • /proc/<pid>/ contains command, fd, environ, limits, etc.
cat /proc/self/status
ls /proc/$(pidof nginx)/fd

Scorecard:

  • 5 – Can explore running processes, file usage
  • 3 – Knows it exists but unsure of structure
  • 1 – Doesn’t use /proc at all

For: Senior


8. Explain the output of ls -l and what the permission bits mean.

Answer:

-rwxr-xr-- 1 user group 1234 Jul 1 10:00 file
  • rwx: Owner (read/write/execute)
  • r-x: Group (read/execute)
  • r--: Others (read)

Scorecard:

  • 5 – Parses each section correctly
  • 3 – Partial understanding
  • 1 – Misinterprets completely

For: Junior, Senior


9. What does fstat() do in a C program or from the system’s perspective?

Answer:

  • fstat() fetches metadata about a file from a file descriptor (not a path).
  • Used in low-level file inspection.
struct stat st;
fstat(fd, &st);

Scorecard:

  • 5 – Knows when to use over stat(), real use
  • 3 – Knows what it returns
  • 1 – Never heard of it

For: Senior


10. How would you diagnose a file system that is slow or full?

Answer:

  • Use tools like df -h, du -sh *, iotop, dstat, iostat
  • Check inode exhaustion: df -i
  • Look for large logs, deleted files still in use
lsof | grep deleted

Scorecard:

  • 5 – Uses structured tools, knows inode vs space
  • 3 – Looks at space only
  • 1 – Just guesses or reboots

For: Senior


Scorecard Summary Table

Section Question (Short Description) For 5 (Excellent) 3 (Adequate) 1 (Weak)
Linux Internals ls execution process Both Explains fork, exec, syscalls General description Doesn’t understand shell execution
Hard vs Soft links Both Knows inodes, explains persistence Knows command usage Confuses the two
PID and PPID Both Knows process hierarchy Recognizes ps, pstree Doesn’t understand process relationship
File descriptors Both Explains std fds and redirection Lists them, unclear on use Thinks they are filenames
File permissions (chmod, chown) Both Understands permission matrix and use cases Can use commands, unclear on implications Doesn’t know syntax or impact
fstab structure and mounting Senior Knows syntax, fields, mount recovery Knows file location Doesn’t know fstab
Using /proc to debug processes Senior Uses procfs tools, knows structure Knows it exists Never uses it
ls -l permission bits Both Can read and explain each segment Knows basics Misreads bits
fstat() syscall Senior Explains descriptor-based metadata Knows similar to stat() Unaware of fstat()
Filesystem diagnostics Senior Uses multiple tools + inode checks Checks disk usage only Random guesses / reboots

Section Question (Short Description) For 5 (Excellent) 3 (Adequate) 1 (Weak)
Scripting Disk alert script (Shell) Both Param-driven, clean logic Hardcoded, works Doesn’t know df or loops
Python exceptions Both Uses try/except properly Uses, but unclear on need Never uses exception handling
Bash vs Python Both Knows when to use each Knows both but uses one always Misuses both or doesn’t distinguish
Parse logs (Python) Both Line-by-line, memory efficient Works, but inefficient Doesn’t understand file IO
Script arguments Both Uses argparse, handles errors Uses sys.argv or $1 Hardcodes values
Scheduling via cron Both Correct cron syntax, logs output Knows cron exists Doesn’t know or use cron

Section Question (Short Description) For 5 (Excellent) 3 (Adequate) 1 (Weak)
Cloud & AWS EC2, S3, RDS difference Both Matches use cases to services Describes basic function Mixes them up
IAM Role vs User Both Explains roles, automation, no keys Knows concept, unsure on differences Thinks they’re same
What is a VPC Both Explains subnets, routing, security Knows isolated network Confuses with EC2
EC2 with SG + Key Pair Both Knows CLI/console and inputs Knows steps but misses detail Never launched EC2
SG vs NACL Senior Explains stateful/stateless & hierarchy Knows purpose, not internals Doesn’t know NACL or uses only SG
Setup Auto Scaling Group Senior Knows templates, scaling policies Knows concept, not config Never used or confused

Section Question (Short Description) For 5 (Excellent) 3 (Adequate) 1 (Weak)
Ansible & IaC Ansible vs Terraform vs Chef Both Knows tools, models, trade-offs Basic understanding Confuses or unaware
Install NGINX via playbook Both Valid playbook, privilege use Working syntax, some gaps Can't write playbook
Roles, Tasks, Handlers Both Knows structure, when to use Uses tasks only Doesn’t know handlers
Idempotency in Ansible Both Uses proper modules, avoids shell Understands idea Ignores or misuses
Secret management with Vault Both Uses Vault securely, or external tooling Encrypts manually Hardcodes secrets
Inventory vs host_vars Both Understands scope/merge hierarchy Uses inventory but not vars Doesn’t know structure

Platform Engineer Shortlisting Rubric

Category Evaluation Metric Junior Pass Criteria Senior Pass Criteria
Linux Internals File system, processes, syscalls, permissions Understands basics of ls, chmod, ps, links Explains syscalls, fstat, /proc, mount/fstab
Scripting Shell + Python usage, parsing, cron Can write basic scripts, knows cron & args Clean, idiomatic Python/Bash, can optimize logic
Cloud & AWS Core AWS services, VPC, IAM, scaling EC2, S3, IAM User vs Role VPC, SG vs NACL, Auto-scaling, architecture-aware
Ansible & IaC Playbooks, idempotency, secrets, config mgmt Can write small playbooks, understands Vault Modular roles, idempotent, secure and reusable
Depth & Reasoning Problem-solving, clarity, correctness Can follow logic, make tradeoffs in scripts Understands low-level implications, offers better design
Debugging/Diagnosis Commands, logs, filesystem issues Uses df, ps, top, cron Uses iotop, lsof, procfs, inode analysis

🎯 Scoring Strategy

Level Description
5 (Expert) Teaches others, writes optimized and modular code, handles edge cases, offers trade-offs
3 (Solid) Solves the task, some minor gaps or less efficient methods
1 (Weak) Misses key concepts, fumbles basic commands or logic

📊 Rubric Interpretation by Role

Final Score Range (Per Section) Junior Outcome Senior Outcome
Mostly 5s Top-tier Junior, can level up fast Strong hire, may mentor others
Mix of 3s & 5s Good hire with room to grow Acceptable if senior in niche domain
Mostly 3s Junior hire with structured onboarding Senior may need support
Any 1s in core areas Reject or consider for support role Not suitable for senior

Final Decision Template

You can fill this table after each candidate's interview:

Section Score (1–5) Notes
Linux Internals
Scripting
Cloud & AWS
Ansible & IaC
Overall Impression Communication, clarity, decision-making
Hire Decision ✅ Hire / ❌ Reject / 🤔 Hold
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment