# Mohibul Hassan > Personal website for Mohibul Hassan where I share content based on my experiences as an Software Engineer and AI enthusiast Author: Mohibul Hassan Chowdhury Rights: Original writing by Mohibul Hassan Chowdhury. All rights reserved unless a page says otherwise. Canonical site: https://mohibulsblog.netlify.app/ Sitemap: https://mohibulsblog.netlify.app/sitemap.xml RSS: https://mohibulsblog.netlify.app/index.xml Atom: https://mohibulsblog.netlify.app/atom.xml ## Primary Pages - [100DaysOfJava showing in Graph](https://mohibulsblog.netlify.app/java/100daysofjava/graph/) - A map of 100 Java learning posts, connected by reading order, internal references, and shared topics. - [About Me](https://mohibulsblog.netlify.app/about/) - About Mohibul Hassan. This section details what he does & everything else you might want to know about him. - [Blog Posts](https://mohibulsblog.netlify.app/blog/) - Archive of my blog posts arranged chronologicall - [Resume](https://mohibulsblog.netlify.app/resume/) - [Support Mohibul Hassan](https://mohibulsblog.netlify.app/support/) - Support Mohibul Hassan’s writing and software engineering projects. ## Articles - [Day 100: What 100 Days of Java Actually Changed in How I Think About Software](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day100-capstone.md/) (published 2026-03-30) - An honest retrospective on a challenge that did not happen in a clean streak, and on how learning Java slowly turned into learning how systems behave. - [Day 99: Virtual Threads Didn't Kill Event Loops. Here's How Each Works](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day99/) (published 2026-02-13) - After Day 98, I thought virtual threads replaced event loops. Then I opened Netty's source code zero virtual threads. I built both models from scratch to understand when each wins. … - [Why Your Parallel Streams were Leaving CPU Cores Idle (And How to Fix It)](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day100-spliterator/) (published 2025-12-24) - I added .parallel() expecting near-linear speedup on 8 cores. I got 60% CPU utilization. Here's why the default spliterator gets load balancing wrong, and how a 50-line fix pushed … - [Day 98: I Thought Virtual Threads Were Just Green Threads They're Actually Continuations on the Heap](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day98/) (published 2025-12-23) - Deep dive into Java 21 Virtual Threads implementation - from continuations and heap-based stacks to mount/unmount mechanics, pinning problems, and production trade-offs. - [Day 97: Java Concurrency Toolkit Part 3 - Advanced Patterns & Production Readiness](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day97/) (published 2025-12-22) - Advanced Java concurrency - DelayQueue, ReentrantLock, Phaser with debugging techniques, monitoring patterns, and production readiness checklist. - [Day 96: Java Concurrency Toolkit Part 2 - Core Synchronization Patterns](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day96/) (published 2025-12-10) - Master core Java concurrency synchronization - CyclicBarrier, Semaphore, ThreadFactory, and BlockingQueue with production patterns, trade-offs, and real-world examples. - [Day 95: Java Concurrency Toolkit Part 1 - Foundation & Execution Patterns](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day95/) (published 2025-11-21) - Master the foundation of Java concurrency - Executor, ExecutorService, ScheduledExecutorService, Future, CompletableFuture, and CountDownLatch with production patterns, trade-offs, … - [Day 94: Nobody Told Me Java Application Could Start This Fast and The Rabbit hole I explored](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day94/) (published 2025-10-30) - Your Java app takes so much time to start. You've tried everything, or have you? Here's how I cut startup time using techniques you probably haven't tried yet. - [Day 93: Stop Leaking Passwords - Building Java's Answer to PHP's #[SensitiveParameter]](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day93/) (published 2025-10-07) - Building a @Sensitive annotation with annotation processor to mask sensitive data in logs and stack traces - Java's answer to PHP's #[SensitiveParameter] - [Day 92: Building AI Agents with Java 21 and Spring AI - My Learning from the Workshop](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day92/) (published 2025-09-10) - Learn to build intelligent Java AI applications using Spring AI framework. Complete tutorial covering ChatClient, RAG implementation, vector databases, and AWS Bedrock integration … - [Day 91: The Art of Reading Massive Files Without Breaking a Sweat - Memory Mapping in Java 21](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day91/) (published 2025-08-15) - Ever wondered how to process gigabyte-sized files without crashing your JVM? Discover Memory Mapping a file that turn your Java application into a data processing powerhouse. - [Day 90: How I Built a Secret Agent That Infiltrates Any Java Application](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day90/) (published 2025-07-18) - Ever wondered how APM tools like New Relic spy on your Java applications? Learn to build your own secret agent that infiltrates any JVM and monitors method execution times—no … - [Day 89: When Your Singleton Isn't Really a Singleton (And How to Fix It)](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day89/) (published 2025-06-26) - That perfect Singleton you wrote? It's probably creating multiple instances in production—here's why it happens and five bulletproof ways to fix it. - [Day 88: Multilingual Audio Transcription with Gemini 1.5, Vertex AI, and Spring Boot](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day88/) (published 2025-04-29) - Leveraging Google Cloud Vertex AI's Gemini 1.5 for advanced, multilingual audio transcription within a Spring Boot application, including prompt engineering, safety settings … - [Day 87: Java's Environment Variable Paradox: Easy to Read, Impossible to Change?](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day87/) (published 2025-03-26) - Day 87: Java's Environment Variable Paradox: Easy to Read, Impossible to Change? - [Day 86: Building a Secure Java Sandbox with Custom Class Loaders, Process isolation and Java Platform Module System – Executing JAR and .java Files Safely](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day86/) (published 2025-03-12) - Day 86: Building a Secure Java Sandbox with Custom Class Loaders, Process isolation and Java Platform Module System - [Day 85: Idempotent APIs in Java: Concepts, Implementation Strategies, and a Spring Boot File Upload Implementation](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day85/) (published 2025-01-02) - Day 85: Idempotent APIs in Java: Concepts, Implementation Strategies, and a Spring Boot File Upload Implementation - [Day 84: Hot Class Reload in Java – A Webpack HMR-like Experience for Java Developers](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day84/) (published 2024-10-04) - Day 84: Hot Class Reload in Java – A Webpack HMR-like Experience for Java Developers using WatchService and Javax.tools api - [Day 83: Java Object Cloning: Exploring Shallow and Deep Copy Techniques](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day83/) (published 2024-09-14) - Day 83: Java Object Cloning: Exploring Shallow and Deep Copy Techniques - [Day 82: Reflection in Java: Building a Simple DI Container in 100 Lines of Code](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day82/) (published 2024-08-17) - Day 82: Reflection in Java: Building a Simple DI Container in 100 Lines of Code - [Day 81: Creating custom stream operations ex: Slide, Shift, Zip and Fold using Spliterator](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day81/) (published 2024-07-04) - Day 81: Creating custom stream operations ex: Slide, Shift, Zip and Fold using Spliterator - [Day 80: From Concept to Code: Implementing a Dummy Consistent Hashing in Java using TreeMap](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day80/) (published 2024-05-23) - Day 80: From Concept to Code: Implementing a Dummy Consistent Hashing in Java using TreeMap - [Day 79: Did you know that too much print statement can cost you money](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day79/) (published 2024-05-03) - Day 79: Did you know that too much print statement can cost you money - [Day 78: Java 22 - Embracing Safe Memory Allocation Using FFM API - An alternative to Unsafe API](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day78/) (published 2024-04-18) - Day 78: Java 22 - Embracing Safe Memory Allocation Using MemorySegment and Arena API - An alternative to Unsafe API - [Day 77: Explore Something Unsafe : Crafting a Memory allocator using Java Unsafe API](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day77/) (published 2024-03-14) - Explore Something Unsafe : Crafting a Memory allocator using Java Unsafe API - [Day 76: Implementing a dummy Service Oriented Architecture (SOA) service to Understand Java Service Provider Interface (SPI)](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day76/) (published 2024-01-26) - Implementing a dummy Service Oriented Architecture (SOA) service to Understand Java SPI - [Day 75: Java BufferedReader: Do We Know Why We Need To Close It?](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day75/) (published 2024-01-02) - Java Buffered Reader and why we need to close and what will happend if we dont - [Day 74: Java Security: Crafting a toy TLS Server with Java Security API](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day74/) (published 2023-12-12) - Java Security: Crafting a toy TLS Server with Java Security API - [Day 73: Java Security: Safeguarding Data with Encryption and Keys](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day73/) (published 2023-09-11) - Java Security: Safeguarding Data with Encryption and Keys - [Day 72: Can a HashMap Take Null or Empty String as a Key in Java?](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day72/) (published 2023-07-26) - Can a HashMap Take Null or Empty String as a Key in Java? Lets see if it can or not and how does it impact serialization. - [Day 71: Understanding Heap poullion in java and its causes and how to prevent it](https://mohibulsblog.netlify.app/posts/posts/java/100daysofjava/day71/) (published 2023-06-09) - Understanding Heap poullion in java and its causes and how to prevent it. - [Day 70:Diving deep into Array copy- Measuring Array Copy Performance in Java with JMH: A Comparative Analysis of Methods](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day70/) (published 2023-04-15) - Measuring the performance of different array copying methods in Java using JMH - [Day 69 : Unlocking Java Performance Secrets: Harnessing the Power of JMH Microbenchmarking](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day69/) (published 2023-04-05) - Exploring benchmarking harness in Java and how its use to understand performance - [Day 68 : Becoming a memory plumber; A tale of Memory Leak and how to find them ( part 3)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day68/) (published 2023-03-30) - Finding memory leak by analyzing GC and memory dump using VisualVM and Eclipse MAT - [Day 67: Becoming a memory plumber; A tale of Memory Leak and how to find them ( part 2)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day67/) (published 2023-01-21) - Finding memory leak by analyzing GC and memory dump using VisualVM and Eclipse MAT - [Day 66: Becoming a memory plumber; A tale of Memory Leak and how to find them ( part 1)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day66/) (published 2023-01-20) - Finding memory leak by analyzing GC and memory dump using VisualVM and Eclipse MAT - [Day 65: A tale of RMI (Remote Method Invocation) in java](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day65/) (published 2023-01-12) - Understanding how RPC and RMI works in java - [Day 64: Implementing a basic Bloom Filter Using Java BitSet api](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day64/) (published 2022-12-28) - Implementing a basic bloom filter to understand its concepts and usages using Java BitSet api - [Day 63: Alert system for Java OutOfMemory Error ](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day63/) (published 2022-12-14) - Using JMX to write an alert system for Java JVM OutOfMemory Error - [Day 62: Understanding JMX and its architecture ( Agent Level )](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day62/) (published 2022-11-29) - Understanding JMX architecture and how it works. In part 2 will learn about the second layer of JMX - [Day 61: Understanding JMX and its architecture (Management Level) ](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day61/) (published 2022-11-15) - Understanding JMX architecture and how it works. In part 1 will learn about the first layer of JMX - [Day 60: Generating JVM heap dump programmatically ](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day60/) (published 2022-11-11) - Generating Heap dumps programatically by using MBeanServer and PlatformBeans to get Management information from JVM - [Day 59: Understanding Proxy and Dynamic Proxy in Java](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day59/) (published 2022-11-04) - Understanding Proxy and Dynamic Proxy in Java - [Day 58: Mocking void methods using ArgumentCapture and Answering](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day58/) (published 2022-10-23) - Mocking void methods using ArgumentCapture and Answering - [Day 57: All about Random in Java ( Random, SecureRandom,ThreadLocalRandom and SplittableRandom)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day57/) (published 2022-10-13) - Understanding details and compare use cases of Random, ThreadLocalRandom and SecureRandom - [Day 56: Zero length Array and Its use ](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day56/) (published 2022-10-06) - What is zero length Array and why its in java and how its used - [Blue-Green Deployment using DNS](https://mohibulsblog.netlify.app/posts/tutorial/devops/blue-green-release-dns/) (published 2022-10-03) - Blue-Green Deployment using DNS to reduce downtime of production application - [Day 55: Understanding static and instance initializer in java classes and](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day55/) (published 2022-09-26) - Understanding java classe's static and instance initializer - [Git troubleshooting : 6 helpful command with explanations](https://mohibulsblog.netlify.app/posts/tutorial/git/git-troubleshooting-with-helpful-commands/) (published 2022-09-15) - git troubleshooting with helpful commands to revert, stash, split, recover commits - [Day 54: Understanding volatile keyword's use for Multi Threaded program](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day54/) (published 2022-09-01) - Understanding volatile keyword's use in incrementing a double variable and see how it behaves in multi threaded env - [Day 53: Processing Http Request Asynchronously using CompletableFutures](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day53/) (published 2022-08-17) - Using CompletableFuture's execution to process http request asynchronously - [Day 52: Async Processing HttpRequest's using ExecutorCompletionService](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day52/) (published 2022-07-26) - Async Processing HttpRequest's using ExecutorCompletionService - [Day 51: Creating Stream (using StreamSupport API) from Spliterator by converting Iterator to Spliterator](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day51/) (published 2022-05-28) - Creating Stream (using StreamSupport API) from Spliterator by converting Iterator to Spliterator - [Day 50: Marker interface and it's uses](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day50/) (published 2022-05-21) - Marker interface and it's uses - [Day 49: A utility class for Zip and Unzip files using java FileSystem api (Part 2)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day49/) (published 2022-05-06) - Zip and Unzip file using Java FileSystem api - [Day 48: A utility class for Zip and Unzip files using java Zip api (Part 1)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day48/) (published 2022-04-11) - A utility class to zip and unzip files and directories - [Day 47: ThreadMXBean to get information about thread's status, deadlock monitoring and cpu time that the thread got etc.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day47/) (published 2022-03-28) - Using ThreadMXBean get thread execution and monitoring related information for running threads in jvm - [Day 46: Writing a generic and thread safe ObjectPool to enable pooling for any type of class](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day46/) (published 2022-03-16) - Implementing ObjectPool pattern to get any type object pooling - [Day 45: learning about the internals of JVM and JRE (part 3)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day45/) (published 2022-03-01) - learning what is Runtime and Runtime environment and Java Runtime - [Day 44: learning about the internals of JRE and JVM (Part 2)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day44/) (published 2022-02-24) - learning about jvm internals and its architecture - [Day 43: learning about the internals of jre, jvm (Part 1)](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day43/) (published 2022-02-14) - Understating the internals of runtime, execution model, Application level virtualization, jre, jvm and compilation of java program - [Day 42: using custom annotations and check if its a class level or field level annotation](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day42/) (published 2022-02-11) - implementing custom annotations and check if its a class level or field level annotation. - [Day 41: Generating unique id's based on device MAC address and epoch time](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day41/) (published 2022-02-03) - Distributed unique id's generator based on device MAC address and epoch time and supplier - [Day 40: Generator implementation using custom Iterator and Threads. ](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day40/) (published 2022-01-27) - A python like generator implementation using custom Iterator, Thread and ThreadGroup - [Day 39: Local date time to UTC date time and vice versa with respect to timezone and Day light saving](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day39/) (published 2022-01-21) - Converting LocalDateTime to UTC and vice versa with respect to timezone and Day Light saving time. - [Day 38: One of the cases to use check and unchecked exceptions](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day38/) (published 2022-01-05) - Checked exceptions and unchecked exceptions and use case - [Day 37: Feature toggle to enable disable features for paid and unpaid user](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day37/) (published 2022-01-05) - How to enable disable features for paid and unpaid users using feature toggle pattern - [Day 36: Learned about banned dependencies and how to ban transitive dependency in a maven or gradle project](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day36/) (published 2021-12-14) - Using maven-enforcer plugin and gradle constraints to ban already vulnerable libs in maven or gradle project or from any other dependencies as transitive dependencies - [Day 35: Emulating Pair in java using AbstractMap.SimpleEntry<>() and new Object() {} implementation](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day35/) (published 2021-12-06) - Pair behavior in java - [Advent of Code Day 02](https://mohibulsblog.netlify.app/posts/adeventofcode2021/day02/) (published 2021-12-02) - Solutions of Advent of Code 2021 Day02 in Java, Rust and GO - [Day 34: Inspecting JVM runtime memory and processor count with Runtime](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day34/) (published 2021-12-01) - Inspecting JVM runtime memory and available processor count with Runtime.getRuntime(). - [Advent of Code Day 01](https://mohibulsblog.netlify.app/posts/adeventofcode2021/day01/) (published 2021-12-01) - Solutions of Advent of Code 2021 Day 01 in Java, Rust and GO - [Day 33: Getting a programmer joke asynchronously with CompletableFuture, HttpClient, and Jackson](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day33/) (published 2021-11-25) - Getting a programmer joke asynchronously with CompletableFuture, HttpClient, and Jackson. - [Day 32: Using Objects.equals() when values may be null](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day32/) (published 2021-11-17) - Using Objects.equals() when one of the values may be null. - [Day 31: Compressing and decompressing text with Deflater and Inflater](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day31/) (published 2021-11-10) - Compressing and decompressing text with Deflater and Inflater. - [Day 30: Exploring a generator-style approach in Java with Supplier and IntStream](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day30/) (published 2021-11-04) - Exploring a generator-style approach in Java with Supplier and IntStream.generate(). - [Day 29: ParameterizedTest and MethodSource for repeated test inputs](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day29/) (published 2021-10-28) - Using ParameterizedTest and MethodSource to run the same file-presence test with different inputs. - [Day 28: Arrays.asList() and new ArrayList<>() are not the same](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day28/) (published 2021-10-22) - Arrays.asList() and new ArrayList<>() both return lists, but they do not behave the same way. - [Day 27: Implementing a Unix pipe-like class in Java with Function composition](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day27/) (published 2021-10-14) - Implementing a Unix pipe-like class in Java with Function composition. - [Day 26: Writing a method to retry another method execution](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day26/) (published 2021-09-30) - Writing a method to retry another method execution, Using TimerTask's schedule() and scheduleAtFixedRate to check availability - [Day 25: Using a implementation of supplier creating and caching a large file (any Class in this case that will initialize a very large object) lazily and thread-safe.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day25/) (published 2021-09-21) - Using a implementation of supplier creating and caching a large file (any Class in this case that will initialize a very large object) lazily and thread-safe. - [Day 24: Removing nulls from list using Collections.singleton and Objects.isNull](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day24/) (published 2021-09-14) - Removing nulls from list using Collections.singleton and Objects.isNull - [Day 23: TemporalAdjuster ofDateAdjuster implementation and DayOfWeek calculating the next working day with Bangla name.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day23/) (published 2021-09-08) - TemporalAdjuster ofDateAdjuster implementation and DayOfWeek calculating the next working day with Bangla name. - [Day 22: Using stream of streams and flatmapping it to concat multiple streams](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day22/) (published 2021-09-06) - Using stream of streams and flatmapping it to concat multiple streams - [Day 21: Optional.ifPresent and Optional.filter to log and filter the Scheduled Day according to holiday](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day21/) (published 2021-08-31) - Optional.ifPresent and Optional.filter to log and filter the Scheduled Day according to holiday - [Day 20: Some previous post had optional.get() in them which is not a best practice if its not with Optional.isPresent(). better than isPresent is to use orElse(), orElseGet(), orElseThrow()](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day20/) (published 2021-08-20) - Some previous post had optional.get() in them which is not a best practice if its not with Optional.isPresent(). better than isPresent is to use orElse(), orElseGet(), … - [Day 19: Stream.peek to get debug information and log it.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day19/) (published 2021-08-17) - Stream.peek to get debug information and log it. - [Day 18: using Scanner.findAll to get all the download links from a json file.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day18/) (published 2021-08-13) - using Scanner.findAll to get all the download links from a json file. - [Day 17: Unicode decoding side effect. Application throws exception when a comment is removed.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day17/) (published 2021-08-06) - Unicode decoding side effect. Application throws exception when a comment is removed. - [Day 16: Two interface having same signature default method causing to override them.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day16/) (published 2021-08-03) - Two interface having same signature default method causing to override them. - [Day 15: Batching files and moving them using intStream](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day15/) (published 2021-07-27) - Batching files and moving them using intStream - [Day 14: Using stream parallel to add id to file names.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day14/) (published 2021-07-23) - Using stream parallel to add id to file names. - [Day 13: Using Collectors.groupingBy and Collectors.counting to get numbers of file present of a particular type](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day13/) (published 2021-07-19) - Using Collectors.groupingBy and Collectors.counting to get numbers of file present of a particular type - [Day 12: Files.walk() and functional interface to remove file extension from fileNames](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day12/) (published 2021-07-14) - Files.walk() and functional interface to remove file extension from fileNames - [Day 11: Supplier, Consumer functional interface and httpclient to get and output Bitcoin info](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day11/) (published 2021-07-09) - Supplier, Consumer functional interface and httpclient to get and output Bitcoin info - [Day 10: Function is a functional interface that takes an input and gives an output. so functions can be chained.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day10/) (published 2021-07-06) - Function is a functional interface that takes an input and gives an output. so functions can be chained. - [Day 9: Functional interface](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day9/) (published 2021-07-05) - Functional interface - [Day 8: I always liked string interpolation in JS. Now i found out about Javas MessageFormat's format method which lets us in its way use string interpolation.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day8/) (published 2021-07-03) - I always liked string interpolation in JS. Now i found out about Javas MessageFormat's format method which lets us in its way use string interpolation. - [Day 7: Today i found out that string declared with "" are placed in string constant pool while with new keyword its in heap. String.intern() return string if defined in string pool otherwise creates the string and then returns it.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day7/) (published 2021-07-02) - Today i found out that string declared with "" are placed in string constant pool while with new keyword its in heap. String.intern() return string if defined in string pool … - [Day 6: For Loop vs Foreach Loop Performance, and Why My First Benchmark Was Misleading](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day6/) (published 2021-07-01) - A corrected learning note about for-loop and foreach-loop performance, including why the original timing test was not a valid Java benchmark. - [Day 5: Getting stream of char from string.chars()](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day5/) (published 2021-06-30) - Getting stream of char from string.chars() - [Day 4: try with resource helps to close open resources that uses .close() method to close.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day4/) (published 2021-06-29) - try with resource helps to close open resources that uses .close() method to close. - [Day 3: Using Objects.requireNonNullElse() where Optional not being able to be used.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day3/) (published 2021-06-28) - Using Objects.requireNonNullElse() where Optional not being able to be used. - [Day 2: Getting the last element of a Stream.](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day2/) (published 2021-06-27) - Getting the last element of a Stream. - [Day 1: Checking Whether a String Matches One of Several Values](https://mohibulsblog.netlify.app/posts/java/100daysofjava/day1/) (published 2021-06-26) - Checking whether a string matches one of several allowed values in Java. ## Other Collections