The on-site interview included 4 rounds, each part lasted about 45 minutes and there was a 15 minutes break between each part.
Before the interview, every interviewees had a free lunch together on the campus of Microsoft.
Round 1:

class Cordinate{
int x;
int y;
}
class Cell{
Cordinate c;
int val;
int h_span;
int v_span;
} Round 2:
Find the lowest common ancestor of two tree nodes. You have to define your own tree node. Those two nodes are not neccessarily in the same tree.
Input will be two tree nodes, and the output should a tree node too.
What's the time complexity? What if the tree is balanced tree?
public class TreeNode{
int val;
List<TreeNode> children;
TreeNode parent;
}
public TreeNode lowestCommonAncestor(TreeNode t1, TreeNode t2){
Set<TreeNode> set = new HashSet<>();
while(t1 != null){
set.add(t1);
t1 = t1.parent;
}
while(t2 != null){
if(!set.add(t2)){
return t2;
}
t2 = t2.parent;
}
return null;
)O(N), O(logN)
Round 3:
There are three functions, onKeyPress, onUploadStart, onUploadEnd,
When the users are typing, it will call onKeyPress function. After some specific time, it will call onUploadStart function. And then after another specific time, it will call onUploadEnd function.
You should find a way to return the timespan from onUploadEnd time to the first time you call onKeyPress function. Before onUploadStart being called, the users could have typed multiple time.

Follow-up: write some unitest code.
Follow-up 2: You should modify the function to make your function return multiple timespan, every onKeyPress before onUploadStart will be uploaded during that upload process.
Round 4:
https://leetcode.com/problems/same-tree/
public boolean isSameTree(TreeNode t1, TreeNode t2){
if(t1 == null && t2 == null){
return true;
}
else if(t1 == null || t2 == null || t1.val != t2.val){
return false;
}
else{
return isSameTree(t1.left, t2.left) && isSameTree(t1.right, t2.right);
}
}Time complexity: O(N)
All interviewers I've met were very nice and they helped me a lot.