没有笔试的面试,如何准备Python知识

无笔试的情况下,准备python相关基础知识面试

在面试时造航母,工作时仅是拧螺丝的就业大背景下,现在的招聘测试都要求代码能力,但是却总是一件让我很难以理解的事情,要求会写代码,却没有笔试环节,我着实有点懵逼。考察什么?如何考察?
但作为弱势群体的求职者,还是需要准备呀,思来想去,估计会问一些原理性的东西多一点。
关于无笔试的python相关知识。小白我就罗列总结几点吧:
一、基础一点的:
1、数据类型: 哪些是可变类型,哪些是不可变类型?
回答: 列表、字典、集合是可变类型
字符串、元组、冰冻集合是不可变类型。
2、函数重载: python是否支持函数重载?
回答: 函数重载是函数名称相同,调用函数时,可以根据函数参数的个数不同,或者参数的数据类型不同,区别调用不同的函数。
Python是不支持函数重载的,因为定义函数时不需要指定参数类型,同时python支持可变参数传参(*arg和**kw),因此无法通过参数的个数或类型去区别调用。
PS:Java是支持函数重载的。
3、深浅拷贝:
回答: a、浅拷贝copy.copy对于列表中的可变元素前后是共用一个内存地址,是互相影响的
b、深拷贝copy.deepcopy()对于列表中的可变元素是新生成的地址,是相互不影响的
4、python的六大剑客的功能及用法:
1)、lambda
2)、map
3)、filter
4)、reduce
5)、推导列表
6)、切片
5、讲一讲冒泡排序思想、过程?
冒泡的思想:两两比较,交换排序。
通用版冒泡,是稳定的排序算法,时间复杂度是(n-1)的平方

def my_sort(arr):
    for i in  range(len(arr) - 1):
        for j in range(len(arr)-1-i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr  

改进版的冒泡:

def my_sort(arr):
    for i in  range(len(arr) - 1):
        flag = 0
        for j in range(len(arr)-1-i):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
                flag = 1
        if not flag:
            break
    return arr    

二、深一点的:
1、设计单例,写一种单例设计的方法:
2、装饰器的功能与原理?
功能:在不改变原有函数的基础上,给函数增加一些通用的功能,核心是一个闭包函数。
闭包的原理:将内部的函数和函数中使用的外层函数变量打个包一起返回
如下:是最简单的一个装饰器
实现功能:额外统计函数/方式的执行消耗的时间

import time
def deco(xxx):
    def func():
        print("执行目标方法前,先记录当前时间")
        t1 = time.time()
        xxx() # 正在执行目标方法
        t2 = time.time()
        print("执行完目标方法后,再记录当前时间")
        print("目标方法执行耗时为%s"%(t2-t1))
    return func

@deco
def myfunc():
    print("正在执行目标方法")
    i = 0
    while i < 10000000:
        i += 1

最终执行结果如下:

>>> myfunc()
执行目标方法前,先记录当前时间
正在执行目标方法
执行完目标方法后,再记录当前时间
目标方法执行耗时为0.7656149864196777

3、爬虫的原理与实现步骤?
PS:有些XXX自己不懂代码,但经常听到爬虫这个词,觉得很高大上,喜欢装X问这个。或者有些项目偏数据分析的,也可能会问。
基本原理:
爬虫是 模拟用户在浏览器或者App应用上的操作,把操作的过程、实现自动化的程序。由以下4个基本流程。
(1)、发起请求
通过HTTP库向目标站点发起请求,也就是发送一个Request,请求可以包含额外的header等信息,等待服务器响应
(2)、获取响应
如果服务器能正常响应,会得到一个Response,Response的内容便是所要获取的页面内容,类型可能是HTML,Json字符串,二进制数据(图片或者视频)等类型
(3)、解析响应
得到的内容可能是HTML,可以用正则表达式,页面解析库进行解析,可能是Json,可以直接转换为Json对象解析,可能是二进制数据,可以做保存或者进一步的处理
(4)、保存数据
保存形式多样,可以存为文本,也可以保存到数据库,或者保存特定格式的文件
总体也可以分成三步:请求、分析、存储。
请求库:实现 HTTP 请求操作
urllib:一系列用于操作URL的功能。
requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后,程序才能进行下一步处理。
selenium:自动化测试工具。一个调用浏览器的 driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。
aiohttp:基于 asyncio 实现的 HTTP 框架。异步操作借助于 async/await 关键字,使用异步库进行数据抓取,可以大大提高效率。
分析库:从网页中提取信息
beautifulsoup:html 和 XML 的解析,从网页中提取信息,同时拥有强大的API和多样解析方式。
pyquery:jQuery 的 Python 实现,能够以 jQuery 的语法来操作解析 HTML 文档,易用性和解析速度都很好。
lxml:支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高。
tesserocr:一个 OCR 库,在遇到验证码(图形验证码为主)的时候,可直接用 OCR 进行识别。
存储库: Python 与数据库交互
pymysql:一个纯 Python 实现的 MySQL 客户端操作库。
pymongo:一个用于直接连接 mongodb 数据库进行查询操作的库。
redisdump:一个用于 redis 数据导入/导出的工具。基于 ruby 实现的,因此使用它,需要先安装 Ruby。

4、先讲冒泡,再问如何优化?(增加状态码,或者采用鸡尾酒算法优化)
答案上面有,此处略

5、快速排序的思想?
快排思想:分治+递归的思想

def mysort(arr):
    n = len(arr)
    if n < 2:
        return arr
    pos = arr[0]
    left = [i for i in arr[1:] if i <= pos]
    right = [i for i in arr[1:] if i > pos]
    return mysort(left) + [pos] + mysort(right)

if __name__ == "__main__":
    my_sort([3,2,4,6,1,5])

6、二分法查找的思想?
思想:折半查找的思想
前提:基于有序序列

def my_search(arr,target):
    first = 0
    last=len(arr)-1
    while first <= last:
        index = (first+last)//2
        # 中间值大于目标,说明目标在列表左侧,此时需要移动往左边移动last
        if arr[index] > target:
            last =index - 1
        # 中间值小于目标,说明目标在列表右侧,此时需要移动往右边移动first
        elif arr[index] < target:
            first =index + 1
        else:  #只有正好相等时,才表明目标值找到了
            return 1
    # 循环完后,无返回,则最终返回False,没有找到
    return 0
        
if __name__ == "__main__":
    my_search([1,2,3,4,5,6],3)
    my_search([1,2,3,4,5,6],0)

7、其他某种排序算法的原理?(没有笔试,基本不太可能问这个)

8、多进程,多线程编程?(没有笔试,基本不太可能问这个)

答案后续补充,太晚了,睡觉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值