中图网(原中国图书网):网上书店,尾货特色书店,30万种特价书低至2折!

歡迎光臨中圖網(wǎng) 請 | 注冊
> >
JAVA開發(fā)坑點解析:從根因分析到最佳實踐

包郵 JAVA開發(fā)坑點解析:從根因分析到最佳實踐

作者:朱曄
出版社:人民郵電出版社出版時間:2024-01-01
開本: 16開 頁數(shù): 459
中 圖 價:¥83.9(7.0折) 定價  ¥119.8 登錄后可看到會員價
加入購物車 收藏
開年大促, 全場包郵
?新疆、西藏除外
本類五星書更多>

JAVA開發(fā)坑點解析:從根因分析到最佳實踐 版權信息

JAVA開發(fā)坑點解析:從根因分析到最佳實踐 本書特色

1.來自真實生產環(huán)境的100多個案例、150多個坑點。

2.業(yè)務代碼開發(fā)層面近20個方面的坑,涉及多線程、數(shù)據(jù)訪問、池技術、日志異常、日期時間、IO和序列化、Spring框架等。

3.項目技術設計層面6個方面的坑,涉及接口、緩存、異步、生產就緒、代碼重復、數(shù)據(jù)存儲。

4.代碼開發(fā)層面常見的4個安全問題,包括客戶端數(shù)據(jù)可信問題、數(shù)據(jù)和代碼的隔離問題、資源防刷兜底問題,以及敏感數(shù)據(jù)的處理。

5.坑點講解范式“知識介紹->還原業(yè)務場景->錯誤實現(xiàn)->正確實現(xiàn)->原理分析->小總結”。

JAVA開發(fā)坑點解析:從根因分析到最佳實踐 內容簡介

本書從整個Java后端研發(fā)的視角,通過大量的案例分析日常開發(fā)過程中可能遇到的150多個坑點及其解決方案,并討論一些best實踐。這些坑點涵蓋編碼(不僅涉及Java語法層面,還涉及多線程、連接池、數(shù)據(jù)庫索引、事務、日志、Spring框架等層面)、系統(tǒng)設計、代碼安全等方面。本書在剖析這些坑點時還會講解排查思路和相關工具的使用,讓讀者不僅能了解常見的坑點,還能具備一定的問題分析能力,以便日后自行排查更多的坑點。

JAVA開發(fā)坑點解析:從根因分析到最佳實踐 目錄

第 1章 Java 8中常用的重要知識點 1

1.1 在項目中使用Lambda表達式和流操作 1

1.2 Lambda表達式 2

1.3 使用Java 8簡化代碼 4

1.3.1 使用流操作簡化集合操作 4

1.3.2 使用可空類型簡化判空邏輯 5

1.3.3 使用Java 8的一些新類、新方法獲得函數(shù)式編程體驗 6

1.4 并行流 8

1.5 流操作詳解 11

1.5.1 創(chuàng)建流 12

1.5.2 filter 14

1.5.3 map 14

1.5.4 flatMap 14

1.5.5 sorted 15

1.5.6 distinct 15

1.5.7 skip和limit 15

1.5.8 collect 16

1.5.9 groupingBy 17

1.5.10 partitioningBy 19

1.6 小結 19

1.7 思考與討論 19

第 2章 代碼篇 23

2.1 使用了并發(fā)工具類庫,并不等于就沒有線程安全問題了 23

2.1.1 沒有意識到線程重用導致用戶信息錯亂的bug 23

2.1.2 使用了線程安全的并發(fā)工具,并不代表解決了所有線程安全問題 25

2.1.3 沒有充分了解并發(fā)工具的特性,從而無法發(fā)揮其威力 28

2.1.4 沒有認清并發(fā)工具的使用場景,因而導致性能問題 30

2.1.5 小結 32

2.1.6 思考與討論 32

2.2 代碼加鎖:不要讓鎖成為煩心事 33

2.2.1 加鎖前要清楚鎖和被保護的對象是不是一個層面的 35

2.2.2 加鎖要考慮鎖的粒度和場景問題 36

2.2.3 多把鎖要小心死鎖問題 37

2.2.4 小結 40

2.2.5 思考與討論 40

