10个令人惊叹的Python自动化脚本

大家好,Python凭借其简单和通用性,能够为解决每天重复同样的工作提供最佳方案。本文将介绍10个Python自动化脚本,可以帮助自动化完成任务,提高工作效率,它们可以成为项目运行中的便捷工具,可以收藏这些脚本以备留用。

1.剪贴板管理器

该自动化脚本可以监控复制的所有内容,将复制的每个文本无缝地存储在一个时尚的图形界面中,这样就不必在无尽的标签页中搜索,也不会丢失一些有价值的信息。利用Pyperclip库的强大功能无缝捕获复制数据,并集成了Tkinter以可视化方式跟踪和管理复制的文本。

import tkinter as tk
from tkinter import ttk
import pyperclipdef update_listbox():new_item = pyperclip.paste()if new_item not in X:X.append(new_item)listbox.insert(tk.END, new_item)listbox.insert(tk.END, "----------------------")listbox.yview(tk.END)root.after(1000, update_listbox)def copy_to_clipboard(event):selected_item = listbox.get(listbox.curselection())if selected_item:pyperclip.copy(selected_item)X = []root = tk.Tk()
root.title("Clipboard Manager")
root.geometry("500x500")
root.configure(bg="#f0f0f0")frame = tk.Frame(root, bg="#f0f0f0")
frame.pack(padx=10, pady=10)label = tk.Label(frame, text="Clipboard Contents:", bg="#f0f0f0")
label.grid(row=0, column=0)scrollbar = tk.Scrollbar(root)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)listbox = tk.Listbox(root, width=150, height=150, yscrollcommand=scrollbar.set)
listbox.pack(pady=10)
scrollbar.config(command=listbox.yview)update_listbox()listbox.bind("<Double-Button-1>", copy_to_clipboard)root.mainloop()

2.代码质量检查器

在Python代码中查找错误,发现自己迷失在错误的迷宫中。作为开发人员,我们深知编写简洁高效代码的重要性,但手动分析代码质量可能是一项压力巨大的任务。

本自动化脚本利用 Pylint 和 Flake8 Python 软件包对代码质量进行全面审查,将代码与编码标准进行比较,并找出逻辑错误。它可确保的代码符合行业最佳实践并保持无错。

import os
import subprocessdef analyze_code(directory):# List Python files in the directorypython_files = [file for file in os.listdir(directory) if file.endswith('.py')]if not python_files:print("No Python files found in the specified directory.")return# Analyze each Python file using pylint and flake8for file in python_files:print(f"Analyzing file: {file}")file_path = os.path.join(directory, file)# Run pylintprint("\nRunning pylint...")pylint_command = f"pylint {file_path}"subprocess.run(pylint_command, shell=True)# Run flake8print("\nRunning flake8...")flake8_command = f"flake8 {file_path}"subprocess.run(flake8_command, shell=True)if __name__ == "__main__":directory = r"C:\Users\abhay\OneDrive\Desktop\Part7"analyze_code(directory)

图片

对一个旧 Python 脚本进行代码质量审查时的输出结果,该脚本通过网络应用程序将文件转换为不同格式。

3.不篡改文件

文件篡改又称数据篡改,是指未经授权故意更改信息,包括破坏、篡改或编辑数据。

全球许多威胁行为者滥用文件篡改技术,在关键系统文件中引入不同的漏洞或后门,从而危及安全性并使未经授权的访问成为可能。

要降低这种风险,关键是要验证文件的完整性,确保它们与原始状态保持一致。这个自动化脚本可以帮助测试任何文件,并识别其是否被篡改。

