- springboot下consul+zuul网关使用简例
mjnkj03
springcloudzuulconsulspringboot网关router
**springboot下consul+zuul网关使用简例zuul网关使用简例pom.xml:添加zuul,服务发现任选这里使用的是consul。配置文件properties:设置consuldiscovery.prefer-ip-address=true;配置zuul的网关路由:path为路径,service-id是其他的服务的spring.application.name的命名。/test1
- python3爬虫——贴吧实战
没耕过田的牛
爬虫python
初学者之贴吧爬虫一、思路二、步骤1.引入库2.载入网页数据3.分析结构提取信息4.将结果写入txt文件中三、封装四、总结一、思路明确目的及需求,以剑来吧为例。本次实例练习准备爬取“剑来吧”每个帖子的标题、帖子链接、发帖作者、发帖时间、回帖数量,那么拿到网页,二话不说先进入开发者模式先观察html文档结构——找规律。因为直接在网页源码上看很难看出结构特征,可以将源码粘贴到工作区排版后再进一步观察,很
- 岩土工程中的有限单元法:渗流问题的理论探索与编程实践
2401_83402415
岩土岩土工程PlaxisAbaqusComsolParaviewFlac3D有限单位法
有限单元法在岩土工程问题中应用非常广泛,很多商业软件如Plaxis/Abaqus/Comsol等都采用有限单元解法。尽管各类商业软件使用方便,但其使用对用户来说往往是一个“黑箱子”。相比而言,开源的有限元程序计算方法透明、计算过程可控,用户可根据自己的需求进行必要的修改,这一点对于科研人员特别重要。岩土工程中的渗流问题(后续将进行强度问题、固结问题等专题),如何一步一步地搭建自己的模型,包括前处理
- 解决WPF item的高度适应控件自身的大小,而不是每个item高度都固定一样
光头达
wpf
最近有个需求,将一些自定义的控件显示在ItemsControl中,通过绑定的方法却发现每个item的高度一样,并非是自定义控件本身的高度,网上搜了堆调整item高度的方法未果,只好自己动手如图是未达到期望效果时的代码图主程序代码:显然这并非预期的效果既然item的高度和宽度不好设置那就看看Test1,Test2的高度和宽度效果是有了,要是每个自定义控件都在生成时给高宽度赋值会很麻烦,那么它为什么不
- 【QT】QFile读取.txt文本文件时,中文乱码问题(已解决)
Wyn_
Qtqtc++QFile
目录0.背景1.修改方法0.背景项目读取一个【.txt】文本文件,显示到下拉框中,其中含有中文,在读取中文相关字段时会出现乱码,代码和显示如下.txt文本内容如下(显示到下拉框时,我做了分割处理):实际读取的是【中文test1】QFilefile(filePath);if(!file.open(QIODevice::ReadOnly|QIODevice::Text)){returnfalse;}Q
- FreeSWITCH在session上执行定时挂机与取消
xdpcxq1029
oracle数据库jvm
一、实验场景环境描述FreeSWITCH测试机:192.168.137.32会议室:test1分机:1000模拟的场景:1)会议室test1邀请分机1000加入会议室在邀请时,添加定时挂机任务。2)分机1000接通后,需要按数字1加入会议;3)如果分机1000在特定时间内按数字1键,则正常入会同时,取消定时挂机任务。4)如果分机1000未在特定时间内按数字1键,则执行超时挂机操作。二、定时挂机描述
- c语言用指针带出局部变量,关于C语言中返回局部变量和局部指针变量
立志学习的羊习习
c语言用指针带出局部变量
{charb[10]="abcde";returnb;}char*test1_ver2(void){staticcharb[10]="abcde";returnb;}char*test2(void){charc[10]="abcde";char*pStr=c;returnpStr;}char*test3(void){char*c="abcdef";returnc;}test1不能运行,甚至可能无法
- kerberos 生成新用户和 keytab 文件
骑着蜗牛向前跑
大数据kerberos新用户keytab文件添加
操作很简单登录认证中心kadmin.local增加用户kadmin.local:addprinc-pw******test1生成keytab文件kadmin.local:ktadd-k/root/test1.keytab-norandkeytest1退出认证中心上下文。测试kinit-kt/root/test1.keytabtest1如果想让Ranger捕获到test1用户,需要将该用户添加到li
- C语言系列2——C语言中的运算符与表达式
theskylife
C语言的成长之路c语言开发语言学习
目录写在开始1.算术运算符与表达式2.关系运算符与逻辑运算符3.运算符优先级与结合性4.实例练习题目4.1题目介绍4.2参考答案写在最后写在开始在学习C语言编程过程中,理解运算符与表达式是至关重要的基础知识。本文将介绍C语言中的算术、关系和逻辑运算符,以及运算符的优先级与结合性,同时提供表达式的构建与计算实例。1.算术运算符与表达式在C语言中,算术运算符用于执行基本的数学运算。常见的算术运算符包括
- VUE动态修改CSS
酸橘子鑫
在常见的vue开发中需要动态修改css的大小,但是又不能像普通的js那样直接修改dom元素,这个时候我们就要用v-bind来绑定所要改变的样式通过操作被绑定的样式的变量来操作样式的显示1.先写要更改的样式更改的样式2.在下面的data里面设置变量test1来控制是否显示css添加控制变量3.在需要操作的对象里面使用v-bind绑定v-bind绑定为了显示的清楚一点下面有test1的值当test1值
- java数组的题目_Java数组实例练习题整理
猫小姐很忧郁
java数组的题目
初级1.定义一个函数,获取某个数组中的最小值packagepractise;publicclassGetMin{publicstaticvoidgetMin(int[]num){intmin=num[0];for(inti=0;imin=(num[i]}System.*out*.print(min);}publicstaticvoidmain(String[]args){int[]a=newint
- glusterfs存储卷分布卷、复制卷测试
daydayup9527
ceph存储gluster存储运维linux学习
分布式卷创建分布卷默认模式类似raid0,hash写入单个文件,节点上是单个文件[root@node1~]#glustervolumecreatetest1node1:/brick/test1volumecreate:test1:success:pleasestartthevolumetoaccessdata[root@node1~]#glustervolumeinfotest1Bricks:Br
- MySQL模糊查询like总结
吃苹果配萝卜
1.MySql的like语句中的通配符:百分号、下划线和escape(以及转译符\)表如下:idname1as%d_2zxcd3a_ad4as%d5fff%%:表示任意个数字符。可匹配任意类型和长度的字符。#查询name的值包含s的SELECT`name`FROM`test1`WHERE`name`LIKE'%s%';结果如下:idname1as%d_4as%d_:表示任意单个字符。匹配单个任意字
- MySQL-Utilities:mysqldiff
a510196774
数据库
园子看到使用MySQL对比数据库表结构,参考测试发现mysql>usetest;createtabletest1(idintnotnullprimarykey,avarchar(10)notnull,bvarchar(10),cvarchar(10)comment'c',dint)ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='test1';createtable
- SpringBoot-测试
思尘S
SpringBootSpringBoot
测试:(1)加入临时属性:给测试添加临时的属性:临时属性可以覆盖掉配置文件中的属性值优势:作用范围小,仅仅影响测试代码的范围@SpringBootTest(properties={"test.prop=test1",""})//设置临时属性,这里要加一个{}publicclassPropertiesAndArgsTest{@Value("${test.prop}")//可以获取配置文件中的属性值,
- Rust方法自动解引用测试,总结和补充
叠叠乐
rust开发语言后端
//定义一个结构体MyBox,包含一个原始指针structMyBox(T);//方法调用.操作,对方法的self进行加&&mut*还有无大小转换traitMyTrait{fntest0(mutself,x:&i32)whereSelf:Sized{println!("test0:{}",x);}fntest1(self,x:&i32)whereSelf:Sized{println!("test1:
- Git 用某一分支的文件,记入另一分支
想想20
如何从其他分支merge指定文件到当前分支,gitcheckout是个合适的工具。gitcheckoutbranch--filename例:分支test上有一个文件A,你在test1分支上,此时如果想用test分支上的A文件替换test1分支上的文件的话,可以使用gitcheckouttest1,然后gitcheckouttest--A————————————————对原文有稍许修改原文链接:ht
- VUE中的mixins用法
得知此事须躬行
vuevuejsvue.jsjavascript
vue的mixins的使用mixins就是混入。一个混入对象可以包含任意组件选项。同一个生命周期,混入对象会比组件的先执行。1.创建一个test.js,用export暴露出mixins对象exportconstmixinsTest={methods:{test1(){console.log("test1");}},created(){this.test1()}}2.在组件中引入这个mixins对象
- C++ Pair 使用
Zebulon
C/C++pairc++stringc
•Pair的创建和初始化C++代码pairtest1;pairtest2;调用默认构造器对其初始化。所以,test1是包含两个空string类型的pair对象;test2中的int型成员获得0.C++代码pairuser("James","harden");coutusers=make_pair("James","harden");make_pair(v1,v2)以v1和v2值创建一个新的pair
- C语言013 第十三课-获取键盘输入scanf() 2019-07-02
泥劳工
voidtest1(void);main(){test1();return0;}voidtest1(){//从键盘上依次进行获取输入然后依次存入赋值变量中,函数可以实现整型、实型、字符型等数据赋值。inta,b,c;inti;floatx;charname[50];printf("请输入三个整数:");scanf("%d%d%d",&a,&b,&c);printf("a%db%dc%d",a,b,
- MaxKey 单点登录认证系统——登录验证流程分析
努力的Ethan
MaxKey单点登录认证系统java
客户端依赖包net.unicon.cascas-client-autoconfig-support2.3.0-GA未登录时浏览器向客户端发送请求http://localhost:8989/test1/index客户端:AbstractTicketValidationFilter过滤器拦截publicfinalvoiddoFilter(ServletRequestservletRequest,Ser
- 记录pytorch常用的维度转换方法
嘿,兄弟,好久不见
深度学习经验总结python人工智能
对于pytorch常用的维度转换方法一直不熟悉,今天在网上查了资料,简单尝试之后汇总记录一下,方便以后查找importtorch#**********生成数据**********#***生成固定数据***test1=torch.tensor([[1,2,3],[4,5,6]])#***生成随机数据***test=torch.rand(2,4)#***生成符合高斯分布的随机数据***test=tor
- 使用abaqus进行结构优化
Ryan-Lily
网络算法机器学习
前言使用Abaqus进行结构优化是一个帮助您完善设计的迭代过程,良好的结构优化的结果是重量轻、刚性强、耐用的部件。Abaqus提供了以下结构优化方法:拓扑优化、形状优化、尺寸优化和加强筋优化,他们由一系列目标函数和约束条件控制。拓扑优化从初始模型开始,通过修改选定单元的材料特性来确定最佳设计,从而有效地从分析中删除单元。形状和尺寸优化进一步完善了模型,形状优化通过移动表面节点来修改零件的表面,以减
- 连杆的形状优化
Ryan-Lily
汽车
前言本示例使用优化模块在不改变连杆体积的情况下将连杆中的应力集中降至最低。本页讨论前言应用描述Abaqus建模方法和仿真技术文件参考应用描述此示例说明了连杆的形状优化。形状优化对曲面节点在设计区域中的位置进行轻微修改,以实现优化的解决方案。形状优化通常在设计过程结尾应用,此时组件的总体轮廓是固定的,并且只允许进行微小的更改。几何形状连杆模型是一个使用线性四面体(C3D4)单元进行网格划分的单个孤立
- 汽车控制臂的拓扑优化
Ryan-Lily
汽车
前言本示例使用优化模块通过减小控制臂的体积同时最大化其刚度来优化汽车控制臂的设计。本页讨论前言应用描述Abaqus建模方法和仿真技术文件参考应用描述本例说明了汽车控制臂的拓扑优化,在拓扑优化过程中,修改设计区域中单元的材料特性(有效地从Abaqus分析中删除元素或向其添加元素),直到获得最佳解决方案。几何形状控制臂模型是一个用二次四面体(C3D10)单元进行网格划分的单个孤立网格零件,控制臂关于X
- Win10下在VS2019中配置使用CUDA进行加速的C++项目 (配置.h文件,.dll以及.lib文件等)
腿。
c++开发语言经验分享visualstudio
一、VS2019、CUDA以及cuDNN的安装及配置网上相关博客很多,在这不再赘述。二、打开VS20191、创建新项目2、选择c++空项目3、项目名称和位置可以自己选择4、在test1的源文件位置,鼠标右键点击,选择添加->新建项->C++文件(.cpp)5、在test1的位置鼠标右键点击,选择最下方的“属性”,C/C++->常规->附加包含目录->添加include(存放的.h文件)C:\Pro
- python的__init__.py文件作用
waiting不是违停
Python图像处理
在导入一个包的时候,Python会根据sys.path中的目录来寻找这个包中包含的子目录,目录只有包含一个叫做init.py的文件才会被认作是一个包,并且后面的py文件都可以被认为是子模块而被import进来,而且__init__中的代码会在import的时候执行。上例子在pycharm中建了一个名叫test的包,下面自动生成__init__.py文件,我又新建了test1文件在pycharm的终
- Test1
吃枣暴富
职业选手与业余选手的不同在于,职业选手可以更稳定的发挥好的状态,向上发展的趋势更清晰。价值无法准确估计,但是PE和PB能流传至今,说明它们仍然有很重要的参考意义。坚持价值投机,价值是指在黄金堆里选钻石,投机是做波段,不做定投,也不做短线。不鼓励定投,不鼓励分散投资。但这又是对大部分人最好的方式,想立志做独立投资人而言,分散显示的是信心不足,这是最可怕的,分散确实可以分担风险,比如HS300就是很好
- COMSOL接触(高度非线性)仿真常见报错及解决方法总结
怎么又是萝卜
COMSOL有限元comsol有限元
前言由于COMSOL采用隐式求解器,相较于使用显式求解器的Dyna、Abaqus等软件。要在COMSOL中实现结构接触这一高度非线性问题难度较大,报错时有发生。究其原因,是当物体之间相互接触时,物体受到的应力、运动路径会发生突变,这使得仿真容易在模型开始接触时报错。因此,对COMSOL求解器及模型结构进行合理地设置避免报错是十分必要的。本文共总结了三种常见报错,以及六种可能解决该问题的调试方法,以
- ArrayList以及基于LinkedList实现栈和队列
lady_chen
Javajava数据结构队列链表
Array数组是我们常用的数据结构,我们可以通过简单的语句初始化一个数组(必须指定初始化的长度)。publicstaticvoidmain(String[]args){int[]test=newint[3];//初始化数组test[0]=1;test[1]=2;test[2]=3;System.out.println(Arrays.toString(test));int[]test1={1,2,3
- 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