
Results-driven software developer with strong background of 7+ years of experience in development
industry across multiple domains. Proficient in Data Structure, Object-Oriented Programming, and Problem-
Solving. Proven track record of delivering high-quality solutions to meet business requirements
Senior Engineer
Blenheim Chalcot Pvt. LTD.Senior Software Engineer
Agiliad Technologies Pvt. LTD.Software Engineer
18th Parallel Pvt. LTD.Android Developer
LBS Software
Postgres

MinIO

MySQL

Gremlin
.png)
Jenkins
.png)
Docker

EKS
.png)
Datadog

Prometheus
.jpg)
Grafana

Apache Kafka

RabbitMQ
.png)
Apache Spark

AWS

Kubernetes

SonarQube
Okay. Uh, firstly, thank you for considering my application. Uh, so I have total 7.3 years of experience. Within that, I have worked into, uh, finance, big data, uh, then ecommerce, uh, in all these domains. So, currently, I'm working with Modular. So, uh, it's more than, like, 2.3 years right now. So it's kind of, like, UK and European based, uh, payment product. Uh, so we are releasing an API to so that user can use that and create, uh, receive, and manage their, uh, transactions. Uh, so within that, like, uh, I'm co working member of the internal portal used by Modular, uh, called as an admin portal. So that portal is specifically used, okay, for handling the, uh, the payments internal, uh, what you can say, reactions, uh, if any of the payments are being, uh, failed, if, uh, we did we wanted to, uh, like, reprocess any of the payment or, like, uh, if there are any issues related to account or customers or beneficiaries that's being handled via the admin portal. Other than that, there are a lot of internal activities which payoffs ops and compliance user will require that has been handled by admin portal. So, uh, within that, like, what is the front end technology we are using? Uh, Spring Boot microservices, uh, we are using. And, uh, in automation, like, we are using to combo framework. And for deployment, uh, we are redeploying the services care Kubernetes services on EKS clusters, uh, on AWS. So I'm working, uh, on all of the technologies right now. Uh, other than this, uh, with my previous organization, I worked with, like, HP to so HP's biggest, uh, program we call as an info site, uh, which is specifically used for server management. So whatever our servers came into, like, HPE's, um, clusters, they can be, uh, they can use the InfoSec portal and for, uh, forget an analytics of, like, other servers, like, uh, if the storage has been, uh, less or if any updates have been required, if any of the server is in risk or any compliances, uh, need to be applied, uh, on any of the server servers. So, uh, this is the kind of portal, uh, uh, HP has been introduced. So within that, we have written a Golang, uh, collectors, which is actually working on 2, like, uh, HP servers and collecting the data on specific period. Then we are, uh, ingesting that data using Java Spring Boot applications. Uh, then, uh, we are applying some rules onto that data by using analytics. And within that, uh, we are using, like, uh, we are using lot of, like, databases like MongoDB, TimescaleDB, uh, Minio. So after that, uh, we are that analyze the data into, like, uh, the portfolio. So in this application, also, I have worked into all the phases, uh, right from, like, go land collectors to the, uh, data analytics. Uh, and previous to this, I have worked into ecommerce platform, uh, where we have deploy we have developed and deployed the, uh, the application based on PHP. This is all about me. Thank you.
Over rollback strategy for a failed transaction in distributed Spring Boot application. Okay. Uh, so handling the rollback, uh, is that there are 2 ways of for handling a distributed transaction. Uh, in microservices, we can use the saga pattern. Within that, like, uh, there are 2 parts, like choreography, either, like, choreography or on, uh, either with orchestration. So right now, uh, in my current projects, we are implementing the orchestration. Um, so, um, I will I will go with that method. So eventually, when you are considering the orchestration, it means, like, uh, the transaction has been managed via the event best. So if, uh, if any of the payment is came, suppose my payment has been came, uh, I need to, uh, suppose one of the payment calls that a has been, uh, created. Uh, firstly, it will be checked, uh, whether the beneficiaries are whether the beneficiaries are, uh, correct or not. Whatever account identifier whatever account related informations, like account number, uh, then IFSC, EMI, CR code, whatever, uh, we are going to check that that should be valid. And after that, we are going to check the balance. Uh, right? And then once all these transactions, and then we can check the, uh, whether that account is blocked or not. And then if if the beneficiary account is not blocked, then we can initiate the, uh, transaction. Right? So, uh, suppose in second step, like, while checking the balance, if the transaction has been failed, or, like, uh, what we can do is that in the next step when, uh, when, uh, all that, uh, all the checks has been passed and the transaction has been failed, uh, when that's sent to to an external, uh, external services. What it mean? Like, uh, if I'm an, uh, customer of ICES here and, uh, the customer and I wanted to make a transaction to, uh, the customer who is located into SBM, uh, who is having an account into, like, SBM, that in that case, uh, the SACI customer needs to be saying that transaction to SBI via some external or some mediator. Right? So suppose my transaction is entered into system, all the checks has been verified, but it's been failed when it's, uh, from the external services. In that case, like, uh, you have already, uh, reduced your amount from, uh, from your side. Right? So, uh, what you can do is, like, what we can do is, like, uh, I mean, whenever the external service request has been, uh, returned back with an error message, you can, uh, create an, uh, uh, Kafka or Kafka or, like, RabbitMQ or even to pass the message, uh, to, uh, to the backward, uh, stages. Like, this this payment has been filled with this error message, and your payment state will be this 1. So whenever, uh, whenever that failure message will be, uh, get to the backwards service, it's going to be record that that the payment has been filled. So I need to, uh, revert that money whatever I have reduced from ICCI Bank. So, uh, the transaction is going to be, uh, what we can say, reverted, and the status of that payment is going to be failed or, like, in error prone state. So whenever user wanted to, uh, reinitiate or re reinitiate that payment, Uh, they can initiate, but, uh, by using the same payment ID and internally if required, then, uh, we can handle the payment accordingly. That last time the payment has been failed due to this external, uh, services. If the external services has been recovered, we can, like, reinitiate that payment.
Uh, what approach would you take to handle the exception elegantly in microservices architecture using Spring Boot services. Okay. What we can do for distributed system handling is that we can create us some correlation ID or some, uh, common ID, which can be used throughout your, uh, entire application process. It means that suppose I'm considering on any of the payment flow, then it's going through lot of lot of many services. But when the payment has been entered into system right into, like, uh, API gateway or, uh, in, like, type, uh, or in Apache server, what we can do is, like, we can create a unique ID for that payment. Like, my name is Vishali. My payment bill is my, uh, account ID is ending with, uh, suppose 1, 2, 3. Vishali 1, 2, 3, and my current date, uh, current date and time. So similarly, we can create a correlation ID so that it will be unique for each and every, uh, transaction, uh, user is going to make. So that, uh, this way, whenever that, uh, whenever that, uh, service that, uh, transaction is going to be came, uh, into into the processing, into multiple services, we can use that same, uh, correlation ID. So yeah.
We will apply the proxy design pattern in Spring Boot application to enhance the functionality of existing class. Let's see. Design pattern Renounce the application of an existing class. Okay. Uh, suppose we are having, okay, suppose we are having some existing class and we wanted to introduce some new functionality, uh, to, uh, the, uh, to the controller class. So in that case, the client class can create a proxy of that controller class, and citizen button. Right. Right. What I can do? Control access. It means controlled access. What we do exactly is that Functionality of existing class. Okay. So what we can do is, like, uh, uh, the proxy, it means you are going to give a controlled access to your clients. So it means that, uh, you are creating a different interface or, like, class, which is going to be, uh, uh, which is going to be, uh, provide only a limited, uh, API of your, uh, of your existing functionality or existing, uh, test existing, uh, APIs or, like, functionality. Right? So, uh, within this, suppose I'm having a student class, uh, so my existing existing APIs are, like, um, uh, get student details, uh, then get marks. Uh, then my new model has been came into that same student class. I wanted to introduce, uh, get course, uh, associated with that student or allocated to that student. So this functionality, we need not to provide to all the, uh, API clients or, like, uh, to all the, uh, consumers. Right? So within that case, we can create a proxy class, uh, and within that, we can only, uh, only introduce, uh, the APIs, which, um, uh, which we wanted to expose to external world or, uh, clients. If we don't want it to expose the functionality, then we can use the proxy class. So it yeah.
Can you the device will be to handle a situation where 2 microservices in Spring Boot attempt to modify a shared resource simultaneously. Synchronized. We can use synchronized. Okay. One is that we can use synchronized lock, within the whatever resource we are having. Suppose I'm having a a file which user wanted to, uh, both of the services wanted to access, in that case, um, I can first, uh, first, uh, the minor or low level thing I can do is that applying the synchronized block onto that resource so that uh, two services are not going to access simultaneously. The second thing is that, uh, we can provide we can provide, uh, time out, uh, time out to, uh, to vetting. It means that if, uh, if one of the microservice is going to try, uh, the resource and resource is not valuable, uh, then we can wait for a specific time amount of time, uh, like, support. I'm I'm trying to access the file system, then maybe, uh, may if it if I'm not able to retrieve it, then I can wait and for maybe 10:20 seconds, uh, maybe 10 second. And then, again, I can retry, uh, till, uh, like, 2, 3 times or maximum rate we can define maximum rate account. And if we would be able to, uh, in that case, I think, uh, um, the whatever, uh, whatever, whatever problems we are going to face, uh, related to, uh, what we can say. Uh, retrieving the resource simultaneously can be avoided.
What step? Could you take refactor the monitoring Java application into Spring Boot Microservices architecture? Okay. So, uh, what I can do is, like, uh, we can divide, uh, our application refactoring into 3 4 to 5 parts. First is that how we are going to be migrate our application. Uh, firstly, uh, uh, firstly, we can consider, like, uh, what are the business requirements. So what what are the important, uh, business units or the modules which business will be required to be worked smoothly so that we can spend, uh, spend, uh, or we can prioritize our task accordingly. So once that is done, we can divide our, uh, our application part into multiple modules, multiple modules, or, uh, the the, uh, the modules which can be, uh, not a modules, functionality we can consider. Okay? That module means the functionality. So based on functionality, we can divide an application. Uh, we can create a specific design document, and then we can plan a, uh, like, migration. Then the and other thing is that, again, if we want any, uh, domain specific, uh, like, knowledge information into the, uh, into the, uh, application, that that can also be considered, uh, while, uh, while partitioning your monolithic into microservices application. So once we have decided, uh, what will be apart, what will be us, uh, like, functionality, we are going to be used into our microservices, then we can came into the next part, uh, that is, I think, uh, databases. Uh, not databases. Maybe we can firstly consider how, uh, if if we are cons if we are divided on monolithic application into 2 to 3 applications. Suppose I'm having 3 applications. So currently, we're having only 1 database, then we can decide, uh, what are the databases we would require, what are what are the tables. And, uh, for if we are using 2 to 3 databases for each and every functionality, then maybe whatever functionality we are having, we can assign a single database to them. Uh, so, uh, this is the second part. And the third part is that how these three services are going to be communicate, or if any of the client request is going to came, they would require the response from 1 or 2 services or, like, all of these 3 services, then how we are going to be aggregate that response and how it's going to be interact. So this is the, uh, third part we need to, uh, uh, or second part we need to understand. So, uh, within that, like, uh, we can use, like, API gateways. Uh, so, uh, API gateway pattern. Also or, like, uh, decomposed up UI pattern. It means that if suppose, uh, uh, those APIs is going to be used, uh, any in any of the, like, uh, UI building activities, then, uh, rather than depending on of, uh, on whole API or, uh, whole API response to create an, uh, entire UI, we can give, uh, whatever whatever UI we wanted to create, that can be divided into sub parts. And you we can call the API responses or we can call the API accordingly so that if any of the services is going to be failed, it won't break entire UI or entire functionality of client. Um, and in API gateway, again, uh, we can use the aggregator pattern so that if if we require, uh, to combine responses from multiple services, then we can, uh, use their use the specific aggregator service, which will be responsible, uh, for controlling all the request and
Uh, snippet. You can spot the issue that might prevent it from responding to the correct issue. To 10 points, then you'll see if it if you can respond the issue that might prevent it from responding to HTTP request post mapping. Response entity, the address, first about item. Response entity dot okay. I think response entity dot okay is going to be provide an issue with status, but we want response entity. So I think whatever returning, uh, returning types we are doing, that is totally incorrect. Uh, post mapping. Yeah. Um, this is what I think. Return type is, like, incorrect.
The following Java code block, an important principle of objective and deep programming is quality. Can you identify the principle and expand the variation? Okay. Private. These are private methods, and these are the public method for setting. Width and height. Okay. Overhead. Set vertical. I think I think dependency inversion functionality is been lacking over here. In set width also, we are, like, we are setting in height. And during a setting height also, we are setting a width. So dependency inversion principle is missing, uh, um, because if we wanted to set a bit, we should have a common functionality of why that we should, I think, initiate the build. And we haven't created. Okay. Fine. Segregation interface segregation, uh, the kind of inter in the interface segregation, what we can do is, like, uh, we should, uh, only implement the required functionality. Right? Uh, so this also this part is also missing over here. Uh, one is dependency version, another is, like, uh, interface segregation. Uh, it's kind of like it's not an interface, uh, but, uh, according to, like, uh, um, what we can say, principle, it's saying that, uh, we should only implement required, uh, like, features or required, uh, functionality rather than complexing the, uh, all implementation of functionality.
What are the techniques, uh, would you imply to streamline the processing of massive datasets using the spring and hibernate while avoiding out of memory errors. Firstly, whenever we are going to be handle a massive data, we should, uh, filter it out correctly or whatever input we are we are getting from, like, client, that should be, uh, uh, correctly filtered, uh, so that we don't need to fetch all the data which is not required and utilize our resources unwantedly. Uh, so this is the first thing. And the second thing is that, uh, whenever we are responding, uh, responding to the client, uh, and it is a huge data, then we should provide it, uh, with the pagination format so that if lot of data is coming, uh, the system will won't crash. They would be able to handle that, uh, in, uh, in page in the page, the manners and appropriately without consuming lot of data. They can, like, uh, they can, uh, uh, handle the less amount of, uh, all the data, but but in required format. Okay. The third thing is that, uh, uh, third thing is that we we should avoid n plus 1, uh, related issues. It means that if, uh, if your dataset is having a new set of children's to, uh, to their parents, Uh, suppose I'm having a student database, uh, student of dataset, uh, so and it will be contents the the courses related details, its fees related details, uh, uh, and all. Right? So if we are if user is requesting all student data, then, uh, that responses don't require, uh, what the what the fees student have paying, whatever the course student has taken. Right? So only it should contain of, um, uh, the screen data, but maybe it can include the references of fees and, like, uh, a fee and, like, uh, the courses so that if, uh, if it required, then they can externally fetch, uh, those records, and it will not create an heavy objects can while retrieving all the student records. So this way, uh, we can avoid and then streamline the processing. Okay. What else we can do is, like, I think connection pools within the database, it also required, um, because that, uh, creating a connection pool for every request will be a very, uh, very, uh, not a cost effective way. So, uh, maybe AWS RDS is providing a good mechanism and for using a connection tool. Similarly, we can use, um, these mechanisms and serve the resources. After that, catching is the yeah. Catching is the important. So if, like, if data is huge or and, uh, if we are aware about if, uh, date a similar kind of the request is, uh, is occurring, uh, repeatedly, uh, is receiving repeatedly, then we can use a catching. We can save that, uh, whatever respond.
Response. Okay. Would the use of reactive programming in Spring Boot be advantages compared to traditional blocking methods? Reactive. I'm not sure about reactive programming, but maybe I feel like, uh, it's kind of like Lambda, uh, and all. So what I really feel is, like, uh, if you are creating a huge, uh, UIs, uh, uh, huge UIs or, like, you're creating a, um, big APIs, then in that case, um, or we are creating a views which is which is, uh, which is capturing all the data, but you wanted to show only small amount of data in UI or, uh, to the client, then in that case, we can use a lambda expressions. So, uh, lambda expressions. Uh, so within that, if, uh, whenever user is going to be, uh, uh, the call, that specific functionality, then only we are going to be, uh, operate on, like, functions. Suppose I'm having a user screen, and we are using and when, uh, uh, supposed student, uh, record screen, and we are having a multiple tabs, like, uh, of the first screen is, like, user details. Right? Uh, the second tab is, like, uh, their fees details. The, uh, the third tab will be, uh, their, uh, courses details. Right? So, uh, whenever we are fetching that records, we don't need to, uh, uh, we don't need to implement all the functionality of all the tabs at one time. What we can do is that whenever user if user is going to be select the second tab that is related to course letter detail set, once that has been clicked, we can load I'll call the APIs, uh, the or the data, uh, which is required for that tab, uh, tab. Right? Uh, rather than creating it, uh, uh, like, on prior basis. Uh, and in, uh, similarly, we can, uh, apply the same logic onto other tabs as well. So, uh, in that case, I think, uh, um, the blocking will be, uh, handed.
If task with improving test decoder for Springwood project, how would you go about prioritizing the test cases for the critical areas? Critical areas. Firstly, uh, if if it is in critical areas, then I will try to firstly, uh, create an integration tests test cases so that within the integration test cases, we are going to be cover an entire scenarios together. So within the integration test, can we can create a, uh, like, test containers, uh, which can be, uh, which can be directly mocking of exact behavior, uh, the user is going to be performed with that that specific functionality. So that with the integration testing, we are going to be covered the entire flow, uh, and then I will, uh, consider the unit testing unit testing part. And the second thing is the and the last thing is that, uh, maybe we can, uh, for negative scenarios, we can cover, uh, the test cases into, like, your integration test cases. And if you'd required a complete end to end flow, that is from user UI to, uh, to interact user UI, which is interacting with multiple services and then getting response, uh, to the specific, uh, UI and all. So that can in trend scenarios can be handled into, uh, like, uh, automation regression, uh, via the cucumber you can do via Cucumber or, like, other, uh, frameworks too. So, um, I think, um, all negative and, um, the functionality related, uh, testing should be done into integration. And, uh, once that is done, we can consider the it will, uh, like, integration or test cases flow. Sorry. Then we can consider unit testing flow, and then in the last, I will consider the automation integration. Yeah. This is