python之web面试题

  1. 字典插入一个元素存在就不操作,不存在给他一个默认值.
    使用get方法根据key获取value,如果key不存在会使用默认值,如果没有设置默认值,会返回None
    print(person.get(‘addr’, ‘shanghai’)) # shanghai

    扩展:
    # 1. clear 用来清空字典
    # 2. pop 用来删除指定的数据
    # 3. popitem 用来删除最后一个键值对数据
    # 4. 使用del运算符来删除指定的数据

  2. 中间件的使用和作用
    在view调用之前:
    process_request(self,request)
    process_view(self,request,view_func,view_args,view_kwargs)
    在view调用后
    process_template_response(self,request,response)
    process_exception(self,request,exception)
    process_response(self,request,response)

  3. git删除分支切换分支命令,
    删除
    git branch -d + 本地分支名
    git push origin --delete + 本地分支名
    切换
    git checkout +分支名

  4. linux查找一个文件的命令
    whereis

  5. 列表删除的4个方法
    str=[=4,5,2,6]
    ①str.remove(6)
    ②str.pop(1)
    ③del str[1] 或者 del str[2:4]
    ④str.clear()

  6. flask蓝图的作用
    在这里插入图片描述
    蓝图也是一种规划,主要用来规划urls(路由),把views和manager.py连接上

  7. python多线程,
    进程>线程>协程
    from threading import Thread
    #target参数表示需要执行的行为,它是一个函数
    #name可以给线程起名字
    def test():
    t1 = Thread(target=test, name=‘线程1’)

    #需要调用线程的start方法,启动线程
    t1.start()

    线程锁
    lock = threading.Lock()

    #先要获取锁:
    lock.acquire()

    #放心地改吧:
    lock.release()

  8. 进程
    # target:表示进程需要执行的函数
    # args: 表示调用函数时的参数
    # name: 进程的名字
    import multiprocessing
    p1 = multiprocessing.Process(target=demo, args=(100,) , name=‘进程’)

  9. python模块,几个常见库,
    标准库:os,sys,re math urllib.request datetime zlib timeit unittest
    模块:random,hashlib,md5 string模块 urllib

  10. TCP
    TCP通信需要经过创建连接、数据传送、终止连接三个步骤
    优点:可靠,稳定适合传输大量数据
    缺点:传输速度慢 、占用系统资源高

    UDP 网络程序发送数据不需要建立连接
    优点:快。比TCP稍安全
    缺点:不可靠,不稳定。因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。

    引用:
    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

    	2、TCP需要连接 传输速度慢,UDP不需要连接 传输速度快
    
    	3、TCP不支持发广播,UDP支持发广播
    
    	4、TCP对系统资源要求较多,UDP对系统资源要求较少
    
    	5、TCP提供可靠的数据传输,UDP不保证可靠的数据传输,易出现丢包情况
    
    	6、 TCP适合发送大量数据,UDP适合发送少量数据
    
    	7、TCP有流量控制,UDP没有流量控制
    

————————————————
版权声明:本文为CSDN博主「Weiai_520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Weiai_520/article/details/103846680
11. 列表生成式、生成器、迭代器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

列表生成式:
L1 = [x * x for x in range(1, 11) if x % 2 == 0]
print(L1)
[4, 16, 36, 64, 100]

列表生成器:相比列表表达式,只不过将[]换成了(),更加省内存。
L11 = (x * x for x in range(1, 11))
print(L11)    #生成器对象
print(next(L11))   #用next取出第一个数
print(next(L11))  #用next取出第二个数
......                    #用next取出第n个数

迭代器:
		① list=[1,2,3,4]
		it = iter(list)    # 创建迭代器对象
		print (next(it))
		
		②list=[1,2,3,4]
		it = iter(list)    # 创建迭代器对象
		for x in it:
		    print (x, end=" ")
  1. 装饰器的使用
    封装一个函数,修改其函数的功能,有助于让我们的代码更简短,可以让你的代码更简洁
	MODIFY_PERMISSION = 16  # 10000
	DELETE_PERMISSION = 8  # 01000
	READ_PERMISSION = 4  # 00100
	WRITE_PERMISSION = 2  # 00010
	EXECUTE_PERMISSION = 1  # 00001

	x=input('用户权限值是')

	def ver_login(base_permission,user_permission):
	    def handle_action(fn):
	        def action():
	            fn()
	            return fn
	        return action
	    return handle_action

	@ver_login(READ_PERMISSION,x)
	def read():
	    print('我是read函数')
  1. scrapy工作流程原理,几个模块
    在这里插入图片描述
    scrapy的概念:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架

    爬虫中起始的url构造成request对象–>爬虫中间件–>引擎–>调度器
    调度器把request–>引擎–>下载中间件—>下载器
    下载器发送请求,获取response响应---->下载中间件---->引擎—>爬虫中间件—>爬虫
    爬虫提取url地址,组装成request对象---->爬虫中间件—>引擎—>调度器,重复步骤2
    爬虫提取数据—>引擎—>管道处理和保存数据
    1、爬虫引擎获得初始请求开始抓取。

    2、爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取。

    3、爬虫调度器返回下一个请求给爬虫引擎。

    4、引擎请求发送到下载器,通过下载中间件下载网络数据。

    5、一旦下载器完成页面下载,将下载结果返回给爬虫引擎。

    6、引擎将下载器的响应通过中间件返回给爬虫进行处理。

    7、爬虫处理响应,并通过中间件返回处理后的items,以及新的请求给引擎。

    8、引擎发送处理后的items到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取。

    9、重复该过程(继续步骤1),直到爬取完所有的url请求。

  2. selenium如何处理动态页面

	from selenium import webdriver
	import time
	from lxml import etree
	
	driver_path = r"G:\Crawler and Data\chromedriver.exe"
	driver = webdriver.Chrome(executable_path=driver_path)
	driver.get('https://www.baidu.com/')
	
	#使用 xpath 方式获取 效率高  如果只是解析页面就使用这种
	tree = etree.HTML(driver.page_source)
	li_lists = tree.xpath('xxxxxxxxxx')
	
	#通过id 的方式获取  如果对元素进行操作时, # 比如要发送字符串, 点击按钮, 下拉操作 				就使用这种方法
	inputTag = driver.find_element_by_id('kw')
	inputTag.send_keys('python')
	
	
	time.sleep(3)
	driver.close() # 关闭页面
		# driver.quit() # 关闭整个浏览器
  1. 如何定义一个迭代器
    定义迭代器就是定义__iter__ ,next 方法

猜你喜欢

转载自blog.csdn.net/Q632655672/article/details/106051416