- 检查指定的IP地址和端口号是否可以连接
努力的搬砖人.
java后端经验分享
是的,Socket类可以直接用来检查指定的IP地址和端口号是否可以连接。以下是一个简单的Java代码示例,展示如何使用Socket类来检查连接是否可用:importjava.net.Socket;importjava.net.UnknownHostException;publicclassNetworkChecker{publicbooleancheckConnection(StringipAdd
- CAPL函数-10网络与总线函数
正当少年
CAPLCAPL
CAPL提供了丰富的网络和总线控制函数,用于管理CAN、LIN、FlexRay等总线通信。以下是主要功能的分类和详细说明:一、总线通信控制函数1.总线启停控制startBus()-启动指定总线startBus("CAN",1);//启动CAN1总线stopBus()-停止指定总线stopBus("LIN",2);//停止LIN2总线resetBus()-复位总线控制器resetBus("FlexR
- failed to start daemon: Error initializing network controller: error obtaining controller
Roc-xb
dockerUbuntu
INFO[2000-01-01T08:24:25.420202728+08:00][graphdriver]usingpriorstoragedriver:overlay2INFO[2000-01-01T08:24:25.420825581+08:00]Loadingcontainers:start.INFO[2000-01-01T08:24:25.628581180+08:00]stopping
- 机顶盒芯片
黑石云
边缘计算
全志(Allwinner)和晶晨(Amlogic)都是知名的芯片设计公司,它们的产品广泛应用于智能电视盒子、网络播放器以及其他多媒体消费电子产品中。这些芯片通常被用于流量盒子,即那些能够处理大量数据传输任务的设备,包括但不限于PCDN(Peer-to-PeerContentDeliveryNetwork)应用。全志(Allwinner)芯片全志科技提供的芯片解决方案通常具有良好的性价比,适合预算有
- 笔记本运行边缘计算
黑石云
边缘计算
笔记本电脑可以用来运行PCDN(Peer-to-PeerContentDeliveryNetwork)服务。实际上,如果你有闲置的笔记本电脑,并且它具备一定的硬件条件和网络环境,那么它可以成为一个不错的PCDN节点。运行PCDN的基本要求硬件需求:处理器:多核处理器能够更好地处理并发连接。内存:至少2GBRAM,但推荐4GB或更多以确保流畅运行。存储:需要足够的硬盘空间来缓存数据,建议至少有几十G
- 企业带宽与家庭带宽
黑石云
边缘计算
企业带宽与家庭带宽在运行PCDN(Peer-to-PeerContentDistributionNetwork,即P2P内容分发网络)时存在显著差异,主要体现在以下几个方面:一、接入方式与带宽资源企业带宽:接入方式通常更为直接和高效,如企业专线,直接从宽带运营商机房光纤出来,一个OLT的PON口直接到用户设备上,独享接入方式保证了带宽的速度和稳定性。带宽资源充足,通常具有较高的上下行带宽速率,能够
- 调用https接口抛出javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path
姚昱辰
成长工作的点点滴滴
问题:javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certifica
- jsoup爬虫报错javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException
嘀咕博客
jsoup
在使用jsoup爬取某个https开头的网站时(使用了ssl证书的网站),结果出现以下错误:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXpathbuildingfailed:sun.security.provider.certpath.SunCertPathBuilderExce
- 【踩坑系列】使用httpclient调用第三方接口返回javax.net.ssl.SSLHandshakeException异常
申城异乡人
Java踩坑系列Java
1.踩坑经历最近做了个需求,需要调用第三方接口获取数据,在联调时一直失败,代码抛出javax.net.ssl.SSLHandshakeException异常,具体错误信息如下所示:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIXpathbuildingfailed:sun.secur
- Linux下配置pptp协议之拨号上网
fengwuJ
linuxlinuxpptp客户端
首先安装pptp,sodoapt-getinstallpptp-linux-y:创建连接:sudopptpsetup--createnodeName--serveryourServerAddr--usernamexxx--passwordxxxconnectionconfigfile为拨号配置文件,可通过pppdcall进行拨号打开配置路由,sudogedit/etc/ppp/ip-up在文件末尾
- 基于HTML的邮件发送状态查询界面设计示例
大霸王龙
html前端javascript
以下是一个基于HTML的邮件发送状态查询界面设计示例,结合筛选功能、状态展示和重新发送操作,采用Bootstrap框架实现响应式布局:邮件发送状态监控系统.status-badge{padding:4px8px;border-radius:12px;font-size:0.9em;}.success{background-color:#d4edda;color:#155724;}.failed{b
- 台式计算机开机不自检不起动,台式机开机一直自检的解决方法
weixin_39537397
台式计算机开机不自检不起动
台式机开机一直自检的解决方法电脑开机都会自动检测内存及cpu等硬件,当电脑基本配置内存容量有所增加及内存过大重复检测内存的话,就是导致检测内存时间过长的主要原因。下面是jy135小编收集整理的台式机开机一直自检解决方法,欢迎阅读。台式机开机一直检测解决方法一:1.开机键→主板控制芯片向→CPU发出RESET信号→CPU初始化2.当电源供电稳定后,芯片组便撤去RESET信号,CPU马上就从FFFFO
- Buffer overFolw---Kryo序列化出现缓冲区溢出的问题解决
Matrix70
#spark大数据分布式
问题:由于我的数据量太大,我设置批次为10000万,50w数据大概有400M左右,然后进行spark数据处理时候报错为org.apache.spark.SparkException:Kryoserializationfailed:BufferoverFolw.Available:0,rquired58900977,Toavoidthis,increasespark.kryoserializer.b
- browserlist
_miccretti
python
2019独角兽企业重金招聘Python工程师标准>>>用来作啥?的Librarytosharesupportedbrowserslistbetweendifferentfront-endtools.ItisusedinAutoprefixer,Stylelint,eslint-plugin-compatandbabel-env-preset.信息来源:https://github.com/ai/b
- package.json browserslist
82年的辣鸡
JavaScriptVue.jsvue
作用:根据提供的目标浏览器的环境来,智能添加css前缀,js的polyfill垫片,来兼容旧版本浏览器。避免不必要的兼容代码,以提高代码的编译质量。共享使用browserslist的组件们:组件名功能Autoprefixerpostcss添加css前缀组件bable-preset-env编译预设环境智能添加polyfill垫片代码postcss-normalize基础语法:只要package.js
- 2.企业级AD活动目录架构与设计原则实战指南
极客奇点
#企业级AD活动目录全栈实战架构安全架构
一、企业级AD架构核心组件解析1.1多域森林架构设计核心概念:单域模型:适用于中小型企业(3012Enabled2.3高可用性实现方案三大保障机制:DC冗余部署:每个站点至少2台DCFSMO角色分布:合理拆分五大角色AD回收站启用:防止误删除操作站点复制优化配置:#设置站点间复制频率Set-ADReplicationConnection-Identity"CN=Default-First-Site
- CondaHTTPError: HTTP 000 CONNECTION FAILED for url(借鉴与自身经历总结)
静静的写bug
anaconda
CondaHTTPError:HTTP000CONNECTIONFAILEDforurl(解决方法)一、CondaHTTPError问题condahttperrorhttpnonenoneforurlnoneAnaconda更新失败在conda安装好之后,默认的镜像是官方的,由于官网的镜像在境外,访问太慢或者不能访问,为了能够加快访问的速度,这里选择了清华的的镜像。在命令行中运行(设置清华的镜像)
- CondaHTTPError: HTTP 000 CONNECTION FAILED
ChapterQ
开发工具anaconda
问题:最近使用anaconda创建环境时,总是遇到以下错误(原镜像源地址为清华源):condacreate-ncodepython=3.6Solvingenvironment:failedCondaHTTPError:HTTP000CONNECTIONFAILEDforurlElapsed:-AnHTTPerroroccurredwhentryingtoretrievethisURL.HTTPer
- Elasticsearch 解析 updateTime 字段时格式错误
Lucky GGBond
小Bug专栏jenkins运维
遇到的问题:{"error":{"root_cause":[{"type":"mapper_parsing_exception","reason":"failedtoparsefield[updateTime]oftype[date]indocumentwithid'57'"}],"type":"mapper_parsing_exception","reason":"failedtoparsefi
- k8s kubernetes dashboard一直CarshLoopBackoff
林润庚
后端kubernetes容器云原生
使用kubectlgetpods-A-owide发现pod一直CarshLoopBackoff通过kubectldescribepodkubernetes-dashboard-7c4f8ff86d-7k7bd-nkubernetes-dashboard获取详细信息发现一直报错WarningUnhealthy10m(x31over34m)kubeletLivenessprobefailed:Get"
- [Qt5] QMetaObject::invokeMethod使用
丶布布
#GUI◎QT5qt开发语言
博客主页:https://loewen.blog.csdn.net欢迎点赞收藏⭐留言如有错误敬请指正!本文由丶布布原创,首发于CSDN,转载注明出处现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.前言二.作用三.使用场景一.前言QMetaObject::invokeMethod结合Qt::QueuedConnection的作用是实现跨线程安全调用或异步执行方法。其核心目的是确保方法
- 【VUE】npm error request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has expir
一起来学吧
VUEvue.jsnpm前端vuecnpm
1、npminstall-gcnpm--registry=https://registry.npm.taobao.org在使用淘宝镜像安装cnpm时报错npmerrorrequesttohttps://registry.npm.taobao.org/cnpmfailed,reason:certificatehasexpired,解决方案如下2、cnpminstall--globalvue-cli在
- mysql中mapping标签的作用_Mybatis中Mapper标签总结大全
文清的男友
一、标签分类定义SQL语句insertdeleteupdateselect配置关联关系collectionassociation配置java对象属性与查询结果集中列名的对应关系resultMap控制动态SQL拼接foreachifchoose格式化输出wheresettrim定义常量sql其他include二、标签总结1.基础SQL标签1.1查询select标签属性id唯一的名称,对应dao中ma
- Springboot报错:Lombok annotation handler class lombok.javac.handlers.HandleData failed on Dxx.java
m0_74825656
面试学习路线阿里巴巴javaspringboot后端
问题描述拉了别人一整个大项目的代码,项目里有很多个模块,因为期间互相依赖,所以需要分别启动每个模块的服务。但在启动其中一个模块的application时,死活启不起来,在Build的阶段就报错↓↓:java:Lombokannotationhandlerclasslombok.javac.handlers.HandleDatafailedon:/D:/xxxxx.java:java.lang.St
- Gradle sync failed: Could not install Gradle distribution from
Mr.Hazyzhao
随记androidgradle
AndroidStudio打开新项目或项目更新时的gradle同步网络问题由于是国内,且google有时候不稳定可以多尝试几次gradlesync,多试几次就好了如果第一次下gradle6.5bin.zip(或者其他版本的gradle),下载中途失败了,那么就需要找到这个包,删了重新下手动下载zip再复制到.gradle/wrapper/dist下面这种方法反正我是没行通过不要担心,只是网络问题一
- 计算机网络,二层和三层协议的理解
LeonNo11
k8s网络计算机网络智能路由器网络
二层网络和三层网络二层网络(DataLinkLayer)和三层网络(NetworkLayer)是OSI(OpenSystemsInterconnection)模型中的两个层次,它们在网络通信中扮演着不同的角色。以下是对这两个层次的快速理解:二层网络(数据链路层)功能:负责在相邻的网络设备之间传输帧(frame),处理物理寻址(使用MAC地址)。协议:常见的二层协议包括以太网(Ethernet)、无
- 获取GPU信息 --createWindowSurface EGL_BAD_NATIVE_WINDOW -- failed: EGL_BAD_MATCH
jiantaocd
JAVAAndroidUIAndroidandroid三星gpusurface
之前网上有很多关于获取GPU信息的帖子,大部分手机都可以获取到,但部分奇葩就不行了。贴代码:packagecom.example.gpuinfo;importjavax.microedition.khronos.egl.EGLConfig;importjavax.microedition.khronos.opengles.GL10;importandroid.app.Activity;import
- cnn中的dropout技术
机器之眼_机器视觉MeGauging实现
cnncnn人工智能神经网络
lenet5中这个:boolconnection_table[6*16]={O,X,X,X,O,O,O,X,X,O,O,O,O,X,O,O,O,O,X,X,X,O,O,O,X,X,O,O,O,O,X,O,O,O,O,X,X,X,O,O,O,X,X,O,X,O,O,O,X,O,O,O,X,X,O,O,O,O,X,X,O,X,O,O,X,X,O,O,O,X,X,O,O,O,O,X,O,O,X,O,X,
- IDEA报错failed to resolve org.junit.vintage:junit-vintage-engine:5.7.0
讓丄帝愛伱
环境后端技术junit
原因:是JUnit使用了junit-vintage引擎junit-vintage是Junit4中使用的引擎,如果项目使用了Junit5的话,需要在spring-boot-starter-test中将JUnit4的引擎排除org.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-enginej
- springboot 单元测试 failed to resolve org.junit.platform:junit0platform:junit-platform-launcher
苏灿,月色真美
笔记javajunitspringboot单元测试
提示这一类的错误,一般都是没有依赖导致的可以添加以下两个依赖到项目中org.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engineorg.junit.platformjunit-platform-launchertest
- 多线程编程之理财
周凡杨
java多线程生产者消费者理财
现实生活中,我们一边工作,一边消费,正常情况下会把多余的钱存起来,比如存到余额宝,还可以多挣点钱,现在就有这个情况:我每月可以发工资20000万元 (暂定每月的1号),每月消费5000(租房+生活费)元(暂定每月的1号),其中租金是大头占90%,交房租的方式可以选择(一月一交,两月一交、三月一交),理财:1万元存余额宝一天可以赚1元钱,
- [Zookeeper学习笔记之三]Zookeeper会话超时机制
bit1129
zookeeper
首先,会话超时是由Zookeeper服务端通知客户端会话已经超时,客户端不能自行决定会话已经超时,不过客户端可以通过调用Zookeeper.close()主动的发起会话结束请求,如下的代码输出内容
Created /zoo-739160015
CONNECTEDCONNECTED
.............CONNECTEDCONNECTED
CONNECTEDCLOSEDCLOSED
- SecureCRT快捷键
daizj
secureCRT快捷键
ctrl + a : 移动光标到行首ctrl + e :移动光标到行尾crtl + b: 光标前移1个字符crtl + f: 光标后移1个字符crtl + h : 删除光标之前的一个字符ctrl + d :删除光标之后的一个字符crtl + k :删除光标到行尾所有字符crtl + u : 删除光标至行首所有字符crtl + w: 删除光标至行首
- Java 子类与父类这间的转换
周凡杨
java 父类与子类的转换
最近同事调的一个服务报错,查看后是日期之间转换出的问题。代码里是把 java.sql.Date 类型的对象 强制转换为 java.sql.Timestamp 类型的对象。报java.lang.ClassCastException。
代码:
- 可视化swing界面编辑
朱辉辉33
eclipseswing
今天发现了一个WindowBuilder插件,功能好强大,啊哈哈,从此告别手动编辑swing界面代码,直接像VB那样编辑界面,代码会自动生成。
首先在Eclipse中点击help,选择Install New Software,然后在Work with中输入WindowBui
- web报表工具FineReport常用函数的用法总结(文本函数)
老A不折腾
finereportweb报表工具报表软件java报表
文本函数
CHAR
CHAR(number):根据指定数字返回对应的字符。CHAR函数可将计算机其他类型的数字代码转换为字符。
Number:用于指定字符的数字,介于1Number:用于指定字符的数字,介于165535之间(包括1和65535)。
示例:
CHAR(88)等于“X”。
CHAR(45)等于“-”。
CODE
CODE(text):计算文本串中第一个字
- mysql安装出错
林鹤霄
mysql安装
[root@localhost ~]# rpm -ivh MySQL-server-5.5.24-1.linux2.6.x86_64.rpm Preparing... #####################
- linux下编译libuv
aigo
libuv
下载最新版本的libuv源码,解压后执行:
./autogen.sh
这时会提醒找不到automake命令,通过一下命令执行安装(redhat系用yum,Debian系用apt-get):
# yum -y install automake
# yum -y install libtool
如果提示错误:make: *** No targe
- 中国行政区数据及三级联动菜单
alxw4616
近期做项目需要三级联动菜单,上网查了半天竟然没有发现一个能直接用的!
呵呵,都要自己填数据....我了个去这东西麻烦就麻烦的数据上.
哎,自己没办法动手写吧.
现将这些数据共享出了,以方便大家.嗯,代码也可以直接使用
文件说明
lib\area.sql -- 县及县以上行政区划分代码(截止2013年8月31日)来源:国家统计局 发布时间:2014-01-17 15:0
- 哈夫曼加密文件
百合不是茶
哈夫曼压缩哈夫曼加密二叉树
在上一篇介绍过哈夫曼编码的基础知识,下面就直接介绍使用哈夫曼编码怎么来做文件加密或者压缩与解压的软件,对于新手来是有点难度的,主要还是要理清楚步骤;
加密步骤:
1,统计文件中字节出现的次数,作为权值
2,创建节点和哈夫曼树
3,得到每个子节点01串
4,使用哈夫曼编码表示每个字节
- JDK1.5 Cyclicbarrier实例
bijian1013
javathreadjava多线程Cyclicbarrier
CyclicBarrier类
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环的 barrier。
CyclicBarrier支持一个可选的 Runnable 命令,
- 九项重要的职业规划
bijian1013
工作学习
一. 学习的步伐不停止 古人说,活到老,学到老。终身学习应该是您的座右铭。 世界在不断变化,每个人都在寻找各自的事业途径。 您只有保证了足够的技能储
- 【Java范型四】范型方法
bit1129
java
范型参数不仅仅可以用于类型的声明上,例如
package com.tom.lang.generics;
import java.util.List;
public class Generics<T> {
private T value;
public Generics(T value) {
this.value =
- 【Hadoop十三】HDFS Java API基本操作
bit1129
hadoop
package com.examples.hadoop;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoo
- ua实现split字符串分隔
ronin47
lua split
LUA并不象其它许多"大而全"的语言那样,包括很多功能,比如网络通讯、图形界面等。但是LUA可以很容易地被扩展:由宿主语言(通常是C或 C++)提供这些功能,LUA可以使用它们,就像是本来就内置的功能一样。LUA只包括一个精简的核心和最基本的库。这使得LUA体积小、启动速度快,从 而适合嵌入在别的程序里。因此在lua中并没有其他语言那样多的系统函数。习惯了其他语言的字符串分割函
- java-从先序遍历和中序遍历重建二叉树
bylijinnan
java
public class BuildTreePreOrderInOrder {
/**
* Build Binary Tree from PreOrder and InOrder
* _______7______
/ \
__10__ ___2
/ \ /
4
- openfire开发指南《连接和登陆》
开窍的石头
openfire开发指南smack
第一步
官网下载smack.jar包
下载地址:http://www.igniterealtime.org/downloads/index.jsp#smack
第二步
把smack里边的jar导入你新建的java项目中
开始编写smack连接openfire代码
p
- [移动通讯]手机后盖应该按需要能够随时开启
comsci
移动
看到新的手机,很多由金属材质做的外壳,内存和闪存容量越来越大,CPU速度越来越快,对于这些改进,我们非常高兴,也非常欢迎
但是,对于手机的新设计,有几点我们也要注意
第一:手机的后盖应该能够被用户自行取下来,手机的电池的可更换性应该是必须保留的设计,
- 20款国外知名的php开源cms系统
cuiyadll
cms
内容管理系统,简称CMS,是一种简易的发布和管理新闻的程序。用户可以在后端管理系统中发布,编辑和删除文章,即使您不需要懂得HTML和其他脚本语言,这就是CMS的优点。
在这里我决定介绍20款目前国外市面上最流行的开源的PHP内容管理系统,以便没有PHP知识的读者也可以通过国外内容管理系统建立自己的网站。
1. Wordpress
WordPress的是一个功能强大且易于使用的内容管
- Java生成全局唯一标识符
darrenzhu
javauuiduniqueidentifierid
How to generate a globally unique identifier in Java
http://stackoverflow.com/questions/21536572/generate-unique-id-in-java-to-label-groups-of-related-entries-in-a-log
http://stackoverflow
- php安装模块检测是否已安装过, 使用的SQL语句
dcj3sjt126com
sql
SHOW [FULL] TABLES [FROM db_name] [LIKE 'pattern']
SHOW TABLES列举了给定数据库中的非TEMPORARY表。您也可以使用mysqlshow db_name命令得到此清单。
本命令也列举数据库中的其它视图。支持FULL修改符,这样SHOW FULL TABLES就可以显示第二个输出列。对于一个表,第二列的值为BASE T
- 5天学会一种 web 开发框架
dcj3sjt126com
Web框架framework
web framework层出不穷,特别是ruby/python,各有10+个,php/java也是一大堆 根据我自己的经验写了一个to do list,按照这个清单,一条一条的学习,事半功倍,很快就能掌握 一共25条,即便很磨蹭,2小时也能搞定一条,25*2=50。只需要50小时就能掌握任意一种web框架
各类web框架大同小异:现代web开发框架的6大元素,把握主线,就不会迷路
建议把本文
- Gson使用三(Map集合的处理,一对多处理)
eksliang
jsongsonGson mapGson 集合处理
转载请出自出处:http://eksliang.iteye.com/blog/2175532 一、概述
Map保存的是键值对的形式,Json的格式也是键值对的,所以正常情况下,map跟json之间的转换应当是理所当然的事情。 二、Map参考实例
package com.ickes.json;
import java.lang.refl
- cordova实现“再点击一次退出”效果
gundumw100
android
基本的写法如下:
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
//navigator.splashscreen.hide();
document.addEventListener("b
- openldap configuration leaning note
iwindyforest
configuration
hostname // to display the computer name
hostname <changed name> // to change
go to: /etc/sysconfig/network, add/modify HOSTNAME=NEWNAME to change permenately
dont forget to change /etc/hosts
- Nullability and Objective-C
啸笑天
Objective-C
https://developer.apple.com/swift/blog/?id=25
http://www.cocoachina.com/ios/20150601/11989.html
http://blog.csdn.net/zhangao0086/article/details/44409913
http://blog.sunnyxx
- jsp中实现参数隐藏的两种方法
macroli
JavaScriptjsp
在一个JSP页面有一个链接,//确定是一个链接?点击弹出一个页面,需要传给这个页面一些参数。//正常的方法是设置弹出页面的src="***.do?p1=aaa&p2=bbb&p3=ccc"//确定目标URL是Action来处理?但是这样会在页面上看到传过来的参数,可能会不安全。要求实现src="***.do",参数通过其他方法传!//////
- Bootstrap A标签关闭modal并打开新的链接解决方案
qiaolevip
每天进步一点点学习永无止境bootstrap纵观千象
Bootstrap里面的js modal控件使用起来很方便,关闭也很简单。只需添加标签 data-dismiss="modal" 即可。
可是偏偏有时候需要a标签既要关闭modal,有要打开新的链接,尝试多种方法未果。只好使用原始js来控制。
<a href="#/group-buy" class="btn bt
- 二维数组在Java和C中的区别
流淚的芥末
javac二维数组数组
Java代码:
public class test03 {
public static void main(String[] args) {
int[][] a = {{1},{2,3},{4,5,6}};
System.out.println(a[0][1]);
}
}
运行结果:
Exception in thread "mai
- systemctl命令用法
wmlJava
linuxsystemctl
对比表,以 apache / httpd 为例 任务 旧指令 新指令 使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.service 使某服务不自动启动 chkconfig --level 3 httpd off systemctl disable httpd.service 检查服务状态 service h