• The Execution Lifecycle of a Java Application (20 Oct 2022)
    This blog post describes in details what happens when executing a Java application. After reading this post, you will understand the execution lifecycle of a Java application and the activities performed by the JVM during the execution phase.
  • The Dynamic Features of Java (22 Apr 2022)
    The existence of dynamic features built in the language allows Java developers to transform their program executions at runtime dynamically. However, these features in most Java programs are a fundamental problem for static analysis tools that rely on precise call-graph construction. Notably, the GraalVM compiler relies on points-to analysis to perform AOT compilation. This blog post covers the main dynamic features of Java and the reasons why they are still a long-standing issue for researchers and practitioners in program analysis.
  • Inversion of Control and Dependency Injection in Java (12 Apr 2022)
    This blog post explains Inversion of Control and Dependency Injection in Java. These concepts are the backbone of modern enterprise Java frameworks.
  • AOT vs. JIT Compilation in Java (27 Mar 2022)
    AOT compilation, supported by the GraalVM compiler, seems to be the future for Java and the programming languages that compile to JVM bytecode. But what is the difference between compiling source code using a JIT compiler w.r.t using an AOT compiler? This post explains the difference between these two approaches.
  • Encoding, Encryption, Hashing, and Obfuscation in Java (19 Dec 2021)
    The concepts of encoding, encryption, hashing, and obfuscation are often mistakenly confused or taken as similar (which is even worse). Let's clarify this matter and see some Java code examples of practical applications.
  • Design For Microservices! (20 Sep 2021)
    The microservices architecture has gained significant momentum in the last years. Modularity, scalability, and elasticity are some of its essential characteristics. If you have an open-source project, you should consider designing it to be microservices friendly. The market will eventually reward you for that.
  • The Fork/Join Java framework (05 Jun 2021)
    If you are a Java developer, you need to know about the Fork/Join framework. It simplifies parallel programming, hence helping you to forget about manually tweaking your threads.
  • Dynamic Programming (21 Dec 2020)
    All software engineers should be able to understand dynamic programming. I give a curated list of very representative problems and explain their solutions.
  • The Producer-Consumer Pattern in Java Made Easy (28 Jun 2020)
    The BlockingQueue data structure can be used to implement Producer-Consumer pattern. In this guide I explain how.
  • Unix Cmd Hacks (23 May 2020)
    Personal notes of the edX course titled Unix Tools Data, Software and Production Engineering.
  • A Starting Guide to Become a Good Competitive Programmer (13 Dec 2017)
    Insights and tricks that I learned when I was a competitive programmer