- 引领高效开发:基于Haskell与Polysemy的纯净架构实现
幸俭卉
引领高效开发:基于Haskell与Polysemy的纯净架构实现PolysemyCleanArchitectureShowcasinghowthePolysemylibrarycanbeusedtoimplementaRESTapplicationconformingtotheguidelinesoftheCleanArchitecturemodel.项目地址:https://gitcode.co
- JCE cannot authenticate the provider BC
刘登辉
java报错
mmmmmd,这个报错在linux系统中使用宝塔jdk-17.0.8的环境出现的报错,找了一堆教程,用的ai,各种办法测试都没有解决!!!!!本地windows跑的版本是jdk-17.0.12,服务器是jdk-17.0.8,更换jdk版本后问题解决无语死了!!!!
- 亲测有用,轻松解决远程链接的“Gtk-WARNING **: cannot open display;”或“Cannot connect to display;”问题
柳柳的博客
pyppeteerlinux
远程连接服务器或者工作站的时候,通常不能打开一个GUI图形用户,而且在打开过程中会出现诸如:(gedit:46927):Gtk-WARNING**:cannotopendisplay:或者:指令名:Cannotconnecttodisplay的提示。那么如何解决这个问题呢?把它分为两种链接方式:用windows下的cmd链接远程的linux,另一种是用本地的linux系统链接远程的linux(两种
- kmp报错→Cannot find skiko-windows-x64.dll.sha256
淡淡的id
其他kotlinKMP
1、前言 学习kmp(KotlinMultiPlatform简称)过程中报了错误,这个报错在直接运行desktop的main方法才会出现,用gradle运行却不会报错,新建的kmp项目也不会出现,我学习的写了一些代码的项目才会出现。 运行main方法主要是需要运行main方法才能debug,gradle不能debug环境kmp版本:1.7.0gradle版本:8.13kotlin版本:2.1.
- Run-time type information--RTTI
diaoju3333
c/c++runtime
Incomputerprogramming,run-timetypeinformationorrun-timetypeidentification(RTTI)[1]referstoaC++mechanismthatexposesinformationaboutanobject'sdatatypeatruntime.Run-timetypeinformationcanapplytosimpledat
- 从点灯开始的51单片机生活
shixiexunnie
嵌入式拨云见日51单片机嵌入式硬件学习单片机
陵谷纷纭新事改,筑台土石未应迟。目录sfr与sbit?不靠定时器的delay_ms延时函数所谓寄存器sfr与sbit?这第一课咱们主要来先理解一下sfr与sbit,以下可能是咱们这些新手朋友常见的点灯代码:#include//reg52.h只定义sfr而没定义sbit可寻址空间的位变量intmain(){while(1){P2_0=0;//P几取决于宁板子上led的对应的gpio}}或者是更底层更
- Java Scanner 类
大哥的打嗝
JAVAjavajvm开发语言
JavaScanner类是Java的一个内置类,它提供了一种简便的方式来从标准输入或者文件中读取基本类型和字符串。本文将会详细介绍JavaScanner类的作用以及在实际工作中的用途。Scanner类的作用Scanner类可以方便地读取从控制台、文件等输入流中读取基本类型和字符串。Scanner类可以读取int、long、float、double和String等基本类型。它还可以使用正则表达式读取
- (Java)Scanner 类
南淮北安
Java学习笔记java
文章目录一、Scanner类简介二、使用Scanner类输入数据1.实现基本的数据输入2.实现日期格式的数据输入3.从文件中得到数据一、Scanner类简介Scanner类的常用方法:Scanner类提供了一个可以接收InputStream类型的构造方法,这就表示只要是字节输入流的子类都可以通过Scanner类进行方便的读取二、使用Scanner类输入数据1.实现基本的数据输入importjava
- QML界面卡死分析--01 --Canvas与QRasterPaintEngine
香油哥
Qmlqt
QML界面卡死分析--01现象—Canvas与QRasterPaintEngine相关前置条件:渲染循环使用多线程方式;发现界面假死,无响应;拷贝dump分析,主线程堆栈如下:#0SyncSemWait()#10x000000007b4f8784inQMutexPrivate::wait(int)()fromqt_engine/qt-engine/lib/libQt6Core.so.6.5.0#2
- 【错误解决】Mockito在JDK 22的兼容性问题
不是聪明的小孩
springbootmybatisplusMockitomybatis
前言:在学习SpringBoot整合MyBatisPlus时,在启动类里添加的@MapperScan注解扫描项目的mapper文件夹相关类的方法,测试时一直出错失败,这样的话学习mybatisplusCRUD的操作也没办法测试运行,我在网上检索相关问题的比较新的参考很少,也和我遇到的问题重叠率不高。相关错误信息:Causedby:[CIRCULARREFERENCE:java.lang.Illeg
- uni-app选择图片进行覆盖然后分享或打印
MandiGao
uni-appuni-app前端javascript
需求:APP上传手机原有的图片,进行覆盖指定的部分,覆盖完成后,唤起原生系统的分享面板,面板上有分享给其他人,还有打印选项准备一个canvas和button标签选择图片这个canvas主要是把选择的图片画上去,所以不知道选的是哪张图片,当然也不知道宽高是多少,所以用的是动态的宽高,这个宽高一定要设置!!!完成事件//选择图片进行裁剪clipImg(){uni.chooseImage({count:
- es 慢查询引起 cpu报警处理方法
qq_35640866
elasticsearchelasticsearch大数据搜索引擎
1、查看当前任务GET_cat/tasks?v分析执行时间长的语句2、查看当前热线程GET_nodes/hot_threads3、查看任务详情,id要是父节点。分析查询语句GET/_tasks/HnZ6wy9fS_u9FTVTIAvoVg:296607276744、取消任务POST_tasks/HnZ6wy9fS_u9FTVTIAvoVg:29660727674/_cancel慢查询的防治方法1、
- 使用python制作网站
欣然~
pythonsqlite数据库
新建一个名为pizzeria的项目,并在其中添加一个名为pizzas的应用程序。定义一个名为Pizza的模型,它包含字段name,用于存储比萨名称,如Hawaiian和MeatLovers。定义一个名为Topping的模型,它包含字段pizza和name,其中字段pizza是一个关联到Pizza的外键,而字段name用于存储配料,如pineapple、Canadianbacon和sausage。使
- 基于html5QrCode实现的H5扫码功能(uni-app v2版本)
_虾仁不眨眼_
移动端H5uni-apphtml5
1.安装(选择一种方式)使用npmHtml5Qrcodenpm链接npmihtml5-qrcode直接引入html5-qrcode.min.js文件(本例使用此方法)2.扫码组件代码(先引入Html5Qrcode资源)exportdefault{name:'Scan',model:{props:'value',event:'close'},props:{value:{type:Boolean,de
- uni-app快速入门(十三)--常用API(下)
baozhengw
uni-app
本文介绍uni-app的扫码、动画、下拉刷新、授权登录、微信支付、节点信息、调试API。一、扫码扫码功能支持使用相机直接扫码和从相册中选择图片进行扫码,也支持条码扫描。使用uni.scanCode可调出客户端扫码界面,扫码成功后返回对应结果。不支持H5平台。下面是uni-app的官方介绍:uni.scanCode(OBJECT)|uni-app官网uni-app,uniCloud,serverle
- 前端大屏触摸签名实现
风无雨
前端前端
参考:JavaScript实现手写签名,可触屏手写,支持移动端与PC端双端保存_js手写签名-CSDN博客https://www.cnblogs.com/smileZAZ/p/17219400.html1.新建一个canvas元素获取canvas上下文,绘制初始矩形,设置高度宽度,初始绘制位置0,0//创建上下文constctx=canvas.getContext('2d')2.监听touchst
- 【28】单片机编程核心技巧:Switch驱动的定时中断LED闪烁
智木芯语
【编程技巧】单片机嵌入式硬件#STC8#STM32
【28】单片机编程核心技巧:Switch驱动的定时中断LED闪烁七律·控时状态为魂控时光,定时中断显锋芒。步骤变量定乾坤,状态流转若飞霜。电光石火随心转,程序逻辑自分明。单片机中真王者,一招一式定乾坤。摘要本文以STC8H单片机为例,通过Switch语句结合定时中断实现LED闪烁控制,系统阐述其状态机设计原理、步骤变量管理及代码实现。Switch语句通过控制核心步骤变量(run_step),将复杂
- 小程序 实现手写签名功能
小星落
小程序javascriptjscanvas小程序
小程序利用canvas实现手写签名设置小程序横屏在page.json或对应页面.json文件中设置landscape代表固定横屏"pageOrientation":"landscape"手写签名创建canvas画布设置监听触摸开始移动结束等时间此处为uniapp示例原生小程序的也可参考进行修改(只需将@touchmove等事件换为bindtouchmove等微信事件即可)重签完成签名page{ba
- 移动端Canvas实现手写签名
不知名靓仔
canvas
引言在移动应用开发中,手写签名功能的集成已经成为许多业务场景的标配,比如电子合同签署、医疗记录确认或是物流配送签收等。本文将详细阐述如何在移动端实现手写签名,包括技术选型、具体实现步骤以及优化建议,帮助开发者快速上手并构建高质量的手写签名体验。技术选型1.使用CanvasAPIHTML5的CanvasAPI提供了在网页上绘制图形的能力,包括路径、文本、图像等,非常适合用来捕捉和展示手写签名。在移动
- 【华为机试】HJ4 字符串分隔
椰椰荔枝糖
华为机试【牛客网】华为java开发语言
str.substring(0,8)//截取str中从startIndex开始至endIndex结束时的字符串,并将其赋值给str;str=str.substring(8)//截取掉str从首字母起长度为startIndex的字符串,将剩余字符串赋值给str;importjava.util.Scanner;//注意类名必须为Main,不要有任何packagexxx信息publicclassMain
- 【华为机试】HJ3 明明的随机数
椰椰荔枝糖
华为机试【牛客网】华为java开发语言
importjava.util.Scanner;importjava.util.List;importjava.util.ArrayList;importjava.util.Collections;//注意类名必须为Main,不要有任何packagexxx信息publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanne
- 手把手教你学AUTOSAR(8.2)--AUTOSAR 组件的配置与集成
小蘑菇二号
手把手教你学AUTOSARunity游戏引擎
目录AUTOSAR组件的配置与集成1.AUTOSAR组件概述2.配置与集成的主要步骤2.1系统设计2.2组件配置2.3组件集成3.工具支持3.1VectorDaVinciDeveloper3.2ETASINTECRIO3.3dSpaceSystemDesk3.4MentorGraphicsVolcanoVSA3.5ElektrobitEBtresos4.示例:使用VectorDaVinciDeve
- element-plus按需引入报错IconsResolver is not a function
Beamon__
前端
官网文档:element-plus-best-practices/vite.config.tsatdb2dfc983ccda5570033a0ac608a1bd9d9a7f658·sxzz/element-plus-best-practices·GitHubElementPlusBestPractices最佳实践.Contributetosxzz/element-plus-best-practic
- java字符串案例 //要求:将输入的字符串中的数字转换为罗马数字,长度小于9(运用方法:查表法)
漫漫不慢.
java算法开发语言
packagetest13;importtest11.S;importjava.util.Scanner;publicclassNum{publicstaticvoidmain(String[]args){//IIIIIIIVVVIVIIVIIIIX//要求:将输入的字符串中的数字转换为罗马数字,长度小于9(运用方法:查表法)//1输入数字//2有效字符判断//3运用方法转换数字Scannersc
- Java 基础到进阶&企业技巧(二)
Aphelios380
开发语言java学习idea学习方法
在Java学习的旅程中,我们逐步探索了其丰富的知识体系,从基础的数据类型、字符串操作,到流程控制、运算符的运用,每一步都为我们构建强大的编程能力奠定基石。同时,了解这些知识在Java全栈开发中的应用场景,对未来进入企业工作至关重要。目录一、字符串1.底层原理与语法2.字符串位置与拼接3.字符串数组操作二、人机交互1.接收输入-Scanner类2.课堂练习三、字符与编码1.char字符2.面试题:字
- scanf 没有(不加)取地址符 & 的情况
陌路物是人非
c语言
for(inti=1;i<=n;i++)scanf("%d",a+i);之前看到过这种不加取地址符的scanf刚开始很疑惑,觉得有问题,但我学了指针之后就恍然大悟了。首先这个a不是变量,而是一个数组,a代表着数组名同时也是这个数组的首地址即&a[0]。其次a+i代表的就是数组中下一个元素的地址即&a[0+i]。因为本身已经就是地址了,所以就不用取地址
- 基于AT89C52单片机的多功能万年历温度计设计
七月小卖铺
单片机单片机嵌入式硬件
点击链接获取Keil源码与ProjectBackups仿真图:https://download.csdn.net/download/qq_64505944/89452374?spm=1001.2014.3001.5503C源码+仿真图+毕业设计+实物制作步骤+08AT89C52(与AT89S52、AT89C52通用,可任选)单片机、LCD液晶显示,DS1302时钟芯片、DS18B20温度传感器,蜂
- Autoleaders控制组——51单片机学习笔记(2)
Autoleaders控制组 邓翔
51单片机学习笔记
51单片机学习(2)1.模块化编程1.1模块化编程的意义在学习单片机的途中,随着我们的知识不断扩展,我们能写出的代码也越来越复杂,越来越长了,有时我们自己写出的很长的代码,出现了错误,需要调试,但奈何自己的代码实在是太长了,真的不好分析到底是哪里出错了。这是因为我们将太多的函数和代码放在一个main.c的文件里,导致代码过度堆积。如果我们能够条理清晰地去将不同作用的代码和函数放在不同的xxx.c文
- html-to-image的使用及图片变形和无图问题修复
庸懒
前端
html-to-image的使用及图片变形和无图问题修复最近迭代的时候因为新增了一个需求,需要前端提供素材及样式给后端,后端同步渲染,但是因为部分样式问题后端无法实现所以决定前端将页面生成图片然后传递给后端使用,本文记录一下使用的过程及遇到的部分问题。技术调研现在将页面元素转换成图片的插件有很多,普遍使用的技术原理都是利用canvas或者SVG将页面元素转换成画布或者svg元素,然后再转成图片。这
- metasploit内网篇之域控内信息收集(十一)
暴躁的小胡!!!
内网渗透安全web安全网络
常用信息收集模块auxiliary/scanner/discovery/arp_sweep#基于arp协议发现内网存活主机,这不能通过代理使用auxiliary/scanner/portscan/ack#基于tcp的ack回复进行端口扫描,默认扫描1-10000端口auxiliary/scanner/portscan/tcp#基于tcp进行端口扫描,默认扫描1-10000端口auxiliary/s
- 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