Java Druid 面试题

打印 上一主题 下一主题

主题 576|帖子 576|积分 1728

Druid毗连池在项目中有哪些上风?


  • 性能优越:Druid采用了高效的毗连管理机制,可以快速地创建和回收数据库毗连,减少了毗连的创建和烧毁带来的性能开销。
  • 监控与统计:Druid提供了详细的监控信息,包括毗连池的状态、SQL执行的统计信息等,这有助于性能调优和题目诊断。
  • SQL日志记录:Druid内置了SQL执行日志记录功能,可以记录所有SQL语句的执行情况,便于调试和性能优化。
  • 高度可设置:Druid提供了大量的设置选项,可以根据项目的实际需求进行过细的调整,以适应差异的运行环境。
  • 强大的过滤器机制:Druid通过SQL过滤器可以对执行的SQL语句进行拦截和修改,例如进行SQL参数化处理,提高SQL执行效率。
  • 异常监控与处理:Druid能够捕获数据库操作中的异常,并提供相应的异常处理机制,资助快速定位息争决题目。
  • 集群支持:Druid在设计上思量了集群环境的支持,可以在分布式系统中提供同等性的毗连管理。
  • 高度集成:Druid可以很方便地与Spring、MyBatis等主流框架集成,低落开辟者的利用门槛。
Druid毗连池中的监控数据有哪些重要指标?


  • 活跃毗连数: 表现当前正在利用的数据库毗连数量,反映了当前数据库的负载情况。
  • 空闲毗连数: 表现当前处于空闲状态的毗连数量,有助于评估毗连池巨细是否合适。
  • 最大活跃毗连数: 是毗连池可以同时管理的最大毗连数目,对于系统的扩展性有重要影响。
  • 最大空闲毗连数: 是毗连池中最大的空闲毗连数,用于控制毗连池的容量。
  • 获取毗连时间:从毗连池中 获取毗连的平均时间。
  • 归还毗连时间:将毗连返回到毗连池的平均时间。
  • 平均执行时间:SQL语句的平均执行时间。
  • 慢查询数量:执行时间凌驾预设阈值的SQL语句数量。
  • 执行失败的SQL语句数量:执行失败的SQL语句数量。
  • 总错误数:毗连池运行过程中出现的总错误数。
  • 内存利用情况:毗连池占用的内存巨细。
  • CPU资源占用情况:毗连池占用的CPU资源。
  • 健康查抄次数:毗连池健康查抄的次数。
  • 健康毗连数:健康查抄乐成的毗连数。
  • 等候队列长度:等候获取毗连的请求数量。
  • 等候时间:等候获取毗连的平均时间。
如何通过Druid实现数据库毗连的加密?


  • 设置Druid毗连池:需要在项目中引入Druid依赖,并设置Druid毗连池的基本属性,如数据库URL、用户名、密码等。
  • 启用SSL/TLS加密:假如数据库支持SSL/TLS加密毗连,你可以在数据库URL中指定SSL相关的参数来启用加密毗连。
  • 利用加密的数据库密码:利用加密工具(如Jasypt)对密码进行加密,并在代码中解密后传递给Druid毗连池。如许,纵然设置文件被泄露,攻击者也难以直接获取到明文密码。
  • 设置Druid的加密插件:虽然Druid本身不提供直接的数据库毗连加密功能,但它大概支持通过插件或扩展来实现这一功能
  • 利用其他加密机制:假如数据库本身不支持SSL/TLS加密,或者你需要更复杂的加密机制(如传输层安全性(TLS)之外的加密),你大概需要在应用层实现加密。
  • 验证和测试:在设置完加密毗连后,你需要验证毗连是否乐成建立,并且数据是否能够在加密状态下精确传输和存储。
