- Tesla Free - Fall attack:特斯拉汽车网络安全攻击事件分析
老猿讲编程
高安全性实时软件开发汽车web安全安全
文章目录一、TeslaFree-Fallattack:特斯拉汽车网络安全事件纪要1.引言2.攻击流程2.1攻击切入点2.2系统入侵2.3CAN总线操控3.影响后果4.特斯拉应对措施5.研究意义二、安全攻击事件技术分析以及相应的检测和缓解措施一、TeslaFree-Fallattack:特斯拉汽车网络安全事件纪要1.引言TeslaFree-Fallattack是腾讯科恩实验室(TencentKeen
- 利用百度物联网MQTT平台远程在线聊天室的实现,使用自带GUI,并通过Pyinstaller进行exe打包
wss2210
python物联网ui
一、项目简介XIBI(随便取的)是一个简单的聊天工具,通过MQTT协议实现消息的发布和订阅。你可以通过它和连接到同一个MQTT服务器的其他小伙伴聊天。当然,你也可以把它当作一个学习MQTT协议的练手项目。主要功能:连接MQTT服务器:输入昵称,点击连接按钮,就可以加入聊天室。发送消息:在输入框里输入你想说的话,按下回车键或者点击发送按钮,消息就会发送到所有连接到服务器的客户端。接收消息:当其他用户
- Python异常处理:从基础到进阶
傻啦嘿哟
python开发语言
目录一、异常处理基础1.1什么是异常1.2捕获异常1.3多个异常处理1.4else和finally子句二、进阶应用2.1自定义异常2.2异常链2.3使用contextlib进行上下文管理2.4捕获所有异常(慎用)2.5异常处理与函数返回值三、实战案例3.1文件读写异常处理3.2网络请求异常处理四、总结在编程过程中,我们经常会遇到各种运行时错误,比如除零错误、文件未找到错误等。为了处理这些错误,Py
- 【过程记录】windows安装triton
靠才华吃土
过程记录pip
windows安装triton记录问题原因解决办法问题在执行pipinstalltriton=2.0.0的时候遇到报错:没有对应的版本原因triton只适用于Linux操作系统,对于Windows不适用,需要做相应的转换解决办法下载对应的.whl文件triton-2.0.0-cp310-cp310-win_amd64.whl地址:https://github.com/PrashantSaikia/
- 深度学习-92-大语言模型LLM之基于langchain的模型IO的模型调用
皮皮冰燃
深度学习深度学习语言模型langchain
文章目录1Model的输入输出2langchain支持的模型3调用Ollama模型3.1设置环境变量3.2大语言模型LLM(OllamaLLM)3.2.1生成文本补全3.2.2流式生成文本补全3.3聊天模型(ChatOllama)3.3.1内置的消息类型3.3.2HumanMessage和SystemMessage3.3.3元组方式构成消息列表3.3.4stream流式3.4文本嵌入模型(Olla
- Vue 中插槽(Slot)用法
m0_74825656
vue.jsjavascript前端
Vue中插槽(Slot)用法(一)插槽用法概念(二)插槽的基本类型1.默认插槽(DefaultSlot)2.具名插槽(NamedSlots)3.作用域插槽(ScopedSlots)4.动态插槽名(DynamicSlotNames)5.插槽后备内容(SlotFallbackContent)6.Vue2.6.0之前与Vue2.6.0后的比对6.1默认插槽缩写(由不写变成v-slot)6.2具名插槽缩写
- ubuntu server 24 安装备忘
fancybit
linuxubuntu数据库
I.安装桌面和VNCsudoapt-getinstallgnomesudoapt-getinstallgnome-panelsudoapt-getinstalltigervnc-standalone-servervi~/.vnc/configsession=gnomegeometry=1920x1080localhost=nodepth=32SecurityTypes=VncAuthvi~/.vn
- 准确-NGINX 1.26.2配置正向代理并编译安装的完整过程
ADFVBM
面试学习路线阿里巴巴nginx运维
NGINX1.26.2配置正向代理并编译安装的完整过程,使用了ngx_http_proxy_connect_module模块。1.环境准备1.1安装依赖确保系统安装了以下必要的依赖:sudoyuminstall-ygccgcc-c++makepcre-develzlib-developenssl-devel1.2下载NGINX源码从NGINX官方下载指定版本(1.26.2)的源码:wgethttp
- Redis 单机、哨兵、集群搭建
1.Redis单机搭建(以6.0.6版本为例)安装gcc套装。yuminstallcppyuminstallbinutilsyuminstallglibcyuminstallglibc-kernheadersyuminstallglibc-commonyuminstallglibc-develyuminstallgccyuminstallmake升级gcc。yum-yinstallcentos-r
- python代码转exe
xuaman
pythonpythonexe编译
1.打开cmd控制台,跳转之python目录下的scripts.2.输入:pipinstallnumpy3.第二步成功后,输入:pipinstallPyInstaller4.第三步完成后,输入:pyinstaller-Fpy文件路径5.第四步完成后,在当前目录下出现,dist文件夹,里面就是编译成功的同名exe文件如有问题可以留言。
- Python打包脚本为EXE可执行文件
Ethan Hunt丶
开发pythonbash
Python打包脚本为EXE可执行文件1.打包原理2.代码示例2.1项目需求2.2项目结构2.3文件内容2.4安装依赖库2.5使用Pyinstaller进行打包3.注意事项3.1新建虚拟环境3.2替换EXE文件图标4.效果展示1.打包原理Python脚本打包为EXE的过程,主要是通过将Python代码、依赖库和Python解释器一起打包成一个可执行文件,从而实现不依赖于Python环境的独立执行。
- reactor中的并发
silver9886
javareactor
1.reactor中的并发有两种方式1.1flatmap,底层是多线程并发处理。在reactor的演讲中,flatmap对于io类型的并发效果较好.flamap有两个参数:intconcurrency,intprefetch。分别代表并发的线程数和缓存大小注意凡是参数中有prefetch的,都表示这个operator有对应大小的缓存。1.2parallel,这种operator对cpu并发的效果较
- 嵌入式开发中的C语言技巧
为也科技
c语言开发语言单片机mcu
在嵌入式开发中,C语言是最常用的编程语言之一。由于嵌入式系统通常资源受限(如内存、处理能力、功耗等),因此开发者需要在使用C语言时特别关注效率、可靠性和可维护性。本文将分享一些常用的C语言技巧,帮助开发者优化代码,提高嵌入式系统的性能和稳定性。1.内存优化:谨慎使用动态内存分配在嵌入式开发中,由于内存通常非常有限,我们应该尽量避免使用动态内存分配(malloc和free)。动态内存分配容易导致内存
- Python执行MYSQL SQL文件
雪靡
pythonmysqlsql数据库
很多情况下我们需要Python来执行SQL文件,但是一般库没有提供这些功能,直接执行经常会出错,这里分析各种情况下执行SQL语句的处理。如果你没有时间的话,直接跳转查看[第三点](#3.包含DELIMITER的语句)。准备工作这里采用**mysql-connector连接MySQL,如果还没有安装可以使用pip命令来安装mysql-connector**:pipinstallmysql-conne
- Autosar OS配置-Task/ISR stack监控-基于ETAS软件
赞哥哥s
Autosar进阶autosaretasos
文章目录前言OS配置OsOSOsTaskOsIsr代码分析总结前言之前在调试过程中出现过进Os_Cbk_StackOverrunHook导致程序卡死的情况,当时是把task中的OsTaskStackAllocation改大之后就好了。当时不太清楚原理。所以有了本文。AutosarOS中支持对stack的监控,但是只在stack溢出时触发hook函数。OS中的二类中断和TASKstack的使用量可以
- Docker+gitlab+jenkins实现项目自动部署
Java小海.
springjava后端
一、Docker安装(CentOS)1、准备工作系统要求以下为官网原文ToinstallDockerEngine,youneedamaintainedversionofCentOS7or8.Archivedversionsaren’tsupportedortested.Thecentos-extrasrepositorymustbeenabled.Thisrepositoryisenabledby
- Python将py文件编译为exe的方法
IT界搬运喵
Pythonpythonpycharm开发语言exeflask
使用PyCharm工具写好的Python程序脚本,怎么将.py文件编译为可执行的.exe文件前提是已经安装了Python环境。第一步:在PyCharm内下载安装pyinstalle库或使用CMD安装PyCharm内安装:File->Settings->ProjectInterpreter->添加相应的包或者使用CMD安装,提示安装成功即可pyinstallerpipinstallpyinstall
- ubuntu升级python版本
小帆芽芽
ubuntupythonlinux
Ubuntu升级Python版本解压缩文件:下载完成后,解压缩文件:tar-xfPython-3.12.0.tgz编译并安装:进入解压后的目录,然后配置和安装Python:codecdPython-3.12.0./configure--enable-optimizationsmake-j$(nproc)sudomakealtinstall查找安装所在地zhongs@ubuntu:~/HOME/pa
- 给Ubuntu升级Python3.7
lezeqe
Python3.7Python升级
Ubuntu默认安装的是Python2.7,如果想升级的话,应打开终端输入:sudoapt-getinstallpython3.7
- ubuntu更新python的版本
kyle-fang
pythonpythonanacondaopencv
在Ubuntu终端执行以下两条命令即可更新Python版本:$sudoapt-getupdate$sudoapt-getinstallpython3.8以上更新方法仅在Ubuntu已经安装Python的情况下才有效,如果你的Ubuntu中没有Python环境,或者你想重新安装,那么就得到官网下载源代码,然后自己编译。但是运行完上面的命令后,输入python3时,还是老版本调整Python3的优先级
- linux截图注释工具推荐
翻滚吧键盘
linux运维服务器
引言gnome的截图工具确实方便,也可以录屏,不过它缺少了截图后注释的功能,十分的不方便。本来我打算寻找有没有gnome插件可以完成这个功能,但是并没有找到,然后看到了这个ksnip工具。安装和使用安装sudoaptinstallksnip当然,可以通过快捷键进行调用参考https://github.com/ksnip/ksnip
- 【JS】加密 CryptoJS DES
沈梦研
大数据
平时开发可能会遇到需要加密的情况,现在有很多加密有很多方式,我这边记录的是前后端需要一一对应的加密,使用的是CryptoJSDES加密:目录1、新建mode-ecb.js2、新建signed.js3、新建tripledes.js1、新建mode-ecb.js/*CryptoJSv3.1.2code.google.com/p/crypto-js(c)2009-2013byJeffMott.Allri
- Linux 安装gitlab
絮落锦乡
linuxgitlab运维
1.更新系统确保系统是最新的:sudoyumupdate-y2.安装依赖项安装必需的依赖项:sudoyuminstall-ycurlpolicycoreutils-pythonopenssh-serverGitLab需要一个邮件服务来发送通知。你可以使用现有的邮件服务器,或者在本地配置Postfix:sudoyuminstall-ypostfixsudosystemctlenablepostfix
- winform调用python_C#调用Python代码
weixin_39787826
winform调用python
C#中,如果碰到需要调用Python代码时,一种方法是使用IronPython,不过这种方法太繁琐太累,特别是碰到Python代码中带有大量的第三方包,就会一直报错,提示缺少相应模块,这种方法太low,只支持Python2代码,果断摒弃。推荐另一种方法是用pyinstaller打包Python程序,会自动将程序中引用的第三方包也打包进去,Python3.X随便用,很方便。pyinstaller怎么
- CentOS7静默安装Oracle 19c
RedCong
oracleDBA成长之路oraclecentoslinux
在CENTOS7上安装Oracle19c,创建非容器数据库实例(含静默安装)1.先决条件1.1关闭防火墙#检查防火墙状态systemctlstatusfirewalld.service#暂时关闭防火墙,下次启动时防火墙仍随系统启动而启动systemctlstopfirewalld.service#彻底永久关闭防火墙systemctldisablefirewalld.service1.2关闭SELI
- 确定电机极对数的两种方法
GivemeAK
嵌入式硬件
目前检索到的两种方法:方法1:旋转电机观测任意两相的波形【BLDC】使用示波器测量无刷电机极对数_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1iY411377Z/?spm_id_from=333.337.search-card.all.click&vd_source=0cac5d2ea8bab18974778b90331f9f30示波器上有几个脉冲
- Django网站搭建流程
补三补四
#Django框架后端开发sqlite数据库django后端python
使用Django搭建网站是一个系统的过程,涉及从环境搭建到部署上线的多个步骤。以下是详细的流程:1.环境搭建(1)安装PythonDjango是基于Python的Web框架,因此需要先安装Python。建议安装Python3.8及以上版本。下载地址:Python官网。(2)安装Django使用pip安装Django:pipinstalldjango检查Django是否安装成功:django-adm
- elasticSearch数据的导入和导出
ZNineSun
大数据elasticsearchelasticdumpnode
es数据的导入和导出需要借助于elasticdump工具,这是一个nodejs的插件,安装方式直接使用npm即可,安装指令如下:npminstallelasticdump-g如果您的电脑还未安装Node环境,请移步此处:《npm安装教程》1.导出指定索引的数据到本地elasticdump--input=http://localhost:9200/demo--output=D:/ES/date/de
- Python文件封装成EXE(可执行文件)
苏学能
python开发语言后端
Section1-创建纯python环境创建一个python环境,最好32位的,这样执行生成的exe可以在32位系统和64位系统上运行,此外,打包编译的exe也不至于过于庞大,以及出现总是打包不成功的问题。Section2-执行pipinstallpyinstaller在纯python环境中pip命令下执行。Section3-修改配置文件:#-*-mode:python-*-block_ciphe
- 大模型的部署方法三:使用Xinference部署
大模型微调部署
人工智能AI大模型大模型AI深度学习大模型部署
Xinference是一个分布式推理框架,它支持一键部署各种模型,包括大型语言模型(LLMs)。使用Xinference部署AI大模型的步骤:一、安装Xinference1)环境准备:确保您的系统上安装了Python3.9或以上版本。安装Docker(如果选择使用Docker部署)。2)安装Xinference:通过Python的包管理工具pip安装Xinference:pipinstall"xi
- 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
作者在进入大学前是一个不折不扣的计算机白痴,曾经被人笑话过不懂鼠标是什么,