{"adoption": {"forks": 4231, "observed_at": "2026-08-28T04:11:34.477573+00:00", "stars": 23132}, "canonical_url": "https://ross.abutalabs.com/products/source-code-hunter", "card": {"archived": false, "artifact_type": "learning-resource", "description": "😱 从源码层面，剖析挖掘互联网行业主流技术的底层实现原理，为广大开发者 “提升技术深度” 提供便利。目前开放 Spring 全家桶，Mybatis、Netty、Dubbo 框架，及 Redis、Tomcat 中间件等", "domain": ["developer-tools", "tutorials", "programming-languages", "databases", "web-development"], "enriched": true, "function": ["documentation", "developer-tools"], "health_score": 80, "homepage": "https://schunter.doocs.org", "language": "Java", "license": "CC-BY-SA-4.0", "license_family": "other", "maturity": "active", "member_repos": ["doocs/source-code-hunter"], "name": "doocs/source-code-hunter", "platform": ["jvm"], "pushed_at": "2026-08-24T12:44:45+00:00", "repo": "doocs/source-code-hunter", "stars": 23132, "tags": ["source-code-analysis", "spring", "mybatis", "netty", "dubbo", "redis", "tomcat", "java", "study-notes", "chinese"], "topics": ["sourcecode-analysis", "spring", "mybatis", "netty", "redis", "dubbo"], "urls": [], "use_cases": ["understand how Spring IoC and AOP work internally", "learn MyBatis ORM internals from source code", "study Netty NIO and ByteBuf implementation details", "prepare for Java backend interviews on framework internals", "learn how Dubbo RPC and registry mechanisms are implemented", "understand Redis data structures like SDS and skip lists", "read Tomcat servlet container source code explanations"], "what_it_is": "A community-maintained collection of in-depth source code analysis articles for mainstream Java frameworks and middleware, including the Spring family, MyBatis, Netty, Dubbo, Redis, and Tomcat. It is published as a documentation website to help developers deepen their technical understanding of how these frameworks work internally.", "when_to_avoid": ["you need official API documentation or runnable example code", "you work outside the Java/JVM ecosystem", "you need guaranteed up-to-date coverage of the latest framework versions"], "when_to_choose": ["you want guided, article-style walkthroughs of popular Java framework source code", "you are preparing for backend interviews covering Spring, MyBatis, Netty, or Redis internals", "you prefer Chinese-language explanations with diagrams and reading notes"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/source-code-hunter", "repo": "doocs/source-code-hunter", "role": "main", "score": 77}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:11:34.477573+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T16:56:47.322039+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "16ad6e61db83945853736728f856d7a0f178e902edc2237aebae1a20f4c8239c", "fetched_at": "2026-08-28T04:11:34.477573+00:00", "kind": "readme", "missing": false, "url": "https://github.com/doocs/source-code-hunter"}, {"content_hash": "0d711194c65fe894a2596283566f23deb215d47009d27a65725ab6572ac1ddb1", "fetched_at": "2026-08-29T07:54:39.221084+00:00", "kind": "homepage", "missing": false, "url": "https://schunter.doocs.org"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 35}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": ["no_releases"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2502, "days_push": 9, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 77, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}