Druid毗连池的物理毗连如何管理?


  • Druid毗连池对物理毗连的管理主要包括毗连的创建、维护、释放以及监控等多个方面。
  • 初始化毗连:当Druid毗连池启动时,会根据设置信息创建一定命量的初始毗连。
  • 动态创建毗连:随着程序的运行,当需要更多的数据库毗连时,Druid会动态创建新的毗连。
  • 毗连有效性查抄:Druid会定时对毗连进行有效性查抄,假如毗连已经失效,Druid会主动关闭并重新创建新的毗连。
  • 空闲毗连清算:对于长时间未利用的空闲毗连,Druid会设置超时时间。
  • 毗连回收:对于无效或超时的毗连,Druid毗连池会主动将他们从池中移除,并关闭这些毗连。
  • 毗连归还:当应用程序利用完毕,将毗连归还给毗连池。
  • 毗连复用:Druid毗连池会查抄归还的毗连是否仍然有效。
  • 毗连池状态监控:Druid毗连池提供了丰富的监控功能,可以及时监控毗连池的状态,包括毗连数、利用情况、SQL执行情况等。
  • 设置参数管理:Druid毗连池答应通过设置文件或编程方式高度自定义毗连池的参数。
  • 毗连老化与更换:当毗连的时间时间凌驾一定阈值时,Druid毗连池大概会以为这个毗连“老化”,并将其更换为新的毗连。
Druid毗连池的异常监控机制是如何工作的?


  • 异常捕获:Druid毗连池在处理SQL请求时会捕获所有异常,包括SQLException、TimeoutException、InterruptedException以及其他自定义异常。
  • 异常处理:对于捕获到的异常,Druid毗连池会进行相应的处理,报错记录日志、触发回调、重试机制和毗连驱逐。
  • 异常统计:Druid提供了异常统计的功能,可以记录各类异常的发生次数和频率,资助分析题目的根本原因。
  • 异常监控:Druid支持多种监控方式,可以及时监控异常情况。
  • 异常通知:Druid毗连池支持异常通知机制,异常发生时纵然通知相关职员。
  • 异常上报:Druid可以将异常信息上报到外部系统,便于集中管理和分析。例如ELK等集中日志系统。
  • 异常设置:Druid提供丰富的异常设置选项,可以根据需要进行个性化设置。
在利用Druid毗连池时,如何优化SQL执行效率?


  • SQL合并: 合理利用批处理技能,将多个SQL语句合并执行,减少网络往返次数。
  • 毗连池参数调优: 合理设置Druid毗连池的巨细,避免毗连过多造成资源浪费或毗连过少导致等候。
  • 慢SQL记录: 通过Druid的慢SQL记录功能,监控和优化执行时间长的SQL语句。
  • SQL语句优化:简化查询、利用索引、批量操作、避免Select*、合理利用JOIN
  • 毗连池的合理设置:适当调整毗连池巨细、设置合理的超时时间、启用毗连有效性查抄
  • 缓存机制:结果集缓存、二级缓存
  • 分页查询:合理分页、优化LIMIT语句
  • 并发控制:事务管理、读写分离
  • 数据库设置:数据库设置优化、利用毗连缓存
  • 利用毗连池特性:预编译语句、毗连重用
  • 监控与分析:SQL执行监控、性能分析工具
  • 避免过度利用事务:短事务、非事务性查询
Druid毗连池在分布式系统中的应用有哪些特点?


  • 毗连复用:Druid毗连池通过毗连复用机制,减少频繁创建和关闭数据库毗连的开销。
  • 动态调整:Druid能够根据实际负载动态调整毗连池的巨细,从而避免资源浪费。
  • 及时监控:Druid提供详细的监控信息,包括毗连池的状态、SQL执行的统计信息等。
  • 日志记录:Druid可以记录SQL执行日志,资助开辟者跟踪SQL执行情况。
  • 动态设置:Druid支持动态调整毗连池的设置,无需重启应用即可见效。
  • 多数据源支持:分布式系统中,往往需要毗连多个数据库实例。
  • 自定义插件:Druid支持自定义插件,可以根据分布式系统的特别需求扩展其功能。
  • 故障转移:当主数据库出现故障时,Druid可以主动切换到备库,确保应用的高可用性。
  • 加密通信:Druid支持通过设置SSL/TLS来加密与数据库之间的通信,确保数据传输安全。
  • 权限控制:可以为差异的应用或服务设置差异的数据库毗连凭据,实现细粒度的访问控制。
  • 框架集成:Druid可以与Spring、Mybatis等主流框架集成,使得在分布式系统中利用变得更加轻巧。
  • 监控系统继承:Druid可以与Prometheus、Grafana等监控系统进行集成,实现对数据库性能的及时监控和告警。
  • 事务管理:Druid毗连池提供的Connection对象支持手动事务管理来控制事务的生命周期。
  • 事务隔离级别设置:Druid毗连池可以设置事务的隔离级别,以适应差异的业务需求。
  • 与分布式事务协调器配合:Druid本身不支持分布式事务协调,但可以作为毗连池组件,与分布式事务协调器进行集成。
