issue 117apr 27mmxxvi
est. 2017
Sun, 27 Apr 2026
vol. IX · no. 117
PapersAdda
placement intelligence, since 2017
868 briefs · 24 campuses · by reservation
verified offers · sourced from r/developersIndia
razorpay₹65.00 LPA· iit-d · sde-1google₹54.00 LPA· iiit-h · swe-imicrosoft₹49.50 LPA· iit-b · sdeatlassian₹38.00 LPA· nit-w · sde-1amazon₹44.20 LPA· bits-p · sde-1uber₹42.00 LPA· iit-kgp · sde-1razorpay₹65.00 LPA· iit-d · sde-1google₹54.00 LPA· iiit-h · swe-imicrosoft₹49.50 LPA· iit-b · sdeatlassian₹38.00 LPA· nit-w · sde-1amazon₹44.20 LPA· bits-p · sde-1uber₹42.00 LPA· iit-kgp · sde-1
Placement PapersExam PatternSyllabus 2026Prep RoadmapInterview GuideEligibilitySalary GuideCutoff Trends

Salesforce India Placement Papers 2026

12 min read
Company Placement Papers
Last Updated: 1 May 2026
Reviewed by PapersAdda Editorial

Meta Description: Salesforce India placement papers 2026 with latest exam pattern, coding questions, CRM interview tips, and preparation strategy. Crack Salesforce with PapersAdda!


Introduction

Salesforce India is a pioneer in cloud-based CRM solutions and enterprise software. With development centers in Hyderabad and Bangalore, Salesforce offers exciting opportunities in cloud computing, AI (Einstein), and platform development. Known for its exceptional work culture and employee benefits, Salesforce is a dream employer for many tech professionals. This guide covers the complete Salesforce India 2026 placement process.


Salesforce India Exam & Interview Pattern 2026

RoundTypeDurationTopics Covered
Round 1Online Coding Test90 minsData Structures, Algorithms, Aptitude
Round 2Technical Interview 160 minsCoding, Problem-solving, OOP concepts
Round 3Technical Interview 260 minsSystem Design, Scalability, Architecture
Round 4Technical Interview 360 minsAdvanced coding, Project discussion
Round 5Cultural/Values Interview45 minsBehavioral, Salesforce values alignment
Round 6Hiring Manager45 minsTeam fit, Career aspirations

Key Highlights:

  • Strong emphasis on object-oriented design
  • System design questions are common even for freshers
  • Cultural fit is extremely important at Salesforce
  • Questions often relate to CRM and cloud concepts

Practice Questions with Detailed Answers

Question 1: Design Parking Lot System

Problem: Design an object-oriented parking lot system.

Solution:

from enum import Enum
from typing import List, Optional

class VehicleType(Enum):
    MOTORCYCLE = 1
    CAR = 2
    BUS = 3

class Vehicle:
    def __init__(self, license_plate: str, vehicle_type: VehicleType):
        self.license_plate = license_plate
        self.vehicle_type = vehicle_type
        self.spot = None

class ParkingSpot:
    def __init__(self, spot_id: int, spot_type: VehicleType):
        self.spot_id = spot_id
        self.spot_type = spot_type
        self.vehicle = None
        self.is_occupied = False
    
    def can_fit(self, vehicle: Vehicle) -> bool:
        return not self.is_occupied and vehicle.vehicle_type.value <= self.spot_type.value
    
    def park(self, vehicle: Vehicle) -> bool:
        if self.can_fit(vehicle):
            self.vehicle = vehicle
            self.is_occupied = True
            vehicle.spot = self
            return True
        return False
    
    def remove(self):
        if self.vehicle:
            self.vehicle.spot = None
            self.vehicle = None
            self.is_occupied = False

class ParkingLevel:
    def __init__(self, level_id: int, num_spots: int):
        self.level_id = level_id
        self.spots: List[ParkingSpot] = []
        self._initialize_spots(num_spots)
    
    def _initialize_spots(self, num_spots: int):
        # 50% motorcycle, 40% car, 10% bus spots
        for i in range(num_spots):
            if i < num_spots * 0.5:
                self.spots.append(ParkingSpot(i, VehicleType.MOTORCYCLE))
            elif i < num_spots * 0.9:
                self.spots.append(ParkingSpot(i, VehicleType.CAR))
            else:
                self.spots.append(ParkingSpot(i, VehicleType.BUS))
    
    def park(self, vehicle: Vehicle) -> bool:
        for spot in self.spots:
            if spot.park(vehicle):
                return True
        return False
    
    def remove(self, spot_id: int):
        for spot in self.spots:
            if spot.spot_id == spot_id:
                spot.remove()
                return True
        return False

