profile-pic
Vetted Talent

Dilip Durge

Vetted Talent

Highly experienced, solutions-oriented professional with 13+ years of remarkable background in overseeing all aspect of the Software Development Life Cycle, from extensive analysis and design through execution and maintenance. Proficient in utilizing a wide variety of programs and tools to provide high-quality and cost-effective applications/systems to boost organizational efficiency and productivity. Possess unmatched coding and testing skills to deliver client/business specific programs

  • Role

    Backend Developer

  • Years of Experience

    15.2 years

Skillsets

  • PostgreSQL
  • CSS
  • Microservices
  • AWS
  • JEE
  • JSON
  • MS SQL
  • MySQL
  • Oracle
  • Jenkins
  • Spring
  • IntelliJ IDEA
  • Distributed Systems
  • Kafka
  • OpenText
  • REST
  • Websphere
  • Eclipse
  • Java - 10.0 Years
  • HTML
  • Jenkins
  • Spring Boot - 5.0 Years
  • Hibernate - 6 Years
  • Docker
  • JUnit
  • Mockito
  • JavaScript
  • Git
  • SVN
  • Tomcat
  • XML
  • Git
  • Git
  • HTML

Vetted For

11Skills
  • Roles & Skills
  • Results
  • Details
  • icon-skill_image
    Java LeadAI Screening
  • 67%
    icon-arrow-down
  • Skills assessed :Databricks, Snowflake, Spark framework, Kubernets, Microservices Architecture, Mongo DB, Springboot, AWS, Docker, Java, Kafka
  • Score: 74/110

Professional Summary

15.2Years
  • Jan, 2024 - Present2 yr 5 months

    Back End Developer

  • Apr, 2023 - Nov, 2023 7 months

    Back End Developer

    MSC Munich Strategy Consulting GmbH
  • Aug, 2020 - Mar, 20232 yr 7 months

    Senior Software Developer

    MobCast Innovations
  • Aug, 2010 - Dec, 20111 yr 4 months

    Software Engineer

    Techsphere Technologies
  • Jan, 2012 - Jan, 20175 yr

    Lead Consultant

    Hayagreeva Consulting Private Limited
  • Feb, 2017 - Jul, 20203 yr 5 months

    WCM Interwoven Consultant

    Proximo Tech Soft

Applications & Tools Known

  • icon-tool

    Eclipse

  • icon-tool

    Git

  • icon-tool

    Github

  • icon-tool

    IntelliJ

  • icon-tool

    Linux

  • icon-tool

    Maven

  • icon-tool

    Microsoft Windows

  • icon-tool

    MS Office

  • icon-tool

    MS SQL Server

  • icon-tool

    MySQL

  • icon-tool

    Oracle

  • icon-tool

    SVN

  • icon-tool

    MS Office

  • icon-tool

    MS Office

Work History

15.2Years

Back End Developer

Jan, 2024 - Present2 yr 5 months
    Designed and delivered scalable backend APIs and microservices using Java and Spring Boot. Provided architectural guidance to clients, improving code quality, performance, and delivery efficiency. Mentored development teams on clean code practices, testing strategies, and deployment workflows. Collaborated directly with stakeholders to translate business requirements into technical solutions.

Back End Developer

MSC Munich Strategy Consulting GmbH
Apr, 2023 - Nov, 2023 7 months
    Built a secure authentication and authorization framework using Spring Security. Implemented (i18n) support, enabling multi-language platform usage. Enforced secure coding standards and compliance practices across development workflows. Worked closely with cross-functional teams in a European consulting environment.

Senior Software Developer

MobCast Innovations
Aug, 2020 - Mar, 20232 yr 7 months
    Led development of mission-critical backend services, ensuring scalability and reliability. Designed and implemented microservices-based architectures, improving modularity and maintainability. Optimized application performance, reducing production incidents by 10%. Contributed to system design discussions and mentored junior developers.

WCM Interwoven Consultant

Proximo Tech Soft
Feb, 2017 - Jul, 20203 yr 5 months
    Architected and launched a customer-facing web portal for a telecom client, increasing digital interactions by 15%. Delivered technical training and knowledge-transfer sessions for development and business teams. Managed onsite application releases, improving client satisfaction by 30%.

Lead Consultant

Hayagreeva Consulting Private Limited
Jan, 2012 - Jan, 20175 yr
    Implemented push notification services, driving a 13% increase in customer engagement. Improved system performance by optimizing loading and processing logic, reducing page load times by up to 80%. Played a key role in requirement analysis, solution design, and production support.

Software Engineer

Techsphere Technologies
Aug, 2010 - Dec, 20111 yr 4 months
    Developed an in-house examination system, automating test creation and evaluation. Built core Java applications and optimized database interactions to support enterprise workflows.