Druid毗连池的内存管理计谋有哪些?


  • 毗连池巨细动态调整:Druid能够根据实际利用情况动态调整毗连池巨细,优化内存利用。
  • 数据源缓存:Druid提供数据源级别的缓存功能,减少数据库访问次数,低落内存消耗。
  • 资源回收机制:Druid具有有效的资源回收机制,能够及时清算不再利用的毗连和相关资源。
  • 内存监控:Druid提供内存利用监控功能,资助检测和防备内存走漏题目。
  • 设置优化:通过合理设置Druid的内存相关参数,可以到达内存利用和性能之间的最佳平衡。
如何在Druid中实现毗连池的多数据源设置?


  • 添加Druid依赖
  • 设置数据源
  • 创建数据源设置类
  • 实现AbstractRoutingDataSource
  • 创建DataSourceContextHolder
  • AOP动态切换数据源
Druid监控系统的定制化有哪些方式?


  • 自定义监控指标
  • 自定义监控报告
  • 集成外部监控系统
  • 自定义日志记录
  • 自定义监控插件
  • 利用自定义设置

Druid毗连池中的事务隔离级别是如何工作的?


  • 在利用Druid毗连池时,事务隔离级别的设置并不是直接由Druid毗连池管理的,而是由底层的JDBC驱动和数据库管理系统(DBMS)来实现的。
  • 通过Druid毗连池获取毗连后,可以利用setTransactionIsolation方法来设置事务隔离级别。
  • 级别如下:

    • Connection.TRANSACTION_NONE:没有隔离级别,即不支持事务。
    • Connection.TRANSACTION_READ_UNCOMMITTED:读未提交,答应读取尚未提交的数据。
    • Connection.TRANSACTION_READ_COMMITTED:读已提交,保证读取的数据是已提交的数据。
    • Connection.TRANSACTION_REPEATABLE_READ:可重复读,保证读取的数据是事务开始时相同的。
    • Connection.TRANSACTION_SERIALIZABLE:串行化,保证事务串行执行,避免并发题目。

Druid毗连池的毗连测试计谋有哪些?


  • 初始化时测试毗连:毗连池中打仗毗连之前测试毗连的有效性。
  • 归还时测试毗连:毗连归还到毗连池之前对其进行测试。
  • 启动时测试毗连:在毗连空闲时定期测试毗连的有效性。
  • 定期测试毗连:固定时间隔断内测试毗连的有效性。
  • 毗连超时时测试毗连:当毗连凌驾一定时间未被利用时,主动测试有效性。
如何处理Druid毗连池中的死锁题目?


  • 优化事务设计:确保事务简短,避免长时间占用资源。按照固定顺序访问,减少锁竞争。避免事务中执行用户交互操作。
  • 利用数据库锁机制:利用数据库提供的锁机制,如行锁、表锁等,避免死锁。
  • 应用层面的重试机制:在应用层实现重试机制,避免因数据库毗连题目导致的死锁。需谨慎设计,以避免无穷循环和事务风暴。
  • 合理设置Druid毗连池:合理设置毗连池参数优化资源利用,减少毗连不足导致的资源竞争。
  • 监控和日志:启用Druid监控功能,及时监控毗连池的状态和性能。设置详细的日志记录。
  • 代码检察和测试:开辟过程中进行代码检察,确保事务的精确性和合理性。进行充实的压力测试和并发测试。
  • 利用分布式锁或事务管理器:利用分布式锁协调差异节点之间的资源访问。利用事务管理器来管理事务的生命周期和回滚计谋。