class ParkingLot:
    def __init__(self, num_levels: int, spots_per_level: int):
        self.levels: List[ParkingLevel] = []
        for i in range(num_levels):
            self.levels.append(ParkingLevel(i, spots_per_level))
    
    def park(self, vehicle: Vehicle) -> bool:
        for level in self.levels:
            if level.park(vehicle):
                return True
        return False
    
    def remove(self, level_id: int, spot_id: int):
        if level_id < len(self.levels):
            return self.levels[level_id].remove(spot_id)
        return False

Question 2: Design LRU Cache

Problem: Design and implement an LRU (Least Recently Used) cache with O(1) operations.

Solution:

class Node:
    def __init__(self, key=0, value=0):
        self.key = key
        self.value = value
        self.prev = None
        self.next = None

class LRUCache:
    def __init__(self, capacity: int):
        self.capacity = capacity
        self.cache = {}
        self.head = Node()
        self.tail = Node()
        self.head.next = self.tail
        self.tail.prev = self.head
        self.size = 0
    
    def _add_to_head(self, node: Node):
        node.prev = self.head
        node.next = self.head.next
        self.head.next.prev = node
        self.head.next = node
    
    def _remove_node(self, node: Node):
        prev = node.prev
        new = node.next
        prev.next = new
        new.prev = prev
    
    def _move_to_head(self, node: Node):
        self._remove_node(node)
        self._add_to_head(node)
    
    def _pop_tail(self) -> Node:
        res = self.tail.prev
        self._remove_node(res)
        return res
    
    def get(self, key: int) -> int:
        node = self.cache.get(key)
        if not node:
            return -1
        self._move_to_head(node)
        return node.value
    
    def put(self, key: int, value: int):
        node = self.cache.get(key)
        if not node:
            new_node = Node(key, value)
            self.cache[key] = new_node
            self._add_to_head(new_node)
            self.size += 1
            
            if self.size > self.capacity:
                tail = self._pop_tail()
                del self.cache[tail.key]
                self.size -= 1
        else:
            node.value = value
            self._move_to_head(node)

Question 3: Rate Limiter Design

Problem: Design a rate limiter that limits API calls to N requests per minute per user.

Solution:

from collections import deque
import time

class RateLimiter:
    def __init__(self, max_requests: int, window_seconds: int):
        self.max_requests = max_requests
        self.window_seconds = window_seconds
        self.user_requests = {}  # user_id -> deque of timestamps
    
    def is_allowed(self, user_id: str) -> bool:
        current_time = time.time()
        
        if user_id not in self.user_requests:
            self.user_requests[user_id] = deque()
        
        requests = self.user_requests[user_id]
        
        # Remove old requests outside the window
        while requests and requests[0] <= current_time - self.window_seconds:
            requests.popleft()
        
        if len(requests) < self.max_requests:
            requests.append(current_time)
            return True
        
        return False

# Sliding window counter approach
class SlidingWindowRateLimiter:
    def __init__(self, max_requests: int, window_minutes: int):
        self.max_requests = max_requests
        self.window_minutes = window_minutes
        self.user_windows = {}  # user_id -> {timestamp: count}
    
    def is_allowed(self, user_id: str) -> bool:
        import time
        current_minute = int(time.time() / 60)
        
        if user_id not in self.user_windows:
            self.user_windows[user_id] = {}
        
        window = self.user_windows[user_id]
        
        # Remove old windows
        for minute in list(window.keys()):
            if minute < current_minute - self.window_minutes:
                del window[minute]
        
        # Count total requests in window
        total = sum(window.values())
        
        if total < self.max_requests:
            window[current_minute] = window.get(current_minute, 0) + 1
            return True
        
        return False

Question 4: Design Twitter

Problem: Design a simplified version of Twitter where users can post tweets, follow/unfollow, and see the 10 most recent tweets in their news feed.

Solution:

import heapq
from collections import defaultdict
from datetime import datetime

class Tweet:
    def __init__(self, tweet_id: int, timestamp: datetime):
        self.tweet_id = tweet_id
        self.timestamp = timestamp
    
    def __lt__(self, other):
        # For max heap, we want most recent first
        return self.timestamp > other.timestamp

