- 博客(375)
- 资源 (33)
- 收藏
- 关注
原创 SciPy 最优化之最小化
SciPy 是一个开源的算法库和数学工具包,可以处理最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、信号处理、图像处理、常微分方程求解器等。为什么 SciPy 没有 maximize 方法呢,因为没有必要,想要找到最大化的值,只要把目标函数的值取反,或者是模或绝对值的最小值。虽然 SciPy 对特定的问题有更直白的函数,如求根有 optimize.root, 线性规则 optimize.linprog(现不建议使用),但各种优化基本都可以回归到 minimize 方法调用。
2024-12-12 23:05:49
288
原创 跨 CA 签发多个证书的 Nginx mTLS 配置
今天升级了 ChatGPT 为 Plus 版本,可以用 ChatGPT 4o, 确实是比较强,输入 "mtls 不同 ca 签发的服务端客户端证书在 nginx 中的配置" 提示符产生的内容几乎可以直接作为博文。但本人必须遵循本博客非 AI 产生的原则,只参考 ChatGTP 的答案,关键是一个要自己亲自动手验证并理解每一项配置的功用。研究过用同一个 CA 签发的服务端和客户端证书的 Nginx mTLS 配置,本文要试验一番服务端和客户端证书由不同 CA 机构签发的情形。
2024-12-03 13:22:10
239
原创 Wireshark 查看本地浏览器的 HTTPS 加密通信
继续 TLS(或 SSL, HTTPS) 的话题。但既然是本地浏览器能理解的网页内容,只要浏览器留了口子的话,也是有办法在 WireShark 中显示出抓取到的 HTTPS 的内容,那就是设置环境变量 SSLKEYLOGFILE, 然后启动浏览器(FireFox 或 Chrome), 就会把通信过程中的密钥记录到文件中,WireShark 中引用该 SSLKEY 文件就能显示出确切的 HTTP 请求的内容。
2024-12-02 01:29:08
518
原创 自签发证书配置 HTTPS 单向双向验证
如果是不被信任 CA 签发的证书,我们在浏览器中打开相应的 HTTPS url 就会看到 'Not Secure - Your connection is not private' 的提示,要继续访问需自行承担可能的安全责任。近来再次对 HTTPS/TLS 来了劲,自己的博客用的是 Let's Encrypt 签发的证书,这次实践一下自签发证书的过程与配置,并实现单向和双向的认证方式。证书是含有组织与域名或(CA) 信息以及公钥的文件, root.key 和 root.crt 将被用于签发其他的证书。
2024-12-02 01:28:35
509
原创 TLS 与 mTLS 的私钥交换过程
SSL 由 Netscape 于 90 年代开发,SSL1.0(94 年,未公开), SSL 2.0(95 年发布), SSL 3.0(96 年发布), 后来 IETF 出了个 TLS 1.0 作为 SSL 3.0 的继承者,再就是后面的 TLS 1.1(2006), 1.2(2008), 1.3(2018)。2015 年 TLS 正式的取代了 SSL,从此江湖不再有 SSL 了,而我们习惯说的 SSL 只是在向曾经的 Netscape 致敬,其实指代的就是 TLS。
2024-11-27 16:09:14
295
原创 Ollama - 简化使用本地大语言模型
学习完用 Transformers 和 llama.cpp 使用本地大语言模型后,再继续探索如何使用 Ollama 跑模型。Ollama 让运行和管理大语言模型变得更为简单,它构建在 llama.cpp 之上,并有优化,性能表现同样不俗。下面罗列一下它的特点。其他更多特性我们将在使用当中体验,仍然是在 i9-13900F + 64G 内存 + RTX 4090 + Ubuntu 22.4 台上进行。
2024-11-27 16:08:13
585
原创 用 llama.cpp 体验 Meta 的 Llama AI 模型
如果对模型进一步量化,如精度量化到 4 位整数,则所需显存大小降为原来的 1/4 到 1/3, 意味着 3B 模型只要 2 G 显存就能进行推理。注:数据类型 torch.float32, torch.bfloat16, 与 torch.float16 有不同的指数(Exponent),尾数(Fraction)宽度, 它们都有一位是符号位,所以剩下的分别为指数位和尾数位宽度, torch.float32(8, 23), torch.bfloat16(8, 7), torch.float16(5, 10)。
2024-11-27 16:07:35
528
原创 Oracle, PostgreSQL 字符串排序不一致及调整
有一个使用了不同数据库的应,Oracle 和 PostgreSQL,数据库中的记录完全相同,相同的查询语句(相同的排序,至少从字面上来说是的)取到的记录排序却不同,从而产生了 Bug。简单演示一下默认排序各自在这两种数据库中的行为, 比如说表中有两条记录,'VFORX' 和 'ibbVA'。
2024-11-27 16:06:56
498
原创 ECS Task Definition 中需要的 image:tag 明明在 ECR 中存在却找不到 image
然而最近突然不起作用了,本地不断的修改代码,构建新的镜像,覆盖原有 Tag, 重启 Task, 可是依旧跑的是老代码。这是近些天遇到的一个问题,因为早先使用 ECS 为求快速验证新的 Docker Image, 一直是用相同的 Tag 覆盖 ECR 中原有的 Docker Image,然后停掉 ECS 中相应的 Task, 新的 Task 起来,拉取最新 Docker Image,这样不用重新部署 Infrastructure, 以最小的改动就能达到偷梁换柱的效果。
2024-11-27 16:06:26
250
原创 试用 Llama-3.1-8B-Instruct AI 模型
IT 从业人员累的一个原因是要紧跟时代步伐,甚至是被拽着赶,更别说福报 996. 从早先 CGI, ASP, PHP, 到 Java, .Net, Java 开发是 Spring, Hibernate, 而后云时代 AWS, Azure, 程序一路奔波在掌握工具的使用。而如今言必提的 AI 模型更是时髦,n B 参数, 量化, 微调, ML, LLM, NLP, AGI, RAG, Token, LoRA 等一众词更让坠入云里雾里。所以在手机上可以离线轻松跑一个 1B 的模型。
2024-11-27 16:05:53
809
原创 Python logging 使用笔记
使用 Python 的话用不着像 Java 那样是考虑用 Logback 还是 Log4J 的问题,因为它内置提供了完备功能的 logging 库。虽然 JDK 也有 java.util.logging(JUL), 它的特性其实也不差,如日志级别,输出格式,不同的输出目的地的选择,但在 Logback 和 Log4J 的光环之下几乎无人问津。相比而言 Python 的 logging 却极为受宠,非必要时基本不会去考虑引入第三方的日志库,如, 尽管它们也很出色,毕竟是庶出。
2024-11-26 14:04:16
409
1
原创 多线程环境中使用 Mockito 来 Mock 静态方法
首先回顾一下 Mockito 的静态方法 Mock 的使用方法,随着 Mockito 版本的升级,引入依赖的方式也发生了些许的变化,以 Maven 项目为例,如果在 JUnit 5 下用 Mockito 的 pom.xml 依赖中为。,最后对 Mockito 产生的缺憾是它无法用来 Mock 非测试线程(主线程)中的静态方法调用。其实这也是可以变通的,下面慢慢道来。回看三年前的一篇日志。由它引入的全部相关依赖。
2024-11-26 14:03:42
437
原创 Java, Python 两种形式的 base64encode
在用 Python 写 Web 服务端代码时,用 base64.encodebytes() 函数对字符串进行编码,然后在 Java 端用 Base64.getDecoder().decode() 时无法解码,难道 base64 编码在两种语言间还有这等差异。Google 一下,得到的答案是在 Java 端要用 Base64.getMimeDecoder().decode() 函数解码。这一问题算是解决了, 不过后来又在 Python 写的 AWS Lambda 中输出。
2024-11-26 14:02:52
161
原创 ThreadLocal, InheritableThreadLocal 以及 TransmittableThreadLocal
ThreadLocal 用于保存与线程绑定的数据,它在框架内部使用的很频繁,但凡见到 XxxContextHolder.currentContext() 之类的十之八九用到了 ThreadLocal, 如 Spring 框架中的。ThreadLocal 是 Java 编程人员要掌握的一个基本类,似乎没什么太多要说。但因为本文要牵出 TransmittableThreadlLocal, 再顺带说下几乎隐形的 InheritableThreadLocal。
2024-11-26 14:02:10
154
原创 Dubbo 最基础的 RPC 应用(使用 ZooKeeper)
使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。看国内的一些项目时 Dubbo 这个词经常闪现,一直也不以为然,未作搜索,当然也不知道它是做什么用的。Dubbo 是国内企业贡献的,所以官方有原生的中文文档,它某些时候与 Spring Cloud 齐名,又有些像 AWS 的 ECS Service Discovery, Service Connect 加上 ELB 的功能。
2024-11-26 14:01:36
571
原创 使用 Redis 作为消息队列 - Redis Stream
如果以 Serverless 方式使用 AWS 的 Redis, 那么既然用到高级消息队列的功能,还能省去使用 AmazonMQ(ActiveMQ 或 RabbitMQ) 或 MSK(Kafka) 的高成本。Redis Stream 的每条消息会有一个唯一 ID, 支持消费组, Redis 用以支持 Stream 的一系列命令是 X 为前缀的,Redis stream 数据结构像是一个 append-only 日志,但又添加了 O(1) 的随机访问和复杂的消费策略,如消息分组。
2024-11-26 08:49:07
302
原创 调用 AWS Lambda 时如何传送字节数组
本文主要验证用 Python 写的 AWS Lambda 与 Java 客户端之间如何双向传递二进制数据,这里不涉及到 Lambda 流输入输出的问题。直觉的做法就是用 base64 编码二进制字节为普通的字符串,比如要节约网络传输的数据量,需要对文本进行压缩,格式可以是这样。这种方案实际也是可行的,然而我们在实际使用 Java AWS Lambda SDK 时有些动作会自动帮我们实现的,那就是二进制数据自动 base64 编码。一个 JSON 格式的字符串,反应到 AWS Lambda 时。
2024-11-26 08:48:30
463
原创 Java 使用堆外内存(off-heap memory) 作为缓存
关于 Java 本地缓存的存储分为内存与磁盘,内存多数情况下指的是堆内内存(on-heap), 而介于堆内内存与文件存储之间的就是堆外内存(off-heap), 列有 Generic, JCache(JSR-107), EhCache 2.x, Hazelcast, Infinispan, Couchbase, Redis, Caffeine, Simple, 这其中无一支持堆外缓存,其中的 EhCache 要付费使用 EhCache 3(Big Memory) 才能支持 off-heap。
2024-11-26 08:47:56
575
原创 用 C++ 写一个 AWS Lambda Hello World
如果使用 Python, Java 写 Lambda 时觉得还不得快,不想要明显的预热过程,也许 1000 毫秒的任务只想要 600 毫秒就能完成,内存还希望再压缩一些,那着实能在每月千百万次 Lambda 调用的情况下节省一笔可观的支出,那么可以试一试 C, C++, Rust, Go 等编译成了机器指令的语言,况且前三者没有 GC, 执行效率会更高。部署时可选择的 runtime 相应有 provided.al2023, provided.al2, 推荐使用 provided.al2023。
2024-11-26 08:47:25
569
原创 创建可直接用 root 用户 ssh 登陆的 Docker 镜像
有时候我们在 Mac OS X 或 Windows 平台下需要开发以 Linux 为运行时的应用,IDE 或可直接使用 Docker 容器,或 SSH 远程连接。本地命令行下操作虽然可以用连接正在运行的容器,但 IDE 远程连接的话 SSH 总是一种较为通用的连接方式,所以我们希望做一个能进行 SSH 连接的 Docker 容器。因为是本地运行的 Docker,我们想直接用 root 连接,以获得在容器中最大的运行权限。
2024-11-26 08:46:51
386
原创 C 语言静态库与动态库的生成和使用
为什么要了解静态库和动态库呢?我们多数时候使用的 IDE, 一个 Build 帮我们做了太多的事情,反而使我们眼前一抹黑,这背后有怎么把一个个源文件编译成目标文件(*.o) 文件,或生成静态库/动态库,又如何连接静态库/动态库生成可执行文件,等等。,它把用 GCC 生成静态库和动态库,以及如何使用他们说的很明白,有条件的可以直接看那个视频。本文就是一个观后的实操和笔记,加添了更多如何查看动态库,静态库,目标文件,执行文件的过程。启动该容器后,为编辑需要,最好安装一个 vim,在容器中运行。
2024-11-26 08:46:03
404
原创 Rust 调用 C/Rust 生成的动态库
在始终是 C/C++ 有着更优越性能的情况下,因而之前介绍过多种 其他不同的语言如何加载使用 C/C++ 写的动态库,有 Go, Python, Java 和 C#。在学习 Rust 之时也有类似的需求。本文的做法是要用到第三方库。在 Linux 中使用如下命令编译出 libadd.so 动态库文件。一文中相同的例子,add.c 代码内容如下。先来创建一个动态库,使用和。,这里将参考官方的例子。
2024-11-26 08:44:52
558
原创 Java 线程池有限大小工作队列 - 不丢弃任务的实现
我们在创建 Java 线程池,无论是用 Executors, ThreadPoolExecutor, 还是 Spring 的 ThreadPoolTaskExecutor, 如果不指定工作队列的大小的话,默认为 Integer.MAX_VALUE(2147483647), 基本不会把它爆满,但是在许多的任务要执行时大量 Runnable 对象的创建却足以把内存撑爆掉。
2024-11-26 08:43:37
237
原创 JDBC 设置 PostgreSQL 查询中 any(?) 的参数
这段时间都纠缠于 Java 如何操作 PostgreSQL 数据库上,千方百计的为求得更好的性能。为此我们用上了 Batch, 或用 id = any(?) 这种更 PostgreSQL 化的数组参数操作。其实它还有更多数组方面的花样可以玩,毕竟 PostgreSQL 数据库有一种广纳百川的胸怀,总有好的新特性能在 PostgreSQL 中首先体验到。在 PreparedStatement(PgPreparedStatement) 中设置数组参数的函数是用。占位符传入数组参数的代码是。
2024-11-26 08:42:56
515
原创 JDBC 批量调用数据库 SQL, 函数与存储过程
继续上一篇数据库相关操作的话题,在有大量的数据操作时(如增删改,甚至调用函数或存储过程),我们应该尽可能的采用批量化操作(先摆下结论,后面我们会看到原由)。业务数据的内容总量未变,但 Batch 操作除了可重用预编译的 Statement 外还, 可避免每次请求中重复的元数据,所以从 100,000 到 100 的缩减在时效上的表现是非常可观的,有时就是 60 分钟与 1 分钟的区别(在最后面测试结果显示这一差异更为恐怖)。接口中定义了如下 batch 相关的操作方法。
2024-11-26 08:42:04
519
原创 PostgreSQL 函数与存储过程及调用
PostgreSQL 随着云服务的盛行,越发被广泛的应用,免费开源且有丰富的特性支持,加上性能也很不错,因而备受青睐。PostgreSQL 的函数与存储过程区别并不太大,不像某些数据库的函数与存储过程必须是无副作用或有副作用,在 PostgreSQL 的函数和存储过程中可以进行任何的 SQL 操作。接下来我们来体验一下 PostgreSQL 的函数与存储过程。
2024-11-15 11:34:29
580
原创 Java 9 前/后使用 JAXB (包括支持 javax.* 或 jakarta.*)
命名空间,由此可给我们对使用了 JAXB 的项目升级 JDK 时指明方向。从而不致于因不了解每部分组件的具体功效而在 pom.xml 中胡乱配置,比如之前对 jaxb2-maven-plugin 插件本身配置了多余的 org.glassfish.jaxb:jaxb-xjc 和 org.glassfish.jaxb:jaxb-runtime 依赖,也未能理解 jaxb2-maven-plugin 与 org.glassfish.jaxb:jaxb-runtime 之间的版本对应关系。
2024-11-15 11:31:21
361
原创 Windows 安装使用 GCC(mingw-w64)
因为有个跨平台的东西用的是 C++, 需要分别编译出目标平台为 Linux 和 Windows 的二进制文件. 然而 C++ 并没有像 Rust 那样一出生就含着 Cargo 那样的工具链,完美的支持跨平台开发,构建。对于 C++ 代码不得不在 Linux 下用 GCC 编译器(Makefile), 而 Windows 下使用的 Visual Studio 的 MSBuild, 为了能统一用 Makefile 文件 + GCC 的方式编译 C++ 项目, 可选择 Windows 平台下也安装 GCC。
2024-11-15 11:29:49
691
原创 Rust 语言学习笔记(五)
终于来到了 Rust 的精髓所在了,那就是使之不依赖于垃圾回收又能保障内存安全且高效运行的所有权系统(Ownership System)。想要用 Rust 做一个稍显规模项目必定绕不过它,所有权系统包括所有权(Ownership), 借用(Borrowing), 生命周期(Lifetimes)。以下概念的复述基本是从 《Rust编程: 入门, 实战与进阶》一书中而来,那里面有些内容是来自于官方的。
2024-11-15 11:26:29
497
原创 从 Rust 官方文档理解 Ownership
Rust 另辟溪径,用 Owership 的一系列的规则来指导怎么管理内存,编译期保证程序运行期的内存安全性,不影响运行时性能。学习 Rust 的过程中需要很长时间去适应 Ownership, 从 Rust 开发者(Rustacean) 的经验来说是:随着对 Ownership 的掌握,越来轻松自然的写出安全高效的代码(希望如此)。同时在阅读过程中不进行过度的联想,不与 C/C++ 的引用, 指针, 指针的指针进行关联,力求做一个完全不会 C/C++ 的 Rust 初学者。所费篇幅似乎并不多。
2024-11-15 11:24:43
600
原创 Rust 语言学习笔记(四)
试手了一下 Rust, 发现止今所学知识尚浅,不少情况处理起来很是茫然,比如经常得到的值是 Result 或 Option, 有时候要 .unwrap(), 有时得后面加个问号,或 .await。现在所学的 Rust 在处理结果和错误时,采用了第二种方式,不过使用上 Rust 的模式匹配处理起 Option, Result 倒也不难,而且 Option 和 Result 这样的返回结果还用来向上传播异常,出错时还能追踪到异常栈。, 0 为正常,非 0 为有错误;
2024-11-15 11:23:50
566
原创 SpringBoot 应用出错 Comparison method violates its general contract!
后面会详细列出能重现此问题的 pom.xml 配置及 Java 代码。出现此错误的大致环境如下。
2024-11-15 11:23:04
303
原创 Rust 语言学习笔记(三)
觉得还是有必要继续深入学习一下 Rust 再练手,毕竟仍然看到 & 和 * 符号还有些恍惚,大概就是 C/C++ 里的取地址和取值操作吧,实际上也确实类似。只是叫法略有不同, 还有就是在 C/C++ 多用了指针的概念。在 C/C++ 和 Rust 中都叫做 Dereference Operator。以前学 C/C++ 经常被一系列的 &, * 打晕了头,如今参考了它们的英文名称立刻变得清晰了起来。就像当初看汇编各种寻址方式弄得头都大了,其实也就是依照约定。在 C/C++ 中,
2024-11-15 11:22:20
434
原创 使用 Redis 作为消息队列 - Pub/Sub, List, SortedSet
有好长一段时间没使用 Redis 了,之前用的都是 AWS 上的 Elastic Cache 的 Redis, 那时候还是用的版本还是 4 和 5。在新的项目由于觉得 Elastic Cache Redis 太贵而未曾使用,在去年的 AWS re:Invent 2023 上发布了,对于非长时间大数据的缓存可以考虑使用。而且还可以使用 Redis 的功能对服务进行解耦合,或作为一致性的协调中心。
2024-11-15 11:21:43
553
2
原创 Rust 语言学习笔记(二)
再继续快速学习一下 Rust 的以下几个知识点,就可以开始着手做点小工具了Rust 设计为有效使用内存考虑的,它提供了非常细力度的数据类型,如整数分为有无符号,宽度从 8 位到 128 位,分别表示为 i8, u8, u128 等。浮点数有 f32 和 f64,以及 bool 和 range 类型。
2024-11-12 01:32:14
604
原创 Rust 语言学习笔记(一)
学了不少编程语言,多数是离不开垃圾回收的,要么像 C++ 仍然是过于复杂,对于通用,编译型编程语言 Rust 是个不错的选择, Rust 不需要垃圾回收器。Rust 是由 Mozilla 主导开发的,设计准则为 "安全,并发,实用", 支持函数式,并发式,过程式以及面向对象的编程风格。Rust 能达到与 C++ 接近的性能,它又是编译型语言,编译出来二进制文件执行时不再依赖于运行时。Rust 有自带的 Cargo 作为依赖管理与构建工具,免除了关键工具的选择综合症。
2024-11-12 01:31:36
493
原创 Java StackOverflowError 与递归及尾递归优化
何谓递归调用,简单的说就是方法自己调用自己,从而实现循环的效果,或使代码更精练,例如经典排序中的快速和归并排序就要用到递归。但循环与递归又有本质上的区别,循环不增加调用深度;我们通常会把它与方法调用关联起来,因为一次方法调用会创建一个新的栈帧,分配在栈上的局部变量(包括基本类型与对象引用),和栈帧都要占用线程栈内存。StackOverflowError 一般出现在方法调用太深(方法调方法),手动编写的方法调用一般不容易达到这个限制,所以它与递归调用关系最为密切,递归调用次数太多或甚至没有出口条件无限递归;
2024-11-12 01:30:50
279
原创 《100 Java Mistakes and How to Avoid Them》笔记 3
NullPointerException, 这恐怕是一个最常见的异常,Java 对一个对象是否能为 null 值没什么约束,甚至用 null 来表示业务上的空。比如说方法的参数与返回值,Java 都可以是 null 值,而在 Kotlin 中非明确可为 null 的时不能为 null。系列从书的质量不是那么的高,但开了头还是继续从本书 40% 的位置往下。本书的阅读又搁置了许久,虽然感觉 Manning 出版社的这一。开始要讲述到异常了,异常还是有必要认真对待的,比如。Java 的主要异常大分类是。
2024-11-12 01:27:57
400
原创 本地和 ECS 容器(EC2/Fargate) 如何处理 ENTRYPOINT
在原来那篇文中认为 shell 无法接收到 docker stop 或 docker -s SIGTERM 发来的信号,也许是随着 Docker 版本的变迁,Docker 变得越发聪明了起来,无论何种格式的 ENTRYPOINT, 都能够收到 SIGTERM 信号,比如在 Java 的 ShutdownHook 能捕捉到该信号,得以在进程停止之前作必要的清理工作。最后发现是因为 JVM 的 -Xmx 配置太高,留给 Fargate 容器的太少的缘故。不觉一晃还是在五年前记录过一篇。
2024-11-12 01:27:25
418
原创 Vagrant 没了 VirtualBox 的话可以配 Qemu
之前一直是用 Vagrant 搭配 VirtualBox 在 Mac 下使用 Linux 虚拟机,因为不需要用到 Linux 桌面,用 Vagrant 操作虚拟机非常方便。有些尚未听说过,还有一些虽说支持,但别人提供的相应的 box 不多,Qemu 还算不错的 virtualbox 的替代品。Qemu 也是一款开源的虚拟机软件,它支持 Linux, macOS 和 Windows 平台,但它本身未提供友好的 UI 工具,所以创建一个 Qemu 虚拟机的命令会让人畏而却步。
2024-11-12 01:26:06
374
Quartz Job Scheduling Framework 中文版 V1.0.0.pdf
2010-10-13
Quartz Job Scheduling Framework 中文版 V1.0.0.chm
2010-10-11
远程桌面批量登陆器,3389 RemoteDeskTop
2010-06-07
nantpad.2.0_with_Crack
2010-06-04
Quartz_Job_Scheduling_Framework_V0.9.5_中文版.pdf
2009-10-08
Quartz Job Scheduling Framework 中文版 V0.9.5.chm
2009-02-05
Quartz Job Scheduling Framework 中文版 V0.9.2.chm
2008-10-07
精通 Groovy.chm
2008-09-09
Quartz Job Scheduling Framework 中文版 V0.9.1.chm
2008-08-26
Quartz Job Scheduling Framework 中文版 V0.8.2.chm
2008-08-25
程序开发技巧集(Unmi整理)
2008-05-02
Visual.Assist.X.10.4.1619 + Crack
2007-12-01
华为代码统计工具CCT V2.0
2007-11-22
Perl 语言编程.chm
2007-11-15
CN-DOS批处理精华贴(2007-A)(IE6)
2007-10-16
DOS批处理经典入门教程
2007-10-16
APort
2007-10-15
fport
2007-10-15
Quartz Job Scheduling Framework
2007-10-11
JavaDOCHelper1.5.1_Viewer
2007-10-11
reilly.jboss.a.developers.notebook.jun.2005
2007-10-09
Spring程序高手秘笈--英文原版
2007-10-09
SWT程序高手秘笈--英文原版
2007-10-09
Hibernate:程序高手秘笈--英文原版
2007-10-09
Java 5.0 Tiger程序高手秘笈--英文原版
2007-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人