import hashlib
import osdef calculate_sha256(file_path):sha256 = hashlib.sha256()with open(file_path, 'rb') as file:for chunk in iter(lambda: file.read(4096), b''):sha256.update(chunk)return sha256.hexdigest()def check_integrity(file_path, expected_checksum):actual_checksum = calculate_sha256(file_path)return actual_checksum == expected_checksumif __name__ == "__main__":file_path = input("Enter the path to the file: ")expected_checksum = input("Enter the expected SHA-256 checksum: ")if os.path.isfile(file_path):if check_integrity(file_path, expected_checksum):print("File integrity verified: The file has not been tampered with.")else:print("File integrity check failed: The file may have been tampered with.")else:print("Error: File not found.")

图片

使用样本 ZIP 文件(未篡改)进行脚本测试

图片

使用样本 ZIP 文件(篡改)进行脚本测试

4.智能交易

交易是指买卖证券、债券、货币、商品或衍生品等金融工具,以获取利润。期刊交易员整天都在查看不同的仪表盘,试图找出买入或卖出的完美决策。

这个自动化脚本可以帮助交易者和投资者很好地了解愿意投资的任何证券。它利用*****Prophet* Python库,根据从雅虎财经获取的历史证券数据预测近期证券价格。

import streamlit as st
from datetime import dateimport yfinance as yf
from prophet import Prophet
from prophet.plot import plot_plotly
from plotly import graph_objs as goSTART = "2015-01-01"
TODAY = date.today().strftime("%Y-%m-%d")st.title('Stock Forecast App')stocks = ('MSFT',"TSLA",'GOOG', 'AAPL', "NVDA")
selected_stock = st.selectbox('Select dataset for prediction', stocks)n_years = st.slider('Years of prediction:', 1, 4)
period = n_years * 365@st.cache
def load_data(ticker):data = yf.download(ticker, START, TODAY)data.reset_index(inplace=True)return datadata_load_state = st.text('Loading data...')
data = load_data(selected_stock)
data_load_state.text('Loading data... done!')st.subheader('Raw data')
st.write(data.tail())# Plot raw data
def plot_raw_data():fig = go.Figure()fig.add_trace(go.Scatter(x=data['Date'], y=data['Open'], name="stock_open"))fig.add_trace(go.Scatter(x=data['Date'], y=data['Close'], name="stock_close"))fig.layout.update(title_text='Time Series data with Rangeslider', xaxis_rangeslider_visible=True)st.plotly_chart(fig)plot_raw_data()# Predict forecast with Prophet.
df_train = data[['Date','Close']]
df_train = df_train.rename(columns={"Date": "ds", "Close": "y"})m = Prophet()
m.fit(df_train)
future = m.make_future_dataframe(periods=period)
forecast = m.predict(future)# Show and plot forecast
st.subheader('Forecast data')
st.write(forecast.tail())st.write(f'Forecast plot for {n_years} years')
fig1 = plot_plotly(m, forecast)
st.plotly_chart(fig1)st.write("Forecast components")
fig2 = m.plot_components(forecast)
st.write(fig2)

要运行此程序,首先需要使用 pip 安装 Streamlit、yfinance、prophet 和 plotly python 库。

pip install streamlit prophet yfinance plotly

然后使用命令streamlit run smart_trade.py 运行它。

图片

5.自动图像下载器

收集图像数据是计算机视觉项目的关键挑战,如果能收集到大量数据集,那算法就不重要了。数据对提高模型的性能和准确性起着关键作用。只需几行代码,这个自动化脚本就能帮助大家在几分钟内从网上下载数据。

# Importing the necessary module and function
from simple_image_download import simple_image_download as simp # Creating a response object
response = simp.simple_image_download## Keyword
keyword = "Dog"# Downloading images
try:response().download(keyword, 20)print("Images downloaded successfully.")
except Exception as e:print("An error occurred:", e)

图片

 

6.端口扫描程序

在计算机网络中,端口是允许不同进程或服务通过网络连接和交换数据的通信端点。端口由数值标识,并与特定协议相关联。

开放端口就像建筑物中的门窗,每个端口都是网站与外部网络通信的潜在入口。然而,在没有采取适当安全措施的情况下开放端口,会使网站容易受到网络攻击。

