C++ Network Programming: Study Questions and Practice Projects
C++ Study Questions#
- What are some common examples of undefined behavior?
- What is memory corruption?
- What are some common causes of it?
- How can you get UB without memory corruption?
- How does UB interact with optimization?
- What is memory corruption?
- What is RAII? How does it differ from garbage collection?
- Why use smart pointers instead of raw pointers?
- What is the STL?
- What is it useful for?
- What are some common STL collections?
- What are some common STL algorithms?
- How do iterators work?
- Why can’t you dereference the
end
iterator?
- What is the difference between “value semantics” and “reference semantics”?
- What is “type erasure”?
- How is
std::function
implemented? - How is
std::any
implemented?- What does
std::any
even do?
- What does
- How is
- Why does an empty struct have a size of 1 and not 0?
- What is
std::atomic
?- How does it differ from
volatile
? - How can it be optimized?
- How does it differ from
- What are the versions of the C++ standard?
- What major features were added in each of them?
- What are the major C++ compilers?
- Under what licensing terms are they available?
C++ Performance#
- What are some common compiler optimizations?
- What are some optimizations a compiler cannot do?
- What are downsides to having the compiler do optimizations?
- Why are virtual function calls slower?
- What parts of a codebase need most optimizing?
- What parts do not?
- Common compiler flags
- What is the difference between
-O2
,-O3
and-Os
? - What is
-g
?- Why is it normally combined with
-O0
?- What does
-O0
do? - How is that different from what
-g
does?
- What does
- Why is it normally combined with
- What is the difference between
- What is the difference between throughput and latency?
Operating System Questions#
- What is the difference between the stack and the heap?
- What is an operating system kernel?
- What are some examples of operating system kernels?
- What is “kernel” or “supervisor” mode?
- What is a monolithic kernel vs a microkernel?
- What is a driver?
- Can they run in usermode?
- When?
- Can they run in usermode?
- What is a system call?
- What is the difference between a blocking and non-blocking system call?
- What is the difference between a process and a thread?
- What are the performance implications?
- Describe different forms of IPC
- What is the difference between brokered and non-brokered IPC?
- What considerations should you take into account when choosing an IPC system?
- Describe virtual memory.
- What is an address space?
- What is memory protection?
- What is paging?
- What is a page fault?
- What does a kernel have to do to implement virtual memory?
- How does a program allocate more memory on the stack?
- How does a program allocate more memory on the heap?
- In userspace?
- What syscalls might it have to make?
- How do memory mapped files work?
- When should you prefer this to
read
andwrite
syscalls?
- When should you prefer this to
- How does shared memory work?
- When should you prefer this to other forms of IPC?
- What is swap?
- What is a TLB?
- What performance implications does it have?
Network Study Questions#
- Explain the layers of the OSI model
- How do they map to Internet-based protocols?
- Explain IP basics
- What is IP?
- What is an IP address?
- What is a subnet?
- What is a non-routable IP address?
- What is localhost?
- When would we use it?
- What is NAT?
- When is it used?
- How does IP relate to link-level protocols?
- Give some examples of link-level protocols.
- Explain CSMA/CD.
- What is MTU?
- Explain Path MTU Discovery, and why it’s important.
- What is ICMP?
- What are 2 command-line utilities that use it?
- Why is it important?
- What is the difference between a hub, a switch, and a router?
- What is the difference between IPv4 and IPv6?
- Explain DNS basics
- What is DNS?
- What are some types of DNS records?
- On Unix
- What is /etc/hosts?
- What is /etc/resolv.conf?
- What sort of things can go wrong if these are configured incorrectly?
- How do you access DNS from your applications?
- What is a VPN?
- Explain the basics of TCP.
- How does TCP implement reliability on top of IP?
- TCP is stream-oriented, UDP is packet-oriented. What does this mean?
- Explain the TCP three-way handshake.
- What are SYN cookies?
- How do TCP acknowledgements work?
- How does TCP handle the lack of negative acknowledgements?
- What is the TCP window size?
- Explain the basics of UDP.
- What are some differences between TCP and UDP?
- Why might you want to use UDP?
- How are UDP broadcasts implemented?
- On Linux, what sort of things can you tune about networking using
sysctl
?- Why might you want to do this?
- Why are heartbeats important?
- Why might they be implemented in user protocols?
- Why is TCP keepalive not enough?
- Why might they be implemented in user protocols?
Network Programming Practice Projects#
- Echo server
- Can test by hand using
netcat
- v1: Accepts single TCP connection, echos all inputs
- v2: Use threading to accept multiple connections, echo each to itself
- v3: Use single-thread
select
orepoll
syscallasync
in Rust- Network reactor/dispatcher library in C++
- Can test by hand using
- Chat server
- Accept multiple connections
- Can test by hand using
netcat
- v1: Send all whole lines (requires buffering) to all clients
- No length restriction
- v2: Handshake to set username
- Make still it still is testable using
netcat
- Server sends username along with messages
- Make still it still is testable using
- File server
- Simple HTTP-like protocol to specify filename of what file to send
- Make sure you sanitize for inputs!
- v1: Serve one static file at a time
- v2: Stream multiple files to multiple clients without using threads
- v3: Support uploads
- Write custom client
- Simple HTTP-like protocol to specify filename of what file to send
- Exchange
- v1: Just exchange connection
- Keep order books
- When new order comes in compatible with old order, make trade
- One security at first, then multiple
- But build multiple into protocol right away
- TCP Protocol:
- Create a custom protocol with CLI client
- Client -> Server
- Orders
- Only GTC limit orders at first
- Quantity
- Security
- Price
- Buy/Sell
- Order ID
- Why is this useful?
- Orders
- Server -> Client
- Order confirmation
- All order information, echoed
- Trade confirmation (when orders match)
- Also indicate whether client was maker or taker
- Order confirmation
- Keep order books
- Add-ons
- Add heartbeats to protocol
- Market data
- UDP broadcast
- Current state of order books
- Drop copy
- Separate TCP records of all trades
- Record trades in file before confirming
- Allow replay of previous days’ trades
- Fees and kickbacks
- Charge takers
- Reimburse makers
- Configurable on by-security basis
- Credit limits
- Advanced order types
- IOC/FOK
- Maker-only orders
- FX-style last look
- SSL support
- v1: Just exchange connection
Subscribe
Find out via e-mail when I make new posts! You can also use RSS (RSS for technical posts only) to subscribe!
Comments
If you want to send me something privately and anonymously, you can use my admonymous to admonish (or praise) me anonymously.
comments powered by Disqus