Druid毗连池的Failover机制如何实现?


  • 心跳检测:Druid可以设置心跳检测来定期查抄数据库毗连的状态。
  • 多数据源支持:Druid支持设置多个数据源,实现Failover机制。
  • 设置Failover驱动:Druid答应利用特定的Failover数据源驱动,这些驱动可以在多个数据源之间进行Failover操作。
  • 利用代理模式:Druid提供代理模式,将多个数据源组合成一个代理数据源,实现Failover机制。
  • 故障主动恢复:故障发生后,Druid可以主动实验恢复主数据源的毗连,一旦恢复即切换回主数据源。
  • 负载均衡:Druid可以结合负载均衡机制,将请求分配到多个数据源之间,低落单点故障的风险。
  • 故障通知:在发生Failover时,Druid可以设置通知机制,及时告知管理员或开辟职员进行处理。
在Druid中如何实现查询缓存?


  • 应用层面的缓存:利用内存缓存库,在应用层面缓存查询结果。为每个查询生成唯一的缓存键,通过键值对存储查询结果。
  • 数据库层面的缓存:数据库管理系统提供内置的查询缓存功能。但大概会引入同等性题目,特别是在写操作频繁的情况下。
  • 中间件层面的缓存: 中间件如Redis、Memcached等可以作为缓存层,实现更复杂的缓存计谋。
  • 利用Druid的PreparedStatement缓存: Druid支持PreparedStatement缓存,可以减少重复的SQL语句执行,提高性能。
  • 自定义缓存计谋: 自定义缓存计谋,根据业务需求设计适合的缓存计谋。
  • 利用ORM框架的缓存: 利用ORM框架如MyBatis、Hibernate等,可以主动实现查询缓存。
  • 思量缓存同等性: 缓存数据同等性题目,确保缓存数据的精确性。
Druid如何支持大数据量的处理?


  • 调整毗连池设置:初始毗连数、最大毗连数、最小空闲毗连数。
  • 优化毗连回收计谋:超时时间、毗连存活时间。
  • 监控与告警:监控工具、异常告警。
  • 利用毗连泄露检测:启用毗连泄露检测,避免毗连走漏。
  • 优化查询性能:优化查询语句和索引计谋,减少数据库负载。
  • 分布式部署:对于大数据集,将数据分布在多个数据库节点上,通过Druid设置多数据源来支持负载均衡和故障转移。
  • 异步处理:对于大数据量的操作,可以采用异步处理的方式来低落数据库的压力。
  • 数据分片:若应用需要处理海量数据,可以思量数据分片技能,将数据水平分割到多个数据库实例中,从而分散单数据库压力。
  • 分页查询优化:减少单次查询对系统资源的消耗,提高处理效率。
  • 并发处理本领:通过高效的毗连池管理,Druid能够根据及时的负载动态调整毗连池的巨细,以适应并发请求的变革。
  • 数据分析和聚合:Druid提供数据分析和聚合功能,高效处理大规模数据集。
  • 批量操作优化:支持批量插入、更新、删除操作,提高大数据量处理效率。
  • 与大数据技能栈集成:可以与Hadoop、Spark等大数据处理技能集成,实现大规模数据的高效处理。
Druid毗连池如何处理大量并发毗连请求?


  • 设置合理的毗连池巨细:最大毗连数、最小空闲毗连数。
  • 设置毗连池参数:毗连的最大存活时间、毗连的空闲时间、毗连泄露检测。
  • 事务管理和隔离级别:事务隔离级别、主动提交模式。
  • 性能调优和监控:监控工具、性能调优、异步处理机制。
  • SQL优化:编写高效的SQL查询,避免复杂的子查询和大量的JOIN操作。
  • 批处理:可以利用批处理来减少与数据库交互的次数,提高效率。
  • 读写分离:将读取操作和写入操作分开,减轻单一数据库的压力。
  • 负载均衡:利用负载均衡来分散请求,避免单点成为瓶颈。
如何通过Druid实现数据库的读写分离?


  • 定义主从数据库设置:包括URL、用户名、密码等。
  • 创建动态数据源注解:定义一个注解,用于指定方法应该利用哪个数据源。
  • 创建AOP切面:利用AOP毗连方法执行,根据注解指定的数据源动态切换数据源。
  • 动态数据源创建:创建动态数据源类,继承至AbstractRoutingDataSource,用于根据上下文动态选择数据源。
  • 动态数据源设置类:创建设置类,设置主数据库和从数据库的数据源,并创建动态数据源Bean。
  • 利用注解指定命据源:在需要执行数据库操作的方法上利用自定义注解指定利用主库还是从库。
