版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2026年蘋果工程師面試題及答案1.編程題(共5題,每題20分,總分100分)題目1(20分):請用Python實現(xiàn)一個函數(shù),輸入一個字符串,返回該字符串中所有重復(fù)字符及其出現(xiàn)次數(shù)。例如,輸入`"hello"`,輸出`{'l':2,'o':1}`。答案:pythondefcount_duplicates(s):count={}forcharins:ifcharincount:count[char]+=1else:count[char]=1return{char:cntforchar,cntincount.items()ifcnt>1}示例print(count_duplicates("hello"))#輸出:{'l':2,'o':1}解析:-使用字典統(tǒng)計每個字符的出現(xiàn)次數(shù)。-遍歷字符串,若字符已存在于字典中,則增加計數(shù);否則,初始化為1。-最后返回計數(shù)大于1的字符及其次數(shù)。題目2(20分):請用C++實現(xiàn)一個函數(shù),輸入一個整數(shù)數(shù)組,返回該數(shù)組的中位數(shù)。假設(shè)數(shù)組長度為奇數(shù)。答案:cppinclude<vector>include<algorithm>doublefindMedian(std::vector<int>&nums){std::sort(nums.begin(),nums.end());intn=nums.size();returnnums[n/2];}//示例include<iostream>intmain(){std::vector<int>nums={3,1,2};std::cout<<findMedian(nums)<<std::endl;//輸出:2return0;}解析:-首先對數(shù)組進行排序。-中位數(shù)即為排序后數(shù)組中間的元素(索引為`n/2`)。題目3(20分):請用Java實現(xiàn)一個鏈表類,包含`add`和`reverse`方法。答案:javaclassListNode{intval;ListNodenext;ListNode(intx){val=x;}}classLinkedList{ListNodehead;publicvoidadd(intval){ListNodenewNode=newListNode(val);if(head==null){head=newNode;}else{ListNodecurrent=head;while(current.next!=null){current=current.next;}current.next=newNode;}}publicvoidreverse(){ListNodeprev=null;ListNodecurrent=head;while(current!=null){ListNodenext=current.next;current.next=prev;prev=current;current=next;}head=prev;}//輔助方法:打印鏈表publicvoidprint(){ListNodecurrent=head;while(current!=null){System.out.print(current.val+"");current=current.next;}System.out.println();}}//示例publicclassMain{publicstaticvoidmain(String[]args){LinkedListlist=newLinkedList();list.add(1);list.add(2);list.add(3);list.print();//輸出:123list.reverse();list.print();//輸出:321}}解析:-`add`方法:在鏈表末尾添加新節(jié)點。-`reverse`方法:通過迭代反轉(zhuǎn)鏈表,使用三個指針`prev`、`current`和`next`實現(xiàn)。題目4(20分):請用JavaScript實現(xiàn)一個函數(shù),輸入一個正整數(shù),返回其二進制表示中`1`的個數(shù)。答案:javascriptfunctioncountOnes(n){letcount=0;while(n>0){count+=n&1;n=n>>1;}returncount;}//示例console.log(countOnes(9));//輸出:2(9的二進制為1001)解析:-使用位運算`n&1`判斷最低位是否為1,然后右移一位繼續(xù)統(tǒng)計。-循環(huán)直到`n`為0。題目5(20分):請用Go實現(xiàn)一個函數(shù),輸入一個字符串,返回該字符串的所有子串。答案:gopackagemainimport"fmt"funcsubstrings(sstring)[]string{n:=len(s)varres[]stringfori:=0;i<n;i++{forj:=i+1;j<=n;j++{res=append(res,s[i:j])}}returnres}//示例funcmain(){fmt.Println(substrings("abc"))//輸出:["a","ab","abc","b","bc","c"]}解析:-使用兩層循環(huán)生成所有可能的子串:外層固定起始位置`i`,內(nèi)層固定結(jié)束位置`j`。-將`s[i:j]`添加到結(jié)果列表中。2.系統(tǒng)設(shè)計題(共3題,每題30分,總分90分)題目1(30分):設(shè)計一個簡單的URL短鏈接系統(tǒng)。用戶輸入長URL,系統(tǒng)返回短URL,點擊短URL后自動跳轉(zhuǎn)到長URL。要求:-短URL應(yīng)具有唯一性且長度盡可能短。-支持高并發(fā)訪問。-提供基礎(chǔ)的數(shù)據(jù)統(tǒng)計功能(如點擊次數(shù))。答案:系統(tǒng)架構(gòu):1.前端服務(wù)(APIGateway):-接收用戶的長URL請求,生成短URL,并返回給用戶。-接收短URL請求,解析并轉(zhuǎn)發(fā)到后端服務(wù)。2.后端服務(wù)(URLShortenerService):-存儲長URL與短URL的映射關(guān)系(使用數(shù)據(jù)庫或緩存)。-生成短URL(如使用Base62編碼)。-統(tǒng)計點擊次數(shù)。3.數(shù)據(jù)庫/緩存(Redis/MongoDB):-存儲URL映射和點擊次數(shù)。技術(shù)選型:-短URL生成:使用Base62編碼(字母+數(shù)字,如`aW3`)。-映射:`a=0,b=1,...,z=25,A=26,...,Z=51,0=52,...,9=61`。-生成:將數(shù)字轉(zhuǎn)換為62進制。-高并發(fā)處理:-使用Redis緩存熱點URL,減少數(shù)據(jù)庫訪問。-APIGateway使用負載均衡(如Nginx)。-數(shù)據(jù)統(tǒng)計:-每次點擊后更新Redis中的計數(shù)器。偽代碼示例:python生成短URLdefencode(num):chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"base=62short_url=""whilenum>0:short_url=chars[num%base]+short_urlnum//=basereturnshort_url存儲URL映射url_map={}接收長URL請求defshorten_url(long_url):iflong_urlinurl_map:returnurl_map[long_url]num=hash(long_url)#使用hash函數(shù)生成唯一數(shù)字short_url=encode(num)url_map[long_url]=short_urlreturnshort_url接收短URL請求defredirect(short_url):long_url=url_map.get(short_url)iflong_url:increment_click(short_url)#更新點擊次數(shù)returnlong_urlreturn"URLnotfound"解析:-唯一性:使用hash函數(shù)(如MD5)將長URL映射為數(shù)字,確保唯一性。-短URL生成:Base62編碼將數(shù)字壓縮為短字符串。-高并發(fā):Redis緩存熱點URL,減少數(shù)據(jù)庫壓力。題目2(30分):設(shè)計一個實時消息推送系統(tǒng)(如微信、Twitter)。用戶可以訂閱主題,系統(tǒng)將相關(guān)消息實時推送給訂閱者。要求:-支持多用戶訂閱同一主題。-消息推送延遲盡可能低。-提供消息持久化機制(防止消息丟失)。答案:系統(tǒng)架構(gòu):1.前端服務(wù)(UserService):-用戶注冊、登錄、訂閱主題。-接收用戶消息并轉(zhuǎn)發(fā)到消息服務(wù)。2.消息服務(wù)(MessageBroker):-接收用戶發(fā)布的消息,根據(jù)主題路由到訂閱者。-使用發(fā)布-訂閱模式(如Kafka或RabbitMQ)。3.消息存儲(Redis/MongoDB):-持久化消息,防止消息丟失。4.推送服務(wù)(PushService):-將消息推送給客戶端(WebSocket/長輪詢)。技術(shù)選型:-發(fā)布-訂閱模式:Kafka或RabbitMQ,支持高并發(fā)和消息持久化。-消息持久化:Redis的發(fā)布-訂閱功能或數(shù)據(jù)庫事務(wù)。-實時推送:WebSocket(低延遲)或長輪詢(簡單但延遲較高)。偽代碼示例:python用戶訂閱主題subscribers={"topic1":["user1","user2"],"topic2":["user3"]}發(fā)布消息defpublish_message(topic,message):foruserinsubscribers.get(topic,[]):push_to_user(user,message)推送給用戶defpush_to_user(user,message):WebSocket或長輪詢推送send_message_to_client(user,message)用戶訂閱主題defsubscribe_topic(user,topic):iftopicnotinsubscribers:subscribers[topic]=[]subscribers[topic].append(user)發(fā)布消息并持久化defpublish_message_with_persistence(topic,message):publish_message(topic,message)save_message_to_db(topic,message)#持久化消息解析:-發(fā)布-訂閱模式:解耦發(fā)布者和訂閱者,支持動態(tài)訂閱。-消息持久化:使用Redis或數(shù)據(jù)庫防止消息丟失。-實時推送:WebSocket或長輪詢根據(jù)需求選擇。題目3(30分):設(shè)計一個分布式數(shù)據(jù)庫集群,支持分片(Sharding)和高可用性。要求:-數(shù)據(jù)按Key分片,每個分片存儲在獨立節(jié)點上。-支持讀寫負載均衡。-提供數(shù)據(jù)復(fù)制機制,防止單點故障。答案:系統(tǒng)架構(gòu):1.分片路由器(ShardRouter):-根據(jù)Key計算分片ID,將請求路由到對應(yīng)分片節(jié)點。-使用一致性哈希(ConsistentHashing)避免大量節(jié)點遷移。2.分片節(jié)點(ShardNode):-每個節(jié)點存儲部分?jǐn)?shù)據(jù),支持讀寫操作。-使用Raft或Paxos協(xié)議保證數(shù)據(jù)一致性。3.副本機制(Replication):-每個分片有多個副本,分布在不同節(jié)點上。-使用主從復(fù)制(Primary-Secondary)或多主復(fù)制(Multi-Primary)。4.負載均衡器(LoadBalancer):-分發(fā)客戶端請求到不同的分片節(jié)點。技術(shù)選型:-分片路由:一致性哈?;蚰_\算分片。-數(shù)據(jù)一致性:Raft或Paxos。-副本機制:主從復(fù)制(如MySQLCluster)或多主復(fù)制(如CockroachDB)。-負載均衡:Nginx或HAProxy。偽代碼示例:python一致性哈希分片defget_shard_id(key):returnhash(key)%1024#假設(shè)有1024個分片分片路由classShardRouter:def__init__(self):self.shards={}#分片節(jié)點映射defroute(self,key,operation):shard_id=get_shard_id(key)shard=self.shards.get(shard_id)if
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 塔吊設(shè)備租賃合同范本及注意點
- 2025年合同管理情況自查報告范文
- 家具加工件定制合同范本
- 2025年村委與個人運輸服務(wù)合同
- 2025年全球市場調(diào)研服務(wù)合同協(xié)議
- 2026年山西財貿(mào)職業(yè)技術(shù)學(xué)院單招職業(yè)技能考試題庫含答案詳解
- 2026年大理護理職業(yè)學(xué)院單招職業(yè)技能測試題庫附答案詳解
- 2026年運城師范高等??茖W(xué)校單招職業(yè)技能考試題庫含答案詳解
- 2026年撫順師范高等??茖W(xué)校單招職業(yè)技能考試題庫及參考答案詳解一套
- 2026年長沙電力職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試題庫及參考答案詳解一套
- 智慧樹知道網(wǎng)課《算法大視界(中國海洋大學(xué))》課后章節(jié)測試答案
- 九龍壁教學(xué)課件
- 高考《數(shù)學(xué)大合集》專題突破強化訓(xùn)練682期【圓錐】細說高考卷里圓錐同構(gòu)式的妙用
- 《天邊有顆閃亮的星》 課件 2025-2026學(xué)年人音版(簡譜)(2024)初中音樂八年級上冊
- 2025秋形勢與政策課件-聚焦建設(shè)更高水平平安中國
- 牲畜家禽屠宰場建設(shè)與布局設(shè)計方案
- 競彩培訓(xùn)基礎(chǔ)知識課件
- 短波無線電通信原理課件
- 混凝土砌塊基礎(chǔ)知識培訓(xùn)課件
- 全新版尹定邦設(shè)計學(xué)概論5
- 軍品運輸合同范本
評論
0/150
提交評論