原创 【MySQL(六)】儘量用自增主鍵

從寫入性能考慮,使用主鍵自增,那麼每一條新數據都在同一個數據頁裏追加,如果不夠,就申請新頁。索引的分裂也只在最大的索引node下分裂,寫入性能較高。如果使用業務字段做主鍵,這個就無法保證了,新數據插入的位置完全是隨機的,磁盤寫入代價變高了

原创 【MySQL(五 )】唯一索引 普通索引

看了極客世界的mysql教程裏關於這個議題的talk,總結如下 查詢方面:二者性能幾乎一致,區別在於唯一索引只需要返回讀到的第一個值,而普通索引需要向後遍歷找到所有滿足條件的值。但是這個操作是在內存中進行的,所以基本可以忽略; 寫入方面:

原创 【SpringMVC(十七)】靜態資源

在SpringMVC中,如果對靜態資源不做特殊處理,請求的path找不到會返回404. 原因是,我們在web.xml中會這樣配置dispatcherServlet的url-pattern,至於爲什麼是/,參見https://blog.cs

原创 【Jackson】jackson map ClassCastException

考慮這個場景,我們在設計數據庫表時,往往會加一個擴展字段列,可以是varchar類型。程序中可以將各種擴展字段放入一個map結構中,再序列化爲string,存入數據庫。下面以json作爲序列化方式來看一個例子: 比如下面Data類中的ex

原创 【Java】String 相關

1. String是不可變對象 也就是說,一旦創建了一個string對象,其內容便無法修改。string對想內部持有了一個char數組的引用,這個char數組只能在構造函數中被初始化,string沒有暴露任何接口來修改char數組的元素。

原创 【Java】Files Paths 用法記錄

摒棄File及InputStream那一套API。 內存中二進制數據拷貝使用common-io的IoUtils類;內存-文件系統交互使用Java7中的Files以及Paths類。 public class FileTest {

原创 【Java】異常 打印

如何打印一個異常? 分兩種case吧。 1.不使用日誌框架,即簡單的systemout方式。 public static void main(String args[]) { try {

原创 【信息安全】存密碼時爲什麼需要加鹽

對於存賬戶密碼這件事來說,如果是小白(比如最開始的我),可能直接將密碼明文存在數據庫中(上大學時的確這麼幹過。。。)。 爲什麼不能這做?很簡單,一旦數據被盜,所有用戶賬戶信息全部被泄露。 那麼高級一些,可以存密碼的hash值。驗證時,只需

原创 【Java】翻頁 cursor與page翻頁

後端返回數據的接口需要翻頁設計,防止客戶端一次性請求大量數據。傳統的方式是page+limit。通過page和limit可以計算出從哪裏開始拿數據,以及需要拿多少條。另一種方式是cursor+limit。cursor是一個遊標,可以是id

原创 【Java】ClientAbortException

這個異常怎麼來的? 大致看了下tomcat源碼,是web容器裏拋出的一個異常。 /* * Licensed to the Apache Software Foundation (ASF) under one or more * co

原创 【Java】url encode

什麼是url encode? url是一種資源定位符號,用於標識一個資源。url產生之初的一個想法是讓url可以方便得傳遞,所以url的字符被限定ASCII碼的一個集合內,這些被稱爲非限定字符集。 除此之外,還有一些字符具有特定功能,比

原创 【Java】線程池(五)shutdown shutdownnow

以ExecutorService的實現類ThreadPoolExecutor爲例,看下關於線程池管理方法的實原理: 注意shutdown shutdownnow方法均不是阻塞的,僅僅完成狀態的設置,不會等待任務執行完畢。 1.shutdo

原创 【Java】guava(六)ComparisonChain使用

在實現對象的compareTo方法時,如果對象有多個屬性,在比較時往往會形成一個層級if,即高優先級屬性相同時,再比較次優先級的屬性。guava的ComparisonChain工具提供瞭解決上述對象比較的鏈式調用方法,使用起來也很方便;

原创 【SpringMVC(十五)】HttpRange 分片下載 斷點續傳

基於http協議實現斷點續傳。 請求部分,需要在請求頭裏加入Range頭,表示本次請求的byte數組的開始和結束位置。 https://tools.ietf.org/html/rfc7233#section-3.1 格式爲:Bytes=開

原创 【MySQL(一)】WAL 機制

WAL全稱是write ahead log,也就是更新數據之前先更新日誌。之前不太明白爲什麼要用這個,也查了很多博客,發現很多都沒說到根本原因上。基本的解釋都是什麼使用redo log恢復數據之類的。 其實Mysql使用WAL的原因根本就