版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
從基礎(chǔ)到高級:計算機(jī)編程面試題集2026基礎(chǔ)編程題(共5題,每題10分,總分50分)1.C語言基礎(chǔ)題(10分)題目:編寫一個C語言函數(shù),實(shí)現(xiàn)將一個字符串中的所有小寫字母轉(zhuǎn)換為大寫字母。假設(shè)輸入字符串以'\0'結(jié)尾,且字符串長度不超過100個字符。請不使用任何庫函數(shù)(如`toupper()`),僅通過ASCII碼轉(zhuǎn)換實(shí)現(xiàn)。答案:cvoidtoUpperCase(charstr){if(str==NULL)return;for(inti=0;str[i]!='\0';i++){if(str[i]>='a'&&str[i]<='z'){str[i]=str[i]-'a'+'A';}}}解析:小寫字母的ASCII碼范圍是'a'到'z'(97到122),大寫字母是'A'到'Z'(65到90)。將小寫字母轉(zhuǎn)換為大寫字母,只需將字符的ASCII碼減去'a'的ASCII碼,再加'A'的ASCII碼。例如,'a'(97)-'a'(97)+'A'(65)='A'(65)。函數(shù)遍歷字符串,對每個小寫字母進(jìn)行轉(zhuǎn)換,若字符不是小寫字母,則保持不變。2.Java面向?qū)ο箢}(10分)題目:設(shè)計一個`Employee`類,包含以下屬性:`id`(整數(shù))、`name`(字符串)、`salary`(浮點(diǎn)數(shù))。要求:1.提供無參構(gòu)造器和帶所有屬性參數(shù)的構(gòu)造器。2.實(shí)現(xiàn)`toString()`方法,返回格式為`"Employee{id=1,name='Alice',salary=5000.0}"`。3.編寫一個方法`increaseSalary(doublepercent)`,根據(jù)百分比增加薪水。答案:javapublicclassEmployee{privateintid;privateStringname;privatedoublesalary;//無參構(gòu)造器publicEmployee(){}//帶所有屬性參數(shù)的構(gòu)造器publicEmployee(intid,Stringname,doublesalary){this.id=id;=name;this.salary=salary;}//Getter和Setter省略@OverridepublicStringtoString(){return"Employee{id="+id+",name='"+name+"',salary="+salary+'}';}publicvoidincreaseSalary(doublepercent){salary+=salary(percent/100);}}解析:面向?qū)ο笤O(shè)計要求封裝屬性,通過構(gòu)造器初始化對象。`toString()`方法需遵循格式化輸出,使用`%`轉(zhuǎn)義符和`'`包圍字符串。`increaseSalary()`方法通過百分比計算薪水增長值并累加到當(dāng)前薪水。3.Python數(shù)據(jù)結(jié)構(gòu)題(10分)題目:給定一個無重復(fù)元素的列表`nums`,編寫一個函數(shù),返回所有可能的子集(包括空集和原列表)。要求:不使用遞歸,僅使用迭代實(shí)現(xiàn)。答案:pythondefsubsets(nums):result=[[]]fornuminnums:result+=[curr+[num]forcurrinresult]returnresult解析:迭代法通過動態(tài)擴(kuò)展已有子集生成新子集。初始時,`result`包含一個空子集。遍歷每個數(shù)字時,將當(dāng)前數(shù)字添加到所有已有子集的末尾,生成新的子集并追加到`result`。例如,輸入`[1,2]`,先有`[[]]`,加入1生成`[[],[1]]`,再加入2生成`[[],[1],[2],[1,2]]`。4.JavaScript算法題(10分)題目:給定一個包含整數(shù)的數(shù)組,返回所有和為`target`的兩個數(shù)的索引。假設(shè)每個輸入都有唯一解,且不能重復(fù)使用同一個元素。例如,輸入`[2,7,11,15]`,`target=9`,輸出`[0,1]`(對應(yīng)`2+7=9`)。答案:javascriptfunctiontwoSum(nums,target){constmap=newMap();for(leti=0;i<nums.length;i++){constcomplement=target-nums[i];if(map.has(complement)){return[map.get(complement),i];}map.set(nums[i],i);}return[];}解析:哈希表法通過一次遍歷解決。創(chuàng)建一個映射`map`,鍵為數(shù)字,值為索引。遍歷時,計算`complement=target-nums[i]`,若`complement`已存在于`map`中,則返回`[map.get(complement),i]`。否則,將當(dāng)前數(shù)字及其索引存入`map`。5.SQL查詢題(10分)題目:有三張表:-`Employees`(`id`,`name`,`department_id`)-`Departments`(`id`,`department_name`)-`Salaries`(`employee_id`,`salary`)編寫SQL查詢,返回每個部門的平均薪水(只顯示有員工薪水的部門)。答案:sqlSELECTd.department_name,AVG(s.salary)ASaverage_salaryFROMEmployeeseJOINDepartmentsdONe.department_id=d.idJOINSalariessONe.id=s.employee_idGROUPBYd.department_name;解析:多表連接查詢:1.`JOIN``Employees`和`Departments`通過`department_id`關(guān)聯(lián)部門名稱。2.`JOIN``Salaries`通過`employee_id`關(guān)聯(lián)薪水信息。3.`GROUPBY`按部門名稱分組,`AVG(s.salary)`計算平均薪水。僅顯示有員工薪水的部門,因?yàn)閮?nèi)連接會過濾掉無薪水記錄的員工。中級編程題(共5題,每題15分,總分75分)1.Java多線程題(15分)題目:編寫一個`BankAccount`類,包含屬性`balance`(余額)。要求:1.提供`deposit(doubleamount)`和`withdraw(doubleamount)`方法,確保線程安全。2.兩個方法必須互斥執(zhí)行,即同時只能有一個線程操作余額。答案:javapublicclassBankAccount{privatedoublebalance;privatefinalObjectlock=newObject();publicBankAccount(doubleinitialBalance){this.balance=initialBalance;}publicvoiddeposit(doubleamount){synchronized(lock){balance+=amount;}}publicvoidwithdraw(doubleamount){synchronized(lock){balance-=amount;}}publicdoublegetBalance(){synchronized(lock){returnbalance;}}}解析:使用`synchronized`關(guān)鍵字鎖定`lock`對象,確保`deposit`和`withdraw`互斥執(zhí)行。余額操作需在同步塊內(nèi)完成,防止并發(fā)修改導(dǎo)致數(shù)據(jù)不一致。2.Python算法題(15分)題目:給定一個字符串`s`,判斷其是否為有效括號字符串(只包含`'('`,`')'`,`'{'`,`'}'`,`'['`,`']'`,且括號匹配正確)。例如,`"()[]{}"`為有效,`"(]"`為無效。答案:pythondefisValid(s):stack=[]mapping={')':'(','}':'{',']':'['}forcharins:ifcharinmapping:top_element=stack.pop()ifstackelse'#'ifmapping[char]!=top_element:returnFalseelse:stack.append(char)returnnotstack解析:棧結(jié)構(gòu)應(yīng)用:1.遇到開括號`'('`,`'{'`,`'['`,壓入棧。2.遇到閉括號,檢查棧頂是否為對應(yīng)開括號,若不匹配或棧為空(如`")("`),返回`False`。3.遍歷結(jié)束后,棧應(yīng)為空(所有括號匹配)。3.C++內(nèi)存管理題(15分)題目:編寫一個`String`類,實(shí)現(xiàn)基本功能:構(gòu)造、析構(gòu)、拷貝構(gòu)造、賦值運(yùn)算符。要求:1.析構(gòu)函數(shù)釋放動態(tài)分配的內(nèi)存。2.拷貝構(gòu)造和賦值運(yùn)算符需防止深拷貝問題。答案:cppinclude<cstring>classString{private:chardata;size_tlength;public://構(gòu)造函數(shù)String(constcharstr=""){length=strlen(str);data=newchar[length+1];strcpy(data,str);}//析構(gòu)函數(shù)~String(){delete[]data;}//拷貝構(gòu)造String(constString&other){length=other.length;data=newchar[length+1];strcpy(data,other.data);}//賦值運(yùn)算符String&operator=(constString&other){if(this!=&other){delete[]data;length=other.length;data=newchar[length+1];strcpy(data,other.data);}returnthis;}};解析:深拷貝問題:拷貝構(gòu)造和賦值運(yùn)算符需獨(dú)立分配內(nèi)存并復(fù)制內(nèi)容,避免共享原始內(nèi)存。1.析構(gòu)函數(shù)使用`delete[]`釋放動態(tài)數(shù)組。2.拷貝構(gòu)造和賦值運(yùn)算符先釋放當(dāng)前對象內(nèi)存,再分配新內(nèi)存并復(fù)制。4.JavaScript設(shè)計題(15分)題目:設(shè)計一個LRU(最近最少使用)緩存,支持`get(key)`和`put(key,value)`操作。緩存容量為`capacity`,超出容量時刪除最久未使用項(xiàng)。要求:時間復(fù)雜度O(1)。答案:javascriptclassLRUCache{constructor(capacity){this.capacity=capacity;this.map=newMap();this.head=newNode(0,0);this.tail=newNode(0,0);this.head.next=this.tail;this.tail.prev=this.head;}get(key){if(!this.map.has(key))return-1;constnode=this.map.get(key);this.remove(node);this.append(node);returnnode.value;}put(key,value){if(this.map.has(key)){this.remove(this.map.get(key));}constnode=newNode(key,value);this.map.set(key,node);this.append(node);if(this.map.size>this.capacity){constlru=this.head.next;this.remove(lru);this.map.delete(lru.key);}}append(node){node.prev=this.tail.prev;node.next=this.tail;this.tail.prev.next=node;this.tail.prev=node;}remove(node){node.prev.next=node.next;node.next.prev=node.prev;}}classNode{constructor(key,value){this.key=key;this.value=value;this.prev=null;this.next=null;}}解析:雙向鏈表+哈希表實(shí)現(xiàn):1.哈希表存儲鍵到節(jié)點(diǎn)的映射,O(1)訪問。2.雙向鏈表維護(hù)使用順序,頭為最近使用,尾為最久未使用。3.`get`操作將節(jié)點(diǎn)移至隊尾,`put`操作先刪除舊節(jié)點(diǎn),再添加新節(jié)點(diǎn)至隊尾。若超出容量,刪除隊首節(jié)點(diǎn)。5.SQL優(yōu)化題(15分)題目:查詢所有員工及其直屬上司的姓名。假設(shè)存在表`Employees`(`id`,`name`,`manager_id`,`manager_id`是自己上司的`id`)。要求:上司不存在時顯示`'None'`。答案:sqlSELECTASemployee_name,COALESCE(,'None')ASmanager_nameFROMEmployeese1LEFTJOINEmployeese2ONe1.manager_id=e2.id;解析:左連接查詢:1.`e1`表代表員工,`e2`表代表上司。2.`LEFTJOIN`確保所有員工都被選中,即使上司不存在。3.`COALESCE`函數(shù)將`NULL`上司姓名替換為`'None'`。高級編程題(共5題,每題20分,總分100分)1.Go并發(fā)題(20分)題目:編寫一個Go程序,模擬生產(chǎn)者-消費(fèi)者模型。使用帶緩沖的通道(`chan`)和`sync.WaitGroup`,生產(chǎn)者生成1-100的數(shù)字,消費(fèi)者每秒打印一個數(shù)字,直到所有數(shù)字被處理。要求:無死鎖。答案:gopackagemainimport("fmt""sync""time")funcmain(){numbers:=make(chanint,100)varwgsync.WaitGroupgofunc(){fori:=1;i<=100;i++{numbers<-i}close(numbers)}()gofunc(){fornum:=rangenumbers{wg.Add(1)gofunc(nint){deferwg.Done()fmt.Println(n)time.Sleep(1time.Second)}(num)}}()wg.Wait()}解析:1.帶緩沖的通道`numbers`(容量100)避免生產(chǎn)者阻塞。2.`sync.WaitGroup`等待所有消費(fèi)者完成。3.生產(chǎn)者發(fā)送1-100數(shù)字后關(guān)閉通道,觸發(fā)消費(fèi)者退出循環(huán)。4.每個數(shù)字啟動一個協(xié)程打印,`time.Sleep`模擬處理時間。2.Python設(shè)計題(20分)題目:設(shè)計一個`Singleton`類,確保全局只有一個實(shí)例。要求:支持懶加載(首次調(diào)用時創(chuàng)建實(shí)例)和多線程安全。答案:pythonimportthreadingclassSingleton:_instance=None_lock=threading.Lock()def__new__(cls,args,kwargs):withcls._lock:ifcls._instanceisNone:cls._instance=super(Singleton,cls).__new__(cls)returncls._instancedef__init__(self):ifnothasattr(self,"initialized"):print("Creatinginstance...")self.initialized=True解析:1.使用類屬性`_instance`存儲單例實(shí)例。2.雙重檢查鎖定(`_lock`)確保線程安全。3.`__new__`方法控制實(shí)例創(chuàng)建,`__init__`檢查是否已初始化,實(shí)現(xiàn)懶加載。3.Java設(shè)計模式題(20分)題目:實(shí)現(xiàn)一個簡單的策略模式,定義`Sorter`接口和三個實(shí)現(xiàn)類:`QuickSort`、`MergeSort`、`BubbleSort`??蛻舳藨?yīng)能動態(tài)選擇排序算法。答案:java//Sorter接口publicinterfaceSorter{voidsort(int[]arr);}//QuickSort實(shí)現(xiàn)publicclassQuickSortimplementsSorter{publicvoidsort(int[]arr){quickSort(arr,0,arr.length-1);}privatevoidquickSort(int[]arr,intleft,intright){if(left<right){intpivot=partition(arr,left,right);quickSort(arr,left,pivot-1);quickSort(arr,pivot+1,right);}}privateintpartition(int[]arr,intleft,intright){/省略/}}//MergeSort實(shí)現(xiàn)publicclassMergeSortimplementsSorter{publicvoidsort(int[]arr){/省略/}}//客戶端publicclassSortContext{privateSortersorter;publicSortContext(Sortersorter){this.sorter=sorter;}publicvoidsort(int[]arr){sorter.sort(arr);}}解析:1.`Sorter`接口定義`sort`方法。2.各實(shí)現(xiàn)類封裝具體排序算法。3.`SortContext`客戶端持有一個`Sorter`實(shí)例,動態(tài)切換算法。4.C#異步編程題(20分)題目:編寫一個C#方法,異步讀取文件內(nèi)容,同時統(tǒng)計文件中的單詞數(shù)量。要求:使用`async`/`await`,返回一個包含文件內(nèi)容和單詞數(shù)的元組。答案:csharpusingSystem;usingSystem.IO;usingSystem.Threading.Tasks;publicclassFileProcessor{publicasyncTask<(stringContent,intWordCount)>ProcessFileAsync(stri
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老院心理慰藉制度
- 企業(yè)財務(wù)管理規(guī)范制度
- 2026浙江雷博人力資源開發(fā)有限公司招聘12人(面向分包單位)參考題庫附答案
- 2026湖北省定向浙江大學(xué)選調(diào)生招錄備考題庫附答案
- 2026甘肅省西北民族大學(xué)專任教師招聘50人備考題庫附答案
- 2026福建武夷交通運(yùn)輸股份有限公司建陽分公司招聘客運(yùn)駕駛員參考題庫附答案
- 2026福建福州新區(qū)(長樂區(qū))事業(yè)單位招聘青年人才12人備考題庫附答案
- 2026遼寧中國醫(yī)科大學(xué)附屬醫(yī)院招聘高層次和急需緊缺人才327人(第一批)備考題庫附答案
- 2026重慶巴岳保安服務(wù)有限公司招聘1人備考題庫附答案
- 2026順義區(qū)大孫各莊社區(qū)衛(wèi)生服務(wù)中心第一次編外招聘4人考試備考題庫附答案
- 海洋電子信息產(chǎn)業(yè)現(xiàn)狀與發(fā)展路徑研究
- 草原管護(hù)考試題及答案
- Unit 8 Let's Communicate!Section B 1a-1e 課件 2025-2026學(xué)年人教版八年級英語上冊
- 2026年四川單招職高語文基礎(chǔ)知識練習(xí)與考點(diǎn)分析含答案
- 2026年交管12123駕照學(xué)法減分題庫100道【基礎(chǔ)題】
- 寒假女生安全教育課件
- 2026年孝昌縣供水有限公司公開招聘正式員工備考題庫及1套參考答案詳解
- 2024-2025學(xué)年蘇教版四年級數(shù)學(xué)上冊 第二單元專練:經(jīng)濟(jì)問題和促銷問題(買幾送幾)原卷版+解析
- 6.2 中位數(shù)與箱線圖 教學(xué)設(shè)計(2課時)2025-2026學(xué)年數(shù)學(xué)北師大版八年級上冊
- 2024年常州工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案解析
- 呼吸內(nèi)科主任談學(xué)科建設(shè)
評論
0/150
提交評論