- 蓝桥杯篇---串行EEPROM AT24C02
Ronin-Lotus
蓝桥杯篇嵌入式硬件篇蓝桥杯职场和发展c嵌入式硬件AT24C02
文章目录前言1.写字节时序(ByteWrite)特点时序步骤1.起始条件(StartCondition)2.发送设备地址(DeviceAddress)3.发送内存地址(WordAddress)4.发送数据(Data)5.停止条件(StopCondition)时序图代码示例2.写页面时序(PageWrite)特点时序步骤1.起始条件(StartCondition)2.发送设备地址(DeviceAdd
- SpringSecurity+JWT实现认证及授权详细步骤
小孙的Blog
springbootjavaspring后端
表单认证流程想要实现SpringSecurity的认证授权,首先需要理解大致流程。准备工作导入maven依赖org.springframework.bootspring-boot-starter-securityio.jsonwebtokenjjwt0.9.0创建数据库表表数据如下:创建生成jwtToken的工具类importio.jsonwebtoken.Claims;importio.json
- spring security6+springboot3+jwt实现权限控制
O0o88
springjavamybatis
maven配置myabits-plus,redis,lombok,hutoolorg.springframework.bootspring-boot-starter-parent3.0.517org.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-testtestorg.sprin
- Python学习(二)----turtle库的基本功能
Tiny1420
Python学习python
importturtle#设置画布大小turtle.screensize(canvwidth=None,canvheight=None,bg=None)#参数分别为画布的宽(单位像素),高,背景颜色。turtle.setup(width=0.75,height=0.75,startx=None,starty=None)'''width,height:输入宽和高为整数时,表示像素;为小数时,表示占据
- 力扣两数之和C++详解
Pixel_Pirate
力扣排序算法题leetcodec++算法
解题思路题目概括来说其实就是以下三点1.数组nums中的两个整数相加小于target,之后要返回这两个整数的下标2.数组nums中的元素每一个只能用一次3.可以按任意顺序返回答案,这里我们按照从小到大的顺序返回答案我们可以先创立两个指针p1和p2指向nums的首尾,假设nums数组中的顺序从小到大排序,那么p1就指向最小值,p2就指向最大值这时候如果p1+p2>target,那么指针p2向左移动,
- Java实习生常规技术面试题每日十题Java基础(五)
用户昵称23
面试阿里巴巴java开发语言jvmhtmlgolang
目录1.启动一个线程是用run()还是start()?.?2.线程的基本状态以及状态之间的关系。3.Set和List的区别,List和Map的区别?4.同步方法、同步代码块区别?5.描述Java锁机制。6.Comparable和Comparator接口是干什么的?列出它们的区别7.Java集合类框架的最佳实践有哪些?8.HashMap和Hashtable的区别。
- 使用includes 取多个数组中的交集
The Hyacinth
javascript前端开发语言
constarray1=[1,2,3]constarray2=[2,3,4,5]constarray3=array1.filter(e=>array2.includes(e))console.log(array3)//[2,3]
- docker 修改配置文件导致无法启动mysql容器解决方案
yueF_L
dockerdockermysql数据库
其实就是找到配置文件的位置然后修改即可。dockerinspect[mysqlid]找到"MergedDir"目录cd/var/lib/docker/overlay2/a10d73731705621619faf0855f2f3329d0b1ac6032142ad44116dd0d251c4be7cddiffcdetc/mysql/mysql.conf.d/dockerstart容器ID
- C# Winform DragDrop事件不触发问题
Yuanymoon
C#WinformClient
背景:研究拖放文件到Winform程序时发现在控件上设了允许拖放的属性(AllowDrop=true;)后,依然不能触发DragDrop事件的。现象:DragEnter能够正常触发。DragDrop无法触发。原因:DragEnter对于控件的意义主要在于识别拖放进来的对象是何种对象,需要在这里验证并判断是否需要接受及以何种方式接受拖放进来的对象。DragEnter通过参数(DragEventArg
- 一个树形结构表格数据库建表语句
MA_Y_
数据库
1.表格局部截图如下:2.建表语句如下:/*NavicatMySQLDumpSQLSourceServer:本机MySQLSourceServerType:MySQLSourceServerVersion:80031(8.0.31)SourceHost:localhost:3306SourceSchema:xc_contentTargetServerType:MySQLTargetServerVe
- 08-两数之和(四种解法)
最遥远的瞬间
算法合集算法数据结构
两数之和1:给定一个整数数组num,从数组中找出两个数满足相加之和等于目标数target。假设每个输入只对应唯一的答案,而且不可以重塑使用相同的元素。返回两数的下标值,以数组形式返回。importjava.util.Arrays;importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;publicclassdemo01
- Linux系统之安装Mongodb数据库
运维开发小白丶
数据库mongodb
1.安装包下载wgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.27.tgz2.安装和启动2.1解压tar-zxvfmongodb-linux-x86_64-rhel70-4.0.27.tgz2.2将解压后的目录移动到/usr/local目录下,并改名为mongodbmvmongodb-linux-x86_64
- tar 压缩算法对比与实践指南
tar压缩效率linux建议
在Linux系统管理和开发过程中,文件压缩打包是一项常见的需求。tar作为最常用的归档工具,支持多种压缩算法,不同算法之间在压缩比、压缩速度和解压速度等方面各有特点。本文将深入分析各种压缩算法的性能特征,并提供实用的选择建议。压缩算法性能对比我们选择了五种常用的压缩方式进行测试,包括:原始tar(无压缩)gzip压缩(tar.gz)xz压缩(tar.xz)zstd压缩(tar.zst)lz4压缩(
- oracle pls-00302 ora-06550,案例:Oracle报错PLS-00302 DBA在exp导出数据报错PLS-00302:component‘SET_NO_OUTLINES mus...
weixin_39860919
oraclepls-00302ora-06550
天萃荷净运维DBA在使用逻辑导出EXP导出数据时报错PLS-00302:component‘SET_NO_OUTLINES’mustbedeclared,分析原因为客户端版本问题导致今天接到测试报告,他的客户端不能导出数据库1.逻辑导出exp时报错Exportstartedon2012-1-1615:30:05D:\oracle\product\10.2.0\client_3\BIN\exp.ex
- conda-pack迁移虚拟环境
哎呀呀,知识来我的脑子里
conda
从源电脑中迁移anaconda的环境到目标电脑,首先两个电脑都安装了anaconda。一、源电脑的环境打包使用AnacondaPrompt操作1.安装conda-pack工具condainstallconda-pack2.确定环境condaenvlist找到你想要打包环境名。比如我的环境名是Py363.打包环境condapack-nPy36-oPy36.tar.gz4.将打包环境拷贝到U盘环境打包
- conda虚拟环境的打包和迁移
YYY7
环境配置condapythonlinux
本文主要记录conda-pack打包环境的过程。安装conda-pack第三方库:pipinstallconda-pack对环境进行打包。可以通过运行以下命令来完成此操作:condapack-n{环境名称}-o{输出压缩包路径,默认是当前目录***.tar.gz}在需要环境的系统中解压缩文件到conda的envs目录下,记得在envs目录新建一个文件夹:tarxzf***.tar.gz-C{目标路
- 产品发布标准(项目实操)
初级代码游戏
软件工程产品发布
产品发布标准概述本产品包含一套软件和几款不同的硬件。说明硬件硬件差异架构(ARM32/ARM64)操作系统和版本(文件系统和系统库)内存存储(持久和易失)串口和网口的名称和数量启动脚本此脚本在硬件上电后自动执行,在适当的初始化后进入预设目录启动软件的启动命令,并监控启动命令,返回0表示计划性退出,无需额外操作,否则表示软件运行异常,硬件应重新启动软件启动命令start.sh,工作路径为命令所在位置
- 【etcd】ubuntu22安装,与redis对比的区别
{⌐■_■}
etcdredischrome服务器数据库golang缓存
安装方法1:通过apt安装(简单,但版本可能较旧)步骤更新软件包列表:sudoaptupdate安装etcd:sudoaptinstalletcd启动etcd服务:sudosystemctlstartetcd验证安装:etcdctlversion如果输出类似以下内容,表示安装成功:etcdctlversion:3.4.20APIversion:3.4设置开机自启(可选):sudosystemctl
- Linux使用chrony让局域网内的服务器时间同步_chrony同步间隔,走进Linux运维架构
2401_87298546
服务器运维linux
在所有节点上执行chrony服务安装命令,将主节点设置时间服务器,其他的节点都从主节点同步时间。#安装服务yum-yinstallchrony#查看状态systemctlstatuschronyd#重启chronydsystemctlrestartchronyd二、检查设置时区在所有节点上设置统一的时间区域,本文中将其设置为亚洲时区,用户可自行定义。#查看时区[root@x~]#timedatec
- JAVA 类的反射机制 简版
xiaoyustudiowww
java
packageorg.rain;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.Method;classSmallRainTarget{StringsField="SmallRain成员变量";publicSmallRainTarget(){super();}publ
- html5 判断长按操作,移动端h5模拟长按事件
weixin_39933414
html5判断长按操作
1、标志位vartimer='';varisLongTouch=false;//加个标志位,防止settimeout因为事件循环和实际时间有偏差vartarget=document.getElementById('target');target.addEventListener('touchstart',function(){timer=setTimeout(function(){isLongTo
- DFS有向图(用c++编译运行)
是小傲雨呀^_^
深度优先图论算法
#include#include#defineMax100//链表结点的结构定义structListNode{//存放的是链表的节点intindex;//所连接定点的下标//intinfo;//改边所对应的权值structListNode*next;};//顶点的结构定义structVNode{charstr;//存放的是顶点字符ListNode*firstarc;//邻接表顶点指针域};//图结
- 2. 大整数
LBJ辉
javascript前端
超过整数存储范围的大整数两个超过整数存储范围的大正整数求和/***两个超过整数存储范围的大正整数求和*@param{String}a*@param{String}b*/functionsum(a,b){letresult=''constlen=Math.max(a.length,b.length)a=a.padStart(len,'0')b=b.padStart(len,'0')letaddOne
- 代码随想录算法训练营第一天:二分查找,移除元素,有序数组的平方
坚持不懈的猫喵
算法
一.数组1.要点:数组下标都是从0开始的。数组内存空间的地址是连续的数组的元素是不能删的,只能覆盖。C++中二维数组在地址空间上是连续的。(java就不是了)二.二分查找二分查找有两种方法1.target在左闭右闭[left,right]while(lefttarget)target偏小,在left与middle的左侧,right要赋值为middle-1,left不用改变,因为当前这个nums[m
- WPF两点之间绘制丝滑的贝塞尔曲线
不知名君
WPF开发心得自定义控件WPF技术wpf
WPF两点之间绘制丝滑的贝塞尔曲线在做这种节点连线的控件时,需要绘制流畅的曲线。绘制贝塞尔曲线的代码如下:(geo数据给到Path的Data即可绘制)privatevoidRefresh(){PathGeometrygeo=newPathGeometry();PathFigurepathFigure=newPathFigure();pathFigure.StartPoint=StartPoint;
- kkfilwview私有化接入方式(k8s)
qq_41369135
kubernetes容器云原生
dev--环境//要预览文件的访问地址(灵活用工举例)varurl='http://xxx.cn/flex-employ-static-dev/enterprise/avatar/1858353535553372160/xxx.png';window.open('http://xxx.com/api/wiat-online-preview/onlinePreview?url='+encodeURI
- 【Jvascript 算法】-- JavaScript实现对树结构数据的增删以及树型数据与数组的相互转换
野生松
在日常开发中我们经常会碰到树结构数据,以下是我的笔记:constarr=[{id:2,name:'部门B',parentId:0},{id:3,name:'部门C',parentId:1},{id:1,name:'部门A',parentId:2},{id:4,name:'部门D',parentId:1},{id:5,name:'部门E',parentId:2},{id:6,name:'部门F',p
- Linux安装nginx并配置systemctl命令
伊莲已存在
服务器nginxlnmpnginxlinux
1、安装yumListitem安装流程不在赘述可以自行查看这里2、使用yum安装nginxyum-yinstallnginx3、安装完成后,yum安装会自动生成systemctl命令,执行如下systemctlstartnginxsystemctlstatusnginx![在这里插入图片描述](https://img-blog.csdnimg.cn/dbbaf9a3d2ea42b1b01b2a09
- 编译安装nginx并使用systemctl管理
Mr_Black0_0
nginxlinux服务器
1、编译安装nginxcd/optwgethttp://nginx.org/download/nginx-1.18.0.tar.gz#通过网络下载nginx压缩包tarxfnginx-1.18.0.tar.gz#解压nginx-1.18.0.tar.gzcdnginx-1.18.0yum-yinstallgccpcre-developenssl-develzlib-developensslopen
- Ollama容器+打造DeepSeek-R1-7B大模型
码哝小鱼
AI大模型docker运维语言模型
1、获取Ollama官方镜像1.1在线拉取镜像#dokcerpullollama/ollama:0.5.71.2导入离线镜像#tar-zxfollama0.5.7_x86.tar.gz#dokcerload-iollama0.5.7.tar2、执行以下命令创建与启动ollama#dockerrun-dp8880:11434--nameollama\-eOLLAMA_HOST=0.0.0.0:114
- java工厂模式
3213213333332132
java抽象工厂
工厂模式有
1、工厂方法
2、抽象工厂方法。
下面我的实现是抽象工厂方法,
给所有具体的产品类定一个通用的接口。
package 工厂模式;
/**
* 航天飞行接口
*
* @Description
* @author FuJianyong
* 2015-7-14下午02:42:05
*/
public interface SpaceF
- nginx频率限制+python测试
ronin47
nginx 频率 python
部分内容参考:http://www.abc3210.com/2013/web_04/82.shtml
首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出)。nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开。步骤如下:
- java线程和线程池的使用
dyy_gusi
ThreadPoolthreadRunnabletimer
java线程和线程池
一、创建多线程的方式
java多线程很常见,如何使用多线程,如何创建线程,java中有两种方式,第一种是让自己的类实现Runnable接口,第二种是让自己的类继承Thread类。其实Thread类自己也是实现了Runnable接口。具体使用实例如下:
1、通过实现Runnable接口方式 1 2
- Linux
171815164
linux
ubuntu kernel
http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.1.2-unstable/
安卓sdk代理
mirrors.neusoft.edu.cn 80
输入法和jdk
sudo apt-get install fcitx
su
- Tomcat JDBC Connection Pool
g21121
Connection
Tomcat7 抛弃了以往的DBCP 采用了新的Tomcat Jdbc Pool 作为数据库连接组件,事实上DBCP已经被Hibernate 所抛弃,因为他存在很多问题,诸如:更新缓慢,bug较多,编译问题,代码复杂等等。
Tomcat Jdbc P
- 敲代码的一点想法
永夜-极光
java随笔感想
入门学习java编程已经半年了,一路敲代码下来,现在也才1w+行代码量,也就菜鸟水准吧,但是在整个学习过程中,我一直在想,为什么很多培训老师,网上的文章都是要我们背一些代码?比如学习Arraylist的时候,教师就让我们先参考源代码写一遍,然
- jvm指令集
程序员是怎么炼成的
jvm 指令集
转自:http://blog.csdn.net/hudashi/article/details/7062675#comments
将值推送至栈顶时 const ldc push load指令
const系列
该系列命令主要负责把简单的数值类型送到栈顶。(从常量池或者局部变量push到栈顶时均使用)
0x02 &nbs
- Oracle字符集的查看查询和Oracle字符集的设置修改
aijuans
oracle
本文主要讨论以下几个部分:如何查看查询oracle字符集、 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题。
一、什么是Oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货
- png在Ie6下透明度处理方法
antonyup_2006
css浏览器FirebugIE
由于之前到深圳现场支撑上线,当时为了解决个控件下载,我机器上的IE8老报个错,不得以把ie8卸载掉,换个Ie6,问题解决了,今天出差回来,用ie6登入另一个正在开发的系统,遇到了Png图片的问题,当然升级到ie8(ie8自带的开发人员工具调试前端页面JS之类的还是比较方便的,和FireBug一样,呵呵),这个问题就解决了,但稍微做了下这个问题的处理。
我们知道PNG是图像文件存储格式,查询资
- 表查询常用命令高级查询方法(二)
百合不是茶
oracle分页查询分组查询联合查询
----------------------------------------------------分组查询 group by having --平均工资和最高工资 select avg(sal)平均工资,max(sal) from emp ; --每个部门的平均工资和最高工资
- uploadify3.1版本参数使用详解
bijian1013
JavaScriptuploadify3.1
使用:
绑定的界面元素<input id='gallery'type='file'/>$("#gallery").uploadify({设置参数,参数如下});
设置的属性:
id: jQuery(this).attr('id'),//绑定的input的ID
langFile: 'http://ww
- 精通Oracle10编程SQL(17)使用ORACLE系统包
bijian1013
oracle数据库plsql
/*
*使用ORACLE系统包
*/
--1.DBMS_OUTPUT
--ENABLE:用于激活过程PUT,PUT_LINE,NEW_LINE,GET_LINE和GET_LINES的调用
--语法:DBMS_OUTPUT.enable(buffer_size in integer default 20000);
--DISABLE:用于禁止对过程PUT,PUT_LINE,NEW
- 【JVM一】JVM垃圾回收日志
bit1129
垃圾回收
将JVM垃圾回收的日志记录下来,对于分析垃圾回收的运行状态,进而调整内存分配(年轻代,老年代,永久代的内存分配)等是很有意义的。JVM与垃圾回收日志相关的参数包括:
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc
-XX:+PrintGC
通
- Toast使用
白糖_
toast
Android中的Toast是一种简易的消息提示框,toast提示框不能被用户点击,toast会根据用户设置的显示时间后自动消失。
创建Toast
两个方法创建Toast
makeText(Context context, int resId, int duration)
参数:context是toast显示在
- angular.identity
boyitech
AngularJSAngularJS API
angular.identiy 描述: 返回它第一参数的函数. 此函数多用于函数是编程. 使用方法: angular.identity(value); 参数详解: Param Type Details value
*
to be returned. 返回值: 传入的value 实例代码:
<!DOCTYPE HTML>
- java-两整数相除,求循环节
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class CircleDigitsInDivision {
/**
* 题目:求循环节,若整除则返回NULL,否则返回char*指向循环节。先写思路。函数原型:char*get_circle_digits(unsigned k,unsigned j)
- Java 日期 周 年
Chen.H
javaC++cC#
/**
* java日期操作(月末、周末等的日期操作)
*
* @author
*
*/
public class DateUtil {
/** */
/**
* 取得某天相加(减)後的那一天
*
* @param date
* @param num
*
- [高考与专业]欢迎广大高中毕业生加入自动控制与计算机应用专业
comsci
计算机
不知道现在的高校还设置这个宽口径专业没有,自动控制与计算机应用专业,我就是这个专业毕业的,这个专业的课程非常多,既要学习自动控制方面的课程,也要学习计算机专业的课程,对数学也要求比较高.....如果有这个专业,欢迎大家报考...毕业出来之后,就业的途径非常广.....
以后
- 分层查询(Hierarchical Queries)
daizj
oracle递归查询层次查询
Hierarchical Queries
If a table contains hierarchical data, then you can select rows in a hierarchical order using the hierarchical query clause:
hierarchical_query_clause::=
start with condi
- 数据迁移
daysinsun
数据迁移
最近公司在重构一个医疗系统,原来的系统是两个.Net系统,现需要重构到java中。数据库分别为SQL Server和Mysql,现需要将数据库统一为Hana数据库,发现了几个问题,但最后通过努力都解决了。
1、原本通过Hana的数据迁移工具把数据是可以迁移过去的,在MySQl里面的字段为TEXT类型的到Hana里面就存储不了了,最后不得不更改为clob。
2、在数据插入的时候有些字段特别长
- C语言学习二进制的表示示例
dcj3sjt126com
cbasic
进制的表示示例
# include <stdio.h>
int main(void)
{
int i = 0x32C;
printf("i = %d\n", i);
/*
printf的用法
%d表示以十进制输出
%x或%X表示以十六进制的输出
%o表示以八进制输出
*/
return 0;
}
- NsTimer 和 UITableViewCell 之间的控制
dcj3sjt126com
ios
情况是这样的:
一个UITableView, 每个Cell的内容是我自定义的 viewA viewA上面有很多的动画, 我需要添加NSTimer来做动画, 由于TableView的复用机制, 我添加的动画会不断开启, 没有停止, 动画会执行越来越多.
解决办法:
在配置cell的时候开始动画, 然后在cell结束显示的时候停止动画
查找cell结束显示的代理
- MySql中case when then 的使用
fanxiaolong
casewhenthenend
select "主键", "项目编号", "项目名称","项目创建时间", "项目状态","部门名称","创建人"
union
(select
pp.id as "主键",
pp.project_number as &
- Ehcache(01)——简介、基本操作
234390216
cacheehcache简介CacheManagercrud
Ehcache简介
目录
1 CacheManager
1.1 构造方法构建
1.2 静态方法构建
2 Cache
2.1&
- 最容易懂的javascript闭包学习入门
jackyrong
JavaScript
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。
下面就是我的学习笔记,对于Javascript初学者应该是很有用的。
一、变量的作用域
要理解闭包,首先必须理解Javascript特殊
- 提升网站转化率的四步优化方案
php教程分享
数据结构PHP数据挖掘Google活动
网站开发完成后,我们在进行网站优化最关键的问题就是如何提高整体的转化率,这也是营销策略里最最重要的方面之一,并且也是网站综合运营实例的结果。文中分享了四大优化策略:调查、研究、优化、评估,这四大策略可以很好地帮助用户设计出高效的优化方案。
PHP开发的网站优化一个网站最关键和棘手的是,如何提高整体的转化率,这是任何营销策略里最重要的方面之一,而提升网站转化率是网站综合运营实力的结果。今天,我就分
- web开发里什么是HTML5的WebSocket?
naruto1990
Webhtml5浏览器socket
当前火起来的HTML5语言里面,很多学者们都还没有完全了解这语言的效果情况,我最喜欢的Web开发技术就是正迅速变得流行的 WebSocket API。WebSocket 提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看6个HTML5教程介绍里 的 WebSocket API:它可用于客户端、服
- Socket初步编程——简单实现群聊
Everyday都不同
socket网络编程初步认识
初次接触到socket网络编程,也参考了网络上众前辈的文章。尝试自己也写了一下,记录下过程吧:
服务端:(接收客户端消息并把它们打印出来)
public class SocketServer {
private List<Socket> socketList = new ArrayList<Socket>();
public s
- 面试:Hashtable与HashMap的区别(结合线程)
toknowme
昨天去了某钱公司面试,面试过程中被问道
Hashtable与HashMap的区别?当时就是回答了一点,Hashtable是线程安全的,HashMap是线程不安全的,说白了,就是Hashtable是的同步的,HashMap不是同步的,需要额外的处理一下。
今天就动手写了一个例子,直接看代码吧
package com.learn.lesson001;
import java
- MVC设计模式的总结
xp9802
设计模式mvc框架IOC
随着Web应用的商业逻辑包含逐渐复杂的公式分析计算、决策支持等,使客户机越
来越不堪重负,因此将系统的商业分离出来。单独形成一部分,这样三层结构产生了。
其中‘层’是逻辑上的划分。
三层体系结构是将整个系统划分为如图2.1所示的结构[3]
(1)表现层(Presentation layer):包含表示代码、用户交互GUI、数据验证。
该层用于向客户端用户提供GUI交互,它允许用户