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
前后端学习日记
vue+elementui+mysql实现个人博客系统
目录vue+elementui+mysql实现个人博客系统设计数据库结构:创建后端API:创建前端应用:连接
前后端
:实现用户认证:实现博客功能:实现评论功能:部署项目:总结vue+elementui+mysql
诗句藏于尽头
·
2024-02-04 14:43
vue
vue.js
elementui
mysql
OpenSSL:configure: error: OpenSSL library not found解决方案
从事机器学习以及相关的
前后端
开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。
爱编程的喵喵
·
2024-02-04 13:53
linux解决方案
linux
openssl
configure
not
found
解决方案
C语言
学习日记
——指针学习(一)
目录学习目标:学习内容:10.1地址和指针的概念编辑编辑10.3指针算法10.4指针函数学习练习:学习产出:学习目标:理解指针的定义和初步应用。学习内容:10.1地址和指针的概念指针是用来装地址的数据类型。其作用是通过被调函数修改主调函数10.2指计的定义指针的使用:10.3指针算法1指针加一=原有地址+sizeof基类型;2&与*可以相互抵消;3不同的基类型指针相减会编译报错4指针之间可以进行减
LanUU123
·
2024-02-04 11:12
学习日记
c语言
学习
c语言
C语言
学习日记
——标识符和预处理命令
目录学习目标:学习内容:2.1局部变量和全局变量2.2标识符的可见性2.3static2.4预处理命令学习产出:学习目标:标识符和预处理命令学习内容:2.1局部变量和全局变量2.2标识符的可见性1标识符必须先定义再使用。2同一作用域不得出现同名标识符。3在没有包含关系的不同作用域中定义的同名标识符互补影响。4在两个或者多个有包含关系的作用域声明的的同名标识符,外层标识符在内层不可见。2.3stat
LanUU123
·
2024-02-04 11:42
c语言
学习日记
学习
c语言
C语言
学习日记
——指针学习(二)
目录学习目标:学习内容:2.1快速排序算法2.2const2.3void*学习练习:学习产出:学习目标:今天主要学习字符串和指针的内容。学习内容:指针的进一步使用,迭代的学习2.1快速排序算法通过一轮的排序将序列分割成独立的两部分,其中前一部分序列的关键字均比后一部分关键字小。继续对长度较短的序列进行同样的分割,最后到达整体有序。在排序过程中,由于已经分开的两部分的元素不需要进行比较,故减少了比较
LanUU123
·
2024-02-04 11:42
学习日记
c语言
学习
c语言
SpringSecurity如何理解学习常用拦截器——举例进行学习——从0到1教会方法自行学习~
本篇内容:如何理解学习SpringSecurity的常用拦截器——举例进行学习文章专栏:
前后端
分离项目(Vue+SpringBoot)最近更新:2022年2月5日Nginx入门到实战案例配置反向代理、负载均衡
Alascanfu
·
2024-02-04 10:50
前后端分离项目(Vue
+
SpringBoot)
java
开发语言
springboot
spring
security
后端
基于SpringBoot+Redis的
前后端
分离外卖项目-苍穹外卖(十六)
商家端订单管理模块1.订单搜索1.1需求分析和设计1.2代码实现1.2.1admin/OrderController1.2.2OrderService1.2.3OrderServiceImpl2.各个状态的订单数量统计2.1需求分析和设计2.2代码实现2.2.1admin/OrderController2.2.2OrderService2.2.3OrderServiceImpl2.2.4Order
失重外太空.
·
2024-02-04 10:45
苍穹外卖项目
spring
boot
redis
后端
java
spring
Web前端开发
学习日记
(1)- 2022.11.03
我写这篇日记的初衷,是希望自己可以坚持学下去。本科的时候学的是交互媒体专业,我总觉得什么都学了,但是什么也不会。我们的课程涉猎很广,学点编程,也学点建模,学点设计,也学点媒体理论课,但是都学得不深。而且,在本科的时候自己既茫然又贪玩,总是结课之后就把课程内容丢到一边,写完项目之后再也不会去复习学过的东西。原来总觉得自己还小,还有很多时间。现在上了研究生,找工作的压力逐渐大了起来。看着身边优秀的同龄
LycheeXixi_
·
2024-02-04 09:55
Web前端开发学习日记
学习
前端学习——Ajax的使用
主要是用于
前后端
数据交互json可以是对象,数组,字符串,标题//json格式——特殊格式的字符串,varstr1='{"name":"北斗"}'//分为两种类型:json对象,json数组,可以是数值
Indra_ran
·
2024-02-04 09:24
前端学习
前端
ajax
前端安全防范措施,xss攻击和csrf攻击
eg:input框中写入alert(1),如果
前后端
没有防御,被存入数据库,每个打开该页面的用户都会被攻击。如何防御?
_咻咻咻咻咻
·
2024-02-04 08:23
DevOps落地笔记-12|API管理:微服务时代的必备工具
最近几年,软件架构也在不断升级,逐渐采用
前后端
分离、微服务的体系结构。
前后端
分离使得前端和后端充分解耦,在高并发情况下,后端可以按需扩展,前端和后端通过API接口定义的契约进行通信。
机智阳
·
2024-02-04 07:04
java
devops
笔记
微服务
java
运维
视频上传那些事 -- 基础篇
axios进行
前后端
通信时,文件数据应该如何传输?node拿到数据后,应该如何处理?如果是大文件,如何提高文件上传的效率?如果是大文件,前端下载时,如何提高下载的效率?
小九九的爸爸
·
2024-02-04 06:32
音视频
视频上传-分片上传那点事
在上一篇文章中,我们讲解了从视频上传到保存在服务端的整个过程,在这个过程中,我们又细分了前端上传视频的几种方式,前端处理视频的几种方式,在
前后端
通信过程中需要注意的哪些点等等。
小九九的爸爸
·
2024-02-04 06:53
音视频
前端
javascript
【开源】WordPress一键崩溃宕机插件(整活娱乐)
介绍长期以来,人们都在追寻更快的WordPress博客的访问速度,WordPress是一个
前后端
一体的服务端渲染(SSR)的框架,使用PHP语言。
织音z
·
2024-02-04 06:12
网站源码
开源
娱乐
SpringBoot项目
前后端
分离 ajax附件上传下载
目录前台界面上传下载前台代码后台项目结构后台主要代码下载调整对下载不存在文件的处理效果代码前台界面上传下载前台代码附件上传、下载附件上传、下载文件:functionfn_download(){varfile_name=$("#file_name").val();if(file_name==""){alert("请输入下载文件名称!");$("#file_name").focus();return;
天天代码码天天
·
2024-02-04 06:34
web
java
spring
boot
ajax
后端
前后端
数据校验
前端校验内容前端开发中的必要校验,可以保证用户输入的数据的准确性、合法性和安全性。同时,这些校验也有助于提供良好的用户体验和防止不必要的错误提交到后端。1、必填字段校验:对于必填的字段,需确保用户输入了有效的数据。可以检查字段是否为空或仅包含空格等无效字符。2、数据格式校验:根据字段的预期格式,验证用户输入的数据是否符合要求。例如,对于邮箱字段,可以使用正则表达式验证邮箱格式的正确性。3、数字范围
A尘埃
·
2024-02-04 06:22
数据校验
嵌入式
学习日记
(九)
2017-07-17今天是嵌入式学习的第九天。今天,主要学的是编程的环境,进行熟悉。分为以下四个点编辑器:vi,vim编辑器。编译器:GCC。调试器:GDB。工程化:Makefile。vi/vim在之前的学习过程中,已经作为专题讲解了。暂不讨论。GCC是由GNU开发的编程语言编译器GNU:GNUisNotUnix编译的过程1.源文件编辑器直接编写代码的文件,比如filename.c2.预处理文件g
Fun_Peanut
·
2024-02-04 04:51
编程语言
编译器
unix
嵌入式
学习日记
(十一)
2017-07-19今天是学习嵌入式的第十一天。今天主要是学习了以下几点1.宏定义2.数组预处理包含头文件#include一般宏定义用法:#define带参数的用法:#define(参数列表)条件判断#ifdef#ifndef#if#endif#else偶然发现一个C语言中的小问题test1#includeintmain(){inti,j;inta[4][4];for(i=0;i<4;i++){
Fun_Peanut
·
2024-02-04 04:51
c语言
嵌入式
学习日记
(十二)
2017-07-20今天是嵌入式学习的第十二天今天在受到老师的指引下,写一个简单的练手小程序。关键字:SocketInternet,UDP协议,Internet版本IPv4话不多说,首先来看头文件(server和client都一样):#include//标准IO#include//一些系统调用API#include//一些类型的定义#include//socket的头文件#include
Fun_Peanut
·
2024-02-04 04:51
socket
嵌入式
互联网
嵌入式
学习日记
17
空链表:注意:函数不能返回局部变量的地址free:一个malloc配合一个free删除:voidpopFront(structNode*head)位运算:01计算机1Byte--存储单位1Byte=8bits&|~^与运算:置0或运算:置1非运算异或运算:加密解密交换数据预处理:gcc编译过程宏定义:#define宏名宏值
aminos_ydglmn
·
2024-02-04 04:50
学习
嵌入式
学习日记
2014.3.19我承认这将是一个很无聊的人生的开始。一个人奋斗实在太过于孤独,总是想分享着些什么,但总不能在空间里无限制的刷屏,写在留言板里的话感觉自己又像一个怪人一样。只好开了一个博客。我的生涯日记--------你好,未来的自己,今天我在这里写下这一切。刚刚找到了arm体系结构与编程的一个扫描版的Pdf书籍,又是一个无聊的奋斗的开端,曾经我试着逃避这种寂寞,但是世俗的态度让我接受不了这一切,
weixin_30655569
·
2024-02-04 04:50
嵌入式
嵌入式
学习日记
11
昨日总结:函数的语法:a.实参输入形参及返回值给返回结果本质是赋值运算b.返回值一般与返回结果类型一致c.不一致时以定义中返回值的类型为准d.不写默认识别为inte.不需要返回值时使用void类型f.形参与实参个数相同、类型匹配、匹配顺序、从右向左开始给值五个区:a.栈的调用---函数调用时的保存区b.堆区c.全局区(静态区)d.字符串常量区e.代码区函数递归递归---自己调用自己本质上是一种循环
aminos_ydglmn
·
2024-02-04 04:20
java
算法
数据结构
嵌入式
学习日记
15
总结:1.指针概念指针既是地址指针又是数据类型2.指针定义基类型*变量名;3.核心用途被调修改主调4.指针运算&++1++--关系运算p-q-------------------------------5.指针一维整型数组一维字符型数组6.指针+二维数组7.指针+函数8.指针+指针结构体、共用体、枚举:数据类型:基本数据类型整型浮点型字符型构造类型数组类型指针类型空类型例子:实现小项目---统计全
aminos_ydglmn
·
2024-02-04 04:20
学习
嵌入式
学习日记
16
共用体union共用体名{成员列表;//各个变量};//表示定义一个共用体类型注意:1.共用体初始化---只能给一个值,默认是给到第一个成员变量的2.共用体成员变量辅助共用体用的数据最终存储的---应该是最后一次给到的值。但是只能影响到自己数据类型对应的空间中的数据3.可以判断大小端4.实际用途a.节省空间b.进行数据转换192.168.1.169//ip本质是个32位的数值5.共用体的大小--是
aminos_ydglmn
·
2024-02-04 04:20
学习
嵌入式
学习日记
9
字符型数组总结:1.字符数组2.字符串最终计算机中,是按照字符数组的形式(数组的特点)存储字符串最终一定是以'\0'作为结束标志3.定义一个字符数组chars[10]={};chars[10]="hello";4.练习getsputs//统计字符串长度--strlen字符串拷贝--strcpy字符串拼接--strcat5.输入字符串gets();scanf();//不能输入带空格(被识别为空白符)
aminos_ydglmn
·
2024-02-04 04:50
算法
数据结构
学习
嵌入式
学习日记
6
循环结构:循环---不断重复的1.goto语句2.while语句3.do-while语句4.for语句1.goto语句格式goto语句的标号;//标签-------------------------------------------//构成循环的要素初始条件使循环趋于结束的语句(操作)循环体//重复被执行到的代码结束条件实现1~100的累加求和//数列求和--循环的方式1+2+3+...+10
aminos_ydglmn
·
2024-02-04 04:49
学习
算法
嵌入式
学习日记
7
数组零、题外话:linux中代码的快捷对齐方式单行对齐:在命令模式下按两下等号多行对齐:shift+v选中按一下等号起始行=结束行全局对齐:gg=shift+g一、数组概念:一组相同类型的数据的集合要怎么一次性定义多个变量?//本质上是相同类型变量的集合一维数组二维数组整型字符型--------------------------------------语法://定义数组类型说明符数组名[常量表达
aminos_ydglmn
·
2024-02-04 04:49
学习
算法
嵌入式
学习日记
8
题外话:选择冒泡谁好?算法稳定性和效率时间--时间复杂度(CPU执行代码(指令)的数量=消耗的时间)O(n)//大O计法O(n)=n^2空间一、插入排序:思想:(在有序的序列)中,找一个合适的位置,插入举例:军训5246318701234567新数组先将5放到新数组第一位501234567再将2放进来查看是否比前面的数小是的话前一位往后挪501234567前面没数放2进去2501234567将4放
aminos_ydglmn
·
2024-02-04 04:49
算法
学习
嵌入式
学习日记
3
//编程原则:高内聚低耦合算数运算符和算术表达式运算符表达式:算术运算+-*/%取余++自加--自减运算符表达式由运算符和运算数构成的字符序列1+2//所有的表达式都是有结果的(值)//表达式一定是有数据类型的隐式类型转换:double假intrand(void);srand(intseed);time(NULL);++//自加--//自减参与另一种运算才可讨论“先加后用”或“先用后加”i++//
aminos_ydglmn
·
2024-02-04 04:19
学习
嵌入式
学习日记
5
今天主要内容:流程控制一、对流程的理解流程分为什么?顺序结构分支结构循环结构任何一个程序都可以是这三种结构的组合//也许你的人生也是这样二、判断分支结构(选择)选择---判断能做判断?---通过运算---给构造出判断的条件构造判断的条件:关系运算(大小关系)>>=2//表达式//结果//数据类型关系运算的结果:真1假0逻辑结果注意:C语言不存在布尔类型,关系运算的结果用整型类型保存1>=优先于==
aminos_ydglmn
·
2024-02-04 04:19
算法
学习
嵌入式
学习日记
DAY1
前言:我于2023.8.1开始正式入门嵌入式,主要靠上大RM战队前辈的指引,他们发的一些资料让我对单片机、烧录器等硬件以及嵌入式要用到的CubeMX、VsCode、Keil等软件有了基本了解,第一天时间主要花费在了三个软件的下载、安装及配置上,布置的作业到没有花多少时间(因为不是很难,照着视频一步一步做就行)。前辈的资料很用心,每个软件都附上了“食用方法”,但帖子大多不是2023年编写的,下载新版
你SHU第一深情
·
2024-02-04 04:47
学习
嵌入式
学习日记
(三)
嵌入式学习记录2018.11.8理论学习阶段计算机科学导论(原书第二版)第15章数据压缩学到的新知识1数据压缩分类:无损压缩和有损压缩2无损压缩的压缩方式有三种:游程长度编码、赫夫曼编码和LZ编码3介绍的有损压缩的三种方法:JPEG、MPEG和MP34JPEG是用来压缩图形和图像的方法。过程包括分块、离散余弦变换、量化以及无损压缩5MPEG用于处理视频,包括时间压缩和空间压缩6MPEG第三代音频压
huyz_2008
·
2024-02-04 04:46
嵌入式学习
嵌入式
学习日记
(四)
嵌入式学习记录2018.11.9理论学习阶段计算机科学导论(原书第二版)第16章安全学到的新知识1安全的三个目标:机密性、完整性和可用性2安全攻击分为针对机密性的威胁、对完整性的威胁和对可用性的威胁3为了达到安全目标和防止安全攻击,人们定义了安全服务的标准。下边是五个常见的服务类型4实现技术,流行的两种:密码术以及特殊的隐写术5密码术今被定义成涉及三个不同的机制:对称秘钥密码、非对称秘钥密码和散列
huyz_2008
·
2024-02-04 04:46
嵌入式学习
嵌入式
学习日记
18
课程任务:IO编程多任务编程(进程、线程)网络编程数据库编程数据结构Linux软件编程:1.Linux:PC三大操作系统之一Linux是操作系统的内核真正的操作系统:Ubuntu主要功能:管理CPU管理内存管理硬件设备管理文件系统任务调度2.Shell:1.保护Linux内核(用户和Linux内核不直接操作)2.命令解释器(用户操作->Shell->内核->硬件设备->用户接收)3.Shell命令
aminos_ydglmn
·
2024-02-04 04:46
linux
运维
服务器
【新版API】实现第三方应用钉钉扫码登录
首先,需要明白整个授权登录的流程,如下图所示:下面的示例可用于
前后端
分离项目应用场景,后端以springboot,前端以html。前端实现内嵌二维码扫码登录,不走页面重定向。
KLAY_
·
2024-02-04 03:57
springboot
钉钉
扫码登录
第三方
基于JAVA+SpringBoot+Vue的
前后端
分离的医院管理系统
✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文末获取项目下载方式一、项目背景介绍:随着计算机科学的迅猛发展和互联网技术的不断推进,人们的生活方式发生了巨大的变化,同时也推动了整个软件产业的发展。把传统产业服务和计算机科学结合起来,已成为一种大趋势。在传统
智能编程设计工作室
·
2024-02-04 02:26
优质毕业设计
java
spring
boot
vue.js
医院管理系统
前后端分离
基于JAVA+SpringBoot+Vue+uni-app的
前后端
分离的微信小程序校友交流平台
✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文末获取项目下载方式一、项目背景介绍:开发背景介绍:随着社交媒体的普及和移动互联网的快速发展,校友之间的交流和联系变得越来越便捷。然而,传统的社交平台往往缺乏专注于校友之间交流的特点,无法提供更加个性化和专业化
智能编程设计工作室
·
2024-02-04 02:26
优质毕业设计
java
spring
boot
vue.js
微信小程序
校友交流
基于SpringBoot+Vue的
前后端
分离的新闻发布平台
✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文末获取项目下载方式一、项目背景介绍:新闻发布平台是一种在线媒体平台,它允许用户创建、编辑和发布新闻文章。这种平台的主要目的是提供最新、最准确的新闻和信息,以便用户可以及时了解全球各地的新闻动态。新闻发布平台可
智能编程设计工作室
·
2024-02-04 02:56
优质毕业设计
spring
boot
vue.js
后端
新闻发布
前后端分离
java
基于JAVA+SpringBoot+Vue的
前后端
分离的仓库管理系统(进销存)系统
✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文末获取项目下载方式一、项目背景介绍:随着全球经济的不断发展和市场竞争的加剧,企业对于仓储和物流管理的要求日益提高。传统的仓储管理方式往往存在一些问题,如库存管理不精确、货物追踪困难、物流流程繁琐等,严重影响了
智能编程设计工作室
·
2024-02-04 02:54
优质毕业设计
java
spring
boot
vue.js
仓库管理系统
15:Servlet 3.0文件上传与下载-Java Web
本文将详细解析如何利用Servlet3.0特性来轻松处理文件上传下载操作,并提供
前后端
代码实例,同时对比不同方法之间的差异及实际应用场景。
Yeats_Liao
·
2024-02-04 01:59
servlet
java
前端
SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)
通过这种交互方式,实现了SAPFiori应用的
前后端
分离。OData(OpenDataProtocol)协议是一个开放的工业标准,用于RESTFulAPI的设计和使用。目前主流
JerryWang_汪子熙
·
2024-02-04 01:54
vite, vue3, vue-router, vuex, ES6
学习日记
学习使用vite+vue3的所遇问题总结(2024年2月1日)组件中使用标签忘记加setup这会导致Navbar没有暴露出来,导致使用不了,出现以下报错这是因为,如果不用setup,就得使用exportdefault……setup是后者的语法糖在Vue.js中,你可以通过route对象来接收从router-link传递过来的参数。具体来说,你可以使用route对象的params属性来获取路由参数。
williamdsy
·
2024-02-04 00:54
vue
vite
vue-router
vuex
ES6
gulp和webpack究竟有什么区别?
在现在的前端开发中,
前后端
分离、模块化开发、版本控制、文件合并与压缩、mock数据等等一些原本后端的思想开始逐渐渗透到“大前端”的开发中。
NewChapter °
·
2024-02-04 00:06
SpringBoot | 第十九章:web应用开发之WebSocket
实现一个在线聊天室类似的功能或者后端推送消息到前端,在没有WebSocket时,读大学那伙还有接触过DWR(DirectWebRemoting),也使用过轮询的方式,当Servlet3.0出来后,也有使用其异步连接机制进行
前后端
通信的
oKong
·
2024-02-03 23:55
SpringBoot+Vue
前后端
分离,宝塔面板部署心得
部署的项目是码神之路老师的blog项目,这是个优秀的
前后端
分离,贴合实际工作开发的,我学习下来,有很大的收获,可以都去学习学习。一、项目修改因为开发环境与生产环境不相同,所以需要修改一些相关代码。
哪de清如许
·
2024-02-03 22:42
vue.js
spring
boot
前端
只用一台服务器部署上线(宝塔面板)
前后端
+数据库
所需材料工具:安装宝塔面板服务器至少一台、域名一个前端:生成dist文件(前端运行build命令)后端:生成jar包(maven运行package命令)准备:打开宝塔面板,点击进入软件商店安装:nginx、mysql进入终端输入命令自动安装javayuminstall-yjava-1.8.0-openjdk*开始前端点击添加前端站点输入自己的域名,不输入端口则默认80端口添加完成后会自动生成网站目
Goblin的ac路
·
2024-02-03 22:41
Linux
服务器
数据库
运维
spring
boot
通过宝塔面板部署
前后端
分离Vue项目
宝塔面板部署
前后端
分离Vue项目一、首先进入宝塔页面在云服务器控制台,远程连接实例,在shell命令行中输入/etc/init.d/btdefault获取宝塔面板网站,输入账号密码,进入宝塔控制台。
iiLeon
·
2024-02-03 22:41
vue
vue.js
node.js
后端
webstorm
拒绝躺平,来自底层前端的2022总结
第一家公司没有明确的分开
前后端
,项目也是没有前
Dashesand
·
2024-02-03 22:10
留学
ruoyi(若依)(el-menu也可参考)菜单栏过长显示省略号才显示气泡
一、背景若依
前后端
分离的版本,新版本中优化了菜单名称过长悬停显示标题,但是是悬浮所有长度大于5的标题。
笨小孩丶
·
2024-02-03 19:38
---VUE
vue.js
elementui
记录Postman接口测试,配置token为全局变量,配置测试环境
前后端
传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的
咖啡加剁椒。
·
2024-02-03 14:42
软件测试
postman
测试工具
功能测试
软件测试
自动化测试
程序人生
职场和发展
上一页
6
7
8
9
10
11
12
13
下一页
按字母分类:
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
其他