2.3 線程池:業(yè)務代碼中*常用也*容易犯錯的組件 41

2.3.1 線程池的聲明需要手動進行 41

2.3.2 線程池線程管理策略詳解 43

2.3.3 務必確認清楚線程池本身是不是復用的 47

2.3.4 需要仔細斟酌線程池的混用策略 48

2.3.5 小結 51

2.3.6 思考與討論 51

2.3.7 擴展閱讀 52

2.4 連接池:別讓連接池幫了倒忙 54

2.4.1 注意鑒別客戶端SDK是否基于連接池 55

2.4.2 使用連接池務必確保復用 60

2.4.3 連接池的配置不是一成不變的 64

2.4.4 小結 67

2.4.5 思考與討論 67

2.5 HTTP調用:你考慮超時、重試、并發(fā)了嗎 68

2.5.1 配置連接超時和讀取超時參數(shù)的學問 69

2.5.2 Feign和Ribbon配合使用,你知道怎么配置超時嗎 70

2.5.3 你知道Ribbon會自動重試請求嗎 73

2.5.4 并發(fā)限制了爬蟲的抓取能力 75

2.5.5 小結 77

2.5.6 思考與討論 78

2.5.7 擴展閱讀 78

2.6 20%的業(yè)務代碼的Spring聲明式事務可能都沒處理正確 80

2.6.1 小心Spring的事務可能沒有生效 80

2.6.2 事務即便生效也不一定能回滾 84

2.6.3 請確認事務傳播配置是否符合自己的業(yè)務邏輯 86

2.6.4 小結 89

2.6.5 思考與討論 90

2.6.6 擴展閱讀 93

2.7 數(shù)據(jù)庫索引:索引不是萬能藥 94

2.7.1 InnoDB是如何存儲數(shù)據(jù)的 95

2.7.2 聚簇索引和二級索引 96

2.7.3 考慮額外創(chuàng)建二級索引的代價 97

2.7.4 不是所有針對索引列的查詢都能用上索引 99

2.7.5 數(shù)據(jù)庫基于成本決定是否走索引 101

2.7.6 小結 104

2.7.7 思考與討論 104

2.8 判等問題:程序里如何確定你就是你 105

2.8.1 注意equals和==的區(qū)別 106

2.8.2 實現(xiàn)一個equals沒有這么簡單 110

2.8.3 hashCode和equals要配對實現(xiàn) 112

2.8.4 注意compareTo和equals的邏輯一致性 114

2.8.5 小心Lombok生成代碼的坑 115

2.8.6 小結 117

2.8.7 思考與討論 117

2.8.8 擴展閱讀 118

2.9 數(shù)值計算:注意精度、舍入和溢出問題 119

2.9.1 “危險”的Double 120

2.9.2 考慮浮點數(shù)舍入和格式化的方式 121

2.9.3 用equals做判等,就一定是對的嗎 122

2.9.4 小心數(shù)值溢出問題 123

2.9.5 小結 125

2.9.6 思考與討論 125

2.9.7 擴展閱讀 126

2.10 集合類:坑滿地的List列表操作 127

2.10.1 使用Arrays.asList把數(shù)據(jù)轉換為List的3個坑 127

2.10.2 使用List.subList進行切片操作居然會導致OOM 129

2.10.3 一定要讓合適的數(shù)據(jù)結構做合適的事情 132

2.10.4 小結 136

2.10.5 思考與討論 137

2.11 空值處理:分不清楚的null和惱人的空指針 138

2.11.1 修復和定位惱人的空指針問題 138

2.11.2 POJO中屬性的null到底代表了什么 142

2.11.3 小心MySQL中有關NULL的3個坑 146

2.11.4 小結 147

2.11.5 思考與討論 147

2.12 異常處理:別讓自己在出問題的時候變?yōu)槊と恕?49

2.12.1 捕獲和處理異常容易犯的錯 149

2.12.2 小心finally中的異常 153

2.12.3 需要注意JVM針對異常性能優(yōu)化導致棧信息丟失的坑 155

2.12.4 千萬別把異常定義為靜態(tài)變量 157

2.12.5 提交線程池的任務出了異常會怎樣 158

2.12.6 小結 161

2.12.7 思考與討論 162

