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
linux驱动基础学习
[算法
基础学习
] 单调栈和单调队列
注意!单调栈和单调队列与for一起遍历数组时,时间复杂度是o(n),根据摊还分析。单调栈应用举例:求某个点左侧或右侧第一个比它大的点的位置核心思想:入栈时与栈顶进行比较,或栈顶元素更差,就删除它。用数组实现的单调栈,可以在里面进行二分。单调队列一般不会从队尾进元素。经常把下标作为单调队列里的元素,而不是元素值。例题与代码#include#include#definelllonglongusingn
Waldeinsamkeit41
·
2024-01-23 14:59
蓝桥杯
学习
Python
基础学习
之路(九) ------ 正则表达式
1.提取数据在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式!正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是用来匹配字符串非常强大的工具,在其他编程语言中同样有正则
千喜Ya
·
2024-01-23 13:24
鸿蒙OpenHarmony NAPI技术-
基础学习
NAPI(NativeAPI)是OpenHarmony系统中的一套原生模块扩展开发框架,它基于Node.jsN-API规范开发,为开发者提供了JavaScript与C/C++模块之间相互调用的交互能力。可以在NodeJs官网查看各种NAPI接口定义说明。NAPI作用OpenHarmony系统可以将框架层丰富的模块功能通过js接口开放给上层应用使用上层应用也可以将一些对性能有要求或者需要调用到系统侧
移动开发技术栈
·
2024-01-23 11:24
鸿蒙开发
harmonyos
学习
华为
鸿蒙开发
程序员
鸿蒙
OpenHarmony
【GitHub项目推荐--Go语言学习指南】【转载】
零
基础学习
Go语言、Go编程,首选GoGuide。地址:https://github.com/coderit666/GoGuide
旅之灵夫
·
2024-01-23 08:02
GitHub项目推荐
github
golang
开发语言
Linux
基础学习
十二
一:网络相关1.ifconfig[ethx]-a:显示所有接口的配置信息ifconfigethXIP/MASK:配置网卡信息配置的地址立即生效,但重启网络服务或主机都会失效2.网关:routeadd:添加-host:主机路由-net:网络路由del:删除-host:主机路由-net:网络路由网络配置文件:/etc/sysconfig/network3.路由配置文件位置:/etc/sysconfig
程序猿小小白
·
2024-01-23 07:25
【
Linux驱动
】休眠与唤醒 | POLL机制 | 异步通知 | 阻塞与非阻塞 | 软件定时器
作者:一只大喵咪1201专栏:《
Linux驱动
》格言:你只管努力,剩下的交给时间!
一只大喵咪1201
·
2024-01-23 05:07
Linux驱动
linux
c语言
驱动开发
arm开发
架构
python爬虫零
基础学习
之简单流程示例
文章目录爬虫基础爬虫流程常用库爬虫示例Python技术资源分享1、Python所有方向的学习路线2、学习软件3、入门学习视频4、实战案例5、清华编程大佬出品《漫画看学Python》6、Python副业兼职与全职路线爬虫基础网络爬虫(WebCrawler),也称为网页蜘蛛(WebSpider),是一种用于自动获取网页内容的程序。爬虫的主要任务是从互联网上抓取网页内容,然后对其进行解析和提取有用的信息
只存在于虚拟的King
·
2024-01-23 04:34
python
爬虫
学习
开发语言
计算机网络
学习方法
Python爬虫的9个具体应用场景案例分析与具体应用。
文章目录前言一、新闻采集二、数据挖掘三、网站监测四、舆情分析五、爬虫定制化开发六、数据采集与处理七、网络安全八、网络营销九、自动化测试关于Python技术储备一、Python所有方向的学习路线二、Python
基础学习
视频三
只存在于虚拟的King
·
2024-01-23 04:04
python
爬虫
开发语言
学习
计算机网络
文章的风格类别
基础学习
无戒365极限挑战营第33天最近看到里,有些文章的主题跟我的一样,比如说断舍离,比如说为什么跟亲近的人发火,比如说最近的电影观后感,寻梦环游记。非常感叹,为什么他们会写的那么深刻,有意境,让人思考,学到东西,而我的更多的是像个流水账一样,单调重复没有扩展,没有新意,自己也觉得乏味。所以为了想让自己的文章能够写的生动有趣,丰富,我就从网络上摘录了些关于写文章的基础知识,供自己学习。一散文在古代文学中
温润如玉如你
·
2024-01-23 03:29
python
基础学习
之while语句的使用
1.while的简单结构while判断条件:循环体while循环语句在条件为True的时候执行循环体,直到条件为False结束循环,主要用于重复的计算中2.while的使用例题1:计算1+2+3+...+100的和result,num=0,1whilenum<101:result+=numnum+=1print(result)上题使用while循环可以简单计算1~100的和,当num=101的时候
烤奶要加冰
·
2024-01-23 02:02
iOS-面试题 性能优化(夯实
基础学习
笔记-温故知新6)
你在项目中是怎么优化内存的?优化你是从哪几方面着手?列表卡顿的原因可能有哪些?你平时是怎么优化的?遇到tableView卡顿嘛?会造成卡顿的原因大致有哪些?image.pngimage.pngimage.png卡顿优化-CPU尽量用轻量级的对象,比如用不到事件处理的地方,可以考虑使用CALayer取代UIView不要频繁地调用UIView的相关属性,比如frame、bounds、transform
朱允见
·
2024-01-22 23:28
0
基础学习
软件测试需要掌握那些知识点?【建议收藏】
本人不才,今年35+,在行业摸爬滚打10余年,迷茫过、努力过,虽然不能说成为这个行业的翘楚,但是最起码在接近40岁的年龄,依然可以在行业中占据一份不错的岗位。回首过往,我最后悔的事情有两件:第一,入行太晚。我26岁才正式投身进入软件测试行业;第二,没有进行过专业的技能培训,都是一边工作一边学习,成长效率太低。对于目前这么年轻,就有这么明确的目标投入到如此优秀前景的行业中表示羡慕;同时,我也分享一下
程序员老鹰
·
2024-01-22 23:51
学习
压力测试
测试工具
单元测试
软件测试
测试工程师
程序人生
ARM-
Linux驱动
内核(S3C2440)
Linux启动流程驱动(程序):驱使设备行动的程序1.启动bootloader---引导操作系统启动的(裸机)程序,为操作系统启动准备环境,并引导操作系统启动2.启动kernel---操作系统核心(俗称的操作系统)3.加载根文件系统---一堆文件的集合(根目录下的文件)存储分类RAM(随机存储)SRAM静态DRAM动态SDRAM同步动态SDR(DDR2\3\4\5)ROM(只读存储)PROM可编程
Omedetou。
·
2024-01-22 22:05
linux
arm开发
运维
php
基础学习
之变量
php使用变量的必要性PHP是一种动态网站开发的脚本语言,动态语言特点是交互性,会有数据的传递,而PHP作为“中间人”,需要进行数据的传递,传递的前提就是PHP能自己存储数据(临时存储)php变量的命名规则必须以dollar字符$开头由字母、数字、下划线三种字符组合,但不允许以数字开头允许使用中文命名,但不建议php变量的使用定义:在系统中增加对应的变量名字(内存)赋值:可以将数据赋值给变量名(可
晴友读钟
·
2024-01-22 19:26
php基础学习
php
学习笔记
php
基础学习
之代码框架
一,标记脚本标记(已弃用):php代码标准标记:二,基础输出语句不是函数,语法上不加括号①print②echo两者的语法基本一致,echo速度更快,,下面给出使用样例——";#多学一招:是html标记,表示输出换行print"ganyu";#多学一招:是html标记,表示输出换行与分割线echo"10"."27";#用句点拼接字符串print"27"."10";#用句点拼接字符串echo"",10
晴友读钟
·
2024-01-22 19:23
php基础学习
php
学习笔记
linux
基础学习
(4)-文件相关命令
搜索文件whereis命令whereis命令用来定位指令的二进制程序、源代码和man手册等相关文件的路径。whereis[选项]参数选项含义-b只查找二进制文件-f不显示文件名前的路径名称-m只查找说明文件-s只查找源代码文件-B/M/S只在限定的目录下查找二进制/帮助/源代码文件说明:whereis并不是在瓷盘中漫无目的的查找,而是在一个数据库中查找的。这也就意味着你使用whereis命令的搜索
redher
·
2024-01-22 16:09
在太原牵引力教育Python培训要学习多长时间才可以掌握呢?
想要零
基础学习
Python怎么学习好呢?在太原牵引力科技Python培训要学习多长时间
听风者1028
·
2024-01-22 09:16
Linux
基础学习
笔记之——BASH
BASH1、环境变量1.1、环境变量的功能1.1.1、用env观察环境变量与常见环境变量说明[root@li~]#envXDG_SESSION_ID=1HOSTNAME=li.erver#主机名SELINUX_ROLE_REQUESTED=TERM=xterm#终端使用的环境SHELL=/bin/bash#目前这个环境下,使用的shell是哪一个程序?HISTSIZE=1000#默认可记录1000
前丨尘忆·梦
·
2024-01-22 09:26
Linux基础+进阶
linux
php
基础学习
之常量
php常量的基本概念常量是在程序运行中的一种不可改变的量(数据),常量一旦定义,通常不可改变(用户级别)。php常量的定义形式使用define函数:define("常量名字",常量值);使用const关键字:const常量名字=常量值;//该方法类似C、C++、Java、Python等语法,在php5.3之后才支持示例:注意细节——define和const定义的常量是有一定区别的,在于访问权限的区
晴友读钟
·
2024-01-22 06:52
php基础学习
php
学习笔记
linux驱动
(五):framebuffer
本文主要探讨210的framebuffer驱动知识。frameBuffer用户态进程直接调用显卡写屏,framebuffer接口是给用户态进程用于写屏framebuffer设备文件为fbx清屏:ddif=/dev/zeroof=/dev/fbx清屏:$ddif=/dev/zeroof=/dev/fb0bs=1024count=768截屏:ddif=/dev/fbof=fbfilefb.hstruc
菜_小_白
·
2024-01-22 02:24
linux
c语言
驱动开发
linux驱动
(六):input(key)
本文主要探讨210的input子系统。input子系统input子系统包含:设备驱动层,输入核心层,事件驱动层事件处理层:接收核心层上报事件选择对应structinput_handler处理,每个input_handler对象处理一类事件,同类事件的设备驱动共用同一handler核心层:连接设备驱动层和事件处理层,为设备驱动层提供输入设备驱动接口(structinput_dev)以及输入设备驱动注
菜_小_白
·
2024-01-22 02:24
linux
驱动开发
c语言
linux驱动
(八):block,net
本文主要探讨210的block驱动和net驱动。block随机存取设备且读写是按块进行,缓冲区用于暂存数据,达条件后一次性写入设备或读到缓冲区块设备与字符设备:同一设备支持块和字符访问策略,块设备驱动层支持缓冲区,字符设备驱动层没有缓冲块设备单位:扇区(Sectors):1扇区为512(倍)字节,块(Blocks):1块包含1个或多个扇区,段(Segments):若干相邻块组成,页(Page):内
菜_小_白
·
2024-01-22 02:24
linux
c语言
驱动开发
新手入门C语言
基础学习
:C语言编程预备知识
一、C语言的特点优点:代码量小,速度快,功能强大缺点:危险性高,开发周期长,可移植性弱二、C的应用领域系统软件开发操作系统:Windows,Linux,Unix驱动程序:主板驱动,显卡驱动,摄像头驱动数据库:DB2,Oracle,Sqlserver应用软件开发办公软件:Wps图形图像多媒体:ACDSee,Photoshop,MediaPlayer嵌入式软件开发:智能手机,掌上电脑游戏开发:2D,3
小辰带你看世界
·
2024-01-21 19:05
格密码基础(2)-计算性困难问题
基础学习
中的一点个人笔记,这里写的关于格理论的困难问题主要是针对密码学介绍的。上次写到,现代密码学方案大都是基于某个困难问题研究的,最终方案的安全性也被规约到困难问题的安全性上去。
CCCYYY090
·
2024-01-21 18:10
格密码
密码学
线性代数
安全
C# 字符串(String)
文章目录前言一、C#字符串(String)二、String类的属性/方法总结前言C#
基础学习
入门系列-C#字符串(String)一、C#字符串(String)C#字符串(String)是一种不可变的序列字符
TE-茶叶蛋
·
2024-01-21 15:58
.Net
c#
开发语言
C# 程序结构
文章目录前言一、C#程序结构命名空间(Namespace)类(Class)方法(Method)语句(Statement二、简单的C#程序结构示例示例代码分析第一个HelloWorld程序总结前言C#
基础学习
入门系列
TE-茶叶蛋
·
2024-01-21 15:57
.Net
c#
java
前端
css
基础学习
笔记四
盒模型--宽度和高度盒模型宽度和高度和我们平常所说的物体的宽度和高度理解是不一样的,css内定义的宽(width)和高(height),指的是填充以里的内容范围。因此一个元素实际宽度(盒子的宽度)=左边界+左边框+左填充+内容宽度+右填充+右边框+右边界。[图片上传失败...(image-57a8c0-1524105003965)]元素的高度也是同理。比如:css代码:div{width:200p
雨飞飞雨
·
2024-01-21 13:12
vue
基础学习
Vuex和Vue路由——part02
vue
基础学习
Vuex和Vue路由——part0201Vuex1.介绍理解Vuex什么时候使用VuexVuex工作原理图2.求和案例2.1纯vue编写2.2搭建Vuex环境2.3使用Vuex编写3.Vuex
哈喽……
·
2024-01-21 11:24
Vue
vue.js
学习
前端
linux驱动
入口函数module_init如何被调用
大多的
Linux驱动
程序需要包含下面三个头文件:#include#include#includeinit.h定义了驱动的初始化和退出相关的函数。kernel.h定义了经常用到的函数原型及宏定义。
爱因私谈
·
2024-01-21 10:00
Java String
基础学习
目录1、String的构造方法2、String内存模型3、字符串的比较4、字符串的练习1、用户登录系统2、遍历字符串3、统计字符次数4、拼接字符串5、字符串的反转6、金额转换7、手机号屏蔽*8、身份证信息查看9、敏感词替换5、StringBuilder1、概念及练习2、链式编程思想3、小练习6、StringJoiner1、概念7、总结1、String的构造方法publicclassStringTe
真的学不了一点。。。
·
2024-01-21 04:20
JAVA
SE学习
java
【
linux驱动
】结合
linux驱动
在迅为rk3568开发板上点亮一个LED灯的详细教程
文章目录分析驱动编写测试程序编写开发环境:迅为3568开发板+ubuntu18.04任务:给LED写一个驱动程序,要求当应用程序写入驱动的数据为’1’时点亮LED;当应用程序写入数据为‘0’时熄灭LED。分析步骤一:确定控制引脚打开原理图确定LED的GPIO引脚位置,通过下图知GPIO0_B7可以控制LED9。GPIO0_B7通过一个三极管控制LED9:GPIO0_B7为低电平时,三极管截止,LE
☞黑心萝卜三条杠☜
·
2024-01-21 02:19
LINUX
linux
单片机
运维
【
linux驱动
】讲解
linux驱动
开发中的并发与并行,并且给出解决驱动开发中资源竞争的解决方案(下)
文章目录解决资源竞争的方法自旋锁信号量互斥锁开发环境:迅为3568开发板+ubuntu18.04前文【
linux驱动
】讲解
linux驱动
开发中的并发与并行,并且给出解决驱动开发中资源竞争的解决方案(上)
☞黑心萝卜三条杠☜
·
2024-01-21 02:19
LINUX
linux
驱动开发
运维
【
linux驱动
】详细剖析第一个hello word驱动程序
文章目录驱动程序的框架驱动程序的使用示例驱动程序的框架
Linux驱动
的基本框架主要由模块加载函数,模块卸载函数,模块许可证声明,模块参数,模块导出符号,模块作者信息等几部分组成,其中模块参数,模块导出符号
☞黑心萝卜三条杠☜
·
2024-01-21 02:18
LINUX
linux
【
linux驱动
】在迅为RK3568开发板上设置文件私有数据的详细教程
文章目录文件私有数据的相关概述文件私有数据的使用实例开发环境:windows+ubuntu18.04+迅为rk3568开发板文件私有数据的相关概述在linux中尽管没有明确规定要是用文件私有数据,但是在
linux
☞黑心萝卜三条杠☜
·
2024-01-21 02:47
LINUX
linux
爬虫核心模块 -- reqeusts
前言:激动的搓搓小手,从python基础到前端知识,经过一些列的打
基础学习
之后,终于要正式开启爬虫之旅,让我们一起由浅入深的学习吧~~1.requests概述requests作为一个专门为人类编写的HTTP
糯米不开花ぴ
·
2024-01-21 02:10
python爬虫
python
0基础学画画(冰淇淋),连载85/100天
大家好,我是大鱼漫说,你们可以叫我大鱼,我现在是一位零
基础学习
绘画的程序员。每日一问~小鱼问:procreate录屏(缩时视频)如何让它不录到参考图片?
大鱼漫说
·
2024-01-20 16:29
python
基础学习
-01
Python是一种简单易学并且结合了解释性、编译性、互动性和面向对象的脚本语言。Python提供了高级数据结构,它的语法和动态类型以及解释性使它成为广大开发者的首选编程语言。Python是解释型语言:开发过程中没有了编译这个环节。类似于PHP和Perl语言。Python是交互式语言:可以在一个Python提示符>>>后直接执行代码。Python是面向对象语言:Pytho虽然Python源代码文件(
jiang_changsheng
·
2024-01-20 15:43
python
开发语言
python
基础学习
-02
基本的程序设计模式任何的程序设计都包含IPO,它们分别代表如下:I:Input输入,程序的输入P:Process处理,程序的主要逻辑过程O:Output输出,程序的输出因此如果想要通过计算机实现某个功能,那么基本的程序设计模式包含三个部分,如下:确定IPO:明确需要实现功能的输入和输出,以及主要的实现逻辑过程;编写程序:将计算求解的逻辑过程通过编程语言进行设计展示;调试程序:对编写的程序按照逻辑过
jiang_changsheng
·
2024-01-20 15:43
学习
机器学习Python7天入门计划--第一天-机器学习基础-讲人话
机器学习Python7天入门计划-第一天:机器学习
基础学习
目标:理解机器学习的基本概念和过程。掌握基本的数据预处理技巧。理解线性回归的原理和应用。
M.D
·
2024-01-20 09:39
机器学习
人工智能
Python
基础学习
:同步异步阻塞与非阻塞
嗨喽~大家好呀,这里是魔王呐❤~!python更多源码/资料/解答/教程等点击此处跳转文末名片免费获取一、状态介绍在了解其他概念之前,我们首先要了解进程的几个状态。在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞。就绪(Ready)状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。执行/运行(Runnin
魔王不会哭
·
2024-01-20 09:24
python
学习
服务器
python
开发语言
爬虫
Pytorch第2周:深度学习基础 - Day 8-9: 神经网络基础
Pytorch第2周:深度学习基础-Day8-9:神经网络
基础学习
目标:理解神经网络的基础概念。学习如何使用PyTorch的nn模块构建神经网络。
M.D
·
2024-01-20 06:16
深度学习
神经网络
人工智能
pytorch
python
tensorflow2
STM32-GPIO
基础学习
(基于标准库)
GPIO往往是在STM32初学者中第一个学到的模块,我个人建议的是先了解完原理后再进行代码的学习,当然我们不要求你完全去搞懂原理,知识是很多时候是网状的,我们不是一层层打怪升级,所以我上述表示是了解而不是掌握,作为一个初学者而言,用起来往往可以事半功倍。所以以下部分是对相关函数做出的部分释意和用法举例。1.GPIO初始化配置GPIO_InitTypeDefGPIO_InitStructure;定义
电信一点
·
2024-01-20 04:04
stm32
学习
单片机
鸟哥的linux私房菜:
基础学习
篇 pdf下载
基础学习
篇是初学者学习Linux不可多得的参考手册获取:http://www.shujuyr.com/595.html
数据与人
·
2024-01-20 03:19
Linux
基础学习
:安装RPM包或源码包
一、安装RPM包或源码包(一)、RPM工具•RPM(RetHatPackageManager)是以一种数据库记录的方式将我们是需要的套件安装到Linux主机的一套管理程序。•缺点:安装环境必须与编译时的环境一致或相当;包与包之间存在相互依赖关系,卸载包时需要先把依赖包卸载,若依赖包为系统必须的,则不能卸载,否者会导致系统崩溃。安装RPM包(1)、命令:rpm【-ivh】【filenam】a.-i:
南丶小辰
·
2024-01-20 03:42
笔记
linux
linux
基础学习
(5):yum
yum是为了解决rpm包安装依赖性而产生的一种安装工具1.yum源1.1配置文件位置yum源的配置文件在/etc/yum.repos.d/中*Base源是网络yum源,也就是需要联网才能使用的yum源。默认情况下,系统会使用Base源*Media源是光盘yum源,是本地yum源1.2配置文件内容以Base源为例,打开后如下图图中的两大段就是两个yum源地址容器*[base]:容器名称,一定要由中括
入门如入土
·
2024-01-20 03:06
linux
学习
服务器
linux零
基础学习
教程: Centos8软件包的管理与安装
本人从事IT行业已有十多年,有着丰富的实战经验,总结了大量的学习方法,更是积累了很多的学习资料,很高兴能在这里跟大家交流学习,希望能在这里跟大家共同进步和成长!全套学习资料移步至公众号【学神来啦】更多学习资料添加扣扣资源群:661308959本节所讲内容:8.1使用rpm命令-安装-查看-卸载-rpm软件包8.2yum管理软件包8.3CentOS8中使用DNF管理软件包8.4实战tar源码包管理-
Xiadaoanquan123
·
2024-01-20 03:36
linux
centos
服务器
linux
基础学习
(4):rpm包与相关命令
1.linux内的软件包分类linux只有2种软件包:源码包与二进制包(1)源码包源码包就是开源的源程序包,使用者可以直接看到其程序,也可以进行修改(2)二进制包由于源码包安装难度大,后来就出现了二进制包,但二进制包不再是开源的了linux的二进制包以.rpm结尾,windows的二进制包以.exe结尾redhat的二进制包是RPM包,ubuntu的二进制包是DPKG包*对于大型环境,最好用源码包
入门如入土
·
2024-01-20 03:03
linux
学习
运维
聊聊自学编程
如何零
基础学习
Java?
月下西樓
·
2024-01-19 22:58
Linux驱动
开发高精度定时器的精度测量
前言今天我们来评测linux内核的高精度定时器。顺便利用通过Tektronix示波器和DS100Mini数字示波器进行交叉测试。因项目需要用到精准的时间周期,所以要评估它的可行性,并验证正点原子的示波器能不能支撑嵌入式开发流程。Linux高精度定时器说明其实传统的低分辨率定时器随着技术的演进,已经无法满足开发需求。而且硬件的不断发展,硬件定时器的精度也越来越高,这也给高精度定时器创建了有利条件。低
Rice嵌入式开发
·
2024-01-19 18:32
Linux
嵌入式
编程语言
java
linux
大数据
rk3566-Android11 从驱动到 app 第二章添加 hall 层
hw_module_t2)hw_module_methods_t3)hw_device_t2.程序编写3.编译程序4.验证程序5.添加权限1)设备节点添加权限2)添加shelllinux权限作者:baron对
linux
baron-z
·
2024-01-19 13:36
安卓从驱动到
app
的整体流程梳理
java
开发语言
android
linux
驱动开发
c语言
嵌入式硬件
上一页
4
5
6
7
8
9
10
11
下一页
按字母分类:
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
其他