- 《Java八股文の文艺复兴》第四篇:ThreadLocal的平行宇宙——弱引用是通往OOM的时空虫洞?
程序猿chen
面霸の自我修养(面试篇)「Java八股文の文艺复兴」java开发语言后端面试跳槽职场和发展安全
楔子:量子泡沫中的幽灵代码"当你在ThreadLocal中写入秘密时,整个宇宙的线程都在窥视它。"上一场战役我们封印了ConcurrentHashMap的熵增奇点,但新的危机正在量子泡沫中酝酿。在某个平行宇宙里,一行看似无害的threadLocal.set(user)正在撕裂JVM的内存维度,而弱引用竟成为打开OOM虫洞的钥匙。此刻,让我们戴上RASP打造的因果律护目镜,穿越ThreadLocal
- 查看 Linux 系统中安装的 CUDA 版本
烟锁池塘柳0
LinuxCUDAlinuxubuntu
查看Linux系统中安装的CUDA版本的常见方法:文章目录1查看/usr/local/cuda目录2使用nvcc命令3检查libcublas版本注意:nvidia-smi1查看/usr/local/cuda目录通常,CUDA被安装在/usr/local/cuda目录下,所以可以使用ls命令来查看这个目录是否存在,以及查看其中的内容。ls/usr/local/cuda如果这个目录存在,通常它会是一个
- MongoDB处理动态字段
weixin_49784554
mongodbasp.net
在ASP.NETCore中处理MongoDB的动态字段(即文档结构不固定)时,通常有以下几种方法:1.使用BsonDocument(最灵活)如果你的文档结构变化很大,直接使用BsonDocument进行存储和查询:usingMongoDB.Bson;usingMongoDB.Driver;varclient=newMongoClient("mongodb://localhost:27017");v
- 2025美团最新面试题—Java程序减少GC的设计
程序员共鸣
javajvm开发语言
1.对象复用与池化线程局部变量:通过ThreadLocal缓存线程私有对象,避免竞争。可变对象:优先使用可修改对象(如StringBuilder代替String拼接)。2.减少对象创建避免隐式装箱:使用基本类型(int而非Integer)。优化循环:避免在循环内创建临时对象。静态不可变对象:将常量声明为staticfinal(如配置参数)。3.数据结构优化预分配容量:初始化集合时指定合理大小(如A
- 【知识图谱】开发经验记录:CORS(跨域资源共享)问题
niuuuu16
基于知识图谱的智能助教系统知识图谱人工智能经验分享javaspringboot
尝试前后端交互时出现了这样的报错:AccesstoXMLHttpRequestat'http://localhost:8080/api/courses'fromorigin'http://localhost:8081'hasbeenblockedbyCORSpolicy:No'Access-Control-Allow-Origin'headerispresentontherequestedreso
- Python 安装scipy失败
_不二_
pythonpython
在使用pip安装scipy时会报错OSError:[Errno13]Permissiondenied:'/usr/local/lib/python2.7/dist-packages/scipy'网上查了,说是由于墙的原因,但我已经翻了墙的,任然报这个错误,下载速度特别慢,到11%或者27%就挂啦,最后很无赖,直接手动安装吧。先去官网搜索scipy选择合适的版本如下图下载完成后pipinstalls
- centOS7使用yum安装报错的解决办法
小泊客
lLinux学习开发语言linux运维ssh网络运维开发
一、错误提示信息:[root@localhost/]#sudoyuminstallbash-completionCouldnotretrievemirrorlisthttp://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stockerrorwas14:curl#7-"Failedtoconnectto2a05:d012:8
- localStorage在上面位置?数据存放文件名是什么?
2301_79698214
htmljava
在上述代码中,数据并不是以传统文件的形式存放在某个具体的文件里,而是存储在浏览器的localStorage中。localStorage是HTML5新增的一个会话存储对象,它用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页后数据仍然存在。数据存储位置和文件名存储位置:localStorage是浏览器提供的一个存储机制,数据存储在浏览器的本地存储区域,不同的浏览器存储位置不同,例如:Chro
- 批处理脚本NTP服务Windows操作系统时间同步设置
感叹号的豆浆
windows自然语言处理
脚本如下:///创建时间同步服务@echooff@echooff&&@chcp65001>nulsetlocalenabledelayedexpansion::设置版本号set"o=cls&echo"&set“z=&&echo.&echo按任意键或等待15秒后自动退出本界面&&timeout/t15&&exit”modeconlines=10cols=60&&netsession1>NUL2>NU
- 脚本编译vs工程_使用msbuild
miffy888
MSBuild是在.NET2.0中引入的针对VisualStudio的构建系统。它可以执行构建脚本,完成各种Task──最主要的是把.NET项目编译成可执行文件或者DLL。从技术角度来说,制作EXE或者DLL的重要工作是由编译器(csc,vbc等等)完成的。MSBuild会从内部调用编译器,并完成其他必要的工作(例如拷贝引用──CopyLocal,执行构建前后的准备及清理工作等)。为什么要用脚本编
- mkcert 极简安装及使用步骤
学亮编程手记
Linuxssl
1.安装mkcertmacOSbrewinstallmkcertLinuxsudoaptinstalllibnss3-toolscurl-JLO"https://dl.filippo.io/mkcert/latest?for=linux/amd64"chmod+xmkcert-v*-linux-amd64sudomvmkcert-v*-linux-amd64/usr/local/bin/mkcer
- bitsandbytes 报错
HuggingMe
pytorch
把bitsandbytes更新到最新版本。用nvidia-smi查看CUDA版本,我的是12.2。在~/.bashrc中添加了以下几行:exportPATH="/usr/local/cuda-12.2/bin:$PATH"exportBNB_CUDA_VERSION=122exportLD_LIBRARY_PATH="/usr/local/cuda-12.2/lib64:$LD_LIBRARY_P
- centos7输入python -m bitsandbytes报错CUDA Setup failed despite GPU being available. Please run the follo
小太阳,乐向上
python开发语言
在centos7.9系统中安装gpu驱动及cuda,跑大模型会报错,提示让输入python-mbitsandbytes依然报错:CUDASETUP:Loadingbinary/usr/local/python3/lib/python3.9/site-packages/bitsandbytes/libbitsandbytes_cuda117.so.../lib64/libstdc++.so.6:ve
- 一文了解ThreadLocal
Key~美好的每一天
java开发语言
什么是ThreadLocal?ThreadLocal是每个线程私有的,线程可以把自己的私有数据放到ThreadLocal里面,不用担心其他线程访问到自己ThreadLocal。通过set()方法将值存入ThreadLocal或者修改值,get()方法取出值,remove()方法移除值。ThreadLocal原理ThreadLocal类中有一个内部类ThreadLocalMap,它其实就是一个哈希表
- LuaJIT 学习(5)—— string.buffer 库
alenliu0621
LuaLuaJIT
文章目录UsingtheStringBufferLibraryBufferObjectsBufferMethodOverviewBufferCreationandManagement`localbuf=buffer.new([size[,options]])localbuf=buffer.new([options])``buf=buf:reset()``buf=buf:free()`BufferW
- docker 部署 RabbitMQ
嗑瓜子儿溜茶水儿
dockerdockerrabbitmq容器
命令dockerrun-d--name=rabbitmq\-p5671:5671-p5672:5672-p4369:4369\-p15671:15671-p15672:15672-p25672:25672\-eRABBITMQ_DEFAULT_USER=username\-eRABBITMQ_DEFAULT_PASS=password\-v/usr/local/rabbitmq/data:/var
- CentOS下安装ElasticSearch(日志分析)
墨痕诉清风
安全建设elasticsearch大数据日志分析
准备目录搞一个自己喜欢的目录mkdir/usr/local/app切换到该目录cd/usr/local/app下载wgethttps://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz选择其他版本点击进入官网
- Git 的基本概念和使用方式
成风693
git
Git是一种分布式版本控制系统,广泛用于协作开发和追踪代码变更历史。以下是Git的基本概念和使用方式:仓库(Repository):Git仓库是存储代码和版本历史的地方。它可以是本地仓库(LocalRepository)或远程仓库(RemoteRepository)。提交(Commit):提交是将代码变更保存到版本历史中的操作。每次提交都会生成一个唯一的标识符(SHA-1哈希值)。分支(Branc
- pyspark 遇到**Py4JJavaError** Traceback (most recent call last) ~\AppData\
2pi
sparkpython
Py4JJavaErrorTraceback(mostrecentcalllast)~\AppData\Local\Temp/ipykernel_22732/1401292359.pyin---->1feat_df.show(5,vertical=True)D:\Anaconda3\envs\recall-service-cp4\lib\site-packages\pyspark\sql\data
- 如何vscode中安装代码规范工具—cpplint
fttony2020
代码规范
1)在Vscode中搜索并安装插件cpplint2)接着打开终端,输入sudopipinstallcpplint3)再次输入ls-l/usr/local/bin/cpplint检查安装目录,一般会安装在/usr/local/bin/cpplint目录下如果不在此目录下,需要在vscode中手动配置一下cpplint的执行路径4)打开vscode的设置界面,输入clang,如图所示,将代码风格设置为
- 数据访问:JPA 关联& MyBatis
斗-匕
oracle数据库
创建项目添加关键依赖包:任何使用方式都需要首在pox.xml中引入mybatis-spring-boot-starter的启动器,我们使用项目向导添加的依赖如下:application.ymlspring:#配置数据源datasource:driver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://localhost:3306/crm?us
- Python搭建静态web服务器
7 号
Pythonpython
Python内置的web静态服务器Python内置的`http.server`模块可以快速启动一个简单的HTTP服务器。在Python3中,打开命令行或终端,在你想要作为静态服务器根目录的文件夹下,运行以下命令:python-mhttp.server8000这将会在当前目录启动一个HTTP服务器,监听端口8000,端口可以随意指定。你可以在浏览器中访问`http://localhost:8000`
- ORA-12541: TNS:no listener
夜光小兔纸
运维数据库Oracle运维oracle数据库
问题描述:使用PL/SQLDeveloper连接数据库时出现ORA-12541错误。1.查询监听状态[oracle@localhostadmin]$lsnrctlstatusLSNRCTLforLinux:Version19.0.0.0.0-Productionon15-MAR-202510:47:57Copyright(c)1991,2021,Oracle.Allrightsreserved.C
- python的导包使用
power_kai
python
1、查看文件的创建时间importtimeimportosprint(time.localtime(os.path.getatime('E:\\a.txt')))2、查看文件的修改时间print(time.localtime(os.path.getmtime('E:\\a.txt')))3、pickle数据转换模块,这个写入的文件是一个二进制文件,普通文本编辑器打开是乱码importpickle#
- Sublime Text 3 安装与配置指南
戴宣千Red
SublimeText3安装与配置指南SublimeText3软件安装PackageConrtol手动安装及配置插件安装以汉化包ChineseLocalizations为例项目地址:https://gitcode.com/Resource-Bundle-Collection/f8e42本仓库提供了一个详细的指南,帮助用户在Windows10(64位)操作系统下安装和配置SublimeText3。内
- 内核arp_rcv函数到ip_local_deliver_finish的具体调用流程
源远流长jerry
tcp/ip网络网络协议linux
场景:主机A(IP:192.168.1.10,MAC:AA:BB:CC:DD:EE:FF)首次向主机B(IP:192.168.1.20,MAC:11:22:33:44:55:66)发送数据,发送ARP请求获取主机B的MAC地址。流程:主机B收到主机A的ARP请求报文后,内核调用arp_rcv处理。arp_rcv解析报文,发现是ARP请求且目标IP是本机(192.168.1.20)。函数生成ARP应
- tomcat下直接访问html网页
努力的搬砖人.
在conf/server.html配置文件中添加(在标签上添加)访问地址:http://localhost:8081/hello.html
- Java高级常用类
星星不打輰
Javajava开发语言
LocalDateTime,StringBuilder,BigDecimalLocalDateTime使用(通过这个类创建一个日期时间的实例对象)//LocalDate-->日期//LocalTime-->时间//LocalDateTime-->日期和时间对于日期时间进行格式化输出:DateTimeFormatter.ofPattern(“指定的格式”)y表示年份,M表示月份,d表示日期,H表示小
- dify 源码部署操作记录
脑壳疼___
python
ps:我装的是0.15.3版本,拉取代码时一定要拉取tag,不要拉取master分支代码,不要拉取master分支代码!!后端注意事项根据官网步骤安装https://docs.dify.ai/getting-started/install-self-hosted/local-source-code其中pyenv不是必须操作,如果有conda的话可以直接用conda安装,但conda有时候安不上,换
- 如何修改pip全局缓存位置和全局安装包存放路径
Ven%
linux命令实用系列Ubuntu深度学习速通系列pip缓存人工智能python自然语言处理深度学习
使用场景:在默认情况下,pip会将安装的包存放在Python环境的site-packages目录下,会使用到系统盘的内存。当遇到系统盘的内存很小的时候,需要修改pip的全局缓存位置和全局安装包存放路径,可以极大的节省系统盘内存详细步骤:1.修改pip的全局缓存位置pip会默认将下载的文件存放在缓存目录中(如Linux的~/.cache/pip,Windows的%LOCALAPPDATA%\pip\
- 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交互,它允许用户