2.12.8 擴展閱讀 163

2.13 日志:日志記錄真沒你想象得那么簡單 164

2.13.1 為什么我的日志會重復記錄 165

2.13.2 使用異步日志改善性能的坑 169

2.13.3 使用日志占位符就不需要進行日志級別判斷了嗎 175

2.13.4 小結 176

2.13.5 思考與討論 176

2.13.6 擴展閱讀 178

2.14 文件I/O:實現(xiàn)高效正確的文件讀寫并非易事 180

2.14.1 文件讀寫需要確保字符編碼一致 180

2.14.2 使用Files類靜態(tài)方法進行文件操作注意釋放文件句柄 182

2.14.3 注意讀寫文件要考慮設置緩沖區(qū) 184

2.14.4 小結 187

2.14.5 思考與討論 187

2.14.6 擴展閱讀 188

2.15 序列化:一來一回,你還是原來的你嗎 190

2.15.1 序列化和反序列化需要確保算法一致 191

2.15.2 MyBatisPlus讀取泛型List JSON字段的坑 195

2.15.3 注意Jackson JSON反序列化對額外字段的處理 198

2.15.4 反序列化時要小心類的構造方法 200

2.15.5 枚舉作為API接口參數(shù)或返回值的兩個大坑 201

2.15.6 小結 207

2.15.7 思考與討論 207

2.16 用好Java 8的日期時間類,少踩一些“老三樣”的坑 208

2.16.1 初始化日期時間 209

2.16.2 “惱人”的時區(qū)問題 209

2.16.3 日期時間格式化和解析 212

2.16.4 日期時間的計算 215

2.16.5 小結 217

2.16.6 思考與討論 218

2.16.7 擴展閱讀 219

2.17 別以為“自動擋”就不可能出現(xiàn)OOM 220

2.17.1 太多份相同的對象導致OOM 220

2.17.2 使用WeakHashMap不等于不會OOM 223

2.17.3 Tomcat參數(shù)配置不合理導致OOM 227

2.17.4 小結 228

2.17.5 思考與討論 229

2.17.6 擴展閱讀 230

2.18 當反射、注解和泛型遇到OOP時,會有哪些坑 231

2.18.1 反射調用方法不是以傳參決定重載 231

2.18.2 泛型經過類型擦除多出橋接方法的坑 232

2.18.3 注解可以繼承嗎 237

2.18.4 小結 239

2.18.5 思考與討論 239

2.18.6 擴展閱讀 241

2.19 Spring框架:IoC和AOP是擴展的核心 243

2.19.1 單例的Bean如何注入Prototype的Bean 244

2.19.2 監(jiān)控切面因為順序問題導致Spring事務失效 247

2.19.3 小結 255

2.19.4 思考與討論 255

2.19.5 知識擴展:同樣注意枚舉是單例的問題 256

2.20 Spring框架:幫我們做了很多工作也帶來了復雜度 258

2.20.1 Feign AOP切不到的詭異案例 258

2.20.2 Spring程序配置的優(yōu)先級問題 264

2.20.3 小結 273

2.20.4 思考與討論 273

2.20.5 擴展閱讀 275

第3章 系統(tǒng)設計 281

3.1 代碼重復:搞定代碼重復的3個絕招 281

3.1.1 利用“工廠模式 模板方法模式”,消除if...else...和重復代碼 281

3.1.2 利用“注解 反射”消除重復代碼 287

3.1.3 利用屬性拷貝工具消除重復代碼 291

3.1.4 小結 293

3.1.5 思考與討論 293

3.2 接口設計:系統(tǒng)間對話的語言,一定要統(tǒng)一 294

3.2.1 接口的響應要明確表示接口的處理結果 294

3.2.2 要考慮接口變遷的版本控制策略 300

3.2.3 接口處理方式要明確同步還是異步 302

3.2.4 小結 305

3.2.5 思考與討論 305

3.2.6 擴展閱讀 307

3.3 緩存設計:緩存可以錦上添花也可以落井下石 307

3.3.1 不要把Redis當作數(shù)據(jù)庫 308

3.3.2 注意緩存雪崩問題 309

3.3.3 注意緩存擊穿問題 312

