# java-common-mistakes **Repository Path**: gigy/java-common-mistakes ## Basic Information - **Project Name**: java-common-mistakes - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-07-09 - **Last Updated**: 2024-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 《Java业务开发常见错误100例》源码目录 ​ ### 源码说明 - 专栏的所有代码基于Java 8 + Spring Boot 2.2.1.RELEASE + Spring Cloud Greenwich.SR4 + Spring Data Moore-SR4开发,基于Maven做依赖管理。 - 每一个案例都是独立的SpringBoot或Java命令行应用程序,可以单独启动,避免相互干扰,但是它们公用一个Maven POM。 - 下载源码后,先在根目录运行docker-compose up命令来通过Docker运行相关的MySQL、Redis、ES、RabbitMQ等系统,随后再来启动应用。 - 专栏大部分内容只依赖MySQL一个组件,如果docker-compose启动有困难的话可以先注释docker-compose.yml中的相关组件,比如注释ES和RabbitMQ,等后面设计篇需要用到的时候再启动,并且需要同时删除pom.xml中的相关SpringBoot Starter模块。 - 源码根目录下有一个readme.md的Markdown文件,这里有一个目录列了每一篇文章对应的源码位置,同时来到每一个源码包中下面还有一个readme.md文件,里面列了每一篇文章中每一个小节的源码包名。 - 大多数源码中的案例都会使用wrong和right这样方法命名来代表错误实现和正确实现,你可以结合文章对比实现来理解。 - 有一些案例(比如SQL索引一文)会基于当前时间生成测试数据,所以不确保文中的测试结果本地可以重现,需要自己调整测试用例。 ### 代码篇 - 01 使用了并发工具类库,线程安全就高枕无忧了吗?:[concurrenttool](src/main/java/org/geekbang/time/commonmistakes/concurrenttool/) - 02 代码加锁:不要让“锁”事成为烦心事:[lock](src/main/java/org/geekbang/time/commonmistakes/lock/) - 03 线程池:业务代码最常用也最容易犯错的组件:[threadpool](src/main/java/org/geekbang/time/commonmistakes/threadpool/) - 04 连接池:别让连接池帮了倒忙:[connectionpool](src/main/java/org/geekbang/time/commonmistakes/connectionpool/) - 05 HTTP调用:你考虑到超时、重试、并发了吗?:[httpinvoke](src/main/java/org/geekbang/time/commonmistakes/httpinvoke/) - 06 20%的业务代码的Spring声明式事务,可能都没处理正确:[transaction](src/main/java/org/geekbang/time/commonmistakes/transaction/) - 07 数据库索引:索引不是万能药:[sqlindex](src/main/java/org/geekbang/time/commonmistakes/sqlindex/) - 08 判等问题:程序里如何确定你就是你?:[equals](src/main/java/org/geekbang/time/commonmistakes/equals/) - 09 数值计算:注意精度、舍入和溢出问题:[numeralcalculations](src/main/java/org/geekbang/time/commonmistakes/numeralcalculations/) - 10 集合类:坑满地的List列表操作:[collection](src/main/java/org/geekbang/time/commonmistakes/collection/) - 11 空值处理:分不清楚的null和恼人的空指针:[nullvalue](src/main/java/org/geekbang/time/commonmistakes/nullvalue/) - 12 异常处理:别让自己在出问题的时候变为瞎子:[exception](src/main/java/org/geekbang/time/commonmistakes/exception/) - 13 日志:日志记录真没你想象的那么简单:[logging](src/main/java/org/geekbang/time/commonmistakes/logging/) - 14 文件IO:实现高效正确的文件读写并非易事:[io](src/main/java/org/geekbang/time/commonmistakes/io/) - 15 序列化:一来一回,你还是原来的你吗?:[serialization](src/main/java/org/geekbang/time/commonmistakes/serialization/) - 16 用好Java 8的日期时间类,少踩一些“老三样”的坑:[datetime](src/main/java/org/geekbang/time/commonmistakes/datetime/) - 17 别以为“自动挡”就不可能出现OOM:[oom](src/main/java/org/geekbang/time/commonmistakes/oom/) - 18 当反射、注解和泛型遇到OOP时,会有哪些坑?:[advancedfeatures](src/main/java/org/geekbang/time/commonmistakes/advancedfeatures/) - 19 Spring框架:IoC和AOP是扩展的核心:[springpart1](src/main/java/org/geekbang/time/commonmistakes/springpart1/) - 20 Spring框架:帮我们做了很多工作也带来了复杂度:[springpart2](src/main/java/org/geekbang/time/commonmistakes/springpart2/) ### 设计篇 - 21 代码重复:搞定代码重复的三个绝招:[redundantcode](src/main/java/org/geekbang/time/commonmistakes/redundantcode/) - 22 接口设计:系统间对话的语言,一定要统一:[apidesign](src/main/java/org/geekbang/time/commonmistakes/apidesign/) - 23 缓存设计:缓存可以锦上添花也可以落井下石:[cachedesign](src/main/java/org/geekbang/time/commonmistakes/cachedesign/) - 24 业务代码写完,就意味着生产就绪了?:[productionready](src/main/java/org/geekbang/time/commonmistakes/productionready/) - 25 异步处理好用,但非常容易用错:[asyncprocess](src/main/java/org/geekbang/time/commonmistakes/asyncprocess/) - 26 数据存储:NoSQL与RDBMS如何取长补短、相辅相成?:[nosqluse](src/main/java/org/geekbang/time/commonmistakes/nosqluse/) ### 安全篇 - 27 数据源头:任何客户端的东西都不可信任:[clientdata](src/main/java/org/geekbang/time/commonmistakes/clientdata/) - 28 安全兜底:涉及钱时,必须考虑防刷、限量和防重:[securitylastdefense](src/main/java/org/geekbang/time/commonmistakes/securitylastdefense/) - 29 数据和代码:数据就是数据,代码就是代码:[dataandcode](src/main/java/org/geekbang/time/commonmistakes/dataandcode/) - 30 敏感数据:如何正确保存和传输敏感数据?:[sensitivedata](src/main/java/org/geekbang/time/commonmistakes/sensitivedata/) ### 加餐 - 带你吃透课程中Java 8的那些重要知识点:[java8](src/main/java/org/geekbang/time/commonmistakes/java8/) - 分析定位Java问题,一定要用好这些工具:[troubleshootingtools](src/main/java/org/geekbang/time/commonmistakes/troubleshootingtools/) ### 目录 ``` ├─advancedfeatures │ ├─annotationinheritance │ │ AnnotationInheritanceApplication.java │ │ MyAnnotation.java │ │ │ ├─genericandinheritance │ │ GenericAndInheritanceApplication.java │ │ │ └─reflectionissue │ ReflectionIssueApplication.java │ ├─apidesign │ │ readme.md │ │ │ ├─apiasyncsyncmode │ │ APIAsyncSyncModeController.java │ │ AsyncUploadRequest.java │ │ AsyncUploadResponse.java │ │ CommonMistakesApplication.java │ │ FileService.java │ │ SyncQueryUploadTaskRequest.java │ │ SyncQueryUploadTaskResponse.java │ │ SyncUploadRequest.java │ │ SyncUploadResponse.java │ │ UploadRequest.java │ │ UploadResponse.java │ │ │ ├─apiresponse │ │ APIException.java │ │ APIResponse.java │ │ APIResponseAdvice.java │ │ APIResponseController.java │ │ CommonMistakesApplication.java │ │ NoAPIResponse.java │ │ OrderInfo.java │ │ │ ├─apiversion │ │ APIVersion.java │ │ APIVersionHandlerMapping.java │ │ APIVersoinController.java │ │ CommonMistakesApplication.java │ │ │ └─headerapiversion │ APIVersion.java │ APIVersionCondition.java │ APIVersionHandlerMapping.java │ APIVersoinController.java │ CommonMistakesApplication.java │ ├─basic │ │ readme.md │ │ │ ├─classinfo │ │ Person.java │ │ Employee.java │ │ AbstractTest.java 抽象类 │ │ ParamTest.java 将参数传递给方法 │ │ StaticTest.java 静态 │ │ │ ├─enumdemo 枚举 │ │ Clothes.java │ │ ClothesTest.java │ │ Size.java │ │ │ ├─generic │ │ ├─genericAlgorithms │ │ │ GenericAlgorithms.java │ │ │ Pair.java │ │ │ │ │ ├─genericReflection │ │ │ GenericReflectionTest.java │ │ │ TypeLiterals.java │ │ │ │ │ ├─limitations │ │ │ DefeatCheckedExceptionChecking.java │ │ │ NoGenericArray.java │ │ │ │ │ ├─pair2 │ │ │ Pair.java │ │ │ PairTest2.java │ │ │ │ │ ├─pair3 │ │ │ Employee.java │ │ │ Manager.java │ │ │ Pair.java │ │ │ PairTest3.java │ │ │ │ │ └─pairclass │ │ Pair.java │ │ PairTest1.java │ │ │ ├─proxy │ │ CglibTest.java │ │ ProxyTest.java │ │ │ └─reflect │ CopyOfTest.java │ Create.java │ MethodTableTest.java │ ObjectAnalyzer.java │ ObjectAnalyzerTest.java │ ReflectionTest.java │ TestOne.java │ ├─cachedesign │ │ readme.md │ │ │ ├─cacheconcurrent │ │ CacheConcurrentController.java │ │ CommonMistakesApplication.java │ │ │ ├─cacheinvalid │ │ CacheInvalidController.java │ │ CommonMistakesApplication.java │ │ │ └─cachepenetration │ CachePenetrationController.java │ CommonMistakesApplication.java │ ├─clientdata │ │ readme.md │ │ │ ├─trustclientcalculation │ │ CommonMistakesApplication.java │ │ CreateOrderRequest.java │ │ Db.java │ │ Item.java │ │ Order.java │ │ TrustClientCalculationController.java │ │ │ ├─trustclientip │ │ CommonMistakesApplication.java │ │ TrustClientIpController.java │ │ │ ├─trustclientparameter │ │ CommonMistakesApplication.java │ │ Country.java │ │ TrustClientParameterController.java │ │ │ └─trustclientuserid │ CommonMistakesApplication.java │ LoginRequired.java │ LoginRequiredArgumentResolver.java │ TrustClientUserIdController.java │ ├─collection │ │ readme.md │ │ │ ├─aslist │ │ AsListApplication.java │ │ │ ├─linkedlist │ │ LinkedListApplication.java │ │ │ ├─listremove │ │ ListRemoveApplication.java │ │ │ ├─listvsmap │ │ ListVsMapApplication.java │ │ │ └─sublist │ SubListApplication.java │ ├─common │ Utils.java │ ├─concurrenttool │ │ readme.md │ │ │ ├─ciavspia │ │ CommonMistakesApplication.java │ │ │ ├─concurrenthashmapmisuse │ │ CommonMistakesApplication.java │ │ ConcurrentHashMapMisuseController.java │ │ │ ├─concurrenthashmapperformance │ │ CommonMistakesApplication.java │ │ ConcurrentHashMapPerformanceController.java │ │ │ ├─copyonwritelistmisuse │ │ CommonMistakesApplication.java │ │ CopyOnWriteListMisuseController.java │ │ │ ├─demo │ │ BestPriceFinder.java │ │ BestPriceFinderMain.java │ │ Discount.java │ │ Quote.java │ │ Shop.java │ │ Util.java │ │ │ ├─multiasynctasks │ │ CommonMistakesApplication.java │ │ │ └─threadlocal │ CommonMistakesApplication.java │ ThreadLocalMisuseController.java │ tomcat.properties │ ├─connectionpool │ │ readme.md │ │ │ ├─datasource │ │ bad.properties │ │ CommonMistakesApplicationBad.java │ │ CommonMistakesApplicationGood.java │ │ good.properties │ │ ImproperDataSourcePoolSizeController.java │ │ User.java │ │ UserRepository.java │ │ UserService.java │ │ │ ├─httpclient │ │ CommonMistakesApplication.java │ │ HttpClientNotReuseController.java │ │ │ ├─jedis │ │ CommonMistakesApplication.java │ │ JedisMisreuseController.java │ │ │ └─twotimeoutconfig │ CommonMistakesApplication.java │ hikari.properties │ TwoTimeoutConfigController.java │ User.java │ UserRepository.java │ ├─dataandcode │ │ readme.md │ │ │ ├─codeinject │ │ CodeInjectController.java │ │ CommonMistakesApplication.java │ │ ScriptingSandbox.java │ │ │ ├─sqlinject │ │ CommonMistakesApplication.java │ │ SqlInjectController.java │ │ UserData.java │ │ UserDataMapper.java │ │ userdatamapper.xml │ │ │ └─xss │ CommonMistakesApplication.java │ SecurityAdvice.java │ User.java │ UserRepository.java │ XssController.java │ XssFilter.java │ XssJsonDeserializer.java │ XssJsonSerializer.java │ XssRequestWrapper.java │ ├─datetime │ │ readme.md │ │ │ ├─calc │ │ CommonMistakesApplication.java │ │ │ ├─dateformat │ │ CommonMistakesApplication.java │ │ │ ├─mysql │ │ CommonMistakesApplication.java │ │ test.sql │ │ TimeEntity.java │ │ TimeRepository.java │ │ │ ├─newdate │ │ CommonMistakesApplication.java │ │ │ └─timezone │ CommonMistakesApplication.java │ ├─equals │ │ readme.md │ │ │ ├─compareto │ │ CommonMistakesApplication.java │ │ CompareToController.java │ │ │ ├─differentclassloaderequals │ │ CommonMistakesApplication.java │ │ Point.java │ │ │ ├─equalitymethod │ │ CommonMistakesApplication.java │ │ EqualityMethodController.java │ │ │ ├─intandstringequal │ │ CommonMistakesApplication.java │ │ IntAndStringEqualController.java │ │ OrderQuery.java │ │ │ └─lombokequals │ CommonMistakesApplication.java │ LombokEquealsController.java │ ├─exception │ │ readme.md │ │ │ ├─finallyissue │ │ CommonMistakesApplication.java │ │ FinallyIssueController.java │ │ TestResource.java │ │ │ ├─globalexception │ │ │ ApiException.java │ │ │ CommonMistakesApplication.java │ │ │ ExceptionUtil.java │ │ │ GlobalExceptionHandler.java │ │ │ NotResponseWrap.java │ │ │ R.java │ │ │ RequestAdvice.java │ │ │ ResponseControllerAdvice.java │ │ │ ResultEnum.java │ │ │ ValidateErrorCode.java │ │ │ │ │ └─controller │ │ TestController.java │ │ │ ├─handleexception │ │ APIResponse.java │ │ BusinessException.java │ │ CommonMistakesApplication.java │ │ HandleExceptionController.java │ │ RestControllerExceptionHandler.java │ │ │ ├─predefinedexception │ │ BusinessException.java │ │ CommonMistakesApplication.java │ │ Exceptions.java │ │ PredefinedExceptionController.java │ │ │ └─threadpoolandexception │ CommonMistakesApplication.java │ ThreadPoolAndExceptionController.java │ ├─generic │ │ readme.md │ │ TupleMain.java │ │ TupleTest.java │ │ │ └─domin │ Apple.java │ ├─httpinvoke │ │ readme.md │ │ │ ├─clientreadtimeout │ │ ClientReadTimeoutController.java │ │ CommonMistakesApplication.java │ │ │ ├─feignandribbontimout │ │ AutoConfig.java │ │ Client.java │ │ CommonMistakesApplicationDefault.java │ │ CommonMistakesApplicationTimeoutByBoth.java │ │ CommonMistakesApplicationTimeoutByFeign.java │ │ CommonMistakesApplicationTimeoutByRibbon.java │ │ default.properties │ │ feign.properties │ │ FeignAndRibbonController.java │ │ ribbon.properties │ │ │ ├─feignpermethodtimeout │ │ AutoConfig.java │ │ Client.java │ │ CommonMistakesApplicationDefault.java │ │ default.properties │ │ FeignPerMethodTimeoutController.java │ │ │ ├─ribbonretry │ │ │ AutoConfig.java │ │ │ CommonMistakesApplication.java │ │ │ CommonMistakesApplicationNoRetry.java │ │ │ default-ribbon.properties │ │ │ noretry-ribbon.properties │ │ │ RibbonRetryIssueClientController.java │ │ │ RibbonRetryIssueServerController.java │ │ │ │ │ └─feign │ │ SmsClient.java │ │ │ └─routelimit │ CommonMistakesApplication.java │ RouteLimitController.java │ ├─io │ │ readme.md │ │ │ ├─badencodingissue │ │ FileBadEncodingIssueApplication.java │ │ │ ├─filebufferperformance │ │ CommonMistakesApplication.java │ │ │ └─filestreamoperationneedclose │ CommonMistakesApplication.java │ ├─jackson │ └─annotation │ ├─alias │ │ JsonGetterTest.java │ │ MyBean.java │ │ │ ├─mapField │ │ JsonAnyGetterTest.java │ │ WithAnnotationBean.java │ │ WithoutAnnotationBean.java │ │ │ └─Serialization ├─java8 │ │ CoolOptionalTest.java │ │ CoolStreamTest.java │ │ Customer.java │ │ ExecuteOnlyOnce.java │ │ ForEachOrderedTest.java │ │ GenerateStreamTest.java │ │ javainaction2.md │ │ LambdaTest.java │ │ Order.java │ │ OrderItem.java │ │ ParallelTest.java │ │ Product.java │ │ readme.md │ │ StreamDetailTest.java │ │ StreamTrace.jpg │ │ │ ├─callback │ │ │ Application.java │ │ │ Crawler.java │ │ │ Handler.java │ │ │ Task.java │ │ │ │ │ └─demo2 │ │ OperateApples.java │ │ │ ├─collector │ │ MostPopularCollector.java │ │ │ ├─completablefuture │ │ CollectorTest.java │ │ CompletableFutureTest.java │ │ Merchant.java │ │ Order.java │ │ Services.java │ │ User.java │ │ │ └─optional │ │ Car.java │ │ Insurance.java │ │ OptionalMain.java │ │ Person.java │ │ │ ├─demo2 │ │ ReadPositiveIntParam.java │ │ │ └─demo3 │ OperationsWithOptional.java │ ├─lock │ │ readme.md │ │ │ ├─deadlock │ │ CommonMistakesApplication.java │ │ DeadLockController.java │ │ │ ├─lockgranularity │ │ CommonMistakesApplication.java │ │ LockGranularityController.java │ │ │ ├─lockscope │ │ CommonMistakesApplication.java │ │ Data.java │ │ Interesting.java │ │ LockScopeController.java │ │ │ └─unsync │ Bank.java │ BankSync.java │ BankSync2.java │ BaseBank.java │ UnsynchBankTest.java │ ├─logging │ │ readme.md │ │ │ ├─async │ │ asyncwrong.xml │ │ CommonMistakesApplication.java │ │ LoggingController.java │ │ MySlowAppender.java │ │ performance_async.xml │ │ performance_sync.xml │ │ │ ├─duplicate │ │ CommonMistakesApplication.java │ │ filterright.xml │ │ filterwrong.xml │ │ loggerright1.xml │ │ loggerright2.xml │ │ loggerwrong.xml │ │ LoggingController.java │ │ MultipleLevelsFilter.java │ │ multiplelevelsfilter.xml │ │ │ └─placeholder │ CommonMistakesApplication.java │ log4j2api_to_slf4j_to_logack.jpg │ LoggingController.java │ ├─nullvalue │ │ readme.md │ │ │ ├─avoidnullpointerexception │ │ AvoidNullPointerExceptionController.java │ │ CommonMistakesApplication.java │ │ │ ├─dbnull │ │ CommonMistakesApplication.java │ │ DbNullController.java │ │ User.java │ │ UserRepository.java │ │ │ └─pojonull │ CommonMistakesApplication.java │ POJONullController.java │ User.java │ UserDto.java │ UserEntity.java │ UserEntityRepository.java │ UserRepository.java │ ├─numeralcalculations │ │ readme.md │ │ │ ├─dangerousdouble │ │ CommonMistakesApplication.java │ │ │ ├─equals │ │ CommonMistakesApplication.java │ │ │ ├─overflowissue │ │ CommonMistakesApplication.java │ │ │ └─rounding │ CommonMistakesApplication.java │ ├─oom │ │ readme.md │ │ │ ├─groovyoom │ │ CommonMistakesApplication.java │ │ GroovyOOMController.java │ │ │ ├─impropermaxheadersize │ │ bad.properties │ │ CommonMistakesApplicationBad.java │ │ CommonMistakesApplicationGood.java │ │ good.properties │ │ ImproperMaxHeaderSizeController.java │ │ │ ├─usernameautocomplete │ │ CommonMistakesApplication.java │ │ UserDTO.java │ │ UserEntity.java │ │ UsernameAutoCompleteService.java │ │ UserRepository.java │ │ │ └─weakhashmapoom │ CommonMistakesApplication.java │ WeakHashMapOOMController.java │ ├─redundantcode │ │ readme.md │ │ │ ├─beancopy │ │ BeanCopyController.java │ │ CommonMistakesApplication.java │ │ │ ├─lambdaImpl │ │ ChainOfResponsibilityMain.java │ │ FactoryMain.java │ │ ObserverMain.java │ │ OnlineBankingLambda.java │ │ StrategyMain.java │ │ │ ├─reflection │ │ │ CommonMistakesApplication.java │ │ │ ReflectionController.java │ │ │ │ │ ├─right │ │ │ AbstractAPI.java │ │ │ BankAPI.java │ │ │ BankAPIField.java │ │ │ BetterBankService.java │ │ │ CreateUserAPI.java │ │ │ PayAPI.java │ │ │ │ │ └─wrong │ │ BankService.java │ │ │ └─templatemethod │ │ Cart.java │ │ CommonMistakesApplication.java │ │ Db.java │ │ Item.java │ │ TemplateMethodController.java │ │ │ ├─right │ │ AbstractCart.java │ │ InternalUserCart.java │ │ NormalUserCart.java │ │ VipUserCart.java │ │ │ └─wrong │ InternalUserCart.java │ NormalUserCart.java │ VipUserCart.java │ ├─securitylastdefense │ │ readme.md │ │ │ ├─preventduplicatepay │ │ CommonMistakesApplication.java │ │ PayChannel.java │ │ PreventDuplicatePayController.java │ │ │ ├─preventsmshijack │ │ CommonMistakesApplication.java │ │ PreventSMSHijackController.java │ │ │ └─prventcouponfarming │ CommonMistakesApplication.java │ Coupon.java │ CouponBatch.java │ CouponCenter.java │ PreventCouponFarmingController.java │ ├─sensitivedata │ │ readme.md │ │ │ ├─rsavsaes │ │ CommonMistakesApplication.java │ │ │ ├─storeidcard │ │ CipherData.java │ │ CipherRepository.java │ │ CipherResult.java │ │ CipherService.java │ │ CommonMistakesApplication.java │ │ StoreIdCardController.java │ │ UserData.java │ │ UserRepository.java │ │ │ └─storepassword │ CommonMistakesApplication.java │ StorePasswordController.java │ UserData.java │ UserRepository.java │ ├─serialization │ │ readme.md │ │ │ ├─deserializationconstructor │ │ APIResultRight.java │ │ APIResultWrong.java │ │ CommonMistakesApplication.java │ │ DeserializationConstructorController.java │ │ │ ├─enumusedinapi │ │ CommonMistakesApplication.java │ │ EnumDeserializer.java │ │ EnumUsedInAPIController.java │ │ jackson.properties │ │ StatusEnumClient.java │ │ StatusEnumServer.java │ │ │ ├─jsonignoreproperties │ │ CommonMistakesApplication.java │ │ jackson.properties │ │ JsonIgnorePropertiesController.java │ │ UserRight.java │ │ UserWrong.java │ │ │ ├─redistemplate │ │ CommonMistakesApplication.java │ │ RedisTemplateController.java │ │ User.java │ │ │ └─serialversionissue │ CommonMistakesApplication.java │ SerialVersionIssueController.java │ User.java │ ├─springpart1 │ │ readme.md │ │ │ ├─aop │ ├─aopmetrics │ │ CommonMistakesApplication.java │ │ Metrics.java │ │ MetricsAspect.java │ │ MetricsController.java │ │ TestAspectWithOrder10.java │ │ TestAspectWithOrder20.java │ │ TestController.java │ │ UserEntity.java │ │ UserRepository.java │ │ UserService.java │ │ │ └─beansingletonandorder │ BeanSingletonAndOrderController.java │ CommonMistakesApplication.java │ SayBye.java │ SayHello.java │ SayService.java │ ├─springpart2 │ │ readme.md │ │ │ ├─aopfeign │ │ │ CommonMistakesApplication.java │ │ │ Config.java │ │ │ feign.properties │ │ │ FeignAopConntroller.java │ │ │ Wrong2Aspect.java │ │ │ WrongAspect.java │ │ │ │ │ └─feign │ │ Client.java │ │ ClientWithUrl.java │ │ │ ├─custompropertysource │ │ CommonMistakesApplication.java │ │ db.properties │ │ │ └─propertysource │ CommonMistakesApplication.java │ ├─sqlindex │ coveringindex.jpg │ indexcost.sql │ init.sql │ notuseindex.sql │ optimizer_trace.sql │ readme.md │ ├─threadpool │ │ readme.md │ │ │ ├─thread │ ├─threadpoolmixuse │ │ CommonMistakesApplication.java │ │ ThreadPoolMixuseController.java │ │ │ ├─threadpooloom │ │ CommonMistakesApplication.java │ │ ThreadPoolOOMController.java │ │ │ └─threadpoolreuse │ CommonMistakesApplication.java │ ThreadPoolReuseController.java │ ├─transaction │ │ readme.md │ │ │ ├─nested │ │ CommonMistakesApplication.java │ │ NestedController.java │ │ SubUserService.java │ │ UserData.java │ │ UserDataMapper.java │ │ UserService.java │ │ │ ├─transactionpropagation │ │ CommonMistakesApplication.java │ │ SubUserService.java │ │ TransactionPropagationController.java │ │ UserEntity.java │ │ UserRepository.java │ │ UserService.java │ │ │ ├─transactionproxyfailed │ │ CommonMistakesApplication.java │ │ TransactionProxyFailedController.java │ │ UserEntity.java │ │ UserRepository.java │ │ UserService.java │ │ │ └─transactionrollbackfailed │ CommonMistakesApplication.java │ TransactionRollbackFailedController.java │ UserEntity.java │ UserRepository.java │ UserService.java │ └─troubleshootingtools │ readme.md │ ├─arthas │ HighCPUApplication.java │ User.java │ ├─jdktool │ CommonMistakesApplication.java │ ├─mat │ FooService.java │ OOMApplication.java │ └─wireshark BatchInsertApplication.java ```