Table of contents

  1. Networking
    1. Books
    2. RFCs
  2. Operating systems
    1. Books
  3. Data structures and algorithms
    1. Books
  4. Distributed systems
    1. Books
  5. Computer architecture
    1. Books
    2. Specifications
  6. Papers
  7. Databases
    1. Books
    2. Notes
    3. Lectures
  8. Compilers
    1. Books



B., H. (1997). Internet Routing Architectures. New Riders Publishing.

P., D. (2019). An Introduction to Computer Networks (1.9.18 ed.).

Tanenbaum, A., & Wetherall, D. (2011). Computer Networks (5th ed.).

Kurose, J., & Ross, K. (2013). Computer Networking: A Top-Down Approach (6th ed.). Pearson.

Grigorik, I. (2013). High-Performance Browser Networking (1st ed.). O’Reilly Media.

Spurgeon, C., & Zimmerman, J. (2014). Ethernet: The Definitive Guide (2nd ed.).

Caesar, M., & Rexford, J. (2005). BGP Routing Policies in ISP Networks. Netwrk. Mag. of Global Internetwkg., 19(6), 5–11.


Sriram, K., & Kumari, W. “A. (2011). Recommendation for Not Using AS_SET and AS_CONFED_SET in BGP. RFC Editor.

Rekhter, Y., Hares, S., & Li, T. (2006). A Border Gateway Protocol 4 (BGP-4). RFC Editor.

Internet Control Message Protocol. (1981). RFC Editor.

An Ethernet Address Resolution Protocol: Or Converting Network Protocol Addresses to 48.bit Ethernet Address for Transmission on Ethernet Hardware. (1982). RFC Editor.

Droms, R. (1997). Dynamic Host Configuration Protocol. IETF. Retrieved from

Reynolds, J. K. (1993). BOOTP Vendor Information Extensions. RFC Editor.

Bootstrap Protocol. (1985). RFC Editor.

Belshe, R., M. Peon, & Thomson, M. (2015). Hypertext Transfer Protocol Version 2 (HTTP/2). RFC Editor.

Hinden, B., & Deering, D. S. E. (1998). Internet Protocol, Version 6 (IPv6) Specification. RFC Editor.

Nielsen, H. F., Mogul, J., Masinter, L. M., Fielding, R. T., Gettys, J., Leach, P. J., & Berners-Lee, T. (1999). Hypertext Transfer Protocol – HTTP/1.1. RFC Editor.

Transmission Control Protocol. (1981). RFC Editor.

User Datagram Protocol. (1980). RFC Editor.

Fielding, R. T., Nottingham, M., & Reschke, J. (2014). Hypertext Transfer Protocol (HTTP/1.1): Caching. RFC Editor.

Fielding, R. T., & Reschke, J. (2014). Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests. RFC Editor.

Nottingham, M. (2010). HTTP Cache-Control Extensions for Stale Content. RFC Editor.

Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocols. (2010). RFC Editor.

Matthews, P., Rosenberg, J., Wing, D., & Mahy, R. (2008). Session Traversal Utilities for NAT (STUN). RFC Editor.

Schulzrinne, H., Casner, S. L., Frederick, R., & Jacobson, V. (2003). RTP: A Transport Protocol for Real-Time Applications. RFC Editor.

Operating systems


Anderson, T., & Dahlin, M. (2012). Operating Systems: Principles and Practice (Version 0.22).

R., L. (2010). Linux Kernel Development (Developer’s Library) (3rd ed.). Addison-Wesley Professional.

Data structures and algorithms


Skiena, S. (2008). The Algorithm Design Manual (2nd ed.). Springer.

Morin, P. (2013). Open Data Structures (1st ed.). AU Press.

Knuth, D. E. (1998). The Art of Computer Programming (Vol. 1). Boston, MA, USA: Addison-Wesley Longman Publishing Co., Inc.

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms (3rd ed.). The MIT Press.

Distributed systems


Tanenbaum, A., & van Steen, M. (2017). Distributed Systems (3.01 ed.). Pearson Education, Inc.

Vogels, W. All Things Distributed. A Word on Scalability - All Things Distributed. Retrieved from

Lamport, L. (1978). Time, Clocks, and the Ordering of Events in a Distributed System. Commun. ACM, 21(7), 558–565.

Fidge, C. J. (1988). Timestamps in message-passing systems that preserve the partial ordering. Proceedings of the 11th Australian Computer Science Conference, 10(1), 56–66.

Brewer, E. (2017). Spanner, TrueTime and the CAP Theorem.

Gifford, D. K. (1979). Weighted voting for replicated data, 150–162.

Brewer, E. (2012). CAP Twelve Years Later: How the ”Rules” Have Changed. Computer, 45(2), 23–29.

Lamport, L. (2001). Paxos Made Simple.

Dean, J., & Ghemawat, S. (2004). MapReduce: Simplified Data Processing on Large Clusters. In OSDI’04: Sixth Symposium on Operating System Design and Implementation (pp. 137–150). San Francisco, CA.

Zaharia, M., Chowdhury, M., Das, T., Dave, A., Ma, J., McCauly, M., … Stoica, I. (2012). Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing. In Presented as part of the 9th USENIX Symposium on Networked Systems Design and Implementation (NSDI 12) (pp. 15–28). San Jose, CA: USENIX. Retrieved from

Terrace, J., & Freedman, M. J. (2009). Object Storage on CRAQ: High-Throughput Chain Replication for Read-Mostly Workloads. In Proceedings of the 2009 Conference on USENIX Annual Technical Conference (p. 11). USA: USENIX Association.

