java CRC16演算法,分解一個大Key例項。和各種hash演算法程式碼
- package org.rui.hi;
- /**
- * 測試: 解決場景:把1億的使用者 儲存在一個佇列裡,過大。用sharding 摸擬redis 叢集 sharding Redis
- * 叢集使用資料分片(sharding)而非一致性雜湊(consistency hashing)來實現: 一個 Redis 叢集包含 16384
- * 個雜湊槽(hash slot), 資料庫中的每個鍵都屬於這 16384 個雜湊槽的其中一個, 叢集使用公式 CRC16(key) % 16384 來計算鍵
-
* key 屬於哪個槽, 其中 CRC16(key) 語句用於計算鍵 key 的 CRC16 校驗和 。
- *
- * @author ruiliang
- *
- */
- publicclass HashDist {
- publicfinalstaticint maxInt = 1000;// 00000;//1億
- publicfinalstaticint USER_KEY_SLOT_COUNT = 20; // 定議分配儲存使用者的Slot位
- // ,如果儲存有壓力,可調大槽位
- publicstaticvoid main(String[] args) {
-
// int 不用crc16
- for (int i = 1; i < maxInt; i++) {
- // 根據玩家id 分佈指定到Slot位
- int ranint = i % USER_KEY_SLOT_COUNT;
- String key = "key:" + ranint;
- System.out.println("key:" + key);
- // redisList.lpush(randomKey, String.valueOf(playerId));
-
}
- /**
- * crc16 redis 叢集也是用這種方式分配key
- */
- String a = "a,b,c,d,e,f,g,g,g";
- for (String j : a.split(",")) {
- int solt = CRCJava.crc16(j.getBytes()) % USER_KEY_SLOT_COUNT;
- String key = "key:" + solt;
- System.out.println("crc%solt=key:" + key);
- }
- // redisList.lpush(randomKey, String.valueOf(playerId));
- }
- }
- /**
- * output: ...
- *
- * key:key:0 key:key:1 key:key:2 key:key:3 key:key:4 key:key:5 key:key:6
- * key:key:7 key:key:8 key:key:9 key:key:10 key:key:11 key:key:12 key:key:13
- * key:key:14 key:key:15 key:key:16 key:key:17 key:key:18 key:key:19 key:key:0
- * key:key:1 key:key:2 key:key:3 key:key:4 key:key:5 key:key:6 key:key:7
- * key:key:8 key:key:9 key:key:10 key:key:11 key:key:12 key:key:13 key:key:14
- * key:key:15 key:key:16 key:key:17 key:key:18 key:key:19 key:key:0 key:key:1
- * key:key:2 key:key:3 key:key:4 key:key:5 key:key:6 key:key:7 key:key:8
- * key:key:9 key:key:10 key:key:11 key:key:12 key:key:13 key:key:14 key:key:15
- * key:key:16 key:key:17 key:key:18 key:key:19 key:key:0 key:key:1 key:key:2
- * key:key:3 key:key:4 key:key:5 key:key:6 key:key:7 key:key:8 key:key:9
- * key:key:10 key:key:11 key:key:12 key:key:13 key:key:14 key:key:15 key:key:16
- * key:key:17 key:key:18 key:key:19 key:key:0 key:key:1 key:key:2 key:key:3
- * key:key:4 key:key:5 key:key:6 key:key:7 key:key:8 key:key:9 key:key:10
- * key:key:11 key:key:12 key:key:13 key:key:14 key:key:15 key:key:16 key:key:17
- * key:key:18 key:key:19 key:key:0 key:key:1 key:key:2 key:key:3 key:key:4
- * key:key:5 key:key:6 key:key:7 key:key:8 key:key:9 key:key:10 key:key:11
- * key:key:12 key:key:13 key:key:14 key:key:15 key:key:16 key:key:17 key:key:18
- * key:key:19 crc%solt=key:key:11 crc%solt=key:key:8 crc%solt=key:key:17
- * crc%solt=key:key:10 crc%solt=key:key:19 crc%solt=key:key:16
- * crc%solt=key:key:5 crc%solt=key:key:5 crc%solt=key:key:5
- */
- package org.rui.hi;
- publicclass CRCJava {
- publicstaticvoid main(String[] args) {
- String a = "a,b,c,d,e,f,g";
- for (String i : a.split(",")) {
- System.out.println(crc16(i.getBytes()));
- }
- System.out.println("----------------------------------");
- for (String i : a.split(",")) {
- System.out.println(crc162(i.getBytes()));
- }
- }
- /******************************************************************************
- * Compilation: javac CRC16CCITT.java Execution: java CRC16CCITT s
- * Dependencies:
- *
- * Reads in a sequence of bytes and prints out its 16 bit Cylcic Redundancy
- * Check (CRC-CCIIT 0xFFFF).
- *
- * 1 + x + x^5 + x^12 + x^16 is irreducible polynomial.
- *
- * % java CRC16-CCITT 123456789 CRC16-CCITT = 29b1
- *
- ******************************************************************************/
- publicstaticint crc16(finalbyte[] buffer) {
- int crc = 0xFFFF; // initial value 65535
- int polynomial = 0x1021; // 0001 0000 0010 0001 (0, 5, 12)
- // byte[] testBytes = "123456789".getBytes("ASCII");
- for (byte b : buffer) {
- for (int i = 0; i < 8; i++) {
- boolean bit = ((b >> (7 - i) & 1) == 1);
- boolean c15 = ((crc >> 15 & 1) == 1);
- crc <<= 1;
- if (c15 ^ bit)
- crc ^= polynomial;
- }
- }
- return crc &= 0xffff;
- }
- /**
- *
- * @param buffer
- * @return
- */
- staticint crc162(finalbyte[] buffer) {
-
相關推薦
java CRC16演算法,分解一個大Key例項。和各種hash演算法程式碼
package org.rui.hi; /** * 測試: 解決場景:把1億的使用者 儲存在一個佇列裡,過大。用sharding 摸擬redis 叢集 sharding Redis * 叢集使用資料分片(sharding)而非一致性雜湊(consistency hashi
Java JUC之Atomic系列12大類例項講解和原理分解
在java6以後我們不但接觸到了Lock相關的鎖,也接觸到了很多更加樂觀的原子修改操作,也就是在修改時我們只需要保證它的那個瞬間是安全的即可,經過相應的包裝後可以再處理物件的併發修改,以及併發中的ABA問題,本文講述Atomic系列的類的實現以及使用方法,其中包含: 基本類
在Java 8之前,對一個Object的Collection排序要寫多少行程式碼?
在Java 8之前對一個Object的集合排序需要寫多少行程式碼呢?在Java 8之後又需要多少呢? 在Java 8之後,你可以只用一行程式碼搞定它。 我們看一下如下的Employee類: public class Employee {
【Java,面試】實現一個演算法,確定一個字串的所有字元是否全都不同
//method to figure out if there's no duplicate char in a ASCII string import java.lang.String boolean isUniquedChars(String myString
分解演算法,將一個數字分解成最合適的陣列內數字相加。
class Program { static int[] numbers = { 1, 2, 5, 10, 30, 35, 45, 50, 70, 90, 100, 105, 300, 350, 500, 1000, 1050, 3000, 350
北京java程式設計師,分享一個比努力更能決定人生的公式
之前在羅振宇在公號上分享過一個“人生演算法”,他的公式是這樣的: 成就=核心演算法*大量重複動作的平方 這就是我要分享的比努力更能決定人生的公式。 如果說人生就是一條單向列車,想要更好更快的到達目的地,需要兩個因素。 核心演算法:即一條相對而
設計一個演算法,將一個十進位制的數轉化為二進位制
#include<iostream.h> const int StackSize=10; class SeqStack { public: SeqStack(){
Java軟體開發者,如何學習大資料?
正常來講學習大資料之前都要做到以下幾點 1.學習基礎的程式語言(java,python) 2.掌握入門程式設計基礎(linux操作,資料庫操作、git操作) 3.學習大資料裡面的各種框架(hadoop、hive、hbase、spark) 這是正常學習大資料必須要做
Java程式設計師,想嘗試大資料和資料探勘,該怎麼規劃學習?
一.大資料方向工作介紹 二.大資料工程師的技能要求 三.大資料學習路徑 四.學習資源推薦(書籍、部落格、網站) 一.大資料方向工作介紹 大資料方向的工作目前分為三個主要方向: 01.大資料工程師 02.資料分析師 03.大資料科學家 04.其他(資料探勘本
分治法:關於選擇演算法,找最大,找最小,同時找最大和最小,找第二大
找最大或者最小,蠻力演算法為最優的演算法,需要比較n-1次 # 這個已經是最優的演算法了,比較n-1次 def findMax(arr): max_pivot = arr[0] for i in range(1,len(arr)): if arr
演算法優化:最大m個子段和,問題規模從1個子段和擴充套件到m個,動態規劃
最大m個子段和,問題規模從1個子段和擴充套件到m個,動態規劃 問題規模由2個決定,一是子段數m,二是元素個數n,準確的說是最後一個子段終止的標號 b(i,j)定義為:前j個元素中有i個子段,且第i個子段包含j,i個子段和為b(i,j) 那麼原問題的最優解為max{b(m,j)},m&
python的強大果然是名副其實,製作一個大資料搜尋引擎跟玩一樣!
搜尋是大資料領域裡常見的需求。Splunk和ELK分別是該領域在非開源和開源領域裡的領導者。本文利用很少的Python程式碼實現了一個基本的資料搜尋功能,試圖讓大家理解大資料搜尋的基本原理。 學習Python中有不明白推薦加入交流群
Java 高併發,什麼方式解決?高併發和大流量解決方案
本文轉載而來:https://gitbook.cn/books/5b625e94daf78a4dc2deacce/index.html 對於我們所研發的網站,若網站的訪問量非常大,那麼我們必須考慮相關的併發訪問問題,而併發問題是絕大部分的程式設計師頭疼的問題。本 Chat 帶你領略一下相關概念和
C++primer第五版 編寫一個函式,令其接收兩個引數,一個是int型的數,另一個是int指標。函式比較int的值和指標所指的值,返回較大的那個。
該題目主要是為了熟悉函式引數的幾種傳遞方式。定義函式形參時,可以定義成傳值(本身)、傳指標(*)、傳引用(&)。如果只是訪問引數值,不對其進行修改,那麼這三種方式都是可以的。例如該題目,就僅僅是比較兩個引數的大小,並沒有對引數本身進行修改,因此傳值和傳指標都是可行的。
演算法,有一個從1到正無窮的無限大數字陣列,每個數字佔1位,求第n位是幾
陣列是1,2,3,4,5,6,7,8,9,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,2,0,........ 求第n位是幾。 我是用java實現的,解題過程中還研究了一下char轉int,Integer.parseInt(String,
設計一個演算法,判斷一個二叉樹是否為完全二叉樹
思想:根據完全二叉樹的定義,對完全二叉樹按照從上到下、從左到右的層次遍歷,應該滿足一下兩條要求: ●某節點沒有左孩子,則一定無右孩子 ●若某節點缺左或右孩子,則其所有後繼一定無孩子 若不滿足上述任何一
請設計一個演算法,給一個字串進行二進位制編碼,使得編碼後字串的長度最短。(哈弗曼編碼)
美團點評2016研發工程師程式設計題(二) 請設計一個演算法,給一個字串進行二進位制編碼,使得編碼後字串的長度最短。 輸入描述: 每組資料一行,為待編碼的字串。保證字串長度小於等於1000。 輸出描述: 一行輸出最短的編碼後長度。 輸入例子: MT-TECH-TEA
Android關於context上下文定義全域性的,轉載一個大神的
大家好,今天給大家分享一下Android裡的Context的一些用法,以前經常有人在群裡問我比如我在一個工具類裡的某個方法,或者View裡需要呼叫Context.但是工具類還有View裡沒有這個上下文怎麼辦?為了解決大家的疑問,為了解決大家的疑問,我今天寫一個簡單的Dem
Java記憶體對映,上G大檔案輕鬆處理
記憶體對映檔案(Memory-mapped File),指的是將一段虛擬記憶體逐位元組對映於一個檔案,使得應用程式處理檔案如同訪問主記憶體(但在真正使用到這些資料前卻不會消耗實體記憶體,也不會有讀寫磁碟的操作),這要比直接檔案讀寫快幾個數量級。 稍微解釋一下虛擬記憶體(很明顯,不是實體記憶體),它是計算機系
學會這幾個技巧,讓Redis大key問題遠離你
Redis大key的一些場景及問題 大key場景 Redis使用者應該都遇到過大key相關的場景,比如: 1、熱門話題下評論、答案排序場景。 2、大V的粉絲列表。 3、使用不恰當,或者對業務預估不準確、不及時進行處理垃圾資料等。 大key問題 由於Redis主執行緒為單執行緒模型,大key也會帶來一些問題,