这个自动化脚本会将网站 URL 作为输入,并检查该网站是否存在任何开放端口。无论是作为 "红队 "的一员在执行任务,还是在 "蓝队 "中坚守阵地,这个脚本都能为你提供有用的便利工具。

import socket
from prettytable import PrettyTable# Dictionary mapping common ports to vulnerabilities (Top 15)
vulnerabilities = {80: "HTTP (Hypertext Transfer Protocol) - Used for unencrypted web traffic",443: "HTTPS (HTTP Secure) - Used for encrypted web traffic",22: "SSH (Secure Shell) - Used for secure remote access",21: "FTP (File Transfer Protocol) - Used for file transfers",25: "SMTP (Simple Mail Transfer Protocol) - Used for email transmission",23: "Telnet - Used for remote terminal access",53: "DNS (Domain Name System) - Used for domain name resolution",110: "POP3 (Post Office Protocol version 3) - Used for email retrieval",143: "IMAP (Internet Message Access Protocol) - Used for email retrieval",3306: "MySQL - Used for MySQL database access",3389: "RDP (Remote Desktop Protocol) - Used for remote desktop connections (Windows)",8080: "HTTP Alternate - Commonly used as a secondary HTTP port",8000: "HTTP Alternate - Commonly used as a secondary HTTP port",8443: "HTTPS Alternate - Commonly used as a secondary HTTPS port",5900: "VNC (Virtual Network Computing) - Used for remote desktop access",# Add more ports and vulnerabilities as needed
}def display_table(open_ports):table = PrettyTable(["Open Port", "Vulnerability"])for port in open_ports:vulnerability = vulnerabilities.get(port, "No known vulnerabilities associated with common services")table.add_row([port, vulnerability])print(table)def scan_top_ports(target):open_ports = []top_ports = [21, 22, 23, 25, 53, 80, 110, 143, 443, 3306, 3389, 5900, 8000, 8080, 8443]  # Top 15 portsfor port in top_ports:try:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(1)  # Adjust timeout as neededresult = sock.connect_ex((target, port))if result == 0:open_ports.append(port)sock.close()except KeyboardInterrupt:sys.exit()except socket.error:passreturn open_portsdef main():target = input("Enter the website URL or IP address to scan for open ports: ")open_ports = scan_top_ports(target)if not open_ports:print("No open ports found on the target.")else:print("Open ports and associated vulnerabilities:")display_table(open_ports)if __name__ == "__main__":main()

图片

使用脚本识别的 OpenPorts 列表

7.密码管理器

作为一名数字自由职业者,最糟糕的事情之一就是需要记住很多密码,因为每天都要注册一个新网站。

这个自动化脚本可以管理所有密码,使用不同的加密技术确保密码安全,只有自己才能访问。

其最棒的地方在于它是一个网络应用程序,只需稍作改动,就可以将它部署到云存储上,随时随地访问所有密码,而无需担心安全问题。

