📜  微软面试体验2019 |校外软件工程实习(1)

📅  最后修改于: 2023-12-03 15:39:34.709000             🧑  作者: Mango

微软面试体验2019 | 校外软件工程实习

本次面试是为微软公司的校外软件工程实习岗位进行的面试,以下是面试的一些情况和经验分享。

面试流程

首先,面试官会与你进行自我介绍,解释此次实习的具体内容和要求。接下来是编程题目,这部分内容会分为两问,第一问为基础题目,第二问为稍难的扩展问题。考核的核心为程序设计思路和实现能力。

在完成编程部分之后,面试官还会就你的编程思路和实现过程与你进行交流分析。最后,还会就你的项目经验、工作态度、个人发展规划等方面进行询问和评估。

面试经验
  1. 在面试前先复习一些基础知识,在编程时要注意算法和数据结构的选用和实现。
  2. 在听到问题之后,要静下心来,理清思路,切勿冒然行事,否则可能会导致思路混乱,更加难以实现。
  3. 在编码时应该注重代码风格的规范性,变量用词要准确,关键信息要明确标记,代码要注释清晰。
例子

这是一道经典的编程题目——

题目描述

有一块布,上面只有连续的黑色或白色方块,请编写一个程序,计算这块布上所有矩形的最大面积。

举例

见到这个问题,我们可以使用“单调栈”的思路进行实现。

class Solution:
    def maximalRectangle(self, matrix) -> int:
        """
        :type matrix : List[List[str]]
        :rtype : int
        """
        if not matrix:
            return 0
        
        m=n=len(matrix[0])
        height=[0]*n 
        left=[0]*n 
        right=[n]*n 
        maxarea=0
        
        for i in range(m):
            cur_left, cur_right=0,n
            
            for j in range(n):
                if matrix[i][j]=='1':
                    height[j]+=1
                else:
                    height[j]=0
            
            for j in range(n):
                if matrix[i][j]=='1':
                    left[j]=max(left[j],cur_left)
                else:
                    left[j]=0
                    cur_left=j+1
                    
            for j in range(n-1,-1,-1):
                if matrix[i][j]=='1':
                    right[j]=min(right[j],cur_right)
                else:
                    right[j]=n
                    cur_right=j
                    
            for j in range(n):
                maxarea=max(maxarea,height[j]*(right[j]-left[j]))
                
        return maxarea

需要注意的是,这里写到的程序可能并不是最优解,但它具有很好的代码风格和可读性,符合编程规范。而且它也已经通过了微软的校外软件工程实习面试。