- 博客(606)
- 资源 (537)
- 收藏
- 关注
原创 Oracle回滚与撤销技术
Oracle数据库中的Undo机制是保障事务一致性和数据恢复的核心技术。它通过记录数据修改前的前镜像实现三大功能:事务回滚、读一致性保障和故障恢复。文章详细解析了Undo的技术原理,包括其存储内容、管理模式演进(从手动到自动)、多版本模型实现机制,以及关键性能指标。同时提供了Undo表空间创建配置、闪回查询恢复数据、处理ORA-01555错误等实操案例,并总结了常见问题排查手册,涵盖快照过旧、表空间扩展、回滚段损坏等典型问题的成因与解决方案。文中还对比了不同Oracle版本在Undo技术上的改进,为数据库管
2025-12-16 21:53:02
362
原创 EtherCAT总线之IO模块读写
本文比较了EtherCAT和CANOpen两种工业总线技术的异同:EtherCAT复用CANOpen应用层规范但采用更高效的以太网传输机制,实现us级抖动和1Gbps速率,适用于高速实时控制场景。文章详细记录了使用睿擎派RC-Pi-3506对接雷赛EM32DX-E4-V30模块的过程,重点阐述了PDO配置、同步管理器设置和DC同步适配等关键技术点,最终实现了16路开关量的成功控制。
2025-12-16 21:12:46
334
原创 ROS2概述和环境搭建
ROS2作为第二代机器人操作系统,在架构设计上采用去中心化的DDS通信机制,解决了ROS1中Master单点故障的问题,并支持多平台部署。本文详细介绍了ROS2的系统架构、安装配置方法及核心命令行操作。通过小海龟仿真示例演示了节点运行、话题通信、服务调用和动作控制等核心功能,并指导配置VSCode开发环境与Git源码管理工具。ROS2通过模块化设计和标准化接口,显著提升了机器人开发的稳定性与灵活性,为复杂机器人系统开发提供了更强大的支持。
2025-12-08 01:45:46
446
原创 立体库堆垛机运行机械恢复施工方案
摘要:本项目针对堆垛机开展重大维修,核心任务为更换下横梁和载货台。施工分六个阶段实施:前期准备、部件拆除、立柱移动与横梁更换、部件安装、电气调试及验收跟踪。重点强调安全管控,包括作业许可制度、个人防护、吊装安全及能源隔离(LOTO)。设置专职安全员监督全过程,配备急救与消防设备。通过72小时连续试运行验证设备稳定性,确保恢复原有性能并通过验收。关键要求:全过程零事故,维修质量达标,功能完整恢复。(149字)
2025-12-08 01:28:20
163
原创 Oracle分区表+本地索引 核心优化方案
本文通过实验验证Oracle分区表与本地索引的性能优势。在6227条测试数据场景下,分区表按时间范围拆分为两个分区并创建本地索引后,针对2007年前数据的查询逻辑读仅101次,相比非分区表的2670次提升26倍;全量统计查询逻辑读25次,性能提升104倍。实验证明分区表通过分区裁剪显著减少扫描范围,本地索引自动与表分区同步维护,实现高效查询和便捷运维。最佳实践建议选择高频查询字段作为分区键,控制单个分区大小10-50GB,优先使用本地索引并合理规划表空间存储。需注意该功能是企业版收费组件,分区键创建后不可修
2025-12-03 21:42:05
629
原创 SQL Server 2025 新功能概览
SQL Server 2025新特性概览 SQL Server 2025带来多项重要更新:1)AI集成能力增强,新增原生向量类型和DiskANN向量索引,支持内建语义搜索;2)开发体验优化,包括原生二进制JSON类型和Google RE2正则表达式支持;3)内核深度改进,如消除锁升级、参数化查询优化等;4)版本规格调整,标准版支持32核256G,Web版下线;5)备份与运维能力提升,采用ZSTD压缩算法并支持备库备份。此外,新版本还优化了TempDB管理、列存索引等特性,大幅提升了数据库在AI场景、开发效率
2025-12-03 21:37:25
970
原创 麒麟系统离线安装docker和docker-compose
本文详细介绍了在麒麟V4/V10(aarch64架构)系统上安装Docker和Docker-Compose的完整流程。内容包括:1)系统环境准备和版本确认;2)安装包下载和配置docker.service文件;3)分步骤安装Docker和Docker-Compose的具体操作;4)常用Docker命令分类汇总,涵盖镜像管理、容器生命周期、信息查看、数据卷/网络管理等;5)Docker-Compose基本命令说明。文档提供了从安装到使用的完整指南,适合在国产化环境中部署Docker服务参考使用。
2025-11-29 12:03:22
496
原创 MySQL多实例配置
MySQL多实例部署指南 MySQL多实例是在同一服务器上运行多个独立的MySQL服务进程,通过不同的端口、数据目录和配置文件实现隔离。这种方法能最大化硬件资源利用率,降低服务器成本,同时实现业务隔离和风险控制。 配置步骤: 下载并解压MySQL二进制包 创建虚拟用户和独立数据目录 初始化各实例数据目录 为每个实例创建专属配置文件 配置systemd服务单元文件 启动各实例并初始化root密码 关键优势: 资源利用率最大化 业务隔离性强 成本优化显著 配置灵活度高 适用于需要同时运行多个独立数据库环境但资源
2025-11-29 12:01:05
693
原创 自动化立体仓库堆垛机控制系统接收单机任务 FC9
本文介绍了堆垛机控制系统的STEP7硬件组态和程序设计。硬件采用CPU 314C-2PN/DP处理器,配备SM338模拟量输入模块。软件部分包含17个网络模块,主要实现单机接收作业功能,其中Network1负责接收作业标志,Network2-17通过HMI界面完成单机作业接收控制。系统采用模块化设计,通过多网络协同实现堆垛机的自动化控制功能。
2025-11-25 16:49:25
140
原创 自动化立体仓库堆垛机控制系统接收上位机任务 FC6
本文介绍了堆垛机控制系统的STEP7硬件组态和功能实现。系统采用CPU 314C-2PN/DP处理器,配置SM338 POS-INPUT和AO2x12Bit模块。详细说明了STEP7内部变量设置,重点阐述了FC6功能块实现上位机任务接收功能,包含4个网络模块,并具备返回原点等基本控制功能。系统设计满足堆垛机自动化控制需求。
2025-11-25 13:01:28
117
原创 Zabbix 配置中文界面、监控告警以及Windows、Linux主/被监控模板
本文详细介绍了Zabbix监控系统的中文界面配置方法及监控模式设置。主要内容包括:1)通过安装中文本地化包和修改Web界面用户配置实现中文显示;2)对比被动检查(Server主动请求)和主动检查(Agent主动上报)两种监控模式的工作原理、配置差异及适用场景;3)提供Linux和Windows系统下Zabbix Agent的安装步骤,包括被动/主动模式的详细配置方法;4)介绍监控数据查看方式及常见问题排查建议。适用于需要实现Zabbix中文界面或配置不同监控模式的运维人员。
2025-11-14 12:54:18
1103
原创 探索游戏渲染从UnityURP开始
本文摘要:文章探讨了渲染管线的基本原理与Unity URP(Universal Render Pipeline)的实现方式。首先区分了渲染流水线(GPU硬件流程)与渲染管线(引擎框架)的概念,指出URP是对标准流水线的优化封装。通过对比Unity内置管线,分析了URP的模块化架构、单Pass多光源处理等核心优势。重点阐释了Pass机制与完整流水线的区别,说明Pass仅是处理特定任务(如光照计算)的子阶段。文章以URP为实践参考,强调理解渲染流程需要从整体到局部逐步细化,同时指出这是一个持续完善的学习过程。
2025-11-14 12:49:23
913
原创 使用rpmbuild将源代码制成rpm包
文章摘要:本文详细介绍了如何将CentOS应用迁移到OpenEuler系统时,通过源代码编译制作RPM包的过程。首先展示了准备C语言程序、补丁文件和Makefile等源代码的步骤,然后讲解了rpm-build工具的使用方法,包括构建工作空间、编写spec文件规范、编译生成RPM包等关键环节。文章重点解析了spec文件的结构与宏定义,提供了从源代码打包到最终RPM安装的完整流程,特别适合批量部署场景。通过这个HelloWorld示例,读者可掌握基本的RPM打包技术,为大规模应用迁移提供高效解决方案。
2025-11-13 08:58:12
290
原创 解决 Oracle 监听外网 IP
腾讯云服务器上Oracle监听器默认只监听127.0.0.1导致外网无法访问1521端口的解决办法:修改listener.ora配置文件,将HOST参数改为0.0.0.0或外网IP地址,并重启监听器服务。同时需确保腾讯云防火墙已开放1521端口。操作步骤包括查找配置文件、修改监听地址、重启服务及验证配置生效。此外,若需使用nmap扫描工具,需根据操作系统类型提前安装配置。
2025-11-13 08:56:32
976
原创 Makefile极简指南
Makefile的核心结构遵循「目标-依赖-命令」模式,通过定义变量和规则实现自动化编译。从单文件(app.exe:main.c)到多文件项目(使用.o中间文件支持增量编译),Makefile能显著提升效率。进阶技巧包括模式规则(%.o:%.c)和自动变量($@/$^/$<),可简化重复命令,增强可维护性。优化版本通过统一管理OBJS和TARGET变量,使得新增源文件时只需修改一处,同时利用伪目标(.PHONY)实现清理功能。这种结构特别适合嵌入式开发,能快速适应工具链变更。
2025-11-08 17:29:50
331
原创 Unity颜色曲线ColorCurves
摘要:ChannelMixer是Unity URP后处理系统的核心组件,基于矩阵运算实现RGB通道混合,可创建电影级调色效果。其通过3×4变换矩阵控制各通道权重(范围-2到2),支持亮度保持机制防止过曝。URP实现包含Shader矩阵运算(dot乘积)、Volume参数传递和双次Blit渲染流程,典型应用包括赛博朋克色调、胶片模拟和色盲辅助等。该技术已整合为URP标准模块,相比传统方案更易集成美术工作流。
2025-11-03 20:00:54
939
原创 k8s-Pod中的网络通信
摘要:Kubernetes通过Service管理Pod网络通信,实现内外流量转发。外部访问内部时,Service通过NodePort将宿主机端口映射到Pod(由kube-proxy转化为iptables规则);内部访问外部时需手动配置Endpoint关联外部服务IP。文章详细介绍了创建Service的命令和配置文件示例,展示了如何通过NodePort暴露服务和手动配置外部端点。
2025-11-03 15:15:45
796
原创 k8s-应用部署和组件及常用命令
本文摘要:介绍了Kubernetes核心组件及其基本操作指令。主要包括:1)组件架构:节点(Node)、容器组(Pod)、命名空间(Namespace)、暂停容器(Pause)、标签(Label)、存储卷(Volume)、部署(Deployment)、副本集(RS)、服务(Service)和网络解决方案;2)常用操作指令:使用kubectl查看节点、命名空间和容器组信息,通过命令和YAML清单两种方式创建容器组和管理部署;3)扩展操作:包括扩缩容调整、资源编辑和副本数动态修改等实用功能。重点说明了kubec
2025-11-03 15:13:57
821
原创 磁盘格式化和LVM挂载
磁盘分区与LVM管理指南 摘要: 本文介绍了磁盘分区与LVM管理的操作流程。建议根据磁盘用途和大小选择分区表类型:系统盘需结合启动方式(BIOS用MBR,UEFI用GPT),超过2TB必须使用GPT。分区后不要格式化,使用parted或gdisk工具创建分区。LVM创建步骤包括:物理卷(pvcreate)、卷组(vgcreate)、逻辑卷(lvcreate)。文件系统推荐XFS(大文件性能优)或ext4(通用性强)。最后通过fstab挂载,建议使用UUID而非设备名以避免启动问题。关键命令包括:mkfs格式
2025-10-27 19:50:34
960
原创 Unity[法线贴图]原理与实践
法线贴图技术通过修改表面法线方向,在低模上实现高模细节效果,显著提升渲染效率。其核心是将RGB通道存储的法线方向通过TBN矩阵转换到世界空间,参与光照计算。URP实现流程包括:纹理导入设为BumpMap、材质配置法线插槽、Shader处理切线空间转换。关键步骤是在片段着色器中解压法线贴图,构建TBN矩阵进行空间转换,最终与光源方向点积计算光照。该技术广泛应用于角色细节和环境表现,需注意模型UV和切线数据的正确性,移动端可采用SimpleLit优化性能。
2025-10-27 19:48:30
1070
原创 Kafka 消息积压、重复、丢失 根源基本都是 Rebalance
Kafka消息积压时,Rebalance是常见诱因。Rebalance在消费者数量变化、分区扩容、订阅变更或心跳超时时触发,会导致消费暂停、消息重复/丢失等问题。优化策略包括:调优超时参数(增大max.poll.interval.ms)、关闭自动提交offset、采用StickyAssignor分配策略、确保业务逻辑幂等性。关键要平衡消费者稳定性和消息处理时效,避免频繁Rebalance引起的恶性循环。
2025-10-18 21:39:05
766
原创 EF Core FromExpression 方法
DbContext的FromExpression方法详解:1. 作用:通过表达式树直接构造筛选后的查询,避免先全表查询再筛选的开销。2. 核心优势:让初始查询直接生成带WHERE条件的SQL(如SELECT...WHERE author='老周'),减少数据库往返。3. 典型应用场景: 初始数据过滤(替代DbSet的默认全量查询) 表值函数映射(需配合HasDbFunction配置) 注意事项: 表值函数映射需配合表达式树转换 列名映射需在Property级别配置 方法自引用时实际不会产生递归调用 该方法通
2025-10-18 21:34:55
853
原创 创建 NuGet 程序包发布到 NuGet 官网
本文介绍了使用Visual Studio 2022将.NET类库制作为NuGet包并发布到NuGet官网的完整流程。主要内容包括:NuGet包的基本概念、注册NuGet账号并获取API密钥、配置包属性、通过两种方式生成NuGet包(构建时生成和使用.NET CLI命令),以及最终使用.NET CLI将包发布到NuGet官网。文章还展示了如何在项目中引入已发布的NuGet包,并提供了相关GitHub和Gitee代码仓库的链接。整个过程详细说明了从创建到发布NuGet包的各个关键步骤,为开发者提供了实用的技术指
2025-10-17 17:18:50
996
原创 Nacos 一行配置搞崩支付系统!(转)
摘要:文章分析了Nacos注册中心配置错误导致支付服务故障的案例。核心问题在于将动态业务服务错误配置为持久化实例,导致异常节点无法被自动剔除。文章详细对比了Nacos中临时实例(适合动态业务,默认心跳保活)与持久化实例(适合基础服务,主动探活)的区别,以及注册中心(AP)与配置中心(CP)的不同设计理念。最后总结:业务服务应使用临时实例,基础服务用持久化实例;配置中心所有配置默认持久化。
2025-10-12 10:50:59
994
原创 Kafka监控工具 EFAK-AI
EFAK-AI 5.0.0是一款基于AI的Kafka智能监控平台,通过集成大语言模型(如OpenAI、Claude等)提供智能运维支持。核心功能包括:实时监控Kafka集群状态、性能指标和消费延迟;分布式任务调度实现负载均衡;多渠道告警管理;支持Docker一键部署和传统安装包方式。技术架构采用SpringBoot 3.x、JDK17和Redis,提供可视化界面和流式对话交互。EFAK-AI显著提升了Kafka集群的运维效率,支持多集群管理、智能分析和故障诊断,是新一代实时数据处理的智能化解决方案。开源地址
2025-10-12 10:47:20
1190
原创 ORACLE数据库字符集
摘要:本文介绍了修改Oracle数据库国家字符集为UTF8的两种方法,重点推荐使用INTERNAL_USE关键字方案。该方案详细步骤包括:以独占模式启动数据库、启用限制会话、关闭相关进程、修改字符集参数,最后重启数据库。相比复杂的re-create方法,此方案更简洁高效。完整命令序列确保了字符集修改过程的安全性和可靠性。
2025-10-11 22:57:32
258
原创 通过System.Speech实现自动语音播报
该代码实现了一个基于队列的语音合成系统。主要功能包括:使用ConcurrentQueue线程安全队列存储待播报消息;通过AddQueue方法添加不超过7条不重复的消息;后台线程持续检查队列,当有消息时调用语音合成器异步播报,无消息时休眠5秒。系统采用多线程设计,通过SpeechSynthesizer实现文本转语音功能,适合需要有序处理语音任务的场景。
2025-10-11 15:44:30
853
原创 禁止在SpringBoot项目中使用Tomcat
文章摘要:SpringBoot开发者普遍使用Tomcat作为默认容器,但大公司更倾向Undertow。性能测试显示,Undertow在内存占用(节省25-40%)和并发处理(QPS提升40%)方面优势明显。其核心优势在于:1)XNIO架构实现IO/工作线程分离;2)零拷贝内存管理;3)灵活的处理器链机制。某电商案例显示迁移后QPS提升87%,内存降低40%。对于高并发微服务项目,建议优先选用Undertow以获得规模化收益。迁移仅需调整Maven依赖,但需注意WebSocket等配置差异。
2025-10-10 12:47:24
714
原创 工作中用MQ的10种场景
消息队列(MQ)在分布式系统中具有重要作用,主要解决系统解耦、异步处理、流量削峰等问题。本文通过10个典型场景展示了MQ的应用价值:1)系统解耦,避免服务间直接调用;2)异步处理耗时任务,提升响应速度;3)应对秒杀等高并发场景,缓冲请求;4)实现微服务间数据同步;5)集中处理分布式日志;6)配置变更广播;7)保证顺序消息处理;8)实现延迟任务;9)消息重试机制;10)分布式事务一致性。不同场景下可选择RabbitMQ、Kafka或RocketMQ等中间件,需注意消息幂等性、死信队列等处理机制。合理使用MQ能
2025-10-10 12:42:49
648
原创 高性能场景推荐使用PostgreSQL
在高性能场景下,PostgreSQL相比MySQL更具优势:采用进程池架构支持更高并发,提供多元索引策略(B-Tree/GIN/BRIN等)优化复杂查询,具备更强大的查询优化器和并行查询能力。PostgreSQL原生支持JSON、数组等复杂数据类型,事务处理采用更先进的MVCC实现,实测性能可达MySQL的2.4倍。尤其适合复杂查询、高并发写入、需要处理复杂数据类型的场景,但在简单读写和快速开发场景下MySQL仍具优势。技术选型应基于具体业务需求,对性能要求高的新项目优先考虑PostgreSQL。
2025-10-10 11:53:03
715
原创 【Spring Boot】自定义starter
Spring Boot自定义Starter开发指南 摘要: Spring Boot Starter是一种简化依赖管理的机制,通过自动配置实现快速集成。创建自定义Starter需要遵循命名规范(如{name}-spring-boot-starter),包含autoconfigure模块(实现自动配置逻辑)和starter模块(管理依赖)。关键步骤包括:1)定义配置属性类(@ConfigurationProperties);2)实现服务类;3)编写自动配置类(@Configuration);4)在Spring
2025-10-08 10:30:14
283
原创 【EF Core】实体类的依赖注入(转)
EFCore实体类支持依赖注入,但目前仅限框架内部服务。可注入的服务包括:1)EFCore核心服务;2)三个补充类型:当前DbContext实例、IEntityType和ILazyLoader。查询可注入服务类型有两种方式:查看EFCore源代码中CoreServices字典或通过IRegisteredServices服务获取注册列表。实体类通过构造函数或属性接收注入服务,可用于获取元数据或执行特殊操作。但注意IRegisteredServices本身不能作为注入类型。示例展示了如何注入IEntityTyp
2025-10-08 10:17:21
563
原创 【EF Core】通过 DbContext 选项扩展框架(转)
EFCore虽然不支持直接传递自定义服务容器,但可以通过实现IDbContextOptionsExtension接口来扩展功能。主要步骤包括: 创建自定义服务接口和实现类 实现IDbContextOptionsExtension接口,重点在ApplyServices方法中添加服务 实现DbContextOptionsExtensionInfo类处理扩展信息 创建扩展方法方便使用 在DbContext中应用扩展 通过GetService方法获取注入的服务 该方法绕过了EFCore的服务容器限制,实现了依赖注入
2025-10-08 10:13:59
1251
原创 ASRS Launch Script (Clean + Reliable)
该脚本用于自动启动ASRS库存系统的多个服务组件。它通过PowerShell分别启动:1) Python3电商服务(8000端口);2) 前端开发服务器;3) PLC模拟器;4) 后端开发服务器;5) 网络控制程序。等待8秒确保电商服务启动后,自动在Edge浏览器打开电商页面。所有服务都在独立的PowerShell窗口中运行,并显示成功启动的确认信息。
2025-10-04 09:42:49
279
原创 springboot整合sa-token报未能获取有效的上下文处理器
摘要:在SpringBoot整合Sa-Token时出现SaTokenContextException异常,提示上下文未初始化或未能获取有效的上下文处理器。该问题通常因缺少Sa-Token配置或依赖冲突导致,需检查@EnableSaToken注解是否启用、依赖版本兼容性及上下文处理器实现类配置。建议排查初始化流程,确保正确集成Sa-Token与SpringBoot的上下文环境。(99字)
2025-10-03 21:30:07
350
原创 如何在新的Spring Boot项目中关闭Spring Security?
解决方法:关闭spring security的自动配置 代码:@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
2025-10-02 20:01:16
649
原创 ManySpeech 使用 C# 开发人工智能应用
ManySpeech是manyeyes社区开发的C#语音处理套件,基于ONNX模型实现跨平台部署。它整合语音识别、端点检测、标点恢复、音频分离等核心功能,支持多语言处理,适配Windows/macOS/Linux/移动端等平台。通过组件化设计优化开发效率,提供流式/离线模型选择,并支持AOT编译减少30%体积。适用于实时交互、离线转写、复杂环境降噪等场景,为.NET开发者提供一站式语音处理解决方案。
2025-09-30 11:45:36
991
原创 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile
项目升级JDK17后出现编译错误,原因是Lombok版本过低(1.18.8)不兼容JDK17。解决方案是将Lombok升级至1.18.22版本即可正常编译。可通过官方链接查询各版本Lombok支持的JDK版本。
2025-09-30 11:43:49
120
原创 Harbor磁盘空间清理指南:如何安全清理半年前的镜像
Harbor镜像清理方案摘要 在多项目CI/CD环境中,Harbor镜像仓库易积累大量旧镜像,导致存储耗尽。Harbor采用两级删除机制:软删除仅移除元数据,需通过垃圾回收(GC)硬删除释放物理空间。 清理方法: UI保留策略(Harbor v2.4+):通过界面配置规则(如保留180天内镜像),支持定时自动清理,需后续执行GC。 API脚本删除:适用于复杂需求或旧版本,通过Python/Shell脚本调用API筛选并删除半年前的镜像标签,灵活性高但需编程能力。 关键步骤: 执行垃圾回收(GC)以释放物理空
2025-09-29 17:45:46
1145
工业自动化领域基于以太网的PLC通信配置方法:西门子S7系统与Leuze BCL348i条码扫描器的PROFINET IO集成实现
2025-11-30
SEW变频器接线图.pdf【工业自动化】基于SEW变频器的电机编码器接线配置:PROFIBUS通信与SSI接口控制系统设计
2025-11-29
全自动输送线系统使用操作说明.pptx
2025-11-29
【工业自动化】基于Point I/O 1734的地址连续配置方法:实现SDN网络中输入输出字节精准映射的技术流程设计
2025-11-28
GRWH2019-014 武汉本田2VH车型项目 2VH柔性站PLC-1-20200117-1007.zap15
2025-12-16
2FW-3工作站-20201017-1713 GRWH2019-032 东风本田2FW车型生产线项目
2025-12-16
GSDML-V2.25-DFE-DFS-2Ports-20131213-121501.xml
2025-12-16
Unity 项目机械手 生产流水线 realvirtualio Digital Twin Professional 2021 2021.05.unitypackage
2025-12-14
gsdml-v2.32-blueone-hj3200-90d3-20220220.xml
2025-12-12
基恩士 KEYENCE SafetyDeviceConfigurator-Web-3510.zip 配置工具
2025-12-08
tr0caaab.gsd CM58- Magnet Encoder
2025-12-05
hsl-communication-net-frame HslCommunication c#源码 Version 12.1.2 核心源码,PLC通信采集功能DLL库源码
2025-12-03
广州邮政环形交叉带分拣线项目
2025-12-01
上海展会环形交叉带分拣线程序(施耐德) 施耐德程序
2025-12-01
gsdml-v2.2-pepperl+fuchs-encoder-20110801.xml
2025-11-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