import streamlit as st
import csv
from cryptography.fernet import Fernet
from cryptography.fernet import InvalidToken# Custom encryption key (hardcoded)  
CUSTOM_ENCRYPTION_KEY = b'u7wGgNdDFefqpr_kGxb8wJf6XRVsRwvb3QgITsD5Ft4='                   ## 如果您打算在共享平台上使用此脚本,请确保将此密钥保存在一个单独的安全文件中。# Function to encrypt password
def encrypt_password(password):cipher_suite = Fernet(CUSTOM_ENCRYPTION_KEY)encrypted_password = cipher_suite.encrypt(password.encode())return encrypted_password# Function to decrypt password
def decrypt_password(encrypted_password):if isinstance(encrypted_password, bytes):try:cipher_suite = Fernet(CUSTOM_ENCRYPTION_KEY)decrypted_password = cipher_suite.decrypt(encrypted_password)return decrypted_password.decode()except InvalidToken:return "Invalid Token"else:return None# Function to save website name and password to CSV file
def save_credentials(website_name, password):encrypted_password = encrypt_password(password)with open('credentials.csv', 'a', newline='') as csvfile:writer = csv.writer(csvfile)writer.writerow([website_name, encrypted_password.decode()])  # Ensure storing string representation# Function to retrieve password from CSV file
def retrieve_password(website_name):with open('credentials.csv', 'r') as csvfile:reader = csv.reader(csvfile)for row in reader:if row[0] == website_name:encrypted_password = row[1].encode()return encrypted_passwordreturn None# Streamlit UI
st.title("Password Manager")# Input fields for website name and password
website_name = st.text_input("Enter website name:")
password = st.text_input("Enter password:", type="password")# Save button to save website name and password
if st.button("Save"):if website_name and password:save_credentials(website_name, password)st.success("Website name and password saved successfully.")else:st.error("Please fill in all fields.")# Retrieve button to retrieve password
if st.checkbox("Retrieve Password"):website_name = st.selectbox("Select website name:", options=[""] + [row[0] for row in csv.reader(open('credentials.csv', 'r'))])key = st.text_input("Enter Your Encryption Key:", type="password")if st.button("Retrieve Password"):if key == str(CUSTOM_ENCRYPTION_KEY.decode()):if website_name:encrypted_password = retrieve_password(website_name)if encrypted_password:decrypted_password = decrypt_password(encrypted_password)st.success(f"Password for **{website_name}** -> **{decrypted_password}**")else:st.error("Password not found in database.")elif key == "":pass else:st.error("Invalid Encryption Key!!!")

它使用硬编码的自定义密钥进行加密和解密,如果打算在共享平台上使用此脚本,请确保将此密钥保存在一个单独的安全文件中。

图片

正确的加密密钥

图片

错误的加密密钥

8.邮件群发器

电子邮件列表是在线参与的货币,每个订阅者都是数字部落的重要成员,它们是有效数字营销的心脏。

作为一个有影响力的数字营销者,与追随者保持互动非常重要,但手动操作是一项艰巨的工作,而使用相关工具则需要花费大量资金。

这款自动化脚本可利用 Gmail 自带的 SMTP 服务器,在几分钟内批量发送电子邮件,可以完全自定义并行使权力。

import smtplib
import ssl# SMTP server details
smtp_server = 'data.STUDIO.com'
smtp_port = 465# Sender and recipient details
from_address = 'Winzo Shop'
to_address = ['','']     ## Recepients List# Authentication details
username = ''       ## Sender Email
password = ''       ## Sender Password# Email message details
subject = '🎉 Exclusive Offer Inside! Get 10% Off Your Next Purchase'
body = '''
'''# Create an SSL/TLS context
context = ssl.create_default_context()# Connect to the SMTP server using SSL/TLS
with smtplib.SMTP_SSL(smtp_server, smtp_port, context=context) as server:# Enable debugging to print the server's responsesserver.set_debuglevel(1)# Login to the SMTP serverserver.login(username, password)# Create the email messagemessage = f'From: {from_address}\r\nSubject: {subject}\r\nTo: {to_address}\r\n\r\n{body}'message = message.encode()  # Convert the message to bytes# Send the emailserver.sendmail(from_address, to_address, message)

9.Readme.md 生成器

README.md 文件是项目的入口,提供基本信息并吸引访问者进一步探索。它被认为是版本库中最重要的文件之一,但创建起来也相当耗时。

这个自动化脚本可以根据版本库名称、链接和描述等输入信息轻松生成 README.md 文件,从而节省大量时间。

