π Job Profile: OS Framework Development
π Now Face to Face interview with Amazon Development Centre, Taurus 2 Building, Bangalore
-
DSA round ( 2Q --> Binary Matrix + Binary Search Tree)
-
System Design Round ---> HLD --> Health Tracker System
-
Bar Raiser Round : 1Q Array ( Stack topic) + Behaviour Questions
-
Hiring Manager Round : Qualcomm Work related Q + Linux Scheduler + Linux CPUfreq Governor + Linux GIC driver + HR Q
- Technical Round: (online)
Qualcomm Work related Q + CPU idle Governor + DCVS Operation
Coding ( linked list)
π Arista Networks Private Limited, Bangalore Office
- Technical Round: Face to face interview
Qualcomm Work related Q + Usecase CPU Co-Processor over Linux Kernel Driver
Coding:
Design a generic linked list i.e
#define INT 0
#define FLOAT 1
#define CHAR 2
#define STRING 3
struct Node{
void *ptr;
Node *next
uint8_t type;
};
System Design :
IPv4 CIDR implementation using OOPs in C++
π All rounds are online
- Coding:
MySQL query using INNER JOIN, WHERE clause, GROUP BY clause
Coding: Area of Tringle in 2D graph points
Asked to design all test cases
I designed 10 test cases
Asked question from DBMS like Normalization ( 1NF, 2NF, 3NF and BCNF)
- Puzzle Question + SQL Query ( 30 mins round)
- Coding:
Hacker rank coding question ( Matrix + DFS)
Puzzle Question
MySQL query in Hackerrank
using OUTER JOIN, WHERE clause, IN clause, ORDER BY clause
- Basic Programming Round with critical optimization:
Implement stoi function
Implement a function that converts Integer to string
π why you used 2 times *(mul operation) , It consumes so much execution time
π Why you did not use >> in place of * in some cases where you can optimize
π why 2 times if the condition in the program? why 1 is not enough?
π why you wrote repeated lines in the code?
At the end, he said, "You are good in programming but not in optimizing"
π All rounds are online
-
Technical Round 1: Coding (2 Q, Array, matrix) + Puzzle (3 Q)+ Linux Basic
-
Technical Round 2 : Coding (5 Q, Array, stack, Graph, Sub Matrix Question, Dynamic Programming ) + Puzzle (1 Q)
-
Technical Round 3 : + Puzzle (2 Q) + Qualcomm related work
πΉ All rounds are online
even around the globe
-
HR telephonic Round : (HR is from India (even Bengali π ))
-
Screening Round: (Interviewer is from China) 1 Coding question (heap)
β
Google used a platform like Google Docs for coding
β
The interviewer will create the test case from his mind
β
You can not compile the code to check the error
β
You have to find the bugs in your code from your side
-
HR telephonic Round : Performance of the screening round won't be considered for final selection. Next rounds will only be considered for evaluation
-
Technical Round 1: ( Interviewer is from Korea) 1 Coding question (Matrix)
-
Technical Round 2: ( Interviewer is from China) 1 Coding question (Hash Table, Sorted BST (map in c++))
-
Technical Round 3: (Interviewer is from JAPAN) 1 Coding question (Tree)
-
Googleness Round : (Interviewer is from China) Behaviour Questions
-
HR telephonic Round : Feedback for last 4 rounds
πΉ Face to face interview at Samsung Semiconductor India Research SSIR, Bangalore
- Technical Round 1:
Coding 2 Q ( array, matrix)
Linux (OS concept)
Arm Architecture (Exception Level, ATF)
Questions from My Networking Open Source Contribution
Qualcomm related Questions
- Technical Round 2:
Qualcomm related Questions
Coding 2 Q ( 2 Pointers, Tree)
Linux Device Driver Implementation related questions
Arm Architecture ( CPU, pipeline)
Questions from My Research publication in Cloud computing
- Technical Round 3:
Coding 1 Q ( matrix)
Linux: CPU freq governor and CPU idle governor
Question from my Deep Learning project
Qualcomm related Questions
- Technical + Manegerial Round 3:
Qualcomm related Questions
Explained more about the Job profile and Samsung team culture
πΉ All rounds are online
1.Online Test: MCQ ( C++, Appti, Puzzle)
-
Screening Round:
Based on your written test + DSA concept + OOPs concept + OS concept Why you can able to correctly answer the hard question but made mistake in easy question? Checking my basics in each subject
-
Technical Round 1:
1 Coding question ( string ) in Hacker rank Qualcomm work-related questions Digital logic design subjective questions (Flip Flop, Latch, Sequential Circuit) C++ Conceptual questions : smart pointer, single tone class, OOPs questions
-
Technical Round 2:
1 Coding question ( matrix ) in Hacker rank Qualcomm work-related questions Digital logic design subjective questions (MUX, DEMUX, conversion from JK flipflop to T flipflop) C++ Conceptual questions: vTable, vPtr, Virtual class, function overloading, function hiding Details working principle of vTable for Parent, Child and super child class
-
Technical + Managerial Round:
Qualcomm work-related questions System Design Question --> HLD --> He draw a Network of circuit having FF, Latch, Delay circuit, OR, AND, NOT gate and all Desing a system for generic Network Circuit Explained about team culture and work
- Design a C++ compiler which takes a NN as input and generates an BLOB file which we can run on DSP
- That engine call as NEO in cadance
- Also one C Driver Development team is there for NEO engine
- It develops compiler to optimize NN engine for faster execution in DSP First 2 rounds are online and 3rd round was offline at Cadence Design Systems India Pvt Ltd
- Technical Round 1:
Operator Overloading and its example in code
System Design Question: Design a class in C++ for generic driver APIs exposed to outer world
=> driver: open, close, init, read(UART, SPI, I2C)
=> Used Concept: template + operator overloading+ friend function + function overloading
+ polymorphism + Data Abstraction + abstract class
templete <class X>;
class Communication{
private:
public:
void init(X ob){
}
void open(X ob){
}
void processing(X ob){
}
void terminate(X ob){
}
}
=> Matrix Rotation related question
=> Synchronization related question
int flag=1;
void lock(Mutex &m1){
while(flag==0);
flag=0;
// TSL => test and set lock
}
void unlock(Mutex &m2){
flag=1;
}
- Technical Round 2:
memcopy function Implementation
void swap(int a , int b){
a=a^b;
b=a^b; // a^b^b = a
a=a^b; // a^b^a= b
}
=> Run time binding using virtual function
#include <bits/stdc++.h>
using namespace std;
int main() {
int x;
int *ptr;
int &ref=x;
ptr=&x;
x=10;
cout<<*ptr<<endl;
cout<<ref<<endl;
return 0;
}
A ob1;
A ob2(ob1);
class A{
int val, data;
public:
A(int x,int y)val:x,data:y{
// parent constructor
val=x;
data=y;
}
A(const A &ob){ // copy constructor
A.val=ob.val;
A.data=ob.data;
}
virtual void foo(){
}
}
class B:public A{
public:
void foo(){
}
}
B *ob=new A();
B *ob=new B();
==> Implement pow function without using Math lib
25 ===> 5
5 == 2
100 00 00 === 1000 ( using O( sqrt(N) )
1 2 3 4 5 6 7....1000 --- > do it using binary search O(log N)
int foo(int x){
int i=1;
int ans=1;
while(i*i<=x){
ans=i;
i=i*2;
}
return ans;
}
- Technical Round 3:
1. Gate Score, NITK, Gap 1 year, LC questions
2. Qualcomm Snapdragon Performance & Power ()
---> CPUCP ---> DCVS
---> ACG
[ M1 ] ------- SCMI ---------- [ M2 ]
---> Linux ---> cpuFreq ---> cpuIdle
APP1 APP2
| |
\/ \/
CORE1 CORE2
[ ---- Circular Buffer -----]
APP1 - write() APP2- read()
I used flag = 0, 1, 0 ,1
if( flag==0){
if( loc1 < loc2){
}
}
else{
if( loc1 > loc2){
}
}
3. What is most beautiful satisfaction in Qualcomm
--> It was specific for Auto Motive SOC
--> I made it generalized for all Mobile, Auto, XR
How?
CD = { CD_st, CD0, CD1............., CD_end }
4. DL project ---> ok
MLD ( Memory Leak detection) lib
-----> could not able to explain MLD_algo ()
5. pattern=10110011
bits of streams are coming in
6. Sign Magnitude, 1's complement, 2's complement
7.
int b[5][10]; // 1000
int **a;
a=b;
cout<<a[2][3]; // 7
---> 1000 + (2*10 + 3 )*4
int c[100][200]; // 2000
a=c;
cout<<a[2][3]; // 10
Normally,
a=(int**)malloc(5*sizeof(int*));
...
a[i]=(int*)malloc(10*sizeof(int));
...
====================================
Think of Symbol Table:
====================================
b ---------- 0x1000 ( It has the information about b size 5*10 )
c ---------- 0x2000 ( It has the information about c size 100*200 )
a ---------- 0x333
===================================
malloc()
===================================
-- It has information about memory created and its size
when a----> 0x1000
It will have all the properties of address 0x1000
==================================
*(*(a+2)+3) = 999 ;
---> (a+2) == 1000+2*10*4 = 1080 ---> It is matrix address 1080
---> *(a+2) == 1080 ----> It will point to row address 1080
---> (*(a+2)+3) == 1080+12 = 1092 ---> It will point 3rd col of 2nd row
---> *(*(a+2)+3) == 1080+12 = 1092 ---> It will point "element (7th value)" of 3rd col of 2nd row
- Physics needs to learn
- No code writing in VHDL All rounds were online
- Technical Round 1:
1. Left view of BST
2. Check 2 tress are equal or not
3. Specific Requirement
class Tree{
private:
int val;
Tree *left;
Tree *right;
static map<int, *Tree> m;
public:
Tree(int value){
val=value;
this->left=nullptr;
this->right=nullptr;
}
Tree* first(){
auto it=m.begin();
return it->second;
}
Tree* next(Tree *root){ // In order
auto it=m.find(root->val);
it++;
return it->second;
}
void insert(int node){
Tree *root=new Tree(node);
m[node]=root;
}
}
Tree *root=new Tree(10);
// insert
root->first(); //
- Technical Round 2:
1. Cycle detection in Linked list
2. A Node deletion in BST
3. System Design Question -- Design Lift system
1 elevator -- 20 floors
class Elevator{
private:
vector<int> floor;
int noOfFloor;
int Dir; // 1 up 0 down
int CurrentFloor;
int lowestFloorReq, highestFloorReq;
public:
Elevator(int n){
Dir=1;
CurrentFloor=0;
noOfFloor=n;
floor.resize(n,0);
}
void InReq(int floorNo){
highestFloorReq=max(highestFloorReq,floorNo);
lowestFloorReq=min(lowestFloorReq,floorNo);
floor[floorNo]=1;
}
void OutReq(int floorNo){
highestFloorReq=max(highestFloorReq,floorNo);
lowestFloorReq=min(lowestFloorReq,floorNo);
floor[floorNo]=1;
}
void changeDir(){
Dir = Dir ^ 1;
}
void stop(){
delay(10);
}
void Move(){
if(Dir){ // Up
if(currentFloor<highestFloorReq){
if(Floor[currentFloor]){
stop();
Floor[currentFloor]=0;
}
}
else if(currentFloor==highestFloorReq){
highestFloorReq=0;
Dir = Dir ^ 1;
}
}
else{
}
}
};
- Test in different sub system like CPUSS, TPU, Sensor, Debug subsys, Camera Subsys
- Matching the KPI with precession
- We think how much precision we can add in the CPUSS
Both rounds were online
- Technical Round 1:
/*1.
Supported Functions:
1. `get(key)`: Retrieve the value associated with the key if the key exists in the cache, otherwise return -1.
2. `put(key, value)`: Update the value of the key if it exists. If it does not exist, insert the value. If the cache has reached its capacity, invalidate the least recently used item before inserting a new item.
Constraints:
1. `get` and `put` operations should run in O(1) time complexity.
2. Use only primitive data structures (arrays, linked lists, etc.) to implement.
*/
<int,int >
2 500
6 1000
insert --> top position O(1)
get ---> top position O(1)
balancing/processing --->
struct cache_t LRU_Cache;
struct Cache{
int maxCap;
int currentSize;
unordered_map<int,pair<int,int>> Hash;
map<int,int> BST;
long int time;
void put(int key,int val){
// Mutex Lock
if(currentSize<maxCap){
currentSize++;
time++;
Hash[key]={val,time};
BST[time]=key;
}
else{
auto it=BST.begin();
BST.erase(it);
time++;
Hash[key]={val,time};
BST[time]=key;
}
// Mutex Un Lock
}
int get(int key){
// Mutex Lock
if(Hash.find(key)==Hash.end()) return -1;
pair<int,int> temp=Hash[key];
int t=temp.second;
auto it=BST.find(t);
BST.erase(it);
time++;
BST[time]=key;
Hash[key]={temp.first,time};
return Hash[key].first;
// Mutex Un Lock
}
}cache_t;
/*
a = [a, b, c, d, e]
Rotate it left by 2 indices.
b = [ c, d, e, a, b]
d= [ d, e, a, b, c]
----------
e = 5
2 - [ 5 - 4] = 1
d
2 - [ 5 - 3] = 0
1. rotate the array
2. getelementbyindex(n) - O(1)
*/
struct Array{
int *arr;
int n;
int rotation_number;
void init(int number, int noOfRotation){
n=number;
rotation_number=noOfRotation%n;
arr=(int*)malloc(n*sizeof(int));
}
void rotate(int num){
num=num%n;
rotation_number=num;
// O(k*n)
for(int i=0;i<num;i++){ // k
int j=0;
int temp=arr[0];
while(j<n-1){ // n
arr[j-1]=arr[j];
j++;
}
arr[n-1]=temp;
}
}
int getElementByIndex(int index){
if(index>rotation_number) return arr[index-rotation_number];
else return arr[n-1-rotation_number-index];
}
};
/*
Consider a number, calculate how many bits need to be flipped in order for it to reach the nearest number which is an odd power of 2.
124 -> 128 (2^7)
200 -> 128 (2^7)
------
128 , 256
log(n) = k
2 k (nearest) ---- 1 set k-1 resets ---->
2 k-1
2 k+1
*/
int flipped(int n){
int k=log(n); // 200 --- 7 128 , 256
// 1100 1000
// 1000 0000
// 1 0000 0000
int low,high;
if(k%2==0){
low=k-1;
high=k+1;
}
else {
low=k;
high=k+2;
}
int cnt=0;
int first=pow(2,low), third=pow(2,high);
int nearest;
if(abs(n-first)< abs(n-third)) nearest=first;
else nearest=third;
if((n>>k & 1) != (nearest>>k & 1)) cnt++;
int i=k-1;
while(i>0){
if((n>>i & 1) == 1) cnt++;
i--;
}
return cnt;
}
/*
Tile a rectangular floor with the least number of square tiles.
*/
int MinNoOfTiles(int width, int len){
int cnt=0;
while(width*len!=0){
if(width>=len){
int temp=len;
len=width-len;
width=temp;
}
else{
int temp=width;
width=len-width;
len=temp;
}
cnt++;
//cout<<width<<" "<<len<<endl;
}
return cnt;
}
- Technical Round 2:
1. system Programming
--> Design a Server servicing M request coming from N clients
--> Take care of fork
--> take care of Zombie process, Orphan process etc.
2. Design a stress test
--> L1 D = 96KB L1 I=32 KB
--> L2 = 256 KB
--> L3 = 8 MB unified into 8 slices
3. What is AOP
4. What is ACG feature?
5. What is LPM, DCVS?
6. what are the important counters in CPUSS i.e PMU, AMU
7. what will be the bus size between CPU and Cache for a given xyz time?
8. Questions from Page Fault
9. How we Dedug in the system?
-> SDI (TZ) when abnormal behaviour detected
Pass 0: Copy the data into internal memory || AOP --> refresh the DDR
Pass 1: Internal memory to DDR
Pass 2: DRR to host system Hard Disk
- Technical Round 3:
1. Ask about my work in Details
2. Asked about my MLD project
--> Intriducted the Multithreading concept
--> I also provided the solution
- Technical Round 4:
- Googleness round taken by an Indian living in USA (google SD head quarter)