profile-pic
Vetted Talent

Sunil Kumar

Vetted Talent

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.

  • Role

    Senior Java Engineer

  • Years of Experience

    6 years

Skillsets

  • Restful APIs - 6 Years
  • Customer and technical support
  • Agile software development & testing
  • SME
  • technical lead
  • Technical and business analysis
  • Back-End Web Development
  • programming languages
  • Test Driven Development
  • Release Management
  • Java 8
  • SQL - 6 Years
  • Git - 6 Years
  • Spring - 6 Years
  • Java - 6 Years
  • Eco pipeline
  • SCA
  • DAST
  • SAST
  • Rest and soap web services
  • Microsoft Azure Cloud
  • DevSecOps
  • JPA
  • Shell Script
  • Oracle PL/SQL
  • CI/CD
  • Spring Boot

Vetted For

15Skills
  • Roles & Skills
  • Results
  • Details
  • icon-skill_image
    Senior Software Engineer ( Java)AI Screening
  • 67%
    icon-arrow-down
  • Skills assessed :computer science fundamentals, Front-end Development, JakartaEE, Micronaut, Quarkus, Spring Boot, Architecture, Cloud, nosql/sql, Spring Framework, AWS, Java, Leadership, Problem Solving Attitude, System Design
  • Score: 60/90

Professional Summary

6Years
  • Apr, 2018 - Present8 yr 1 month

    Lead Application Developer

    IBM India

Applications & Tools Known

  • icon-tool

    Jira

  • icon-tool

    LeanKit

  • icon-tool

    Zephyr

  • icon-tool

    Postman

  • icon-tool

    SOAP UI

  • icon-tool

    Eclipse

  • icon-tool

    Visual Studio

  • icon-tool

    Veracode

  • icon-tool

    Jenkins

  • icon-tool

    ADO

  • icon-tool

    Websphere

  • icon-tool

    SFTP

  • icon-tool

    Spring Boot

  • icon-tool

    Oracle PL/SQL

  • icon-tool

    JPA

  • icon-tool

    DevSecOps

  • icon-tool

    SAST

  • icon-tool

    DAST

  • icon-tool

    CI/CD

  • icon-tool

    JFrog

Work History

6Years

Lead Application Developer

IBM India
Apr, 2018 - Present8 yr 1 month
    Perform requirement gathering with clients to evaluate functionality and business needs for new feature collaboration. Accurately estimated work hours and tracked project using the Scrum methodology. Developed and deployed features within complex order and billing systems. Conduct code reviews for other developers. Troubleshooted incidents reported by end-users, ensuring smooth system operations. Automation of manual tasks for better cost and time optimization for business. Collaborate with cross-functional teams to triage product or system issues, conducting in-depth analysis on hardware, network, or service operations. Performed internal SOX Audit & Compliance for SOX Controls for financial system.

Major Projects

7Projects

SAREA/LISA REST API

    Developed robust REST APIs, including Sarea Migration, Delete Order, Correct Record, and Cease and Reprovide, to introduce new functionalities and enhance system capabilities, enabling the expansion of services and new speed support using Java and Spring Boot.

MEF E-Bonding

    Developed a new REST API for MEF (Metro Ethernet Format) and performed API integration for e-bonding orders directly to vendors to automate order provisioning process with vendors, reducing human intervention and fully automating the process. This cut down SIM time by about 30%.

3PT REST API

    Built new REST API to introduce a new order provisioning system for loading 3PT circuits, facilitating billing, invoicing for vendors, data correction of inventory.

Cloud Migration

    Successfully migrated a legacy application to Azure, re-architecting the system and upgrading the database to Oracle 19c, the operating system to RHEL, and performing necessary software, code and infrastructural upgrades on the cloud platform.

SOX and FIM

    Developed new Sarbanes-Oxley (SOX) and File Integrity Monitoring (FIM) functionality using Java, Spring Boot, and Linux Shell Scripting. This enhanced auditing, improved unauthorized change detection, and strengthened access control for financial systems. Additionally, automated the generation of evidence for submission to auditors.

NGGN-I Complex Ordering System

Apr, 2018 - Present8 yr 1 month
    NGGN-I is the Access Ordering Platform for the MOW. Next Generation Global Network International provides functionality to support Most of World access orders in Service Delivery domain.

GAIM Complex Billing System

Apr, 2018 - Present8 yr 1 month
    The Global Access Information Management is the MOW access invoicing, Access, Inventory, Invoice, Audit Compliance, and Financial and Dispute Management tool

