zoukankan      html  css  js  c++  java
  • python爬虫相关的一些面试题

    tcp,udp区别和特点
    TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。也就是说,在收发数据前,必须和对方建立可靠的连接。
    UDP协议是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。

    小结TCP与UDP的区别:
      1.基于连接与无连接;
      2.对系统资源的要求(TCP较多,UDP少);
      3.UDP程序结构较简单;
      4.流模式与数据报模式 ;
      5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

    验证码的实现(简述)
    1.首先确定滑块滑块间的距离,尺寸,坐标
    2.其次随机获取图片,计算缺口的位置,然后模拟图片移动的轨迹
    3.然后利用第三方软件进行破解
    4.最后调用一下

    基本类型
    字符串:
    列表:
    元组:元组与列表类似,不同之处在于元组的元素不能修改;元组使用小括号(),列表使用方括号[];元组创建很简单,只需要在括号中添加元素,并使用逗号(,)隔开即可
    字典:字典(dictionary)是除列表之外python中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。字典由键和对应的值组成。字典也被称作关联数组或哈希表。

    user-agent
    它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

    x-path,(文本怎么提取)
    string() text()

    多进程与多线程
    计算密集型:
    1、视频的解码、编码
    2、科学数据计算
    工作需要依赖CPU,多使用进程,建议进程的数量就等于cpu的数量

    IO密集型:
    1、web
    2、文件读写
    IO经常阻塞,速度远小于CPU的速度,可以多开辟一些线程,有线程阻塞了,其它线程依然正常工作

    总结
    进程是系统进行资源分配和调度的一个独立单位
    线程是CPU调度和分派的基本单位
    一个程序至少有一个进程,一个进程至少有一个线程
    计算密集型的任务一般选择多进程,IO密集型的任务一般选择多线程

    字符的用法
    +连接
    length() 获取长度
    charAt()获取指定内容
    indexOf() 获取索引位置
    lastIndexOf从指定位置反索引

    url的get和post区别?
    GET后退按钮/刷新无害,POST数据会被重新提交(浏览器应该告知用户数据会被重新提交)。
    GET书签可收藏,POST为书签不可收藏。
    GET能被缓存,POST不能缓存 。
    GET编码类型application/x-www-form-url,POST编码类型encodedapplication/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。
    GET历史参数保留在浏览器历史中。POST参数不会保存在浏览器历史中。
    GET对数据长度有限制,当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。POST无限制。
    GET只允许 ASCII 字符。POST没有限制。也允许二进制数据。
    与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET !POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。
    GET的数据在 URL 中对所有人都是可见的。POST的数据不会显示在 URL 中。

    scrapy已经获取下一页的url,怎么获取下一页。
    yield scrapy.Request(传入获取的url)

    set是基于什么算法实现的?
    二叉树

    介绍爬虫用到的技术?

    requests、scrapy:爬虫框架和分布式爬虫

    xpath:网页数据提取

    re:正则匹配

    numpy、pandas:处理数据

    matplotlib:绘图

    mysql:数据存储

    redis:爬虫数据去重和url去重

    云打码:处理常规验证码

    复杂验证码:用selenium模拟登陆、处理滑块验证码等(滑块验证码有方法,之前破解过滑块验证码,有空我会出个基本使用教程,进行滑块验证码破解,但不一定通用,因为每个网站反爬措施设置都不一样)

    mvc流程:首先用户提交信息给控制器进行处理,然后通过模型讲用户信息保存到数据库,数据库再把保存结果返回给模型,控制器再保存结果,通过试图产生html页面,并且返回html页面到浏览器。

    闭包流程
    定义:闭包 当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的变量,且返回的这个函数在外部被执行 ? ? ? ? 就产生了闭包.闭包是一个环境,具体指的就是外部函数--高阶函数。说白了就是一个环境,能够读取其他函数内部的变量。本质上,闭包是将函数内部和函数外部连接起来的桥梁。
    用处:1.读取函数内部的变量;
    2.这些变量的值始终保持在内存中,不会在外层函数调用后被自动清除。

    优点:1:变量长期驻扎在内存中;
    2:避免全局变量的污染;
    3:私有成员的存在 ;

    特性:1:函数套函数;
    2:内部函数可以直接使用外部函数的局部变量或参数;
    3:变量或参数不会被垃圾回收机制回收 GC;
    缺点:
    常驻内存 会增大内存的使用量 使用不当会造成内存泄露,详解:
    (1)由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
    (2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值

    Ajax?
    不加载数据可以局部刷新

    生成器迭代器
    在Python中,这种一边循环一边计算的机制,称为生成器:generator。
    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

    死锁
    1.竞争资源
    2.程序推进顺序不当
    解决
    1.预防死锁(摒弃除1以外的条件)
    2.避免死锁(银行家算法)
    3.检测死锁(资源分配图)
    4.解除死锁

    tcp创建流程
    TCP建立连接需要三次握手,释放连接需要四次握手。
    三次握手:客户端向服务器发送信序号,服务器返回序号并且加上自己的序号,客户端发送序号+1给予确认
    四次挥手:客户端向服务器请求断开,服务器接收请求,服务器发送关闭信息,客户端再回复服务器已断开

    处理过的最难的验证码?
    12306点击图片验证码。原理:图片发送给打码平台,平台返回图片位置数值,通过计算返回数字和图片坐标的关系,进行模拟登陆

    注意:本篇文章是个人总结,仅供参考。若出现其他问题,与写者无关,切勿用于商业获取福利!

       如果总结有勿,或者交流与学习,请与写着联系!qq:1349176744

  • 相关阅读:
    struts2 的特征
    The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
    web.xml 404 500 配置
    重大发现 springmvc Controller 高级接收参数用法
    struts2 file
    struts2-core-2.3.20.jar
    系统设计工具
    Java基础
    IAM
    秒杀系统
  • 原文地址:https://www.cnblogs.com/quietly-elegant/p/10274372.html
Copyright © 2011-2022 走看看