- Python Web应用开发之Flask框架——高级应用(一)
Smile丶Life丶
Pythonpython前端flask
八、上下文管理在Flask框架中,上下文管理是一项关键特性,它允许开发者在应用程序的不同部分之间共享数据,并且确保在请求处理期间相关的资源(如数据库连接)能够正确地初始化和清理。Flask中有两种主要的上下文类型:应用上下文(appcontext)和请求上下文(requestcontext)。8.1请求上下文在Flask中,请求上下文是一个关键概念,它包含了处理请求所需的所有信息。当Flask接收
- Python编程:requests 核心源码
requests是Python中最受欢迎的HTTP客户端库之一,其源码设计优雅且模块化,适合学习优秀的Python项目架构。以下是对requests库的核心源码解析,涵盖关键模块、设计模式和实现细节。源码结构概览requests的源码主要分为以下几个核心模块:requests/├──__init__.py#暴露主要API(如get,post)├──api.py#实现请求方法(get/post/pu
- jmeter如何做自动化接口测试?
AIZHINAN
jmeter自动化接口测试jmeter接口测试
JMeter不仅可以做性能测试,还能用于自动化接口测试,结合断言、参数化和报告生成,实现持续集成(CI)。以下是简明步骤:2小时讲解自动化测试工具Jmeter,如何实现接口测试(快速上手教程)1.核心步骤(1)创建测试计划新建ThreadGroup(线程组),设置线程数=1(单次执行)。添加HTTPRequest定义接口请求(URL、Method、Headers、Body)。(2)参数化CSV文件
- 分组取最新记录:小白也能懂的SQL高效去重技巧
一勺菠萝丶
计算机专业知识Javasql数据库java
当你的数据中有重复记录时,如何快速找到每个分组的最新一条?一个优雅的SQL查询就能解决!生活中的例子想象你管理一家网店,同一个订单(order_number)中的同一商品(product)可能有多次更新记录(比如库存变化、价格调整)。你只想查看每个订单商品的最新状态,这时就需要用到"分组取最新记录"的操作。原理解析:给数据分组并编号SELECT*,ROW_NUMBER()OVER(PARTITIO
- GitHub Actions配置python flake8和black
小米人儿
Pythonpythonflake8black
要在GitHubActions中使用flake8和black进行代码规范检查和格式化验证,请按照以下步骤操作:1.创建GitHubActions工作流文件在项目根目录创建文件:.github/workflows/lint.yml,内容如下:name:PythonLintingon:push:branches:[main,master]#触发分支pull_request:#PR时触发jobs:lin
- Gin中间件函数原理
Python ml
gogin中间件
在Gin框架中,Context.Next()方法是中间件处理的核心,它控制着请求处理链(HandlersChain)中的执行流。下面是对这个函数及相关概念的详细解释:func(c*Context)Next()这个方法定义在Context结构体上,用于在中间件中调用,以便继续执行下一个中间件或处理函数。typeContextstruct{writermemresponseWriterRequest*
- vscode 调试vue 如何不进入源码或者映射文件当中
很菜很菜的人
vscodevue.jside
{"version":"0.2.0","configurations":[{"name":"DebugVue3(Vite)","type":"chrome","request":"launch","url":"http://localhost:5173",//Vite默认端口"webRoot":"${workspaceFolder}/src","sourceMapPathOverrides":{"
- vscode 调试unity
BigData-0
vscodeunityide
lanch.json{“version”:“0.2.0”,“configurations”:[{“name”:“AttachtoUnity”,“type”:“vstuc”,“request”:“attach”}]}
- NGINX代理minio外链配置
闲话不说。直接上代码#代理8888端口server{listen8888;server_name127.0.0.1;#允许带特殊字符的请求(如AWS签名参数中的符号)valid_referersnoneblockedserver_names;charsetutf-8;location/{#保留原始请求的路径和查询参数proxy_passhttp://10.10.10.10:8888$request
- python、pytest、requests、yaml、allure接口自动化测试
OY-xin
零代码pytest测试框架pytestpython自动化单元测试
接口自动化需要解决的九大问题1、用例的顺序(点击这里)在接口自动化测试中,测试用例的执行顺序非常重要,尤其是当接口之间存在依赖关系时。例如,某些接口的执行需要依赖其他接口先返回正确的结果。因此,合理的用例顺序可以避免测试结果的不准确或失败。通常可以通过代码中的执行逻辑或测试框架的配置来控制用例的顺序。2、用例之间的接口关联(点击这里)接口之间可能存在着复杂的依赖关系。例如,创建用户接口需要先调用登
- Pytest测试框架快速搭建
程序员勋勋
面试技术分享软件测试pytest
一、介绍pytest是一个非常成熟的Python测试框架,能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-reru
- Python获取NTP时间
OneT1me
python开发语言
使用ntplib库,没有的话需要先安装pipinstallntplib然后使用下面的代码获取时间importntplibfromtimeimportctimeclient=ntplib.NTPClient()try:response=client.request('ntp.ntsc.ac.cn')#解析NTP时间戳ntp_time=response.tx_time#将时间戳转换为可读格式reada
- Web爬虫编程语言选择指南
q56731523
前端爬虫开发语言
刚学爬虫的小伙伴常常为选择那种语言来写爬虫而烦恼,今天我将总结几种语言的优劣势,然后选择适合编写Web爬虫的编程语言。这就需要我们考虑开发效率、生态库支持、并发性能等因素。以下是主流选择及特点跟着一起看看吧:1.Python(推荐首选)优势:丰富库支持:Requests(HTTP请求)、BeautifulSoup/lxml(HTML解析)、Scrapy(全功能框架)、Selenium(模拟浏览器)
- Python实例题:基于 Python 的简单爬虫与数据可视化
狐凄
实例python开发语言
目录Python实例题题目要求:解题思路:代码实现:Python实例题题目基于Python的简单爬虫与数据可视化要求:使用Python构建一个简单的爬虫程序,支持以下功能:从指定网站抓取数据(如新闻、商品信息等)解析HTML内容并提取所需信息将数据存储到文件或数据库对抓取的数据进行统计和可视化分析使用requests和BeautifulSoup进行网页爬取和解析。使用pandas和matplotl
- MinerU API 服务Docker一键部署(附源码)
码农垦荒笔记
docker容器运维
一、关于MinerU一站式、开源、高质量的数据提取工具,支持多种功能,如提取PDF、word、markdown等格式的内容。1.主要功能删除页眉、页脚、脚注、页码等元素,保持语义连贯对多栏输出符合人类阅读顺序的文本保留原文档的结构,包括标题、段落、列表等提取图像、图片标题、表格、表格标题自动识别文档中的公式并将公式转换成latex自动识别文档中的表格并将表格转换成latex乱码PDF自动检测并启用
- Word转LaTeX排版6大技巧
加油吧zkf
目标跟踪计算机视觉目标检测机器学习人工智能python
Word内容快速排版到TeX格式的技巧分享(含多种实用方法)在科研论文、技术报告或毕业论文写作中,很多同学喜欢先用Word写初稿,再迁移到LaTeX(.tex文件)进行排版。但迁移过程中常常遇到这些麻烦:Word中的公式复制过去乱码或无法编译排版格式对不上期刊/会议模板自己新写的tex文件总是出错,编译困难今天分享我在实际论文写作中总结出的几条小技巧,帮大家快速把Word内容排到LaTeX,而且能
- 奔图打印机 打印乱码的解决方法
如遇使用奔图打印机:打印乱码并且一直打印不停的问题,是因为计算机名称为中文造成,把电脑计算机名称改为拼音字母即可正常。这个例子具体的问题没有查询到但是按照以上方法是可以临时解决的。
- python异步方法async
love_521_
python后端
一篇简单demo带你走进asyncimportasyncioimporttimeimportrequestsasyncdefntest2(i):r=awaitother_ntest(i)#等待other_ntest执行完成print(f"ntest2:{i}:{r}")asyncdefother_ntest(i):r=requests.get(i)print(f"other_ntest:{i}")
- VUE——Ajax【请求方式】
时间sk
VUE疑难杂症vue.jsajax前端
一、XMLHttpRequest示例1.GET请求(获取数据)//创建对象constxhr=newXMLHttpRequest();//配置请求(异步GET)xhr.open('GET','https://api.example.com/users/123',true);//设置响应类型为JSON(可选)xhr.responseType='json';//监听请求状态变化xhr.onreadyst
- Ajax 入门
凌冰_
JSajax前端javascript
一、Ajax概念Ajax(AsynchronousJavaScriptandXML)是一种在不刷新整个页面的情况下,与服务器进行异步通信并更新部分网页的技术。尽管名称中包含“XML”,但现代Ajax更多使用JSON作为数据格式。二、核心概念异步通信:无需刷新整个页面,可在后台与服务器交换数据。核心技术:XMLHttpRequest(XHR):原生JavaScriptAPI(旧版)FetchAPI:
- PHP语法基础篇(八):超全局变量
zorro_z
php手记实战php
超全局变量是在PHP4.1.0中引入的,并且是内置变量,可以在所有作用域中始终可用。PHP中的许多预定义变量都是"超全局的",这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行global$variable;就可以访问它们。PHP超全局变量包括:$GLOBALS$_SERVER$_REQUEST$_POST$_GET$_FILES$_ENV$_COOKIE$_SESSION本篇文章
- Python 爬虫学习过程中最容易踩的 10 个坑,你中招了吗?
程序员威哥
python开发语言科技
写给每一个在爬虫路上被“反爬”、被“封IP”、被“乱码”支配过的你。Python爬虫作为数据获取与自动化最常见的工具之一,看似简单,但很多初学者(甚至有经验的开发者)在实际开发中都容易陷入一些坑。本文将结合真实项目经验,总结10个最常见的坑,并给出对应的解决方案,助你少走弯路、爬得更稳。✅适合人群正在学习Python爬虫的新手想要了解常见问题和最佳实践的开发者爬虫踩坑无数但依然热爱爬虫的老玩家坑1
- 使用python代码调用dify
奋斗小刘123
python前端开发语言
importreimportjsonimportrequestsdefdify_data(inputstr,num):api_url="*****************"api_key="*****************"#组装数据,num和input为输入的数据,同时在dify定义data={"inputs":{"num":num,"input":inputstr},"response_mo
- 网络故障排查:Ping和Tracert命令
小小小糖果人
网络小知识网络
1、Ping和Tracert的用途1.1Ping和Tracert命令检查网络连接是否可达以及分析网络发生故障的位置。其中,Ping用于检查网络连接及主机是否可达;Tracert命令用于测试数据报文从发送主机到目的地所经过的网关。2、Ping命令简介2.1Ping命令主要用于检查网络连接及主机是否可达。Ping功能是基于ICMP协议来实现的:源端向目的端发送ICMP请求(ECHO-REQUEST)报
- BAAI/BGE-VL多模态模型部署、原理、代码详解(实现图像文本混合检索),包含BEG-VL多模态模型的本地部署详细步骤及代码原理解析
令令小宁
python语言模型自然语言处理nlp人工智能
本文包含BGE-VL多模态模型的本地部署详细步骤及代码原理解析文章目录前言一、模型下载二、计算流程解析1.BGE-VL-base/Large2.BGE-VL-MLLM-s1/s2三、总结前言提示:这里可以添加本文要记录的大概内容:包含四个模型及数据集,数据集未开源,四个模型可以分别下载:其中,BGE-VL-base/Large是基于CLIP训练的模型,BGE-VL-MLLM-S1/S2是基于LLM
- 彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)
梦新嵌入式
qt
原文链接:https://blog.csdn.net/m0_46577050/article/details/133804929
- Vue学习之路04----响应式基础
利刃之灵
#Vue基础vue.js前端
响应式基础ref()(基本类型的响应式数据)在组合式API中,推荐使用ref()函数来声明响应式状态,ref能定义基本类型的,也能定义对象类型的:import{ref}from'vue'letcount=ref(0)ref()接收参数,并将其包裹在一个带有.value属性的ref对象中返回,在模版中则不需要:{{count}}按钮1按钮2import{ref}from"vue";exportdef
- Rust与Locust集成实战
KENYCHEN奉孝
Rustgopython实践大全pythonrust测试工具
Rust与Locust集成实例Rust与Locust的集成通常涉及使用Rust编写高性能的负载测试逻辑,并通过Locust框架进行分布式测试和结果分析,实际应用场景的示例。基础HTTP请求测试使用Rust编写HTTP请求逻辑,通过Locust模拟高并发场景:usereqwest::blocking::Client;pubfnmake_http_request(url:&str)->Result{l
- Python 爬虫实战:微博用户数据爬取
Python核芯
Python爬虫实战项目python爬虫开发语言
一、前言微博作为国内最大的社交媒体平台之一,蕴含着大量有价值的公开数据。本文将详细介绍如何使用Python爬取微博数据,包括环境搭建、登录模拟、数据抓取、反爬应对、数据存储等完整流程。二、准备工作1.环境准备与工具选择1.1必需工具包安装爬虫所需的库:pipinstallrequestspandasbeautifulsoup4requests:发送HTTP请求。pandas:数据处理和分析。bea
- Python爬虫实战:研究urllib 库相关技术
ylfhpy
爬虫项目实战python爬虫开发语言urllib
1.引言1.1研究背景与意义互联网每天产生海量数据,如何高效获取和利用这些数据成为重要研究方向。网页爬虫作为自动获取网络信息的核心技术,在市场调研、舆情分析、学术研究等领域具有广泛应用。Python凭借其简洁语法和丰富库支持,成为爬虫开发的首选语言。1.2相关技术概述Python爬虫技术栈主要包括:标准库:urllib、re、csv等第三方库:Requests、BeautifulSoup、Scra
- JVM StackMapTable 属性的作用及理解
lijingyao8206
jvm字节码Class文件StackMapTable
在Java 6版本之后JVM引入了栈图(Stack Map Table)概念。为了提高验证过程的效率,在字节码规范中添加了Stack Map Table属性,以下简称栈图,其方法的code属性中存储了局部变量和操作数的类型验证以及字节码的偏移量。也就是一个method需要且仅对应一个Stack Map Table。在Java 7版
- 回调函数调用方法
百合不是茶
java
最近在看大神写的代码时,.发现其中使用了很多的回调 ,以前只是在学习的时候经常用到 ,现在写个笔记 记录一下
代码很简单:
MainDemo :调用方法 得到方法的返回结果
- [时间机器]制造时间机器需要一些材料
comsci
制造
根据我的计算和推测,要完全实现制造一台时间机器,需要某些我们这个世界不存在的物质
和材料...
甚至可以这样说,这种材料和物质,我们在反应堆中也无法获得......
 
- 开口埋怨不如闭口做事
邓集海
邓集海 做人 做事 工作
“开口埋怨,不如闭口做事。”不是名人名言,而是一个普通父亲对儿子的训导。但是,因为这句训导,这位普通父亲却造就了一个名人儿子。这位普通父亲造就的名人儿子,叫张明正。 张明正出身贫寒,读书时成绩差,常挨老师批评。高中毕业,张明正连普通大学的分数线都没上。高考成绩出来后,平时开口怨这怨那的张明正,不从自身找原因,而是不停地埋怨自己家庭条件不好、埋怨父母没有给他创造良好的学习环境。
- jQuery插件开发全解析,类级别与对象级别开发
IT独行者
jquery开发插件 函数
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给
jQuery添加新的全局函数,相当于给
jQuery类本身添加方法。
jQuery的全局函数就是属于
jQuery命名空间的函数,另一种是对象级别的插件开发,即给
jQuery对象添加方法。下面就两种函数的开发做详细的说明。
1
、类级别的插件开发 类级别的插件开发最直接的理解就是给jQuer
- Rome解析Rss
413277409
Rome解析Rss
import java.net.URL;
import java.util.List;
import org.junit.Test;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.S
- RSA加密解密
无量
加密解密rsa
RSA加密解密代码
代码有待整理
package com.tongbanjie.commons.util;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerat
- linux 软件安装遇到的问题
aichenglong
linux遇到的问题ftp
1 ftp配置中遇到的问题
500 OOPS: cannot change directory
出现该问题的原因:是SELinux安装机制的问题.只要disable SELinux就可以了
修改方法:1 修改/etc/selinux/config 中SELINUX=disabled
2 source /etc
- 面试心得
alafqq
面试
最近面试了好几家公司。记录下;
支付宝,面试我的人胖胖的,看着人挺好的;博彦外包的职位,面试失败;
阿里金融,面试官人也挺和善,只不过我让他吐血了。。。
由于印象比较深,记录下;
1,自我介绍
2,说下八种基本类型;(算上string。楼主才答了3种,哈哈,string其实不是基本类型,是引用类型)
3,什么是包装类,包装类的优点;
4,平时看过什么书?NND,什么书都没看过。。照样
- java的多态性探讨
百合不是茶
java
java的多态性是指main方法在调用属性的时候类可以对这一属性做出反应的情况
//package 1;
class A{
public void test(){
System.out.println("A");
}
}
class D extends A{
public void test(){
S
- 网络编程基础篇之JavaScript-学习笔记
bijian1013
JavaScript
1.documentWrite
<html>
<head>
<script language="JavaScript">
document.write("这是电脑网络学校");
document.close();
</script>
</h
- 探索JUnit4扩展:深入Rule
bijian1013
JUnitRule单元测试
本文将进一步探究Rule的应用,展示如何使用Rule来替代@BeforeClass,@AfterClass,@Before和@After的功能。
在上一篇中提到,可以使用Rule替代现有的大部分Runner扩展,而且也不提倡对Runner中的withBefores(),withAfte
- [CSS]CSS浮动十五条规则
bit1129
css
这些浮动规则,主要是参考CSS权威指南关于浮动规则的总结,然后添加一些简单的例子以验证和理解这些规则。
1. 所有的页面元素都可以浮动 2. 一个元素浮动后,会成为块级元素,比如<span>,a, strong等都会变成块级元素 3.一个元素左浮动,会向最近的块级父元素的左上角移动,直到浮动元素的左外边界碰到块级父元素的左内边界;如果这个块级父元素已经有浮动元素停靠了
- 【Kafka六】Kafka Producer和Consumer多Broker、多Partition场景
bit1129
partition
0.Kafka服务器配置
3个broker
1个topic,6个partition,副本因子是2
2个consumer,每个consumer三个线程并发读取
1. Producer
package kafka.examples.multibrokers.producers;
import java.util.Properties;
import java.util.
- zabbix_agentd.conf配置文件详解
ronin47
zabbix 配置文件
Aliaskey的别名,例如 Alias=ttlsa.userid:vfs.file.regexp[/etc/passwd,^ttlsa:.:([0-9]+),,,,\1], 或者ttlsa的用户ID。你可以使用key:vfs.file.regexp[/etc/passwd,^ttlsa:.: ([0-9]+),,,,\1],也可以使用ttlsa.userid。备注: 别名不能重复,但是可以有多个
- java--19.用矩阵求Fibonacci数列的第N项
bylijinnan
fibonacci
参考了网上的思路,写了个Java版的:
public class Fibonacci {
final static int[] A={1,1,1,0};
public static void main(String[] args) {
int n=7;
for(int i=0;i<=n;i++){
int f=fibonac
- Netty源码学习-LengthFieldBasedFrameDecoder
bylijinnan
javanetty
先看看LengthFieldBasedFrameDecoder的官方API
http://docs.jboss.org/netty/3.1/api/org/jboss/netty/handler/codec/frame/LengthFieldBasedFrameDecoder.html
API举例说明了LengthFieldBasedFrameDecoder的解析机制,如下:
实
- AES加密解密
chicony
加密解密
AES加解密算法,使用Base64做转码以及辅助加密:
package com.wintv.common;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decod
- 文件编码格式转换
ctrain
编码格式
package com.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
- mysql 在linux客户端插入数据中文乱码
daizj
mysql中文乱码
1、查看系统客户端,数据库,连接层的编码
查看方法: http://daizj.iteye.com/blog/2174993
进入mysql,通过如下命令查看数据库编码方式: mysql> show variables like 'character_set_%'; +--------------------------+------
- 好代码是廉价的代码
dcj3sjt126com
程序员读书
长久以来我一直主张:好代码是廉价的代码。
当我跟做开发的同事说出这话时,他们的第一反应是一种惊愕,然后是将近一个星期的嘲笑,把它当作一个笑话来讲。 当他们走近看我的表情、知道我是认真的时,才收敛一点。
当最初的惊愕消退后,他们会用一些这样的话来反驳: “好代码不廉价,好代码是采用经过数十年计算机科学研究和积累得出的最佳实践设计模式和方法论建立起来的精心制作的程序代码。”
我只
- Android网络请求库——android-async-http
dcj3sjt126com
android
在iOS开发中有大名鼎鼎的ASIHttpRequest库,用来处理网络请求操作,今天要介绍的是一个在Android上同样强大的网络请求库android-async-http,目前非常火的应用Instagram和Pinterest的Android版就是用的这个网络请求库。这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,通
- ORACLE 复习笔记之SQL语句的优化
eksliang
SQL优化Oracle sql语句优化SQL语句的优化
转载请出自出处:http://eksliang.iteye.com/blog/2097999
SQL语句的优化总结如下
sql语句的优化可以按照如下六个步骤进行:
合理使用索引
避免或者简化排序
消除对大表的扫描
避免复杂的通配符匹配
调整子查询的性能
EXISTS和IN运算符
下面我就按照上面这六个步骤分别进行总结:
- 浅析:Android 嵌套滑动机制(NestedScrolling)
gg163
android移动开发滑动机制嵌套
谷歌在发布安卓 Lollipop版本之后,为了更好的用户体验,Google为Android的滑动机制提供了NestedScrolling特性
NestedScrolling的特性可以体现在哪里呢?<!--[if !supportLineBreakNewLine]--><!--[endif]-->
比如你使用了Toolbar,下面一个ScrollView,向上滚
- 使用hovertree菜单作为后台导航
hvt
JavaScriptjquery.nethovertreeasp.net
hovertree是一个jquery菜单插件,官方网址:http://keleyi.com/jq/hovertree/ ,可以登录该网址体验效果。
0.1.3版本:http://keleyi.com/jq/hovertree/demo/demo.0.1.3.htm
hovertree插件包含文件:
http://keleyi.com/jq/hovertree/css
- SVG 教程 (二)矩形
天梯梦
svg
SVG <rect> SVG Shapes
SVG有一些预定义的形状元素,可被开发者使用和操作:
矩形 <rect>
圆形 <circle>
椭圆 <ellipse>
线 <line>
折线 <polyline>
多边形 <polygon>
路径 <path>
- 一个简单的队列
luyulong
java数据结构队列
public class MyQueue {
private long[] arr;
private int front;
private int end;
// 有效数据的大小
private int elements;
public MyQueue() {
arr = new long[10];
elements = 0;
front
- 基础数据结构和算法九:Binary Search Tree
sunwinner
Algorithm
A binary search tree (BST) is a binary tree where each node has a Comparable key (and an associated value) and satisfies the restriction that the key in any node is larger than the keys in all
- 项目出现的一些问题和体会
Steven-Walker
DAOWebservlet
第一篇博客不知道要写点什么,就先来点近阶段的感悟吧。
这几天学了servlet和数据库等知识,就参照老方的视频写了一个简单的增删改查的,完成了最简单的一些功能,使用了三层架构。
dao层完成的是对数据库具体的功能实现,service层调用了dao层的实现方法,具体对servlet提供支持。
&
- 高手问答:Java老A带你全面提升Java单兵作战能力!
ITeye管理员
java
本期特邀《Java特种兵》作者:谢宇,CSDN论坛ID: xieyuooo 针对JAVA问题给予大家解答,欢迎网友积极提问,与专家一起讨论!
作者简介:
淘宝网资深Java工程师,CSDN超人气博主,人称“胖哥”。
CSDN博客地址:
http://blog.csdn.net/xieyuooo
作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,