【面试题】网易互娱(游戏)2021校园招聘在线笔试 - 服务端开发工程师[文件系统]

zz/2024/7/17 22:07:35

昨晚做网易互娱的笔试,比较尴尬的是只能用C/C++/Java,而本人对C/C++的了解仅限于大一的课程设计(而且一年多没用过C写代码了),Java差不多看得懂代码但是没有系统的学过。无奈最后只能用python写了两道题,再用C照着python的语法写了一遍(然而提交没通过,基本上是凉凉了)

第二题:

题目其实就是模拟一个文件系统的简单实现,对文件系统机制有过了解的话还是很容易看懂题目的。

首先定义一个列表 file[] 模拟文件流,定义一个列表hui_shou[]记录被回收的文件描述符 ,定义一个全局变量cj表示下一个文件描述符

open操作,相当于往文件流中增加一个文件描述符,可以用一个字典来表示{"文件描述符" : "文件名(文件地址)"},返回值为新增字典的文件描述符。注意,如果暂无文件描述符被回收(即当前无文件关闭,hui_shou=[]),那么增加的文件描述符为cj,否则先将已被回收的文件描述符重新利用

(用字典表示是因为字典的key唯一而value不唯一,方便后续dup、dup2操作)

dup操作,相当于有一个新用户打开一个已经被打开且尚未关闭的文件,还是向文件中添加一个字典,返回值为新字典的文件描述符

dup2操作,操作基本同上,只是强制设定了新字典的文件描述符,不用系统自动分配

query操作,通过文件描述符返回对应的文件名(文件地址)

close操作,关闭文件,将对应的字典从文件流中移除,并将被移除的文件描述符添加至hui_shou[]

python代码如下:

t = int(input())
data = []
for hahaha in range(t):                             c_j = []n = int(input())for i in range(n):c_j.append(list(input().split(" ",1)))      #只切割一次,方便后续eval函数调用data.append(c_j)def open(filename):global cj                                       #待加入的文件描述符global file                                     #文件流global hui_shou                                 #回收流if hui_shou:n = hui_shou.pop()                          #弹出最近被回收的文件描述符file['{}'.format(n)] = filename             #加入文件流print(n)else:file['{}'.format(cj)] = filename            cj += 1print(cj-1)def dup(num):global fileglobal cjglobal hui_shouif hui_shou:n = hui_shou.pop()file['{}'.format(n)] = file['{}'.format(int(num[0]))]print(n)else:file['{}'.format(cj)] = file['{}'.format(int(num[0]))]cj += 1print(cj - 1)def dup2(num):n = num[0].split(" ")                           #由于有两个参数,故还需进行一次切割global filefile["{}".format(int(n[1]))] =file["{}".format(int(n[0]))]  def close(num):global fileglobal hui_shoudel file["{}".format(int(num[0]))]hui_shou.append(int(num[0]))def query(num):global fileprint(file["{}".format(int(num[0]))][0])for j in range(t):cj = 0hui_shou = []file = {}for i in range(len(data[j])):eval("{}".format(data[j][i][0]))(data[j][i][1:])  #通过字符串来调用函数#以下是测试样例
# 2
# 10
# open libc.so
# open libm.so
# open libdl.so
# dup 2
# dup2 0 2
# close 0
# query 1
# query 2
# query 3
# open log.txt
# 10
# open output.txt
# dup2 0 1000000
# close 0
# open output2.txt
# dup2 0 100000
# close 0
# open 1.txt
# dup 100000
# query 1
# query 0

由于博主是拿python实现的,用C语言重写时又没写出来,故没能进入系统测评,只能拿题目中给出的样例进行测评(样例通过无误),故有两个地方无法确定写法:

1. 需不需要实现文件描述符自动回收重用机制【题中样例并不涉及自动重用被回收的文件描述符,dup2是手动重用】(本人代码中已实现自动重用)

2. 回收流是采用的队列还是栈【先进先出还是后进先出】(本人代码中是利用栈实现,如需队列实现可以考虑 “出入栈”)

 

第三、四题太长了没来得及截图,第四题也没来得及写。

第三题是关于神经网络的,第四题好像与地球有关(经纬度?!公转自转?!)

如果哪位老哥有后面三题(有第2、3、4题的测试用例更好)且不吝分享的话可以私我一下,谢谢啦~


http://www.ngui.cc/zz/2700276.html

相关文章

Python中构造方法和初始化方法

原文链接:https://blog.csdn.net/qq_19707521/article/details/79359858 类的实例化 在python中创建一个新式类时,一般都会定义一个 __init__ 方法,用来对类的实例进行初始化。但是 __init__ 方法并不是类的构造方法,类中真正的构…

LocustIO官方文档

写在前面 最近打算学习LocustIO,但是介于英文水平一般,英文文档读起来还是不太顺畅,于是花了两天时间把整个英文文档翻译了一遍,以供学习之用。翻译过程尽量终于原文,但是由于水平有限,难免会有错失遗漏&a…

统一图片尺寸方法

转自:http://www.cnblogs.com/tornadomeet/archive/2012/03/27/2420088.html // change_img_size.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h"//这句头文件一定要放在最上面,否则很容易报错#include "opencv2/imgproc/im…

quartz(六)定时任务的暂停、关闭等操作说明

定时任务的暂停、关闭等操作说明 基于quartz3.0版本总结一些quartz定时任务的暂停、恢复、删除等操作。 定时任务的删除等操作主要是基于JobKey或TriggerKey。 暂停Job: //通过JobName以及JobGroup获得JobKeyJobKey jobKey JobKey.jobKey("aaaa" 1, JOB_GROUP_N…

Redis总结(八)redis单线程还是多线程问题

redis为什么可以支持高并发和它内部的工作模式有不可分割的关系: 绝大部分请求是纯粹的内存操作(非常快速)采用单线程,避免了不必要的上下文切换和竞争条件非阻塞IO - IO多路复用 Redis客户端对服务端的每次调用都经历了发送命令&#xff0…

Struts2详述

提到Struts就不得不提到MVC,因为struts2就是基于MVC设计理念而开发的Java Web应用框架,下面先介绍一下MVC的原理:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写&…

git和maven

很多人应该用过svn cvs之类的代码版本管理工具,git也是其中之一。 svn和git最大的几个区别要点,svn必须要有服务端,网络能连上服务端才能提交和更新,git不需要,每一台装了git的电脑都是服务端,各台电脑之间…

Java中常用的排序算法

分类: 1)插入排序(直接插入排序、希尔排序) 2)交换排序(冒泡排序、快速排序) 3)选择排序(直接选择排序、堆排序) 4)归并排序 5)分配排…

java中的设计模式总

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模…

eclipse导入Maven工程Failure to transfer org.apache.maven:maven-archiver:pom:2.4.1 from http://repo.mave

在创建或则导入maven项目的时候出现如下问题: Failure to transfer org.apache.maven:maven-archiver:pom:2.4.1 from http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval o…