
Results-driven software developer with a Master's degree in Computer Applications and a proven
track record of success in various roles with 6 years of experience. Committed to pushing the
boundaries of technology and seeking opportunities to make a meaningful impact.
Lead Technology
Synechron TechnologiesSenior Java Developer
Shiavnski TechnologiesSenior Java Developer
DelphicSoftware Developer
Assurex e-ConsultantSenior Software Developer
TechbullsFigma

Git
.png)
Jenkins

Shell Script

AWS
.png)
Docker

Maven

IntelliJ

Postman

DBeaver

Workbench

Visual Studio

Visual Studio Code

TOMCAT

Shell Script

AWS

Maven
Snowflake

Postgres

ReactJS

ActiveMQ

MongoDB
.png)
Firebase

Google Maps

Charts.js

Paypal
Could I help you understand more about your background by giving a brief about yourself? Yes. So my name is. I have a total of 7 years of development experience as a full-stack developer. So my journey initially started as a freelance web developer. I worked as a full-time freelancer for the first 4 years. My career involved working across multiple domains, with multiple technologies in the back end and at the front end. So I'm well-versed with Java and Spring Boot. As of now, I've been working with Spring Boot, and microservices for the last 3 years. Earlier to that, I was also working with Spring Boot, and Java. But prior to that, I was also working with Python, PHP, NodeJS, etc. And at the front end, I worked with Angular and React JS framework. However, I'm more comfortable with React JS since the last 3 years. I've been working with React only for building front-end applications. Now, coming back to the projects I've worked on, they are mostly in the Fintech domain. For example, some of the popular ones are tokenization of cards. Apart from that, I've also worked in the insurance domain, which was my latest project. In which, they already had a system, but for them, we helped them replace their dependency for user management, and we implemented the entire user management dependency from scratch. We used Keycloak tenant and started with microservices, using Spring Cloud, API Gateway, and all of the things. I'm well-versed in that. So, as far as technical skills go, from the back-end part, I'm good with Java, Spring Boot. In terms of databases, I've worked with Postgres, MySQL, Oracle, Microsoft SQL Server, and PostgreSQL admin. I'm familiar with tools like AWS CloudWatch, and other tools like JBoss Tools. And from the front-end technology, I'm comfortable with HTML, CSS, some CSS frameworks like Bootstrap and SubCSS. And front-end technologies or frameworks like React. I'm also familiar with NoSQL databases, such as Cassandra and MongoDB. And some caching mechanisms too, like Redis cache and InfiniSpan. In terms of deployment, I'm familiar with Docker, writing Docker images, and Docker Compose to a certain extent. And in terms of AWS, some services like EC2 instances, those kinds of stuff.
Could you add a database microservice system on AWS to be scalable and maintainable. So, depending on how the services and how much payload of data are required, I would simply end up setting up that many AWS EC2 instances. And then load balancing between them. And based on the traffic monitoring system, I would check what kind of load a particular microservice needs. Based on that, I would then scale up or down the application accordingly. Now, I'm not much familiar with the AWS Elastic Beanstalk, but Kubernetes directly supports containerization. And spinning off nodes as per requirements based on the memory threshold. So, if this responsibility is given to me, then in that case, I would look into that part too. In terms of AWS and whatever knowledge I have, I would end up setting up EC2 instances for that. And a load balancer with monitors that would provide me with alerts if my system is being consumed and if my requests start queueing. In that case, then I would trigger up another EC2 instance with the same set of deployments of the application.
My query performance for a Java application using both SQL and NoSQL databases for optimizing query performance, I would use indexes. In both SQL and NoSQL databases.
Strategy to implement zero time deployments for Java-based web services on AWS. Yeah, because about zero downtime deployment, I would have a system where I would have AWS integrated with my version management tool, like GitLab. I would have a runner on it that would automatically build the image, post it on the Docker repository, and then that would directly get deployed to AWS. And if the health checkpoints are correct, in that case, it would remove the earlier notes and end up deploying the application on the nodes with the latest build. So, that is how I would ensure that there's zero downtime by having health check URLs and some endpoints in the health check URL that ensures my newer functionality is working correctly or not. So, that is how I would do it so that the entire application is not replaced initially. First, it gets deployed on a particular node, and then it keeps on replicating, replacing the old versions of deployment with the newer versions if the health checks are getting passed. That is how I would do it.
Could we integrate a cache layer in Spring Boot, implement response time with this screen that is our application? Yeah. We could do that. One of the ways is using Redis cache. So based on the data that is being continuously requested, we would have that stored within the Redis cache server. And, like, instead of fetching the records from the database, we would use the cache. The other part is InfiniSpan. Now InfiniSpan supports it at the database layer 2. So if the records are already present in the InfiniSpan, it checks whether the record is there in the InfiniSpan and whether the record is being updated in the database or not. And if it is not updated, it readily replies with the cached data. And in case if the record is not present in the cache, then it ends up fetching it from the database. And so we have a miss and hit count. Apart from that, we could also configure it to a certain extent to have the records that are being accessed and continuously fetched again and again to avoid fetching them again and again. We could have the expiry time incremented as they're fetched. So based on those strategies, we could implement caching in Spring Boot by using these caching mechanisms.
I'm sorry. I had to drop the call before. How does my transaction management work in a Spring Framework application interacting with SQL. So Spring supports transaction management using the @Transactional annotation. It helps us to specify what should happen, whether we should roll back the transaction in case of exceptions or whether a new transaction should be initiated each time for that particular method called. So in that way, we can manage transactions in Spring Boot. Apart from that, we can also write our own transaction handler by extending certain classes.
The pattern that the class was following is a singleton, which is correct, but it is not thread-safe as multiple threads might end up getting access to this getInstance method, and they might consider the object as null and end up creating different objects of it. So to avoid this issue, we should declare a private static volatile singleton instance. By making it singleton, its visibility will be to all the threads, so the visibility issue will be resolved. Apart from that, this getInstance method also needs to be synchronized. We should have a synchronized block or this entire method can be synchronized to ensure that only one thread gets access within it. That's how I would make it thread-safe. Apart from that, the singleton pattern seemed okay.
I think we put the query in place for now, it will suggest for better error handling. Yeah. Apart from this, we should also have a general exception handler for the exceptions that are not being caught by SQL exceptions. And finally, it seems correct. You could also have this implemented as a try-with-resources block so that we won't need to explicitly close it in the final statement. So that is another way of doing it. Apart from that, the query seems fine, and exception handling also seems okay with a general exception handler.
I would manage transactions like for the student Microsoft Office and Java, especially dealing with eventual consistency. So, based on the saga pattern, I think I could have it implemented in a way such that if a particular transaction or activity fails at a particular microservice, it would trigger a certain set of actions to revert the transactions on other microservices. For example, in case of order placement, if the order were placed but then failed at the payment part, considering these two as different microservices, I would have an event-driven mechanism or a queuing mechanism such that when the payment fails, it would notify the ordering system that the payment has failed, and then this order needs to be canceled or put on hold. I would implement such an implementation either by using fewer API calls between the services with the Spring Gateway, HingeClient DTC, or by having a messaging queue between them. That's how I would manage transactions in microservices, and I would have eventual consistency.
What insights will again from A/B testing. Okay, algebra testing and how would you use that to guide your development decisions on AWS. Word insights would it gain from A/B testing? I am not exactly sure how to answer this question, and how would A/B testing guide my development decisions on AWS. I actually haven't used AWS development tools as such, like Cloud 9. I have exposure to it, but I haven't used it. I'm mostly been doing development in the local environment and then using AWS for UAD deployments or production deployments. So, I'm not very familiar. Like, how would testing A/B testing change my development decisions on AWS.
I successfully applied the dependency inversion principle from the SOLID pattern in a complex system on AWS by declaring interfaces and not the actual implementations. This allowed me to decouple the dependency and make the system more flexible and maintainable. For instance, in the case of encryption and decryption utilities, I used the dependency inversion principle to separate the encryption algorithm from the utility that uses it. I defined an interface for the encryption algorithm and then implemented the actual encryption algorithm in a separate class. This way, whenever I needed to use the encryption utility, I could simply plug in the interface and call the methods defined in it, without having to worry about the actual implementation. This approach also helped me to achieve the single responsibility principle, as each class had a single reason to change. Additionally, the system was open to extension, but closed for modification, which made it easier to add new functionality without affecting the existing code. I also applied the interface segregation principle, which helped to define smaller and more focused interfaces that were easier to understand and use. This way, the parent classes could replace the child classes without degrading their functionality. Overall, I'm aware of the SOLID principles and I tried to follow them while writing the code, which helped to make the system more robust, maintainable, and scalable.