面试总结+力扣第二天刷题

一.面试总结

        4月20号下午进行了一场大数据视频面试,总结一下踩坑点:

       1.确定面试后,第一件事要和HR确定面试方式,具体时间、地点、什么软件、岗位JD等必须信息。

        这里很多人有一个思想误区,认为问的太多会给HR不好的印象;其实大可不必,如果你通过了简历筛选,你就有权力使用公司招聘的人力资源。

        2.要在面试10分钟前就进入面试的环境中,以防突发事件。

        3.面试最开始都会有一个自我介绍环节,这个自我介绍环节,一定要慎之又慎,最好写下来,让朋友、长辈等审核多遍。

        注:我面试时,在这踩了一个坑,自我介绍的时候踩了我要面试的岗位一脚,被技术面试官抓住了这一点,让自己陷入了被动。

        面试后做复盘,朋友给了我一个更好的说法。

        4.问答环节中,一定要准备齐全,切忌好高骛远。各方面的问题都要准备。

        注:当时我在这里踩了坑。我面试的是大数据岗位,我把大数据架构zookeeper、Hdfs、MapReduce、Yarn等都做了准备。但面试官开始直接问Linux命令、Mysql语法。

        所以如果面试与数据相关岗位,一定要把Linux命令、Mysql等准备好。很可能他们公司并不一定用你学的大数据架构(最后,向面试官提问的时候,我才知道他们公司和我学的Hadoop架构不一样),但是他们一定知道最基础的Linux命令和Mysql等,校招尤其是这样。

        注:我同时在简历上写了人工智能算法,我在这里也踩了坑。

        如果在简历上写了人工智能算法,一定要给你的算法准备一套话术,并且写下来,面试之前拿来看一下,面试完该忘就忘。话术准备原则:要有画面感,你得简单直接告诉面试官你的算法是什么样子,实现什么,原理是什么等,层层递进,要有逻辑。

        注:面试过程中,如果准备不足或者说准备的再详细但是没有亲自操作过,这个时候在面试中会有一种迫切想结束的感觉。

        本人建议,面对上述情况,很多问题一定要准备话术,无论再细小的点,也要写下来,让它饱满化,面试之前扫一眼。比如问你一个简单的ls linux命令,你也可以借这个话题扯到更复杂的Linux命令等。

        注:如果准备的非常详细,有很多知识想要输出,你可以问面试官这样一句话,我对什么什么很了解,可以给你介绍一下吗?面试官一般不会拒绝,但是你介绍的时候一定要介绍清楚,要不然会起反效果。

        5.提问环节结束后,技术面试官都会让你问他问题,这个时候切忌问他,待遇啥的、吃住啥的,你得问他技术方面的问题。

        注:当时我踩坑在这里,我问技术面试官,培养计划、吃住等。技术面试官叫了HR来回答,切忌问问题要看场合找对人,这些问题可以问最开始和你对接的HR。问技术面试管的套路:

        (1).贵公司的技术架构是什么。

        (2).贵公司的数据采集是对人进行数据采集还是对物进行数据采集。

        (3).贵公司做的是离线和实时。

        (4).贵公司有没有开展大数据与人工智能结合的项目。

        如果面试的是技术储备干部,往往会有下面两个问题:

        (1)你未来的职业规划是什么?

        (2)当你面对职业瓶颈,你会怎么去解决?

        

        说的再多,也要实践第一次实践也会有各种各样问题,经验只会让你少走弯路,让你一次实践相当于其他人多次实践,而不会替代实践

        找工作的时间,也是一个学习的时间,把你想写的东西全部写在简历上(不要管会不会);结合自己的简历写的内容,进行学习,以此种方式督促自己学习(此方法适用于刚出学校找工作,还没确定具体方向的人,我也是这样干的)

        在学习的时候,可以网上小范围的投简历线下招聘会海投原则。有面试机会就实践,没面试机会就学习循环反复学习知识和总结实践经验,切忌只做一项,能找到工作就更好。

        一切等到简历上的知识全部吃透,知识架构全部搭建起来,话术全部准备好,自信心爆表的时候,全国线上线下海投。

                                                            (上述方法只适用于本人)

二、力扣第二天刷题