def generate_markdown_file():# Prompting user for inputsrepository_name = input("\n Enter the name of your GitHub repository: ")project_description = input("Enter a short description of your project: ")installation_instructions = input("Enter installation instructions for your project: ")usage_instructions = input("Enter usage instructions for your project: ")contributors = input("Enter the contributors to your project (separated by commas): ")license = select_license()# Generating badgesstars_badge = "[![GitHub stars](https://img.shields.io/github/stars/{})](https://github.com/{}/stargazers)".format(repository_name, repository_name)forks_badge = "[![GitHub forks](https://img.shields.io/github/forks/{})](https://github.com/{}/network/members)".format(repository_name, repository_name)issues_badge = "[![GitHub issues](https://img.shields.io/github/issues/{})](https://github.com/{}/issues)".format(repository_name, repository_name)license_badge = "[![GitHub license](https://img.shields.io/github/license/{})](https://github.com/{}/blob/master/LICENSE)".format(repository_name, repository_name)# Generating Markdown contentmarkdown_content = f"""# {repository_name}{project_description}## Table of Contents- [Installation](#installation)- [Usage](#usage)- [Contributors](#contributors)- [License](#license)- [Badges](#badges)- [GitHub Repository](#github-repository)## Installation```{installation_instructions}```## Usage```{usage_instructions}```## Contributors{contributors}## LicenseThis project is licensed under the {license} License - see the [LICENSE](LICENSE) file for details.## Badges{stars_badge} {forks_badge} {issues_badge} {license_badge}## GitHub Repository[Link to GitHub repository](https://github.com/{repository_name})"""# Writing content to Markdown filemarkdown_file_name = f"{repository_name}_README.md"with open(markdown_file_name, "w") as markdown_file:markdown_file.write(markdown_content)print(f"Markdown file '{markdown_file_name}' generated successfully!")def select_license():licenses = {"MIT": "MIT License","Apache": "Apache License 2.0","GPL": "GNU General Public License v3.0",# Add more licenses as needed}print("Select a license for your project:")for key, value in licenses.items():print(f"{key}: {value}")while True:selected_license = input("Enter the number corresponding to your selected license: ")if selected_license in licenses:return licenses[selected_license]else:print("Invalid input. Please enter a valid license number.")if __name__ == "__main__":generate_markdown_file()

图片

10.OrganizeIT 2.0

这个自动化脚本可以帮助在几分钟内整理好文件夹。只需指定需要清理的路径,本脚本就会根据文件扩展名自动将所有文件划分到不同的文件夹中。它还能通过比较文件的哈希值来检测和处理重复文件。

import os
import hashlib
import shutildef get_file_hash(file_path):with open(file_path, 'rb') as f:return hashlib.sha256(f.read()).hexdigest()def organize_and_move_duplicates(folder_path):# Create a dictionary to store destination folders based on file extensionsextension_folders = {}# Create the "Duplicates" folder if it doesn't existduplicates_folder = os.path.join(folder_path, 'Duplicates')os.makedirs(duplicates_folder, exist_ok=True)# Create a dictionary to store file hashesfile_hashes = {}# Iterate through files in the folderfor filename in os.listdir(folder_path):file_path = os.path.join(folder_path, filename)if os.path.isfile(file_path):# Get the file extension_, extension = os.path.splitext(filename)extension = extension.lower()  # Convert extension to lowercase# Determine the destination folderif extension in extension_folders:destination_folder = extension_folders[extension]else:destination_folder = os.path.join(folder_path, extension[1:])  # Remove the leading dot from the extensionos.makedirs(destination_folder, exist_ok=True)extension_folders[extension] = destination_folder# Calculate the file hashfile_hash = get_file_hash(file_path)# Check for duplicatesif file_hash in file_hashes:# File is a duplicate, move it to the "Duplicates" foldershutil.move(file_path, os.path.join(duplicates_folder, filename))print(f"Moved duplicate file {filename} to Duplicates folder.")else:# Store the file hashfile_hashes[file_hash] = filename# Move the file to the destination foldershutil.move(file_path, destination_folder)print(f"Moved {filename} to {destination_folder}")if __name__ == "__main__":folder_path = input("Enter the path to the folder to organize: ")organize_and_move_duplicates(folder_path)

