- el-input 设置类型为number时,输入中文后光标会上移,并且会出现上下箭头
前端小趴菜05
vue.jselementuicss
光标上移设置el-input的type='number'后,只能输入数字,输入中文后会自动清空,但是会出现一个问题:【光标会上移,如下图】解决方法:修改样式注意:需要使用样式穿透:deep()/*解决el-input设置类型为number时,中文输入法光标上移问题*/:deep(.el-input__inner){line-height:1px!important;}输入框后面会出现上下箭头设置e
- 前端解决get请求传递数组
前端小趴菜05
前端
直接使用get请求传递数组,会报错解决方案1.传递字符串,将数组转为字符串进行传递,后端也以字符串接受//使用join方法将数组转为字符串letdata=[1,2,3,4,5]letparams=data.join(',')//1,2,3,4,52.将数组转换为查询字符串格式,并附加到URL上constarrayToQueryString=(data:number[],key:string)=>{
- 蓝桥杯单片机刷题——E2PROM记录开机次数
lzb759
一个月备赛蓝桥杯单片机蓝桥杯单片机
设计要求使用E2PROM完成数据记录功能,单片机复位次数记录到E2PROM的地址0中。每复位一次数值加1,按下按键S4,串口发送复位次数。串口发送格式如下:Number:1备注:单片机IRC振荡器频率设置为12MHz。按键模式:BTN;扩展方式:IO模式。串口通信波特率设置为9600。代码:sys.h#ifndef__SYS_H__#define__SYS_H__#include#include"
- Python容器详解:从字符串到字典的完整指南
程序员
Python容器详解:从字符串到字典的完整指南大家好!今天我们来详细了解Python中的各种容器类型,包括字符串、列表、元组和字典。让我们一起探索这些重要的数据结构!1.字符串操作下标和切片字符串支持通过下标访问单个字符,也支持切片操作获取子串:email="888666@qq.com"#获取QQ号qq_number=email[:6]#888666#获取域名domain=email[7:]#qq
- 【深度学习】yolov8使用的一个小warning
weixin_40293999
深度学习yolov深度学习YOLO人工智能
PSD:\code\JerseyNumberTrackerStrategy>&D:/Users/51442/anaconda3/python.exed:/code/JerseyNumberTrackerStrategy/classes/Yolov8Detector.pyWARNING⚠️imgsz=[760,2306]mustbemultipleofmaxstride32,updatingto[7
- 编码二进制表示
森焱森
c语言网络架构算法
在单片机编程中,使用C语言表示二进制数通常有以下几种方式:1.使用二进制常量(部分编译器支持)一些现代的C语言编译器(如GCC)支持二进制常量的直接表示。例如:unsignedintbinary_number=0b10101010;//二进制表示•0b或0B是二进制前缀,表示后面的数字是二进制格式。•这种方式非常直观,但在某些编译器中可能不支持。2.使用十六进制或八进制表示如果编译器不支持二进制常
- 封装了一个支持多个分区的iOS自适应动态宽度layout
刘小哈哈哈
ioscocoamacos
支持多分区的动态自适应宽度layout,完善了之前只支持一个分区的布局,这里直接上代码,可以用来在商品sku,搜索记录,编辑tab等场景的使用,灵活性强,支持代理配置////LBNumberCenterEditTabLayout.m////Createdbyliuboon26.3.25.//#importNS_ASSUME_NONNULL_BEGIN@protocolLBNumberCenterE
- [LeetCode] 72. Edit Distance 编辑距离 @python
冷的太明显
LeetCodepythonleetcodeeditdistan编辑距离
DescriptionGiventwowordsword1andword2,findtheminimumnumberofoperationsrequiredtoconvertword1toword2.Youhavethefollowing3operationspermittedonaword:InsertacharacterDeleteacharacterReplaceacharacter给定两个
- 蓝桥杯python编程每日刷题day one
姜威鱼
蓝桥杯
小知识点:round(number,7)可以来实现对数的包留7位小数也可以number=3.14159265358new_number=“{:.7f}".format(number)题目1:判断闰年(是4的倍数而不是100的倍数,或者是400的倍数)(1)代码:a=int(input())if(a%4==0anda%100!=0)or(a%400==0):print("yes")else:prin
- python水果超市管理系统_java实现水果超市管理系统
铁帅
python水果超市管理系统
本文为大家分享了java实现水果超市管理系统的具体代码,供大家参考,具体内容如下首先建立水果类的界面publicclassFruit{//定义IDprivateStringid;//定义名称privateStringname;//定义价格privateintprice;//定义单位privateStringunit;//定义数量privateintnumber;publicFruit(String
- 用Android studio 做出QQ登录界面
puerhuo
androidstudioandroidstudio
1.布局界面代码如下:
- 分页查询原理与优化方案完全指南
遥不可及~~斌
数据库数据库sql
分页查询原理与优化方案完全指南一、分页查询基础原理1.1传统分页实现方式分页查询的核心目的是将大数据集分割成多个小块进行展示,最常见的实现方式是使用LIMIT-OFFSET语法:--基础分页查询SELECT*FROMtable_nameORDERBYidLIMITpage_sizeOFFSET(page_number-1)*page_size;工作原理:数据库执行全表扫描或索引扫描跳过前OFFSE
- Windows 图形显示驱动开发-WDDM 2.7功能-MCDM KM 驱动程序实现指南(五)
程序员王马
windows图形显示驱动开发驱动开发
驱动程序功能要求必须将以下DXGK_DRIVERCAPS结构成员设置为适当的值:HighestAcceptableAddress如果此地址小于驱动程序加载期间存在的系统内存的最高物理地址,则加载将失败。InterruptMessageNumber根据需要设置。SchedulingCaps请参阅SchedulingCaps要求。MemoryManagementCaps请参阅MemoryManagem
- Oracle数据库数据编程SQL<2.1 DDL、DCL表、列及约束>
Tyler先森
Oracle数据库oraclesql
目录一、对表的操作(一)复制表1、语法2、练习3、仅复制表格式--在where后加一个不成立的条件(二)自建表1、数据类型(1)字符类型:char2、varchar/varchar2char(数)固定长度类型varchar/varchar2(数)可变长度类型(2)数值类型:number、intnumber(数1,数2)int(数)(3)日期类型:date、timestampdate不用加长度tim
- 西门子S7协议
stepan.jiang
python库自动化测试python
以下是客户端函数使用#coding:utf-8importsnap7,time,jsonfromsnap7.utilimport*s7_clinet=snap7.client.Client()s7_clinet.connect("",0,1)classsnap7_fuction():def__init__(self,area,dbnumber,start,size,data=None):self.
- bugku_EasyMath
岁岁的O泡奶
python开发语言RSAcrypto密码学bugkuEasyMath
EasyMath题目:fromCrypto.Util.numberimportgetPrime,bytes_to_longfromsecretimportflagp=getPrime(2048)q=getPrime(2048)x=getPrime(4096)y=getPrime(4096)n=p*qe=0x10001c=pow(bytes_to_long(flag),e,n)print(c)pri
- uniapp 多状态下使用动态class
向下的大树
uni-app
:class="{'hourZero':item.status===0,'hourOne':Number(item.status)===1,'hourTwo':Number(item.status)===2}"//设置动态值hourList:[{status:1},{status:2},{status:0},],:class="{'hourZero':item.status===0,'hourOn
- C#的反射和特性
unity学院
苍狼王unity技术学院c#开发语言unityVR游戏开发
classMyClass{privateintid;privateintage;publicintnumber;publicstringName{get;set;}publicstringName2{get;set;}publicstringName3{get;set;}publicvoidTest1(){}publicvoidTest2(){}}classProgram{staticvoidMa
- mysql 交叉连接的用法_深入理解MySQL的外连接、内连接、交叉连接
Gains iFortune
mysql交叉连接的用法
1、内联接(典型的联接运算,使用像=或'MIKE_ORDER001';语句8:将语句7中的WHERE条件放到ON后面。SELECTO.ID,O.ORDER_NUMBER,O.CUSTOMER_ID,C.ID,C.NAMEFROMORDERSOLEFTOUTERJOINCUSTOMERSCONC.ID=O.CUSTOMER_IDANDO.ORDER_NUMBER<>'MIKE_ORDER001';从
- iframe 预览pdf时 设置不显示工具栏 菜单里 全屏适应元素
我家媳妇儿萌哒哒
vuehtmlpdf
实际项目中可能用到的操作有:放大两倍隐藏工具栏隐藏滚动条等配置Zoom(缩放):#zoom=scale:设置缩放级别,scale是一个百分比值。例如,#zoom=150表示将文件放大至150%。页面导航:#page=page_number:指定PDF文件打开时显示的页面。例如,#page=3表示打开时跳转至第三页。查看模式:#view=Fit:将文档调整为适应屏幕。#view=FitH:将文档调整
- 【OpenPose常用命令】Linux系统中运行openpose的常用命令
却道海棠
linux运维服务器
文章目录OpenPose简介OpenPose中一些重要的参数及其功能[模型训练与优化][网络结构的作用]OpenPose使用的网络结构【*pose_pairs】【工作原理示例】【*置信度】【置信度的决定方式】【置信度的大小及其影响】【热图峰值】【在OpenPose中的应用】【示例】[默认设置和修改方式示例]1.`net_resolution`:网络分辨率2.`number_people_max`:
- Ubuntu 防火墙配置
竹之却
Linuxubuntulinux运维
Ubuntu防火墙配置一、UFW基础操作二、核心规则配置三、高级功能四、特殊场景配置五、规则管理六、默认策略与安全建议七、故障排除一、UFW基础操作检查UFW状态sudoufwstatus#查看防火墙状态sudoufwstatusverbose#显示详细规则sudoufwstatusnumbered#显示规则编号安装与启用sudoaptinstallufw#安装(Ubuntu通常预装)sudouf
- HarmonyOS NEXT 中级开发笔记:日历提醒应用的数据库设计与实践
harmonyos-next
今天在适配HarmonyOSNEXT版本的日历提醒应用时,重点研究了HarmonyOSDesign规范下的数据库设计。鸿蒙的分布式特性对数据存储提出了更高要求,这里记录几个关键实现点。一、数据模型设计遵循HarmonyOSDesign的简洁性原则,设计了以下核心表结构:typescript//提醒事项表结构interfaceReminder{id:number;//主键title:string;/
- HarmonyOS NEXT 中级开发笔记:基于HarmonyOS Design的新闻热搜应用数据库实践
harmonyos-next
今天在适配HarmonyOSNEXT应用时,重点研究了HarmonyOSDesign规范下的数据库设计与操作。作为API12兼容开发的一部分,记录下几个关键点。数据模型设计遵循HarmonyOSDesign的"简洁高效"原则,先设计了一个用户数据模型:typescriptinterfaceUser{id:number;//用户IDname:string;//用户名avatar?:string;//
- HarmonyOS NEXT 中级开发笔记:童话主题应用的数据库设计实践
harmonyos-next
最近在适配一个童话主题的儿童教育应用,尝试用HarmonyOSDesign规范重构数据层。记录几个关键点供参考:数据模型设计遵循HarmonyOSDesign的"简洁性"原则,将童话故事拆解为结构化数据:typescriptinterfaceFairyTale{id:number;//唯一标识title:Resource;//多语言支持cover:Resource;//封面资源level:numb
- qwen_vl_utils代码分析
fydw_715
qwen计算机视觉人工智能
函数列表:序号函数名简要说明1round_by_factor(number:int,factor:int)->int返回最接近number,且能被factor整除的整数。2ceil_by_factor(number:int,factor:int)->int返回大于等于number,且能被factor整除的最小整数。3floor_by_factor(number:int,factor:int)->i
- C#基础(10)变长参数和参数默认值
ling1s
#C#基础c#开发语言
前言作为函数的补充知识点,我们已经学习了ref和out,接下来两节我们继续来讲函数相关的内容。本节则讲解变长参数和参数默认值。函数语法关键字:paramspublicvoidPrintNumbers(paramsint[]numbers){for相关逻辑}注意params关键字后面必须跟数组数组类型可以是任意的类型函数参数可以有别的参数和params关键字修饰的参数函数参数中只能最多出现一个par
- JavaScript 金额运算精度丢失问题及解决方案
设计小王欣
javascript开发语言ecmascript
JavaScript金额运算精度丢失问题及解决方案1.前言2.为什么JavaScript计算金额会精度丢失?2.1JavaScript使用IEEE754双精度浮点数2.2浮点运算错误示例**错误示例1:0.1+0.2≠0.3****错误示例2:浮点乘法精度问题**3.解决方案**方案1:使用整数运算(推荐)****方案2:使用`toFixed()`(简单但不推荐)****方案3:使用`Number
- uniapp中props的用法
Vae_Mars
uniappuni-app前端javascript
一、基本该概念Props是父组件向子组件传递数据的桥梁,子组件通过定义props接收父组件的数据二、定义方式1、简单类型定义(数组形式)//子组件定义props:['name','age']//父组件使用2、对象类型定义(推荐)props:{name:{type:String,default:'Guest',required:true},age:{type:Number,validator:(va
- 1010 Radix
理智的灰太狼
pta英文题算法数据结构
1010Radix分数25全屏浏览切换布局作者CHEN,Yue单位浙江大学Givenapairofpositiveintegers,forexample,6and110,canthisequation6=110betrue?Theanswerisyes,if6isadecimalnumberand110isabinarynumber.NowforanypairofpositiveintegersN
- 集合框架
天子之骄
java数据结构集合框架
集合框架
集合框架可以理解为一个容器,该容器主要指映射(map)、集合(set)、数组(array)和列表(list)等抽象数据结构。
从本质上来说,Java集合框架的主要组成是用来操作对象的接口。不同接口描述不同的数据类型。
简单介绍:
Collection接口是最基本的接口,它定义了List和Set,List又定义了LinkLi
- Table Driven(表驱动)方法实例
bijian1013
javaenumTable Driven表驱动
实例一:
/**
* 驾驶人年龄段
* 保险行业,会对驾驶人的年龄做年龄段的区分判断
* 驾驶人年龄段:01-[18,25);02-[25,30);03-[30-35);04-[35,40);05-[40,45);06-[45,50);07-[50-55);08-[55,+∞)
*/
public class AgePeriodTest {
//if...el
- Jquery 总结
cuishikuan
javajqueryAjaxWebjquery方法
1.$.trim方法用于移除字符串头部和尾部多余的空格。如:$.trim(' Hello ') // Hello2.$.contains方法返回一个布尔值,表示某个DOM元素(第二个参数)是否为另一个DOM元素(第一个参数)的下级元素。如:$.contains(document.documentElement, document.body); 3.$
- 面向对象概念的提出
麦田的设计者
java面向对象面向过程
面向对象中,一切都是由对象展开的,组织代码,封装数据。
在台湾面向对象被翻译为了面向物件编程,这充分说明了,这种编程强调实体。
下面就结合编程语言的发展史,聊一聊面向过程和面向对象。
c语言由贝尔实
- linux网口绑定
被触发
linux
刚在一台IBM Xserver服务器上装了RedHat Linux Enterprise AS 4,为了提高网络的可靠性配置双网卡绑定。
一、环境描述
我的RedHat Linux Enterprise AS 4安装双口的Intel千兆网卡,通过ifconfig -a命令看到eth0和eth1两张网卡。
二、双网卡绑定步骤:
2.1 修改/etc/sysconfig/network
- XML基础语法
肆无忌惮_
xml
一、什么是XML?
XML全称是Extensible Markup Language,可扩展标记语言。很类似HTML。XML的目的是传输数据而非显示数据。XML的标签没有被预定义,你需要自行定义标签。XML被设计为具有自我描述性。是W3C的推荐标准。
二、为什么学习XML?
用来解决程序间数据传输的格式问题
做配置文件
充当小型数据库
三、XML与HTM
- 为网页添加自己喜欢的字体
知了ing
字体 秒表 css
@font-face {
font-family: miaobiao;//定义字体名字
font-style: normal;
font-weight: 400;
src: url('font/DS-DIGI-e.eot');//字体文件
}
使用:
<label style="font-size:18px;font-famil
- redis范围查询应用-查找IP所在城市
矮蛋蛋
redis
原文地址:
http://www.tuicool.com/articles/BrURbqV
需求
根据IP找到对应的城市
原来的解决方案
oracle表(ip_country):
查询IP对应的城市:
1.把a.b.c.d这样格式的IP转为一个数字,例如为把210.21.224.34转为3524648994
2. select city from ip_
- 输入两个整数, 计算百分比
alleni123
java
public static String getPercent(int x, int total){
double result=(x*1.0)/(total*1.0);
System.out.println(result);
DecimalFormat df1=new DecimalFormat("0.0000%");
- 百合——————>怎么学习计算机语言
百合不是茶
java 移动开发
对于一个从没有接触过计算机语言的人来说,一上来就学面向对象,就算是心里上面接受的了,灵魂我觉得也应该是跟不上的,学不好是很正常的现象,计算机语言老师讲的再多,你在课堂上面跟着老师听的再多,我觉得你应该还是学不会的,最主要的原因是你根本没有想过该怎么来学习计算机编程语言,记得大一的时候金山网络公司在湖大招聘我们学校一个才来大学几天的被金山网络录取,一个刚到大学的就能够去和
- linux下tomcat开机自启动
bijian1013
tomcat
方法一:
修改Tomcat/bin/startup.sh 为:
export JAVA_HOME=/home/java1.6.0_27
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export PATH=$JAVA_HOME/bin:$PATH
export CATALINA_H
- spring aop实例
bijian1013
javaspringAOP
1.AdviceMethods.java
package com.bijian.study.spring.aop.schema;
public class AdviceMethods {
public void preGreeting() {
System.out.println("--how are you!--");
}
}
2.beans.x
- [Gson八]GsonBuilder序列化和反序列化选项enableComplexMapKeySerialization
bit1129
serialization
enableComplexMapKeySerialization配置项的含义
Gson在序列化Map时,默认情况下,是调用Key的toString方法得到它的JSON字符串的Key,对于简单类型和字符串类型,这没有问题,但是对于复杂数据对象,如果对象没有覆写toString方法,那么默认的toString方法将得到这个对象的Hash地址。
GsonBuilder用于
- 【Spark九十一】Spark Streaming整合Kafka一些值得关注的问题
bit1129
Stream
包括Spark Streaming在内的实时计算数据可靠性指的是三种级别:
1. At most once,数据最多只能接受一次,有可能接收不到
2. At least once, 数据至少接受一次,有可能重复接收
3. Exactly once 数据保证被处理并且只被处理一次,
具体的多读几遍http://spark.apache.org/docs/lates
- shell脚本批量检测端口是否被占用脚本
ronin47
#!/bin/bash
cat ports |while read line
do#nc -z -w 10 $line
nc -z -w 2 $line 58422>/dev/null2>&1if[ $?-eq 0]then
echo $line:ok
else
echo $line:fail
fi
done
这里的ports 既可以是文件
- java-2.设计包含min函数的栈
bylijinnan
java
具体思路参见:http://zhedahht.blog.163.com/blog/static/25411174200712895228171/
import java.util.ArrayList;
import java.util.List;
public class MinStack {
//maybe we can use origin array rathe
- Netty源码学习-ChannelHandler
bylijinnan
javanetty
一般来说,“有状态”的ChannelHandler不应该是“共享”的,“无状态”的ChannelHandler则可“共享”
例如ObjectEncoder是“共享”的, 但 ObjectDecoder 不是
因为每一次调用decode方法时,可能数据未接收完全(incomplete),
它与上一次decode时接收到的数据“累计”起来才有可能是完整的数据,是“有状态”的
p
- java生成随机数
cngolon
java
方法一:
/**
* 生成随机数
* @author cngolon@126.com
* @return
*/
public synchronized static String getChargeSequenceNum(String pre){
StringBuffer sequenceNum = new StringBuffer();
Date dateTime = new D
- POI读写海量数据
ctrain
海量数据
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming
- mysql 日期格式化date_format详细使用
daizj
mysqldate_format日期格式转换日期格式化
日期转换函数的详细使用说明
DATE_FORMAT(date,format) Formats the date value according to the format string. The following specifiers may be used in the format string. The&n
- 一个程序员分享8年的开发经验
dcj3sjt126com
程序员
在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的,在下从事.NET及JAVA方面的开发的也有8年的时间了,在这里在下想凭借自己的亲身经历,与大家一起探讨一下。
明确入行的目的
很多人干IT这一行都冲着“收入高”这一点的,因为只要学会一点HTML, DIV+CSS,要做一个页面开发人员并不是一件难事,而且做一个页面开发人员更容
- android欢迎界面淡入淡出效果
dcj3sjt126com
android
很多Android应用一开始都会有一个欢迎界面,淡入淡出效果也是用得非常多的,下面来实现一下。
主要代码如下:
package com.myaibang.activity;
import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.CountDown
- linux 复习笔记之常见压缩命令
eksliang
tar解压linux系统常见压缩命令linux压缩命令tar压缩
转载请出自出处:http://eksliang.iteye.com/blog/2109693
linux中常见压缩文件的拓展名
*.gz gzip程序压缩的文件
*.bz2 bzip程序压缩的文件
*.tar tar程序打包的数据,没有经过压缩
*.tar.gz tar程序打包后,并经过gzip程序压缩
*.tar.bz2 tar程序打包后,并经过bzip程序压缩
*.zi
- Android 应用程序发送shell命令
gqdy365
android
项目中需要直接在APP中通过发送shell指令来控制lcd灯,其实按理说应该是方案公司在调好lcd灯驱动之后直接通过service送接口上来给APP,APP调用就可以控制了,这是正规流程,但我们项目的方案商用的mtk方案,方案公司又没人会改,只调好了驱动,让应用程序自己实现灯的控制,这不蛋疼嘛!!!!
发就发吧!
一、关于shell指令:
我们知道,shell指令是Linux里面带的
- java 无损读取文本文件
hw1287789687
读取文件无损读取读取文本文件charset
java 如何无损读取文本文件呢?
以下是有损的
@Deprecated
public static String getFullContent(File file, String charset) {
BufferedReader reader = null;
if (!file.exists()) {
System.out.println("getFull
- Firebase 相关文章索引
justjavac
firebase
Awesome Firebase
最近谷歌收购Firebase的新闻又将Firebase拉入了人们的视野,于是我做了这个 github 项目。
Firebase 是一个数据同步的云服务,不同于 Dropbox 的「文件」,Firebase 同步的是「数据」,服务对象是网站开发者,帮助他们开发具有「实时」(Real-Time)特性的应用。
开发者只需引用一个 API 库文件就可以使用标准 RE
- C++学习重点
lx.asymmetric
C++笔记
1.c++面向对象的三个特性:封装性,继承性以及多态性。
2.标识符的命名规则:由字母和下划线开头,同时由字母、数字或下划线组成;不能与系统关键字重名。
3.c++语言常量包括整型常量、浮点型常量、布尔常量、字符型常量和字符串性常量。
4.运算符按其功能开以分为六类:算术运算符、位运算符、关系运算符、逻辑运算符、赋值运算符和条件运算符。
&n
- java bean和xml相互转换
q821424508
javabeanxmlxml和bean转换java bean和xml转换
这几天在做微信公众号
做的过程中想找个java bean转xml的工具,找了几个用着不知道是配置不好还是怎么回事,都会有一些问题,
然后脑子一热谢了一个javabean和xml的转换的工具里,自己用着还行,虽然有一些约束吧 ,
还是贴出来记录一下
顺便你提一下下,这个转换工具支持属性为集合、数组和非基本属性的对象。
packag
- C 语言初级 位运算
1140566087
位运算c
第十章 位运算 1、位运算对象只能是整形或字符型数据,在VC6.0中int型数据占4个字节 2、位运算符: 运算符 作用 ~ 按位求反 << 左移 >> 右移 & 按位与 ^ 按位异或 | 按位或 他们的优先级从高到低; 3、位运算符的运算功能: a、按位取反: ~01001101 = 101
- 14点睛Spring4.1-脚本编程
wiselyman
spring4
14.1 Scripting脚本编程
脚本语言和java这类静态的语言的主要区别是:脚本语言无需编译,源码直接可运行;
如果我们经常需要修改的某些代码,每一次我们至少要进行编译,打包,重新部署的操作,步骤相当麻烦;
如果我们的应用不允许重启,这在现实的情况中也是很常见的;
在spring中使用脚本编程给上述的应用场景提供了解决方案,即动态加载bean;
spring支持脚本