E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
黑马程序员-学习日记
B站
黑马程序员
第二章10——字符串格式化,占位符
#字符串格式化#占位符%S%表示:我要占位s表示:将变成字符串放入占位的地方#多个变量占位拼接,变量要用括号,用逗号隔开#将变量内容均转换为字符串进行拼接name="朱丽叶"height=166weight=57.5print("我最爱的狗狗是:%s,她个子高%s,身材好%s。"%(name,height,weight))#多类型数据占位#%s将内容转换为字符串,放入占位#%d将内容转换为整数,放
苹果.Python.八宝粥
·
2025-03-24 12:32
python
开发语言
pyspark学习rdd处理数据方法——学习记录
python
黑马程序员
"""文件,按JSON字符串存储1.城市按销售额排名2.全部城市有哪些商品类别在售卖3.上海市有哪些商品类别在售卖"""frompysparkimportSparkConf,SparkContextimportosimportjsonos.environ
亭午
·
2025-03-23 20:12
学习
HTML+CSS案例展示(CSS3D效果旋转相册)
参考来源:
黑马程序员
pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程_哔哩哔哩_bilibili效果展示:总结:transform:translate(x,y)rotate
hacalili
·
2025-03-23 18:28
html
css
前端
css3
《java面向对象(5)》<不含基本语法>
本笔记基于
黑马程序员
java教程整理,仅供参考1.异常1.1异常分类1.1.1Error指系统级别的错误,程序员无法解决,不必理会1.1.2Exception(异常)分为两类:RuntimeException
java小白板
·
2025-03-22 18:11
java
开发语言
【Java
学习日记
6】:字面量的分类与使用
一、字面量的定义与作用字面量是程序中直接书写的数据值,无需通过变量或计算获取。它用于表示固定的值,如数字、字符、布尔值等,例如:数字100、字符串"Hello"、字符'A'等。字面量告诉编译器数据的类型和值。字面量就是告诉程序员:数据在程序中的书写格式.---二、字面量的分类Java中的字面量按数据类型可分为以下六类:类型说明示例整数类型不带小数点的数字123,-456小数类型带小数点的数字3.1
小蛋6g
·
2025-03-22 01:42
Java学习日记
java
开发语言
日常
学习日记
——从练习代码中学习
日常
学习日记
——从练习代码中学习一、题目展示二、代码展示三、问题剖析四、冒泡排序4.1阐述4.2优缺点4.3逻辑阐述初学者记录不易,还请多多哦点赞支持呀!!
梦想成为大牛呀
·
2025-03-21 00:08
学习
c语言
笔记
大模型工程师
学习日记
(五):基于LangServe的AI服务架构深度解析
1.概述LangServe️帮助开发者将LangChain可运行和链部署为RESTAPI。该库集成了FastAPI并使用pydantic进行数据验证。Pydantic是一个在Python中用于数据验证和解析的第三方库,现在是Python中使用广泛的数据验证库。它利用声明式的方式定义数据模型和Python类型提示的强大功能来执行数据验证和序列化,使您的代码更可靠、更可读、更简洁且更易于调试。。它还可
MMMMMMMay Love Code
·
2025-03-19 02:09
学习
架构
语言模型
深度学习
人工智能
git
《java面向对象(2)》<不含基本语法>
提示:本笔记基于
黑马程序员
java教程整理,仅供参考文章目录前言1.继承2.多态2.1对象多态2.2行为对象2.3多态的问题前言本文纯笔记,主要记录了java面向对象的高级方法继承与多态1.继承在创建多个对象类时
java小白板
·
2025-03-17 19:06
java
开发语言
Python
学习日记
-第二十九天-tcp(客户端)
系列文章目录tcp介绍tcp特点tcp客户端一、tcp介绍Tcp协议,传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义TCP通信需要经过创建连接、传输数据、终止连接三个步骤TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中的“打电话”(注:之前学习的udp,在通信前,不需要建立相关的链接,只需要发送数据即可,类似于“写
差点长成吴彦祖
·
2025-03-17 14:55
python
pandas
tcp/ip
网络
大模型工程师
学习日记
(十五):Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析)
1.datasets库核心方法1.1.列出数据集使用datasets库,你可以轻松列出所有HuggingFace平台上的数据集:fromdatasetsimportlist_datasets#列出所有数据集all_datasets=list_datasets()print(all_datasets)1.2.加载数据集你可以通过load_dataset方法加载任何数据集:fromdatasetsim
MMMMMMMay Love Code
·
2025-03-15 20:52
学习
bert
人工智能
深度学习
自然语言处理
全量微调
大模型工程师
学习日记
(十四):检索增强生成(RAG)
如何递归分割文本递归分割(recursively),这个文本分割器是用于通用文本的推荐工具。它接受一个字符列表作为参数。它会按顺序尝试在这些字符上进行分割,直到块足够小。默认的字符列表是["\n\n","\n","",""]。这样做的效果是尽可能保持所有段落(然后是句子,再然后是单词)在一起,因为这些通常看起来是语义上相关的文本块。文本如何分割:根据字符列表。块大小如何衡量:根据字符数量。下面我们
MMMMMMMay Love Code
·
2025-03-15 20:52
学习
langchain
深度学习
人工智能
开发语言
指针高级06【数组指针】-
黑马程序员
C语言
数组指针的基本用法概念:指向数组的指针,叫做数组指针作用:方便操作数组中的各种数据#include"stdio.h"intmain(){intarr[]={10,20,30,40,50};intlen=sizeof(arr)/sizeof(int);//获取数组的指针//实际上获取数据的首地址int*p1=arr;int*p2=&arr[0];printf("%p\n",p1);printf("%
·
2025-03-12 04:19
c
Stream 流 【学习笔记】Java 基础
学习视频【黑马Java基础教程】Stream流从入门到精通】【
黑马程序员
Java零基础视频教程】(上部)【
黑马程序员
Java零基础视频教程】(下部)Java基础(查缺补漏)Java集合【学习笔记】Java
燕赵韩魏555
·
2025-03-12 00:30
Java
基础学习
#
java
java
学习
黑马程序员
-接口测试-四天学习接口测试-第二天-接口用例设计,测试点,功能测试,安全测试,性能测试,单接口测试,业务场景测试用例,postman简介,安装
今日学习目标分析接口文档,设计编写接口测试用例使用Postman设置请求方法、URL、请求头、请求体,向接口发送http请求,并查看响应数据分析接口文档,设计接口测试用例使用postman设置请求方法,url请求头,请求体,查看响应数据3接口用例设计为什么写防止测试点漏测。条理清晰方便分配工作,评估工作量和时间面试时使用!接口测试的测试点测试点称之为测试维度。5功能测试单接口功能:手工测试中的单个
学习记录wanxiaowan
·
2025-03-11 18:46
postman
学习
功能测试
C语言
学习日记
--循环,分支语句
C语言
学习日记
--循环分支语句题目一1.题目展示2.完成题目的过程中问题的出现(1)怎么多组输入3.代码展示4.问题的解决(1)关于多组输入此博客为学习记录,还请看官点点赞为我加油呀~~题目一1.题目展示
梦想成为大牛呀
·
2025-03-10 22:09
c语言
学习
开发语言
自己的网页加一个搜索框,调用deepseek的API
一切源于一个学习
黑马程序员
视频的突发奇想在网页悬浮一个搜索按钮,点击可以实现调用deepseek文本模型回答你的问题前端实现前端使用vue实现的首先是整体页面:AIWidget.vue搜索{{item}
Lkkkkkkkcy
·
2025-03-07 06:34
java
vue
黑马程序员
瑞吉外卖Day6小程序空白无显示
做项目时出现问题之druid连接池报错报错discardlongtimenonereceivedconnection.,jdbcUrl:jdbc:mysql://localhost:3306/sky_take_out?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=c
Lkkkkkkkcy
·
2025-03-06 15:47
Java学习
java
微信小程序
前端
基于Vue&Axios制作音乐播放器(bilibili
黑马程序员
Vue入门学习记录)
音乐播放器效果展示音乐播放器(密码:He371226)(域名出了点问题,临时使用)学习链接:
黑马程序员
vue前端基
xxxrsongseven
·
2025-03-05 17:49
前端
javascript
vue
vue.js
前端
css
arm centos7 安装mysql5.7
ARM架构下安装MySQL-
学习日记
ARM64架构下安装mysql5.7.22的全过程_Mysql_脚本之家错误信息:InstallingMySQLsystemtables....
qq_42331499
·
2025-03-05 07:23
mysql
linux
数据库
指针高级03【void类型的指针】-
黑马程序员
C语言
没有类型的指针特点:无法获取数据,无法计算,但是可以接收任意地址。不同类型的指针之间,是不能相互赋值的void类型指针打破上面的观点优点:void没有任何类型,好处是可以接收任意类型指针记录的内存地址缺点:void类型的指针,无法获取变量里面的数据,也不能进行加、减的运算#include"stdio.h"voidswap(void*a,void*b,intlen);intmain(){inta=1
·
2025-03-05 03:27
c
大模型工程师
学习日记
(八):基于 LangChain 构建向量存储和查询:Chroma
Vectorstores(向量存储)存储和搜索非结构化数据的最常见方法之一是将其嵌入并存储生成的嵌入向量,然后在查询时将非结构化查询嵌入并检索与嵌入查询“最相似”的嵌入向量。向量存储会处理存储嵌入数据并为您执行向量搜索。可以通过以下方式将向量存储转换为检索器接口:Retrievers(检索器)是一个接口,根据非结构化查询返回文档。它比向量存储更通用。检索器不需要能够存储文档,只需要能够返回(或检索
MMMMMMMay Love Code
·
2025-03-04 12:45
学习
langchain
算法
向量数据库
RAG
语言模型
人工智能
代码随想录刷题
学习日记
仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录56.合并区间给出一个区间的集合,合并所有重叠的区间。关键思路:还是寻找重叠的区间,知识操作不同,1.对整个数组进行排序,按左边界排序2.由左到右遍历排序后的数组(因为按左边界排序),定义start为上一个合并区间的左边界,end为上一个合并区间的右边界:2.1如果遍历到非重叠区间将上一个区间加入到结果集中,更新
努力向前ing
·
2025-03-03 02:22
代码随想录学习日记
学习
算法
贪心算法
leetcode
java
代码随想录刷题
学习日记
仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录40.组合总和II给定一个数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。提供参数:整数数组candicates,目标数tar
努力向前ing
·
2025-03-03 02:51
代码随想录学习日记
算法
数据结构
学习
回溯
代码随想录刷题
学习日记
仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录93.复原IP地址给定一个只包含数字的字符串,复原它并返回所有可能的IP地址格式。有效的IP地址正好由四个整数(每个整数位于0到255之间组成,且不能含有前导0),整数之间用'.'分隔。提供参数:只包含数字的字符串s。关键思路:是一个“分割”的思想,同时需要对ip地址格式的判断。由于横向遍历是从少到多开始的,少的
努力向前ing
·
2025-03-03 02:51
代码随想录学习日记
算法
数据结构
学习
回溯
代码随想录刷题
学习日记
仅为个人记录复盘学习历程,解题思路来自代码随想录代码随想录刷题笔记总结网址:代码随想录15.三数之和(双指针法)给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0,找出所有满足条件且不重复的三元组。提供参数:整数数组nums主要操作:对数组排序一个for循环遍历nums,控制变量a(nums[i])判断是否整个数组不满足条件对a去重:当前a与上一个a相
努力向前ing
·
2025-03-03 02:51
代码随想录学习日记
算法
哈希算法
学习
Java笔记 -
黑马程序员
_06(Stream,字节流,字符流,对象流(序列化流),属性集(Properties))
StreamStream流的三类方法:获取Stream流创建一条流水线,并把数据放到流水线上准备进行操作中间方法流水线上的操作,一次操作完毕之后,还可以继续进行其他操作终结方法是流水线上的最后一个操作,一个Stream流只能有一次终结方法创建Stream流的方式:方式1:根据集合获取流Collection根接口中提供了stream()方法可以获取流。单列集合:直接调用stream0方法即可双列集合
谦逊蓄意,只为飞的更高
·
2025-02-28 17:16
Java
java
开发语言
Python
学习日记
:列表的一些功能实现
myList=["Kaye","Pii","Pk","Pk","Pk"]#查找某元素在列表内的下标索引利用列表.index()#找到会返回索引值,找不到会返回ValueErrorindex=myList.index("Pk")print(index)#修改特定位置下标索引值myList[0]="kk"print(myList)#插入元素#列表.insert(索引,插入元素)myList.inser
Kaye921
·
2025-02-28 01:38
python
学习
开发语言
指针高级03【野指针与悬空指针】-
黑马程序员
C语言
指向不明的指针野指针:指针指向的空间未分配悬空指针:指针指向的空间已分配,但是被释放了#include"stdio.h"int*method();intmain(){//野指针:指针指向的空间未分配inta=10;int*p1=&a;printf("%p\n",p1);printf("%d\n",*p1);//p2野指针int*p2=p1+10;printf("%p\n",p2);printf("
·
2025-02-27 17:41
c
指针高级02【指针运算有意义的操作】-
黑马程序员
C语言
指针的运算有意义的操作:指针跟整数进行加、减操作(每次移动N个步长)指针跟指针进行减操作(间隔步长)无异议的操作:指针跟整数进行乘除操作(地址乘以地址无意义)原因:此时指针指向不明指针跟指针进行加、乘、除操作#include"stdio.h"intmain(){intarr[]={1,2,3,4,5,6,7,8,9,10};int*p1=&arr[0];int*p2=&arr[5];printf(
·
2025-02-27 13:54
c
前端如何实现后端运行进度_前端到后端的整体流程介绍
作为一个整理
学习日记
,不对的地方,可以指出,相互学习。从我们智能手机说起,手机已经成为我们不可或缺的一部分。那么手机在软件行业里处在什么样的位置呢。
weixin_39707536
·
2025-02-25 19:18
前端如何实现后端运行进度
Mysql调优---Mysql锁机制(油炸圣女果的
学习日记
第七期)
本期来介绍一下Mysql中的锁机制。首先,分享一个今天抖音刷到的一个视频,很有意思且对上一期和这期的知识理解很有帮助,非常形象的体现了事务隔离级别在工作中出现的问题案例:6.41复制打开抖音,看看【孟小哥捉虫vlog的作品】想不通为啥有bug,骨干:你投下代码!#程序员...https://v.douyin.com/i5dpJhs6/
[email protected]
/25aNW:/锁机制详解锁是计算机协调多个进程
油炸圣女果
·
2025-02-25 19:46
mysql
学习
数据库
SpringBoot速成概括
视频:
黑马程序员
SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili图示:
噗运特
·
2025-02-25 11:16
spring
boot
java
spring
CTF 代码
学习日记
PHP
基础2字符串连接可以使用点号(.)3.$_:在PHP中,以$_开头的变量(如$_GET、$_POST、$_COOKIE等)是超级全局变量。超级全局变量的特点是它们在PHP脚本的任何地方(包括函数内部、类内部等)都可以访问,不需要使用global关键字来声明其可访问性。这些变量主要用于获取来自不同数据源的用户输入或者服务器环境相关信息。例如:$_SERVER用途:包含了服务器和执行环境相关的信息。例
ianozo
·
2025-02-22 18:25
学习
php
java
设计模式--类图、实例代码
前言本文是参照尚硅谷、
黑马程序员
以及cyc2018记录的个人学习笔记,仅供记录,不确保严谨性,部分实例代码是根据自己的理解抽象了代码,若不理解,更多具象实例可以参考其他网上实例资料,欢迎讨论学习。
HarryTusta
·
2025-02-21 06:21
java
设计模式
瑞_23种设计模式_中介者模式
本文中的部分图和概念等资料,来源于博主学习设计模式的相关网站《菜鸟教程|设计模式》和《
黑马程序员
Java设计模式详解》,特此注明
瑞486
·
2025-02-19 19:41
23种设计模式
设计模式
中介者模式
java
Mybatis-Plus学习笔记(自用)
Mybatis-Plus学习笔记(自用)本文根据
黑马程序员
的课程资料与百度搜索的资料共同整理所得,仅用于学习使用,如有侵权,请联系删除文章目录Mybatis-Plus学习笔记(自用)1.纯Mybatis
Zzzchc
·
2025-02-19 10:22
学习笔记(自用)
mybatis
学习
java
2025-1.15 实习
学习日记
monkey稳定性测试
一、前期准备1、电脑配备ADB环境2、手机开启开发者模式3、电脑和手机连接好,可以使用ADB调试二、monkey执行的前提条件手机设置常亮,锁屏关闭电量在90以上其他设置要设置好,wifi,数据网络,进程该关闭就关闭app登录,数据创造,必要的情况,打开app一个页面执行命令之后少等一会,如果在可见之内发现退出账号,可以尝试换一个seed值操作三、基本命令格式adbshellmonkey各种参数次
2025年一定要上岸
·
2025-02-15 19:55
学习
MongoDB快速入门(MongoDB简介、MongoDB的应用场景、MongoDB中的基本概念、MongoDB的数据类型、MongoDB的安装与部署、MongoDB的常用命令、MongoDB的索引)
MongoDB的安装与部署5.1Windows环境5.2Linux环境6.开启MongoDB的安全认证6.1Windows环境6.2Linux环境7.MongoDB的常用命令8.MongoDB的索引视频教程:
黑马程序员
聂 可 以
·
2025-02-15 08:32
MongoDB
黑马头条
mongodb
数据库
【HarmonyOS 鸿蒙
黑马程序员
学习笔记 90.1】
)构造函数(初始化函数)传参对象方法静态属性静态方法继承extends关键字super检测实例instanceof修饰符(类限制符)类class大纲因为class很关键,自己不再组建语言和学习大纲引用
黑马程序员
原教学大纲
adminwxs
·
2025-02-13 07:33
HarmonyOS
学习
黑马
记录
学习
笔记
harmonyos
typescript
《
黑马程序员
2023年新版Linux零基础快速入门到精通》学习笔记总目录:开启你的Linux之旅...
《
黑马程序员
2023年新版Linux零基础快速入门到精通》学习笔记总目录:开启你的Linux之旅
黑马程序员
2023年新版Linux零基础快速入门到精通学习笔记总目录项目地址:https://gitcode.com
魏杨晴Vivian
·
2025-02-12 20:11
黑马程序员
Linux 从入门到精通配套笔记:助你快速掌握 Linux 核心技能
黑马程序员
Linux从入门到精通配套笔记:助你快速掌握Linux核心技能【下载地址】
黑马程序员
Linux从入门到精通配套笔记分享
黑马程序员
Linux从入门到精通配套笔记项目地址:https://gitcode.com
贡旎彩Kurt
·
2025-02-12 20:11
黑马程序员
——浅谈java中的异常机制
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流!----------------------异常是Java中的重要机制,也使用了面向对象的思想,进行了封装。我们通常使用的异常类。而异常类中所描述的就是程序中可能出现的错误或者问题。就像人生病一样,不一定经常有,但总有生病的时候,而且生病的原因不同,性质不同,对其的治疗自然也不一样。
IT__JM
·
2025-02-10 12:21
java基础
Java八股文详细文档.1(基于黑马、ChatGPT、DeepSeek)
Java面试八股文详细文档.1(基于黑马、ChatGPT、DeepSeek)大三了,真的要去找实习了来提升自己了,学历没有优势只能在项目和八股文上努力一下,通过B站
黑马程序员
的八股文教学,自己也二刷了,
小钊(求职中)
·
2025-02-10 03:24
java
开发语言
数据结构
mysql
jvm
数据库
后端
python培训班-Python培训机构_高品质Python线下开发培训班推荐-
黑马程序员
Python编程基础基础班1课时:15天技术点:97项测验:2次学习方式:线下面授学习目标1.掌握Python开发环境基本配置|2.掌握运算符、表达式、流程控制语句、数组等的使用|3.掌握字符串的基本操作|4.初步建立面向对象的编程思维|5.熟悉异常捕获的基本流程及使用方式|6.掌握类和对象的基本使用方式|7.掌握学生管理系统编写主讲内容1Python基础语法基础语法是编程语言的第一课,打好基础才
编程大乐趣
·
2025-02-09 12:38
spark-pyspark-standalone部署模式全过程
声明:1.参考视频b站
黑马程序员
视频,极力推荐这个视频,侵权删除https://www.bilibili.com/video/BV1Jq4y1z7VP/?
哈哈哈哈q
·
2025-02-08 20:05
spark
大数据
分布式
JavaScript-
黑马程序员
-前端零基础
目录1.初识JavaScript1.1浏览器执行js1.2js的组成1.3js三种书写方式1.4JavaScript输入输出语句2.变量2.1变量是一个装东西的容器2.2变量是使用2.3更新变量2.4声明多个变量1.初识JavaScript是一种高级编程语言1.1浏览器执行js浏览器分成两部分:渲染引擎和js引擎渲染引擎:用来解析HTML和CSS,俗称内核js引擎:也称为js解释器。用来读取网页中
羊羊的代码笔记本
·
2025-02-03 05:39
javascript
前端
html
【Spring Cloud 10】阿里巴巴分布式服务架构流量控件Sentinel,B站
黑马程序员
学习笔记
貌似还是他更强一些,不过没关系,加油!所以,今天开启为期一个月的博客疯狂之旅。一、百度百科Sentinel是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel具有以下特性:丰富的应用场景:Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系
2501_90252715
·
2025-02-02 19:29
spring
cloud
架构
sentinel
菜鸟之路Day09一一集合进阶(二)
1.泛型1.1泛型概述1.2泛型类1.3泛型方法1.4泛型接口1.5泛型通配符2.Set系列集合2.1遍历方式2.2HashSet2.3LinkedHashSet2.4TreeSet0.概述内容学习至
黑马程序员
Blue.ztl
·
2025-01-28 17:18
菜鸟之路
开发语言
java
Python
学习日记
------def __init__( ):函数
在Python中,__init__方法是类的构造函数,用于在创建对象时进行初始化。它可以接受参数也可以不接受参数,具体的选择取决于你是否希望在创建对象时传入初始值。无参数的__init__方法无参数的__init__方法通常在类定义时使用默认值来初始化属性,而不需要在创建对象时传入任何参数。classStudent:def__init__(self):self.name="Unknown"#默认值
Canliays
·
2025-01-28 10:00
学习
python
黑马程序员
spring整合Mybatis&Junit&Druid
准备工作1.Maven导入依赖org.springframeworkspring-context5.2.10.RELEASEorg.mybatismybatis3.5.6mysqlmysql-connector-java5.1.47org.mybatis
闲易生事
·
2025-01-27 03:32
mybatis
spring
java
上一页
1
2
3
4
5
6
7
8
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他