




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2025年美團(tuán)調(diào)度面試題目及答案本文借鑒了近年相關(guān)經(jīng)典試題創(chuàng)作而成,力求幫助考生深入理解測試題型,掌握答題技巧,提升應(yīng)試能力。一、編程題1.數(shù)組輪轉(zhuǎn)題目描述:給定一個數(shù)組`nums`和一個正整數(shù)`k`,請將數(shù)組向右輪轉(zhuǎn)`k`個位置。示例:輸入:nums=[1,2,3,4,5],k=2輸出:[4,5,1,2,3]要求:不使用額外的數(shù)組空間。時間復(fù)雜度為O(n)。空間復(fù)雜度為O(1)。參考代碼(Python):```pythondefrotate(nums,k):""":typenums:List[int]:typek:int:rtype:NoneDonotreturnanything,modifynumsin-placeinstead."""n=len(nums)k=k%nself.reverse(nums,0,n-1)self.reverse(nums,0,k-1)self.reverse(nums,k,n-1)defreverse(nums,start,end):whilestart<end:nums[start],nums[end]=nums[end],nums[start]start+=1end-=1```2.字符串匹配題目描述:給定兩個字符串`haystack`和`needle`,請你在`haystack`字符串中找出`needle`字符串出現(xiàn)的第一個位置(從0開始)。如果不存在,則返回-1。示例:輸入:haystack="sadbutsad",needle="sad"輸出:0要求:時間復(fù)雜度不超過O(n)??臻g復(fù)雜度不超過O(1)。參考代碼(Java):```javapublicintstrStr(Stringhaystack,Stringneedle){if(needle.length()==0)return0;intn=haystack.length(),m=needle.length();for(inti=0;i<=n-m;i++){intj=0;while(j<m&&haystack.charAt(i+j)==needle.charAt(j))j++;if(j==m)returni;}return-1;}```3.鏈表反轉(zhuǎn)題目描述:給你單鏈表的頭節(jié)點`head`,請你反轉(zhuǎn)它,并返回反轉(zhuǎn)后的鏈表。示例:輸入:head=[1,2,3,4,5]輸出:[5,4,3,2,1]要求:不使用額外的數(shù)組空間。時間復(fù)雜度為O(n)??臻g復(fù)雜度為O(1)。參考代碼(JavaScript):```javascript/Definitionforsingly-linkedlist.functionListNode(val,next){this.val=(val===undefined?0:val)this.next=(next===undefined?null:next)}/varreverseList=function(head){letprev=null;letcurrent=head;while(current!==null){letnext=current.next;current.next=prev;prev=current;current=next;}returnprev;};```4.樹的最大深度題目描述:給定一個二叉樹的根節(jié)點`root`,請計算它的最大深度。示例:輸入:root=[3,9,20,null,null,15,7]輸出:3要求:可以使用遞歸或迭代的方式計算最大深度。時間復(fù)雜度為O(n)??臻g復(fù)雜度為O(h)(h為樹的高度)。參考代碼(Python):```pythonDefinitionforabinarytreenode.classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightclassSolution:defmaxDepth(self,root:TreeNode)->int:ifnotroot:return0return1+max(self.maxDepth(root.left),self.maxDepth(root.right))```5.排序算法題目描述:實現(xiàn)快速排序算法,對給定數(shù)組進(jìn)行排序。示例:輸入:nums=[5,1,1,2,0,0]輸出:[0,0,1,1,2,5]要求:時間復(fù)雜度平均為O(nlogn)??臻g復(fù)雜度為O(logn)。參考代碼(C++):```cppinclude<vector>usingnamespacestd;classSolution{public:voidquickSort(vector<int>&nums,intleft,intright){if(left>=right)return;intpivot=nums[left];inti=left,j=right;while(i<j){while(i<j&&nums[j]>=pivot)j--;if(i<j)nums[i++]=nums[j];while(i<j&&nums[i]<=pivot)i++;if(i<j)nums[j--]=nums[i];}nums[i]=pivot;quickSort(nums,left,i-1);quickSort(nums,i+1,right);}vector<int>sortArray(vector<int>&nums){quickSort(nums,0,nums.size()-1);returnnums;}};```二、算法題1.最長不重復(fù)子串題目描述:給定一個字符串`s`,找出其中不包含重復(fù)字符的最長子串的長度。示例:輸入:s="abcabcbb"輸出:3解釋:因為無重復(fù)字符的最長子串是"abc",所以其長度為3。要求:時間復(fù)雜度為O(n)??臻g復(fù)雜度為O(min(m,n)),其中m為字符集的大小,n為字符串的長度。參考代碼(Java):```javapublicintlengthOfLongestSubstring(Strings){intn=s.length();int[]index=newint[128];//假設(shè)輸入只包含ASCII字符Arrays.fill(index,-1);intmaxLen=0,start=-1;for(inti=0;i<n;i++){charc=s.charAt(i);if(index[c]>start){start=index[c];}index[c]=i;maxLen=Math.max(maxLen,i-start);}returnmaxLen;}```2.最小路徑和題目描述:給定一個包含非負(fù)整數(shù)的`mxn`網(wǎng)格,找出一條從左上角到右下角的路徑,使得路徑上的數(shù)字之和最小。示例:輸入:```[[1,3,1],[1,5,1],[4,2,1]]輸出:7解釋:一條可能的路徑為1->3->1->1->1```要求:可以從左上角到右下角任意移動。時間復(fù)雜度為O(mn)??臻g復(fù)雜度為O(mn)。參考代碼(Python):```pythondefminPathSum(grid):ifnotgridornotgrid[0]:return0m,n=len(grid),len(grid[0])dp=[[0]nfor_inrange(m)]dp[0][0]=grid[0][0]foriinrange(1,m):dp[i][0]=dp[i-1][0]+grid[i][0]forjinrange(1,n):dp[0][j]=dp[0][j-1]+grid[0][j]foriinrange(1,m):forjinrange(1,n):dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j]returndp[m-1][n-1]```3.合并區(qū)間題目描述:給定一個區(qū)間的集合,請合并所有重疊的區(qū)間。示例:輸入:[[1,3],[2,6],[8,10],[15,18]]輸出:[[1,6],[8,10],[15,18]]解釋:區(qū)間[1,3]和[2,6]重疊,合并為[1,6]。要求:區(qū)間按照起始位置升序排列。時間復(fù)雜度為O(nlogn)??臻g復(fù)雜度為O(n)。參考代碼(JavaScript):```javascriptvarmerge=function(intervals){if(intervals.length<=1)returnintervals;intervals.sort((a,b)=>a[0]-b[0]);constmerged=[];for(letintervalofintervals){if(merged.length===0||merged[merged.length-1][1]<interval[0]){merged.push(interval);}else{merged[merged.length-1][1]=Math.max(merged[merged.length-1][1],interval[1]);}}returnmerged;};```4.N皇后問題題目描述:給定一個整數(shù)`n`,返回所有不同的`n`皇后問題的解決方案。每個解決方案包含一個明確的`n`皇后放置方式,其中'Q'和'.'分別代表一個皇后和一個空位。示例:輸入:n=4輸出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解釋:如上圖所示,兩種不同的解決方案。要求:只考慮標(biāo)準(zhǔn)8皇后問題,其中不允許有兩條皇后在同一行、同一列或同一斜線上。時間復(fù)雜度較高,可以不優(yōu)化??臻g復(fù)雜度為O(n)。參考代碼(Python):```pythondefsolveNQueens(n):defis_not_under_attack(row,col):forprev_rowinrange(row):ifboard[prev_row]==color\board[prev_row]-prev_row==col-rowor\board[prev_row]+prev_row==col+row:returnFalsereturnTruedefplace_queen(row):ifrow==n:result.append(["."nfor_inboard])returnforcolinrange(n):ifis_not_under_attack(row,col):board[row]=colplace_queen(row+1)board=[-1]nresult=[]place_queen(0)returnresult```5.貪心算法題目描述:給定一個非負(fù)整數(shù)數(shù)組`nums`,你需要在`k`次操作內(nèi)將其所有元素變?yōu)?。每次操作可以選擇一個元素并將其值減1。示例:輸入:nums=[5,6,7,8,9],k=5輸出:[1,2,1,0,0]要求:使用貪心算法解決問題。時間復(fù)雜度為O(n)??臻g復(fù)雜度為O(n)。參考代碼(Java):```javapublicint[]getLeastNumbers(int[]nums,intk){if(nums==null||nums.length==0||k<=0){returnnewint[0];}intn=nums.length;int[]counts=newint[10001];for(intnum:nums){counts[num]++;}intindex=0;for(inti=0;i<counts.length&&index<k;i++){while(counts[i]>0&&index<k){nums[index++]=i;counts[i]--;}}returnArrays.copyOf(nums,k);}```三、系統(tǒng)設(shè)計題1.設(shè)計一個短URL系統(tǒng)題目描述:設(shè)計一個短URL系統(tǒng)。用戶輸入一個長URL,系統(tǒng)返回一個短URL,可以通過短URL訪問對應(yīng)的長URL。要求:短URL生成規(guī)則:使用62個可用的字符(a-z、A-Z、0-9)進(jìn)行編碼。支持高并發(fā)訪問。提供長URL到短URL的映射關(guān)系,以及短URL到長URL的解析功能。參考思路:1.編碼與解碼:-使用Base62編碼將長URL映射到一個較短的字符串。-解碼時,將短字符串轉(zhuǎn)換回長URL。2.數(shù)據(jù)存儲:-使用哈希表存儲長URL和短URL的映射關(guān)系。-可以使用Redis或Memcached等緩存系統(tǒng)提高查詢效率。3.高并發(fā)處理:-使用負(fù)載均衡器分配請求到多個后端服務(wù)器。-使用分布式緩存減少數(shù)據(jù)庫訪問壓力。2.設(shè)計一個微博系統(tǒng)題目描述:設(shè)計一個微博系統(tǒng),用戶可以發(fā)布微博、關(guān)注其他用戶、查看關(guān)注用戶的微博等。要求:支持用戶注冊、登錄、發(fā)布微博、關(guān)注/取消關(guān)注用戶、查看關(guān)注用戶的微博等功能。系統(tǒng)需要支持高并發(fā)訪問。數(shù)據(jù)存儲和查詢需要高效。參考思路:1.系統(tǒng)架構(gòu):-前端:使用React或Vue等框架構(gòu)建用戶界面。-后端:使用SpringBoot或Gin等框架構(gòu)建RESTfulAPI。-數(shù)據(jù)庫:使用MySQL或PostgreSQL存儲用戶信息、微博數(shù)據(jù)等。-緩存:使用Redis緩存熱點數(shù)據(jù),如用戶關(guān)注列表、熱門微博等。2.數(shù)據(jù)模型:-用戶表:存儲用戶基本信息,如用戶名、密碼、郵箱等。-微博表:存儲微博內(nèi)容、發(fā)布時間、發(fā)布者等。-關(guān)注關(guān)系表:存儲用戶之間的關(guān)注關(guān)系。3.功能實現(xiàn):-用戶注冊/登錄:使用JWT進(jìn)行身份驗證。-發(fā)布微博:將微博內(nèi)容存儲到數(shù)據(jù)庫,并更新用戶的時間線。-關(guān)注/取消關(guān)注:更新關(guān)注關(guān)系表,并通知被關(guān)注用戶。-查看關(guān)注用戶的微博:從數(shù)據(jù)庫或緩存中獲取關(guān)注用戶的微博,并按時間倒序返回。3.設(shè)計一個分布式計數(shù)器題目描述:設(shè)計一個分布式計數(shù)器,支持多個節(jié)點并發(fā)地進(jìn)行計數(shù)操作。要求:計數(shù)器需要支持高并發(fā)訪問。計數(shù)器的值需要保持一致。支持原子性計數(shù)操作。參考思路:1.使用Redis實現(xiàn):-使用Redis的INCR命令進(jìn)行原子性計數(shù)。-可以使用Redis的SHARDS配置進(jìn)行分片,提高并發(fā)處理能力。2.使用ZooKeeper實現(xiàn):-使用ZooKeeper的計數(shù)器節(jié)點實現(xiàn)分布式計數(shù)。-可以使用ZooKeeper的臨時順序節(jié)點實現(xiàn)計數(shù)功能。3.使用分布式鎖:-使用分布式鎖確保計數(shù)操作的原子性。-可以使用Redis或ZooKeeper實現(xiàn)分布式鎖。四、綜合題1.設(shè)計一個消息隊列題目描述:設(shè)計一個簡單的消息隊列,支持生產(chǎn)者發(fā)送消息和消費者接收消息。要求:支持高并發(fā)訪問。消息需要保證順序性。支持消息持久化。參考思路:1.系統(tǒng)架構(gòu):-使用Kafka或RabbitMQ等成熟的消息隊列系統(tǒng)。-使用多個Broker節(jié)點提高系統(tǒng)的可用性和擴(kuò)展性。2.數(shù)據(jù)模型:-消息表:存儲消息內(nèi)容、發(fā)送時間、所屬隊列等。-消息隊列表:存儲隊列信息,如隊列名稱、消息ID等。3.功能實現(xiàn):-生產(chǎn)者:將消息發(fā)送到指定的隊列。-消費者:從指定的隊列中接收消息。-持久化:將消息存儲到數(shù)據(jù)庫或磁盤,確保消息不丟失。2.設(shè)計一個搜索引擎題目描述:設(shè)計一個簡單的搜索引擎,支持用戶輸入關(guān)鍵詞進(jìn)行搜索,并返回相關(guān)的網(wǎng)頁。要求:支持高并發(fā)訪問。搜索結(jié)果需要按照相關(guān)性排序。支持索引構(gòu)建和更新。參考思路:1.系統(tǒng)架構(gòu):-使用Elasticsearch或Solr等成熟的搜索引擎系統(tǒng)。-使用多個節(jié)點進(jìn)行分布式索引和搜索。2.數(shù)據(jù)模型:-索引表:存儲網(wǎng)頁內(nèi)容、關(guān)鍵詞、TF-IDF值等。-網(wǎng)頁表:存儲網(wǎng)頁基本信息,如URL、標(biāo)題等。3.功能實現(xiàn):-索引構(gòu)建:將網(wǎng)頁內(nèi)容提取關(guān)鍵詞并構(gòu)建索引。-搜索:根據(jù)用戶輸入的關(guān)鍵詞進(jìn)行搜索,并返回相關(guān)性排序的結(jié)果。-索引更新:定期更新索引,確保搜索結(jié)果的時效性。五、答案和解析一、編程題1.數(shù)組輪轉(zhuǎn)答案(Python):```pythondefrotate(nums,k):""":typenums:List[int]:typek:int:rtype:NoneDonotreturnanything,modifynumsin-placeinstead."""n=len(nums)k=k%nself.reverse(nums,0,n-1)self.reverse(nums,0,k-1)self.reverse(nums,k,n-1)defreverse(nums,start,end):whilestart<end:nums[start],nums[end]=nums[end],nums[start]start+=1end-=1```解析:-首先將`k`對數(shù)組長度取模,避免不必要的輪轉(zhuǎn)。-然后將數(shù)組整體反轉(zhuǎn),再將前`k`個元素反轉(zhuǎn),最后將剩余部分反轉(zhuǎn)。-這樣可以在不使用額外空間的情況下,以O(shè)(n)的時間復(fù)雜度完成數(shù)組輪轉(zhuǎn)。2.字符串匹配答案(Java):```javapublicintstrStr(Stringhaystack,Stringneedle){if(needle.length()==0)return0;intn=haystack.length(),m=needle.length();for(inti=0;i<=n-m;i++){intj=0;while(j<m&&haystack.charAt(i+j)==needle.charAt(j))j++;if(j==m)returni;}return-1;}```解析:-使用滑動窗口的思想,從左到右遍歷`haystack`。-對于每個窗口,比較窗口內(nèi)的字符與`needle`的字符是否相同。-如果相同,繼續(xù)比較下一個字符;如果不同,移動窗口到下一個位置。-如果窗口內(nèi)的字符與`needle`完全相同,返回當(dāng)前窗口的起始位置。-如果遍歷完`haystack`都沒有找到匹配的`needle`,返回-1。3.鏈表反轉(zhuǎn)答案(JavaScript):```javascript/Definitionforsingly-linkedlist.functionListNode(val,next){this.val=(val===undefined?0:val)this.next=(next===undefined?null:next)}/varreverseList=function(head){letprev=null;letcurrent=head;while(current!==null){letnext=current.next;current.next=prev;prev=current;current=next;}returnprev;};```解析:-使用三個指針`prev`、`current`和`next`來反轉(zhuǎn)鏈表。-初始時,`prev`為`null`,`current`為`head`。-在遍歷鏈表的過程中,將`current`的`next`指向`prev`,然后移動`prev`和`current`到下一個節(jié)點。-最后,`prev`將指向新的頭節(jié)點。4.樹的最大深度答案(Python):```pythonDefinitionforabinarytreenode.classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightclassSolution:defmaxDepth(self,root:TreeNode)->int:ifnotroot:return0return1+max(self.maxDepth(root.left),self.maxDepth(root.right))```解析:-使用遞歸的方式計算二叉樹的最大深度。-如果當(dāng)前節(jié)點為空,返回0。-否則,返回當(dāng)前節(jié)點的左子樹和右子樹的最大深度加1。5.排序算法答案(C++):```cppinclude<vector>usingnamespacestd;classSolution{public:voidquickSort(vector<int>&nums,intleft,intright){if(left>=right)return;intpivot=nums[left];inti=left,j=right;while(i<j){while(i<j&&nums[j]>=pivot)j--;if(i<j)nums[i++]=nums[j];while(i<j&&nums[i]<=pivot)i++;if(i<j)nums[j--]=nums[i];}nums[i]=pivot;quickSort(nums,left,i-1);quickSort(nums,i+1,right);}vector<int>sortArray(vector<int>&nums){quickSort(nums,0,nums.size()-1);returnnums;}};```解析:-快速排序是一種分治算法,通過選擇一個基準(zhǔn)值,將數(shù)組分成兩部分,然后遞歸地對這兩部分進(jìn)行快速排序。-時間復(fù)雜度平均為O(nlogn),空間復(fù)雜度為O(logn)。二、算法題1.最長不重復(fù)子串答案(Java):```javapublicintlengthOfLongestSubstring(Strings){intn=s.length();int[]index=newint[128];//假設(shè)輸入只包含ASCII字符Arrays.fill(index,-1);intmaxLen=0,start=-1;for(inti=0;i<n;i++){charc=s.charAt(i);if(index[c]>start){start=index[c];}index[c]=i;maxLen=Math.max(maxLen,i-start);}returnmaxLen;}```解析:-使用滑動窗口的思想,使用兩個指針`start`和`i`表示當(dāng)前窗口的起始和結(jié)束位置。-使用數(shù)組`index`記錄每個字符最后出現(xiàn)的位置。-如果當(dāng)前字符最后出現(xiàn)的位置在`start`之后,更新`start`為該位置。-否則,保持`start`不變。-窗口的長度為`i-start`,記錄最大值。2.最小路徑和答案(Python):```pythondefminPathSum(grid):ifnotgridornotgrid[0]:return0m,n=len(grid),len(grid[0])dp=[[0]nfor_inrange(m)]dp[0][0]=grid[0][0]foriinrange(1,m):dp[i][0]=dp[i-1][0]+grid[i][0]forjinrange(1,n):dp[0][j]=dp[0][j-1]+grid[0][j]foriinrange(1,m):forjinrange(1,n):dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j]returndp[m-1][n-1]```解析:-使用動態(tài)規(guī)劃的思想,使用二維數(shù)組`dp`記錄到達(dá)每個位置的最小路徑和。-初始化`dp[0][0]`為`grid[0][0]`。-然后填充`dp`數(shù)組的其他位置,每個位置的值為其左方和上方位置的最小值加當(dāng)前值。-最后返回`dp[m-1][n-1]`。3.合并區(qū)間答案(JavaScript):```javascriptvarmerge=function(intervals){if(intervals.length<=1)returnintervals;intervals.sort((a,b)=>a[0]-b[0]);constmerged=[];for(letintervalofintervals){if(merged.length===0||merged[merged.length-1][1]<interval[0]){merged.push(interval);}else{merged[merged.length-1][1]=Math.max(merged[merged.length-1][1],interval[1]);}}returnmerged;};```解析:-首先將區(qū)間按照起始位置進(jìn)行排序。-然后遍歷排序后的區(qū)間,如果當(dāng)前區(qū)間的起始位置大于合并區(qū)間的結(jié)束位置,則將當(dāng)前區(qū)間加入合并區(qū)間列表。-否則,更新合并區(qū)間的結(jié)束位置為當(dāng)前區(qū)間和合并區(qū)間的較大值。-最后返回合并區(qū)間列表。4.N皇后問題答案(Python):```pythondefsolveNQueens(n):defis_not_under_attack(row,col):forprev_rowinrange(row):ifboard[prev_row]==color\board[prev_row]-prev_row==col-rowor\board[prev_row]+prev_row==col+row:returnFalsereturnTruedefplace_queen(row):ifrow==n:result.append(["."nfor_inboard])returnforcolinrange(n):ifis_not_under_attack(row,col):board[row]=colplace_queen(row+1)board=[-1]nresult=[]place_queen(0)returnresult```解析:-使用回溯算法解決N皇后問題。-使用數(shù)組`board`記錄每一行的皇后位置。-使用函數(shù)`is_not_under_attack`檢查當(dāng)前位置是否受到攻擊。-使用函數(shù)`place_queen`遞歸地放置皇后。-如果所有皇后都放置完畢,將當(dāng)前解加入結(jié)果列表。5.貪心算法答案(Java):```javapublicint[]getLeastNumbers(int[]nums,intk){if(nums==null||nums.length==0||k<=0){returnnewint[0];}intn=nums.length;int[]counts=newint[10001];for(intnum:nums){counts[num]++;}intindex=0;for(inti=0;i<counts.length&&index<k;i++){while(counts[i]>0&&index<k){nums[index++]=i;counts[i]--;}}returnArrays.copyOf(nums,k);}```解析:-使用計數(shù)排序的思想,統(tǒng)計每個數(shù)字出現(xiàn)的次數(shù)。-然后按照數(shù)字的順序,將前`k`個數(shù)字填充到結(jié)果數(shù)組中。-這樣可以在O(n)的時間復(fù)雜度內(nèi)完成排序。三、系統(tǒng)設(shè)計題1.設(shè)計一個短URL系統(tǒng)解析:-編碼與解碼:-使用Base62編碼將長URL映射到一個較短的字符串。-解碼時,將短字符串轉(zhuǎn)換回長URL。-可以使用以下映射表:```pythonbase62="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"defencode(url):importbase64encoded=base64.urlsafe_b64encode(url.encode()).decode().rstrip('=')returnencoded[:6]defdecode(short_url):importbase64padded=short_url+'='(6-len(short_url)%4)encoded=base64.urlsafe_b64decode(padded.encode()).decode()returnencoded```-數(shù)據(jù)存儲:-使用哈希表存儲長URL和短URL的映射關(guān)系。-可以使用Redis或Memcached等緩存系統(tǒng)提高查詢效率。-數(shù)據(jù)庫設(shè)計:```sqlCREATETABLEurl_mappings(short_urlVARCHAR(10)PRIMARYKEY,long_urlTEXTNOTNULL);```-高并發(fā)處理:-使用負(fù)載均衡器分配請求到多個后端服務(wù)器。-使用分布式緩存減少數(shù)據(jù)庫訪問壓力。2.設(shè)計一個微博系統(tǒng)解析:-系統(tǒng)架構(gòu):-前端:使用React或Vue等框架構(gòu)建用戶界面。-后端:使用SpringBoot或Gin等框架構(gòu)建RESTfulAPI。-數(shù)據(jù)庫:使用MySQL或PostgreSQL存儲用戶信息、微博數(shù)據(jù)等。-緩存:使用Redis緩存熱點數(shù)據(jù),如用戶關(guān)注列表、熱門微博等。-數(shù)據(jù)模型:-用戶表:```sqlCREATETABLEusers(user_idBIGINTPRIMARYKEYAUTO_INCREMENT,usernameVARCHAR(50)UNIQUENOTNULL,passwordVARCHAR(255)NOTNULL,emailVARCHAR(100)UNIQUENOTNULL);```-微博表:```sqlCREATETABLEtweets(tweet_idBIGINTPRIMARYKEYAUTO_INCREMENT,user_idBIGINTNOTNULL,contentTEXTNOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,FOREIGNKEY(user_id)REFERENCESusers(user_id));```-關(guān)注關(guān)系表:```sqlCREATETABLEfollowships(follower_idBIGINTNOTNULL,followee_idBIGINTNOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,PRIMARYKEY(follower_id,followee_id),FOREIGNKEY(follower_id)REFERENCESusers(user_id),FOREIGNKEY(followee_id)REFERENCESusers(user_id));```-功能實現(xiàn):-用戶注冊/登錄:使用JWT進(jìn)行身份驗證。-發(fā)布微博:將微博內(nèi)容存儲到數(shù)據(jù)庫,并更新用戶的時間線。-關(guān)注/取消關(guān)注:更新關(guān)注關(guān)系表,并通知被關(guān)注用戶。-查看關(guān)注用戶的微博:從數(shù)據(jù)庫或緩存中獲取關(guān)注用戶的微博,并按時間倒序返回。3.設(shè)計一個分布式計數(shù)器解析:-使用Redis實現(xiàn):-使用Redis的INCR命令進(jìn)行原子性計數(shù)。-可以使用Redis的SHARDS配置進(jìn)行分片,提高并發(fā)處理能力。-示例代碼:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 果園出售合同協(xié)議書范本
- 項目工程租賃協(xié)議書范本
- 2025至2030中國醫(yī)藥流通行業(yè)發(fā)展分析及競爭策略與趨勢預(yù)測報告
- 2025年藥品經(jīng)營和使用質(zhì)量監(jiān)督管理辦法培訓(xùn)試題及答案
- 2025年食品安全衛(wèi)生知識培訓(xùn)試題(附答案)
- 2025年《幼兒園評估指南》試題及答案解析
- 2025至2030中國白氫市場需求潛力與前景動態(tài)分析報告
- 2025年生理學(xué)試題及答案血液循環(huán)
- 2025至2030機(jī)器人產(chǎn)業(yè)市場深度分析及有效策略與實施路徑評估報告
- OEE計算案例及其價值介紹
- 《水上客運重大事故隱患判定指南(暫行)》解讀與培訓(xùn)
- 浙江省消防技術(shù)規(guī)范難點問題 操作技術(shù)指南(2020 版)
- (完整word版)勞動合同書(電子版)正規(guī)范本(通用版)
- LY/T 2787-2017國家儲備林改培技術(shù)規(guī)程
- 材料品牌確認(rèn)單
- DBJ53T-64-2014 建筑基坑工程監(jiān)測技術(shù)規(guī)程
- 大唐集團(tuán)公司工作票、操作票使用和管理標(biāo)準(zhǔn)(版)
- 中國政治思想史完整版課件
- Q∕SY 03026-2019 石腦油-行業(yè)標(biāo)準(zhǔn)
- 工業(yè)設(shè)計史-日本工業(yè)設(shè)計-自制
- D型便梁工法(二)
評論
0/150
提交評論