數(shù)據(jù)結(jié)構(gòu)和排序算法

數(shù)組和鏈表/哈希區(qū)別和結(jié)構(gòu)

鏈表? 無連序 無順序的線性內(nèi)存存儲結(jié)構(gòu)? 有單鏈 雙鏈 循環(huán)鏈(堆區(qū)內(nèi)存/autoreleasepoolPage)鏈表存儲區(qū)間離散,占用內(nèi)存比較寬松,空間復(fù)雜度很小,尋址困難,插入和刪除容易

數(shù)組? 內(nèi)存連續(xù),元素順序排列的一塊內(nèi)存存儲結(jié)構(gòu) 存儲區(qū)間連續(xù),占用內(nèi)存比較嚴重,空間復(fù)雜度很大 尋址容易,插入和刪除困難

hash? 散列表 (數(shù)組+鏈表)? 是根據(jù)關(guān)鍵碼值(Key value)而直接進行訪問的數(shù)據(jù)結(jié)構(gòu)? key根據(jù)哈希算法算出哈希值? 放在哈希表數(shù)組的指定位置(如果有其他元素有相同的哈希值進來? 以鏈表的形式存儲 鏈表最多長8? 多了以紅黑樹的形式存儲)

NSArray 和 NSSet區(qū)別

NSSet和NSArray功能性質(zhì)一樣,用于存儲對象,屬于集合

NSSet屬于 “無序集合”,在內(nèi)存中存儲方式是不連續(xù)

NSArray是 “有序集合” 它內(nèi)存中存儲位置是連續(xù)的

NSSet,NSArray都是類,只能添加對象,如果需要加入基本數(shù)據(jù)類型(int,float,BOOL,double等),需要將數(shù)據(jù)封裝成NSNumber類型

由于NSSet是用hash實現(xiàn)的所以就造就了它查詢速度比較快,但是我們不能把某某對象存在第幾個元素后面之類的有關(guān)下標(biāo)的操作

冒泡: 第一個和第二個比對? 選出一個最值到數(shù)組最后? 重復(fù)比對完成排續(xù)

選擇: 用第一個和后面所有比對 如果大于或者小于第一個置換? 選出一個最值放在? ? ?

第一個位置, 然后用第二個重復(fù)操作

快速: 填坑拆分法? 選出一個基準(zhǔn)數(shù)(一般第一個),從后向前找一個小于基準(zhǔn)數(shù)的放 入第一個元素位置,從前往后找個大于基準(zhǔn)數(shù)的放入前面移動元素的位置,在從 后面移動位置繼續(xù)從后向前尋找小于基準(zhǔn)數(shù)的元素放入前面移動元素的位置, 直到基準(zhǔn)數(shù)前的數(shù)據(jù)小于基準(zhǔn)數(shù),后面的數(shù)據(jù)大于基準(zhǔn)數(shù)完成一次循環(huán).以基準(zhǔn) 數(shù)為點拆分數(shù)組,繼續(xù)上邊的過程完成排續(xù)

插入: 第一個元素認為是一個有序數(shù)組? 然后從第二個元素判別是否大于第一個元 素放入前面或者后面,第三個依次和一二比對放在對應(yīng)的位置,依次排續(xù)

希爾: 插入的進階版? 有個增量的概念 第一個元素和增量元素比較 然后減少增量繼 續(xù)比較 最后增量一定為1? 增量最好取值是1 5? 19? 41? 109 等

歸并:? 分治 歸并? 先劃分數(shù)組為多個子數(shù)組 然后在排續(xù)合并? 排續(xù)是申請一個緩 存數(shù)組比對要合并的數(shù)組的元素,按大小依次放入緩存數(shù)組完成排續(xù)

FMDB? FMDatabase —— 一個FMDatabase對象就代表一個單獨的SQLite數(shù)據(jù) 庫 用來執(zhí)行SQL語句

FMResultSet —— 使用FMDatabase執(zhí)行查詢后的結(jié)果集

FMDatabaseQueue —— 用于在多線程中執(zhí)行多個查詢或更新,它是線程安全的(串行隊列)

并發(fā):如果想要并發(fā)? 就要創(chuàng)建多個FMDatabase對象 這個和數(shù)據(jù)庫訪問對象單例唯一沖突? 并且sqlite只允許多個線程同時讀取或者一個線程同時寫入數(shù)據(jù)庫? 多個一起寫入有查詢資源database is locked的可能

Base64加密

把原本是 8 個 bit 一組表示數(shù)據(jù),改為 6 個 bit 一組表示數(shù)據(jù),不足的部分補零,每兩個 0 用 一個 = 表示;

用 base64 編碼之后,數(shù)據(jù)長度會變大,增加了大約 1/3;

雖然 base64 可以作為加密,但是 base64 能夠逆運算,非常不安全!

base64 編碼有個非常顯著的特點,末尾有個 ‘=’ 號;

對稱加密

加密/解密使用相同的密鑰,加密和解密的過程是可逆的。

加密過程是先加密,再base64編碼;解密過程是先base64解碼,再解密。

適用業(yè)務(wù)場景:1.網(wǎng)絡(luò)請求過程中的敏感信息,請求的時候用AES加密(加密算法)請求數(shù)據(jù),服務(wù)端返回的時候客戶端去解密;2.如果有數(shù)據(jù)庫的時候,數(shù)據(jù)庫里面的數(shù)據(jù)也可以加密好給到客戶端,防止被人破解。

非對稱加密

公鑰是公開的,私鑰保密加密處理安全,但是性能極差。

使用場景:1.比如支付寶開放平臺的支付業(yè)務(wù),支付寶會讓你生成公私鑰(openssl可以直接生成),私鑰放在自己的服務(wù)端(切記),公鑰上傳到支付寶的商戶平臺,拿到訂單信息的時候,請求服務(wù)端通過私鑰簽名后的訂單信息,然后調(diào)用支付寶的sdk,支付寶會拿公鑰來驗簽,驗證成功之后才會進入支付選項。2.Https網(wǎng)絡(luò)請求的SSL層。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容