class Twitter:
    def __init__(self):
        self.timestamp = 0
        self.user_tweets = defaultdict(list)  # user_id -> list of tweets
        self.user_following = defaultdict(set)  # user_id -> set of followees
    
    def postTweet(self, userId: int, tweetId: int):
        self.timestamp += 1
        tweet = Tweet(tweetId, self.timestamp)
        self.user_tweets[userId].append(tweet)
    
    def getNewsFeed(self, userId: int):
        # Get all followees including self
        followees = self.user_following[userId].copy()
        followees.add(userId)
        
        # Max heap for most recent tweets
        heap = []
        
        for followee in followees:
            if followee in self.user_tweets:
                tweets = self.user_tweets[followee]
                if tweets:
                    # Push the most recent tweet from each followee
                    heapq.heappush(heap, tweets[-1])
        
        result = []
        while heap and len(result) < 10:
            tweet = heapq.heappop(heap)
            result.append(tweet.tweet_id)
            
            # Find which user this tweet belongs to
            for followee in followees:
                if followee in self.user_tweets and self.user_tweets[followee]:
                    if self.user_tweets[followee][-1].tweet_id == tweet.tweet_id:
                        # Remove this tweet from user's list
                        self.user_tweets[followee].pop()
                        # Push next most recent if exists
                        if self.user_tweets[followee]:
                            heapq.heappush(heap, self.user_tweets[followee][-1])
                        break
        
        return result
    
    def follow(self, followerId: int, followeeId: int):
        if followerId != followeeId:
            self.user_following[followerId].add(followeeId)
    
    def unfollow(self, followerId: int, followeeId: int):
        if followeeId in self.user_following[followerId]:
            self.user_following[followerId].remove(followeeId)

Question 5: Design Tic-Tac-Toe

Problem: Design a Tic-Tac-Toe game that is played between two players on an n x n grid.

Solution:

class TicTacToe:
    def __init__(self, n: int):
        self.n = n
        self.rows = [0] * n
        self.cols = [0] * n
        self.diag = 0
        self.anti_diag = 0
    
    def move(self, row: int, col: int, player: int) -> int:
        # Player 1: +1, Player 2: -1
        value = 1 if player == 1 else -1
        
        self.rows[row] += value
        self.cols[col] += value
        
        if row == col:
            self.diag += value
        
        if row + col == self.n - 1:
            self.anti_diag += value
        
        # Check if player wins
        if (abs(self.rows[row]) == self.n or
            abs(self.cols[col]) == self.n or
            abs(self.diag) == self.n or
            abs(self.anti_diag) == self.n):
            return player
        
        return 0

Question 6: Design Snake Game

Problem: Design a Snake game that runs on a device with screen height = height and screen width = width.

Solution:

from collections import deque

class SnakeGame:
    def __init__(self, width: int, height: int, food: List[List[int]]):
        self.width = width
        self.height = height
        self.food = deque(food)
        self.snake = deque([(0, 0)])
        self.snake_set = {(0, 0)}
        self.score = 0
        self.directions = {
            'U': (-1, 0),
            'D': (1, 0),
            'L': (0, -1),
            'R': (0, 1)
        }
    
    def move(self, direction: str) -> int:
        dr, dc = self.directions[direction]
        head_r, head_c = self.snake[0]
        new_head = (head_r + dr, head_c + dc)
        
        # Check boundaries
        if (new_head[0] < 0 or new_head[0] >= self.height or
            new_head[1] < 0 or new_head[1] >= self.width):
            return -1
        
        # Check if food exists at new head
        if self.food and list(new_head) == self.food[0]:
            self.food.popleft()
            self.score += 1
        else:
            # Remove tail if no food eaten
            tail = self.snake.pop()
            self.snake_set.remove(tail)
        
        # Check if snake hits itself
        if new_head in self.snake_set:
            return -1
        
        # Add new head
        self.snake.appendleft(new_head)
        self.snake_set.add(new_head)
        
        return self.score

Question 7: Design Search Autocomplete System

Problem: Design a search autocomplete system for a search engine.

Solution:

from collections import defaultdict
import heapq

class TrieNode:
    def __init__(self):
        self.children = {}
        self.sentences = defaultdict(int)

class AutocompleteSystem:
    def __init__(self, sentences: List[str], times: List[int]):
        self.root = TrieNode()
        self.current_input = ""
        
        # Build trie
        for sentence, time in zip(sentences, times):
            self._add_sentence(sentence, time)
    
    def _add_sentence(self, sentence: str, time: int):
        node = self.root
        for char in sentence:
            if char not in node.children:
                node.children[char] = TrieNode()
            node = node.children[char]
            node.sentences[sentence] += time
    
    def input(self, c: str) -> List[str]:
        if c == '#':
            self._add_sentence(self.current_input, 1)
            self.current_input = ""
            return []
        
        self.current_input += c
        
        # Search for sentences with current prefix
        node = self.root
        for char in self.current_input:
            if char not in node.children:
                return []
            node = node.children[char]
        
        # Get top 3 sentences
        heap = []
        for sentence, count in node.sentences.items():
            heapq.heappush(heap, (-count, sentence))
        
        result = []
        for _ in range(min(3, len(heap))):
            result.append(heapq.heappop(heap)[1])
        
        return result

Question 8: Design File System

Problem: Design a file system that supports creating new paths and getting values at paths.

Solution:

