- 【原创】开发部署中间件安装记录
liangrun521
java部署docker中间件dockerlinux
文章目录1.docker安装1.1离线安装:X86架构的主机1.2离线安装:ARM64架构的主机1.3在线安装-系统CentOS1.3在线安装-系统Debian2.supervisor安装3.nginx安装4.rabbitmq-包含x-delayed-message5.nacos5.1docker部署5.2系统命令部署(单机)5.3定制jar包部署,supervisor托管,使用提供的压缩包操作6
- unity转微信小游戏:自定义分享标题和分享图片
会潜水的小火龙
unity转微信小游戏unity微信小程序
unity转微信小游戏:自定义分享标题和分享图片代码使用方法代码//获取微信小程序分享参数更改为自己的分享标题和分享图片publicvoidOnShareAppMessage(boolisListen=true,stringimageUrl="",stringtitle="",stringquery=""){if(isListen){WX.ShowShareMenu(newShowShareMen
- 如何使用LangChain的`filter_messages`过滤消息
dagGAIYD
langchainjava数据库python
在复杂的对话链和代理中,我们常常需要维护一个消息列表。这个列表可能会积累来自多个不同模型、讲述者、子链等的消息。为了确保每次模型调用时只处理所需的消息,我们可以使用filter_messages实用工具来按类型、ID或名称过滤消息。技术背景介绍在对话系统或智能代理的开发中,管理消息状态是一项重要任务。随着对话深度的增加,消息列表可能会变得庞杂。因此,仅传递消息列表的子集至每个模型调用成为必要。此时
- vue基础代码第一篇
东锋1.3
vue.jsjavascriptvue.js前端
1创建一个基本的Vue应用import { createApp } from 'vue';import App from './App.vue';createApp(App).mount('#app');2在Vue组件中使用数据绑定 {{ message }}import { defineComponent } from 'vue';export default defineComponent(
- 【Java面试】RabbitMQ
白衫~
java-rabbitmqjava面试
RabbitMQ是什么?RabbitMQ是一款开源的、基于Erlang语言编写的消息中间件,遵循AMQP协议(AdvancedMessageQueuingProtocol)。RabbitMQ核心概念生产者(Producer):发送消息的一方。消费者(Consumer):接收消息的一方。消息队列(Queue):存储消息的容器,消息最终被发送到这里。交换器(Exchange):负责将消息路由到队列,根
- 一文熟知docker安装RabbitMQ及安装延迟插件
java晴天过后
rabbitmqdocker分布式
我这个安装攻略首先得保证服务器上安装过docker了如果没安装docker请先去安装docker1.首先说一下什么是MQMQ(messagequeue)字面意思上来说消息队列,FIFO先入先出,队列中存入的内容是message,是一种跨进程的通信机制,用于上下游传递消息。MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。1
- 【Python】Tkinter电器销售有限公司销售数据分析(源码)【独一无二】
不争不抢不显不露
python数据分析开发语言
一、设计要求该项目创建一个数据分析软件,利用Tkinter和Matplotlib构建图形用户界面(GUI),读取和分析美迪电器销售有限公司销售数据。用户可以通过界面选择月份查看数据详情、生成销量图表并计算月总销量和年总销量。二、设计思路2.模块引入首先引入了所需的模块,包括Tkinter(用于GUI创建和管理)、ttk(Tkinter主题化控件)、messagebox(用于弹出消息框)、panda
- NextJs - antd5 降级兼容方案
Zong_0915
NextJsantd前端
NextJs-antd5降级兼容方案前言一.降级解决方案1.1解决message等通知静态方法的样式丢失问题1.1解决非静态的样式兼容前言目前antd5对于SSR的兼容还有各方面都是很不错的,比如性能、UI设计等,不过,我们作为开发人员,在使用antd5作为UI组件库的时候,还需要考虑版本兼容问题,这里就说明下NextJs中如何进行antd5的降级。和本篇内容有关的前序文章:NextJs-SSR渲
- mybatis xml sql
媤纹琴獣
mybatisxmlsql
1.mybatis根据某一个字段根据以及集合中的列表进行模糊匹配mapperListselectByLinkList(@Param("userId")StringuserId,@Param("messageName")StringmessageName,@Param("anJinGoodsNameList")ListanJinGoodsNameList,@Param("sjDate")Datesj
- 深入理解 JavaScript 引擎与消息队列的底层原理
D.eL
javascript开发语言ecmascript
深入理解JavaScript引擎与消息队列的底层原理JavaScript是现代Web开发中最为重要的编程语言之一,它的运行和执行方式常常是开发者关注的重点。为了更好地理解JavaScript的执行过程,我们需要深入探索JavaScript引擎的工作原理,尤其是事件循环(EventLoop)、消息队列(MessageQueue)以及它们如何协同工作来处理异步任务。在这篇文章中,我们将深入分析Java
- 融云 IM 干货丨私有云IMKit源码支持哪些自定义功能?
融云即时通信im
私有云IMKit源码支持多种自定义功能,以下是一些主要的自定义功能:1.自定义输入区域自定义输入模式:可以自定义输入区域的模式,例如文本输入、语音输入等。自定义扩展区域(插件):可以添加自定义的扩展区域,例如添加新的功能按钮或插件。自定义表情:可以自定义表情的显示和使用。2.自定义消息类型注册自定义消息:在建立IM连接之前,使用imkit实例的registerMessageType方法来注册自定义
- python中redirect如何传值_传递参数时重定向 - python
叫我柴先生
在烧瓶中,我可以这样做:render_template("foo.html",messages={'main':'hello'})如果foo.html包含{{messages['main']}},则页面将显示hello。但是,如果有一条通往foo的路线怎么办:@app.route("/foo")defdo_foo():#dosomelogicherereturnrender_template("f
- python微信库itchat_用python写一个微信群发工具(基于itchat库)
weixin_39654619
python微信库itchat
fromwxpyimport*fromtimeimportsleepimportrandombot=Bot(cache_path=True)#print('防止微信账号违规操作被封,每次发送信息时间间隔为随机0-1.5s')message=input('请输入要发送的微信信息:')friends_number=input('请输入账号好友数量:')number=int(friends_number
- SpringCloud-05-OpenFeign服务接口调用
六甲横宝
SpringCloud微服务Javajavaspringeurekaspringboot
OpenFeign服务接口调用1.概述1.OpenFeign是什么?Feign是一个声名式WebService客户端,使用Feign能让编写WebService客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。SpringCloud对Feign进行了封装,使其支持了SpringMVC标准注解和HttpMessageConverters。Fe
- Python 网页控制自动化 getEdgeDriver
chenchihwen
服务器mysql运维
透过python使用edge执行自动化时,原来的代码出现报错了执行报错啦:messageinfo如下显示HTTPSConnectionPool(host='msedgedriver.azureedge.net',port=443):Maxretriesexceededwithurl:/130.0.2849/edgedriver_win64.zip(CausedbyNewConnectionErro
- ElMessageBox显示在浏览器的左下角问题
问题原因:elementplus已经做了按需引入,再导入ElMessageBox,就会导致弹框显示在左下角修改方法:将导入注释或者删除掉就可正常//import{ElMessageBox}from'element-plus'
- Vue的动态绑定
m0_74169345
javascript前端vue.js
Vue的动态绑定是其核心功能之一,通过它可以实现数据与视图之间的双向绑定,当数据发生变化时,视图会自动更新,反之亦然。以下是几种常见的动态绑定方式:数据绑定插值表达式:使用双大括号{{}}将数据插入到模板中。例如{{message}},当message数据发生变化时,页面上对应的位置会自动更新显示新的值。这种方式主要用于文本内容的绑定。v-text指令:与插值表达式类似,也是用于绑定文本内容。例如
- wordpress常见数据库连接错误原因及其解决方案
wodrpress资源分享
数据库wordpress
WordPress数据库连接错误通常是由于数据库配置问题、数据库服务器问题或权限问题引起的。以下是一些常见的数据库连接错误及其解决方案:常见错误信息1.“Errorestablishingadatabaseconnection”2.“WordPressdatabaseerror:[Errormessage]”3.“Unknowndatabase”4.“Accessdeniedforuser”常见原
- Rabbitmq源码分析,重复消费问题的redis或数据库代码实现
xweiran
rabbitmq分布式java架构jvm数据结构后端
目录底层源码解析自定义唯一id算法MessageProperties类的相关实现自定义消息ID生成器配置和使用Rabbitmq是怎么判断是不是重复消息的呢?通过Redis的幂等性处理消息消费者实现分布式锁实现的重复检测完整的消息处理流程基于数据库实现Mapper接口消息处理服务RabbitMQ消息消费者底层源码解析RabbitMQ判断重复消息主要通过消息的唯一标识(MessageId)和幂等性处理
- 支持selenium的chromedriver更新到131.0.6778.87
代码的乐趣
selenium测试工具
最近chrome释放新版本:131.0.6778.87如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。selenium.common.exceptions.SessionNotCreatedException:Message:sessionnotcreated:ThisversionofChromeDriveronlysupportsChromeve
- qt编写linux守护进程,QT开发(三十五)——QT进程间通信
周恰恰
qt编写linux守护进程
QT开发(三十五)——QT进程间通信Qt是一个跨平台的应用框架,其进程间通信机制当然可以使用所在平台的进程间通信机制,如在Windows平台上的Message机制、共享内存、文件映射、管道、Socket等。其中,Qt对一些许多平台共有的IPC机制进行了封装。一、TCP/IP其实就是通过网络模块实现的IPC。不过Qt对其进行了封装,并提供了两个层次的API,包括应用程序级的QNetworkAcces
- HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能
Join下班了吗
harmonyos
Demo效果@Entry@ComponentstructStickyNestedScroll{@Statemessage:string='HelloWorld'@Statearr:number[]=[]scroller=newScroller()@StyleslistCard(){.backgroundColor(Color.White).height(72).width("100%").bord
- QT 通过QAxObject与本地应用程序读取Excel内容
梦里藍天
QT5qtexcel开发语言
首先在配置中加入QT+=axcontainer在开发过程中,经常需要与Excel文件进行交互,例如读取数据、写入数据或进行格式设置。Qt提供了一个强大的类QAxObject,通过它可以方便地操作Excel文件。QAxObjectexcel("ket.Application");if(excel.isNull()){QMessageBox::critical(this,"错误","没有发现Excel
- Java 异常架构Throwable
Flying_Fish_Xuan
java架构开发语言
1.Throwable类的概述在Java中,Throwable是所有错误和异常的超类。只有继承自Throwable类的实例可以被抛出或捕获。Throwable类本身是java.lang.Object的直接子类,它定义了异常处理的一些基本机制,如异常的堆栈轨迹、错误消息等。Throwable类的主要方法:getMessage():返回异常的详细描述信息。getLocalizedMessage():返
- SpringBoot整合OpenFeign和Hystrix
·yying·
java分布式springboothystrix后端
Feign和hystrix开启hystrix熔断器application.ymlfeign:hystrix:enabled:true方式一:简单,但无法获取异常信息和状态号FeignClient类@FeignClient(value="eureka-client-express-message",fallback=MessageClientHystrix.class)publicinterface
- 苹果 iMessage 新玩法:用一条信息就能打造你的迷你博客
文章目录通过iMessage重新定义个人博客写作什么是iMessage?为什么选择Public.me?如何使用Public.me?三步开启你的写作之旅Public.me的乐趣技术揭秘:Public.me如何工作?dockur/macosimessage-exporter如何协同工作苹果用户使用iMessage的注意事项结语本文分享一个有趣网站——Public.me,它可以让苹果用户通过简单的iMe
- 我常用的 Git 命令汇总(持久更新)
git
修改暂存区(未提交)的commitgitcommit--amendgitcommit--amend-m"Newcommitmessage"删除远程分支gitpushorigin:dev在dev分支,查看main分支的某个文件内容gitshowmain:README.md在dev分支,复制main分支的文件或文件夹gitcheckoutmain--README.md创建空白分支gitswitch--
- nodejs创建ws服务器,前端浏览器用websocket接收信息和发送信息给服务端
cdcdhj
nodejs服务器前端websocket
首页是用nodejs建立服务器端//wsserver.jsconstWebSocket=require('ws');constwss=newWebSocket.Server({port:8080});wss.on('connection',functionconnection(ws){ws.on('error',console.error);//接收客户端发送过来的信息ws.on('message
- 如何修改git commit message?
修改最近的一条commitmessage1执行gitcommit--amend会自动进入修改界面2修改commitmessage3保存并退出修改非最近的一条commitmessage1找到目标commitmessage的前一个commitId2执行gitrebase-icommitId进入rebase界面3将目标commitmessage前面的pick修改为reword4保存并退出,会自动进入修改
- laravel 中自动批量注册验证规则到验证器
laravel中自动批量注册验证规则到验证器创建抽象验证规则App\Rules\Rule、App\Rules\RegexRulepasses($attribute,$value)){$fail(static::message())->translate();}}/***规则名称*/publicstaticfunctionname():string{returnStr::of(class_basen
- Java 并发包之线程池和原子计数
lijingyao8206
Java计数ThreadPool并发包java线程池
对于大数据量关联的业务处理逻辑,比较直接的想法就是用JDK提供的并发包去解决多线程情况下的业务数据处理。线程池可以提供很好的管理线程的方式,并且可以提高线程利用率,并发包中的原子计数在多线程的情况下可以让我们避免去写一些同步代码。
这里就先把jdk并发包中的线程池处理器ThreadPoolExecutor 以原子计数类AomicInteger 和倒数计时锁C
- java编程思想 抽象类和接口
百合不是茶
java抽象类接口
接口c++对接口和内部类只有简介的支持,但在java中有队这些类的直接支持
1 ,抽象类 : 如果一个类包含一个或多个抽象方法,该类必须限定为抽象类(否者编译器报错)
抽象方法 : 在方法中仅有声明而没有方法体
package com.wj.Interface;
- [房地产与大数据]房地产数据挖掘系统
comsci
数据挖掘
随着一个关键核心技术的突破,我们已经是独立自主的开发某些先进模块,但是要完全实现,还需要一定的时间...
所以,除了代码工作以外,我们还需要关心一下非技术领域的事件..比如说房地产
&nb
- 数组队列总结
沐刃青蛟
数组队列
数组队列是一种大小可以改变,类型没有定死的类似数组的工具。不过与数组相比,它更具有灵活性。因为它不但不用担心越界问题,而且因为泛型(类似c++中模板的东西)的存在而支持各种类型。
以下是数组队列的功能实现代码:
import List.Student;
public class
- Oracle存储过程无法编译的解决方法
IT独行者
oracle存储过程
今天同事修改Oracle存储过程又导致2个过程无法被编译,流程规范上的东西,Dave 这里不多说,看看怎么解决问题。
1. 查看无效对象
XEZF@xezf(qs-xezf-db1)> select object_name,object_type,status from all_objects where status='IN
- 重装系统之后oracle恢复
文强chu
oracle
前几天正在使用电脑,没有暂停oracle的各种服务。
突然win8.1系统奔溃,无法修复,开机时系统 提示正在搜集错误信息,然后再开机,再提示的无限循环中。
无耐我拿出系统u盘 准备重装系统,没想到竟然无法从u盘引导成功。
晚上到外面早了一家修电脑店,让人家给装了个系统,并且那哥们在我没反应过来的时候,
直接把我的c盘给格式化了 并且清理了注册表,再装系统。
然后的结果就是我的oracl
- python学习二( 一些基础语法)
小桔子
pthon基础语法
紧接着把!昨天没看继续看django 官方教程,学了下python的基本语法 与c类语言还是有些小差别:
1.ptyhon的源文件以UTF-8编码格式
2.
/ 除 结果浮点型
// 除 结果整形
% 除 取余数
* 乘
** 乘方 eg 5**2 结果是5的2次方25
_&
- svn 常用命令
aichenglong
SVN版本回退
1 svn回退版本
1)在window中选择log,根据想要回退的内容,选择revert this version或revert chanages from this version
两者的区别:
revert this version:表示回退到当前版本(该版本后的版本全部作废)
revert chanages from this versio
- 某小公司面试归来
alafqq
面试
先填单子,还要写笔试题,我以时间为急,拒绝了它。。时间宝贵。
老拿这些对付毕业生的东东来吓唬我。。
面试官很刁难,问了几个问题,记录下;
1,包的范围。。。public,private,protect. --悲剧了
2,hashcode方法和equals方法的区别。谁覆盖谁.结果,他说我说反了。
3,最恶心的一道题,抽象类继承抽象类吗?(察,一般它都是被继承的啊)
4,stru
- 动态数组的存储速度比较 集合框架
百合不是茶
集合框架
集合框架:
自定义数据结构(增删改查等)
package 数组;
/**
* 创建动态数组
* @author 百合
*
*/
public class ArrayDemo{
//定义一个数组来存放数据
String[] src = new String[0];
/**
* 增加元素加入容器
* @param s要加入容器
- 用JS实现一个JS对象,对象里有两个属性一个方法
bijian1013
js对象
<html>
<head>
</head>
<body>
用js代码实现一个js对象,对象里有两个属性,一个方法
</body>
<script>
var obj={a:'1234567',b:'bbbbbbbbbb',c:function(x){
- 探索JUnit4扩展:使用Rule
bijian1013
java单元测试JUnitRule
在上一篇文章中,讨论了使用Runner扩展JUnit4的方式,即直接修改Test Runner的实现(BlockJUnit4ClassRunner)。但这种方法显然不便于灵活地添加或删除扩展功能。下面将使用JUnit4.7才开始引入的扩展方式——Rule来实现相同的扩展功能。
1. Rule
&n
- [Gson一]非泛型POJO对象的反序列化
bit1129
POJO
当要将JSON数据串反序列化自身为非泛型的POJO时,使用Gson.fromJson(String, Class)方法。自身为非泛型的POJO的包括两种:
1. POJO对象不包含任何泛型的字段
2. POJO对象包含泛型字段,例如泛型集合或者泛型类
Data类 a.不是泛型类, b.Data中的集合List和Map都是泛型的 c.Data中不包含其它的POJO
 
- 【Kakfa五】Kafka Producer和Consumer基本使用
bit1129
kafka
0.Kafka服务器的配置
一个Broker,
一个Topic
Topic中只有一个Partition() 1. Producer:
package kafka.examples.producers;
import kafka.producer.KeyedMessage;
import kafka.javaapi.producer.Producer;
impor
- lsyncd实时同步搭建指南——取代rsync+inotify
ronin47
1. 几大实时同步工具比较 1.1 inotify + rsync
最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是 inotify + rsync,但随着文件数量的增大到100W+,目录下的文件列表就达20M,在网络状况不佳或者限速的情况下,变更的文件可能10来个才几M,却因此要发送的文件列表就达20M,严重减低的带宽的使用效率以及同步效率;更为要紧的是,加入inotify
- java-9. 判断整数序列是不是二元查找树的后序遍历结果
bylijinnan
java
public class IsBinTreePostTraverse{
static boolean isBSTPostOrder(int[] a){
if(a==null){
return false;
}
/*1.只有一个结点时,肯定是查找树
*2.只有两个结点时,肯定是查找树。例如{5,6}对应的BST是 6 {6,5}对应的BST是
- MySQL的sum函数返回的类型
bylijinnan
javaspringsqlmysqljdbc
今天项目切换数据库时,出错
访问数据库的代码大概是这样:
String sql = "select sum(number) as sumNumberOfOneDay from tableName";
List<Map> rows = getJdbcTemplate().queryForList(sql);
for (Map row : rows
- java设计模式之单例模式
chicony
java设计模式
在阎宏博士的《JAVA与模式》一书中开头是这样描述单例模式的:
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。 单例模式的结构
单例模式的特点:
单例类只能有一个实例。
单例类必须自己创建自己的唯一实例。
单例类必须给所有其他对象提供这一实例。
饿汉式单例类
publ
- javascript取当月最后一天
ctrain
JavaScript
<!--javascript取当月最后一天-->
<script language=javascript>
var current = new Date();
var year = current.getYear();
var month = current.getMonth();
showMonthLastDay(year, mont
- linux tune2fs命令详解
daizj
linuxtune2fs查看系统文件块信息
一.简介:
tune2fs是调整和查看ext2/ext3文件系统的文件系统参数,Windows下面如果出现意外断电死机情况,下次开机一般都会出现系统自检。Linux系统下面也有文件系统自检,而且是可以通过tune2fs命令,自行定义自检周期及方式。
二.用法:
Usage: tune2fs [-c max_mounts_count] [-e errors_behavior] [-g grou
- 做有中国特色的程序员
dcj3sjt126com
程序员
从出版业说起 网络作品排到靠前的,都不会太难看,一般人不爱看某部作品也是因为不喜欢这个类型,而此人也不会全不喜欢这些网络作品。究其原因,是因为网络作品都是让人先白看的,看的好了才出了头。而纸质作品就不一定了,排行榜靠前的,有好作品,也有垃圾。 许多大牛都是写了博客,后来出了书。这些书也都不次,可能有人让为不好,是因为技术书不像小说,小说在读故事,技术书是在学知识或温习知识,有
- Android:TextView属性大全
dcj3sjt126com
textview
android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all) android:autoText 如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输
- tomcat虚拟目录安装及其配置
eksliang
tomcat配置说明tomca部署web应用tomcat虚拟目录安装
转载请出自出处:http://eksliang.iteye.com/blog/2097184
1.-------------------------------------------tomcat 目录结构
config:存放tomcat的配置文件
temp :存放tomcat跑起来后存放临时文件用的
work : 当第一次访问应用中的jsp
- 浅谈:APP有哪些常被黑客利用的安全漏洞
gg163
APP
首先,说到APP的安全漏洞,身为程序猿的大家应该不陌生;如果抛开安卓自身开源的问题的话,其主要产生的原因就是开发过程中疏忽或者代码不严谨引起的。但这些责任也不能怪在程序猿头上,有时会因为BOSS时间催得紧等很多可观原因。由国内移动应用安全检测团队爱内测(ineice.com)的CTO给我们浅谈关于Android 系统的开源设计以及生态环境。
1. 应用反编译漏洞:APK 包非常容易被反编译成可读
- C#根据网址生成静态页面
hvt
Web.netC#asp.nethovertree
HoverTree开源项目中HoverTreeWeb.HVTPanel的Index.aspx文件是后台管理的首页。包含生成留言板首页,以及显示用户名,退出等功能。根据网址生成页面的方法:
bool CreateHtmlFile(string url, string path)
{
//http://keleyi.com/a/bjae/3d10wfax.htm
stri
- SVG 教程 (一)
天梯梦
svg
SVG 简介
SVG 是使用 XML 来描述二维图形和绘图程序的语言。 学习之前应具备的基础知识:
继续学习之前,你应该对以下内容有基本的了解:
HTML
XML 基础
如果希望首先学习这些内容,请在本站的首页选择相应的教程。 什么是SVG?
SVG 指可伸缩矢量图形 (Scalable Vector Graphics)
SVG 用来定义用于网络的基于矢量
- 一个简单的java栈
luyulong
java数据结构栈
public class MyStack {
private long[] arr;
private int top;
public MyStack() {
arr = new long[10];
top = -1;
}
public MyStack(int maxsize) {
arr = new long[maxsize];
top
- 基础数据结构和算法八:Binary search
sunwinner
AlgorithmBinary search
Binary search needs an ordered array so that it can use array indexing to dramatically reduce the number of compares required for each search, using the classic and venerable binary search algori
- 12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
刘星宇
c面试
12个C语言面试题,涉及指针、进程、运算、结构体、函数、内存,看看你能做出几个!
1.gets()函数
问:请找出下面代码里的问题:
#include<stdio.h>
int main(void)
{
char buff[10];
memset(buff,0,sizeof(buff));
- ITeye 7月技术图书有奖试读获奖名单公布
ITeye管理员
活动ITeye试读
ITeye携手人民邮电出版社图灵教育共同举办的7月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。
7月试读活动回顾:
http://webmaster.iteye.com/blog/2092746
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《Java性能优化权威指南》