国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

碼德需求?這不就是產品給我留的數學作業!

開發 前端
在我們常用的API中,HashMap 就是一個非常好的例子,既有非常好的數據結構的使用,也有強大的數學邏輯的實現。為此也讓 HashMap 成為開發過程中非常常用的API,當然也成為面試過程中最常問的技術點。

 [[357374]]

目錄

  • 一、前言
  • 二、代碼就是對數學邏輯的具體實現
  • 三、得物(毒) 8位隨機抽獎碼設計
  • 1. 需求描述
  • 2. 實現方案
  • 四、總結

一、前言

圖 15-1 寫好代碼的核心

  • 為什么你的代碼一坨坨?其實來自你有那么多為什么你要這樣寫代碼!
  • 為什么你的代碼那么多for循環?因為沒有合理的數據結構和算法邏輯。
  • 為什么你的代碼那么多ifelse?因為缺少設計模式對業務場景的運用。
  • 為什么你的程序應用復雜對接困難?因為沒有良好的系統架構拆分和規劃。
  • 為什么你的程序邏輯開發交付慢返工多?因為不具備某些業務場景的開發經驗。
  • 為什么你的程序展現都是看上去不說人話?因為沒有產品思維都是程序員邏輯的體現。

「最終」,所有的這些不合理交織在一起,就是你能看到的一坨坨的代碼!「所以」,要想把代碼寫好、寫美,寫到自己愿意反復欣賞,那么基本需要你有一定的:基礎能力(數據結構、算法邏輯、設計模式)、應用能力(系統架構、開發經驗)、拓展能力(產品思維),這三方面綜合起來才能更好的開發程序。

但可能杠精會喊,我就寫個CRUD要什么邏輯、什么數據結構,還算法? 但寫CRUD并不一定業務需求是CRUD,只是你的知識面和技術深度只能把它設計成CRUD,用ifelse和for循環在一個類里反復粘貼復制罷了。

可能同樣的需求交給別人手里,就會想的更多搭建的更加完善。就像:樹上10只鳥開一槍還剩下幾只,你會想到什么?比如:

  • 手搶是無聲的嗎?
  • 槍聲大嗎?
  • 這個城市打鳥犯不犯法?
  • 確定那只鳥被打死了?
  • 樹上的鳥有沒有聾子?
  • 有沒有被關在籠子里或者綁在樹上的鳥?
  • 旁邊還有其他樹嗎?
  • 有殘疾或者飛不動的鳥嗎?
  • 有懷孕肚子里的鳥嗎?
  • 打鳥的人眼睛花沒花?
  • 保證是10只嗎?
  • 有沒有那種不怕死的鳥?
  • 會不會一槍打死兩只或者更多?
  • 所有的鳥都可以自由活動飛離樹以外嗎?
  • 打死以后掛在樹上還是掉下來了?

所以,你還相信寫程序只是簡簡單單的搞CRUD嗎?接下來小傅哥再帶著你搞幾個例子看一看!

二、代碼就是對數學邏輯的具體實現

數據結構:數組、鏈表、紅黑樹 算法邏輯:哈希、擾動函數、負載因子、拉鏈尋址、

其實我們所開發的業務程序,哪怕是CRUD也都是對數學邏輯的具體實現過程。只不過簡單的業務有簡單的數學邏輯、復雜的業務有復雜的數學邏輯。數學邏輯是對數據結構的使用,(例如:把大象裝進冰箱分幾步)合理的數據的結構有利于數據邏輯的實現和復雜程度。

在我們常用的API中,HashMap 就是一個非常好的例子,既有非常好的數據結構的使用,也有強大的數學邏輯的實現。為此也讓 HashMap 成為開發過程中非常常用的API,當然也成為面試過程中最常問的技術點。

圖 15-2 HashMap中的數據結構和數學邏輯

