Bookmarks
Personal collection of bookmarks, mostly around the topic of software engineering.
Java
-
Project Loom and Structured Concurrency
-
Why a library developer should use abstract class instead of interface
-
Thymeleaf Utility Objects
-
Empirical Study of Usage and Performance of Java Collections
-
The truth about Optional
-
Teeing, a hidden gem in the Java API
-
Brian Goetz: Handling InterruptedException
-
Static vs Dynamic Binding in Java
-
Java Debuggers: A Peek Under the Hood
-
Hamcrest Matchers
-
Compilation Overview
-
Java API Compliance Checker
-
Oracle JRE and JDK Cryptographic Roadmap
-
Awesome Java: A curated list of awesome Java frameworks, libraries and software.
-
Memoizing Functions With Core Java 9
-
Java-Deserialization-Cheat-Sheet
-
JavaMail Frequently Asked Questions
-
Jandex
-
revapi-diff: Report differences between Java APIs
-
japicmp: Compare two JARs
-
JDK API Diff Report Generator
-
SIMD accelerated sorting in Java - how it works and why it was 3x faster
-
Data Oriented Programming in Java
-
5 Mundane Java Performance Tips
-
How to set an ideal thread pool size
-
A Guide to Concurrent Queues in Java
-
The Spring Data findAll Anti-Pattern
-
Problems - A library that implements application/problem+json
-
Lock @Scheduled Tasks With ShedLock and Spring Boot
Java Blogs
-
Can Java microservices be as fast as Go?
-
Building Reusable Mock Modules with Spring Boot
-
The IntelliJ IDEA Blog
-
Grzegorz Piwowarek
-
Nicolai Parlog
-
IBM: Java Blog
-
Oracle: Java Platform Group, Product Management Blog
-
Java Performance Tuning
Kotlin
-
Kotlin Roadmap
-
Kotlin Explicit Inlining At Megamorphic Call-Sites Pays Off In Performance
-
inline, noinline, crossinline — What do they mean?
-
Crash course on the Kotlin compiler
-
Annotation use-site targets
-
Valiktor: Type-safe, powerful and extensible fluent DSL to validate objects in Kotlin
JVM
-
Networking I/O with Virtual Threads - Under the hood
-
JVM Anatomy Quarks
-
The JDK Flight Recorder File Format
-
Create a new JVM instance in a native application via JNI
-
The Java memory model explained
-
Native Memory — The Silent JVM Killer
-
Profiler: Shallow and retained sizes
Performance
-
Java Performance Tuning
-
HotSpot JVM Performance Tuning Guidelines
-
Tricks of the Trade: Tuning JVM Memory for Large-scale Services
-
Using JDK 9 Memory Order Modes
-
JaCoLine - Java Command Line Inspector
-
Why does my Java process consume more memory than Xmx?
-
Large pages and Java
-
Renaissance Suite: A modern benchmark suite for the JVM
-
Containerize your Java applications
Testing
-
How I Write Tests
-
Don’t be lazy, use @Rules
-
JUnit Pioneer - JUnit 5 Extension Pack
-
Consumer Driven Contract Testing
-
ArchUnit - Java architecture testing
-
LogUnit: A Java library for unit-testing logging
Security
-
Common Vulnerability Scoring System Version 3.1 Calculator
-
The Joy of Cryptography
-
DNSLog.cn
-
Canary Tokens
-
Exploiting JNDI Injections in Java
-
The Joy of Cryptography
-
Hash collisions and exploitations
-
How Do You Prove a Secret?
-
AWSome Pentesting Cheatsheet
Software Engineering
-
Optimistic vs. Pessimistic locking
-
Hill Climbing Search vs. Best First Search
-
Hash maps that don’t hate you
-
Let's Build a Regex Engine
-
Reactive programming vs. Reactive systems
-
Goodbye, Clean Code
-
How defensive coding leads to bloat
-
The Fibonacci Sequence as a Functor
-
Carbon: Create and share beautiful images of your source code
-
Hype-Driven Development: Don't Be a Victim!
-
HTTP Feeds
-
Cloud Design Patterns
-
Design Patterns
-
Don't Let the Internet Dupe You, Event Sourcing is Hard
-
The Code Review Pyramid
-
Mermaid: Create diagrams and visualizations using text and code
-
Event Streaming is not Event Sourcing!
-
How do Video Games Stay in Sync? An Intro to the Fascinating Networking of Real Time Games.
-
A Git Origin Story
-
Sorting algorithms visualized
-
The Continuous Delivery Test
-
What happens when you press a key in your terminal?
-
Assessing Legacy Code Using Chesterton’s Fence
-
Delivery Lead Time In Practice
-
6 Docker Compose Best Practices for Dev and Prod
-
Service Mesh Comparison
-
Useful engineering metrics and why velocity is not one of them
-
What is a LSM Tree 🪵?
-
Why JWTs Suck as Session Tokens
-
Bocker - Docker implemented in around 100 lines of bash
-
High Cardinality
-
Always use [closed, open) intervals
-
I/O is no longer the bottleneck
-
BT Protocol Reverse Engineering
-
Self-Signed SSL Certificates / OpenSSL Cheatsheet and Guide
-
The Clean Architecture
-
How to Write a Spelling Corrector
-
GraphQL: From Excitement to Deception
Documentation
Requirements Engineering
-
Part 1: Why Software Requirements In The Real World Are Hard
-
Part 2: Developing Software Requirements, A Case Study
-
What are greenfield and brownfield applications?
Software Engineering Blogs
Software Engineering Tools
-
httpbin - A simple HTTP Request & Response Service
-
Zally: A minimalistic, simple-to-use OpenAPI 2 and 3 linter
-
Markdown for Timelines
-
JSON Visio
-
Kaitai Struct - A new way to develop parsers for binary structures
-
OSINT tools collection
-
https://badssl.com
-
Image Steganography Tool
-
Dead simple wildcard DNS for any IP Address
SQL
-
Use The Index, Luke
-
Do not use OFFSET for pagination
-
How does a relational database execute SQL statements and prepared statements
-
Say NO to Venn Diagrams When Explaining JOINs
-
Draw Entity-Relationship Diagrams
DevOps
-
How to create a custom Jenkins Pipeline DSL
-
Keep a changelog
-
How are docker images built? A look into the Linux overlay file-systems and the OCI specification
-
Book: Site Reliability Engineering - How Google Runs Production Systems
-
Book: The Site Reliability Workbook - Practical Ways to Implement SRE
-
A successful Git branching model
-
Intro To Deployment Strategies: Blue-Green, Canary, And More
-
Error Prone - Static Analysis Tool
JPA/Hibernate
Web
-
Favicon Generator
-
Modern Javascript: Everything you missed over the last 10 years
-
Beautiful CSS box-shadow examples
-
Over 1900 pixel-perfect icons for web design
-
RSS Feed Best Practises
-
The Open Graph protocol
-
No-Class CSS Frameworks
-
Cache your CORS
-
Layout Breakouts with CSS Grid
-
Unicode tools
-
A Practical Guide to CSS Media Queries
Essays
-
Essays on programming I think about a lot
-
What if jobs are not the solution but the problem?
-
Programming Sucks
-
Why it is Important that Software Projects Fail
UX
Hardware
IntelliJ SDK
Design
-
Ligatures in programming fonts: Hell No
-
Lorem ipsum with additional content options
-
Generic placeholder images
-
Faux Code Generator
-
The two types of quality
Career
-
What a great technical resume can do for you
-
How to write an effective developer resume: Advice from a hiring manager
-
Slow Down, Finish Faster
-
The System Design Primer
-
Tech Interview Handbook
-
InterviewBit
-
Full-Stack, Coding & System Design Interview Questions
Career Blogs
Management
-
WorkInProgress kills your progress
-
How to Deliver Constructive Feedback in Difficult Situations
-
Why You Should Repeat Yourself, A Lot
Science
-
How to Show That the Earth Orbits the Sun
-
How to Figure Out the Size of the Moon Yourself
-
The Book of Experiments (PDF)
Life
-
How to Talk about Yourself in the Best Possible Way
-
How to Think for Yourself
-
How to Write Technical Posts (so people will read them)
-
Shift Your Mindset By Saying Less of These 4 Things
-
How To Understand Things
-
How to Get Yourself to Do Things
-
How to stop self-sabotaging your career
-
How to work hard
-
Willingness to look stupid
-
Book Summary: Finish What You Start: The Art of Following Through, Taking Action, Executing, & Self-Discipline
-
How to Ask for Feedback
-
How to tell a compelling story in scientific presentations
-
Putting Ideas Into Words
-
How to explain an idea: a mega post
-
The Logic of Risk Taking
-
103 Bits of Advice I Wish I Had Known
-
A Pragmatic Guide to Getting Things Done
-
Ten Lessons I wish I had been Taught
-
9 Stoic Rules For A Better Life (From Marcus Aurelius)
-
The procrastination cure you don't want to hear
-
Productivity Porn
-
How to present to executives
-
How to turn down “volunteer” (but not really) projects at work
-
Slow Down, Finish Faster