Achievements

  • Increased the business by 13% and the Customer retention of the Bank.
  • Implementing the Lazy Loading, which reduce the page size from 4.7 MB to 1.2 MB and page loading time by 1.12 seconds.
  • Resulted in a 10% reduction in errors and improving application performance.
  • Delivered several successful releases, resulting in a 30% increase in positive feedback and a 20% reduction in complaints.
  • Increased the business by 13% and the customers of Bank by implementing the Personalization Push Notifications using Google Firebase Cloud Messaging, IBM Unica Campaign Management with CMS.
  • Client appreciation for implementing Lazy Loading which reduces the page size from 4.7 MBs to 1.2 MBs which reduces the page loading time 1.12 seconds.
  • Got Client and Manager appreciation on developing and implementing Card Comparison module with continuous changes and suggestions within a couple of days.
  • Got Manager appreciation on crafting Wireframes and final HTML within a couple of days and helped to complete the work.

Education

  • Bachelor of Engineering Computer Technology

    Nagpur University (2010)

AI-interview Questions & Answers

Whenever I need to create any system design for any problem, I'm thinking about first analyzing the problem statements. What are the requirements? Basically, how it handles the customers, whether it has a third API. If required a third-party API, it requires the third-party implementations and where it handles the payment gateways and all. So, these are the first steps in thinking about system design. In the initial approach, whenever I'm thinking about the system design, I go with all the necessary requirements regarding the customers it has, whether it's in a vast way or just in a small, you know, small count of customers. And so, all these requirements I gather. I even have discussions with stakeholders to get more understanding about the requirements and the clarity of their requirements. If there are any possibilities to change or something that needs to be implemented or any changes that need to be handled before going for the final requirements. So, I have discussions with the stakeholders and all. After that, I also take some suggestions from the sales team so that I can get a clear picture of what I need to design, what I need to design the solutions. So, these are the initial approaches for me to solve any system design problems.

System process, how would you safeguard against them. Okay. Oh, for out-of-memory errors, you know, I've been mostly in job applications, like the Spring root and microservices. I increase the heap sizing so that it doesn't get any out-of-memory errors. And I also use circuit breakers, bounded thread pools, and connection pools as well. And then, I limit the rate and request throttling, and also memory leak detection. So I need to use any weak references or static collections. And I also check that. And using Kubernetes, so basically, Kubernetes OOM kill safeguards. You know? So it really limits the whatever problems are there. So these are the things I need to take care of while implementing the safeguards to prevent out-of-memory errors.

When deciding between throwing a checked exception, like I exception, versus wrapping it in an unchecked exception, what design consideration should be made? What design consideration should be made when deciding between throwing a checked exception, like I exception, versus wrapping it in an unchecked exception? File processing. Deciding between throwing checked exceptions versus wrapping exceptions, there are some key considerations which I need to think about before this needs to be handled. The some design factors which I need to think about, like, are there some design factors which I need to think about, like, can the caller meaningfully recover? I mean, basically, is it handled forcefully or not. So then, is the failure part of expected business flow? And then, is it a violation of any conditions which are preconditions now? Does the exception belong in the methods of public APIs, contacts or not? And, is it a low-level infrastructure exception, bubbling up to higher levels? So also, the last, but not the least, is the performance critical part. So these are the things which I need to consider. And, as an experienced developer, I'm used to using checked exceptions for recoverable or expected conditions. And, for public file read config, in which the file path and throw exceptions, like illegal access, or any exceptions which we need to handle. It's unchecked, and use unchecked exceptions for program errors, or infrastructure failures, in which wrapping the low-level checked exceptions when they leak abstractions, like data access exceptions. And if I use checked exceptions, then definitely I go with checked exceptions rather than wrapping in runtime.

Okay. What problem can occur in this implementation when processing thousands of messages per second? And how would you redesign it to ensure scalability? Our duplicates processing and handle failures. So this will be class of all the concern here. What problems can occur in this, implementation? What problems can occur in this implementation when processing thousands of messages per seconds? And how would you redesign it to ensure scalability? Avoid duplicates processing and handle failures. As we say, we can solve consumer any topic or the events. Okay. And we could access Okay. For this. So

When designing API in Java, how do you decide whether to use checked or unchecked assertions? Can you give an example of when each is more appropriate? K. When designing the API itself. Okay. So, whenever I design any APIs in Java, the choices between the checked and unchecked exceptions should be contact decisions, and it's not regarding the any coding or something. The checked exception, when we use, basically, the error is recoverable, and the caller can reasonably react, so we can use the checked exceptions. And the failure is known, part of the business flow, and not related to program box or something. And when we want to make it explicit in the metal contract, so like, tools and all. So I will get the checked exceptions. For example, suppose I have an interface for storing any file and in which I used a method which throws, like, suppose I have a file storing interface where I use a class object, method input string, open file in which I provide the system string path, which throws the file not found exception. So this is the example of checked exception. And while using means unchecked exceptions, basically, when the error represents a programming mistake, misuse of the APIs or any invalid state. And the caller cannot meaningfully recover. Basically, it's the forcing try-catch, and you know, it would be very difficult. And it's a system failure you to handle. So these things need to be handled with the unchecked exceptions. For example, like the update user email where the user ID and email are null, then I throw an illegal argument exception. So these are the unchecked exceptions. So the use of checked exceptions is more appropriate while creating any APIs in Java.