如何设置Druid以实现最大的数据库毗连复用?


  • 设置毗连池巨细:设置毗连池中的最大活动毗连数。设置毗连池中的最小空闲毗连数。
  • 毗连复用计谋:设置testWhileIdle为true,开启毗连空闲检测功能。设置testOnBorrow为true,在获取毗连时进行有效性检测。设置testOnReturn为true,在返回毗连时进行有效性检测。
  • 设置毗连泄露检测:设置removeAbandoned为true,开启毗连泄露检测功能。设置removeAbandonedTimeout为60秒,保持打开状态的最长时间。
  • 设置maxWait:设置等候时间,当毗连池中的毗连数到达最大值时,等候获取毗连的时间。
  • 设置validationQuery:设置一个SQL语句,用于验证毗连是否可用。
  • 设置validationQueryTimeout:设置SQL语句执行超时时间,防止SQL执行时间过长。
  • 利用毗连池的最佳实践:及时关闭毗连、避免长时间占用毗连、监控和调优。
Druid毗连池如何实现故障主动恢复?


  • 毗连有效性查抄:验证查询、验证隔断时间、最小空闲时间。
  • 毗连泄露检测:毗连泄露检测、泄露超时时间。
  • 毗连池巨细调整:最大毗连数、最小空闲毗连数。
  • 毗连超时和重试机制:重连是否限定次数、限定重连时的次数、重连的频率。
  • 主动检测故障:Druid毗连池可以主动检测毗连故障,并进行标志。
  • 异常处理:在程序中捕获并处理大概出现的异常,确保发生题目时能够平滑的恢复。
Druid毗连池中的Statement缓存如何工作?


  • 预编译SQL语句:当程序首次执行一个SQL语句时,那么预编译的Statement对象将会被缓存起来。
  • 缓存Statement对象:假如启用Statement缓存,那么预编译的Statement对象将会被缓存起来。
  • 重用缓存的Statement对象:当程序再次执行相同的SQL语句时,Druid毗连池会查抄缓存在中是否存在对应的Statement对象。
  • 设置Statement缓存:设置poolPreparedStatements为true,开启Statement缓存。设置maxPoolPreparedStatementPerConnectionSize参数,控制每个数据库毗连缓存预编译的Statement对象数量。
  • 性能提升:由于避免了重复编译相同的SQL语句,利用Statement缓存,可以提升SQL执行性能。
  • 注意事项:缓存巨细限定、缓存有效性、适用场景。
如何利用Druid进行数据库的性能分析?


  • 设置监控仪表盘: Druid提供了设置监控仪表盘的功能,可以及时监控数据库毗连池的状态和性能,方便进行性能调优和监控。
  • 访问监控页面: Druid提供了访问监控页面的功能,可以及时监控数据库毗连池的状态和性能,方便进行性能调优和监控。
  • 慢SQL分析工具利用:Druid提供了慢SQL分析工具,可以及时监控数据库的慢SQL,方便进行性能调优和监控。
  • SQL执行日志记录:Druid提供了SQL执行日志记录的功能,可以及时记录数据库的SQL执行日志,方便进行性能调优和监控。
  • 设置慢SQL阈值:Druid提供了设置慢SQL阈值的功能,可以设置慢SQL的阈值,方便进行性能调优和监控。
  • SQL执行跟踪:Druid提供了SQL执行跟踪的功能,可以及时记录数据库的SQL执行信息,方便进行性能调优和监控。
Druid毗连池在处理大数据报表时的优化计谋有哪些?


  • 分页查询优化: 对于大数据报表,通太过页查询来减少单次加载的数据量,低落内存压力。
  • 毗连池设置优化:调整最大毗连数、设置合理的毗连超时时间、空闲毗连检测与回收。
  • 查询性能优化:查询结果缓存、优化SQL语句、批量处理。
  • 异步处理与任务调治:异步报表查询、任务调治与监控。
  • 数据库与毗连池设置调整:读写分离、分库分表、毗连泄露检测、事务隔离级别调整。
  • 选择适合的数据库存储引擎:选择适合大数据环境的数据库存储引擎,提高数据处理的性能。
  • 利用预编译语句:对于频繁执行的SQL语句,利用预编译语句提高执行效率,减少SQL解析的开销。
  • 利用缓存技能:利用缓存技能(如Redis)来存储热门数据或查询结果,减少数据库的直接访问。
