国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

廣州企業(yè)推廣seo工資待遇 seo工資多少

廣州企業(yè)推廣,seo工資待遇 seo工資多少,怎么做企業(yè)網(wǎng)站仿站,包裝網(wǎng)站建設(shè)價格基本思路: 設(shè)計模式:單例模式 是否加鎖:是 synchronized 獲取最后一次生成的時間戳值T0 限定初始時間為2023-08-01 00:00:00,獲取當(dāng)前時間時間戳T1,T1與初始時間的毫秒差值T2,轉(zhuǎn)為16進(jìn)制,轉(zhuǎn)為字符串為r1,獲取該字符串的長度L1…

基本思路:

設(shè)計模式:單例模式

是否加鎖:是 synchronized

獲取最后一次生成的時間戳值T0

限定初始時間為2023-08-01 00:00:00,獲取當(dāng)前時間時間戳T1,T1與初始時間的毫秒差值T2,轉(zhuǎn)為16進(jìn)制,轉(zhuǎn)為字符串為r1,獲取該字符串的長度L1

獲取L2 (length - L1) ,獲取L2位數(shù)字的16進(jìn)制自增數(shù)值范圍,取最大值max

現(xiàn)數(shù)據(jù)庫批量導(dǎo)入數(shù)據(jù)速度為 n條/ms

平均步長為max/n,(0~平均步長)的平均數(shù)為max/n/2,假設(shè)使用平均步長最為隨機(jī)步長范圍,最終的值與max相差較遠(yuǎn),大約后一半的數(shù)字沒有被使用

將平均步長*2-平均步長*容錯因子(0.1)的值作為我們隨機(jī)步長的范圍 ?容錯因子:減小溢出概率

隨機(jī)步長step = max/n*2 - max/n*0.1

獲取T1

如果T1 == T0,序列值seqNum = seqNum + step (轉(zhuǎn)為16進(jìn)制),若seqNum > max,該線程暫停1毫秒后刷新r1

如果T1 > T0,序列值seqNum = 0 + step

設(shè)置T0

代碼實現(xiàn)如下:

/*** 生成短id* @author mayu*/
public class ShortIdWorker {/*** 初始時間限定為2023-08-01 00:00:00*/private final static long START_STAMP = 1690819200000L;/*** 容錯因子*/private final static int FAULT_TOLERANCE_FACTOR = 10;/*** 默認(rèn)長度*/private final static int DEFAULT_ID_LENGTH = 12;/*** 數(shù)據(jù)庫每毫秒可保存的數(shù)據(jù),結(jié)合列的數(shù)量取值,建議實測后更改*/private final static int DEFAULT_TRANSFER_SPEED_PER_MILLISECOND = 50;private final int length;private final int transferSpeedPerMillisecond;/*** 上次運行時間*/private long lastStamp = -1L;/*** 增長序列*/private int seqNum;private static ShortIdWorker instance;/*** 單例模式*/public static ShortIdWorker getInstance() {if (null == instance) {instance = new ShortIdWorker();}return instance;}public static ShortIdWorker newInstance(int length, int transferSpeedPerMillisecond) {return new ShortIdWorker(length, transferSpeedPerMillisecond);}/*** 默認(rèn)使用12位id,數(shù)據(jù)庫每毫秒新增數(shù)據(jù)為50條*/private ShortIdWorker() {this(DEFAULT_ID_LENGTH, DEFAULT_TRANSFER_SPEED_PER_MILLISECOND);}private ShortIdWorker(int length, int transferSpeedPerMillisecond) {this.length = length;this.transferSpeedPerMillisecond = transferSpeedPerMillisecond;}/*** @return 生成后的id* <p>* 例:757b12c001d3* 共length位id,前x位為時間戳差值的16進(jìn)制,后y位為不固定步長的自增序列*/public synchronized String nextId() {long now = now();// 獲取16進(jìn)制時間戳前綴String stampPrefix = getStampStr(now);// 獲取第二段增長序列的長度l2int l2 = this.length - stampPrefix.length();// 獲取l2位16進(jìn)制的最大值int max = IntStream.range(0, l2).map(i -> 16).reduce(1, (a, b) -> a * b) - 1;// 獲取增長的平均步長averageStepLengthint averageStepLength = max / this.transferSpeedPerMillisecond;// 取步長范圍// averageStepLength的平均值是averageStepLength/2,累加的情況下會有后一半的空間浪費問題,故取值為averageStepLength*2,平均值為averageStepLength// 取隨機(jī)數(shù)的結(jié)果不可控,上行中列舉的只是近似值,為防止多次溢出影響程序執(zhí)行時間,再減去容錯因子,減小溢出概率(容錯因子建議在本地系統(tǒng)實測后更改)int randomStepLengthMax = (averageStepLength << 1) - (averageStepLength / FAULT_TOLERANCE_FACTOR);// 在步長范圍內(nèi)獲取隨機(jī)步長int randomStepLength = new Random().nextInt(randomStepLengthMax) + 1;// 當(dāng)上次運行時間小于當(dāng)前時間或第一次運行時,增長序列賦值為隨機(jī)步長,設(shè)置最后運行時間if (this.lastStamp < now || this.lastStamp == -1L) {this.seqNum = randomStepLength;this.lastStamp = now;// 當(dāng)上次運行時間與當(dāng)前運行時間處于同一毫秒時} else if (this.lastStamp == now) {// 增長序列以隨機(jī)步長為步長遞增this.seqNum += randomStepLength;// 當(dāng)增長序列大于最大值時if (this.seqNum > max) {// 程序暫停一毫秒LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(1));// 重新獲取前綴,增長序列重新開始this.seqNum = randomStepLength;Long newNow = now();this.lastStamp = newNow;stampPrefix = getStampStr(newNow);}} else {// 時鐘回?fù)?#xff0c;報錯throw new IllegalStateException("Clock moved backwards.  Reject to generate id");}// 將增長序列轉(zhuǎn)為16進(jìn)制與時間戳拼接return stampPrefix + String.format("%0" + l2 + "X", new BigInteger(String.valueOf(this.seqNum), 10));}private String hex10To16(String str) {return String.format("%X", new BigInteger(str, 10));}private long now() {return System.currentTimeMillis();}/*** 獲取傳入時間與開始時間的間隔毫秒數(shù),將結(jié)果轉(zhuǎn)為16進(jìn)制* @param now 時間戳* @return*/private String getStampStr(Long now) {return hex10To16(String.valueOf(now - START_STAMP));}

????????8位16進(jìn)制可使用到4201年-03-20 07:32:15,后續(xù)時間戳所占位數(shù)自動變?yōu)?位,id總長度不變,不用擔(dān)心id用盡的問題。

????????代碼中關(guān)于時間賦值的代碼請謹(jǐn)慎改動,順序顛倒會產(chǎn)生bug。

http://aloenet.com.cn/news/38516.html

相關(guān)文章:

  • 有沒有做維修的網(wǎng)站哪有免費的網(wǎng)站
  • 網(wǎng)站收縮欄免費自助建站網(wǎng)站
  • 手機(jī)站建網(wǎng)站免費
  • 有什么做兼職的網(wǎng)站關(guān)鍵詞長尾詞優(yōu)化
  • 下載簡歷模板免費百度系優(yōu)化
  • html5效果網(wǎng)站做一個網(wǎng)站要花多少錢
  • 群站優(yōu)化之鏈輪模式制作網(wǎng)站要花多少錢
  • 做網(wǎng)站要用到數(shù)據(jù)庫嗎新東方考研班收費價格表
  • 廣州低價網(wǎng)站建設(shè)黃頁88
  • 有了域名和空間怎么做網(wǎng)站市場營銷的策劃方案
  • 網(wǎng)站建設(shè)術(shù)語解釋在線crm
  • 規(guī)避電子政務(wù)門戶網(wǎng)站建設(shè)的教訓(xùn)優(yōu)秀網(wǎng)頁設(shè)計賞析
  • 關(guān)于seo網(wǎng)站優(yōu)化公司黑馬培訓(xùn)機(jī)構(gòu)可靠嗎
  • 贛縣網(wǎng)站建設(shè)國內(nèi)新聞最新消息十條
  • h5開發(fā)教程哈爾濱seo網(wǎng)站管理
  • 做網(wǎng)站賺錢的時代過去了嗎百度地圖導(dǎo)航
  • 網(wǎng)站設(shè)置默認(rèn)首頁網(wǎng)絡(luò)營銷網(wǎng)
  • 萬戶網(wǎng)站免費手游推廣平臺
  • 杭州國外網(wǎng)站推廣公司站長之家 站長工具
  • 網(wǎng)站開發(fā)與實訓(xùn)報告企業(yè)優(yōu)化推廣
  • 北京網(wǎng)站建設(shè)w億瑪酷1訂制網(wǎng)站策劃方案
  • 網(wǎng)站開發(fā)業(yè)務(wù)需求分析今日熱點新聞
  • 辦公室局域網(wǎng)怎么搭建seo 資料包怎么獲得
  • wordpress小清新模板鄭州網(wǎng)站優(yōu)化推廣
  • 網(wǎng)站搬家 備案短視頻培訓(xùn)要多少學(xué)費
  • 個人博客網(wǎng)站制作教程網(wǎng)店如何引流與推廣
  • 小說網(wǎng)站代理網(wǎng)絡(luò)營銷的推廣
  • 前端不會wordpress班級優(yōu)化大師頭像
  • 網(wǎng)站建設(shè)問題分類和排除方法分析優(yōu)化大師win10能用嗎
  • 外貿(mào)建站上海成都seo工程師