「重點」,HashMap 中涉及的知識點非常多,包括數據結構的使用、數組、鏈表、紅黑樹,也包括算法邏輯的實現:哈希、擾動函數、負載因子、拉鏈尋址等等。而這些知識如果可以深入的搞清楚,是完全不需要死記硬背的,也不需要為了面試造火箭。就像如下問題:

  • HashMap 怎么來的?因為有非常多業務開發中需要key、value的形式存放獲取數據。
  • 為什么要用哈希計算下標呢?因為哈希值求計算出的 key 具有低碰撞性。
  • 為什么還要加擾動函數呀?因為擾動函數可以讓數據散列的均勻,如果HashMap中的數據都碰撞成短鏈表,就會大大降低HashMap的索引性能。
  • 為什么會有鏈表呢?因為無論如何都有會有節點碰撞的可能,碰撞后HashMap選擇拉鏈尋址的方式存放數據。當然在 ThreadLocal 中采用的是斐波那契(Fibonacci)散列+開放尋址,感興趣也可以看看。
  • 為什么鏈表會轉換樹呢?因為時間復雜度問題,鏈表的時間復雜度是O(n),越長越慢。
  • 為什么樹是紅黑樹呢?紅黑樹具有平衡性,也就是黑色節點是平衡的,平衡帶來的效果就是控制整體樹高,讓時間復雜度最終保持在O(logn),否則都是一丿的樹就沒意義了。
  • 為什么有個負載因子呢?負載因子決定HashMap的高矮胖瘦,負載你可以理解成一輛卡車能裝多少貨,裝的越多這一趟賺的也閱讀風險也越高,裝的越少跑的越快賺的也少。所以選擇了適當大小0.75。
  • 為什么JDK8優化了數據擴容時遷移?那不就是因為計算哈希值求下標耗費時間嗎,已經找到了數學規律,直接遷移就可以了,提高性能。
  • 「看到了嗎?」 HashMap完全就是對數據結構的綜合使用,以及對數學邏輯的完美結合,才讓我們有了非常好用的HashMap。這些知識的學習就可以技術遷移到我們自己業務開發中,把有些業務開發優化到非常不錯的性能體現上。同時你的代碼也值得加薪!

「哈希下標」

