profile-pic
Vetted Talent

Shashank Shekhar

Vetted Talent

I'm a technology enthusiast with 3+ years of targeted experience in the tech landscape, particularly in backend development. Armed with a Bachelor of Engineering (B.E.) in Computer Science, my skill set spans React.JS, HTML, CSS, JavaScript, Node.js, MongoDB, MySQL, and Java. My professional journey is marked by a steadfast commitment to developing scalable, efficient solutions.

My professional odyssey commenced at INDIANIC Infotech LTD, where I delved deep into the realm of backend development. This experience was instrumental in sharpening my expertise in JavaScript and Node.js, along with the MERN stack, allowing me to contribute significantly to our project's success. My tenure here not only honed my technical skills but also instilled a profound appreciation for teamwork, adaptability, and the relentless pursuit of excellence in a fast-paced industry.

  • Role

    Backend Developer

  • Years of Experience

    3.9 years

  • Professional Portfolio

    View here

Skillsets

  • ReactJs
  • S3
  • MySQL
  • Jenkins
  • EC2
  • Docker
  • CloudWatch
  • AWS
  • PostgreSQL
  • CSS
  • HTML
  • JavaScript
  • TypeScript
  • Express
  • PostgreSQL
  • Nodejs
  • MongoDB
  • Jira
  • Git
  • CSS
  • Redux
  • Redis
  • JavaScript - 4.0 Years
  • HTML
  • HTML

Vetted For

14Skills
  • Roles & Skills
  • Results
  • Details
  • icon-skill_image
    Backend Developer(Remote)AI Screening
  • 70%
    icon-arrow-down
  • Skills assessed :AWS SDK, dotenv, Hubspot.API, Mailgun.JS, OpenAI, Passport, Bcrypt, Node Js, Socket.IO, Twilio, TypeORM, Express Js, MySQL, Type Script
  • Score: 63/90

Professional Summary

3.9Years
  • Nov, 2024 - Present1 yr 7 months

    Software Engineer

    The Briminc Softech
  • Jan, 2023 - Nov, 2023 10 months

    Software Engineer

    IndiaNIC Infotech Ltd
  • Jun, 2020 - Aug, 20222 yr 2 months

    Sr. Associate - Backend

    Amazon

Applications & Tools Known

  • icon-tool

    Git

  • icon-tool

    Agile

  • icon-tool

    BitBucket

  • icon-tool

    Linux

  • icon-tool

    Windows

  • icon-tool

    S3

  • icon-tool

    Linux

  • icon-tool

    Agile

  • icon-tool

    Linux

  • icon-tool

    Node.js

  • icon-tool

    Express

  • icon-tool

    MongoDB

  • icon-tool

    CSS

  • icon-tool

    React.js

  • icon-tool

    AWS

  • icon-tool

    JWT

  • icon-tool

    Jira

  • icon-tool

    Cloudwatch

Work History

3.9Years

Software Engineer

The Briminc Softech
Nov, 2024 - Present1 yr 7 months
    Designed and implemented CRON jobs using Node.Js for automating file handling processes on an SFTP server, ensuring reliable and efficient data transfers and processing. Utilized AWS CloudWatch for Monitored and supported production applications using logging and monitoring tools to proactively identify and resolve issues, minimizing downtime. Built RESTful APIs in Node.JS to support seamless data interactions between the frontend and backend systems. Designed and deployed a multi-tenant solution utilizing Azure Active Directory for secure user authentication.

Software Engineer

IndiaNIC Infotech Ltd
Jan, 2023 - Nov, 2023 10 months
    Implemented a Redis Pub/Sub mechanism to deliver real-time user notifications after training video uploads, ensuring users are instantly informed about processing status and results. This enhanced the user experience and engagement significantly. Utilized Git for version control, collaborating with cross-functional teams to maintain code integrity and manage development workflows. As Node.JS developer, Collaborated with React developers to integrate frontend UI and backend systems. Worked with NoSQL database MongoDB to design flexible, non-relational data models that support dynamic application requirements.

Sr. Associate - Backend

Amazon
Jun, 2020 - Aug, 20222 yr 2 months
    Assisted in building and maintaining RESTful APIs to support smooth communication between frontend and backend systems, helping improve the user experience. Contributed to code reviews and learned about software development best practices and clean coding standards. Collaborated with cross-functional teams to ensure that the email templates adhered to Amazons guidelines for performance and accessibility. Helped improve SQL queries to make data retrieval and storage more efficient in relational databases.

