- [netty5: WebSocketServerHandshaker & WebSocketServerHandshakerFactory]-源码分析
idolyXyz
netty5-源码阅读netty
在阅读这篇文章前,推荐先阅读以下内容:[netty5:WebSocketFrame]-源码分析[netty5:WebSocketFrameEncoder&WebSocketFrameDecoder]-源码解析WebSocketServerHandshakerFactoryWebSocketServerHandshakerFactory用于根据客户端请求中的WebSocket版本构造对应的WebSo
- [netty5: WebSocketClientHandshaker & WebSocketClientHandshakerFactory]-源码分析
在阅读这篇文章前,推荐先阅读以下内容:[netty5:WebSocketFrame]-源码分析[netty5:WebSocketFrameEncoder&WebSocketFrameDecoder]-源码解析WebSocketClientHandshakerFactoryWebSocketClientHandshakerFactory是用于根据URI和协议版本创建对应WebSocket握手器(Ha
- [netty5: FastThreadLocal]-源码解析
在解析FastThreadLocal之前,我们先了解一下ThreadLocal,它和Thread究竟什么关系。翻看Thread源码,我们可以知道,Thread类里维护了两个ThreadLocal.ThreadLocalMap,这两个字段由ThreadLocal类管理,用来实现线程局部变量的存储和传递。ThreadpublicclassThreadimplementsRunnable{//线程局部变
- [netty5: ChannelPipeline & ChannelHandlerContext ]-源码分析
idolyXyz
netty5-源码阅读netty
在阅读该篇文章内容前,推荐先阅读:[netty5:Channel&ServerChannel]-创建流程[netty5:ChannelHandlerMask]-源码分析[netty5:ChannelHandler&ChannelHandlerAdapter]-源码解析从Channel源码来看,Channel将出站操作全部委托给了ChannelPipeline。这么做的原因是为了实现职责分离和灵活的
- [netty5: HttpServerCodec & HttpClientCodec]-源码分析
idolyXyz
netty5-源码阅读netty
在阅读该篇文章之前,推荐先阅读以下内容:[netty5:ChannelHandler&ChannelHandlerAdapter]-源码解析[netty5:HttpObjectEncoder&HttpObjectDecoder]-源码解析HttpServerCodecHttpServerCodec是一个Netty编解码器,结合HttpRequestDecoder和HttpResponseEncod
- docker-compose 启动MongoDB后 导入json数据
观梦
docker-composemongodbpythondockershell
docker-compose启动MongoDB后导入json数据compose目录具体方法Dockerfilesetup.shdocker-compose.ymlcompose目录├──app│├──blueprints││├──common…│├──config.py│├──Dockerfile│├──main.py│├──requirements.txt│├──templates││├──…│
- Docker-compose容器编排
⼀、Docker-compose定义1.dockercompose是docker官⽅的开源项⽬,负责实现对docker容器集群的快速编排(容器,依赖,⽹络,挂载。。)2.compose是docker公司推出的⼀个⼯具软件,可以管理多个docker容器组成的应⽤3.需要定义⼀个YAML格式的配置⽂件docker-compose.yml,写好多个容器之间的调⽤关系4.使⽤compose的步骤、5.1.
- docker compose 安装 Neo4j
MonkeyKing.sun
dockerneo4j容器
使用DockerCompose安装Neo4j非常方便。以下是一个示例步骤,展示如何使用DockerCompose来安装并运行Neo4j。步骤1:安装Docker和DockerCompose确保你已经安装了Docker和DockerCompose。如果尚未安装,可以参考以下链接进行安装:Docker安装DockerCompose安装步骤2:创建DockerCompose文件在你的工作目录中创建一个d
- [netty5: MessageAggregator & HttpObjectAggregator]-源码解析
在阅读这篇文章前,推荐先阅读[netty5:ByteToMessageCodec&MessageToByteEncoder&ByteToMessageDecoder]-源码分析[netty5:HttpObject]-源码解析100-continue100-continue是HTTP/1.1协议中的一种机制,用于客户端在发送大体积请求体(如文件上传)前,先向服务器发送一个带有Expect:100-c
- 鸿蒙设备开发OpenHarmony深度解读之设备认证:HiChain机制部分源码解析1(推荐模块之外)
往期推文全新看点(文中附带最新·鸿蒙全栈学习笔记)鸿蒙(HarmonyOS)北向开发知识点记录~鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~鸿蒙应用开发与鸿蒙系统开发哪个更有前景?嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~对于大前端开发来说,转鸿蒙开发究竟是福还是祸?鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?记录一场鸿蒙开发岗位面试经历~持续更新中……一、概述H
- docker-compose编排saleor
obboda
运维docker容器运维
一、saleor简介Saleor是一个开源Headless电商系统Saleor,它被用于电子商务等场景。Saleor是现代堆栈上以客户为中心的电子商务。是一个无头的GraphQL商务平台,提供超快速、动态、个性化的购物体验。美观的在线商店,任何地方,任何设备。二、saleor的默认启动流程1、拉取存储库gitclonehttps://github.com/saleor/saleor-platfor
- Android阴影效果的艺术与实现:从入门到精通
大模型大数据攻城狮
android安卓动画canvaspaintandroid阴影安卓面试android面经
目录1.阴影的本质:为什么它对UI如此重要?2.深入MaterialDesign:理解Z轴与阴影层次3.兼容老版本:用Drawable实现阴影4.高级技巧:自定义OutlineProvider5.用Canvas绘制自定义阴影:解锁无限可能6.阴影性能优化:让丝滑体验飞起来7.JetpackCompose中的阴影实现:拥抱现代化8.动态阴影动画:打造炫酷交互效果9.RecyclerView中的阴影实
- docker-compose报错ERROR: Invalid interpolation format for “web“ option in service “services“:
reiraoy
dockerjava容器
1.问题在Linux中使用docker-compose过一段时间后再次使用docker-compose命令启动或关闭容器报错:ERROR:Invalidinterpolationformatfor"web"optioninservice"services":2.解决思路DockerCompose1.24.1版本对于复杂的变量插值(特别是带有默认值-和:混合使用)的解析非常严格甚至存在一些已知的问题
- Kotlin 与移动开发的无缝对接秘籍
移动开发前沿
kotlin开发语言androidai
Kotlin与移动开发的无缝对接秘籍关键词:Kotlin、移动开发、Android、iOS、跨平台开发、协程、JetpackCompose摘要:本文深入解析Kotlin在移动开发领域的核心优势与实践方法,通过剖析Kotlin语言特性、跨平台架构、与原生生态的深度集成(如AndroidJetpack和iOSSwift互操作)、异步编程模型(协程)等关键技术,结合完整的项目实战案例,展示如何利用Kot
- Mybatis源码,从配置到 mappedStatement/mapper.xml 是如何被解析的?
祁娥安
Javajavamybatis
今天跟大家分享下Mybatis源码,从配置到mappedStatement/mapper.xml解析的知识。1从MybatisAutoConfiguration说开去,mapper文件是怎么扫描的?Ext1:本文源码解析基于mybatis-spring-boot-starter2.1.1,即mybatis3.5.3版本。Ext2:本文主要是对源码的讲解,着重点会是在源码上。我们知道配置SqlSes
- Dify搭建私有知识库指南
挑战者666888
AI模型应用实战人工智能自然语言处理机器学习
系列文章目录CentOS系统高效部署Dify全攻略文章目录系列文章目录Dify搭建私有知识库指南一、引言二、环境准备与基础配置(含Linux命令)1.硬件要求2.软件依赖安装(Linux命令)3.安装Dify(Docker-compose部署)4.初始化设置三、数据接入与知识库构建(含实战案例)1.数据源接入示例2.数据预处理3.向量化存储配置实战案例:企业产品手册知识库四、检索与增强功能实现1.
- dify 默认端口被占用,更改端口号
你喜欢喝可乐吗?
ubuntuLLMdeeplearning服务器运维人工智能ubuntu
sudodockercompose-pdifyup-d在Ubuntu服务器上部署dify平台时,遇到以下错误:Errorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpointdify-nginx-1(a9734951328f585778afbdbed279a81ca9ccebf8b4ba97d587216f5
- 【python深度学习】DAY 51 复习日
抽风的雨610
【打卡】Python训练营python深度学习开发语言
作业:day43的时候我们安排大家对自己找的数据集用简单cnn训练,现在可以尝试下借助这几天的知识来实现精度的进一步提高1.读取数据使用CIFAR-10图像数据importtorchfromtorchvisionimportdatasets,transforms#数据预处理transform=transforms.Compose([transforms.ToTensor(),transforms.
- C#.NET员工考勤系统源码解析与探讨
金融先生-Frank
本文还有配套的精品资源,点击获取简介:《C#.NET员工考勤系统源码解析与探讨》是一篇详细介绍C#.NET技术在构建员工考勤管理软件中的应用。文章涵盖了从基础知识点到高级功能实现的全面解析,并分享了源码,以便开发者能深入理解并运用C#.NET技术构建出高效的考勤系统。1.C#.NET基础应用1.1C#语言简介C#(发音为“看井”)是微软公司为了.NET平台创建的一种面向对象、类型安全的编程语言。它
- flutter 绘制源码解析
阿旭哟嘿
flutter
//绘制过程概述:在绘制过程中,渲染树会生成一个合成层树,这些层被上传到引擎并由合成器显示。//Layer是合成层树的一个切片,layer被排列成层次结构,每个节点都可能影响它下面的节点在绘制的时候,会把每个绘制节点保存到Layer上面,//最后合成树,创建一个SceneBuilder对象,根layer对象调用addToScene方法,SceneBuilder.build以获得一个Scene。然后
- ABP VNext + RediSearch:微服务级全文检索
Kookoos
AbpvNext.net微服务全文检索架构ABPvNextRedis
ABPVNext+RediSearch:微服务级全文检索目录ABPVNext+RediSearch:微服务级全文检索一、背景与动机️二、环境与依赖2.1DockerCompose启动RedisStack2.2Kubernetes部署(示例Manifest)2.3ABPVNext&NuGet包️三、架构与流程图️四、索引模型与依赖注入4.1模型定义4.2服务注册️五、IndexService&Sea
- 容器与 Kubernetes 基本概念与架构
木鱼时刻
软件开发kubernetes架构容器
文章目录1.典型环境层次结构2.Kubernetes生态三大类2.1核心组件2.2集群管理工具2.3生态辅助工具2.4资源管理关系3.Docker容器技术与实践3.1镜像拉取加速3.2认证与登录3.3常用命令3.4存储挂载方式对比3.5docker-compose启动3.6容器化应用部署示例4.kind快速启动5.参考资料1.典型环境层次结构物理机/宿主机:运行虚拟化或容器化环境的基础硬件。虚拟机
- Python编程:requests 核心源码
requests是Python中最受欢迎的HTTP客户端库之一,其源码设计优雅且模块化,适合学习优秀的Python项目架构。以下是对requests库的核心源码解析,涵盖关键模块、设计模式和实现细节。源码结构概览requests的源码主要分为以下几个核心模块:requests/├──__init__.py#暴露主要API(如get,post)├──api.py#实现请求方法(get/post/pu
- Compose 项目结构与实践——AI教你学Docker
LuckyLay
AI教你学Dockerdocker容器运维
3.5Compose项目结构与实践在实际多容器项目开发、部署和团队协作中,良好的Compose项目结构和管理规范能够大幅提升开发效率、部署一致性与可维护性。下面详细解读Compose项目目录规范、与CI/CD的集成方式、以及版本管理与团队协作的最佳实践。一、项目目录规范1.推荐目录结构一个标准的DockerCompose项目通常包含如下目录与文件:project-root/├──docker-co
- Compose 高级用法详解——AI教你学Docker
LuckyLay
AI教你学Dockerdocker容器运维
3.6Compose高级用法详解DockerCompose除了常规的多服务编排,还支持一系列高级功能,如服务健康依赖、环境切换、配置模板化等。掌握这些技巧,能让你的多容器项目更健壮、更自动化、更易维护。一、depends_on的高级用法与启动顺序1.基本用法depends_on指定服务间的启动顺序,确保依赖的服务优先启动。services:web:depends_on:-dbdb:image:po
- docker-compose一键部署全栈项目。springboot后端,react前端
zwjapple
前端dockerspringboot
部署总览前端打包:我们将配置package.json,使用npmrunbuild(内部调用vitebuild)来打包。这个过程将完全在Docker构建镜像的过程中自动完成,你的主机上甚至不需要安装Node.js。后端打包:我们将配置pom.xml,使用mvncleanpackage来打包。这一步需要在执行DockerCompose之前手动完成一次,以生成JAR文件。部署:使用docker-comp
- 安装 Docker Compose!!!
1、检查本地docker版本dockerversion我的docker版本为v27.3.12、docker-compose版本选择DockerCompose|DockerDocsReleases·docker/compose找到对应的版本下载。3、安装#github:https://github.com/docker/compose/releases/tag/v2.20.2#国内下载地址:http
- laravel无法运行php,Laravel:php artisan服务无法启动
常一二
laravel无法运行php
我在这里挖掘了其他一些答案,似乎没有什么比这更合适了.我可能最初会留下一些信息,所以请告诉我你还需要什么,谢谢!目前运行ubuntu7,使用composer和laravel两者似乎都正确安装:当我在终端输入'phpartisanserve'和'phpartisanserve--port:8000'时,我收到此错误:PHP警告:require(/home/user/Projects/thingy/b
- fastGPT 接入Ollama 模型避坑指南
枫蓝驿
人工智能chatgpt
一、fastGPT添加应用调用大模型报404错误确认docker-composer.yml中的oneApi配置项是否正确-DEFAULT_ROOT_PSW=Pass1234 #AI模型的API地址哦。务必加/v1。这里默认填写了OneApi的访问地址。-OPENAI_BASE_URL=http://192.168.1.216:3001/v1#AI模型的APIKey。(这里默认填写了OneAPI的快
- 【Python爬虫实战】全面抓取网页资源(图片、JS、CSS等)——超详细教程与源码解析
Python爬虫项目
python爬虫javascript新浪微博开发语言css旅游
前言在互联网时代,网页数据已经成为重要的信息来源。许多时候,我们不仅需要抓取网页中的文字信息,还需要将网页中的各种资源文件(如图片、CSS样式表、JavaScript脚本文件等)一起抓取并保存下来。这种需求广泛应用于网页备份、离线浏览、数据分析等场景。本篇文章将带你从零开始,系统讲解如何使用Python最新技术,一步步实现抓取网页中所有静态资源的完整流程,包括:页面结构分析爬虫基本架构搭建异步爬取
- 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