图片

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/22977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI办公自动化:用kimi批量提取音频中的标题并重命名

很多音频文件&#xff0c;文件名很乱&#xff0c;需要根据音频信息中的标题聪明吗 在kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;一步步的思考&#xff0c;完成以下脚本的撰写&#xff1a; 打开文件夹&#xff1a;E:\有声\a16z播客 读取里面所有的mp3格…

ARM的工作模式

ARM的几种工作模式 User : 非特权模式&#xff0c;大部分任务执行在这种模式 FIQ : 当一个高优先级&#xff08;fast) 中断产生时将会进入这种模式IRQ : 当一个低优先级&#xff08;normal) 中断产生时将会进入这种模式 Supervisor&#xff08;SVC&#xff09; : 当复位或软中断…

GPT-4 Turbo 和 GPT-4 的区别

引言 人工智能&#xff08;AI&#xff09;领域的发展日新月异&#xff0c;OpenAI 的 GPT 系列模型一直是这一领域的佼佼者。GPT-4 和 GPT-4 Turbo 是目前市场上最先进的语言模型之一。本文将详细探讨 GPT-4 和 GPT-4 Turbo 之间的区别&#xff0c;以帮助用户更好地理解和选择适…

vue3中 window绑定scroll事件滚动页面获取不到e.target.scrollTop

遇到的问题 vue3项目 onMounted(() > {window.addEventListener(scroll, (e) > {console.log(e.target.scrollTop)}) })想要监听页面中的滚动&#xff0c;然后获取滚动距离实现一些功能&#xff0c;发现event参数中获取不到e.target.scrollTop&#xff08;印象中以前使…

React项目目录结构与组件基础结构

在React中开发项目并扩展组件时&#xff0c;一个清晰合理的目录结构是至关重要的。它不仅可以帮助你更好地组织代码&#xff0c;还能提高项目的可维护性和扩展性。下面是一个基本的React项目目录结构大纲&#xff0c;你可以根据自己的项目需求进行调整&#xff1a; my-app/ ├…

面试被问准备多久要孩子?这样回答

听说有人面试被问到多久要孩子的问题&#xff0c;当时觉得很尴尬&#xff0c;不知如何回答&#xff0c;怕回答的不好不被录用&#xff0c;其实你可以这样回答&#xff0c;让面试官心满意足。 A 面试官&#xff1a;结婚了吗&#xff1f; 我&#xff1a;结婚了 面试官&#xff1…

Vuforia AR篇(六)— Mid Air 半空识别

目录 前言一、什么是Mid Air&#xff1f;二、使用步骤三、示例代码四、效果 前言 增强现实&#xff08;AR&#xff09;技术正在改变我们与数字世界的互动方式。Vuforia作为先进的AR开发平台&#xff0c;提供了多种工具来创造引人入胜的AR体验。其中&#xff0c;Mid Air功能以其…

俄罗斯人有哪些常用的口头禅,柯桥零基础俄语培训

Хватит! 够了&#xff01; -Хватит, не стоит больше шуметь! 够了, 不要再吵了! -Это тебя не касается! 这与你无关&#xff01; Блин! 靠&#xff01; Блин这个词绝对是俄罗斯人最爱用的口语表达之一&#xff0c;…

右键Open with VSCode打开Vue3项目

之前看到一些同事能够对项目根目录进行右键打开项目到 Microsoft VS Code &#xff0c;当时觉得挺不错的&#xff0c;于是乎今天自己折腾了一遍。 目录 1、创建vue3项目 2、更改注册表 # 打开注册表编辑器&#xff08;Registry Editor&#xff09; # 导航到以下注册表路径 …

前端_防抖节流