Achievements

  • Integrated Redis for the favorite listing, reducing data retrieval time by 60%.
  • Designed NoSQL databases to enhance data storage and retrieval efficiency by 30%.
  • Utilized Git for version control, reducing code conflicts by 20%.
  • Conducted weekly training sessions on seller service skills, increasing customer satisfaction scores by 30%.
  • Developed an efficient email formatting blurb page, enhancing product review efficiency by 40%.
  • Engineered a real-time communication system with Socket.io, achieving a latency of less than 100 milliseconds.
  • Integrated Redis for the favorite listing on the IndiaNIC Project Platform, reducing data retrieval time by 60% and enhancing overall system performance.
  • Designed and Established NoSQL databases, enhancing data storage and retrieval efficiency by 30% and supporting scalable e-commerce web application development.
  • Developed an efficient email formatting blurb page, enhancing product review efficiency by 40% through standardized communication templates and improved team productivity.
  • Built a Redis Pub/Sub system for real-time user notifications and alerts, ensuring instant delivery of order updates and promotional messages, which improved user engagement by 35%.
  • Integrated Redis to manage recently viewed items, enabling quick retrieval and storage, enhancing personalized user experience, and reducing data retrieval time by 60%.
  • Utilized Git for version control for issue tracking and project management, resulting in a 20% decrease in code conflicts and a 15% improvement in project delivery time.
  • Applied query optimization techniques, including selective field retrieval and avoiding N+1 query problems, which enhanced database performance and reduced execution time by 40%.
  • Conducted weekly training sessions on seller service skills, leading to a 30% increase in customer satisfaction scores within six months.
  • Crafted and directed specialized training sessions for more than 200 employees, significantly boosting their knowledge and adherence to compliance standards and practices.
  • Conducted in-depth analyses and audits of seller accounts to ensure adherence to Amazons compliance standards, reducing non-compliance incidents by 40%.

Major Projects

2Projects

Full Stack Chat App

    Engineered a real-time communication system using Socket.io for instant messaging, maintaining an average latency of under 100 milliseconds. Developed the application using Node.js for backend services and managed data operations with PostgreSQL, resulting in noticeably faster API response times. Built the frontend using React.js, improving data retrieval speed and significantly enhancing the overall user experience.

Ecommerce App

    Full-stack e-commerce solution built with React, Node.js, and MongoDB. Implemented secure authentication and authorization mechanisms (JWT) to protect API endpoints and ensure data privacy and security. Leveraged expertise in system and database design, along with REST APIs development, to deliver scalable, efficient web solutions.

Education

  • Bachelor of Engineering - Computer Science

    Dr. D.Y. Patil Institute of Technology (2020)

AI-interview Questions & Answers

Hi. My name is Shushang Shekar, and I'm a software developer with over 3 years of experience. I specialize in developing the back-end sites using Node.js and JavaScript. I have used Redis and the cache-based memory option for optimizing ongoing project applications and internal games also. I have a clean and lean approach to my knowledge's development. In my current organization, I have built e-commerce websites for the server-side and implemented all developer schemas and AI diagrams that are part of a clean architecture. Before this organization, I worked at Amazon as a senior associate, where I was part of a small team that designed APIs for internal intent requirements, where data should be phased from the exercise, and we managed email templates and provided them as a form of using edit functions, implementing required data, and storing data for future reference and error tracking. So we stored user data while implementing editing and sending the page. I'm leaning towards new trends in technology, and Node.js is a widely used technology. I have preferred to go with Node.js so far. Thank you.

How would you handle the real time chat features in, you know, JS with Socket.IO for efficient memory use? How do you handle a real time chat features in a Node.js app with Socket.IO for efficient memory use while implementing Node.js app with such features like, efficient, the socket, which is basically the top layer of WebSockets. WebSockets we can, basically, implement in such a way. Like, we have, key features like the use of namespaces and the rooms. The socket has support for namespaces and rooms to divide users into different groups, reducing the broadcast scope and unnecessary data transmission. We have, like, limited stored messages, implementing the mechanism to limit the number of chat messages and restore in memory to avoid consuming too much RAM. We offload messages to the database when a user is flagged. We have, like, garbage collection. We make sure the client is disconnected in the socket's on disconnect handler. It's essential to clean up memory when the user leaves. And we can apply the radius for scaling, which is basically using Redis to pop up messages when the app is scaled across multiple servers, for broadcasting to instances without overloading memory on individuals. We can use Redis for session storage, which helps offload memory used by the Node.js process. We can optimize data transmission by implementing rate limiting or message routing to prevent spamming and only emitting necessary data. We make sure the socket transmits only the required data, reducing payload size and memory usage. We can also implement memory leak prevention by avoiding circular references and using monitor tools like Clinic.js, nwatch, or Node Inspector to monitor memory usage and detect leaks early in development. We can use lazy loading and cleanup, loading page user rates and messages and other related data only when necessary, rather than including everything on a connection. These strategies combined ensure our real time chat features can scale efficiently and keep memory usage under consideration.

