工程師崗位筆試面試題集含答案_第1頁(yè)
工程師崗位筆試面試題集含答案_第2頁(yè)
工程師崗位筆試面試題集含答案_第3頁(yè)
工程師崗位筆試面試題集含答案_第4頁(yè)
工程師崗位筆試面試題集含答案_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2026年工程師崗位筆試面試題集含答案一、編程語(yǔ)言與數(shù)據(jù)結(jié)構(gòu)(15題,共75分)(針對(duì)互聯(lián)網(wǎng)、深圳地域,側(cè)重Java和算法)1.(5分)編寫Java代碼,實(shí)現(xiàn)一個(gè)單鏈表反轉(zhuǎn)功能。要求:不使用遞歸,時(shí)間復(fù)雜度O(n)。2.(10分)給定一個(gè)包含重復(fù)元素的數(shù)組,請(qǐng)找出所有不重復(fù)的三元組,使得三元組的和等于目標(biāo)值。例如:輸入`[1,2,2,3,4]`,目標(biāo)值`7`,輸出`[[1,2,4],[1,3,3]]`。3.(5分)解釋Java中的`volatile`關(guān)鍵字的作用,并說明它與`synchronized`的區(qū)別。4.(10分)實(shí)現(xiàn)一個(gè)LRU(最近最少使用)緩存,容量為3。輸入:`["LRU","put",1,1,"get",1,"put",2,2,"get",1,"put",3,3,"get",2,"get",3]`,輸出:`[1,-1,1,-1,3]`。5.(10分)有一棵二叉搜索樹,請(qǐng)編寫代碼將其轉(zhuǎn)換為累加樹(每個(gè)節(jié)點(diǎn)的值等于左子樹和右子樹值之和,并刪除原左、右子樹)。6.(5分)什么是時(shí)間復(fù)雜度O(logn)?舉例說明其應(yīng)用場(chǎng)景。7.(10分)編寫Python代碼,實(shí)現(xiàn)快速排序算法,并分析其平均時(shí)間復(fù)雜度。8.(5分)解釋Java中的`StringBuilder`和`StringBuffer`的區(qū)別。9.(10分)給定一個(gè)字符串`s="abcabcbb"`,請(qǐng)返回其最長(zhǎng)無(wú)重復(fù)字符的子串長(zhǎng)度(答案:3,對(duì)應(yīng)"abc")。10.(10分)實(shí)現(xiàn)一個(gè)二叉樹的前序遍歷(非遞歸),要求使用棧。11.(5分)解釋Java中的`HashMap`的put過程。12.(10分)編寫代碼,合并兩個(gè)有序鏈表,使其合并后依然有序。例如:鏈表1`[1,2,4]`,鏈表2`[1,3,4]`,輸出`[1,1,2,3,4,4]`。13.(5分)什么是線程的`sleep`和`wait`?它們有什么區(qū)別?14.(10分)給定一個(gè)數(shù)組`nums`,返回`nums`中缺失的最小正整數(shù)。例如:`[3,4,-1,1]`,輸出`2`。15.(10分)解釋Java中的`抽象類`和`接口`的區(qū)別,并說明使用場(chǎng)景。答案與解析1.單鏈表反轉(zhuǎn)(5分)javaclassListNode{intval;ListNodenext;ListNode(intx){val=x;}}publicListNodereverseList(ListNodehead){ListNodeprev=null;ListNodecurr=head;while(curr!=null){ListNodenextTemp=curr.next;curr.next=prev;prev=curr;curr=nextTemp;}returnprev;}解析:使用三個(gè)指針`prev`、`curr`和`nextTemp`,逐個(gè)反轉(zhuǎn)節(jié)點(diǎn)指針。時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。2.三元組求和(10分)javaimportjava.util.;publicList<List<Integer>>threeSum(int[]nums,inttarget){List<List<Integer>>res=newArrayList<>();Arrays.sort(nums);for(inti=0;i<nums.length-2;i++){if(i>0&&nums[i]==nums[i-1])continue;//去重intleft=i+1,right=nums.length-1;while(left<right){intsum=nums[i]+nums[left]+nums[right];if(sum==target){res.add(Arrays.asList(nums[i],nums[left],nums[right]));while(left<right&&nums[left]==nums[left+1])left++;while(left<right&&nums[right]==nums[right-1])right--;left++;right--;}elseif(sum<target)left++;elseright--;}}returnres;}解析:先排序,再用雙指針法。時(shí)間復(fù)雜度O(n2),空間復(fù)雜度O(1)。3.`volatile`與`synchronized`(5分)-`volatile`:確保變量可見性,但不保證原子性。適用于輕量級(jí)同步場(chǎng)景(如狀態(tài)標(biāo)記)。-`synchronized`:可重入、可中斷、可等待/通知,保證原子性和可見性。適用于復(fù)雜同步場(chǎng)景。4.LRU緩存(10分)javaclassLRUCache{privateintcapacity;privateMap<Integer,Integer>cache;publicLRUCache(intcapacity){this.capacity=capacity;cache=newLinkedHashMap<>(capacity,0.75f,true){protectedbooleanremoveEldestEntry(Map.Entry<Integer,Integer>eldest){returnsize()>capacity;}};}publicintget(intkey){returncache.getOrDefault(key,-1);}publicvoidput(intkey,intvalue){cache.put(key,value);}}解析:使用`LinkedHashMap`實(shí)現(xiàn)LRU,通過`removeEldestEntry`控制容量。5.累加樹(10分)javapublicTreeNodeconvertBST(TreeNoderoot){if(root==null)returnnull;intsum=helper(root);returnroot;}privateinthelper(TreeNodenode){if(node==null)return0;intright=helper(node.right);inttotal=node.val+right;node.val=total;intleft=helper(node.left);returntotal+left;}解析:后序遍歷,將每個(gè)節(jié)點(diǎn)值替換為左子樹和右子樹之和。6.O(logn)時(shí)間復(fù)雜度(5分)-定義:每次操作將問題規(guī)模減半(如二分查找)。-應(yīng)用:二分搜索、平衡樹(AVL、紅黑樹)。7.快速排序(10分)pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)解析:平均時(shí)間復(fù)雜度O(nlogn),最壞O(n2)。8.`StringBuilder`與`StringBuffer`(5分)-`StringBuilder`:非線程安全,效率更高。-`StringBuffer`:線程安全,效率較低(內(nèi)部加鎖)。9.最長(zhǎng)無(wú)重復(fù)子串(10分)pythondeflength_of_longest_substring(s):max_len=0start=0char_set=set()forendinrange(len(s)):whiles[end]inchar_set:char_set.remove(s[start])start+=1char_set.add(s[end])max_len=max(max_len,end-start+1)returnmax_len解析:滑動(dòng)窗口,時(shí)間復(fù)雜度O(n)。10.二叉樹前序遍歷(非遞歸)(10分)javapublicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>res=newArrayList<>();if(root==null)returnres;Stack<TreeNode>stack=newStack<>();stack.push(root);while(!stack.isEmpty()){TreeNodenode=stack.pop();res.add(node.val);if(node.right!=null)stack.push(node.right);if(node.left!=null)stack.push(node.left);}returnres;}解析:棧模擬遞歸,先訪問右子樹再左子樹。11.`HashMap`的put過程(5分)-計(jì)算hash值,定位bucket。-若bucket為空,直接插入。-若key沖突,使用鏈表或紅黑樹解決。12.合并有序鏈表(10分)pythondefmergeTwoLists(l1,l2):dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextcurrent.next=l1orl2returndummy.next解析:雙指針法,時(shí)間復(fù)雜度O(n)。13.`sleep`與`wait`(5分)-`sleep`:線程休眠,不釋放鎖。-`wait`:線程等待,釋放鎖,需`notify/notifyAll`喚醒。14.缺失的最小正整數(shù)(10分)pythondeffirstMissingPositive(nums):n=len(nums)foriinrange(n):while1<=nums[i]<=nandnums[nums[i]-1]!=nums[i]:nums[nums[i]-1],nums[i]=nums[i],nums[nums[i]-1]foriinrange(n):ifnums[i]!=i+1:returni+1returnn+1解析:原地哈希,時(shí)間復(fù)雜度O(n)。15.`抽象類`與`接口`(10分)-抽象類:可含抽象方法(子類必須實(shí)現(xiàn))和普通方法。-接口:僅含抽象方法(Java8后可含default方法)。-使用場(chǎng)景:抽象類用于共享行為,接口用于定義規(guī)范。二、系統(tǒng)設(shè)計(jì)(5題,共50分)(針對(duì)深圳金融行業(yè),側(cè)重分布式、高并發(fā))16.(10分)設(shè)計(jì)一個(gè)高并發(fā)的短鏈接系統(tǒng),要求支持每日百萬(wàn)級(jí)請(qǐng)求。17.(10分)解釋CAP理論,并說明分布式數(shù)據(jù)庫(kù)如何實(shí)現(xiàn)最終一致性。18.(10分)設(shè)計(jì)一個(gè)秒殺系統(tǒng),要求支持每秒1000單,且無(wú)超賣。19.(10分)如何設(shè)計(jì)一個(gè)分布式任務(wù)調(diào)度系統(tǒng)(如阿里的Tair),支持任務(wù)去重和失敗重試?20.(10分)解釋JWT(JSONWebToken)的原理及其優(yōu)缺點(diǎn)。答案與解析16.短鏈接系統(tǒng)(10分)-步驟:1.原始URL->轉(zhuǎn)換為短ID(如Base62編碼)。2.短ID->存入Redis(高并發(fā)場(chǎng)景)。3.請(qǐng)求短ID->查詢Redis,若不存在則回源數(shù)據(jù)庫(kù)。-關(guān)鍵技術(shù):Redis集群、Base62編碼、CDN加速。17.CAP理論(10分)-CAP理論:一致性(Consistency)、可用性(Availability)、分區(qū)容錯(cuò)性(Partitiontolerance)。-最終一致性:通過消息隊(duì)列(如Kafka)、分布式鎖等實(shí)現(xiàn)。18.秒殺系統(tǒng)(10分)-步驟:1.用戶請(qǐng)求->分布式鎖(Redis或ZooKeeper)。2.庫(kù)存扣減->確認(rèn)訂單,若超賣則回滾。3.階梯式限流:熔斷、降級(jí)。-關(guān)鍵技術(shù):Redis、分布式鎖、消息隊(duì)列。19.分布式任務(wù)調(diào)度(10分)-去重:RedisSet存儲(chǔ)任務(wù)ID。-重試:消息隊(duì)列記錄重試次數(shù),定時(shí)檢查。-關(guān)鍵技術(shù):Redis、消息隊(duì)列、定時(shí)任務(wù)。20.JWT原理(10分)-原理:JSON編碼的令牌,含Header、Payload、Signature。-優(yōu)點(diǎn):無(wú)狀態(tài)、跨域。-缺點(diǎn):Payload不宜存敏感信息、易被篡改(需簽名驗(yàn)證)。三、數(shù)據(jù)庫(kù)與中間件(5題,共25分)(針對(duì)深圳電商行業(yè),側(cè)重MySQL、MQ)21.(5分)什么是MySQL的索引類型(如B-Tree、Hash)及其適用場(chǎng)景?22.(5分)解釋MySQL中的事務(wù)隔離級(jí)別及其缺陷(如臟讀)。23.(5分)什么是消息隊(duì)列的“重復(fù)消費(fèi)”問題?如何解決?24.(5分)解釋Redis的RDB和AOF持久化方式。25.(5分)如何優(yōu)化MySQL查詢:`SELECTFROMtableWHEREidIN(1,2,3)`?答案與解析21.MySQL索引類型(5分)-B-Tree:通用索引,適用于范圍查詢(如`BETWEEN`)。-Hash:等值查詢,不支持范圍查詢。22.事務(wù)隔離級(jí)別(5分)-級(jí)別:讀未提交、讀已提交、可重復(fù)讀、串行化。-缺陷:臟讀(低級(jí)別可能導(dǎo)致)。23.消息隊(duì)列重復(fù)消費(fèi)(5分)-原因:消息丟失或Broker重復(fù)推送。-解決:冪等性設(shè)計(jì)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論