圖 15-2 中涉及到的下標位置存放的數據,不是胡亂寫的。是按照 HashMap 中的計算邏輯找到的固定位置值。代碼如下:

  1. for (int i = 1; i < 1000; i++) { 
  2.     String key = String.valueOf(i); 
  3.     int hash = key.hashCode() ^ (key.hashCode() >>> 16); 
  4.     int idx = (64 - 1) & hash; 
  5.      
  6.     if (idx == 2) { 
  7.        // System.out.println(i + " Idx:" + idx); 
  8.     } 
  9.     if (idx == 62) { 
  10.         System.out.println(i + " Idx:" + idx); 
  11.     } 

如果你需要英文的,那么可以跑10萬單詞的字典表。關于HashMap的內容小傅哥已經整理到面經手冊中,鏈接:面經手冊 ? 拿大廠Offer

三、得物(毒) 8位隨機抽獎碼設計

1. 需求描述

圖 15-3 模仿得物(毒) APP抽獎碼需求

圖 15-3 是我們模擬得物APP中關于抽獎碼需求的樣式圖,核心技術點包括:

  1. 需要一個8位的隨機碼,全局唯一。
  2. 每個人可以獲得多個這樣的隨機碼,隨機碼閱讀中獎概率越大。
  3. 隨機碼我們這里的設計與毒App的展現形式略有不同,組成包括:大寫字母、小寫字母和數字。

在你沒有看實現方案前,你可以先考慮下這樣的唯一的隨機碼該怎樣去生成。

2. 實現方案

2.1 基于Redis生成

  1. int codeId = RedisUtil.incr("codeUUID"); 
  2. String UUID = String.format("%08d", codeId); 
  3. System.out.println(UUID); 
  4.  
  5. // 測試結果 
  6. 00000001 
  7. 00000002 
  8. 00000003 

評分:?

方案:基于 Redis 的 incr 方法,全局自增從0開始,以上是偽代碼。

點評:以上方案不可用,除了并不一定能保證全局自增和可靠性外,有一個很大的問題是你的順序自增,把APP有多少人參加活動的數據暴露了。

2.2 隨機數生成

  1. Random random = new Random(); 
  2. StringBuffer code = new StringBuffer(); 
  3. for (int i = 0; i < 8; i++) { 
  4.     int number = random.nextInt(3); 
  5.     switch (number) { 
  6.         case 0: 
  7.             code.append((char) (random.nextInt(26) + 65)); // 65 ~ 90 
  8.             break; 
  9.         case 1: 
  10.             code.append((char) (random.nextInt(26) + 97)); // 97 ~ 122 
  11.             break; 
  12.         case 2: 
  13.             code.append((char) (random.nextInt(9) + 48)); // 48 ~ 97 
  14.             break; 
  15.     } 
  16. System.out.println(code.toString()); 
  17.  
  18. // 測試結果 
  19. qvY0Fqrk 
  20. 8uyehK3H 
  21. U7z2v4qK 

評分:??

方案:基于隨機數生成8位隨機碼,相當于62^8次冪,有將近百萬億的隨機數。

點評:此方案在很多業務場景中都有使用,但這里的實現還有一個問題,就是隨性后的不唯一性,雖然我們知道這么大體量很難出現兩個相同的。但如果隨著業務運營日積月累的使用,終究會有兩個一樣的隨機數,只要出現就會是客訴。所以還需要保證唯一性,可以在隨機數中加入年或者月的標記,按照這個體量落庫用防重方式保證唯一。當然你還可以有其他的方式來保證唯一

2.3 基于雪花算法

  1. final static char[] digits = { '0''1''3''2''4''7''6''5''8'
  2.         'z''A''B''C''D''E''F''G''H''I''J''K''L'
  3.         '9''a''b''c''d''e''f''g''h''i''j''k''l'
  4.         'm''n''o''p''q''r''s''t''u''v''w''x''y'
  5.         'M''N''O''P''Q''R''S''T''U''V''W''X''Y'
  6.         'Z''0''1', }; 
  7.          
  8. public static void main(String[] args) { 
  9.     SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0); 
  10.     System.out.println(idWorker.nextId()); 
  11.     long code = idWorker.nextId(); 
  12.     char[] buf = new char[64]; 
  13.     int charPos = 64; 
  14.     int radix = 1 << 6; 
  15.     long mask = radix - 1; 
  16.     do { 
  17.         buf[--charPos] = digits[(int) (code & mask)]; 
  18.         code >>>= 6; 
  19.     } while (code != 0); 
  20.     System.out.println(new String(buf, charPos, (64 - charPos))); 
  21.  
  22. // 測試結果 
  23. uxdDQOG001 
  24. uxd8Uoj001 
  25. uxdERuG000 

評分:???

方案:基于雪花算法的核心目的是,生成隨機串的本身就是唯一值,那么就不需要考慮重復性。只需要將唯一值轉換為對應64進制的字符串組合就可以了。

點評:這里的思路很好,但有幾個問題需要解決。首先是雪花算法的長度是18位,在轉換為64位時會會有10位長的隨機字符串組合,不滿足要求。另外大寫字母、小寫字母和數字組合是62個,還缺少2個不滿足64個,所以需要后面補充兩位,但這兩位生成的組合數需要廢棄。「那么」,如果按照這個生成隨機串且保證唯一的思路,就需要完善雪花算法,降低位數,在滿足業務自身的情況下,控制生成長度。

「實現方案」,終究不會一次就完美,還需要不斷的優化完善。除此之外也會有很多其他的思路,例如電商生成訂單號的方案也可以考慮設計,另外你以為這就完事了?當你已經工作多年,那么你每一天其實都在解決技術問題也是數學問題,產品的需求也更像是數學作業!加油數學老師!

四、總結

好的程序實現離不開數據結構的設計、邏輯算法的完善、設計模式的考量,再配合符合業務發展和程序設計的架構才能搭建出更加合理的程序。

在學習的過程中不要刻意去背答案、背套路,那不是理科內容的學習方式。只有你更多的去實踐、去驗證,讓懂了就是真的懂,才更加舒心!

本篇又扯到了這,想問一句你是害怕35歲,還是害怕自己能力不及年齡增長?想學就把知識學透,你騙不了面試官,只能騙自己!

 

責任編輯:武曉燕 來源: bugstack蟲洞棧
相關推薦

2014-12-23 11:10:47

紅星LinuxLinux

2019-03-10 16:18:09

Facebook馬克·扎克伯微信

2019-05-27 09:14:28

2019-05-09 09:34:34

API暴力破解安全

2022-02-22 10:53:14

Firefox火狐瀏覽器瀏覽器

2022-03-10 10:06:57

數據治理美團體系化建模

2025-09-05 07:06:43

2022-07-20 06:55:10

TCC分布式事務微服務

2025-05-12 14:24:07

LLM推理模型

2023-12-15 08:17:13

防御性編程代碼

2022-03-04 18:59:59

互聯網局域網

2017-02-24 13:20:13

搜索引擎數據結構架構

2023-06-13 08:01:27

qwikSolidJS?reactive

2025-03-10 07:30:00

2025-07-31 14:07:58

ChatGPT谷歌AI

2024-03-18 10:01:00

CSSflex動畫

2025-07-01 08:24:10

2022-09-03 18:29:49

開發技術

2012-08-14 09:37:52

產品數據

2025-09-16 09:14:06

點贊
收藏

51CTO技術棧公眾號

99精品久久| 在线播放日韩| 伊人久久久久久久久久| 僵尸再翻生在线观看| 欧美日本韩国一区| 亚洲卡一卡二| 日韩精品视频在线播放| 欧美一区 二区 三区| 欧美日本在线视频中文字字幕| 欧洲亚洲视频| 亚洲一区二区免费在线| 日韩精品亚洲专区| 久久黄色片视频| 亚洲综合在线第一页| 思思99re6国产在线播放| 亚洲欧美日韩直播| 亚洲免费观看高清完整版在线观| 亚洲一区中文字幕| 国内精品伊人久久久久影院对白| 成人午夜视频免费在线观看| 天天影视网天天综合色在线播放| av在线app| 色视频www在线播放国产成人| 日韩三级网址| 亚洲一区二区在线| 国产一区二区在线电影| 7878视频在线观看| 欧美精品久久久久久久多人混战| 国产自产自拍视频在线观看| 色噜噜久久综合伊人一本| www国产精品| 成人看片视频| 肉肉av福利一精品导航| 久久99久久久久久| 午夜伊人狠狠久久| 看女生喷水的网站在线观看| 欧美超级免费视 在线| 看全色黄大色大片免费久久久| 国产不卡一区二区三区在线观看| 美国三级日本三级久久99| 国产福利视频在线播放| 欧美色视频一区| 91看片一区| 国产精品对白刺激久久久| 国内精品视频一区二区三区八戒| 色琪琪免费视频网站| 日韩精品中文字幕一区二区三区 | 特级黄色录像片| 亚洲资源在线观看| 中文字幕在线播放网址| 国内免费久久久久久久久久久| 91精品亚洲| 色一情一乱一乱一区91| 午夜精品久久久久久久久久久| 69xxx在线| 国产精品视频中文字幕91| 国产欧美在线| eeuss在线播放| 精品少妇一区二区三区免费观看| 亚洲精品v亚洲精品v日韩精品| 国产成人精品自拍| 国产亚洲午夜高清国产拍精品| 在线视频观看国产| 91国产美女在线观看| 福利视频网站一区二区三区| 久蕉在线视频| 国产精品成人一区二区三区吃奶| 加勒比av一区二区| 日本天堂影院在线视频| 另类色图亚洲色图| 亚洲欧美春色| 视频一区二区在线播放| 久久99精品国产99久久6尤物| 久久av老司机精品网站导航| 欧美h版电影| 国自产精品手机在线观看视频| 日韩成人av影视| 最近高清中文在线字幕在线观看| 午夜免费久久久久| 日本成人中文字幕| 在线观看免费黄色| 国产大片精品免费永久看nba| 99re视频精品| 秋霞在线午夜| 欧美大香线蕉线伊人久久| 亚洲午夜精品一区二区三区他趣| 老汉色老汉首页av亚洲| 国产九色porny| 亚洲午夜av电影| 久久久亚洲人| 天堂а√在线8种子蜜桃视频 | 欧美日精品一区视频| 精品国产乱码久久久久久蜜坠欲下| a级网站在线观看| 日韩精品一区二区三区在线 | 成人精品一二区| 亚洲欧美综合网| 毛片无码国产| 精品久久免费观看| 欧美综合视频在线观看| 久久精品亚洲人成影院| 成人黄色激情网站| 欧美在线视频一二三| 久久综合色播五月| 午夜视频一区二区在线观看| 成人免费视频91| 精品视频在线观看日韩| 美女诱惑黄网站一区| 亚洲图片123| 亚洲自拍小视频| 亚洲一区二区在线免费看| 国产a久久精品一区二区三区| 日本熟妇人妻中出| 琪琪亚洲精品午夜在线| 亚洲国产成人私人影院tom| 国产亚洲一卡2卡3卡4卡新区 | 亚洲欧美日本国产| www.日日操| 久久综合久久美利坚合众国| av不卡免费电影| 日韩av系列| 成年免费网站| 亚洲综合视频1区| 亚洲成av人综合在线观看| 亚洲欧洲中文字幕| 在线国产三级| 精品伦精品一区二区三区视频| 在线观看亚洲一区| 久久99国产精品久久| 免费日韩电影| 成人毛片高清视频观看| 日本在线观看天堂男亚洲| 国产农村妇女毛片精品久久麻豆 | 国产精品三级美女白浆呻吟| 色婷婷综合久久久| 亚洲国产影院| 成人交换视频| 男人揉女人奶房视频60分| 91精品国产亚洲| 午夜精品久久一牛影视| 国产精品久久久久久久久久10秀 | 自慰无码一区二区三区| 欧美一性一乱一交一视频| 亚洲成人动漫精品| 免费高清不卡av| 日本一区二区电影| 男女视频一区二区三区| 国产精品wwww| 亚洲男人资源| 91人人澡人人爽人人精品| 360天大佬第二季在线观看| 在线免费观看你懂的| 成人国产精品入口免费视频| 国产精品大片免费观看| 蜜桃视频在线观看一区| 日韩**一区毛片| 亚洲一区国产| 久热成人在线视频| 丁香桃色午夜亚洲一区二区三区| 日本系列欧美系列| 男人操女人的视频在线观看欧美| 成人久久18免费网站麻豆| 久久色中文字幕| 免费人成网站在线观看欧美高清| 国产一区不卡在线| 精品亚洲porn| 久久国产精品免费精品3p| 亚洲精品电影| 日韩高清一级| 情趣视频网站在线免费观看| 97碰在线视频| 影音欧美亚洲| 综合网五月天| 欧美视频第一区| 97操碰视频| 四虎黄色影院| 激情五月色综合亚洲小说| 中文字幕不卡| 五月天色综合| 国产中文精品久高清在线不| 欧美日韩免费| 国产精品1区二区.| 欧美性欧美巨大黑白大战| 亚洲精品视频网上网址在线观看 | bdsm在线观看播放视频| 亚洲区一区二区三区| 麻豆av一区二区三区| 91精品国产综合久久久久久丝袜| 91高清免费视频| 欧美日韩另类字幕中文| 麻豆91小视频| 911精品美国片911久久久| 欧美国产日韩电影| av在线免费观看网站| 国产精品99久久免费黑人人妻| 日本一区二区高清视频| 国产97在线视频| 欧美—级高清免费播放| 亚洲国内精品视频| 9191成人精品久久|