Can you describe a scenario where using Twilio's API within a Node.js backend might enhance user experience? So, basically, it's been a frequent use of the Twilio API. I remember one scenario in my project where I implemented a healthcare platform to book appointments with doctors. To improve the experience and reduce missed appointments, we wanted to implement an automated system that sends appointment reminders via SMS or voice calls. This is how we used the Twilio API. Within a Node.js backend, the Twilio API can enhance the experience. One of the ways is by using the programmable SMS API to send personalized SMS reminders. Also, voice call reminders are available. The Twilio API allows two-way communication, enabling patients to respond to reminders with questions or recommendations. The Node.js backend can pass the response and update the appointment status accordingly. We also have emergency notifications. Twilio provides multilanguage support, so by integrating it into our system, we can build an effective communication system that keeps user information, reduces no-shows, and enhances the overall experience with reminders and flexible communication options.

To encrypt sensitive data before saving it to a MySQL database using Node.js, so just a method to encrypt. Can you suggest a method to encrypt sensitive data before saving it to a MySQL database using Node.js? So, one of the methods is to use a hashing algorithm. For example, on May 3rd, I will say, like, whenever users enter the password, whether during the login process or even not logging in. So even while you're doing the sign-up process, like, during the sign-up process when you just enter the password for the first time. So at that time, we need that data to be encrypted while storing the data in the database. For example, in the SQL RDBMS, if you're using MySQL. We need to encrypt that data before saving into our databases. So here, we can use one of the measures, like bcrypt. Bcrypt, we can use in our databases also. Just basically, we are hashing the password, like, salt hashing business. So basically, whenever they are, we are hashing that password. So while we are also creating one function, for example, we are implementing one hash function, hash password function, and we are using a module, like, bcrypt, which we basically use for the encryption of the password. We also implement the salt rounds over there. So, basically, if you are giving some salt values, it will return the hash password. And once we will have the hash password in our variables, we will store that hash password in our databases, not the actual or the real passwords because, this is, like, a clean and concise way to store the data, password in our databases. And bcrypt is one of the methods where we are using to encrypt the sensitive data before saving it to MySQL databases using Node.js.

What is the best approach to manage and apply configuration changes across multiple environments in a Node.js application? So, it's like we have configuration changes across multiple environments in one. When we have certain scenarios where we have multiple environments and not just applications, we can create using environment variables, and it will create in our source files in the same root directory file. So, we'll create a dotenv file for local development, but it will not be committed to version control for security purposes. We can install dotenv, and we will store all the key data, like the required data that is to be in dotenv files, and it will store all the port information, DB host information, DB user passwords, and even the JWT secret key also. So, we will include these key-value pairs like in our development phase, we can use in our dotenv files. For production, we set it in one of our files at a system level or in a AWS without in dotenv files, and this is the risk of accidentally exposing them. We can also use the configuring management library that is using the config library, which will allow us to define the configuration system for different environments like the development or production edition. In the case of default JSON, it will have a JSON format like. We have a production JSON, and we can use it in a format that will automatically detect the environment based on the variables. In the case of environment-specific YAML or JSON configuration, storing configuration in a separate file is another option. These are some of the key steps to manage and apply configuration changes across multiple environments in a Node.js application. Lastly, we will have Docker application, containerized Docker, so it will basically recommend passing environment variables with Docker and for management. Best practices are to avoid hard-coding configurations, secure secrets, and store secure secrets in a separate file like dotenv or in environment variables or a secure management tool. Whenever using the test development phase, we note dotenv should be in development mode. Whenever we are in production mode, it should be in a different mode to differentiate the environments. We can also use version control to keep specific environment-specific config files, excluding secrets in the version control, and list the dotenv file in the.gitignore files. We can also use other tools like Hashicorp's Vault or AWS Secrets Manager to manage secrets and configuration. So, this way, we can achieve the approach to manage and apply configuration changes.