目录 一、防抖&#xff08;debounce&#xff09; 1.使用场景 2.js代码实现 3.lodash工具库使用 二、节流&#xff08;throttle&#xff09; 1.使用场景 2.js代码实现 3.lodash工具库使用 前端做项目&#xff0c;为了防止用户因为网络不好数据响应慢&#xff0c;导致进行…

信不信,马上教会你Purple Pi OH开发板之ADB常用命令

开源鸿蒙硬件方案领跑者 触觉智能 本文适用于在Purple Pi OH开发板进行分区镜像烧录。触觉智能的Purple Pi OH鸿蒙开源主板&#xff0c;是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党&#xff0c;极客&#xff0c;工程师&#xff0c;极大降低了开源鸿蒙开…

C#-Switch判断分支语句

Switch判断分支语句 作用 &#xff1a; 让顺序执行的代码 产生分支 判断变量和常量相同时 才会执行 用法: Switch后面的变量值与case后面的常量相同时&#xff0c;case内的代码才会执行&#xff0c;如果都不满足则执行default内的代码 break的作用: 跳出 不会再执行判断 …

SQL学习小记(五)解决python连接Oracle数据库出现的问题

python运行时出现错误DPI-1047: Cannot locate a 64-bit Oracle Client library: “The specified module could not be 解决python连接Oracle数据库出现的问题 1. 配置本地Oracle的path2. python10的详细安装过程2.1. python10下载2.2. python10安装2.3.额外操作 3. python 安…

纷享销客BI典型场景案例解析

本章以具体案例来说明纷享销客一体化BI智能分析平台为企业在实际使用过程中带来的价值。 1)场景一&#xff1a;销售经理想要在周会上关注各销售人员的客户及订单情况&#xff0c;并在每周一上午9点可以把上周的整体情况周期性的将报表推送给相关销售人员。 具体图表展示样式及…

BIO 探究二

接上文 BIO 初探究 文章目录 前言一、使用netty二、nio 客户端 与 bio 服务端&#xff0c;bio 服务端 与 nio 客户端总结# 未完待续 前言 提示&#xff1a;验证阻塞到底阻塞在什么地方 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、使用netty 上…

当企业越来越难做,精益变革能带来什么改变?

随着技术的不断进步和消费者需求的日益多样化&#xff0c;传统的管理模式和生产方式已经难以适应时代的发展。越来越多的企业开始陷入困境&#xff0c;难以在激烈的市场竞争中立足。然而&#xff0c;正是在这样的背景下&#xff0c;精益变革应运而生&#xff0c;为企业带来了前…

使用html2canvas和jspdf导出pdf包含跨页以及页脚

首先要下载两个文件&#xff0c;一个为html2canvas.min.js&#xff0c;另一个是jspdf.umd.min.js这两个文件分别下载的地址我也附录上&#xff0c;都在官网git&#xff1a; html2canvas.min.js: https://html2canvas.hertzen.com/dist/html2canvas.min.js jspdf.umd.min.js: …

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

一、704. 二分查找 题目链接&#xff1a;https://leetcode.cn/problems/binary-search/description/ 文章讲解&#xff1a;https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1fA4y1o715 1.…

前端实现大文件分片并行上传、断点续传、秒传(完整解析)

一、总体流程图 二、具体步骤 简单理解&#xff1a;前端先将文件切割多份&#xff0c;在进行上传&#xff0c;由后端进行切片合并操作。 具体逻辑&#xff1a; 1. 前端选中上传文件&#xff08;如果是批量上传就把选中的文件存入选中文件列表数组中&#xff0c;后续在遍历上…

【Vue3-Element-Admin 动态路由】涉及到的配置

Vue3-Element-Admin 动态路由 涉及到的配置 0. Vue3-Element-Admin 项目地址1. router/index.ts2. Mock接口模拟数据3. store/permission4. api/menu5. plugins/permission 这篇文章讲的主要是 Vue3-Element-Admin 差不多内置的动态路由配置 (根据后端接口渲染) 先把开发环境&a…