What are the key differences between Java seven, Java 21, and Java 22? The back end developers should be aware of when designing modern systems. Okay. Java seven. Actually, before Java eight, there were very few options available for developers. So, basically, there aren't a lot of updates in Java seven, which are used for programming easily. So, you know, because while designing the modern backend system like we have right now, it's crucial to understand the features which are provided in Java. And, I remember when Java seven had a string in switch statements, I think yes, it's in switch statements, try with resources block, and multiple catch and throwing exceptions. And, also, some features are there. And in Java, the Conting Fun features like virtual threads, which you know, introduced basically the use for live web threads managed by the JVM and sequence collections added, in Java 21. Then the record pattern and the type button are also there. And the garbage collection is enhanced in Java 21. In Java 22, I think streams are there, but not sure. Stream gathers and stream gathers or stream Yes, stream gathers out there, which introduced stream gathers in the alternative tool. And then, also, it has the features added in the alternative tool, like, we can add any statements before the calling the super method in construction in a constructor, which provides more flexibility in the construction logic. And, class file API is there. And, like in Python, there are declarations of variables are simple. The same way, I think in Java, unnamed variables are introduced. And, of course, the garbage collection is also implemented in a better way in Java 22. So these are the key differences in Java seven, Java 21, and Java 22, and the systems.

In microservices architecture, what design consideration do you make to ensure scalability and fault tolerance in services that communicate via REST or Kafka? Okay. So, basically, in microservices architecture, the small microservices are there to communicate with the back end and the front end. So whenever we need to design any microservices that communicate via REST or Kafka, The scalability and the fault tolerance are the most critical part. And I focus on mostly resilient patterns, proper abstractions, and operational safeguards rather than just coding the programming and all. So communication, in REST, HTTP, should be simple, synchronous, and easy to deliver. And while using Kafka, it should be asynchronously decoupled and highly scalable and also replicable. So, while considering the scalability, REST uses stateless services. And also, it employs connection pooling and time outs to avoid thread starvation and under heavy load. And we can consider bulk endpoints, one by one request. And we need to implement circuit breakers and rate limiting while using REST. And also, we use cache, basically, the HTTP caching or distributed caching to reduce the load on downstream services. While using Kafka, we need to think about partition topics or the parallelization of these topics. Then, we design the consumer to process events in a parallel manner and also use consumer groups to scale horizontally, then add important consumers or duplications to handle at least once delivery safely. And finally, we need to monitor all the consumer logs to detect any bottleneck causes. So these are the things for scalability and ensuring fault tolerance regarding REST. Basically, the timeouts and retries, circuit breakers, and fallback strategies like return default data if upstream is unavailable. Then the bulk hit pattern, isolated resources, all those new dependencies, and so on. So these are the things with REST and with Kafka, retry mechanisms, queuing, imperative transactional processing, and activation management.

What potential issue could arise with this implementation if very large input streams are given, and how would you optimize it? So, for this, public class Balance Forces. Parenthesis, stack. Just throw me this. Stream check. Okay. Mhmm. For optimization, I'm going with the string builder other than string or string buffer, so that, you know, the concatenation of the repeated symbols or any patterns can be done efficiently. So, I am going with the string builder. And then the stream processing for very large input to process incrementally rather than loading all in a memory. So, I'm going with the string builder. And also, I can use the byte buffer. And also, I can impose the maximum length of the string for the API safety. And these are the keys I need to handle or I need to implement to optimize this issue.

What is the difference between a primary key and a unique key in a relational database? Can a table have more than one of each? Okay. Basically, whenever we talk about relational databases, there are primary keys, and unique keys are there while creating the tables. When we talk about the primary key, it, like, is used for uniquely identifying each row in a table. And it must be unique. And it must not be null. It implicitly creates a clustered index in relational databases. So the primary key is this. For example, if we create a table user, the ID, which needs to be defined as a primary key, so that it is the identifier for every user, and it cannot be null. And while the unique key or unique constraint, we can ensure that any column has unique values, but it is not necessarily the primary identifier. Like, it must be unique, but it can allow one null in the database. Like Oracle and MySQL, it can be multiple per table, and it can be composite, like on multiple columns. For example, the create table user, their ID is a primary key, username is a varchar 100, unique, and email is a varchar 100, unique. So basically, the username and emails are unique. It can be null, but it can be used in different ways. So these are the primary key and unique key integration methods.

Can you explain a situation where I applied a design pattern? Example, singleton factory, or server in microservices. Why did I choose that pattern, and what benefits did it provide? So, basically, while implementing the microservices, I also used the singleton pattern where I remember that we had a situation where we had a configuration service in a microservices ecosystem that reads service level configurations from the database and exposes them to multiple services at runtime. I chose the singleton in this situation. Because we wanted only one instance of the configuration loader per service instance to avoid redundant database calls. And it had to be accessible across different components without creating objects. I'm creating using the Java plus. And whenever I create any config class which is used as a component class to ensure the singleton scope. I used the annotation to add the @Component for that class to ensure the singleton scope by default. In that situation, it reduced the database load because it only switched the required configuration for each service instance. It's a centralized configuration access so that we avoid multiple projects in instantiation exchange. And it also gives us a case of transparency across service models. So I used the singleton pattern.