Van Renesse, R., & Schneider, F. (2004). Chain Replication for Supporting High Throughput and Availability. (pp. 91–104).

Lamport, L., Shostak, R. E., & Pease, M. C. (1982). The Byzantine Generals Problem. ACM Trans. Program. Lang. Syst., 4(3), 382–401. Retrieved from

AWS. (2017). Database Caching Strategies Using Redis. Retrieved from

Haber, I. (2016). 15 Reasons to use Redis as an Application Cache. Retrieved from

Haber, I. (2018). Whitepaper: Deploying a Highly Available Distributed Caching Layer on Oracle Cloud Infrastructure using Memcached & Redis. Retrieved from

Hunt, P., Konar, M., Junqueira, F. P., & Reed, B. (2010). ZooKeeper: Wait-Free Coordination for Internet-Scale Systems. Proceedings of the 2010 USENIX Conference on USENIX Annual Technical Conference, 11.

Ongaro, D., & Ousterhout, J. (2014). In Search of an Understandable Consensus Algorithm. In Proceedings of the 2014 USENIX Conference on USENIX Annual Technical Conference (pp. 305–320). USA: USENIX Association.

Netflix. (2019). Open Connect Overview. Retrieved from

Nygren, E., Sitaraman, R. K., & Sun, J. (2010). The Akamai Network: A Platform for High-Performance Internet Applications. SIGOPS Oper. Syst. Rev., 44(3), 2–19.

Pathan, A., & Buyya, R. (2007). A taxonomy and survey of content delivery networks, Technical Report, GRIDS-TR-2007-4, Grid Computing and Distributed Systems Laboratory, The University of Melbourne, Australia. Retrieved from

Salchow, K. (2007). Load balancing 101: Nuts and bolts. White Paper, F5 Networks, Inc.

Papadimitriou, C. H. (1979). The serializability of concurrent database updates. Journal of the ACM (JACM), 26(4), 631–653.

Patterson, D. A., Gibson, G., & Katz, R. H. (1988). A Case for Redundant Arrays of Inexpensive Disks (RAID). In Proceedings of the 1988 ACM SIGMOD International Conference on Management of Data (pp. 109–116). New York, NY, USA: Association for Computing Machinery.

Patterson, D. A., Gibson, G., & Katz, R. H. (1988). A Case for Redundant Arrays of Inexpensive Disks (RAID). SIGMOD Rec., 17(3), 109–116.

Akidau, T., Bradshaw, R., Chambers, C., Chernyak, S., Fernández-Moctezuma, R. J., Lax, R., … Whittle, S. (2015). The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing. Proceedings of the VLDB Endowment, 8, 1792–1803.

Computer architecture


Malvino, A., & Brown, J. (1993). Digital Computer Electronics (3rd ed.).

Hennessy, L., J, & Patterson, A., D. (2017). Computer Organization and Design: The Hardware / Software Interface: ARM Edition.

Hennessy, L., J, & Patterson, A., D. (2018). Computer Organization and Design: The Hardware / Software Interface: RISC-V Edition.

Bryant, E., R, & O’Hallaron, R., D. (2011). Computer Systems: A Programmer’s Perspective (2nd ed.).


IEEE. (2008). IEEE-754, Standard for Floating-Point Arithmetic. IEEE Std 754-2008, 1–58.

The Unicode Standard: Version 13.0 – Core Specification. (2020).

Waterman, A., & Asanovic, K. et al. (2017). The RISC-V Instruction Set Manual Volume II: Privileged Architecture Version 2.2. EECS Department, University of California, Berkeley.


Neumann, J. von. (1945). First Draft of a Report on the EDVAC.

Riasanovsky, N. Understanding RISC-V Calling Convention. Retrieved from

Wawrzynek, J. (2007). CS61c: Introduction to Synchronous Digital Systems. Retrieved from cs61c/resources/sds.pdf

Wawrzynek, J. (2007). CS61c: Representations of Combinational Logic Circuits. Retrieved from cs61c/resources/boolean.pdf



Silberschatz, A., Korth, H. F., & Sudarshan, S. (2020). Database System Concepts, Seventh Edition. McGraw-Hill Book Company. Retrieved from

Silberschatz, A., Korth, H. F., & Sudarshan, S. (2011). Database System Concepts, Sixth Edition. McGraw-Hill Book Company.


Pavlo, A. (2018). Lecture #10: Query Processing. Retrieved from

Pavlo, A. (2018). Lecture #13: Query Optimization. Retrieved from

Pavlo, A. (2018). Lecture #14: Parallel Execution. Retrieved from

Pavlo, A. (2018). Lecture #16: Concurrency Control Theory. Retrieved from

Pavlo, A. (2018). Lecture #17: Two-Phase Locking. Retrieved from

Pavlo, A. (2018). Lecture #19: Timestamp Ordering. Retrieved from

Pavlo, A. (2018). Lecture #20: Logging Schemes. Retrieved from

Pavlo, A. (2018). Lecture #21: Database Recovery. Retrieved from


A, P. (2018). CMU Database Systems - 18 Timestamp Ordering Concurrency Control. Youtube. Retrieved from ### Papers

Pelkonen, T., Franklin, S., Teller, J., Cavallaro, P., Huang, Q., Meza, J., & Veeraraghavan, K. (2015). Gorilla: A fast, scalable, in-memory time series database. Proceedings of the VLDB Endowment, 8(12), 1816–1827.



Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools (2nd Edition). USA: Addison-Wesley Longman Publishing Co., Inc.

Cooper, K. D., & Linda, T. (2012). Engineering a Compiler (2nd ed.). Morgan Kaufmann Publishers.