Bookmarks
Personal bookmark collection, mostly about 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
- The Twelve-Factor App
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