- `http_port_t
宜昌李国勇
android前端
`http_port_t`是SELinux(Security-EnhancedLinux)中的一种端口类型标签,用于标识哪些端口可以被HTTP和HTTPS服务使用。SELinux是一种强制访问控制(MAC)安全模块,它通过定义安全策略来限制进程对系统资源的访问,从而增强系统的安全性。###`http_port_t`的作用在SELinux中,每个网络端口都有一个类型标签,这些标签决定了哪些进程可以绑
- 将自己的SSH密钥对导入YubiKey 5的PIV和智能卡模块,配合Putty和XShell使用
sbdx
LinuxyubikeyXShellPIVSSHLinux
前言YubiKey是什么东西我就不多说,简单的说是一种用来保存私钥的硬件设备,私钥一旦写入就无法读出,比起保存在硬盘里的私钥文件,更安全。前段时间入手一个YubiKey5NFC,最近一直在研究怎么用来登录SSH。需求我手上已经有了一个SSH密钥对用来管理着几十台Linux服务器,,在YubikeyMmanager->PIV中只能重新生成密钥对,并且无法导出私钥,然而我不想更换的我的私钥,与我的需求
- 基于Nodejs的你划我猜词库管理系统+源码+高分项目
墨痕_777
python
你划我猜词库管理系统本博文提供了完整的代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。word-manage前端代码npmrunserve运行前端项目npmrunbuild打包生产环境代码npmruntest打包测试环境代码运行系统先打包前端代码npmrunbuild,放在static文件夹nodeapp.js项目运行在2900端口word表设计title词语hard难
- nacos下载及安装
bxp1321
springcloudjava开发语言
下载官方最新稳定版github下载较慢,推荐下面的下载链接NacosServer下载|Nacos官网点击下载和试用下载最新稳定版NacosServer下载|Nacos官网配置检查(可选)默认情况下,Nacos使用内置的Derby数据库(单机模式无需修改)。如需使用MySQL(生产环境推荐),需修改配置文件:打开conf/application.properties。修改数据库配置:spring.d
- 从零开始搭建私有云服务器
6v6-博客
服务器运维
从零开始搭建私有云服务器1.准备工作硬件要求:一台性能足够的服务器(可以是物理机或虚拟机)。建议配置:至少4核CPU、8GB内存、100GB硬盘。操作系统:推荐使用UbuntuServer20.04LTS。网络环境:确保服务器有稳定的公网IP或内网穿透能力。2.安装操作系统下载UbuntuServer20.04LTS镜像:https://ubuntu.com/download/server。使用工
- 【无标题】DeepSeek是可对接那些端口
李鲶鱼
pythonc++人工智能
DeepSeek是一个强大的AI模型,可以应用于多个端口,为各种场景提供智能解决方案。移动端应用智能手机助手:DeepSeek集成到手机助手中,提供智能对话、文本写作、语言翻译等功能。例如,华为的小艺助手和荣耀的YOYO智能体通过接入DeepSeek,提升了对话流畅度和知识库的时效性。虚拟主播:利用DeepSeek生成虚拟主播,进行24小时优质播报。桌面端应用智能客服:在医院的官方公众号中接入De
- ubuntu 设置,命令
希望永不脱发的程序猿
ubuntulinux服务器
xshell不能连接Ubuntu,但是ubuntu主机可以ping得通其他主机1.在ubuntu主机中的terminalcontrol中输入:sudoaptget-installopenssh-server;安装ubuntu时不会安装ssh服务。2.ubuntu时间修改cp/usr/share/zoneinfo/Asia/Shanghai/etc/localtime3.ssh-keygen-tds
- MySQL Heartbeat+drbd高可用
脚灬印
MySQLmysql
MySQLHeartbeat+drbd高可用环境--具体的配置信息如下所示:角色ip地址主机名字server-idprimary心跳及传输IP:192.168.0.51data-11管理及对外IP:10.0.0.51VIP:10.0.0.151standby心跳及传输IP:192.168.0.52data-21管理及对外IP:10.0.0.51VIP:10.0.0.152Heartbeat安装配置
- 【计算机网络】常见tcp/udp对应的应用层协议,端口
{⌐■_■}
计算机网络tcp/ipudp
TCP和UDP对应的常见应用层协议基于TCP的应用层协议协议全称用途默认端口HTTPHyperTextTransferProtocol超文本传输协议80HTTPSHTTPSecure加密的超文本传输协议443FTPFileTransferProtocol文件传输协议(20传输数据,21控制连接)20,21SMTPSimpleMailTransferProtocol发送邮件25POP3PostOff
- 【Kubernets】Kubernetes 的基础知识,Pod是什么? 和容器的关系?多个容器如何在同一个 Pod 里协作?
{⌐■_■}
Kuberneteskubernetes容器云原生
1.Kubernetes的核心概念(1)Node(节点)定义:Node是Kubernetes集群中的工作机器,可以是物理机或虚拟机。类型:MasterNode:运行控制平面组件(如APIServer、Scheduler)。WorkerNode:运行应用负载(如Pod)。关键组件:Kubelet:负责与MasterNode通信,管理Pod和容器。KubeProxy:负责网络代理和负载均衡。容器运行时
- k8s集群中部署dcgm-exporter收集GPU指标
thinkerCoder
kubernetes容器运维GPU
总体步骤:部署dcgm-exporter的DaemonSet和Service,确保Service有正确的标签和端口。创建ServiceMonitor,选择dcgm-exporter的Service,并指定端口。检查Prometheus的targets页面,确认dcgm-exporter是否被正确发现和抓取。可能需要调整Prometheus的RBAC或网络策略,确保访问权限。1,部署dcgm-exp
- Java直通车系列27【Spring Boot】(配置文件使用)
浪九天
Java直通车javaspringbootspring后端开发语言
目录配置文件的作用与格式配置文件的类型配置文件的加载顺序场景示例SpringBoot中配置文件的使用非常灵活和重要,主要有.properties和.yml(.yaml)两种格式:配置文件的作用与格式作用:用于配置SpringBoot应用程序的各种属性,如数据库连接信息、服务器端口、日志级别、自定义属性等,实现对应用行为的定制化。.properties格式:以键值对形式存储配置信息,每行一个键值对,
- 【C++项目】从零实现RPC框架「一」:项目准备与前置知识学习
Zfox_
C++从入门到精通c++rpc项目分布式muduojsoncpplinux
个人主页:Zfox_系列专栏:C++从入门到精通目录一:项⽬介绍二:技术选型三:开发环境四:Ubuntu-22.04环境搭建五:第三⽅库使⽤介绍JsonCpp库Json数据格式JsonCpp介绍JsonCpp使⽤Muduo库Muduo库是什么通俗解释Muduo库常⻅接⼝介绍TcpServer类基础介绍EventLoop类基础介绍TcpConnection类基础介绍TcpClient类基础介绍Buf
- 使用 WinSCP 连接至 Windows Subsystem for Linux (WSL)
四月的我
windowslinux运维
确认WSL版本WSL1:直接使用localhost连接WSL2:需通过虚拟网络适配器的IP连接(需额外配置)在WSL中安装并配置SSH服务器步骤1:更新系统bashsudoaptupdate&&sudoaptupgrade-y步骤2:安装OpenSSH服务bashsudoaptinstallopenssh-server-y步骤3:修改SSH配置编辑配置文件:bashsudonano/etc/ssh
- 【阿里云部署fastapi,端口挂载到域名】
放飞自我的Coder
阿里云fastapi网络
-购买阿里云ECS,域名(并ICP备案),ssl证书-linux创建端口转发(将80转发到1234)sudoiptables-tnat-APREROUTING-ptcp--dport80-jREDIRECT--to-port1234
- SpringBoot 外化配置及加载顺序
ashane1314
springbootpython后端
SpringBoot的外化配置加载顺序遵循特定的优先级规则,高优先级的配置会覆盖低优先级的。以下是详细的配置源加载顺序及规则:一、配置源的优先级(从高到低)命令行参数通过--key=value传递的参数,如java-jarapp.jar--server.port=8081。SPRING_APPLICATION_JSON属性通过环境变量或系统属性传递的JSON格式配置,如SPRING_APPLICA
- Chromium浏览器的代理配置和通信原理
JT-999
Chromium内核chrome网络
Chromium浏览器的代理配置和通信原理涉及多个组件和流程,以下是它们的基本原理:1.代理配置Chromium浏览器支持多种类型的代理配置,包括手动配置、自动配置(通过PAC脚本)、自动检测(通过WPAD协议)等。代理配置的原理是根据用户设置或网络环境动态选择合适的代理服务器来处理网络请求。手动配置:用户手动指定代理服务器的地址和端口,浏览器将所有的网络请求都发送到指定的代理服务器上。自动配置(
- 设计模式:观察者模式
java
一、模式定义观察者模式属于行为型设计模式,用于建立对象间的一对多依赖关系。当主题(Subject)状态变化时,所有依赖的观察者(Observer)会自动收到通知并更新。二、核心角色Subject(主题)维护观察者列表,提供添加/删除观察者的方法定义通知观察者的方法Observer(观察者接口)定义更新接口,用于接收主题通知ConcreteSubject(具体主题)存储具体状态信息状态改变时触发通知
- 每日学习Java之一万个为什么
~Yogi
修炼学习java开发语言
文章目录Spring声明式事务配置事务接口PlatformTransactionManagerSpring基于AOP的事务具体实现流程@Transactional细节事务传播行为SpringMVC所需依赖SpringMVC五个组成部分功能及其原理SpringMVCHandler方法注解RequestMappingHandlerAdapter工作原理Handler需要处理的数据格式,以及用于简化参数
- 请求https,X509证书信任管理器类,避免导证书
益梅珍
代码片段发送请求java
实现X509证书信任管理器类(避免导证书)packagecom.showlin.httpsDemo;importjavax.net.ssl.X509TrustManager;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;/***@Author:xielin*@Descri
- https协议如何通过X509TrustManager接口实现自己创建的证书
wangmingbin
javahttps
开通了一个https协议,但是不是国际认证的,自己做的证书,访问一个接口的时候比如https:/xx.xx.xx.xx/a?c=d的时候,如果在游览器访问,需要用户确认的。如果我要模拟服务器向这个接口发送请求,就会报错误。我的原代码是:1创建信任管理器/***信任管理器**@authorliufeng*@date2013-04-10*/publicclassMyX509TrustManagerim
- python动态SQL并执行查询
IT-例子
pythonpythonsql数据库
python动态SQL#coding=utf-8#sqlserver的连接importpymssqlimportdatetimeimporttimestart=time.perf_counter()print('程序正在运行,请稍等...')print("数据读取中...")today_now=datetime.datetime.now()print("现在时间是:",today_now)"""这
- linux 系统 之centos安装 docker
羱滒
生产环境问题linuxcentosdocker
对于CentOS安装Docker的前置条件首先,需要安装一些必要的软件包,对于CentOS7,可以使用以下命令:sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2添加Docker仓库设置Docker的官方仓库。对于CentOSsudoyum-config-manager--add-repohttps://download.docke
- Microsoft SQL Server 2012(附序列号)
曹瑞曹瑞
MicrosoftSQLServer2012是微软发布的新一代数据平台产品。SQLServer2012不仅延续现有数据平台的强大能力,全面支持云技术与平台,并且能够快速构建相应的解决方案实现私有云与公有云之间数据的扩展与应用的迁移。SQLServer2012提供对企业基础架构最高级别的支持—专门针对关键业务应用的多种功能与解决方案可以提供最高级别的可用性及性能。在业界领先的商业智能领领域,SQLS
- SSE Server-Send Events适用于什么场景,有什么弊端存在
Jerome_GHW
信息与通信
Server-SentEvents(SSE)是一种用于在客户端和服务器之间实现单向实时通信的Web技术。它主要适用于需要从服务器向客户端推送实时信息的场景,例如新闻更新、股票价格变动、社交媒体通知等。SSE的优点:实时性:SSE提供了从服务器到客户端的单向实时通信,允许服务器在事件发生时向客户端推送数据。简单易用:SSE使用简单,只需使用EventSource对象在客户端监听即可。SSE的弊端:单
- 08.03.01.tiptop webserver接口篇(增加接口案例测试 单表数据)
DKLi1717
鼎捷tiptop5.3开发语言
本页目录:1、制作xml2、配置2、测试注册服务接口案例:/u1/topprod/tiptop/aws/4gl/aws_ttsrv2_service.4glCreateCustomerData接口案例代码:/u1/topprod/tiptop/aws/4gl/aws_create_customer_data.4gl制作xml注意:vscode可以下载插件:XML对代码进行格式化再添加转译符或者&l
- 08.03.02.tiptop webserver接口篇(增加接口案例测试 多表数据)
DKLi1717
鼎捷tiptop5.3开发语言
本页目录:1、制作xml2、配置2、测试注册服务接口案例:/u1/topprod/tiptop/aws/4gl/aws_ttsrv2_service.4glCreateQuotationData接口案例代码:/u1/topprod/tiptop/aws/4gl/aws_create_quotation_data.4gl制作xml注意:vscode可以下载插件:XML对代码进行格式化再添加转译符或者
- java websocket 认证_配置JAVA SSL/TLS 之websocket wss交互式认证
weixin_39695490
javawebsocket认证
我下面生成的.keystore文件也可以用.jks后缀代替,jks的意思就是javakeystore,另外需要知道.cer文件是二进制的,.pem文件是文本文件,本质都是一样的,他们可以互相转换。java语言操作的是二进制的文件,其他的一些脚本语言,可能操作的是PEM格式的文件。看具体情况吧。创建服务端keystorekeytool-genkey-v-aliasserver_ks-keysize2
- 用flask做个简单llm-api
格瑞Lxf
flaskpython后端
详细文档见:flask中文文档快速上手—Flask中文文档(2.3.x)(dormousehole.readthedocs.io)也可以看英文文档。接收端:开放本机5000端口apifromflaskimportFlask,jsonify,requestapp=Flask(__name__)fromutils.llmimportload_llmllms=load_llm()defllm(quest
- kubernetes的ingress实现同时支持http和https
忍冬行者
k8shttpkuberneteshttps
生产环境中对外的服务一般需要配置https服务,使用ingress也可以很方面的添加https的证书。默认情况下,如果为该Ingress启用了TLS,控制器会使用308永久重定向响应将HTTP客户端重定向到HTTPS端口443。(Ingress里配置了https证书的话,默认就一定会走https)。即默认情况下,如果在ingress规则中配置了tls,所有http的流量都会重定向到https。在一
- 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