- 单片机基础模块学习——PCF8591芯片
promising-w
单片机单片机学习嵌入式硬件
一、A/D、D/A模块A——Analog模拟信号:连续变化的信号(很多传感器原始输出的信号都为此类信号)D——Digital数字信号:只有高电平和低电平两种变化(单片机芯片、微控制芯片所能处理的都是数字信号)下面是模拟信号和连续信号的区别为什么需要进行模拟信号和数字信号之间的转换呢?例如,传感器的模拟信号需要给单片机进行处理,但是单片机没法直接读取模拟信号此时需要进行A/D转换(模拟信号——>数字
- python实现dbscan
怎么就重名了
算法python开发语言
python实现dbscan原理DBSCAN(Density-BasedSpatialClusteringofApplicationswithNoise)是一个比较有代表性的基于密度的聚类算法。它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。DBSCAN中的几个定义:Ε邻域:给定对象半径为Ε内的区域称为该对象的Ε邻域;核心对象:如
- 滚雪球学Oracle[1.2讲]:Oracle数据库架构基础
bug菌¹
#滚雪球学Oracleoracle数据库架构数据库
全文目录:前言一、Oracle数据库的物理存储结构详解1.1数据文件的组成与管理数据文件的主要特点:实际操作案例:添加数据文件数据文件管理的优化策略:1.2控制文件的作用与保护策略控制文件的主要作用:控制文件的保护策略:1.3重做日志文件的配置与优化重做日志文件的主要作用:重做日志文件的配置:实际操作案例:查看当前的重做日志组状态二、Oracle数据库的逻辑存储结构详解2.1表空间的类型与管理表空
- QT +MYSQL+PYTHON,完成一个数据库表的增删改查
laocooon523857886
QTPython数据库qtmysql
ui_form.py#-*-coding:utf-8-*-##################################################################################FormgeneratedfromreadingUIfile'form.ui'####Createdby:QtUserInterfaceCompilerversion6.8.1#
- [VC] 检测AVX系列指令集的支持级别(AVX、AVX2、F16C、FMA、FMA4、XOP)
zyl910
#All-所有SIMDc汇编functionreferenceapplicationnull
从2011年的SandyBridge微架构处理器开始,现在支持AVX系列指令集的处理器越来越多了。本文探讨如何用VC编写检测AVX系列指令集的程序,并利用了先前的CPUIDFIELD方案。一、AVX系列指令集简介SSE5指令:SSE5是一个纸面上的指令集,并没有最终实现,AMD在2007年8月公布SSE5指令集规范,在2009年5月AMD推出了XOP,FMA4以及CVT16来取代SSE5指令。AV
- C++和Python实现SQL Server数据库导出数据到S3并导入Redshift数据仓库
weixin_30777913
c++python数据库数据仓库sqlserver
用C++实现高性能数据处理,Python实现操作Redshift导入数据文件。在VisualStudio2022中用C++和ODBCAPI导出SQLServer数据库中张表中的所有表的数据为CSV文件格式的数据流,用逗号作为分隔符,用双引号包裹每个数据,字符串类型的数据去掉前后的空格,数据中如果包含双引号,则将一个双引号替换为两个双引号,创建gzip压缩文件,输出数据流写入到gzip压缩文件包中的
- 从腾讯云数据仓库TCHouse安全地转移数据到AWS Redshift
weixin_30777913
数据仓库腾讯云云计算pythonaws
实现从AWSDirectConnect连接到腾讯云数据仓库TCHouse-P、TCHouse-C或TCHouse-D,然后使用AWSGlue读取数据并在AWSRedshift中创建对应表并复制数据,需要按照以下步骤进行操作:网络连接设置AWSDirectConnect配置:在AWS管理控制台中,创建一个DirectConnect连接到你的本地网络或腾讯云所在的网络环境。配置虚拟接口(VIF),确保
- Windows平台下使用DirectX实现的飞行射击游戏详解
不胖的羊
本文还有配套的精品资源,点击获取简介:本文深入解析了一款在Windows平台上利用DirectX技术实现的飞行射击游戏“打飞机大战”。文章涵盖了Windows编程基础、DirectX技术的应用,以及游戏开发中使用的各种技术细节,如实时3D渲染、事件驱动编程、动画和物理模拟、声音处理以及性能优化等。通过这个项目,展示了Windows编程结合DirectX创造游戏的无限可能。1.Windows编程基础
- 代码随想录 Day4 242
qq_40829893
java
242利用哈希表一增一减即可349两个哈希表存储202主要是避免循环循环了就不是快乐1今天题相对比较简单
- SSM框架探秘:Spring 整合 Mybatis 框架
苏-言
mybatisspringjava
搭建和测试MyBatis的环境:编写AccountMapper.xml映射配置文件:select*fromaccount;在web项目中编写SqlMapConfig.xml的配置文件,编写核心配置文件在AccountMapper接口中编写方法:publicinterfaceAccountMapper{publicListfindAll();}编写测试方法(此时数据库还没有数据):@Testpubl
- MyBatis最佳实践:注解开发
苏-言
mybatisjavaspring
注解:@Insert:添加@Update:修改@Delete:删除@Select:查询@Result:实现结果集封装@Results:可以和@Reslult一起使用,封装多个结果集@One:实现一对一和多对一的结果集封装@Many:实现一对多结果集封装MyBatis注解不能实现动态SQL使用:SqlMapConfig.xml配置文件编写注解:增删改查:@Select("select*fromuse
- MyBatis最佳实践:提升数据库交互效率的秘密武器
苏-言
mybatis数据库
第一章:框架的概述:MyBatis框架的概述:MyBatis是一个优秀的基于Java的持久框架,内部对JDBC做了封装,使开发者只需要关注SQL语句,而不关注JDBC的代码,使开发变得更加的简单MyBatis通过XML或者注解的方式将要执行的各种Statement对象配置起来,通过Java对象和statement中SQL后,最终将结果已Java对象返回MyBatis采用了ORM的思想ORM思想:在
- 【Golang 面试题】每日 3 题(四十四)
Pandaconda
#Golang面试专栏golang开发语言后端面试笔记
✍个人博客:Pandaconda-CSDN博客专栏地址:http://t.csdnimg.cn/UWz06专栏简介:在这个专栏中,我将会分享Golang面试中常见的面试题给大家~❤️如果有收获的话,欢迎点赞收藏,您的支持就是我创作的最大动力130.goroutine阻塞、唤醒和退出状态阻塞channel的读写操作、等待锁、等待网络数据、系统调用等都有可能发生阻塞,会调用底层函数runtime.go
- 新手安装新版Anaconda找不到 Anaconda prompt ?没出现在开始菜单。
行者将至X
PyTorch深度学习promptpython开发语言人工智能学习
当安装Anaconda新版本之后,发现开始菜单没有Anacondaprompt等一系列的快捷方式。查询了很多资料,也卸载重装了,对于小白来说,有些太复杂听不懂。我解决的办法:第一步:win+R输入cmd进入命令行,进入到Anaconda的安装目录,语句:cdAnaconda的安装目录。例如我的:(这里注意,要先F:进入到F盘路径上)我安装的路径是F:\anaconda3F:进入F盘之后再:cdF:
- Oracle登录时忘记用户名或密码,怎么办?
杨云龙666
oracle数据库sqldatabase数据库开发笔记经验分享
Oracle默认用户名和密码(注意:Oracle12c规定用户名都必须以C##开头,否则无法使用。)1.用户名:sys密码:change_on_install或者managerassysdba2.用户名:system密码:manager3.用户名:scott密码:tiger一、忘记账户:可以使用以上默认账号其中一个用户及密码,在PL/SQL管理工具中登录,运行selectusernamefromd
- php ip获取邮政编码,地理位置-如何从IP地址确定邮政编码和城市?
哈士奇爱深海鱼
phpip获取邮政编码
以下是我发现的使用[http://ipinfodb.com/ip_locator.php]来获取其信息的代码段的修改版本。请记住,您也可以向他们申请API密钥,并直接使用API来获取您认为合适的信息。如您所见[http://ipinfodb.com/ip_location_api.php,]他们提供了从PHP到JavaScript到ASP.Net的所有示例。如前所述,下面不需要密钥,因为它可以拉动
- Oracle角色
weixin_30409849
一、概述角色就是相关权限的命令集合,使用角色的主要目的就是为了简化权限的管理。假定有用户a,b,c为了让他们都拥有权限1、连接数据库2、在scott.emp表上select,insert,update如果采用直接授权操作,则需要进行12次授权。如果采用角色就可以简化首先将createsession,selectonscott.emp,insertonscott.emp,updateonscott.
- xxjob部署(记录篇)
smart_ljh
记录篇job开发工具
准备sql脚本并创建数据库#执行脚本创建xxl-job数据库https://gitee.com/xuxueli0323/xxl-job/blob/master/doc/db/tables_xxl_job.sql创建并运行xxjob容器spring.datasource.url:数据库连接地址spring.datasource.username:数据库用户名spring.datasource.pas
- 高频 SQL 50 题(基础版)_1251. 平均售价
TTXS123456789ABC
BS_SQLsql数据库
表:Prices±--------------±--------+|ColumnName|Type|±--------------±--------+|product_id|int||start_date|date||end_date|date||price|int|±--------------±--------+(product_id,start_date,end_date)是prices表的
- innodb内部结构分析
oceanwavewyt
算法transactionsstructureoracle存储insertbuild
BecauseInnoDBisamulti-versionedstorageengine,itmustkeepinformationaboutoldversionsofrowsinthetablespace.Thisinformationisstoredinadatastructurecalledarollbacksegment(afterananalogousdatastructureinOra
- SQL Server约束
昔舍
数据库c#笔记
###1.主键约束(PRIMARYKEY)-**作用**:用于唯一标识表中的每一行记录,确保表中不会存在两条主键值相同的记录,且主键列不允许为`NULL`。一个表只能有一个主键,但主键可以由多个列组成(复合主键)。-**示例**:--创建一个包含主键约束的表CREATETABLEStudents(StudentIDINTPRIMARYKEY,StudentNameNVARCHAR(50));```
- Linux网络抓包分析工具tcpdump
AKA|布鲁克林欧神仙
运维网络linux网络服务器
Linux中的网络抓包分析工具一,TcpdumpLinuxtcpdump命令用于倾倒网络传输数据。执行tcpdump指令可列出经过指定网络界面的数据包文件头,可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你摘取有用信息。由于它需要将网络接口设置为混杂模式,普通用户不能正常执行,但具备root权限的用户
- Oracle 用户及角色 介绍
iteye_20968
数据库
一.用户管理1.1建立用户(数据库验证)CREATEUSERDAVEIDENTIFIEDBYpwdDEFAULTTABLESPACEusersTEMPORARYTABLESPACEtempQUOTA5mONusers;1.2修改用户ALTERUSERDAVEQUOTA0ONSYSTEM;1.3删除用户DROPUSERDAVE;DROPUSERDAVECASCADE;1.4显示用户信息SELECT*
- 14、Java 对象关系映射(ORM)框架:简化数据库操作的利器
翻晒时光
从0学Javajava
嘿,Java开发者们!在我们的编程旅程中,经常会遇到一个重要的任务,那就是将Java对象和数据库表进行交互。传统的JDBC编程虽然强大,但代码往往会变得繁琐且容易出错。这时候,对象关系映射(ORM)框架就闪亮登场啦它可以极大地简化我们的数据库操作,将Java对象和数据库表之间的映射变得更加简单、直观和高效。今天,我们就来深入探讨一下Java中的ORM框架,看看它们是如何改变我们与数据库打交道的方式
- 用bash脚本激活python虚拟环境
这个人很懒,还没有设置昵称...
bashbash
bash脚本内容:#!/bin/bashcondaactivatenamefasta=$1echo$fasta$1就是接受的用户在命令行输入的变量,echo就是打印该变量激活办法:bash-irun.sh参考链接:https://zhuanlan.zhihu.com/p/422365954if语句判断路径是否存在:result=$1if[-f"$result"];thenmkdir$resultf
- 从建表语句带你学习doris_数据类型
圣·杰克船长
doris数据类型
1、前言概述1.1、doris建表模板CREATE[EXTERNAL]TABLE[IFNOTEXISTS][DATABASE.]table_name(column_definition1[,column_deinition2,......][,index_definition1,[,index_definition2,]])[ENGINE=[olap|mysql|broker|hive]][key
- 开源的数据库监控和管理工具—PMM
蚂蚁在飞-
数据库人工智能运维后端
PMM(PerconaMonitoringandManagement)是一个开源的数据库监控和管理工具,主要用于监控MySQL、MariaDB、MongoDB和PostgreSQL等数据库的性能和健康状况。PMM提供了一套可视化的界面,帮助数据库管理员和开发人员对数据库进行深度监控、性能优化和故障排查。PMM由两个主要组件组成:1.PMMServerPMMServer是PMM的核心组件,负责收集和
- doris: MAP数据类型
向阳1218
大数据doris
MAP表示由K,V类型元素组成的map,不能作为key列使用。目前支持在Duplicate,Unique模型的表中使用。K,V支持的类型有:BOOLEAN,TINYINT,SMALLINT,INT,BIGINT,LARGEINT,FLOAT,DOUBLE,DECIMAL,DECIMALV3,DATE,DATEV2,DATETIME,DATETIMEV2,CHAR,VARCHAR,STRINGCSV
- Oracle 创建用户和表空间
天农学子
oracle数据库
Oracle创建用户和表空间使用sys账户登录建立临时表空间--建立临时表空间CREATETEMPORARYTABLESPACETEMP_POS--创建名为TEMP_POS的临时表空间TEMPFILE'/oracle/oradata/POS/TEMP_POS.DBF'--临时文件SIZE50M--其初始大小为50MAUTOEXTENDON--支持自动扩展NEXT50M--20480M--每次增量为
- 一旦Docker出现宕机,运行其中的Oracle数据库如何快速恢复?
邱邱i
Dockerdockeroracle数据库
背景描述:数据库运行中,docker服务异常宕机,如何快速恢复oracle数据库服务场景一:docker服务能够重新拉起,但是容器无法拉起场景二:docker服务无法拉起,一、准备工作禁止Docker的自动拉起修改为novi/usr/lib/systemd/system/docker.serviceRestart=no重启生效[root@e3qiutldor05system]#systemctld
- ASM系列四 利用Method 组件动态注入方法逻辑
lijingyao8206
字节码技术jvmAOP动态代理ASM
这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变方法成员,注入逻辑,也可以
- java编程思想 --内部类
百合不是茶
java内部类匿名内部类
内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅
1,内部类的创建 内部类是创建在类中的
package com.wj.InsideClass;
/*
* 内部类的创建
*/
public class CreateInsideClass {
public CreateInsideClass(
- web.xml报错
crabdave
web.xml
web.xml报错
The content of element type "web-app" must match "(icon?,display-
name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,s
- 泛型类的自定义
麦田的设计者
javaandroid泛型
为什么要定义泛型类,当类中要操作的引用数据类型不确定的时候。
采用泛型类,完成扩展。
例如有一个学生类
Student{
Student(){
System.out.println("I'm a student.....");
}
}
有一个老师类
- CSS清除浮动的4中方法
IT独行者
JavaScriptUIcss
清除浮动这个问题,做前端的应该再熟悉不过了,咱是个新人,所以还是记个笔记,做个积累,努力学习向大神靠近。CSS清除浮动的方法网上一搜,大概有N多种,用过几种,说下个人感受。
1、结尾处加空div标签 clear:both 1 2 3 4
.div
1
{
background
:
#000080
;
border
:
1px
s
- Cygwin使用windows的jdk 配置方法
_wy_
jdkwindowscygwin
1.[vim /etc/profile]
JAVA_HOME="/cgydrive/d/Java/jdk1.6.0_43" (windows下jdk路径为D:\Java\jdk1.6.0_43)
PATH="$JAVA_HOME/bin:${PATH}"
CLAS
- linux下安装maven
无量
mavenlinux安装
Linux下安装maven(转) 1.首先到Maven官网
下载安装文件,目前最新版本为3.0.3,下载文件为
apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令;
2.进入下载文件夹,找到下载的文件,运行如下命令解压
tar -xvf apache-maven-2.2.1-bin.tar.gz
解压后的文件夹
- tomcat的https 配置,syslog-ng配置
aichenglong
tomcathttp跳转到httpssyslong-ng配置syslog配置
1) tomcat配置https,以及http自动跳转到https的配置
1)TOMCAT_HOME目录下生成密钥(keytool是jdk中的命令)
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit
- 关于领号活动总结
alafqq
活动
关于某彩票活动的总结
具体需求,每个用户进活动页面,领取一个号码,1000中的一个;
活动要求
1,随机性,一定要有随机性;
2,最少中奖概率,如果注数为3200注,则最多中4注
3,效率问题,(不能每个人来都产生一个随机数,这样效率不高);
4,支持断电(仍然从下一个开始),重启服务;(存数据库有点大材小用,因此不能存放在数据库)
解决方案
1,事先产生随机数1000个,并打
- java数据结构 冒泡排序的遍历与排序
百合不是茶
java
java的冒泡排序是一种简单的排序规则
冒泡排序的原理:
比较两个相邻的数,首先将最大的排在第一个,第二次比较第二个 ,此后一样;
针对所有的元素重复以上的步骤,除了最后一个
例题;将int array[]
- JS检查输入框输入的是否是数字的一种校验方法
bijian1013
js
如下是JS检查输入框输入的是否是数字的一种校验方法:
<form method=post target="_blank">
数字:<input type="text" name=num onkeypress="checkNum(this.form)"><br>
</form>
- Test注解的两个属性:expected和timeout
bijian1013
javaJUnitexpectedtimeout
JUnit4:Test文档中的解释:
The Test annotation supports two optional parameters.
The first, expected, declares that a test method should throw an exception.
If it doesn't throw an exception or if it
- [Gson二]继承关系的POJO的反序列化
bit1129
POJO
父类
package inheritance.test2;
import java.util.Map;
public class Model {
private String field1;
private String field2;
private Map<String, String> infoMap
- 【Spark八十四】Spark零碎知识点记录
bit1129
spark
1. ShuffleMapTask的shuffle数据在什么地方记录到MapOutputTracker中的
ShuffleMapTask的runTask方法负责写数据到shuffle map文件中。当任务执行完成成功,DAGScheduler会收到通知,在DAGScheduler的handleTaskCompletion方法中完成记录到MapOutputTracker中
- WAS各种脚本作用大全
ronin47
WAS 脚本
http://www.ibm.com/developerworks/cn/websphere/library/samples/SampleScripts.html
无意中,在WAS官网上发现的各种脚本作用,感觉很有作用,先与各位分享一下
获取下载
这些示例 jacl 和 Jython 脚本可用于在 WebSphere Application Server 的不同版本中自
- java-12.求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句
bylijinnan
switch
借鉴网上的思路,用java实现:
public class NoIfWhile {
/**
* @param args
*
* find x=1+2+3+....n
*/
public static void main(String[] args) {
int n=10;
int re=find(n);
System.o
- Netty源码学习-ObjectEncoder和ObjectDecoder
bylijinnan
javanetty
Netty中传递对象的思路很直观:
Netty中数据的传递是基于ChannelBuffer(也就是byte[]);
那把对象序列化为字节流,就可以在Netty中传递对象了
相应的从ChannelBuffer恢复对象,就是反序列化的过程
Netty已经封装好ObjectEncoder和ObjectDecoder
先看ObjectEncoder
ObjectEncoder是往外发送
- spring 定时任务中cronExpression表达式含义
chicony
cronExpression
一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示:
代表含义 是否必须 允许的取值范围 &nb
- Nutz配置Jndi
ctrain
JNDI
1、使用JNDI获取指定资源:
var ioc = {
dao : {
type :"org.nutz.dao.impl.NutDao",
args : [ {jndi :"jdbc/dataSource"} ]
}
}
以上方法,仅需要在容器中配置好数据源,注入到NutDao即可.
- 解决 /bin/sh^M: bad interpreter: No such file or directory
daizj
shell
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具
- [转]for 循环为何可恨?
dcj3sjt126com
程序员读书
Java的闭包(Closure)特征最近成为了一个热门话题。 一些精英正在起草一份议案,要在Java将来的版本中加入闭包特征。 然而,提议中的闭包语法以及语言上的这种扩充受到了众多Java程序员的猛烈抨击。
不久前,出版过数十本编程书籍的大作家Elliotte Rusty Harold发表了对Java中闭包的价值的质疑。 尤其是他问道“for 循环为何可恨?”[http://ju
- Android实用小技巧
dcj3sjt126com
android
1、去掉所有Activity界面的标题栏
修改AndroidManifest.xml 在application 标签中添加android:theme="@android:style/Theme.NoTitleBar"
2、去掉所有Activity界面的TitleBar 和StatusBar
修改AndroidManifes
- Oracle 复习笔记之序列
eksliang
Oracle 序列sequenceOracle sequence
转载请出自出处:http://eksliang.iteye.com/blog/2098859
1.序列的作用
序列是用于生成唯一、连续序号的对象
一般用序列来充当数据库表的主键值
2.创建序列语法如下:
create sequence s_emp
start with 1 --开始值
increment by 1 --増长值
maxval
- 有“品”的程序员
gongmeitao
工作
完美程序员的10种品质
完美程序员的每种品质都有一个范围,这个范围取决于具体的问题和背景。没有能解决所有问题的
完美程序员(至少在我们这个星球上),并且对于特定问题,完美程序员应该具有以下品质:
1. 才智非凡- 能够理解问题、能够用清晰可读的代码翻译并表达想法、善于分析并且逻辑思维能力强
(范围:用简单方式解决复杂问题)
- 使用KeleyiSQLHelper类进行分页查询
hvt
sql.netC#asp.nethovertree
本文适用于sql server单主键表或者视图进行分页查询,支持多字段排序。KeleyiSQLHelper类的最新代码请到http://hovertree.codeplex.com/SourceControl/latest下载整个解决方案源代码查看。或者直接在线查看类的代码:http://hovertree.codeplex.com/SourceControl/latest#HoverTree.D
- SVG 教程 (三)圆形,椭圆,直线
天梯梦
svg
SVG <circle> SVG 圆形 - <circle>
<circle> 标签可用来创建一个圆:
下面是SVG代码:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" c
- 链表栈
luyulong
java数据结构
public class Node {
private Object object;
private Node next;
public Node() {
this.next = null;
this.object = null;
}
public Object getObject() {
return object;
}
public
- 基础数据结构和算法十:2-3 search tree
sunwinner
Algorithm2-3 search tree
Binary search tree works well for a wide variety of applications, but they have poor worst-case performance. Now we introduce a type of binary search tree where costs are guaranteed to be loga
- spring配置定时任务
stunizhengjia
springtimer
最近因工作的需要,用到了spring的定时任务的功能,觉得spring还是很智能化的,只需要配置一下配置文件就可以了,在此记录一下,以便以后用到:
//------------------------定时任务调用的方法------------------------------
/**
* 存储过程定时器
*/
publi
- ITeye 8月技术图书有奖试读获奖名单公布
ITeye管理员
活动
ITeye携手博文视点举办的8月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。
8月试读活动回顾:
http://webmaster.iteye.com/blog/2102830
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《跨终端Web》
gleams:http