What techniques would you apply to ensure asset compliance when performing concurrent transactions in MySQL? So, I said it's like atomicity concurrency. It's, but, basically, can consist of isolation durability. So, whenever you're dealing with asset compliance in our MySQL system, you can make use of transactions. MySQL transactions allow you to execute a series of operations as a single atomic unit of work by wrapping your operations in a transaction. We ensure that either all operations succeed or fail, ensuring atomicity. And, proper use of the isolation levels, MySQL supports different isolation levels that control how transactions are isolated and from one another to ensure consistency and isolation. You should choose an appropriate isolation level based on the requirements of your application. There's the read uncommitted, read committed, and repeatable read. There's also serializable. And these are some levels of isolation. Certain levels will help avoid conflicts between concurrent transactions. You can apply either optimistic or pessimistic locking techniques. In the case of concurrent transactions, deadlocks can occur. When two transactions are waiting for either to release locks, MySQL automatically detects deadlocks and rolls back one of the transactions to handle deadlocks gracefully. It's a retry when they fail due to deadlocks. Use proper indexing to minimize lock contention and avoid unnecessary locking. And, durability with proper indexing to reduce log contention is also important. So, far, we can implement this. And it's like the accumulative approach for asset compliance, so you can use a transaction that will ensure atomicity. Set appropriate isolation levels, and apply locking. Ensure durability. Charge proper indexes.

To create a socket server, we need to import the HTTP module and create an HTTP server. We also need to pass the app to the server and listen to a particular port. Here's the corrected code: ```javascript const http = require('http'); const app = require('./app'); const server = http.createServer(app); const io = require('socket.io')(server, { cors: { origin: '*', methods: ['GET', 'POST'] } }); let clients = []; io.on('connection', (socket) => { clients.push(socket); console.log('Client connected'); socket.on('disconnect', () => { clients = clients.filter(client => client!== socket); console.log('Client disconnected'); }); socket.on('message', (data) => { console.log('Received message:', data); io.emit('message', data); }); }); server.listen(3000, () => { console.log('Server listening on port 3000'); }); ``` This code creates a server, passes the app to it, and listens to port 3000. It also handles client connections and disconnections, and broadcasts messages to all connected clients.

Can you suggest a strategy for implementing role-based access control in a Node.js API using Passport? When implementing role-based access control with Passport in our Node.js applications, we create a user model in our databases and define user roles. This basically defines a type of user, such as an admin or a moderator user. It's a kind of authentication using the Passport module. We will first set up the Passport JWT authentication. We will import all the Passport JWT modules and generate a token using the JWT token. When a user logs in, it will verify the user's role model for access control. Once the user is authenticated, we can create a custom function to check their roles and grant or deny access based on the role. For example, a person is an admin or a moderator or user. We'll create a role middleware and verify using the tokens provided. We will also check in our databases using the roles, which will include that particular user or not. If the user is not authorized, we will display a message that access is denied or you are not permitted to this route. We can display these messages using the middleware. We have the protect routes using the Passport and the role middleware. We will implement app.use() with the role model middleware before implementing all the routes for a particular role, such as admin. The role middleware will be used only for admin roles. We'll put all the admin routes first. Here, we can implement Passport using JWT authentications.

What is a reliable way to establish a 2-factor authentication system using Twilio in a Node.js back-end? So, when implementing Twilio for 2-factor authentication using Twilio in our system, we have to install some required packages. Basically, those will be Twilio, Express, BodyParser, and JSON. In the case where we are using a Twilio account for sending messages, we will use account SID, account token, and set up the Node.js back-end. We will store our secret files in our.env files and configure Twilio using our Twilio account and auth token. After user registration, we will send OTP for 2-factor authentication. After the user tries to log in and validates their password, we will send the OTP to their phone using Twilio. Once we initiate the login and trigger the OTP, it will send the OTP, verify the OTP, and complete the login using a function to verify where we pass the Twilio service SID to verify the verification checks, which will include the phone number and OTP. After finalizing the OTP verification, we will generate a token to complete the login process to verify secure routes for the JWT, which will allow routes to the required APIs. We can use middleware for routing and also limit requests with timestamps and database cache to deny requests if they exceeded a certain threshold.

What method do you recommend for implementing custom validation logic in type ORM that are not supported out of the box? So I'm not able to recall exactly, the method. We can't I can recommend custom validation logic and type out of the box. So, one I'm able to recall is, like, custom validations, like, the class validation, custom class validation, custom, decorators, defined custom validation decorators. We have, so far as I know, this I'm not pretty sure about.

How would you apply TypeScript decorators in a Node.js project to enhance modularity and readability of code? So, basically, we have to understand the concept of decorators. For example, we have logging, validation, authorization, dependency injection, and caching. So while implementing Node.js, we have to enable the experimental decorators by modifying the tsconfig.json file to enable decorators. And we'll create custom decorators, like the login decorator, authentication, validation decorator, and applying decorators from the dependency injection for route management in Express. If we're building an application using Express, we can decorate functions to define routes and improve readability by specifying the input and return types. This will lead to cleaner code, reusability, and improved readability and modularity. Types of decorators provide a robust mechanism to enhance the modularity and readability of our Node.js applications.