D E Shaw Interview Questions
The IT industry has been on a boom for a few years and a company that is growing ever since in this sector is D.E. Shaw, which was established by David E. Shaw in 1998. It is a global investment and technology development firm that is driven by dynamic leadership and a diverse team of talented individuals. D.E Shaw has its offices in North America, Europe as well as in Asia.
In regards to work culture, DE Shaw has a great work culture with a good work-life balance. DE Shaw has great collaboration between the teams to build great projects where there are open discussions and people are ready to support. While working for DE Shaw you will get a lot of exposure which will help you in expanding your skillset. Even after being an employee for many years at DE Shaw, you will continue to feel challenged because of new learnings every day. According to its employees, DE Shaw is not just a workplace but a place where you will grow, learn and experience life, making it a great place for building a long and stable career. Now, before starting a career in a company you should know about their core values and hiding principles.
Now in this article, we will be covering many topics such as DE Shaw interview questions, internship interview questions, their interview process and tips on how to crack the interview. This article will help you in giving an edge over other candidates as these are the most commonly asked questions and will definitely help you in cracking a DE Shaw interview.
D E Shaw Recruitment Process
1. Interview Process
The DE Shaw interview process mainly consists of 4 rounds in which the interviewer will judge you on the basis of your problem-solving abilities i.e. how you approach a particular problem. Your technical, aptitude, as well as cognitive skills, will be judged in all the following rounds:
- Round 1: Coding round
- Round 2: Technical interview 1
- Round 3: Technical interview 2
- Round 4: HR Round
Among these, the first three rounds are very important as they all are elimination rounds. Clearing a DE Shaw interview is not easy, therefore you should be well prepared with all the concepts which will be asked in the interviews. Now let's discuss each and every round of DE Shaw’s interview process in detail.
2. Interview Rounds
1. Coding Round:
- In the online coding round, generally, 3 questions are given which have to be solved in a limited time frame.
- Apart from the coding questions, there will be 2 more sections consisting of MCQs on CS fundamentals such as OOPS, DBMS, CN, and aptitude questions as well. DE Shaw aptitude test is generally considered hard.
2. Technical Interview Round 1:
- You can expect two interviewers in the technical interview rounds and this round can start with a discussion of projects mentioned in your resume and your experience in the online assessment round.
- After this, you will be asked questions based on different data structures and the interviewer can also ask you to code your approach.
- You can be asked scenario-based questions and a couple of questions on CS fundamentals as well in this round.
3. Technical Interview Round 2:
- In this round, the interviewer generally asks you about your projects and your previous experiences like internships which you have mentioned in your resume.
- Your knowledge of CS fundamentals will also be tested in this round.
- You can also be asked questions based on data structures and algorithms along with some OOPS concepts.
- The interviewer might also discuss the work culture in D.E Shaw and your willingness to work with this company.
4. HR Round:
In this round, you will be asked general questions like
- Introduce yourself
- Project discussion
- Your strength and weaknesses
- How do you deal with failures
- What does D.E Shaw do?
- How was your experience with previous rounds
Along with these questions, you can also expect some situation-based questions, questions on CS fundamentals, system design questions(only low-level design questions for freshers), and logic of some Dsa questions as well.
D E Shaw Technical Interview Questions: Freshers and Experienced
1. Explain the term checksum error correction?
- Check is a term you will hear quite often in computer networks and as the name suggests, checksum means it is going to check the sum.
- So, the sender is going to create the message and with the message, it is going to calculate the checksum, and then it will attach the checksum to the message.
- On the sender’s side, the checksum is created and on the receiver's side checksum is validated.
- After the validation process, if the receiver confirms that there is no error then the data is accepted.
Let’s see how the checksum is created at the receiver’s side:
- The first step is to break the actual message into 'x' number of blocks i.e. 'n' bits per block.
- The next step is to calculate the sum of all the 'x' data blocks.
- If there is any carry then add it to the sum.
- Do 1's complement to the sum= Checksum.
CHECKSUM-EXAMPLE
Consider the data unit to be transmitted as:
10011001111000100010010010000100
i.e 10011001 11100010 00100100 10000100
Now the sender appends the checksum to the original message and sends it to the receiver.
Now the receiver
- First accumulates all the data blocks including the checksum.
- Then it calculates the sum of all the data blocks along with the checksum.
- If the final result includes all 1's, then it is accepted otherwise rejected.
This is known as checksum error detection.
2. What is a MAC address and it consists of how many bits?
- MAC address basically stands for Media Access Control.
- With the help of MAC addresses, each node on the Local Area Network is identified.
- These MAC addresses are unique and can’t be changed as these MAC addresses are assigned by the manufacturer.
- For example, Let’s suppose the IP Address is the location of a person then the MAC address would be the name of the person i.e. wherever he goes his name remains the same but the location changes.
- These MAC addresses are represented in hexadecimal. For checking the MAC or physical address you can go to the command prompt and type: ipconfig/aļl.
- There you will find the MAC address similar to this:
- The number of bits present in a MAC address is equal to 48.
3. Given an array arr, find the peak element in arr.
Problem Discussion:
You will be given an unsorted array containing integers. You are required to find the local maxima/peak element i.e. element whose value is greater than both its neighbours.
Note: The array can contain multiple peak values, therefore you can return any one of them.
Given: array[-1] = array[n] = -∞.
For example: If you are given an array [10,40,30,20,10,60,50] then the peak elements are 40 and 60;
Algorithm:
- A brute force approach could be iterating over all the elements one by one to find the peak elements which will take order of N time.
- We will solve it in a more optimised way, that is, we can use a modification of binary search in this question.
- First, find the element present in the middle and check whether it is greater than both its neighbouring elements. If it's greater then return the middle element.
- If the middle element is less than its left neighbouring element then the peak would lie on the left side of the array.
- If the middle element is less than its right neighbouring element then the peak will definitely lie on the right side of the array.
Corner cases:
If you are at the 0th or last element of the array then you have to compare the current element with only 1 neighbouring element because it's given in the question that array[-1] = array[n] = -∞.
Implementation:
int findPeakElement(vector<int>& nums) {
int low=0;
int high=nums.size()-1;
if(nums.size()==1){
return 0;
}
while(low<=high){
int mid=low+(high-low)/2;
if(mid>0 && mid<nums.size()-1){
if(nums[mid]>nums[mid+1] && nums[mid]>nums[mid-1]){
return mid;
}
else if(nums[mid]<nums[mid+1] && nums[mid]>nums[mid-1]){
low=mid+1;
}
else if(nums[mid]>nums[mid+1] && nums[mid]<nums[mid-1]){
high=mid-1;
}
else{
high=mid-1;
}
}
else if(mid==0){
if(nums[0]>nums[1]){
return 0;
}
else{
return 1;
}
}
else if(mid==nums.size()-1){
if(nums[nums.size()-1]>nums[nums.size()-2]){
return nums.size()-1;
}
else{
return nums.size()-2;
}
}
}
return -1;
}
Time and space analysis:
- Time complexity: We are using binary search, therefore time complexity will be logarithmic, i.e. O(logN) where N is the number of elements in the array.
- Auxiliary Space: O(1)
4. When is a switch considered congested?
When the data is transferred to the switch at a rate faster than the rate at which it can collect and store the data in the memory then the buffer space will be drained therefore there will be some packets that must be dropped in this state, which is referred to as a congested state.
5. Calculate the number of trailing 0’s in 100!.
Problem Discussion:
You are required to calculate the number of trailing zeroes that are present in 100!
For eg:
The number of trailing 0’s in 5! Is 1 as 5! Is equal to 120.
Now we will see a method in which we can calculate the number of trailing zeroes in any factorial without actually calculating the value of the factorial.
Let’s take a smaller example first. Suppose you have to find trailing zeroes in 10!.
10!=1*2*3*4……9*10
Now the number of trailing 0’s will be equal to the number of times 10 is present in 10!. So basically we have to find the number of times the factors of 10 i.e. 2 and 5 are coming. Also, the number of occurrences of 2 will be much larger than the occurrences of 5 therefore we just have to calculate the occurrences of 5.
Now the question arises, how to find the occurrences of 5?
This is given by a basic formula which tells how many times 5 is present in any factorial. So for calculating how many times 5 appear in 100!, we can use the formula:
You can neglect the 3rd term because it will be 0.
So, the answer will be 20+4=24 i.e. number of trailing 0’s present in 100! is 24.
6. Calculate product of array excluding the present value
Problem Discussion:
You are given array nums. You are required to return an array whose value at any index is equal to the product of all elements of the array excluding the value at nums[i] without the use of division.
Algorithm:
- First, we will create 2 arrays arr and arr2 and initialise them with 1.
- Each index of arr will store the product of all the elements up to ith index and each index of arr2 will store the product of all elements which are present at index greater than and equal to ith index.
- Now the value of our ans array at any index will be equal to arr[i-1]*arr2[i+1].
Corner Case:
- If i is at 0 aur nums.size()-1 then we will consider the value present at index -1 and nums.size() is 1.
Implementation:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int>arr(nums.size(),1);
vector<int>arr2(nums.size(),1);
int prod=1;
int prod2;
for(int i=0;i<nums.size();i++){
prod=prod*nums[i];
arr[i]=prod;
}
prod=1;
for(int i=nums.size()-1;i>=0;i--){
prod=prod*nums[i];
arr2[i]=prod;
}
vector<int>ans;
for(int i=0;i<nums.size();i++){
if(i==0){
int x=arr2[i+1];
ans.push_back(x);
}
else if(i==nums.size()-1){
int x=arr[i-1];
ans.push_back(x);
}
else{
int x=arr[i-1]*arr2[i+1];
ans.push_back(x);
}
}
return ans;
}
Now, to optimise the solution further by avoiding creating the arr which is used for storing the product of elements present at the left of the array. This is because we can calculate the product of the left side of the array while traversing the nums array just by storing the product in a variable.
Below is the implementation of the optimised approach:
vector<int> productExceptSelf(vector<int>& nums) {
vector<int>arr2(nums.size(),1);
int prod=1;
for(int i=nums.size()-1;i>=0;i--){
prod=prod*nums[i];
arr2[i]=prod;
}
vector<int>ans;
prod=1;
for(int i=0;i<nums.size();i++){
if(i==0){
int x=arr2[i+1];
ans.push_back(x);
}
else if(i==nums.size()-1){
prod=prod*nums[i-1];
ans.push_back(prod);
}
else{
prod=prod*nums[i-1];
int x=prod*arr2[i+1];
ans.push_back(x);
}
}
return ans;
}
Time and space analysis:
- Time complexity: O(N)
- Auxiliary space: O(N)
7. What is the use of volatile keyword in Java?
- Volatile variables allow multiple threads to modify the same value simultaneously, and classes can also use them to ensure thread safety.
- It tells the thread and the compiler to always access the values of the variable from memory as the value can vary anytime outside the scope of the code.
8. Maximum sum subtree
Problem Discussion:
In the input, you will be provided with the values that you have to put in the nodes of the generic tree.
You have to construct a generic tree and print the node having the maximum subtree. See the below image to understand the problem statement.
As you can see in the above image the subtree having the largest sum is represented by node 6.
Algorithm:
- Create a global variable to store the node containing the largest sum subtree.
- We will be using the idea that the maximum sum subtree contained by the node 0 is the sum of maximum sum subtrees represented by the child nodes of 0 + the value of the root node.
- Now you have to traverse the tree and while returning from a node you have to return the sum represented by the subtree of that node.
Implementation:
#include<bits/stdc++.h>
using namespace std;
class Node
{
public:
int val;
vector <Node*> children;
};
Node* construct(int arr[],int n)
{
Node *root;
stack <Node*> st;
Node *t=new Node;
t->val=arr[0];
st.push(t);
root=t;
for(int i=1;i<n;i++)
{
if(arr[i]==-1)
{
st.pop();
}
else
{
Node *top=st.top();
Node *t=new Node;
t->val=arr[i];
top->children.push_back(t);
st.push(t);
}
}
return root;
}
int maxsum=INT_MIN;
int maxsumnode=0;
int maxsumsubtree(Node* n){
int sum=0;
for(Node *child:n->children)
{
int sum1=maxsumsubtree(child);
sum=sum+sum1;
}
sum=sum+n->val;
if(sum>maxsum){
maxsum=sum;
maxsumnode=n->val;}
return sum;
}
int main()
{
int n;
cin>>n;
int *arr=new int[n];
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
Node *root=construct(arr,n);
int val;
cin>>val;
maxsumsubtree(root);
cout<<maxsumnode;
}
9. Could you please suggest some test cases for an ATM machine?
- Ensure that the slot in which the card is inserted is in accordance with the specifications
- Check whether the card and PIN are accepted by it or not
- Try to insert a credit card in the wrong way or use an old damaged card, or try to enter an inaccurate pin to verify that the error message is displayed
- Verify whether the touch screen is working properly or not
- Check the functionality of all the buttons present on the machine.
- If the user is inserting a valid card then a message should be displayed asking the user to enter the pin
- Ensure that the card is blocked after entering the inaccurate pin more than the allowed limit.
- Ensure that the user is not permitted to make more than 1 transaction after entering the PIN.
- As soon as the transaction is completed, ensure that the session expires after that and check the duration of time it takes for the system to log out
- Check for all other functionalities like whether the no cash in machine message is displayed, the language selection option is there, the invalid amount entered message should be displayed, daily limit exceeded message should be displayed, etc.
- The cash should come out of the machine after the user enters the details correctly.
- Check whether the machine is asking the user to print the receipt after a successful transaction.
- Confirm the receipt has the correct data printed on it.
10. Explain the terms demand - paging and pre-paging?
- You can consider demand paging as the process in which only demanded pages are brought to the memory, i.e. memory is only accessed when a particular location on a page is actually pointed or referenced throughout the execution of a process.
- With pre-paging, the requested pages, as well as the pages which are not demanded, are also brought to the memory location. The operating system calculates ahead of time which pages the process will need and loads them into memory in advance.
11. How can you implement queue using stack
Problem Discussion:
You are required to implement the en queue and de queue operations using the stack.
Algorithm:
- Two stacks, i.e. stack1 and stack2, will be required to perform the enqueue and dequeue operations of the queue.
- Imagine the top of stack1 as the rear end of the queue and the bottom of the stack as the front of the queue.
- Enqueue operation in the queue is equivalent to adding an element at the top of stack1 which can be performed in order of 1 time.
- Dequeue operation in the queue is equivalent to removing an element from the bottom of stack1 which can be performed by the following operations:
- Move all the elements of stack1 to stack2.
- Pop the top element from stack2
- Store it in a variable.
- Again, move all the elements of stack2 back to stack1.
- Return the top element which we stored in a variable
You can understand it through the following diagram:
Implementation:
#include<bits/stdc++.h>
using namespace std;
// Implementation of queue using stacks
stack<int> stack1;
stack<int> stack2;
void enqueue(int value) {
stack1.push(value);
}
int dequeue() {
if (stack1.empty()) {
return -1;
}
while (!stack1.empty()) {
int temp= stack1.top();
stack1.pop();
stack2.push(temp);
}
int top = stack2.top();
stack2.pop();
while (!stack2.empty()) {
int temp = stack2.top();
stack2.pop();
stack1.push(temp);
}
return top;
}
int main() {
enqueue(3);
enqueue(5);
enqueue(31);
cout<<dequeue()<<endl;
enqueue(87);
cout<<dequeue()<<endl;
cout<<dequeue()<<endl;
return 0;
}
Time and space analysis:
- Time complexity: Enqueue:O(1) Dequeue:O(N)
- Auxiliary Space: O(N)
- Follow up: Can you perform the enqueue operation in O(N) and dequeue operation in O(1) time using a similar approach?
12. Can you tell the time complexity for searching an element in a hashmap?
- Be it search, insert or delete the time taken by a Hashmap for performing these operations in Java is O(1),
- Note that O(1) is the best and average-case time but in the worst case it can go up to O(N).
13. How can you search for an element in a rotated sorted array?
Approach:
- To find an element in a rotated sorted array binary search can be used.
- First, we can find the element present at mid and check whether the left half of the array up to mid is sorted or not by using the condition arr[low]<=arr[mid].If it is sorted then we will check whether the target lies in this range or not.
- If the left half is not sorted then we can similarly check for the right half and if it satisfies then we will check whether the target lies in this range or not.
Implementation:
int search(vector<int>& arr, int x) {
int low=0;
int high=arr.size()-1;
while(low<=high){
int mid=low+(high-low)/2;
if(arr[mid]==x){
return mid;
}
if(arr[low]<=arr[mid]){
if(x>=arr[low] && x<arr[mid]){
high=mid-1;
}
else{
low=mid+1;
}
}
else if(arr[mid]<arr[high]){
if(x>arr[mid] && x<=arr[high]){
low=mid+1;
}
else{
high=mid-1;
}
}
}
return -1;
}
14. What do you mean by semantic gap?
A semantic gap is a difference between two domains i.e consider the difference between an HLL that is used by many computer languages and the machine language i.e binary instructions in the form and 0 and 1 used by microprocessors.
15. Sort an array relatively.
Problem Discussion:
You are given 2 arrays. All the elements of the second array are present in the first array, but the first array additionally contains elements that are not present in the second array.
Note: All elements in the second array are distinct.
You have to sort the elements of the first array so that all the elements come in the same order as the second array and elements of the first array that do not appear in the second array should be placed at the end of the first array in a sorted manner.
For eg:
Input:
Array1=[2, 1, 2, 5, 7, 1, 9, 3, 6, 8, 8
Array2=[2, 1,8, 3]
Output:
2 2 1 1 8 8 3 5 6 7 9
Algorithm:
- We will use a map for solving this problem.
- First of all, fill all the elements of array1 in a map along with their frequencies i.e the number of times they are occurring.
- Then iterate over the second array and check whether the element is present in the map or not. If it is present then store it in a result and erase it from the map.
- At last, add the remaining elements of array1 into the result
Implementation:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
vector<int> result;
map<int, int> interviewbit_map;
for(auto a : arr1){
interviewbit_map[a]++;
}
for(auto a : arr2){
if(interviewbit_map[a]){
int count = interviewbit_map[a];
for(int jtr = 0; jtr < count; jtr++){
result.push_back(a);
}
interviewbit_map.erase(a);
}
}
for(auto m : interviewbit_map){
int count = m.second;
for(int jtr = 0; jtr < count; jtr++){
result.push_back(m.first);
}
}
return result;
}
Time and space analysis:
- Time Complexity = O(N * Log(N))
- Space Complexity = O(N)
16. Determine if there is any subarray present whose sum is 0
Problem Discussion:
You will be given an array in input and you have to determine whether there is any subarray or not whose sum is equal to 0.
Note: The array can contain both positive and negative elements
Algorithm:
- A brute force approach could be to use a nested loop for traversing the elements and check whether the sum is equal to 0 or not, but that would take an order of N^2 time.
- To solve the problem in O(N) time we will be using a set.
- Traverse the array is check for three conditions:
- If the current element is 0
- If the current sum is present is set
- If the current sum is 0
- If any of the above conditions satisfies, then return true in that case
Implementation:
#include<bits/stdc++.h>
using namespace std;
bool isSubArraypresentWith0Sum(int nums[], int n)
{
unordered_set<int> interviewbit_Set;
int sum = 0;
for (int i = 0 ; i < n ; i++)
{
sum += nums[i];
if (sum == 0 || interviewbit_Set.find(sum) != interviewbit_Set.end())
return true;
interviewbit_Set.insert(sum);
}
return false;
}
int main()
{
int nums[] = {-3, 2, 1, 9, 6};
int n = sizeof(nums)/sizeof(nums[0]);
if (isSubArraypresentWith0Sum(nums, n))
cout << "Found, A subarray with sum 0 in present";
else
cout << "Not found, A subarray with sum 0 is not present";
return 0;
}
17. What is a semaphore and what are its uses?
- Semaphores are basically used to synchronise the processes and these are of 2 different types namely binary semaphore and counting semaphore.
- It is an integer variable that is shared by a lot of processes in a mutually exclusive manner.
- Some of the uses of semaphores are:
- In counting semaphores the values vary from -infinity to +infinity but in binary semaphores, only 0 and 1 are used which is its main advantage.
- The need to check if a condition is met before allowing the process to access a critical section is eliminated, so no resources are wasted waiting in semaphores.
- The microkernel executes semaphores independent of the machine on which it's working. Therefore, they are independent of the hardware.
18. What does cycle stealing mean?
- Using cycle stealing, which is a DMA transfer method, we can access Random Access Memory or the bus without interrupting the CPU or forcing the CPU to interrupt its operations.
- DMA controllers use cycle stealing to transfer one word at a time, then return control of buses back to the central processing unit.
- It is used by mainly slow devices and an example of a device that uses it is a keyboard.
19. Values in a given range of elements
Problem Discussion:
You will be given an array and two integers r1 and r2. You are required to find the count of the number of elements present in the given range of r1 and r2 i.e. r1 and r2 inclusive.
Note: The array given is unsorted.
For eg:
Array=[1, 3, 5, 2]
r1=1
r2=5
Output: 4
Algorithm:
- An efficient way of solving this problem is to use binary search.
- First of all, sort the array to apply binary search
- We will apply the binary search for r1 to find its index.
- Similarly, apply the binary search for r2 to find its index
- Once you get both the indices, find the difference in r1 and r2 and add 1 to it to count the exact number of elements present in the given range.
Implementation:
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int loweridx(int arr[], int n, int x)
{
int left = 0, right = n - 1;
while (left <= right )
{
int mid = (left + right ) / 2;
if (arr[mid] >= x)
right = mid - 1;
else
left = mid + 1;
}
return left;
}
int higheridx(int arr[], int n, int y)
{
int left = 0, right = n - 1;
while (left <= right )
{
int mid = (left+ right ) / 2;
if (arr[mid] <= y)
left = mid + 1;
else
right = mid - 1;
}
return right ;
}
int count_the_elements(int arr[], int n, int r1, int r2)
{
int count = 0;
count = higheridx(arr, n, r2) - loweridx(arr, n, r1) + 1;
return count;
}
int main()
{
int arr[] = {1,3,5,2 };
int n = sizeof(arr) / sizeof(arr[0]);
sort(arr, arr + n);
int i = 1, j = 5;
cout << count_the_elements(arr, n, i, j) << endl;
}
Time and space analysis:
- Time complexity: O(logN), where n is the number of elements in the array.
- Auxiliary complexity: O(1) because we have not used any extra space.
20. State some design issues of a computer network.
- Reliability-The channels through which the data flows can be unreliable, which is undesirable as it results in loss of data while transferring.
- Scalability-The network should be scalable as sometimes the network can become very large and with the evolution of new technologies, compatibility-related issues can also occur.
- Addressing-Because messages are transmitted between large numbers of senders and receivers, all the information about the senders and receivers should be available so the correct message can be delivered to the correct receiver.
- Error Control-Errors can occur while transferring a message due to various reasons, so both the senders as well as the receiver must agree upon using a standard error detection technique.
- Flow Control-The rate at which the data is sent by the sender should match the rate at which the receiver can receive it to avoid the loss of data.
- Security-Data communication needs to be protected against threats and falsely altered messages. So techniques such as authentication should be used to protect the data.
Useful Resources
D E Shaw Interview Preparation
1. Interview Preparation Tips
- Practice Daily: Your problem-solving ability should be good and you should develop a habit of practising a particular problem within a given time frame.
- Core Subjects: Don’t neglect topics other than data structures and algorithms such as OOPS, DBMS, OS, CN, etc. as these are also important.
- Aptitude: You should also practice aptitude questions to perform well in the coding round.
- Keep your basics clear: You should be good with all the basics and your thought process should be clear i.e. you should be able to explain to the interviewer how you are going to approach a particular problem.
- Be Confident: Don’t panic when you are stuck on a question in the interview as the interviewer will always be there to help you.
- Communication Skills: Good communication skills will give you an edge in the interview over other candidates because the interviewer just wants to check your thought process and how you approach a problem even if you were not able to solve a particular problem.
Frequently Asked Questions
1. Are DE Shaw interviews tough?
D.E Shaw mainly focuses on your problem-solving abilities and how you approach a particular problem because they believe in hiring employees with extraordinary skills. So you should be well prepared for the interviews. The interviewers will go into the depths of every topic but if you are clear with the fundamentals and have practised enough to develop your problem-solving skills then you can easily crack the DE Shaw interview.
2. How long is DE Shaw's interview?
In the coding round, you will get 20-30 minutes for coding questions and 30-50 minutes for solving the MCQ sections. As far as technical interviews are concerned, they can be stretched over to 1 to 1.5 hr generally depending on the interviewers.
All technical rounds are conducted on the same day and the HR round is conducted after you qualify in the technical rounds.
3. What is the Eligibility Criteria at DE Shaw?
- Interested students in IT, CSE, ECE, MCA, and M.Tech are welcome to apply for D E Shaw campus recruitment.
- The candidate's percentage should be above 65 in high school to be eligible for DE Shaw.
- If a candidate has a backlog in his college in any semester then he is not eligible.
- Communication skills and teamwork skills are important.