在利用Druid毗连池时如何确保数据安全性?


  • 加密敏感信息:数据库用户名和密码等敏感信息应通过加密的方式存储。
  • 利用SSL/TLS加密通信:确保数据库和应用之间的所有通信都应通过SSL/TLS加密,以防止数据在网络传输过程中被截取或篡改。
  • 最小权限原则:应用访问数据库的账户应遵循最小权限原则,只授予完成工作所需的最低限度的权限。
  • 定期更新和打补丁:定期更新Druid以及相关数据库驱动程序至最新版本,以获得最新的安全修补程序和功能改进。
  • 监控和审计:利用Druid提供的监控功能来记录所有毗连和SQL执行日志。
  • 访问控制:在系统层面和网络层面对数据库服务器实行严格的访问控制计谋。
  • 防火墙和网络隔离:利用防火墙和网络隔离记录来限定对数据库的访问,只答应经过认证的服务和IP地址访问数据库。
  • 数据备份与恢复:定期备份数据库,并验证数据库恢复功能。
  • 利用强身份验证:对于数据库的远程访问,应启用强身份验证,如双因身份验证(2FA)、基于证书的身份验证或其他形式的多因素身份验证。
  • 防止SQL注入:应用利用预编译语句或参数化查询来防止SQL注入攻击。


    • 审计日志: 启用审计日志功能,记录对数据库操作的详细信息,便于安全审计和异常分析。

在Druid毗连池中,如何实现细粒度的数据库操作审计?


  • 设置Druid毗连池:确保精确设置Druid毗连池,包括数据库毗连信息、毗连池巨细等参数。
  • 启用Druid的监控和日志功能:监控设置和日志设置。
  • 自定义Druid的Filter:实现Filter接口,并在此中添加你的审计逻辑。注册Filter,使其见效。
  • 利用AOP:定义切面、实现审计逻辑。
  • 日志和监控系统的集成:将审计日志集成到日志管理系统或监控系统中,以便进行及时分析和报警。
  • 毗连追踪: 实现对每个数据库毗连的利用情况进行追踪,记录毗连的获取、利用和释放过程。
  • 用户行为分析: 通过审计日志分析用户的数据库操作行为,辨认异常行为或潜在的安全风险。
  • 注意事项:性能影响、安全性、设置管理。
Druid如何实现对数据库操作的细粒度权限控制?


  • SQL解析与过滤: Druid可以解析执行的SQL语句,结合权限规则进行过滤,制止未授权的数据库操作。
  • 毗连级权限控制: 为差异的数据库毗连设置差异的权限,确保毗连的安全性和数据的隔离性。
  • 数据库级别的权限控制:数据库用户和角色。创建差异的用户账号,并为用户分配差异的权限。
  • 应用程序级别的权限控制:基于角色的访问控制。为差异的用户或服务分配差异的角色,每个角色具有差异的权限集。
  • 动态权限控制:应用程序在运行时根据用户的权限来动态决定是否答应执行特定的数据库操作。
  • 利用中间件或代理:数据库代理或中间件(如ProxySQL、MyCat等)来实现细粒度的权限控制。
  • 审计和日志记录:通过在数据库和应用程序中记录详细的审计日志,可追踪每个用户执行的操作及其权限。
  • 加密和访问控制:对于敏感数据,可以利用加密技能来保护数据的安全。
  • 利用访问控制列表:在一些数据库系统中,可以利用访问控制列表(ACL)来控制用户对特定命据库对象的访问权限。
在Druid毗连池中,如何处理并优化长时间运行的查询?


  • 设置毗连池参数:调整最大毗连数和超时时间、毗连超时和空闲毗连回收。
  • 优化SQL查询:查询优化、查询缓存。
  • 异步处理:异步执行查询。
  • 资源管理和监控:监控毗连池状态、日志和报警。
  • 数据库优化:数据库设置、硬件升级。
  • 利用毗连池的高级特性:毗连泄露检测、预编译语句、事务管理。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表