版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年高新科技公司工程师面试题及答案一、编程语言与数据结构(20分,共4题)题目1(5分):请用Python实现一个函数,输入一个字符串,返回该字符串中出现频率最高的字符及其出现次数。如果多个字符出现次数相同,返回所有这些字符。pythondeffind_top_frequent_chars(s):fromcollectionsimportCountercounter=Counter(s)max_freq=max(counter.values())return[(char,freq)forchar,freqincounter.items()iffreq==max_freq]示例print(find_top_frequent_chars("helloworld"))题目2(5分):请解释什么是二叉搜索树(BST),并实现一个BST的插入操作。pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightclassBST:def__init__(self):self.root=Nonedefinsert(self,val):ifself.rootisNone:self.root=TreeNode(val)else:self._insert(self.root,val)def_insert(self,node,val):ifval<node.val:ifnode.leftisNone:node.left=TreeNode(val)else:self._insert(node.left,val)else:ifnode.rightisNone:node.right=TreeNode(val)else:self._insert(node.right,val)示例bst=BST()bst.insert(5)bst.insert(3)bst.insert(7)bst.insert(2)bst.insert(4)bst.insert(6)bst.insert(8)题目3(5分):请解释什么是动态规划,并给出一个动态规划的经典问题及其解法。python斐波那契数列问题deffibonacci(n):ifn<=1:returnndp=[0](n+1)dp[1]=1foriinrange(2,n+1):dp[i]=dp[i-1]+dp[i-2]returndp[n]示例print(fibonacci(10))#输出55题目4(5分):请解释什么是图的深度优先搜索(DFS),并给出一个DFS的Python实现。pythondefdfs(graph,start,visited=None):ifvisitedisNone:visited=set()visited.add(start)print(start,end='')forneighboringraph[start]:ifneighbornotinvisited:dfs(graph,neighbor,visited)returnvisited示例graph={'A':['B','C'],'B':['A','D','E'],'C':['A','F'],'D':['B'],'E':['B','F'],'F':['C','E']}dfs(graph,'A')二、算法与设计(30分,共6题)题目5(5分):请解释什么是贪心算法,并给出一个贪心算法的经典问题及其解法。python背包问题(贪心解法)defknapsack(values,weights,capacity):items=sorted(zip(values,weights),key=lambdax:x[0]/x[1],reverse=True)total_value=0remaining_capacity=capacityforvalue,weightinitems:ifweight<=remaining_capacity:total_value+=valueremaining_capacity-=weightelse:fraction=remaining_capacity/weighttotal_value+=valuefractionbreakreturntotal_value示例values=[60,100,120]weights=[10,20,30]capacity=50print(knapsack(values,weights,capacity))#输出240.0题目6(5分):请解释什么是分治算法,并给出一个分治算法的经典问题及其解法。python快速排序(分治算法)defquicksort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquicksort(left)+middle+quicksort(right)示例print(quicksort([3,6,8,10,1,2,1]))题目7(5分):请设计一个LRU(最近最少使用)缓存,要求实现get和put操作。pythonclassLRUCache:def__init__(self,capacity):self.capacity=capacityself.cache={}self.order=[]defget(self,key):ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key,value):ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest=self.order.pop(0)delself.cache[oldest]self.cache[key]=valueself.order.append(key)示例lru=LRUCache(2)lru.put(1,1)lru.put(2,2)print(lru.get(1))#返回1lru.put(3,3)#去除键2print(lru.get(2))#返回-1(未找到)题目8(5分):请设计一个简单的表达式求值器,支持加减乘除。pythondefevaluate_expression(expr):defparse(tokens):values=[]ops=[]i=0whilei<len(tokens):iftokens[i].isdigit():num=0whilei<len(tokens)andtokens[i].isdigit():num=num10+int(tokens[i])i+=1values.append(num)i-=1eliftokens[i]in"+-/":while(opsandops[-1]in"/"and(tokens[i]in"+-"or(tokens[i]in"-"andops[-1]=="")or(tokens[i]in"-/"andops[-1]=="/"))):values.append(apply_op(values.pop(),values.pop(),ops.pop()))ops.append(tokens[i])i+=1whileops:values.append(apply_op(values.pop(),values.pop(),ops.pop()))returnvalues[0]defapply_op(b,a,op):ifop=='+':returna+bifop=='-':returna-bifop=='':returnabifop=='/':returna/btokens=expr.replace('','')returnparse(tokens.split())示例print(evaluate_expression("3+52-8/4"))#输出9.0题目9(5分):请设计一个简单的Trie(前缀树),支持插入和搜索操作。pythonclassTrieNode:def__init__(self):self.children={}self.is_end=FalseclassTrie:def__init__(self):self.root=TrieNode()definsert(self,word):node=self.rootforcharinword:ifcharnotinnode.children:node.children[char]=TrieNode()node=node.children[char]node.is_end=Truedefsearch(self,word):node=self.rootforcharinword:ifcharnotinnode.children:returnFalsenode=node.children[char]returnnode.is_enddefstarts_with(self,prefix):node=self.rootforcharinprefix:ifcharnotinnode.children:returnFalsenode=node.children[char]returnTrue示例trie=Trie()trie.insert("apple")trie.insert("app")print(trie.search("apple"))#返回Trueprint(trie.search("app"))#返回Trueprint(trie.search("ap"))#返回Falseprint(trie.starts_with("app"))#返回True题目10(5分):请设计一个简单的线程安全计数器,支持增加和获取当前值操作。pythonfromthreadingimportLockclassThreadSafeCounter:def__init__(self):self.value=0self.lock=Lock()defincrement(self):withself.lock:self.value+=1defget(self):withself.lock:returnself.value示例counter=ThreadSafeCounter()counter.increment()counter.increment()print(counter.get())#输出2三、系统设计(40分,共4题)题目11(10分):请设计一个简单的URL短链接服务,包括生成短链接和解析短链接的功能。pythonimporthashlibimportrandomclassShortLinkService:def__init__(self):self.base_url="http://short.url/"self.alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"self.url_map={}def_hash_url(self,long_url):hash_object=hashlib.md5(long_url.encode())returnhash_object.hexdigest()def_generate_short_code(self):code=''.join(random.choice(self.alphabet)for_inrange(6))returncodedefcreate_short_link(self,long_url):hash_code=self._hash_url(long_url)short_code=self._generate_short_code()whileshort_codeinself.url_map:short_code=self._generate_short_code()self.url_map[short_code]=long_urlreturnf"{self.base_url}{short_code}"defget_long_link(self,short_code):returnself.url_map.get(short_code,None)示例service=ShortLinkService()long_url="/very/long/url"short_url=service.create_short_link(long_url)print(short_url)print(service.get_long_link(short_url.split('/')[-1]))#返回原始URL题目12(10分):请设计一个简单的消息队列系统,支持生产者和消费者模式。pythonfromcollectionsimportdequefromthreadingimportLock,ThreadimporttimeclassMessageQueue:def__init__(self,capacity=100):self.queue=deque()self.capacity=capacityself.lock=Lock()self.not_empty=Noneself.not_full=Nonedefproduce(self,message):withself.lock:whilelen(self.queue)>=self.capacity:self.not_full.wait()self.queue.append(message)self.not_empty.notify()print(f"Produced:{message}")defconsume(self):withself.lock:whilenotself.queue:self.not_empty.wait()message=self.queue.popleft()self.not_full.notify()print(f"Consumed:{message}")returnmessagedefstart(self,num_producers,num_consumers):self.not_empty=threading.Condition(self.lock)self.not_full=threading.Condition(self.lock)producers=[Thread(target=self._produce)for_inrange(num_producers)]consumers=[Thread(target=self._consume)for_inrange(num_consumers)]forpinproducers:p.start()forcinconsumers:c.start()forpinproducers:p.join()forcinconsumers:c.join()def_produce(self):foriinrange(20):time.sleep(random.random())duce(f"Message{i}")def_consume(self):for_inrange(20):time.sleep(random.random())self.consume()示例queue=MessageQueue(10)queue.start(3,2)题目13(10分):请设计一个简单的分布式缓存系统,支持缓存设置和获取操作。pythonimportrandomimporttimefromthreadingimportLockclassDistributedCache:def__init__(self,nodes):self.nodes=nodesself.cache={}self.lock=Lock()def_get_node(self,key):hash_code=hash(key)%len(self.nodes)returnself.nodes[hash_code]defset(self,key,value,ttl=None):node=self._get_node(key)withself.lock:ifttl:self.cache[key]={'value':value,'expiry':time.time()+ttl}else:self.cache[key]={'value':value,'expiry':None}defget(self,key):node=self._get_node(key)withself.lock:entry=self.cache.get(key)ifentry:ifentry['expiry']isNoneorentry['expiry']>time.time():returnentry['value']else:delself.cache[key]returnNonereturnNone示例nodes=['node1','node2','node3']cache=DistributedCache(nodes)cache.set('key1','value1',ttl=10)print(cache.get('key1'))#输出value1time.sleep(11)print(cache.get('key1'))#输出None题目14(10分):请设计一个简单的秒杀系统,支持用户下单和库存更新操作。pythonfromthreadingimportLock,TimerimporttimeimportrandomclassSecKillSystem:def__init__(self,total_stock):self.total_stock=total_stockself.stock=total_stockself.lock=Lock()self.order_lock=Lock()self.orders={}self.start_time=time.time()self.end_time=self.start_time+10#10秒秒杀def_check_time(self):iftime.time()>self.end_time:print("秒杀结束")returnTruereturnFalsedefparticipate(self,user_id,quantity):ifself._check_time():returnFalsewithself.lock:ifself.stock<quantity:returnFalseself.stock-=quantityreturnTruedefconfirm_order(self,user_id,quantity):withself.order_lock:ifuser_idnotinself.orders:self.orders[user_id]=0self.orders[user_id]+=quantityprint(f"用户{user_id}订单确认,数量{quantity}")defrun(self):deftick():ifself._check_time():returnTimer(1,tick).start()Timer(1,tick).start()deffinish(self):withself.lock:print(f"秒杀结束,剩余库存{self.stock}")withself.order_lock:foruser_id,quantityinself.orders.items():print(f"用户{user_id}最终订单数量{quantity}")示例sec_kill=SecKillSystem(100)sec_kill.run()users=[1,2,3,4,5]foruserinusers:quantity=random.randint(1,5)ifsec_kill.participate(user,quantity):sec_kill.confirm_order(user,quantity)sec_kill.finish()四、数据库与系统运维(30分,共4题)题目15(10分):请解释什么是数据库索引,并说明其在查询优化中的作用。请给出一个简单的SQL查询优化示例。sql--原始查询SELECTFROMordersWHEREcustomer_id=123ANDorder_date>'2025-01-01';--优化后的查询--1.在customer_id和order_date上创建复合索引CREATEINDEXidx_customer_dateONorders(customer_id,order_date);--2.优化后的查询利用索引SELECTFROMordersWHEREcustomer_id=123ANDorder_date>'2025-01-01';题目16(10分):请解释什么是数据库事务,并说明其ACID特性。请给出一个简单的数据库事务示例。sql--示例:银行转账事务BEGINTRANSACTION;--1.从账户A扣除金额UPDATEaccountsSETbalance=balance-100WHEREaccount_id=1;--2.检查账户A余额是否足够IF(SELECTbalanceFROMaccountsWHEREaccount_id=1)>=100BEGIN--3.向账户B添加金额UPDATEaccounts
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于开发区公务员考试试题及答案
- 2026年云南省丽江地区单招职业倾向性测试模拟测试卷附答案
- 2026年交管12123驾照学法减分题库附参考答案【能力提升】
- 2026年政府采购培训试题100道带答案(b卷)
- 2025江苏扬州市明月湖运营管理有限公司招聘专业人员8人备考题库附答案
- 2026年广西国际商务职业技术学院单招(计算机)测试模拟题库附答案
- 《公共基础知识》练习题库含答案
- 公务员蜡烛考试试题及答案
- 2025 年大学园艺学(园艺测试)试题及答案
- 2025 年大学油气储运工程(油气储存技术)试题及答案
- 国开(内蒙古)2025年《信息时代的生产技术》形考作业1-3终考答案
- 排烟风管改造施工方案
- 2025村干部考公务员试题及答案
- 2025年大学生职业生涯规划与就业指导学习通测试及答案
- (人教A版)选择性必修一高二数学上册 期末考试押题卷01(考试范围:选择性必修第一册、数列)(原卷版)
- 文艺演出与政府合同协议
- 物业法律法规知识培训课件
- 地质灾害危险性区域评估服务 方案投标文件(技术标)
- 口腔飞沫气溶胶传播与控制研究
- 爱情树混声四部合唱简谱
- DBJ04-T306-2025 建筑基坑工程技术标准
评论
0/150
提交评论