- Android 下拉列表框AppCompatSpinner
yijiaodingqiankun
Android移动android
//获取当前数据Stringtime=spn_spinner.getSelectedItem().toString();//监听spn_spinner.setOnItemSelectedListener(this);在values文件夹创建arrays.xml文件,下面的1个月,2个月等替换成你的内容,还有name值也替换成你起的名字1个月2个月3个月
- websocket 如果重连还是失败的处理方法
小纯洁w
websocket网络协议网络
在Websocket重连失败后切换到HTTP轮询,可以采用以下步骤执行:定义HTTP轮询方法:根据你的应用需求,先定义一个专门执行HTTP轮询的方法。这通常包括一个定期执行HTTP请求的setInterval或者setTimeout。例如:functionhttpPolling(){setInterval(function(){fetch('/server-endpoint').then(resp
- 创建tag 版本及回退到tag版本
GaoXiaoGao
1.在本地分支创建tag,命令如下:gittag-av1.0-m'v1.0版本'以上命令创建了本地v1.0版本并附注了信息“v1.0版本”2.同步到远程代码仓库gitpushorigin--tags3.其他人clone后,查看tag用如下命令gittaggitshowv1.0可以查看版本信息,commit后面是提交的对应的版本号4.回退到v1.0版本gitreset--hard5exxxx(这个是
- Java反射(二)
Sandy_678f
类packagereflectiondemo;publicclassTwoString{privateStringm_s1="a",m_s2="b";//无参数构造函数publicTwoString(){}//含参数构造函数publicTwoString(Strings1,Strings2){this.m_s1=s1;this.m_s2=s2;}publicvoidsetM_s1(Strings1
- mysql相关知识点
土卡拉
数据库可能会考的题目1、数据库和数据库管理系统之间的关系?数据库:存储,维护和管理数据的集合数据库管理系统:其实就是数据库管理软件,通过它可以进行数据库的管理和维护工作2、sql语言分类DDL数据定义语言库表结构DML数据操作语言数据增删改DQL数据查询语言数据查询DCL数据控制语言3、库层的增删改查创建库createdatabase数据库名defaultcharset=utf8;删除库dropd
- Clion中文乱码
翩翩公子银圈圈
通常使用c++是用vs,但是如果使用Clion感觉很好的样子,毕竟这个公司其他产品用的很开心。极简配置教程:https://www.jianshu.com/p/1aa989808e15当你输出中文时出现:printf("输出长度");经历很多配置的人很淡定的会想到编码问题,所以我们就很淡定的打开setting将所有的encodeing改为utf-8本以为就结束了,结果还是字符还是鬼都不认识,是不是
- 【Spring】Spring循环依赖的解决方案
杰哥哥不是个好叔叔
springdubbojava
【Spring】Spring循环依赖的解决方案开篇词:干货篇:1.@PostConstruct方法:2.构造函数注入和Setter方法注入:3.配置文件注明【允许存在循环引用】
[email protected]的getBean我是杰叔叔,一名沪漂的码农,下期再会!开篇词:本篇不介绍循环依赖的简介和原理(想了解,自行百度哈),纯分享下解决方案。ps:解决方案的优雅程度依次递增干货篇:1.@Pos
- React面试题
涔溪
Reactreact.js前端前端框架
1、当你调用setState的时候,发生了什么事?将传递给setState的对象合并到组件的当前状态,这将启动一个和解的过程,构建一个新的react元素树,与上一个元素树进行对比(diff),从而进行最小化的重渲染。2、React项目用过什么脚手架(本题是开放性题目)creat-react-appYeoman等3、什么时候用类组件ClassComponent,或函数组件Functi如果您的组件具有
- error:0308010C:digital envelope routines::unsupported【超详细图解】
舊時王謝堂前燕
前端node.jsnpm
目录一、报错信息二、分析原因三、解决方案一、报错信息二、分析原因node.js18不兼容oppsll,node.jsv17以上版本中最近发布的OpenSSL3.0,而OpenSSL3.0对允许算法和密钥大小增加了严格的限制三、解决方案方案1:打开终端,直接输入Linux&MacOS:exportNODE_OPTIONS=--openssl-legacy-providerWindows:setNOD
- SparkStreaming结合kafka将offSet保存在redis中
哈哈xxy
bigdatasparkStreamingkafkaoffsetredis
SparkStreaming结合kafka将offSet保存在redis中SparkStreaming结合kafka的两种方式1、SparkStreaming的高级APiCreateDStream,容易发生数据多次读取,官方已经不推荐2、SparkStreaming的低级APicreateDirectStream需要自己保存offset保存方式有两大类,一类是Spark自带的checkpoint(
- Spark Streaming+Kafka整合+offset管理
JiahuiTian
大数据#Spark#Kafkakafkaspark大数据
Kafka0-8Receiver模式和Direct模式都不适合当前版本不适用,本次学习采用Kafka0-10Direct模式,并通过第三方存储zookeeper来手动管理offset目录前言offset管理一个完整的整合代码Demo(Java版)导入相关的Maven依赖创建通过ZK管理Offset的工具类测试类Demo前言SparkStreaming获取Kafka的数据有两种方式:Receiver
- vue3中,子组件如何向父组件传值
易烊子豪
vue.js前端javascript
写作灵感最近在写项目时,有多个页面都需要使用到一个搜索栏。因此,就需要将搜索栏封装成一个组件,我们在其他组件使用搜索组件时,需要将搜索到的内容传入父组件进行展示。此时,就需要用到子组件向父组件传值了。使用子组件向父组件传递值时,相信遇到最多的便是emit进行传值了。下面我将介绍我用到的两种传值方式:使用setup语法糖和不使用setup语法糖的两种方式。(父组件的书写放在后面)使用setup语法糖
- 学习react day01
花开富贵城
react.js前端前端框架
(1)nodejs.cn中文网版本须较新(2)全局安装npminstallcreate-react-app-g(版本查询create-react-app-V)(3)创建appcreate-react-apptest-app(4)项目创建失败npm证书过期使用淘宝镜像源npmconfigsetregistryhttps://registry.npmmirror.com(5)再重新创建成功------
- Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(Python)
格林威
工业相机数码相机python开发语言计算机视觉人工智能
Baumer工业相机堡盟工业相机如何通过NEOAPISDK使用UserSet功能保存和载入相机的各类参数(Python)Baumer工业相机Baumer工业相机NEOAPISDK中UserSet的技术背景代码案例分享第一步:保存相机当前参数设置UserSet_Save第二步:载入已经保存的相机参数UserSet_Load工业相机SDK中的UserSet功能的优点工业相机SDK中的UserSet功能
- 第四章 Java核心类库 第三节 集合框架
爱掉发的小龙
javawindows开发语言学习笔记
1.集合框架概述与结构首先,我们来简单了解一下Java集合框架的概述和结构。集合框架的定义:Java集合框架是一组用来存储和操作数据集合的接口和类。它提供了一种统一的标准方法来操作不同的数据集合,极大简化了编程任务。集合框架的结构:集合框架包括三大主要接口:List接口:用于存储有序且可以重复的元素。Set接口:用于存储无序且不重复的元素。Map接口:用于存储键值对,键不能重复但值可以重复。这些接
- JavaScript-防抖和节流
好哈优学编程
javascript开发语言
防抖(debounce):如果一个函数持续地触发,那么只在它停止触发的一段时间后才执行,如果在这段时间内又开始持续触发,则重新计算时间。防抖函数的实现如下:functiondebounce(func,wait){lettimeout;returnfunction(){clearTimeout(timeout);timeout=setTimeout(()=>{func.apply(this,argu
- 2019-09-23 A lovable eccentric
RoadToGood
Trueeccentricsneverdeliberatelysetouttodrawattentiontothemselves.Theydisregardsocialconventionswithoutbeingconsciousthattheyaredoinganythingextraordinary.Thisinvariablywinsthemtheloveandrespectofother
- 基于vue-cli3,全局集成 scss | sass
PHP的点滴
Css的预处理器如果项目中没有scss预处理器,需要安装npminstall-Dsass-loadernode-sass修改配置文件vue.config.jsconstfs=require('fs')module.exports={css:{loaderOptions:{sass:{data:fs.readFileSync('src/assets/css/variable.scss','utf-8
- 在线图书管理系统”的Vue.js项目
hai40587
vue.js前端javascript
项目概述假设我们正在构建一个名为“在线图书管理系统”的Vue.js项目。该系统允许用户浏览图书列表、搜索图书、查看图书详情、添加新书到购物车以及进行用户认证(登录、注册)。我们将使用Vue.js2.x(或Vue3.x,视你偏好而定),结合VueRouter进行页面路由管理,Vuex进行状态管理,以及Axios进行HTTP请求。项目结构/online-bookstore/src/assets-log
- openshift启动失败error: dial tcp 192.168.88.31:8443: connect: connection refused - verify you have provi
荒了流年碎了夢
openshifttcp/ip网络
error:dialtcp192.168.88.31:8443:connect:connectionrefused-verifyyouhaveprovidedthecorrecthostandportandthattheserveriscurrentlyrunning.vi/etc/selinux/config修改SELINUX=1即可接下来再执行setenforce0
- 远程控制中如何修改Linux系统名 移动文件 进入vim修改文件内容
蛋挞小丸子
linux
1.打开Linux系统的命令端口。vim输入hostname查看系统名称2.短暂修改系统名称。输入hostname(名称)然后退出系统输入exit重新登录linux系统再次输入hostname即可查看修改的系统名称3.永久修改系统名称。输入hostnamectlset-hostname(想要的系统名称)重启系统后仍是修改后的名称4.输入hostnamectlstatus查看系统名称如何创建文档和内
- Neuron协议网关的北向应用插件开发
神一样的老师
工业互联网网络华为云物联网
目录概述指令处理层开发应用层开发.open.close.init.uninit.start.stop.setting.request插件设置文件适配华为的思路概述最近研究了一段时间的Neuron协议网关,前面的博文也提到它虽然能够把数据发到华为的IoT平台上,但是不支持华为的物模型,都是以自己的数据形式发送的。如果想支持华为的模型,就必须开发北向应用插件。今天就学习一下相关的开发。北向应用开发主要
- jenkins任务中无法执行sudo,管理员操作
北陌宝宝
疑难问题点jenkins运维
搬运一下老博客写的内容过来jenkins默认使用jenkins普通用户权限去操作服务器命令,涉及管理员的命令时就无法操作,需要把jenkins用户添加到sudo组,这个输入sudo时不用输入密码vim/etc/sudoers#添加jenkinsALL=(ALL)NOPASSWD:ALL当jenkins时间和服务器时间不一致时,在系统管理-脚本运行命令中执行System.setProperty('o
- C# 基于NModbus4的数据读写
那人_那事
c#Modbus
本文主要介绍基于开源modbus库NModbus4的数据读写添加引用usingModbus.Device;属性privateModbusIpMaster_master;privatestring_ipAddress;privateTcpClient_tcpClient;//////设备IP地址///publicstringIpAddress{get=>_ipAddress;set=>_ipAddr
- Codeforces Round 969 (Div. 2):A - Dora‘s Set题解C++,给自己陷入死胡同了,果然真理总是简洁朴素优美
醒了不起的盖茨比Z
c++算法leetcode动态规划c语言图论笔记
先说答案,有需要的大家看看:#includeusingnamespacestd;#defineendl'\n'intmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);intt,l,r;cin>>t;while(t--){cin>>l>>r;intab=r-l+1;//这一行数字的长度if((ab%4==3)&&r%2!=0)//奇数结尾会有
- 机器学习(2)单变量线性回归
天凉玩个锤子
2.1模型表示我们学习的第一个算法是线性回归算法。在监督学习中,我们有一个数据集,这个数据集被称为训练集(TrainingSet)。我们用小写字母m来表示训练样本的数目。监督学习算法的工作方式以房屋价格的训练为例,将训练集里房屋价格喂给学习算法,学习算法工作后输出一个函数h,h代表hypothesis(假设)。函数h输入为房屋尺寸大小x,h根据输入来得出y值,y值对应房子的价格。因此,h是一个从x
- springboot 单体服务运行bat脚本
bencolyy
javaspringbootjavalinux
springboot服务一般是打包成jar运行在windows服务器上面一般是cmd窗口输入命令启动服务,或者注册成windows服务开机启动,今天写了一个简单的bat脚本,输入参数重新运行指定jar包@echooffsetlocalenabledelayedexpansionchcp65001echo=echospringboot服务运行脚本echo=echo注意运行命令前需要配置【java环境
- 大屏可视化项目之vue3-seamless-scroll无缝滚动组件(一)——基本使用_vue seamless scroll官网
2401_84411822
vue.jsjavascript前端
import{defineComponent,ref}from“vue”;import{Vue3SeamlessScroll}from“vue3-seamless-scroll”;exportdefaultdefineComponent({name:“App”,components:{Vue3SeamlessScroll},setup(){constlist=ref([{title:“Vue3.0
- CSS 自定义滚动条样式
MGLMONSTER
/*定义滚动条高宽及背景高宽分别对应横竖滚动条的尺寸*/::-webkit-scrollbar{width:10px;height:10px;background-color:#F5F5F5;}/*定义滚动条轨道内阴影+圆角*/::-webkit-scrollbar-track{-webkit-box-shadow:inset006pxrgba(0,0,0,0.3);border-radius:1
- sqlsugar 不映射字段,sqlsugar 忽略字段。sqlsugar 字段改名。
djk8888
数据库
sqlsugar不映射字段,sqlsugar忽略字段。利用特性SugarColumn,将IsIgnore设置为True即可![SugarColumn(IsIgnore=true)]//sqlsugar忽略字段publicdecimalMaxTemp{get;set;}这样Sqlsugar增删改查数据库的时候自动跳过该字段,但是操作实体的时候依然可以访问到该字段,进行赋值或取值。在SqlSugar中
- 继之前的线程循环加到窗口中运行
3213213333332132
javathreadJFrameJPanel
之前写了有关java线程的循环执行和结束,因为想制作成exe文件,想把执行的效果加到窗口上,所以就结合了JFrame和JPanel写了这个程序,这里直接贴出代码,在窗口上运行的效果下面有附图。
package thread;
import java.awt.Graphics;
import java.text.SimpleDateFormat;
import java.util
- linux 常用命令
BlueSkator
linux命令
1.grep
相信这个命令可以说是大家最常用的命令之一了。尤其是查询生产环境的日志,这个命令绝对是必不可少的。
但之前总是习惯于使用 (grep -n 关键字 文件名 )查出关键字以及该关键字所在的行数,然后再用 (sed -n '100,200p' 文件名),去查出该关键字之后的日志内容。
但其实还有更简便的办法,就是用(grep -B n、-A n、-C n 关键
- php heredoc原文档和nowdoc语法
dcj3sjt126com
PHPheredocnowdoc
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Current To-Do List</title>
</head>
<body>
<?
- overflow的属性
周华华
JavaScript
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml&q
- 《我所了解的Java》——总体目录
g21121
java
准备用一年左右时间写一个系列的文章《我所了解的Java》,目录及内容会不断完善及调整。
在编写相关内容时难免出现笔误、代码无法执行、名词理解错误等,请大家及时指出,我会第一时间更正。
&n
- [简单]docx4j常用方法小结
53873039oycg
docx
本代码基于docx4j-3.2.0,在office word 2007上测试通过。代码如下:
import java.io.File;
import java.io.FileInputStream;
import ja
- Spring配置学习
云端月影
spring配置
首先来看一个标准的Spring配置文件 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi=&q
- Java新手入门的30个基本概念三
aijuans
java新手java 入门
17.Java中的每一个类都是从Object类扩展而来的。 18.object类中的equal和toString方法。 equal用于测试一个对象是否同另一个对象相等。 toString返回一个代表该对象的字符串,几乎每一个类都会重载该方法,以便返回当前状态的正确表示.(toString 方法是一个很重要的方法) 19.通用编程:任何类类型的所有值都可以同object类性的变量来代替。
- 《2008 IBM Rational 软件开发高峰论坛会议》小记
antonyup_2006
软件测试敏捷开发项目管理IBM活动
我一直想写些总结,用于交流和备忘,然都没提笔,今以一篇参加活动的感受小记开个头,呵呵!
其实参加《2008 IBM Rational 软件开发高峰论坛会议》是9月4号,那天刚好调休.但接着项目颇为忙,所以今天在中秋佳节的假期里整理了下.
参加这次活动是一个朋友给的一个邀请书,才知道有这样的一个活动,虽然现在项目暂时没用到IBM的解决方案,但觉的参与这样一个活动可以拓宽下视野和相关知识.
- PL/SQL的过程编程,异常,声明变量,PL/SQL块
百合不是茶
PL/SQL的过程编程异常PL/SQL块声明变量
PL/SQL;
过程;
符号;
变量;
PL/SQL块;
输出;
异常;
PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言PL/SQL 是对 SQL 的扩展,sql的执行时每次都要写操作
- Mockito(三)--完整功能介绍
bijian1013
持续集成mockito单元测试
mockito官网:http://code.google.com/p/mockito/,打开documentation可以看到官方最新的文档资料。
一.使用mockito验证行为
//首先要import Mockito
import static org.mockito.Mockito.*;
//mo
- 精通Oracle10编程SQL(8)使用复合数据类型
bijian1013
oracle数据库plsql
/*
*使用复合数据类型
*/
--PL/SQL记录
--定义PL/SQL记录
--自定义PL/SQL记录
DECLARE
TYPE emp_record_type IS RECORD(
name emp.ename%TYPE,
salary emp.sal%TYPE,
dno emp.deptno%TYPE
);
emp_
- 【Linux常用命令一】grep命令
bit1129
Linux常用命令
grep命令格式
grep [option] pattern [file-list]
grep命令用于在指定的文件(一个或者多个,file-list)中查找包含模式串(pattern)的行,[option]用于控制grep命令的查找方式。
pattern可以是普通字符串,也可以是正则表达式,当查找的字符串包含正则表达式字符或者特
- mybatis3入门学习笔记
白糖_
sqlibatisqqjdbc配置管理
MyBatis 的前身就是iBatis,是一个数据持久层(ORM)框架。 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis对JDBC进行了一次很浅的封装。
以前也学过iBatis,因为MyBatis是iBatis的升级版本,最初以为改动应该不大,实际结果是MyBatis对配置文件进行了一些大的改动,使整个框架更加方便人性化。
- Linux 命令神器:lsof 入门
ronin47
lsof
lsof是系统管理/安全的尤伯工具。我大多数时候用它来从系统获得与网络连接相关的信息,但那只是这个强大而又鲜为人知的应用的第一步。将这个工具称之为lsof真实名副其实,因为它是指“列出打开文件(lists openfiles)”。而有一点要切记,在Unix中一切(包括网络套接口)都是文件。
有趣的是,lsof也是有着最多
- java实现两个大数相加,可能存在溢出。
bylijinnan
java实现
import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class BigIntegerAddition {
/**
* 题目:java实现两个大数相加,可能存在溢出。
* 如123456789 + 987654321
- Kettle学习资料分享,附大神用Kettle的一套流程完成对整个数据库迁移方法
Kai_Ge
Kettle
Kettle学习资料分享
Kettle 3.2 使用说明书
目录
概述..........................................................................................................................................7
1.Kettle 资源库管
- [货币与金融]钢之炼金术士
comsci
金融
自古以来,都有一些人在从事炼金术的工作.........但是很少有成功的
那么随着人类在理论物理和工程物理上面取得的一些突破性进展......
炼金术这个古老
- Toast原来也可以多样化
dai_lm
androidtoast
Style 1: 默认
Toast def = Toast.makeText(this, "default", Toast.LENGTH_SHORT);
def.show();
Style 2: 顶部显示
Toast top = Toast.makeText(this, "top", Toast.LENGTH_SHORT);
t
- java数据计算的几种解决方法3
datamachine
javahadoopibatisr-languer
4、iBatis
简单敏捷因此强大的数据计算层。和Hibernate不同,它鼓励写SQL,所以学习成本最低。同时它用最小的代价实现了计算脚本和JAVA代码的解耦,只用20%的代价就实现了hibernate 80%的功能,没实现的20%是计算脚本和数据库的解耦。
复杂计算环境是它的弱项,比如:分布式计算、复杂计算、非数据
- 向网页中插入透明Flash的方法和技巧
dcj3sjt126com
htmlWebFlash
将
Flash 作品插入网页的时候,我们有时候会需要将它设为透明,有时候我们需要在Flash的背面插入一些漂亮的图片,搭配出漂亮的效果……下面我们介绍一些将Flash插入网页中的一些透明的设置技巧。
一、Swf透明、无坐标控制 首先教大家最简单的插入Flash的代码,透明,无坐标控制: 注意wmode="transparent"是控制Flash是否透明
- ios UICollectionView的使用
dcj3sjt126com
UICollectionView的使用有两种方法,一种是继承UICollectionViewController,这个Controller会自带一个UICollectionView;另外一种是作为一个视图放在普通的UIViewController里面。
个人更喜欢第二种。下面采用第二种方式简单介绍一下UICollectionView的使用。
1.UIViewController实现委托,代码如
- Eos平台java公共逻辑
蕃薯耀
Eos平台java公共逻辑Eos平台java公共逻辑
Eos平台java公共逻辑
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年6月1日 17:20:4
- SpringMVC4零配置--Web上下文配置【MvcConfig】
hanqunfeng
springmvc4
与SpringSecurity的配置类似,spring同样为我们提供了一个实现类WebMvcConfigurationSupport和一个注解@EnableWebMvc以帮助我们减少bean的声明。
applicationContext-MvcConfig.xml
<!-- 启用注解,并定义组件查找规则 ,mvc层只负责扫描@Controller -->
<
- 解决ie和其他浏览器poi下载excel文件名乱码
jackyrong
Excel
使用poi,做传统的excel导出,然后想在浏览器中,让用户选择另存为,保存用户下载的xls文件,这个时候,可能的是在ie下出现乱码(ie,9,10,11),但在firefox,chrome下没乱码,
因此必须综合判断,编写一个工具类:
/**
*
* @Title: pro
- 挥洒泪水的青春
lampcy
编程生活程序员
2015年2月28日,我辞职了,离开了相处一年的触控,转过身--挥洒掉泪水,毅然来到了兄弟连,背负着许多的不解、质疑——”你一个零基础、脑子又不聪明的人,还敢跨行业,选择Unity3D?“,”真是不自量力••••••“,”真是初生牛犊不怕虎•••••“,••••••我只是淡淡一笑,拎着行李----坐上了通向挥洒泪水的青春之地——兄弟连!
这就是我青春的分割线,不后悔,只会去用泪水浇灌——已经来到
- 稳增长之中国股市两点意见-----严控做空,建立涨跌停版停牌重组机制
nannan408
对于股市,我们国家的监管还是有点拼的,但始终拼不过飞流直下的恐慌,为什么呢?
笔者首先支持股市的监管。对于股市越管越荡的现象,笔者认为首先是做空力量超过了股市自身的升力,并且对于跌停停牌重组的快速反应还没建立好,上市公司对于股价下跌没有很好的利好支撑。
我们来看美国和香港是怎么应对股灾的。美国是靠禁止重要股票做空,在
- 动态设置iframe高度(iframe高度自适应)
Rainbow702
JavaScriptiframecontentDocument高度自适应局部刷新
如果需要对画面中的部分区域作局部刷新,大家可能都会想到使用ajax。
但有些情况下,须使用在页面中嵌入一个iframe来作局部刷新。
对于使用iframe的情况,发现有一个问题,就是iframe中的页面的高度可能会很高,但是外面页面并不会被iframe内部页面给撑开,如下面的结构:
<div id="content">
<div id=&quo
- 用Rapael做图表
tntxia
rap
function drawReport(paper,attr,data){
var width = attr.width;
var height = attr.height;
var max = 0;
&nbs
- HTML5 bootstrap2网页兼容(支持IE10以下)
xiaoluode
html5bootstrap
<!DOCTYPE html>
<html>
<head lang="zh-CN">
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">