977.有序数组的平方

        给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        save_list=[]
        for i in nums:
            save_list.append(i*i)
        save_list.sort()
        return  save_list

        这个不多说,思路很简单。

 209.长度最小的子数组 

        给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度如果不存在符合条件的子数组,返回 0 。

测试main():

if __name__ == '__main__':
    s = 7
    nums = [2 ,3 ,1 ,2 ,4 ,3]
    nums2=[1,4,4]
    nums3=[]
    s2=4
    #result = minSubArrayLen(s, nums)
    result = minSubArrayLen(s2, nums3)
    print("The minimum length of subarray is:", result)

        (1)长度最小的子数组_暴力解法

def minSubArrayLen( target, nums):
    """
    :type target: int
    :type nums: List[int]
    :rtype: int
    """
    length_nums = len(nums)
    dd = []
    for i in range(length_nums):
        tt = nums[i]
        if tt >= target:
            dd.append(1)
        else:
            for j in range(i + 1, length_nums):
                tt = tt + nums[j]
                if tt >= target:
                    dd.append(j - i + 1)
    hh = len(dd)
    dd.sort()
    print(dd)
    if len(dd) == 0:
        return 0
    else:
        return dd[0]

        重点是两层for循环,首先第一层循环是从第一个起点一个一个往后,然后第二层循环就是以第一个for循环为起点遍历提取出所有符合条件的长度。

        但这种方式,时间超时。

面试总结+力扣第二天刷题_第1张图片

        做题的时候踩坑:

        当输入数据为NULL的时候,得做判断。

    if len(dd) == 0:
        return 0
    else:
        return dd[0]

        当该数组中的某个数据大于target的时候,需要进行判断。

        if tt >= target:
            dd.append(1)
        else:

        else中的主体内容,是提取大于1长度的数组。

(2)长度最小的子数组_滑动窗口解法

         滑动窗口解法是我第一次接触,只能仿照一下,总结一下最关键的点。代码量相对于暴力解法,少了很多。

​
 res=float("inf")
    sum=0
    i=0
    for j in range(len(nums)):
        sum+=nums[j]
        while sum>=s:
            res=min(res,j-i+1)
            sum-=nums[i]
            i+=1
 return 0 if res==float('inf') else res

        最主要的是while循环的使用,首先明确第一层循环中j是滑动窗口最后一个元素的位置,sum是累加和。

        滑动窗口的重点:

                                        一个循环j+while判断+sum

        还有一些技术细节:

                        min(,)函数的使用

                        res=float("inf")#表示无限大的数

                        return 0 if res==float('inf') else res

59.螺旋矩阵

        给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

        测试main():

from typing import List
if __name__ == '__main__':
    n = 3
    matrix = generateMatrix(n)
    for row in matrix:
        print(row)

        旋转是我第一次接触,只能仿照一下,总结一下最关键的点和踩过的坑。

def generateMatrix(n: int) -> List[List[int]]:
    count=0
    dd=0
    xx=0
    a= [[0] * n for _ in range(n)]
    for i in range(1,n//2+1):
        for k in range(xx,n-i):
            count+=1
            a[xx][k]=count
        for k in range(dd,n-i):
            count += 1
            a[k][n-dd-1]=count
        for k in range(n-i,dd,-1):
            count+=1
            a[n-xx-1][k]=count
        for k in range(n-i,dd,-1):
            count+=1
            a[k][dd]=count
        dd+=1
        xx+=1
    if n%2!=0:
        a[n//2][n//2]=n*n
    return a

面试总结+力扣第二天刷题_第2张图片面试总结+力扣第二天刷题_第3张图片

        (1)头脑中得构建一个具体的图像,对整个过程有一个大致的了解。

        (2)确定左闭右开的模式。

        (3)确定几层循环,n//2(n//2+1 为条件)层循环。(//表示向下取整数)奇数会少一层。

        (4)定义参数:xx表示横坐标,dd表示纵坐标,每一次for外循环(n//2)都要+1。全部for循环,count+=1。

        (5)如果奇数的话,n//2会少一次循环。需要单独赋值,如下代码:

    if n%2!=0:
        a[n//2][n//2]=n*n

   

参考文献:

                (29条消息) 螺旋矩阵(C语言)_goldfish124的博客-CSDN博客

你可能感兴趣的:(面试,大数据,python)