3.3.4 注意緩存穿透問題 314

3.3.5 注意緩存數(shù)據(jù)同步策略 316

3.3.6 小結 317

3.3.7 思考與討論 317

3.3.8 擴展閱讀 318

3.4 業(yè)務代碼寫完,就意味著生產就緒了嗎 320

3.4.1 準備工作:配置Spring Boot Actuator 321

3.4.2 健康監(jiān)測需要觸達關鍵組件 322

3.4.3 對外暴露應用內部重要組件的狀態(tài) 327

3.4.4 指標是快速定位問題的“金鑰匙” 330

3.4.5 小結 339

3.4.6 思考與討論 339

3.5 異步處理好用,但非常容易用錯 342

3.5.1 異步處理需要消息補償閉環(huán) 342

3.5.2 注意消息模式是廣播還是工作隊列 346

3.5.3 別讓死信堵塞了消息隊列 351

3.5.4 小結 355

3.5.5 思考與討論 356

3.6 數(shù)據(jù)存儲:NoSQL與RDBMS如何取長補短、相輔相成 358

3.6.1 取長補短之Redis vs MySQL 358

3.6.2 取長補短之InfluxDB vs MySQL 361

3.6.3 取長補短之Elasticsearch vs MySQL 364

3.6.4 結合NoSQL和MySQL應對高并發(fā)的復合數(shù)據(jù)庫架構 369

3.6.5 小結 371

3.6.6 思考與討論 371

第4章 代碼安全問題 373

4.1 數(shù)據(jù)源頭:任何客戶端的東西都不可信任 373

4.1.1 客戶端的計算不可信 373

4.1.2 客戶端提交的參數(shù)需要校驗 375

4.1.3 不能信任請求頭里的任何內容 377

4.1.4 用戶標識不能從客戶端獲取 378

4.1.5 小結 380

4.1.6 思考與討論 380

4.2 安全兜底:涉及錢時,必須考慮防刷、限量和防重 381

4.2.1 開放平臺資源的使用需要考慮防刷 381

4.2.2 虛擬資產并不能憑空產生無限使用 382

4.2.3 錢的進出一定要和訂單掛鉤并且實現(xiàn)冪等 384

4.2.4 小結 386

4.2.5 思考與討論 386

4.2.6 擴展閱讀 386

4.3 數(shù)據(jù)和代碼:數(shù)據(jù)就是數(shù)據(jù),代碼就是代碼 387

4.3.1 SQL注入能干的事情比你想象得更多 388

4.3.2 小心動態(tài)執(zhí)行代碼時代碼注入漏洞 393

4.3.3 XSS必須全方位嚴防死堵 396

4.3.4 小結 403

4.3.5 思考與討論 403

4.3.6 擴展閱讀 404

4.4 如何正確地保存和傳輸敏感數(shù)據(jù) 405

4.4.1 如何保存用戶密碼 406

4.4.2 如何保存姓名和身份證號碼 409

4.4.3 用一張圖說清楚HTTPS 416

4.4.4 小結 418

4.4.5 思考與討論 419

第5章 Java程序故障排查 420

5.1 定位Java應用問題的排錯套路 420

5.1.1 生產問題的排查很大程度依賴監(jiān)控 420

5.1.2 分析定位問題的套路 421

5.1.3 分析和定位問題需要注意的9個點 422

5.1.4 小結 424

5.1.5 思考與討論 424

5.2 分析定位Java問題,一定要用好這些工具 425

5.2.1 使用JDK自帶工具查看JVM情況 425

5.2.2 使用Wireshark分析SQL批量插入慢的問題 433

5.2.3 使用MAT分析OOM問題 438

5.2.4 使用Arthas分析高CPU問題 444

5.2.5 小結 448

5.2.6 思考與討論 449

5.3 Java程序從虛擬機遷移到Kubernetes的一些坑 452

5.3.1 Pod IP不固定帶來的坑 452

5.3.2 程序因為OOM被殺進程的坑 453

5.3.3 內存和CPU資源配置不適配容器的坑 454

5.3.4 Pod重啟以及重啟后沒有現(xiàn)場的坑 455

5.3.5 小結 455

5.3.6 思考與討論 456

