
Versatile Senior System Engineer with 6+ years of experience supporting a leading US telecom client, with strong expertise in Java, Spring Boot, Angular 5, and legacy application migration. Skilled in designing REST and SOAP APIs, building front-end GUIs, and preparing technical documentation across SDLC/STLC. Certified in Microsoft Azure Fundamentals and SAFe 5.0, with hands-on experience in migrating applications to Azure Cloud. Proficient in DevSecOps practices, CI/CD pipelines using Jenkins and CodeCloud, and security scanning tools like SAST, DAST, SCA, and SONAR. Trained in Microservices (IBM-recognized) and well-versed in Agile and TDD methodologies. Additional strengths include PL/SQL, Shell Scripting, application security, OWASP remediation, manual penetration testing, and system debugging. Familiar with tools and platforms such as Eclipse, Git, JIRA, Postman, SOAP UI, WebSphere, and Connect Direct.
Lead Application Developer
IBM IndiaJira

LeanKit

Zephyr

Postman

SOAP UI

Eclipse

Visual Studio

Veracode
.png)
Jenkins

ADO

Websphere

SFTP

Spring Boot

Oracle PL/SQL

JPA

DevSecOps

SAST

DAST

CI/CD

JFrog
Could you help me to understand more about background by giving a brief introduction about yourself? Yeah. So my name is Sunil Kumar, and currently, I'm working With IBM. In in Bangalore for a US lead leading telecom client, and I'm working as a lead up application developer
Illustrate how would you optimize query performance for a Java application by using both SQL and NoSQL databases. So I think database performance can be optimized if you have. The first step is to write an optimized code. Uh, so I would use queries or the code that would be optimal. For example, if you are trying to fetch the 2nd highest salary for an employee, 1 way to do that is using a max function and using a subquery. Basically, you run a max function and then you again, uh, run a max function on that to select the salary, which is less than the maximum. So less than maximum will obviously be the same thing with the help of row num and order by clause. So first, you need to just order by use order by clause to order the salaries in in a descending order. The second row will be the salary, which will be 2nd highest, and you can just use a a clause to fetch equals to 2 where the salary would be 2nd highest. So that is an optimal way of doing it in terms of the code or the query that you are writing. So similarly, you need to approach the the queries and the transaction in a way that can be more optimal. 2nd way is that you you have we we can use indexing. Indexing is something that improves the performance of a database retrieval, the record retrieval. Uh, and if we do that, there is some really good benefit in terms of, uh, saving the time and improving the performance. Java applications using both SQL or SQL query performance.
Could you describe a strategy for implementing 0 down time deployment for a Java based web services in AWS? Okay. So first thing is that you need to implement a monitoring. It can be any any kind of monitoring. It can be an agent or anything. But if you're using a microservice architecture, then you have circuit breakers, which will keep monitoring the web services, uh, sorry, the microservices, and they will isolate the 1 which is causing the problem. Now if we have to first, uh, identify which which microservice is failing, that circuit breaker can do and avoid cascading failure. But at the same time, you need that microservices to be available because I cannot have a 0 downtime. So I think in order to achieve that, you should be deploying a feature of, um, where if the node is going down, then automatically another, uh, the same with the same configuration, the microservices can be brought up in another region with the same configuration and setting so that all other microservices can start pointing to that. There will be no change in the configuration. Just you are just moving it to a new node so the URL and everything will remain same. So it's like so and the database will also be replicated instantly. So I believe in that way, you can, uh, achieve a 0 downtime in, uh, that deployment.
How does 1 ensure consistency across multiple microservices in Java that use disparate SQL and SQL databases? So you we can maintain consistency with the help of transaction management and to detect that if there is any issue that we need to roll back so we can implement that with the combination of 2 PC commit. So, uh, that you can do the changes and the commit in in phases across the the microservices. So combining both these techniques, I think I can achieve consistency across multiple microservices.
Yes. I can I can include a cache layer in Spring Boot to improve the response time of an SQL database driven application? For that, I need to use, um, the the the the the cache manager. So we need to define a configuration of at the rate cache, and we need to use the annotation at the rate cache equal. Right? And then wherever and you need to also configure a class called concurrent cache manager. After you have the dependency and you have created a concurrent hash manager, you need to use the annotation add the recachable to add wherever and as the name of that cache, wherever you need to store frequently accessed data. For example, during the sale, I, as a customer, would first go with the products that are available at discount rather than the, uh, products which are on MRP. So we can cash discounted products already so that I if I, as a customer, am querying it, the code should not be going and looking into the database for those products, and that can be cached already, uh, so that that can perform improve the the performance and the response time on a SQL driven database. And I think I missed to add this point in the question that was asked that how can you improve the performance? We can add, uh, caching as well there to add it to that.
What would be the first step to debug the performance issues in a cloud deployed our service that you will spring boot. First step is to identify the root cause and where the problem is. So with there are many features, but with the context of spring boot itself, we can use actuators. Actuators are production like feature, and they have various endpoints that can be enabled to manage or you can say manage and track or monitor the performance of of your application. There is 1 actuator call called health, uh, which you can enable to to check the health of your application. So, similarly, I think with the help of actuators, different endpoints, you can activate them in your application of property file so that after you deploy the application, uh, the spring boot in your logs, you can see those actuator endpoint metrics, uh, which can fluctuate based on the performance. So if there any sort of performance issue, you can, uh, use actuators to check it. But it says it also says cloud deployed Java service. So every cloud provider also provides you log analytics or monitoring agents. So not necessarily a Spring Boot application, but even if it is our other framework also, the cloud provider is giving you those services to monitor your agent, you can go to the dashboard and, uh, you can see the entire dashboard where it is a well represented graphical charts to identify the performance issues. If there is any kind of CPU utilization, I can see the spike. I can see the time where exactly it is happening and and and on which resource it is happening. So with the help of that, I can identify. So once I have identified, I need to check. I'll let Excel give 1 example. If there is a lot of CPU spike happening on a particular resource, it means that it is not able to handle those that that load. Right? So that is the problem in in that particular, uh, code.
Read with this Java code snippet used to connect to a database and execute a query. What improvements would you suggest for better error handling and for maintainability? Try connection driver management. Get connection user pass statement. Then you have a result set. You are executing the query. Select star from users. Process the result set. Score exception. File release statement dot close and correction dot close. What improvements would you suggest for better error handling and code maintainability? Okay. In terms of code maintainability, I think, uh, well, what I can do is I can try to add a better description, more comments of what exactly this code is doing because looking at that, I can see that it is selecting start from users. But what is the purpose of this particular function better description in this code of what this particular block is expected to do. Plus, I think I would also add who has written this and what is the requirement or the project that was part of this as a part of which it was written. Error handling, so I would try I have a catch. I can add along with the SQL exception, I would also suggest to add another catch and just catch exception instead of SQL exception so that if any other exception happens, that can be also caught with that. So having another catch is is good. The result set is not being closed here. So I think you we should also close the results set into that finally block if we are done executing it and do not, like, do not keep it open after you have done, uh, processing of that result set. No. Uh, I'm not sure looking at this. It seems the user and the password. So if the username and the password is hard coded, I would suggest not to use those not user approach of hard coding those credentials. You can use property files or you can also if it's a cloud application, then you can put those into, uh, the key vault or any kind of service which the cloud is providing to invoke and get the secret and its value to use it and code maintainability. If the Java also provides a tribe with resources options so that if you use it, you don't have to explicitly write a finally block to close all the resources. So that comes very handy. Try with resources so that I don't have to worry about closing of these, uh, results set or the statement or the connection and all of that.
So I'm in the following Java code that intends to apply the singleton design pattern. Identify if it is correctly implement the pattern and if it's thread safe. If not, how would you refactor it? Public class singleton, private static singleton instance supposed to null. Private singleton public static singleton get instance. If intents supposed to run, that's supposed to support a little bit of instance. It is not thread safe because this method is not synchronized. So we have not used a synchronized keyboard to, uh, allowed any thread safe operation. So this particular instance is not thread safe. So definitely not thread safe. Now identify if it is correctly implements the pattern. Some of the instance supposed to be null. I would I would start exceeding and get instance if it is. I think it's fine.
Explain how would you manage transactions approach distributed microservices in Java, especially when dealing with eventual consistency. I can use transaction management. So in I have a tran annotation called add direct transactional that can be used to roll back the database operations if an exception happens. But since this is a distributed environment, I have to approach this with a 2 PC solution and a 2 PC commit so that I do the changes and commit them into phases instead of doing it in in in a 1 shot. So combining both these techniques of transaction management and 2PC commit, I think I can achieve eventual consistency in a dis in in a distributed microservices architecture.
Consider a scenario where an ecommerce application experience inconsistent read data issues. How would you address this while using Spring framework and NoSQL database? Read data issue. How would you address this value in screen framework in your database? I'm not sure on this question.
Can we present an example of a complex system on AWS where you have successfully applied in, uh, the dependency inversion principle from solid Solid or in Java. Can you present an example of a complex system on OWS where you successfully applied the dependent inversion principle from Soliton. Not