Python网络爬虫核心面试题
网络爬虫
- 1. 爬虫项目中如何处理请求失败的问题?
- 2. 解释HTTP协议中的持久连接和非持久连接。
- 3. 什么是HTTP的持久化Cookie和会话Cookie?
- 4. 如何在爬虫项目中检测并处理网络抖动和丢包?
- 5. 在爬虫项目中,如何使用HEAD请求提高效率?
- 6. 如何在爬虫项目中实现HTTP请求的限速?
- 7. 解释HTTP2相对于HTTP1.1的主要改进。
- 8. 如何在爬虫项目中模拟HTTP重试和重定向?
- 9. 什么是CORS?如何在爬虫中绕过CORS限制?
- 10. 在爬虫项目中,如何处理动态加载内容?
- 11. 什么是代理池?如何在爬虫中使用?
- 12. 解释HTTP/2的服务器推送机制。
- 13. 如何在爬虫项目中使用HTTP管道化?
- 14. 如何在爬虫中使用异步I/O处理高并发请求?
- 15. 在爬虫项目中如何识别并处理验证码?
- 16. 如何在爬虫中模拟浏览器行为来绕过反爬措施?
- 17. 如何处理爬虫项目中的网络带宽限制?
- 18. 在爬虫项目中如何处理Session保持?
- 19. 如何在爬虫项目中检测和规避IP封禁?
- 20. 什么是反爬虫机制中的蜜罐?如何识别和绕过?
1. 爬虫项目中如何处理请求失败的问题?
回答:
请求失败可能由多种原因导致,如网络波动、服务器压力过大、目标网站拒绝请求等。常用的解决方法有:
- 重试机制:在请求失败时重试请求。可以使用递增的时间间隔和最大重试次数来避免过度请求。
import requests
from time import sleepdef fetch_url(url, retries=5, delay=2):for attempt in range(retries):try:response = requests.get(url)if response.status_code == 200:return response.contentexcept requests.RequestException as e:print(f"Error: {e}. Retrying {attempt+1}/{retries}")sleep(delay) # 增加延迟避免频繁请求return None
-
检查响应状态码:判断是否为服务器错误(5xx)或客户端错误(4xx),针对不同错误采取相应措施。
-
使用代理:尝试通过代理IP访问,防止IP被封禁。
-
调整请求频率:降低请求频率,减少对目标网站的负载。
-
使用反向代理:分散流量,避免过于集中的请求。
2. 解释HTTP协议中的持久连接和非持久连接。
回答:
HTTP协议中,持久连接和非持久连接的区别在于TCP连接的持续时间:
-
非持久连接(短连接):
- 每次HTTP请求/响应对使用一个单独的TCP连接。
- 请求处理完成后,立即关闭连接。
- 这种方式开销较大,因为每次请求都需要新建和关闭连接。
-
持久连接(长连接):
- 多个HTTP请求/响应对可以共享一个TCP连接。
- 连接保持打开状态,直到客户端或服务器明确关闭连接。
- 通过HTTP头中的
Connection: keep-alive来实现持久连接。 - 减少了TCP连接的频繁建立和断开,提高了传输效率。
在爬虫项目中,持久连接能够显著减少网络延迟,提升爬取速度。
import requestsheaders = {'Connection': 'keep-alive'
}response = requests.get('http://example.com', headers=headers)
3. 什么是HTTP的持久化Cookie和会话Cookie?
回答:
Cookies用于在客户端存储用户会话信息。根据其生命周期,可以分为持久化Cookie和会话Cookie:
-
持久化Cookie:
- 存储在客户端的硬盘上。
- 具有过期时间,超过指定时间后会自动删除。
- 可以在浏览器关闭后仍然存在。
- 用于保存长时间有效的用户偏好和身份信息。
-
会话Cookie:
- 存储在浏览器的内存中。
- 在浏览器关闭后自动删除。
- 适用于短期会话,例如购物车和临时状态保存。
在爬虫中,持久化Cookies可以用于维持登录状态和追踪用户会话。
import requests# 设置持久化Cookie
session = requests.Session()
session.cookies.set('key', 'value', domain='example.com', path='/', expires=3600)# 发起请求
response = session.get('http://example.com')
4. 如何在爬虫项目中检测并处理网络抖动和丢包?
回答:
网络抖动和丢包会导致请求失败或数据不完整。在爬虫项目中,可以通过以下方法处理:
- 超时设置:设置合理的请求超时时间,避免长时间等待。
import requeststry:response = requests.get('http://example.com', timeout=10)
except requests.Timeout:print("请求超时")
-
重试机制:在网络抖动或丢包时,进行重试。
-
数据完整性检查:通过校验数据完整性(如文件校验和)来验证数据的完整性。
-
使用更稳定的网络连接:使用有线连接或提升网络带宽。
-
监控网络状态:使用网络监控工具检测网络质量,预判可能的问题。
5. 在爬虫项目中,如何使用HEAD请求提高效率?
回答:
HEAD请求类似于GET请求,但只返回响应头而不返回响应体。可以用于:
-
检查资源是否存在:通过状态码判断资源是否可用。
-
获取资源元信息:如文件大小、最后修改时间等,避免不必要的全量下载。
-
验证缓存:通过
ETag或Last-Modified头检查资源是否更新。
import requestsresponse = requests.head('http://example.com/file.zip')
if response.status_code == 200:print("文件存在")print("文件大小:", response.headers.get('Content-Length'))
通过HEAD请求,可以减少带宽消耗和处理时间,提高爬虫的整体效率。
6. 如何在爬虫项目中实现HTTP请求的限速?
回答:
HTTP请求限速用于控制爬虫的请求频率,避免对目标网站造成过大压力。可以通过以下方法实现:
- 设置请求间隔:在每次请求后添加延时,模拟用户行为。
import time
import requestsdef fetch_url(url):response = requests.get(url)time.sleep(1) # 延时1秒return response.content
- 使用限速库:如
ratelimit库,动态调整请求频率。
from ratelimit import limits, sleep_and_retry# 每分钟最多请求30次
@sleep_and_retry
@limits(calls=30, period=60)
def fetch_url(url):response = requests.get(url)return response.content
- 分布式爬虫:将请求分布在多个节点,降低单一节点的请求频率。
7. 解释HTTP2相对于HTTP1.1的主要改进。
回答:
HTTP2是HTTP协议的升级版本,提供了多个改进以提高性能和效率:
-
多路复用:允许多个请求和响应通过单一TCP连接同时进行,避免了HTTP1.1中的队头阻塞问题。
-
二进制分帧:使用二进制格式而非文本格式,提升了数据解析速度和传输效率。
-
头部压缩:采用HPACK压缩算法,减少HTTP头部的冗余数据量。
-
服务器推送:服务器可以主动向客户端推送资源,减少请求延迟。
-
流量控制:支持流量优先级和控制,优化带宽利用。
通过HTTP2的这些特性,爬虫可以更高效地请求资源,减少延迟和带宽消耗。
8. 如何在爬虫项目中模拟HTTP重试和重定向?
回答:
HTTP重试和重定向是常见的网络请求场景。以下是处理这两种情况的方法:
-
重试机制:
- 使用Python库
requests的Retry类来实现自动重试。
from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry import requestssession = requests.Session() retries = Retry(total=5, backoff_factor=0.1) adapter = HTTPAdapter(max_retries=retries) session.mount('http://', adapter) session.mount('https://', adapter)response = session.get('http://example.com')- 设置
total为最大重试次数,backoff_factor为每次重试的延时增量。
- 使用Python库
-
重定向处理:
- 在
requests中,重定向是自动处理的,但可以通过设置allow_redirects参数控制行为。
import requestsresponse = requests.get('http://example.com', allow_redirects=True)- 如果
allow_redirects=False,则需手动处理重定向。
import requestsresponse = requests.get('http://example.com', allow_redirects=False) if response.status_code in [301, 302]:new_url = response.headers['Location']response = requests.get(new_url) - 在
通过以上方式,爬虫可以更稳定地处理网络抖动和资源重定位。
9. 什么是CORS?如何在爬虫中绕过CORS限制?
回答:
CORS(Cross-Origin Resource Sharing)是一种浏览器安全机制,控制来自不同源的资源请求。
-
CORS的工作原理:
-
服务器通过设置HTTP头部中的
Access-Control-Allow-Origin,指定允许访问的来源。 -
当浏览器发起跨域
-
请求时,会根据CORS头判断是否允许该请求。
-
绕过CORS限制的方法:
- 使用无头浏览器:如Selenium,直接模拟浏览器请求,忽略CORS限制。
from selenium import webdriveroptions = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(options=options) driver.get('http://example.com')-
代理服务器:通过服务器端请求目标资源,返回给客户端。
-
禁用浏览器安全策略:在开发环境中可以通过禁用安全策略来忽略CORS(不建议用于生产环境)。
通过这些方法,可以在爬虫中绕过CORS限制,获取跨域资源。
10. 在爬虫项目中,如何处理动态加载内容?
回答:
动态加载内容通常由JavaScript异步请求实现。在爬虫项目中,可以通过以下方法处理:
-
分析网络请求:使用浏览器开发者工具查看XHR请求,找到真实的数据接口。
-
直接请求API:通过分析后的接口地址,使用
requests库直接请求数据。
import requestsapi_url = 'http://example.com/api/data'
response = requests.get(api_url)
data = response.json()
- 使用无头浏览器:如Selenium,模拟浏览器执行JavaScript加载页面内容。
from selenium import webdriveroptions = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get('http://example.com')
html_content = driver.page_source
-
使用JavaScript引擎:如Pyppeteer或Splash,解析并执行JavaScript生成页面内容。
-
等待页面完全加载:在解析动态内容时,等待页面的JS脚本执行完成。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver.get('http://example.com')
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, 'dynamic-content'))
)
通过以上方法,可以有效处理动态加载的网页内容,提取所需数据。
11. 什么是代理池?如何在爬虫中使用?
回答:
代理池是一个维护多个代理IP地址的系统,用于随机选择代理进行HTTP请求,提升爬虫的匿名性和抗封禁能力。
-
代理池的好处:
-
防止IP封禁:使用不同IP访问,减少单一IP被封禁的风险。
-
分散请求负载:通过不同IP分散请求,降低目标服务器的压力。
-
-
实现代理池:
-
可以通过第三方代理服务或自建代理池来获取代理IP。
-
使用随机选择或轮询的方式,从代理池中获取代理进行请求。
-
import requests
import randomproxy_pool = ['http://proxy1.example.com:8080','http://proxy2.example.com:8080','http://proxy3.example.com:8080',
]def get_random_proxy():return random.choice(proxy_pool)proxy = get_random_proxy()
response = requests.get('http://example.com', proxies={'http': proxy, 'https': proxy})
通过使用代理池,爬虫可以更好地隐藏真实IP,提高爬取效率。
12. 解释HTTP/2的服务器推送机制。
回答:
HTTP/2的服务器推送机制允许服务器在客户端请求之前主动推送资源到客户端。这一特性改善了资源预加载,提高了页面加载速度。
-
服务器推送的工作原理:
-
服务器通过
PUSH_PROMISE帧通知客户端即将发送的资源。 -
客户端可选择接受或拒绝这些资源。
-
-
应用场景:
-
预加载样式表、脚本等静态资源,提升首屏渲染速度。
-
减少重复请求,节省带宽。
-
-
在爬虫中的使用:
- 需要使用支持HTTP/2的库,如
hyper或http2,处理服务器推送。
- 需要使用支持HTTP/2的库,如
import hyper
from hyper import HTTPConnectionconn = HTTPConnection('example.com:443')
conn.request('GET', '/')
response = conn.get_response()for pushed in response.get_pushes():print("Received pushed resource:", pushed.path)
通过服务器推送机制,爬虫可以更高效地接收所需资源。
13. 如何在爬虫项目中使用HTTP管道化?
回答:
HTTP管道化允许客户端在收到前一个响应之前发送多个请求,减少请求延迟。但由于普遍支持较差,HTTP/2多路复用通常被认为是更好的选择。
-
HTTP管道化的工作原理:
-
在单个TCP连接中批量发送请求,不等待前一个响应。
-
增加吞吐量,但可能面临队头阻塞。
-
-
实现HTTP管道化:
- 使用
http.client库设置HTTP管道化。
- 使用
import http.clientconn = http.client.HTTPConnection('example.com')
conn.set_tunnel('example.com', 80)
conn.putrequest('GET', '/')
conn.putheader('Connection', 'keep-alive')
conn.endheaders()
response = conn.getresponse()
-
注意事项:
-
管道化需要服务端支持。
-
HTTP/2多路复用更为高效,推荐使用。
-
通过HTTP管道化,爬虫可在特定场景下提高请求效率。
14. 如何在爬虫中使用异步I/O处理高并发请求?
回答:
异步I/O允许在单线程中处理大量并发请求,提高爬虫性能。Python中的asyncio库可以实现异步I/O。
-
使用
aiohttp库进行异步请求:- 创建一个异步事件循环,管理多个异步任务。
import asyncio
import aiohttpasync def fetch(url):async with aiohttp.ClientSession() as session:async with session.get(url) as response:return await response.text()async def main():urls = ['http://example.com/page1', 'http://example.com/page2']tasks = [fetch(url) for url in urls]results = await asyncio.gather(*tasks)for result in results:print(result)asyncio.run(main())
-
优势:
-
更好地利用I/O等待时间,提高资源利用率。
-
避免了多线程中的线程切换开销。
-
-
适用场景:
- 大量网络请求且每个请求无需占用大量CPU。
通过异步I/O,爬虫可以在处理高并发请求时获得更高效的性能表现。
15. 在爬虫项目中如何识别并处理验证码?
回答:
验证码是一种用于防止自动化请求的安全措施。识别并处理验证码需要结合多种方法:
-
人工识别:让人类手动识别并输入验证码。
-
图像识别:使用OCR(Optical Character Recognition)技术自动识别验证码。
- 使用Tesseract OCR库进行图像识别。
import pytesseract from PIL import Imageimage = Image.open('captcha.png') text = pytesseract.image_to_string(image) print("识别出的验证码:", text) -
验证码破解:利用机器学习模型识别复杂验证码。
- 训练模型识别常见的字符、背景干扰和扭曲形态。
-
规避验证码:通过使用代理、模拟真实用户行为减少出现验证码的概率。
-
打码平台:通过第三方服务识别验证码。
识别验证码是爬虫项目中的一个难题,需要结合多种技术手段来处理。
16. 如何在爬虫中模拟浏览器行为来绕过反爬措施?
回答:
模拟浏览器行为是绕过反爬措施的有效方法。可以通过以下技术实现:
- 使用无头浏览器:如Selenium或Playwright,模拟浏览器请求和交互。
from selenium import webdriveroptions = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get('http://example.com')
- 伪装HTTP头:添加常见浏览器的User-Agent、Referer等头信息。
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Referer': 'http://example.com',
}response = requests.get('http://example.com', headers=headers)
-
执行JavaScript:通过解析和执行JavaScript,处理动态内容。
-
随机延时和点击:模拟真实用户的浏览行为,避免固定模式。
-
使用Cookies和Session:模拟登录操作,维持会话状态。
通过这些方法,可以有效地模拟真实用户行为,减少被反爬机制识别的可能性。
17. 如何处理爬虫项目中的网络带宽限制?
回答:
网络带宽限制会影响爬虫的效率和速度。以下是一些解决方法:
-
分布式爬虫:使用多个节点分担爬取任务,减轻单一节点的带宽负担。
-
带宽压缩:通过启用Gzip压缩减少传输的数据量。
import requestsheaders = {'Accept-Encoding': 'gzip, deflate'
}response = requests.get('http://example.com', headers=headers)
-
限速下载:控制每个请求的下载速度,避免超出带宽限制。
-
优先级调度:根据资源的重要性和大小设置爬取优先级,优化带宽使用。
-
增量爬取:只抓取新增或更新的数据,减少重复请求。
通过这些方法,可以有效地处理爬虫项目中的网络带宽限制,提高整体性能。
18. 在爬虫项目中如何处理Session保持?
回答:
Session保持是爬虫项目中模拟用户登录态的关键。以下是一些常用方法:
- 使用Cookies:在请求中保存和传递Cookies以维持会话。
import requestssession = requests.Session()
login_url = 'http://example.com/login'
payload = {'username': 'user', 'password': 'pass'}# 模拟登录
session.post(login_url, data=payload)# 请求其他页面
response = session.get('http://example.com/profile')
-
Session管理库:如
requests.Session自动处理Cookies和会话。 -
模拟用户操作:使用Selenium等工具模拟真实用户的登录行为。
-
持久化Session数据:保存Session信息以便重用,减少频繁登录。
import pickle# 保存Session
with open('session.pkl', 'wb') as f:pickle.dump(session.cookies, f)# 加载Session
with open('session.pkl', 'rb') as f:cookies = pickle.load(f)session.cookies.update(cookies)
通过这些方法,可以在爬虫项目中有效地处理Session保持,实现长时间稳定的爬取。
19. 如何在爬虫项目中检测和规避IP封禁?
回答:
IP封禁是反爬措施中常见的问题。以下是检测和规避IP封禁的方法:
-
检测封禁:
-
检查响应状态码:如403、429等表示请求被拒绝或超出频率限制。
-
分析返回内容:判断是否包含封禁相关信息或验证码。
-
请求异常:连接超时、重置等也可能是封禁的表现。
-
import requeststry:response = requests.get('http://example.com')if response.status_code == 403:print("IP被封禁")
except requests.RequestException as e:print(f"请求异常: {e}")
-
规避封禁:
-
使用代理池:通过随机代理IP减少单一IP的请求频率。
-
降低请求频率:增加请求间隔,避免触发封禁策略。
-
分布式爬虫:通过多个节点进行爬取,分散IP风险。
-
模拟真实用户行为:添加User-Agent和Referer等头部,模拟正常访问。
-
通过这些方法,可以在爬虫项目中有效地检测和规避IP封禁,提高爬虫的稳定性和持续性。
20. 什么是反爬虫机制中的蜜罐?如何识别和绕过?
回答:
蜜罐是一种反爬虫机制,旨在诱导爬虫访问虚假的或陷阱的内容,从而识别和阻止自动化访问。
-
蜜罐的工作原理:
-
虚假链接:隐藏在网页中的链接或资源,正常用户不会点击。
-
动态内容:通过JavaScript生成的随机内容或链接。
-
-
识别蜜罐:
-
分析页面元素:检查链接的可见性和点击逻辑。
-
观察请求模式:对比正常用户的请求行为,识别异常。
-
-
绕过蜜罐:
-
过滤链接:排除可疑的、不可见的链接和资源。
-
模拟用户行为:按照正常的浏览模式访问页面,避免触发蜜罐。
-
from bs4 import BeautifulSoup
import requestsresponse = requests.get('http://example.com')
soup = BeautifulSoup(response.content, 'html.parser')# 排除蜜罐链接
for link in soup.find_all('a'):if link.get('style') is None: # 过滤不可见链接print(link.get('href'))
通过识别和绕过蜜罐,爬虫可以在目标网站中更安全地进行数据抓取。
相关文章:
Python网络爬虫核心面试题
网络爬虫 1. 爬虫项目中如何处理请求失败的问题?2. 解释HTTP协议中的持久连接和非持久连接。3. 什么是HTTP的持久化Cookie和会话Cookie?4. 如何在爬虫项目中检测并处理网络抖动和丢包?5. 在爬虫项目中,如何使用HEAD请求提高效率&a…...
DSL domain specific language of Kola
How we design Kola - ApiHugKola background, Kola a consumer driver tester frameworkhttps://apihug.com/zhCN-docs/kola/003_dsl_contract Concept 在 Kola 定位中 Kola 是什么, 是致力于提供一个让相关各方都能够理解共同创造的测试框架和工具。 同时 Kola 是建立于业界…...
【RISC-V设计-05】- RISC-V处理器设计K0A之GPR
【RISC-V设计-05】- RISC-V处理器设计K0A之GPR 文章目录 【RISC-V设计-05】- RISC-V处理器设计K0A之GPR1.简介2.设计顶层3.内部结构4.端口说明5.设计代码6.总结 1.简介 通用寄存器(General Purpose Register)是处理器设计中的重要组成部分,在…...
Linux/C 高级——shell脚本
1. shell脚本基础概念 1.1概念 shell使用方式:手动下命令和脚本 脚本本质是一个文件,文件里面存放的是特定格式的指令,系统可以使用脚本解析器翻译或解析指令并执行(它不需要编译)。 shell脚本本质:shell命…...
SpringBoot面试题整理(1)
面试整理 前置知识 ApplicationContextInitializerApplicationListenerBeanFactoryBeanDefinitionBeanFactoryPostProcessorAwareInitializingBean/DisposableBeanBeanPostProcessor 面试题 SpringBoot启动流程IOC容器初始化流程Bean声明周期Bean循环依赖SpringMVC执行流程…...
LVS原理及实例
目录 LVS原理 LVS概念 lvs集群的类型 lvs-nat 解释 传输过程 lvs-dr 解释 传输过程 特点 lvs-tun LVS(Linux Virtual Server)常见的调度算法 防火墙标记(Firewall Marking)结合轮询调度 实战案例 lvs的nat模式配置 …...
Spring统一功能处理:拦截器、响应与异常的统一管理
目录 一.拦截器 二.统一数据返回格式 三.统一异常处理 一.拦截器 拦截器是Spring框架提供的核⼼功能之⼀,主要⽤来拦截⽤⼾的请求,在指定⽅法前后,根据业务需要执⾏预先设定的代码。 也就是说,允许开发⼈员提前预定义⼀些逻辑…...
深入理解小程序的渲染机制与性能优化策略
一、小程序的渲染机制 小程序的渲染机制主要由两部分组成:渲染层和逻辑层。渲染层负责页面的渲染,逻辑层负责处理业务逻辑和数据处理。两者通过一个安全的、高效的通信机制进行数据传输和事件通知。 渲染层:在渲染层,WXML 模板会…...
Linux:多线程(二.理解pthread_t、线程互斥与同步、基于阻塞队列的生产消费模型)
上次讲解了多线程第一部分:Linux:多线程(一.Linux线程概念、线程控制——创建、等待、退出、分离,封装一下线程) 文章目录 1.理解Linux下线程——理解tid2. Linux线程互斥2.1相关概念2.2引入问题分析问题解决思路 2.3L…...
Pandas中`str`对象解析与应用实例
在数据科学领域,字符串操作是数据清洗和处理中不可或缺的一部分。Pandas的str对象为我们提供了一个强大而灵活的字符串操作方法集。本文将深入探讨str对象的各种应用,并通过代码示例和输出展示如何有效地处理字符串数据。 关键词 Pandas, 字符串操作, …...
C语言典型例题29
《C程序设计教程(第四版)——谭浩强》 习题2.6 设圆半径r1.5,圆柱高h3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。 scanf输入结果,输出计算结果,输出时要有文字说明,取小数点后两位数…...
Docker 常规安装简介
Docker常规安装简介 欢迎关注我的B站:https://space.bilibili.com/379384819 1. 安装mysql 1.1 docker hub上面查找mysql镜像 网址: https://hub.docker.com/_/mysql 1.2 从docker hub上(阿里云加速器)拉取mysql镜像到本地标…...
理解张量拼接(torch.cat)
拼接 维度顺序:对于 3D 张量,通常可以理解为 (深度, 行, 列) 或 (批次, 行, 列)。 选择一个dim进行拼接的时候其他两个维度大小要相等 对于三维张量,理解 torch.cat 的 dim 参数确实变得更加抽象,但原理是相同的。让我们通过一…...
指针基础知识(笔记)
文章目录 1. 概念理解2. 空指针和野指针3. 计算4. 小结5. size_t6. 案例一: 指针查找并返回指定元素索引7. 指针访问多维数组(涉及 int (*ptr)[3]解析)8. 指针数组9. 函数的值传递与地址引用传递① 函数的值传递(pass by value)② 地址传递(pass by reference) 10. 案例二&…...
[Python学习日记-3] 编程前选择一个好用的编程工具
[Python学习日记-3] 编程前选择一个好用的编程工具 简介 PyCharm IDE的安装 PyCharm IDE安装后的一些常规使用 简介 在踏上 Python 编程的精彩旅程之前,选择一款得心应手的编程工具无疑是至关重要的一步。这就如同战士在出征前精心挑选趁手的武器,它将…...
智能化的Facebook未来:AI如何重塑社交网络的面貌?
随着人工智能(AI)技术的飞速发展,社交网络的面貌正在经历深刻的变革。Facebook(现Meta Platforms)作为全球最大的社交媒体平台之一,正积极探索如何利用AI技术来提升用户体验、优化内容管理并推动平台创新。…...
安全启动的原理
安全启动(Secure Boot)是一种用于确保设备只运行经过认证的软件的安全机制。其核心原理和步骤如下: 1. **硬件信任根(Root of Trust, RoT)**: - 安全启动过程始于硬件信任根,通常是设备上的…...
【ML】pre-train model 是什么如何微调它,如何预训练
【ML】pre-train model 是什么如何微调它,如何预训练 0. 预训练模型(Pre-trained Model)0.1 预训练模型的预训练过程0.2 如何微调预训练模型0.3 总结 1. Contextualized word Embedding2. 怎么 让 bert 模型变小3. 如何微调模型 0. 预训练模型…...
leetcode代码练习——Java的数据结构(具体使用)
注:Java中所有的泛型必须是引用类型 如<Integer>而不是<int> java提供的数学方法: 求最大值Math.max(10,15),最小值Math.min(10,15) 看取值范围: int范围:-2^31-2^31-1 double范围:-2^63-2^63-1 long范围:-2^63-2…...
sqlserver导出数据脚本
文章目录 sqlserver导出数据脚本任务-生成脚本 sqlserver导出数据脚本 任务-生成脚本...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