class FileSystem:
    def __init__(self):
        self.root = {}
    
    def createPath(self, path: str, value: int) -> bool:
        if path == "" or path == "/":
            return False
        
        parts = path.strip("/").split("/")
        node = self.root
        
        # Check if parent exists
        for i in range(len(parts) - 1):
            if parts[i] not in node:
                return False
            node = node[parts[i]]
        
        # Check if path already exists
        if parts[-1] in node:
            return False
        
        # Create path
        node[parts[-1]] = {"_value": value}
        return True
    
    def get(self, path: str) -> int:
        parts = path.strip("/").split("/")
        node = self.root
        
        for part in parts:
            if part not in node:
                return -1
            node = node[part]
        
        return node.get("_value", -1)

Question 9: Design Browser History

Problem: Design a browser history system that supports visiting URLs, going back, and going forward.

Solution:

class BrowserHistory:
    def __init__(self, homepage: str):
        self.history = [homepage]
        self.current = 0
        self.last = 0
    
    def visit(self, url: str):
        self.current += 1
        if self.current < len(self.history):
            self.history[self.current] = url
        else:
            self.history.append(url)
        self.last = self.current
    
    def back(self, steps: int) -> str:
        self.current = max(0, self.current - steps)
        return self.history[self.current]
    
    def forward(self, steps: int) -> str:
        self.current = min(self.last, self.current + steps)
        return self.history[self.current]

Question 10: Design Hit Counter

Problem: Design a hit counter which


You May Also Like

Frequently Asked Questions

What is the expected salary range for Salesforce India placements in 2026?

Salesforce India offers competitive packages that typically vary by role (SDE, QA, Analyst, or CRM/Support) and candidate profile. For 2026 placements, many offers commonly fall in the mid to high range for top campus hires, with additional components like performance bonuses, stock/ESOPs (where applicable), and relocation benefits depending on the offer letter.

What are the eligibility criteria for Salesforce India campus placements?

Most Salesforce India drives expect candidates to be in the final year or pre-final year (depending on the company’s policy for that cycle) with a strong academic record and relevant coursework. You should also be comfortable with core CS fundamentals, basic programming, and CRM/Cloud concepts if applying for product/CRM-related roles.

How difficult is the Salesforce India placement process compared to other tech companies?

The process is generally considered moderately to highly competitive because it evaluates both problem-solving and role-specific understanding (especially for CRM/Cloud). Difficulty often comes from a mix of coding/DSA, scenario-based questions, and interview rounds that test communication, ownership, and practical thinking.

What preparation strategy works best for Salesforce India placement papers 2026?

Start with the latest exam pattern and practice a curated set of coding problems focused on arrays, strings, hashing, stacks/queues, trees/graphs basics, and dynamic programming fundamentals. Parallelly, prepare CRM/Cloud fundamentals (Salesforce ecosystem, data model basics, automation concepts) and practice structured answers for behavioral questions.

What are the interview rounds for Salesforce India placements in 2026?

A typical flow includes an online assessment (coding and/or aptitude), followed by one or more technical interviews. Many candidates also face behavioral/HR rounds to evaluate communication, teamwork, and problem ownership, and some roles may include role-specific discussions (CRM, product thinking, or QA/automation).

What common topics appear in Salesforce India placement questions?

For coding rounds, expect frequent coverage of DSA topics like hashing, sliding window, two pointers, recursion/backtracking, greedy approaches, and basic graph traversal. For CRM/Cloud-related discussions, common topics include Salesforce objects/records, relationships, workflows/automation basics, and how CRM data is used to solve business problems.

How can I apply for Salesforce India placements using the latest exam pattern and papers?

You usually apply through your college’s placement portal or the company’s campus recruitment link shared by the institute. After applying, use the latest Salesforce India placement papers 2026 resources to match the current assessment pattern, then practice mock tests under timed conditions and review solutions thoroughly.

What is the selection rate for Salesforce India placements, and how can I improve it?

Selection rates vary widely by campus, role, and applicant pool, but they are typically competitive due to multiple screening stages and technical depth requirements. To improve your odds, focus on consistent coding performance in timed tests, strengthen fundamentals, prepare CRM/Cloud basics for relevant roles, and ensure your behavioral answers are specific, measurable, and outcome-driven.

Explore this topic cluster

More resources in Company Placement Papers

Use the category hub to browse similar questions, exam patterns, salary guides, and preparation resources related to this topic.

Company hub

Explore all Salesforce India resources

Open the Salesforce India hub to jump between placement papers, interview questions, salary guides, and other related pages in one place.

Open Salesforce India hub

Paid contributor programme

Sat Salesforce India this year? Share your story, earn ₹500.

First-person experience reports help future candidates prep smarter. We pay verified contributors ₹500 via UPI per accepted story — with byline.

Submit your story →

Ready to practice?

Take a free timed mock test

Put what you learned into practice. Our mock tests match the 2026 pattern with timer, navigator, reveal, and score breakdown. No signup.

Start Free Mock Test →

Related Articles

More from PapersAdda

Share this guide: