日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

《码出高效:Java 开发手册》技术笔记

發布時間:2023/12/20 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《码出高效:Java 开发手册》技术笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

《java開發手冊》這本書是一本由阿里巴巴公司的開發工程師們編寫的技術書籍,
相比于其他編程書籍,本書更為貼近一些共通的知識而非實際的代碼,對開發工程師的綜合素質有顯著的提升,本書共有九章,筆者計劃用八篇文章去記錄讀這本書的一些心得和體會

正文

首先是第一章,這章內容主要是講一些基礎的計算機知識,包括浮點數,網絡協議,網絡安全知識,這些都是和日常開發非常相關的一些東西

二進制的加減法

計算機基本是0和1,二進制,具體就是一條電路,具有高低電平兩種狀態,日常說的32位機器,就是2的32次方-1個狀態;表示負數時就是最左一位為符號位,0正1負,那么最大就是01111111,換算就是127
同時二進制數運算時用補碼,正數的原反補碼三者相同,而負數補碼等于反碼+1,這樣底層減法也能當加法算,減少運算器消耗

位移運算

位移運算在開發中可以見到,通常是用于進行乘除2的n次方時,進行快速操作,底層操作是:右移n位時把這個數對應的補碼最右邊抹去n位,最左分為兩種情況:負數補1,正數補0,左移同理


這里連續三個>就是無符號

其他位運算

還有一些位運算就是按位與,按位取反 ( 符號為~)、按位與(符號為 &) 、接位或(符號為|)、接位異或等運算
按位與:比如獲取網段值,IP地址與掩碼255.255.255.0進行按位與運算得到高24位,即為當前ip的網段,底層就是換成二進制進行與運算
邏輯與:&& ,有短路功能,左為false直接退出
邏輯或:同邏輯與,左為true直接退出
異或:無短路功能,左右不同為1,否則為0

浮點數

浮點數是相對于定點數來說的,定點就是確定小數點的位置,由此確定整數和小數部分
浮點數則是由科學計數法表示的,由符號位,有效數字,指數三部分組成,這點高中數學有講
目前常用的就是單雙精度浮點數
單精度:4字節,32位,底層如圖
在計算機學中,指數叫階碼,有效數字叫尾數
符號位很簡單:0正1負
階碼其實是移碼, [x ] 移 = x+(2^n-1)(n 為 x的二進制位數,含符號位)
尾數很簡單,就是原碼

浮點數使用

使用時推薦使用雙精度,單精度容易出問題


如金融行業的貨幣表示,推薦使用整型存儲其最小單位的值,人民幣的分,美元的美分,用時再換算
如圓周率要求存儲小數點后 1000 位數字,使用單雙精度難以保存,推薦使用數組存小數部分
在比較浮點數時,由于存在誤差,所以禁止通過判斷兩個浮點數是否相等來控制某些業務流程
數據庫使用decimal,禁止使用單雙浮點

字符集與亂碼

01如何表示文字,是英文字母,那么就是大小寫52個,加上一些特殊字符,也就是 ASCII碼
其中有一個特殊的換行符
unix中是\n,
windows :\r\n
舊macos:\r
新macos:\n
而漢字的個數遠遠超過英文字符的個數
GB2312:6712
GBK :支持繁體,兼容gb2312
GB18030:為gbk超集并兼容gbk
unicode:規定了所有語言的字符,實現 Unicode 的編碼格式有三種 , UTF-8 、 UTF-16 、 UTF -
32
實際開發中,為了避免亂碼,服務器級別、 schema 級、表級別乃至列級別應該規定一致的編碼

Cpu與內存

Cpu是一塊高精密度集成電路板,承載運算和控制,執行指令功能,是編程的中心,通常與內存的關系非常緊密;其主要組成是控制器和運算器,由寄存器對這兩者進行協調如下圖為cpu內部邏輯結構

控制器:類似一個編譯器,其中
控制單元主要控制時序和指令
指令譯碼器:在控制單元智慧下讀取分析指令,交由運算器執行
指令寄存器:存儲指令集
運算器:ALU:算邏運算單元,運算器核心
運算器執行01的計算
寄存器:高速緩存L1L2,遠小于內存空間,成本也非常高
部分處理器也有L3緩存
相比C++可以malloc操作內存,java都交給jvm操作內存,也就是垃圾回收

TCP/IP

網絡協議

這里講到網絡協議,計算機之間需要網絡連接,而網絡協議就是規則,各方遵守規則就可以互相交流
包括HTTP, HTTPS、 FTP 、SMTP 、 UDP, ARP 、 PPP 、 IEEE 802.x等協議
TCP/IP協議也叫傳輸控制協議,是一個以TCPIP為核心的協議族
它對網絡分層是4層
鏈路層:以字節為單位對01分組做為數據,添加源和目標機器的物理地址,校驗位,封成一個包傳輸

網絡層:根據ip定義網絡地址,區分網段;子網內用ARP協議進行mac尋址,子網外通過路由轉發ip數據包
傳輸層:數據包到了目標計算機后,在傳輸層進行確認并交給應用程序,這里一般是TCP和UDP協議
應用層:傳輸層信息到了應用程序后,進行解讀,通常有一個固定格式

IP協議

計算機有mac地址進行區分,但這樣很多計算機,找到過于費時,所以有ip地址進行分段分層的管理,就類似于快遞分省市縣層層分發,最后快遞員喊小區的人取快遞
IP地址屬于網絡層,在wlan內進行路由尋址,長度32位4個字節,掩碼用來區分子網,下圖為ip協議格式,注意不是ip地址格式

TTL:數據包的生存時間,代表可經過路由器數,經過一個自減一,為0時,數據包被丟棄并通知源主機
ICMP:一個檢測網絡通暢,主機可達性的協議,ping,tracert這些命令就是基于ICMP的檢測網絡狀態的工具

TCP建立連接

TCP,又稱傳輸控制協議,它是面向連接、確保數據在端到端間可靠傳輸的協議
面向連接是指傳輸前先建立一條信道
可靠是指要確認發出字節的編號,校驗數據包的有效性,超時重傳,滑動窗口,擁塞控制等等

服務端和客戶端:tcp的面向連接由這兩個端實現,首先需要服務端在特定端口監聽,然后客戶端發送
SYN :用作建立連接時的同步信號
ACK: 用于對收到的數據進行確認,所確認的數據由確認序列號表示;
FIN :表示后面沒有數據需要發送,通常意昧著所建立的連接需要關閉了。
三次揮手:這個概念是計網基礎概念了
A 機器發出一個數據包并將 SYN 置 l ,表示希望建立連接。這個包中的序列
號假設是 x 。
B 機器收到 數據包后,通過 SYN 得知這是一個建立連接的請求,于是發送一個響應包并將 SYN 和 ACK 標記都置 l 。假設這個包中的序列號是 y ,而確認序列號必須是 x+l ,表示收到了 A 發過來的 SYN
A 收到 B 的響應包后需進行確認,確認包中將 ACK 置 l ,并將確認序列號
設置為 y+ l ,表示收到了來自 B 的 SYN

三次握手的原因很好理解,這張圖就可以解釋
只有三次后才能確認這八種能力,后續傳輸才能不出問題
還有一個就是兩次就會產生臟連接,因為報文存活時間是大于tcp連接時間的
從底層看,tcp連接通過fd文件描述符完成,linux中,很多資源都是通過fd數描述
在協議層面,可以keep-alive,也就是定時發送數據包,表示健康狀態,通常也可在應用層發送心跳包檢查健康

TCP斷開連接

作為一種全雙工連接,tcp連接需要四次握手

第一步:A 想要關閉連接,待本方數據發送完畢后,傳遞 FIN 信號給 B。
第二步:B 應答 ACK ,告訴 A 可以斷開,但是需要等 B 處理完數據,再主動給 A 發送 FIN 信號。這時, A 處于半關閉狀態( FIN WAIT 2 ),無法再發送新的數據。
第三步:B 做好連接關閉前的準備工作后,發送 FIN 給 A ,此時B 機器也進入半關閉狀態( CLOSE_WAIT )。
第四步A 發送針對 B FIN 的 ACK 后,進入 TIME - WAIT 狀態,經過 2MSL ( Maximum Segment Lifetime )后,沒有收到 B傳來的報文,確定 B 已經收到 A 機器最后發送的 ACK 指令,此時 TCP連接正式釋放。

TIME WAIT 和 CLOSE WAIT在實際業務中是優化的兩個重點,參數設置不當會對服務器造成大量負載

連接池

對于大量的連接,頻繁創建斷開會加重負載,這時就用連接池來重復利用連接,
RPC 服務集群的注冊中心與服務提供方、消費方之間,消息服務集群的緩存服務器和消費者服務器之間,應用后臺服務器和數據庫之間,都會使用連接池來提升性能。
比較常用的就是數據庫層面連接池,以druid為例子,主要是連接數min和max的設置,如果 MIN 過小,可能會出現過多請求排隊等待獲取連接,如果 MIN 過大,會造成資源浪費。如果 MAX 過小,則峰值情況下仍有很多請求處于等待狀態;如果MAX 過大,可能導致數據庫連接被占滿,大量請求超時,進而影響其他應用,引發服務器連環雪崩。
這里還提到了數據庫的優化手段:
高效且合適的索引
排查連接資源未顯式關閉的情形
合并短的請求
合理拆分多個表 join 的SQL ,若超過三個表則禁止 join
使用臨時表
應用層優化。 包括進行數據結構優化、并發多線程改造等
改用其他數據庫。

總結

以上是生活随笔為你收集整理的《码出高效:Java 开发手册》技术笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。