- 基于MySQL的分布式锁实现(Spring Boot + MyBatis)
weixin_43833540
mysql分布式springboot
基于MySQL的分布式锁实现(SpringBoot+MyBatis)实现原理基于数据库的唯一索引特性实现分布式锁,通过插入唯一索引记录表示获取锁,删除记录表示释放锁。1.创建锁表首先需要在MySQL中创建一个锁表,用于存储锁信息:CREATETABLE`distributed_lock`(`id`bigint(20)NOTNULLAUTO_INCREMENT,`lock_key`varchar(6
- Midscene.js 安装与配置指南
孙爽知Kody
Midscene.js安装与配置指南midsceneLetAIbeyourbrowseroperator.项目地址:https://gitcode.com/gh_mirrors/mid/midscene1.项目基础介绍Midscene.js是一个开源项目,旨在通过AI驱动浏览器自动化操作。用户可以使用自然语言描述任务需求,Midscene.js将自动执行相应的浏览器操作,如数据提取、页面验证等。该
- xdata的使用
一切顺势而行
bigdata
{"job":{"setting":{"speed":{"channel":3},"errorLimit":{"record":0,"percentage":0.02}},"content":[{"reader":{"name":"mysqlreader","parameter":{"username":"root","password":"123456","column":["id","name
- PAT A1052 Linked List Sorting C++ 主要的坑
sisi-mia
PAT甲级算法c++学习pat考试
Alinkedlistconsistsofaseriesofstructures,whicharenotnecessarilyadjacentinmemory.WeassumethateachstructurecontainsanintegerkeyandaNextpointertothenextstructure.Nowgivenalinkedlist,youaresupposedtosortt
- Host '*' is not allowed to connect to this MariaDB server
weixin_34358365
数据库python
2019独角兽企业重金招聘Python工程师标准>>>MYSQL权限问题原因:安装MySQL时没有勾选“Enablerootaccessfromremotemachines”如何开启MySQL的远程帐号-1)首先以root帐户登陆MySQL在Windows主机中点击开始菜单,运行,输入“cmd”,进入控制台,然后cd进入MySQL的bin目录下,然后输入下面的命令。>MySQL-uroot-p12
- 解决报错:错误1130- Host xxx is not allowed to connect to this MariaDb server
phymat.nico
系统内核
这个问题是因为在数据库服务器中的mysql数据库中的user的表中没有权限(也可以说没有用户),下面将记录我遇到问题的过程及解决的方法。在搭建完LNMP环境后用Navicate连接出错遇到这个问题首先到mysql所在的服务器上用连接进行处理1、连接服务器:mysql-uroot-p2、看当前所有数据库:showdatabases;3、进入mysql数据库:usemysql;4、查看mysql数据库
- JAVA springboot Access-Control-Allow-Origin
墨着染霜华
javaspringbootspring
response.setHeader("Access-Control-Allow-Origin","https:/your-domain.com");意思是:只有来自https:/your-domain.com的前端页面(即请求的来源Origin是这个域名),才能通过浏览器发起跨域请求访问这个接口区分大小写&完全匹配这个设置是完全匹配的,也就是说:https://epos.whbswdt.com
- Java web%10
好学且牛逼的马
java前端AI编程
%10新路线Javawebai笔记阶段时长内容Web前端基础2天HTML、CSS、JS、Vue3、AjaxWeb后端基础4天Maven、HTTP协议、SpringIOC、DI、MySQL、JDBC、MybatisWeb后端实战6天Tlias案例(基于案例讲解web开发的核心知识)Web后端进阶2天SpringAOP、SpringBoot原理、自定义Starter、Maven高级前端web实战4天V
- Host ‘db01‘ is not allowed to connect to this MariaDB server 怎么解决?
teayear
云原生mariadb数据库云计算运维岗位运维技术
出现错误ERROR1130(HY000):Host'db01'isnotallowedtoconnecttothisMariaDBserver,表示当前用户test没有足够的权限从主机db01连接到MariaDB服务器。以下是逐步解决方案:1.检查用户权限登录MariaDB服务器(需本地或通过其他有权客户端),执行以下命令查看用户权限:SELECTuser,hostFROMmysql.userWH
- MyBatis逆向工程生成 (生成pojo、mapper.xml、mapper.java)
weixin_30701521
java数据库
MyBatis逆向工程生成mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java、mapper.xml、pojo…),可以让程序员将更多的精力放在繁杂的业务逻辑上。企业实际开发中,常用的逆向工程方式:由数据库的表生成java代码。之所以强调单表两个字,是因为Mybatis逆向工程生成的Mapper所进行
- MyBatis-Plus 分页功能详解
MyBatis-Plus分页功能详解1.前言MyBatis-Plus是MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,简化开发、提高效率。其中分页功能是日常开发中非常常用的功能,本文将详细介绍MyBatis-Plus的分页功能使用。2.配置分页插件首先需要在SpringBoot项目中配置分页插件:@ConfigurationpublicclassMybatisPlusConfi
- DTO、VO、POJO与实体类使用方案(结合Mapper.xml)
csdn_HPL
xmlwindows
结合MyBatis的Mapper.xml文件,展示完整的层级数据流转和数据库操作。1.实体类优化(Entity)//User.java@Data@NoArgsConstructor@AllArgsConstructor@TableName("sys_user")publicclassUser{@TableId(type=IdType.AUTO)privateLonguserId;@NotBlank
- 后端技术:利用 MySQL 实现数据加密
大厂资深架构师
SpringBoot开发实战mysql数据库ai
后端技术:利用MySQL实现数据加密关键词:MySQL数据加密、AES加密、数据库安全、数据保护、加密算法、密钥管理、SQL注入防御摘要:本文深入探讨如何在MySQL数据库中实现数据加密,保护敏感信息免受未授权访问。我们将从加密的基本原理出发,详细讲解MySQL支持的多种加密方式,包括AES、SHA等算法的实现方法。文章包含完整的代码示例和最佳实践,帮助开发者在实际项目中应用数据加密技术,同时讨论
- 番外:MySQL的一些事务处理
红中马喽
mysql数据库学习笔记开发语言后端
前言因为前天没更新,多补一更,简单介绍一下后端数据库MySQL的事务处理什么是事务处理事务(Transaction):事务是一组SQL语句的执行单元,这些语句被视为一个单独的工作单元。事务的主要目的是保证数据库操作的原子性,即这些操作要么全部执行,要么全部不执行简单来说,事务是用来保证数据库的一致性,完整性的,关于事务处理我们需要提到ACID性A.原子性(Atomicity):事务中的所有操作要么
- 安装mysql数据库的一系列心得
以下是详细的MySQL数据库安装教程:Windows系统一、下载安装包1.打开浏览器,访问MySQL官方网站(https://dev.mysql.com/downloads/mysql/)。2.在下载页面,根据你的Windows操作系统版本(32位或64位)选择合适的MySQLCommunityServer安装包。一般推荐下载最新的稳定版本。3.下载完成后,找到安装文件(.msi格式)。二、安装过
- MySQL之MVCC实现原理深度解析
AA-代码批发V哥
MySQLmysql数据库
MySQL之MVCC实现原理深度解析一、MVCC基础:为什么需要多版本控制?1.1并发访问的痛点1.2MVCC的核心目标二、MVCC核心组件:构建多版本世界的基石2.1隐藏字段:数据版本的"身份证"2.2Undo日志:版本回溯的"时间机器"2.2.1Undo日志类型2.2.2Undo日志的生命周期2.3版本链:数据演变的"历史轨迹"2.4ReadView:版本可见性的"过滤器"三、MVCC核心逻辑
- C++ 快速回顾(四)
帅_shuai_
C++c++
C++快速回顾(四)前言一、纯虚函数二、final关键字1.作用到函数2.作用到类三、虚函数原理四、Lambda一些知识补充前言用于快速回顾之前遗漏或者补充C++知识一、纯虚函数纯虚函数主要是当接口,没有具体的实现要到派生类去实现。纯虚函数不能直接实例化,类似c#中的抽象函数classMyClassBase{public:virtualvoidInit()=0;virtualvoidDestroy
- MySQL 中的锁机制详解:原理、实现方式与实战解析!
程序猿Mr.wu
MySQLmysql数据库
MySQL中的锁机制详解:原理、实现方式与实战解析!锁的世界,比你想象得更精彩!一、为什么要有锁?在并发环境下,多线程操作数据库的同一份数据时,如果没有锁机制,可能会出现以下问题:脏读:读取了另一个事务未提交的数据。不可重复读:同一事务中多次读取结果不一致。幻读:读取时发现记录“凭空”出现或消失。锁的存在,就是为了保证并发情况下的数据一致性与隔离性。二、MySQL中锁的分类1.按作用范围分类分类说
- C++中对象传参的几种方式
递归书房
c++
在C++中传递对象作为函数参数有多种方式,每种方式都有不同的语义、性能特点和适用场景。以下是全面的分析和最佳实践指南:1.按值传递(PassbyValue)voidprocessObject(MyClassobj){//操作obj的副本}MyClassoriginal;processObject(original);//复制构造新对象特点:创建对象的完整副本函数内修改不影响原始对象调用时发生复制构
- Mysql回表查询:深入解析与实战应用
需要重新演唱
mysqlmysql数据库
Mysql回表查询:深入解析与实战应用今天,我们将深入探讨Mysql中的回表查询。回表查询是Mysql索引机制中的一个重要概念,理解它的工作原理和优化方法,对于提升数据库查询性能至关重要。让我们一起揭开回表查询的神秘面纱。1.什么是回表查询?回表查询(LookupQuery)是指在使用非聚集索引(Non-ClusteredIndex)进行查询时,如果需要获取的数据不在索引页中,就需要根据索引页中的
- mysql表卡死_解决mysql表不能查询修改删除等操作并出现卡死
豪睿刘爱上楼楼梯
mysql表卡死
问题现象1:进程wait卡住测试环境mysql出现了一个怪表:select查询表卡死,alter修改表卡死,甚至我不想要这个表了,delete、truncate、drop表都卡死卡主了......解决办法:>showfullprocesslist;//列出进程,找出处于waiting的process,要杀死这些process............>killID;//ID号就是指的列出的第一列“I
- Flutter中FutureBuilder和StreamBuilder
北极象
#Flutterflutterjavascript前端
在Flutter中,如果你想让FutureBuilder的future函数再次执行,可以通过以下几种方式实现:方法1:使用Key强制重建FutureBuilder通过改变FutureBuilder的key,可以强制Flutter重建它,从而重新执行future函数:classMyWidgetextendsStatefulWidget{@override_MyWidgetStatecreateSta
- SQL学习笔记1
1.数据库1、什么是数据库数据库(DB)即用于存放数据的服务器,如MySQL等软件是数据库管理系统(DBMS),用于管理存放在数据库中的数据,SQL是用于操作DBMS的标准语言。2、数据库的类型数据库分为关系型数据库和非关系型数据库;关系型数据库是指用建立在关系模型上互相关联的二维表组成的数据库,MySQL是用于管理关系型数据库的数据库管理系统2.MySQL启动与连接1、MySQL启动安装好MyS
- Centos7.9+mysql8.0开启指定IP远程连接数据库
洋滔
服务器数据库tcp/ipmysql
公司服务器换了,需要重新搭建下web环境,在配置mysql远程连接的时候碰到了几个坑,之前也配置过,但这次由于mysql版本的不同,配置方法稍微不同,这里做个记录。首先是,创建mysql用户,命令如下CREATEUSER'jkxtc178'@'215.55.284.149';@‘IP’,如果你不想指定ip访问,使用%即可,下边的命令出现@'IP’的都是这样。然后是设置用户登陆密码:ALTERUSE
- MySQL 连接指定端口后,为什么实际仍是 3306?
XMYX-0
mysql数据库
文章目录MySQL连接指定端口后,为什么实际仍是3306?问题现象复现原因分析没有指定-h,默认走的是本地UnixSocket多实例环境中未显式指定目标地址正确的连接方法方法一:添加-h127.0.0.1方法二:添加--protocol=TCP验证是否连接成功附加说明总结✅建议MySQL连接指定端口后,为什么实际仍是3306?在日常运维或开发过程中,有时我们在使用mysql命令行工具连接MySQL
- 钉钉小程序摸索二:钉钉小程序开发过程中错误解决过程
钉钉小程序开过程中作为小白,很容易遇上各种问题,今天我就以自己开发过程的遇到的问题总结下解决过程或者思路,有小白的同学可以做下参考,发布文章不易,请点赞一下鼓励下,谢谢。目录:TypeError:my.requestisnotafunctionatObject.onSubmit1、钉钉开发过程中接口请求返回TypeError:my.requestisnotafunctionatObject.onS
- mcu secure boot 设计(一、Flash layout)
lwz070
单片机嵌入式硬件
Flashlayout此flash为MCU内部flash,需要硬件保护,防篡改和读取。1.PBL:为bootloader代码pbl中不支持远程升级,仅在APP中支持远程。pbl中可以支持uart和can协议升级。2.globalstate:{runflag//1:runimageA,2:runimageBImageAsecuritypassflag//1:pass,2:failImageBsecu
- [redis系列] 发布订阅 Pub/Sub
en-route
redis数据库缓存
介绍Redis的发布/订阅(Pub/Sub)模式允许发布者通过通道广播消息,发布者不关心是否有订阅者;订阅者根据兴趣接收相关消息,而无需了解具体的发布者。这种机制通过将发布者和订阅者解耦,使得它们不直接依赖于对方,大大提高了系统的扩展性。如果您对Redis相关内容感兴趣,欢迎查看我的Redis系列博客。匹配订阅SUBSCRIBE该命令返回值的第三个表示当前客户端已订阅的频道总数。#订阅频道my_c
- 【.net core】【watercloud】【layui】弹出层回调方法定位当前弹出层位置并调用弹出窗口内部方法
MoFe1
.netcorelayui前端
common.modalOpen({title:"数据生成",url:"your/url/path",width:"95%",height:"90%",yes:function(index,layero){//定位到顶层窗口查找,如果仅使用window,为从当前页面窗口查找,会查找不到信息variframeWin=top.window[layero.find('iframe')[0]['name'
- LLaMA Factory 微调后,迁移模型
激进小猪1002
llamallamafactory人工智能python
方法1:使用HuggingFaceHub(最推荐)fromtransformersimportAutoModelForCausalLM,AutoTokenizer#在源服务器上保存模型到Hubmodel.push_to_hub("your-username/your-model-name")tokenizer.push_to_hub("your-username/your-model-name")
- 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