Education

  • Bachelor of Technology (Hons) - Information Technology

    Dr A.P.J Abdul Kalam Technical University, Lucknow (2017)

AI-interview Questions & Answers

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 Bangalore for a US lead leading telecom client, and I'm working as a lead up application developer

So I think database performance can be optimized if you have optimized code. The first step is to write an optimized code. For example, if you are trying to fetch the 2nd highest salary for an employee, one way to do that is using a max function and a subquery. You run a max function and then run a max function on that to select the salary that is less than the maximum. This can be achieved with the help of the row_num and order by clause. First, you need to order the salaries in descending order using the order by clause. The second row will be the salary that is 2nd highest, and you can use a subquery to fetch that. So similarly, you need to approach the queries and the transactions in a way that can be more optimal. Another way is to use indexing. Indexing improves the performance of a database retrieval and record retrieval, and there is a good benefit in terms of saving time and improving performance.

Implementing a 0 downtime deployment for a Java-based web services in AWS involves several key steps. First, you need to implement monitoring, which can be an agent or any other type of monitoring. In a microservice architecture, circuit breakers can be used to monitor the services, isolate the failing one, and prevent cascading failures. To identify the failing microservice, the circuit breaker can be used to detect the issue. However, to ensure the service remains available, you should deploy a feature where if a node goes down, another node with the same configuration can be brought up in a different region. This way, the URL and configuration settings remain the same, and the database is replicated instantly. This approach allows other microservices to point to the new node without any changes to their configuration. By moving the service to a new node, you can achieve 0 downtime during deployment.

How does one ensure consistency across multiple microservices in Java that use disparate SQL and NoSQL databases? So, we can maintain consistency with the help of transaction management and to detect if there is any issue that we need to roll back so we can implement that with the combination of two-phase commit. So, that you can do the changes and the commit in phases across the microservices. So, combining both these techniques, I think I can achieve consistency across multiple microservices.

Yes. 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 the cache manager. So we need to define a configuration for the Ehcache cache, and we need to use the @CacheConfig annotation with Ehcache. Right? And then wherever you need to cache frequently accessed data. After you have the dependency and you have created a ConcurrentMapCacheManager, you need to use the @Cacheable annotation to cache wherever and as the name of that cache, wherever you need to store frequently accessed data. For example, during the sale, as a customer, I would first go with the products that are available at discount rather than the products which are on MRP. So we can cache discounted products already, so that 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, so that it can perform and improve the performance and the response time on a SQL-driven database. We can add caching as well to improve the performance.

What would be the first step to debug the performance issues in a cloud-deployed our service that you will use Spring Boot? The first step is to identify the root cause and where the problem is. So with many features, but with the context of Spring Boot itself, we can use actuators. Actuators are production-like features, and they have various endpoints that can be enabled to manage or, you can say, manage and track or monitor the performance of your application. There is an actuator called the health endpoint, which you can enable to check the health of your application. Similarly, I think with the help of actuators, different endpoints, you can activate them in your application's property file so that after you deploy the application, Spring Boot in your logs, you can see those actuator endpoint metrics, which can fluctuate based on the performance. So if there's any sort of performance issue, you can use actuators to check it. But it also says it's a cloud-deployed Java service. So, every cloud provider also provides you with log analytics or monitoring agents. So not necessarily a Spring Boot application, but even if it's another framework, the cloud provider is giving you those services to monitor your agent. You can go to the dashboard and see the entire dashboard with well-represented graphical charts to identify the performance issues. If there's any kind of CPU utilization, you can see the spike. You can see the time where exactly it's happening and on which resource it's happening. So with the help of that, you can identify. Once you have identified, you need to check. For example, if there's a lot of CPU spike happening on a particular resource, it means that it's not able to handle that load. Right? So that's the problem in that particular 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, 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 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, processing of that result set. No. 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, 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, 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 implemented the pattern and if it's thread safe. If not, how would you refactor it? Public class Singleton, private static Singleton instance supposed to be null. Private constructor is used to prevent instantiation from outside the class. Public static Singleton getInstance. If intent is 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 haven't used a synchronized keyword to allow 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 instances supposed to be null. I would start by checking if the instance is null, and then get it 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 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 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 we have successfully applied the dependency inversion principle from SOLID principles or in Java. Can you present an example of a complex system on AWS where we successfully applied the dependency inversion principle from SOLID principles.