{"id":13458698,"url":"https://github.com/JosephZhu1983/java-common-mistakes","last_synced_at":"2025-03-24T15:31:54.078Z","repository":{"id":37655030,"uuid":"237931978","full_name":"JosephZhu1983/java-common-mistakes","owner":"JosephZhu1983","description":"书籍《Java 开发坑点解析：从根因分析到最佳实践》 \u0026 极客时间专栏《Java业务开发常见错误100例》源码","archived":false,"fork":false,"pushed_at":"2024-01-05T14:26:46.000Z","size":10334,"stargazers_count":1816,"open_issues_count":1,"forks_count":728,"subscribers_count":41,"default_branch":"master","last_synced_at":"2025-03-24T03:01:38.240Z","etag":null,"topics":["design-patterns","java","jvm","mistake","pitfalls","security","spring","troubleshooting"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JosephZhu1983.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-03T09:45:58.000Z","updated_at":"2025-03-21T17:42:26.000Z","dependencies_parsed_at":"2024-07-31T09:09:33.041Z","dependency_job_id":"ed37e364-5e02-4b15-8a9b-f7d41898cd82","html_url":"https://github.com/JosephZhu1983/java-common-mistakes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephZhu1983%2Fjava-common-mistakes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephZhu1983%2Fjava-common-mistakes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephZhu1983%2Fjava-common-mistakes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JosephZhu1983%2Fjava-common-mistakes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JosephZhu1983","download_url":"https://codeload.github.com/JosephZhu1983/java-common-mistakes/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245298180,"owners_count":20592557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design-patterns","java","jvm","mistake","pitfalls","security","spring","troubleshooting"],"created_at":"2024-07-31T09:00:55.332Z","updated_at":"2025-03-24T15:31:54.040Z","avatar_url":"https://github.com/JosephZhu1983.png","language":"Java","readme":"## 《Java 开发坑点解析：从根因分析到最佳实践》源码目录\n\n### 书籍购买地址\n\n[京东购买](https://item.jd.com/13986317.html)\n[当当购买](https://product.dangdang.com/11673548094.html)\n\n### 源码说明\n\n- 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + Spring Data\n  Moore-SR4开发，基于Maven做依赖管理。\n- 每一个案例都是独立的SpringBoot或Java命令行应用程序，可以单独启动，避免相互干扰，但是它们公用一个Maven POM。\n- 下载源码后，先在根目录运行docker-compose up命令来通过Docker运行相关的MySQL、Redis、ES、RabbitMQ等系统，随后再来启动应用。\n-\n\n专栏大部分内容只依赖MySQL一个组件，如果docker-compose启动有困难的话可以先注释docker-compose.yml中的相关组件，比如注释ES和RabbitMQ，等后面设计篇需要用到的时候再启动，并且需要同时删除pom.xml中的相关SpringBoot\nStarter模块。\n- 源码根目录下有一个readme.md的Markdown文件，这里有一个目录列了每一篇文章对应的源码位置，同时来到每一个源码包中下面还有一个readme.md文件，里面列了每一篇文章中每一个小节的源码包名。\n- 大多数源码中的案例都会使用wrong和right这样方法命名来代表错误实现和正确实现，你可以结合书籍内容对比实现来理解。\n- 有一些案例（比如SQL索引一文）会基于当前时间生成测试数据，所以不确保文中的测试结果本地可以重现，需要自己调整测试用例。\n\n### 书籍代码索引\n\n#### 说明\n\n- 点击链接进入每一节的代码文件夹\n- 每一个文件夹中又有一个readme.md文件，里面列了每节中每一个小节的源码文件夹\n- 【思考】代表思考与讨论中涉及到的代码\n- 【扩展】代表扩展阅读中涉及到的代码\n- 【补充】代表更多其它的不出现在书中涉及到内容的代码\n\n#### 第1章 Java 8中常用的重要知识点\n\n- 1.0：[java8](src/main/java/javaprogramming/commonmistakes/java8/)\n\n#### 第2章 代码篇\n\n- 2.1\n  使用了并发工具类库，并不等于就没有线程安全问题了：[concurrenttool](src/main/java/javaprogramming/commonmistakes/concurrenttool/)\n- 2.2 代码加锁：不要让“锁”事成为烦心事：[lock](src/main/java/javaprogramming/commonmistakes/lock/)\n- 2.3 线程池：业务代码中最常用也最容易犯错的组件：[threadpool](src/main/java/javaprogramming/commonmistakes/threadpool/)\n- 2.4 连接池：别让连接池帮了倒忙：[connectionpool](src/main/java/javaprogramming/commonmistakes/connectionpool/)\n- 2.5 HTTP调用：您考虑到超时、重试、并发了吗：[httpinvoke](src/main/java/javaprogramming/commonmistakes/httpinvoke/)\n- 2.6\n  20%的业务代码的Spring声明式事务，可能都没处理正确：[transaction](src/main/java/javaprogramming/commonmistakes/transaction/)\n- 2.7 数据库索引：索引不是万能药：[sqlindex](src/main/java/javaprogramming/commonmistakes/sqlindex/)\n- 2.8 判等问题：程序里如何确定你就是你：[equals](src/main/java/javaprogramming/commonmistakes/equals/)\n- 2.9\n  数值计算：注意精度、舍入和溢出问题：[numeralcalculations](src/main/java/javaprogramming/commonmistakes/numeralcalculations/)\n- 2.10 集合类：坑满地的List列表操作：[collection](src/main/java/javaprogramming/commonmistakes/collection/)\n- 2.11 空值处理：分不清楚的null和恼人的空指针：[nullvalue](src/main/java/javaprogramming/commonmistakes/nullvalue/)\n- 2.12 异常处理：别让自己在出问题的时候变为瞎子：[exception](src/main/java/javaprogramming/commonmistakes/exception/)\n- 2.13 日志：日志记录真没您想象得那么简单：[logging](src/main/java/javaprogramming/commonmistakes/logging/)\n- 2.14 文件IO：实现高效正确的文件读写并非易事：[io](src/main/java/javaprogramming/commonmistakes/io/)\n- 2.15 序列化：一来一回，你还是原来的你吗：[serialization](src/main/java/javaprogramming/commonmistakes/serialization/)\n- 2.16 用好Java 8的日期时间类，少踩一些“老三样”的坑：[datetime](src/main/java/javaprogramming/commonmistakes/datetime/)\n- 2.17 别以为“自动挡”就不可能出现OOM：[oom](src/main/java/javaprogramming/commonmistakes/oom/)\n- 2.18\n  当反射、注解和泛型遇到OOP时，会有哪些坑：[advancedfeatures](src/main/java/javaprogramming/commonmistakes/advancedfeatures/)\n- 2.19 Spring框架：IoC和AOP是扩展的核心：[springpart1](src/main/java/javaprogramming/commonmistakes/springpart1/)\n- 2.20\n  Spring框架：帮我们做了很多工作也带来了复杂度：[springpart2](src/main/java/javaprogramming/commonmistakes/springpart2/)\n\n#### 第3章 系统设计\n\n- 3.1 代码重复：搞定代码重复的三个绝招：[redundantcode](src/main/java/javaprogramming/commonmistakes/redundantcode/)\n- 3.2 接口设计：系统间对话的语言，一定要统一：[apidesign](src/main/java/javaprogramming/commonmistakes/apidesign/)\n- 3.3 缓存设计：缓存可以锦上添花也可以落井下石：[cachedesign](src/main/java/javaprogramming/commonmistakes/cachedesign/)\n- 3.4 业务代码写完，就意味着生产就绪了吗：[productionready](src/main/java/javaprogramming/commonmistakes/productionready/)\n- 3.5 异步处理好用，但非常容易用错：[asyncprocess](src/main/java/javaprogramming/commonmistakes/asyncprocess/)\n- 3.6 数据存储：NoSQL与RDBMS如何取长补短、相辅相成？：[nosqluse](src/main/java/javaprogramming/commonmistakes/nosqluse/)\n\n#### 第4章 代码安全问题\n\n- 4.1 数据源头：任何客户端的东西都不可信任：[clientdata](src/main/java/javaprogramming/commonmistakes/clientdata/)\n- 4.2\n  安全兜底：涉及钱时，必须考虑防刷、限量和防重：[securitylastdefense](src/main/java/javaprogramming/commonmistakes/securitylastdefense/)\n- 4.3 数据和代码：数据就是数据，代码就是代码：[dataandcode](src/main/java/javaprogramming/commonmistakes/dataandcode/)\n- 4.4 如何正确地保存和传输敏感数据：[sensitivedata](src/main/java/javaprogramming/commonmistakes/sensitivedata/)\n\n#### 第5章 Java程序故障排查\n\n- 5.1 定位Java应用问题的排错套路：N/A\n- 5.2\n  分析定位Java问题，一定要用好这些工具：[troubleshootingtools](src/main/java/javaprogramming/commonmistakes/troubleshootingtools/)\n- 5.3 Java程序从虚拟机迁移到Kubernetes的一些坑：N/A\n\n### 点赞趋势\n\n如果觉得源码对你有帮助，欢迎Star\n[![点赞趋势](https://starchart.cc/JosephZhu1983/java-common-mistakes.svg)](https://starchart.cc/JosephZhu1983/java-common-mistakes)\n\n","funding_links":[],"categories":["Java"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJosephZhu1983%2Fjava-common-mistakes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJosephZhu1983%2Fjava-common-mistakes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJosephZhu1983%2Fjava-common-mistakes/lists"}