- go的hooks如何写
lotluck
golanggolang开发语言后端
在Go语言中,实现Hooks的方式多样,具体取决于应用场景。以下是几种常见实现方法及示例:一、函数式Hooks(基础实现)通过函数类型作为参数传递,实现灵活的钩子机制://定义钩子函数类型typeHookFuncfunc()//业务函数接受钩子参数funcDoSomething(hookHookFunc){//执行前置操作fmt.Println("Beforeoperation")hook()//
- 31天Python入门——第9天:再学函数
安然无虞
Python手把手教程python开发语言后端pyqt
你好,我是安然无虞。文章目录再学函数1.变量在函数中的作用域2.函数的参数传递.补充学习:不定长参数*args和**kwargs3.值传递和引用传递补充学习:把函数作为参数传递4.匿名函数5.python中内置的常用函数zip()map()filter()all()any()6.函数练习再学函数1.变量在函数中的作用域变量的作用域是指变量的作用范围.局部变量:在函数体或局部范围内声明的变量称为局部
- C++数组
ws262
算法c++数据结构
可以用来表达类型相同的元素的集合,集合的名字就叫数组名数组里的元素都是有编号的,元素的编号叫下标。通过数组名和下标,就能访问元素一维数组的定义如下:类型名数组名[元素个数];其中"元素个数“必须是常量或常量表达式,不能是变量,而且其值必须是正整数。元素个数称为”数组长度“Ta[N];//数组大小为N*sizeof(T)字节的存储空间表达式“sizeof(a)”的值就是整个数组的体积,即N*size
- 超高性能机甲机器人技术方案
和尚448
机器人
###**超高性能人形机甲机器人技术方案****(代号:ProjectTitan-X)**---####**一、核心参数指标**|项目|参数要求|实现方案||----------------------|----------------------|------------------------||整机重量|≤80kg|碳纤维骨骼+石墨烯肌肉||运动速度|百米冲刺≤9.5秒|仿生肌腱驱动系统||
- hive服务启停脚本
热爱技术的小陈
大数据hive大数据hadoop
hive.sh#!/bin/bashHIVE_LOG_DIR=$HIVE_HOME/logs#创建日志目录if[!-d$HIVE_LOG_DIR]thenmkdir-p$HIVE_LOG_DIRfi#检查进程是否运行正常,参数1为进程名,参数2为进程端口functioncheck_process(){pid=$(ps-ef2>/dev/null|grep-vgrep|grep-i$1|awk'{p
- 【Pandas】pandas Series plot.box
liuweidong0802
PandasSeriespandas信息可视化数据分析
Pandas2.2SeriesPlotting方法描述Series.plot([kind,ax,figsize,…])用于绘制Series对象的数据可视化图表Series.plot.area([x,y,stacked])用于绘制堆叠面积图(StackedAreaPlot)Series.plot.bar([x,y])用于绘制垂直条形图(VerticalBarPlot)Series.plot.barh
- SQL-触发器(trigger)的详解以及代码演示
m0_74823827
面试学习路线阿里巴巴sql数据库服务器
一、触发器的概念触发器是一种特殊的存储过程,但是触发器不存在输入和输出参数,所以不能被显式的去调用,而是与特定的表相关联,当表中的数据发生变化时,触发器被激活并执行其定义的SQL代码。触发器可以是行级触发器(针对每一行数据变化)或语句级触发器(针对整个SQL语句的变化),行级触发器允许对每一行单独处理,而语句级触发器则在整个操作完成后执行一次。触发器的功能强化约束:触发器能够实现比CHECK语句更
- golang slice 切片数组下标的截取方式
用户昵称不能为空
golang开发语言后端
需求使用golang截取的下标,按照下标顺序截取代码//Youcaneditthiscode!//Clickhereandstarttyping.packagemainimport"fmt"funcRows(page,pageSizeint)(items[]int){alls:=[
- 英伟达常用GPU参数速查表,含B300.....
Ai17316391579
深度学习服务器人工智能机器学习服务器电脑计算机视觉深度学习神经网络
英伟达常用GPU参数速查表,收藏备用:含RTX5090、RTX4090D、L40、L20、A100、A800、H100、H800、H20、H200、B200、B300、GB300.....专注于高性能计算人工智能细分领域kyfwq001#5090##4090##英伟达“新核弹”B200发布##英伟达##英伟达B300##GPU##服务器##显卡##英伟达H800/A800芯片将禁售#
- 后端安全可靠性
Small踢倒coffee_氕氘氚
python自学笔记经验分享
第一步应该提到参数化查询,也就是预编译语句。这是最有效的方法,比如用PDO或者预处理语句来分离数据和指令。然后,ORM框架也是一个好办法,因为它们通常自动处理参数化,减少手写SQL的机会。接下来,输入验证和过滤很重要。虽然不能完全依赖,但白名单验证比如只允许特定字符,或者转义特殊字符,比如MySQL的mysqli_real_escape_string。不过要注意转义不是绝对安全,尤其是不同数据库有
- 每日一题一一Leetcode128. 最长连续序列 - 力扣
Blue.ztl
写写算法leetcode算法数据结构
每日一题一一Leetcode128.最长连续序列-力扣作者:blue时间:2025.3.14128.最长连续序列-力扣(LeetCode)本题的要求是:给定一个未排序的整数数组nums,找出其中数字连续的最长序列(不要求序列元素在原数组中连续)的长度。本题用排序加遍历的方法非常容易解决,但是算法的效率太低。本题正真的解题思路如下,首先,数组中是有可能出现重复的数字,但是重复的数字其实并不影响我们找
- TS类型体操:实现axios的链式调用类型提示
console.log 战略储备局局长
前端
调用方法A调用方法B调用方法C对象实例返回对象自身返回对象自身最终结果一、为什么需要链式调用类型提示?在TypeScript中实现axios的链式调用类型提示,能显著提升开发体验:智能补全:开发者无需记忆API参数顺序,IDE自动提示方法链类型安全:拦截器配置、请求参数、响应数据全程类型校验代码自解释:通过类型声明即可理解API设计规范重构友好:修改底层实现不影响上层调用逻辑痛点场景://传统方式
- Kubernetes配置全解析:从小白到高手的进阶秘籍
ivwdcwso
操作系统与云原生kubernetes容器云原生k8s配置
导语在Kubernetes(K8s)的世界里,合理且精准的配置是释放其强大功能的关键。无论是搭建集群、部署应用,还是优化资源利用,配置都贯穿始终。然而,K8s配置涉及众多参数与组件,错综复杂,令不少初学者望而却步。本文将带你一步步深入K8s配置领域,从小白进阶为配置高手,轻松驾驭K8s集群。一、Kubernetes集群配置Master节点配置kube-api-server:这是K8s集群的“门面”
- 深度学习 Deep Learning 第8章 深度学习优化
odoo中国
AI编程人工智能深度学习人工智能优化
深度学习第8章深度学习的优化章节概述本章深入探讨了深度学习中的优化技术,旨在解决模型训练过程中面临的各种挑战。优化是深度学习的核心环节,直接关系到模型的训练效率和最终性能。本章首先介绍了优化在深度学习中的特殊性,然后详细讨论了多种优化算法,包括随机梯度下降(SGD)、动量法、Nesterov动量法、AdaGrad、RMSProp和Adam等。此外,还探讨了参数初始化策略、自适应学习率方法以及二阶优
- DAY33 贪心算法Ⅱ
Useee
贪心算法算法
122.买卖股票的最佳时机II-力扣(LeetCode)想到把整体利润分解为每天的利润,就豁然开朗了。classSolution{public:intmaxProfit(vector&prices){intresult=0;for(inti=1;i&nums){intcover=0;if(nums.size()==1)returntrue;for(inti=0;i=nums.size()-1)re
- 【教程】MYSQL中my.ini配置文件内容解读
陳青雲
安装教程mysqladb数据库
文章目录前言InnoDB设置1.`innodb_buffer_pool_size`2.`innodb_log_file_size`总结安全设置1.`secure-file-priv`2.`sql_mode`总结其他设置1.`max_allowed_packet`2.`max_connections`性能优化1.`query_cache_type`2.`thread_cache_size`总结win
- Java中卫语句的设计思想
而为.
java服务器开发语言
卫语句(GuardClauses)是一种通过提前返回简化条件嵌套、提升代码可读性的编程技巧。其核心思想是优先处理异常或边界情况,让主逻辑保持扁平化。以下是deepseek做出的设计思想详解:核心设计原则FailFast(快速失败)在函数入口处立即检查非法参数或无效状态,若不符合条件则提前终止(如返回、抛异常),避免后续无效操作。减少嵌套层级用卫语句替换多层if-else嵌套,将代码从“箭头型”结构
- Java进阶 面试速记
登陆成功200
JAVA进阶开发语言java
注解注解@Override类似一个标签,作用在方法上,表示此方法是从父类中重写而来注解是java中的标注方式,可以最用在类,方法,变量,参数成员上在编译期间,会被编译到字节码文件中,运行时通过反射机制获得注解内容,进行解析.内置注解java中内定好的注解例如@Override@Deprecated-标记过时方法。如果使用该方法,会报编译警告。@SuppressWarnings-指示编译器去忽略注解
- CMake 函数和宏
arong-xu
CMakec++CMakecmake教程
CMake函数CMake函数定义语法如下,其中name为函数名,为参数名,为函数体.函数定义后,可以通过name调用函数.函数名允许字母数字下划线,不区分大小写.function(name[...])endfunction()如下的样例定义了一个函数fun,不带任何参数.function(fun)message("Hello,World!")endfunction()#调用函数fun()FUN()
- Gradle 打包调试终极指南:全维度日志输出与问题定位
有时很滑稽
Androidandroid
Gradle打包调试终极指南:全维度日志输出与问题定位一、Gradle日志级别全解析1.1日志级别控制参数#按日志详细程度递增排序:./gradlewassembleDebug-q#QUIET-仅错误信息./gradlewassembleDebug#LIFECYCLE-默认级别(任务执行概览)./gradlewassembleDebug-i#INFO-显示任务输入/输出变化./gradlewass
- 深入理解 JSON.stringify:优雅输出 JSON 数据
天天进步2015
前端开发json
在JavaScript开发中,JSON数据的处理是一项基础且关键的技能。JSON.stringify()方法作为将JavaScript对象转换为JSON字符串的标准工具,其功能远不止于简单的数据转换。本文将深入探讨JSON.stringify()的使用技巧、参数配置以及常见陷阱,帮助开发者更优雅地处理JSON数据输出。基础用法JSON.stringify()的基本语法如下:JSON.stringi
- JavaScript的函数拦截技术详解
天天进步2015
前端开发javascript开发语言ecmascript
引言在JavaScript的世界里,函数是一等公民。它们可以被赋值给变量,作为参数传递,甚至可以被动态修改。函数拦截(FunctionInterception)是一种强大的技术,允许开发者在不修改原始函数代码的情况下,拦截、监控和修改函数的行为。本文将深入探讨JavaScript函数拦截的各种技术、应用场景以及最佳实践。什么是函数拦截?函数拦截是指在函数执行前、执行中或执行后插入自定义逻辑的过程。
- Golang可选参数实践
yzh_1346983557
golang可选参数
背景:go不支持类似java的方法重载,但对于函数的可选参数和默认参数配置,通常要在不影响不破坏现有逻辑基础上进行参数的添加。实现:通过options选项,使用函数进行参数的初始化和可选值的设置。代码:packagemainimport"fmt"//go实现可选参数实践//背景:go不支持方法重载,但对于函数的可选参数和默认参数配置,通常要在不影响不破坏现有逻辑基础上进行参数的添加//实现:通过o
- 自动化配置管理工具 SaltStack-03
Mr.Ron
linux自动化服务器运维
一、Jinja模板应用案例1、需求描述给之前通过saltstack安装好的lamp环境的apache修改配置文件,要求每个主机监听自己ip的80端口。2、实现思路如果通过单纯的修改配置文件根本无法实现,所以我们需要用到模板,将配置文件作为模板,通过定义模板中的变量来实现,并且需要引用grians参数。#编辑state配置文件[root@server~]#vim/srv/salt/prod/apac
- pip设置国内源 pip设置国内镜像
程序员leon
Linux系列pippython
以下是配置pip国内镜像源的完整方法及注意事项,综合主流配置方案和常见问题解决方案:一、临时使用国内源(单次有效)安装时通过-i参数指定镜像源:pipinstall包名-ihttps://pypi.tuna.tsinghua.edu.cn/simple--trusted-hostpypi.tuna.tsinghua.edu.cn-推荐源地址*:清华大学:https://pypi.tuna.tsin
- 第十五章:模板参数推导_《C++ Templates》notes
郭涤生
c/c++c++windows开发语言
模板参数推导第十五章核心知识点概览多选题设计题测试用例总结第十五章核心知识点概览模板参数推导基础引用折叠与完美转发SFINAE原则C++17类模板参数推导auto和decltype(auto)的推导规则模板参数推导基础知识点:函数模板参数通过调用时的实参类型推导数组/函数类型退化为指针引用类型不触发退化默认参数不参与推导代码示例:#include#includetemplatevoiddeduce
- dao传递类参数 mybatis_mybatis传递参数的方法
皮耶霍
dao传递类参数mybatis
一.传递一个参数例:根据员工编号查询员工的基本信息1.在dao接口中声明一个方法2.在mapper中实现该方法3.测试/***传递一个参数*/publicclassTest02{publicstaticvoidmain(String[]args){//获取SqlSession对象SqlSessionsession=SqlSessionFactoryUtil.getSession();//获取dao
- MyBatis传入参数的方式
二十六画生的博客
MybatisMySQLSpringMVCMyBatis传入参数方式
以下是传入两个参数的方式:第一种,使用@Param注解,定义参数别名,即定义映射关系DAO:publicListfindByUsernameAndPwd(@Param("userNameABC")Stringusername,@Param("passWordDEF")Stringpassword);SQL:SELECTFROMt_userandusername=#{userNameABC}andp
- Python --**kwargs
潇湘馆记
python
在Python中,**kwargs是一个特殊语法,用于在函数定义中接收任意数量的关键字参数(即键值对参数),并将这些参数以字典形式存储。它是Python中处理动态参数的强大工具,适用于需要灵活传递参数的场景。1.基本语法定义方式:在函数参数列表中使用**kwargs(名称可以自定义,但通常遵循kwargs约定)。参数类型:kwargs是一个字典,键是参数名,值是对应的参数值。示例defprint_
- 说明 unique_ptr 的 reset 方法?
unique-ptrreset
std::unique_ptr的reset方法用于显式地释放它所管理的资源,并可以选择性地用一个新的资源替换它。以下是reset方法的几种用法和示例:无参数调用reset()当调用reset()时,std::unique_ptr会释放它当前管理的资源,并将指针置为空。示例代码cpp复制includeincludeintmain(){//创建一个unique_ptr,分配内存std::unique_
- 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