Solution Architect
UBS AGSr. Full Stack Engineer
Aleph LabsTechnical Lead
HCL SoftwareAssociate - Projects
Cognizant Technology SolutionsSenior Software Development Engineer
Nuance India Private LimitedJava Architect
Wipro DigitalTechnology Analyst
Infosys LimitedModule Lead
Persistent Systems Limited
Microsoft Azure

Kafka

PostgreSQL

MariaDB

MongoDB
.png)
Jenkins

Ansible
Jira

Confluence

Eclipse

Visual Studio Code

Postman

SoapUI
.jpg)
Microsoft Visio
.png)
Docker
RDD is an infrastructure supporting application. It consists of master data system hosted on IBM Mainframe. The data is synced
to various downstream consumers like normalized Postgres DBs, customer DBs through Kafka messaging backbone.
Accomplishments:
This is an internal application with various dashboards and reports for different teams to track the resource on-boarding, team
velocity, Agile release planning, etc. in tabular or graphical way. The application has been enhanced to support real-time resource
onboarding from the application. The application was originally written using Vue.JS, later revamped with React.JS stack.
Accomplishments:
HCL Verse is a web email client. It has various modules like Calendar, Mail and Contacts. Earlier it was using CGI based APIs,
we started implementing the RESTFUL microservices and new UI in React.JS.
Accomplishments:
No active assignments during this tenure, so had to leave the organization in 6 months span.
CDI Nextgen application is mainly intended for CDS (Clinical Documentation Specialist) who does documentation and review them. This application provides the complete work flow for the CDS to review the clinical codes added by the coders. Existing application was revamped using latest technology stack.
Accomplishments:
Banca is an insurance application for a bank. In the middle east, the insurance policies are sold by the banks. This application takes care of complete policy life cycle.
Accomplishments:
Web Console is an AJAX based web application which monitors the various hosts with multiple jobs of different types running on them.
Accomplishments:
The Memova messaging suite consists of various applications like Email, Contacts, Calendar, and Files similar to Gmail suite. The application is completely written in-house and is highly customizable.
Accomplishments:
Saurabh is hardworking and able to work under pressure. He is very professional, and good at programming and explaining to peers.
I worked with Saurabh in several projects over a period of 3 years. I was impressed by his ability to adapt and attention to detail.
Saurabh is a very capable and professional technical consultant. I worked with Saurabh for a number of years from customer support to onsite project work at different places in Asia. I found Saurabh could take on jobs independently in customer places and got the job done well. I would not hesitate to recommend Saurabh and wish him luck with his new venture.
Project Name: Reference Data Distribution
Employer: UBS AG
Duration: Mar 2023 Till Date
Environment: React.JS, Spring Boot, Java 11, Azure, Ansible, Kafka, PostgreSQL
Role: Solution Architect with IC
Description: RDD is an infrastructure supporting application. It consists of master data system hosted on IBM Mainframe. The data is synced to various downstream consumers like normalized Postgres DBs, customer DBs through Kafka messaging backbone.
Project Name: CX360 Dashboard
Employer: UOB Bank
Duration: Sep 2022 Feb 2023
Environment: React.JS, Redux, Material UI, Node.JS, Mongo DB, MariaDB
Role: Senior Full Stack Engineer
Description: This is an internal application with various dashboards and reports for different teams to track the resource on-boarding, team velocity, Agile release planning, etc. in tabular or graphical way. The application has been enhanced to support real-time resource onboarding from the application. The application was originally written using Vue.JS, later revamped with React.JS stack.
Project Name: HCL Verse (formerly IBM Verse)
Employer: HCL Software
Duration: Sep 2019 Aug 2022
Environment: React.JS 16.14, Redux, Material UI, IBM Cloud, Java 8, Spring Boot, Microservices.
Role: Technical Lead with IC
Description: HCL Verse is a web email client. It has various modules like Calendar, Mail and Contacts. Earlier it was using CGI based APIs, we started implementing the RESTFUL microservices and new UI in React.JS.
Project Name: CDI Nextgen
Employer: Nuance India Pvt. Ltd.
Duration: Nov 2017 Feb 2019
Environment: React.JS, Type Script, Node.JS, Webpack, Java 8, Spring, Spring Data JPA, REST, JSON, MS SQL Server 2008, etc.
Role: Senior Java Full Stack Developer
Description: This application is mainly intended for CDS (Clinical Documentation Specialist) who does documentation and review them. This application provides the complete work flow for the CDS to review the clinical codes added by the coders. Existing application was revamped using latest technology stack.
Hello. My name is Saurabh Agrawal, and I have 18 years of industry experience, out of which various are in software development. During this 12 years, I worked as a full-stack Java developer. But then, on the back-end side, I'm into Java and the Spring framework. On the front-end side, I have worked with React, JavaScript, and a bit of Vue.js. So, during this tenure, I played various roles, like an individual contributor and a technical lead.
To approach optimizing React application components for maximum rendering performance, we have multiple ways. One is to use a hook called useCallback. The second is to memorize the component using the use memo hook. And even we can memoize the return value of highly computational functions using the memo function. So, useCallback. What it does is that between renderings, it keeps the function definition in the cache. That's why, if the dependency list, or any of the variables in the dependency list, does not change, React will return the cached copy of the function definition. That way, it won't recreate the definition of the function. If it is defined under useCallback. Now, use memo. Use memo can be used to memorize the return value of computational functions. So, if you are doing a very heavy operation or computation in any of your functions, then that can be memoized using the use memo hook. The third way is to use memo. Memo means we can create pure components in a functional way. So, using memo, we can prevent unnecessary rerendering of child components. So, what happens in React is that when a parent component is rendered, a complete tree of components is tried to be rendered. So, if we optimize the child components and avoid unnecessary rerenderings, then we can optimize the application componentry for rendering performance.
Yes, we can effectively implement the continuous deployment process using Azure DevOps for a JavaScript-based application. For this, we can implement a CICD pipeline using any of the languages like Ansible or Terraform. And, we can build as soon as the developer pushes any new code to the git branch on the repository. So, it's going to trigger a CI pipeline, which is going to build the repository code. So, while building, it will execute all the inner test cases as well. And if 100% of unit test cases are passed, then the build will succeed. Ultimately, it will check for any passwords or security threats in the code using Fortify. And then, it will release a new package. Then that package can be deployed further using any of the live HTTP servers. Yeah. So, that way we can implement the continuous deployment process for any JavaScript-based application.
So one tackles the problem of database connection pulling in a Node JS application to improve performance and stability by following a rule of thumb. Once you've used a connection from your connection pool and are finished with your transaction, you should close that connection so it can be returned to the pool or at least commit your transaction. If you don't do this or don't gracefully close your resources, it may lead to connection link issues. If you take care of this connection link issue, close all open resources created during the database operation, and your connection or database transaction will be cleaned. The connection can be returned to the pool, improving the performance and stability of the application. There won't be any data connection leak. Otherwise, the memory usage of the Node application will increase if connection objects get piled up in memory, and the application may crash. That's all for me.
In microservices ecosystem, how do you handle the distributed transaction across the services to ensure the consistency? Okay, so there are various ways to handle this. I mean, one way is to have multiple databases which are replicated. I mean, one database would be the master and another would be the slave. And, the slave will have the exact replica of the master database. Whereas, the master database can only be used for write operations or write transactions, whereas the secondary database can only be used for reading. So that way, you know, you won't have all or a complete load of different user operations on a single database, so we can segregate them using dedicated write and read databases. That's
We can use sticky sessions on the load balancer to effectively manage user sessions across micro contents. The load balancer generates a unique session ID or token on the load balancer side. This single session ID or sticky session ID is then used to verify or achieve sessions across the distribution system. For different micro front-end applications, even though they are in different modules, they can use a simple or single session ID to achieve user session across the distributed platform effectively.
The data might not be displaying as expected on the web page because the fetch data method is asynchronous and only invoked once when the application mounts. This is due to the way the useEffect hook is used, without any dependencies, it will only run once, when the component mounts. If any updates happen to the data on the API side, it won't be reflected on the UI on the web page. To have the desired effect, the useEffect hook should be used with a dependency array, so that every time the value or dependency list changes, the effect will be called, new data will be fetched from the API, and it will be rendered on the web page. Additionally, the component should return JSX with code that iterates on the data list and displays it as a list on the web page. Without this implementation, the component will not render the data.
Review the JavaScript code block that is intended to implement the singleton pattern. Explain what is wrong with the implementation. How would it fix that? So let instance equal to null class Singleton constructor if instant if not instance, then instance equal to this return instance const singleton and new singleton I think, for the instance variable, late keyword is being used, which is a block scope, keyword. So we want to truly implement this singleton in this case, then we have to replace let with back so that it will be hoisted. And, that way we can have a single instance and, initially, it will be null but once the constructor is called and first time we won't find it Then it will assign, this, object to the instance and variable, and it will return. The 2nd time, it will find the instance to be valid reference with some object, and it will simply return it. It won't create or assign a new object again. So, basically, here, we need to replace let with the var.
Which architectural pattern would you use to build a scalable real-time bidding system, and how would you ensure its responsiveness under heavy load? K. Support bidding system. What I think is that, the user should see real-time data on its web page as well as whatever bid he is placing should also go in real time to the server. So one thought coming to mind is that we can use WebSockets, which is a full-duplex way of communicating between server and client. That way we can have a full-duplex connection, and there won't be any pulling for real-time data from the server. So through a WebSocket, the real-time data will be updated on the web page as well as whatever bid the user will place will also go to the server using a single WebSocket connection. So that way, we can achieve the real-time bidding system without any polling in place. That's all.
And strategies we recommend for React applications with a focus on user interface, consistency, and integration. Okay. So first one is user interface consistency. Consistency means there are multiple browsers in the market available. So the UI should be consistent across browsers. So it should be compatible with all browsers. For that, we can use physical different browsers to test on, or we can use a cloud platform like BrowserStack, wherein we can use our desktop application on multiple devices and multiple browsers. And that way we can ensure the consistency of the interface. What is the testing framework and strategy would you recommend? Okay. And I would recommend that whenever there has to be a CI/CD integration in place to run the automation suite for our UI, so that we can ensure that if any change happens to the code, there is zero regression happening on the existing functionality of the application. Third, in the developer's perspective, we should have 100% coverage for our unit test cases. So for React applications, we can use the testing library. React testing library is kind of a paradigm shift as compared to enzyme. So what the React Testing library does is that it actually renders the component and it tries to perform assertions on the rendered component DOM. Okay? So that way we can ensure that the user interface is consistent and well integrated. Yeah. That's all from me.
Can you imagine where technologies like WebAssembly could be integrated into an existing JavaScript application architecture to improve performance? Okay. So, as per my knowledge, WebAssembly's primary purpose was to run native code on the browser platform. So, basically C++-based code can be executed or hosted directly on a browser. Code written in C or C++ or a native language is highly efficient in nature. So, using WebAssembly, we can execute the same code in our browser. The UI rendered on the browser would be more efficient compared to Java or JavaScript-written applications. I think that's the information I know about WebAssembly. I need to check how it can be integrated into the existing JavaScript application. However, I know the concept that WebAssembly's use is and how it can benefit the user interface. That's all from me. Thank you.