- How JVM handles exceptions: Great level of detail for a reminder of how exception handling works in the jvm.
- An exception is thrown from a method that is guarded by try-catch-finally
- A table for each such method with such a guard is constructed by the jvm
- When an exception is thrown, control passes to a catch block if there is one for the specific exception type
- Whether or not a catch is found, control passes to finally
- When no suitable exception handler is found in the lookup table and after finally, control is passed up the stack to the last frame / method context to repeat a handler search
- When no handler can be found, the thread where the exception occurred it torn down and a stack trace is printed
- Goodbye integers. Hello UUIDv7!: I never thought about the impact of non-sequential primary keys on db performance. (Reads and writes!) Cache locality for keys with random prefixes isn’t great which makes sense. A new uuid standard - v7 - uses unix timestamp as a key prefix rather than randomness.
- How Tailscale works: Tailscale sounds amazing for creating a network over devices that are on different public / private networks! Will have to try it out. :)
- Lessons Learned from Twenty Years of Site Reliability Engineering: Canary all changes, progressive rollouts, and the importance of integration testing are the important takeaways for me here.
- How we improved push processing on GitHub: A large monolithic job that was hard to restart on failure, and slow / unpredictable was broken up and fanned out to multiple pools of workers with separate queues.