后記:寫代碼時,如何才能盡量避免踩坑 457
展開全部

JAVA開發(fā)坑點解析:從根因分析到最佳實踐 作者簡介

朱曄,暉致醫(yī)藥架構師,從事互聯(lián)網(wǎng)行業(yè)(教育、游戲、電商、O2O、P2P等領域)研發(fā)和架構設計工作超過15年,曾任職于育碧軟件、英孚教育、空中網(wǎng)、餓了么、貝殼等公司,熟悉微服務架構,擅長高并發(fā)、高可用架構。從業(yè)以來一直沒有脫離編碼工作,參與過400多個應用的架構設計和開發(fā),并且經常作為“救火隊員”在一線排查和分析各種故障,具備豐富的問題排查經驗,對如何設計健壯和安全的業(yè)務系統(tǒng)也有著深刻的理解。

商品評論(0條)
暫無評論……
書友推薦
本類暢銷
編輯推薦
返回頂部
中圖網(wǎng)
在線客服
主站蜘蛛池模板: 气动调节阀,电动调节阀,自力式压力调节阀,切断阀「厂家」-浙江利沃夫自控阀门 | 德国BOSCH电磁阀-德国HERION电磁阀-JOUCOMATIC电磁阀|乾拓百科 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 大功率金属激光焊接机价格_不锈钢汽车配件|光纤自动激光焊接机设备-东莞市正信激光科技有限公司 定制奶茶纸杯_定制豆浆杯_广东纸杯厂_[绿保佳]一家专业生产纸杯碗的厂家 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 工业废水处理|污水处理厂|废水治理设备工程技术公司-苏州瑞美迪 今日娱乐圈——影视剧集_八卦娱乐_明星八卦_最新娱乐八卦新闻 | 土壤养分检测仪|土壤水分|土壤紧实度测定仪|土壤墒情监测系统-土壤仪器网 | 糖衣机,除尘式糖衣机,全自动糖衣机,泰州市长江制药机械有限公司 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 耐腐蚀泵,耐腐蚀真空泵,玻璃钢真空泵-淄博华舜耐腐蚀真空泵有限公司 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 物联网卡_物联网卡购买平台_移动物联网卡办理_移动联通电信流量卡通信模组采购平台? | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 脱硝喷枪-氨水喷枪-尿素喷枪-河北思凯淋环保科技有限公司 | 安全阀_弹簧式安全阀_美标安全阀_工业冷冻安全阀厂家-中国·阿司米阀门有限公司 | 热缩管切管机-超声波切带机-织带切带机-无纺布切布机-深圳市宸兴业科技有限公司 | 100国际学校招生 - 专业国际学校择校升学规划 | 船老大板材_浙江船老大全屋定制_船老大官网 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 植筋胶-粘钢胶-碳纤维布-碳纤维板-环氧砂浆-加固材料生产厂家-上海巧力建筑科技有限公司 | 软启动器-上海能曼电气有限公司 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 浙江富广阀门有限公司| 企业管理培训,企业培训公开课,企业内训课程,企业培训师 - 名课堂企业管理培训网 | 快速门厂家批发_PVC快速卷帘门_高速门_高速卷帘门-广州万盛门业 快干水泥|桥梁伸缩缝止水胶|伸缩缝装置生产厂家-广东广航交通科技有限公司 | 水热合成反应釜-防爆高压消解罐-西安常仪仪器设备有限公司 | 【官网】博莱特空压机,永磁变频空压机,螺杆空压机-欧能优 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 能量回馈_制动单元_电梯节能_能耗制动_深圳市合兴加能科技有限公司 | 不锈钢水管-不锈钢燃气管-卫生级不锈钢管件-不锈钢食品级水管-广东双兴新材料集团有限公司 | 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 塑胶跑道施工-硅pu篮球场施工-塑胶网球场建造-丙烯酸球场材料厂家-奥茵 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 篷房[仓储-婚庆-展览-活动]生产厂家-江苏正德装配式帐篷有限公司 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 温泉机设备|温泉小镇规划设计|碳酸泉设备 - 大连连邦温泉科技 | 月嫂_保姆_育婴_催乳_母婴护理_产后康复_养老护理-吉祥到家家政 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 |