📅  最后修改于: 2023-12-03 15:42:33.564000             🧑  作者: Mango
在高通的面试中,我被要求设计一个软件配置文件,用于在校园内管理不同的网络设备。以下是我在面试中提出的方案:
为了方便管理,我建议使用 XML 作为配置文件的格式。因为 XML 具有清晰的结构,易于解析和编辑,也易于跨平台使用。
下面是我设计的配置文件的基本结构:
<network>
<devices>
<device id="1">
<name>Router</name>
<ip>192.168.0.1</ip>
<port>80</port>
<status>online</status>
</device>
<device id="2">
<name>Switch</name>
<ip>192.168.0.2</ip>
<port>80</port>
<status>offline</status>
</device>
<device id="3">
<name>Server</name>
<ip>192.168.0.3</ip>
<port>80</port>
<status>online</status>
</device>
</devices>
</network>
其中,<devices>
标签下是不同的设备节点,每个设备节点用 <device>
标签表示,每个设备有自己的 id
、name
、ip
、port
、status
等属性。
在校园网络管理的过程中,需要实现以下功能:
对于这些需求,我提出了以下的实现方案:
在配置文件中添加一个新的 <device>
节点即可。其中,设备的 id
属性需要自动生成,不能与已有设备的 id
冲突。实现代码如下:
import xml.etree.ElementTree as ET
tree = ET.parse('config.xml')
root = tree.getroot()
# create new device element
new_device = ET.Element("device")
new_device.set("id", get_new_device_id())
ET.SubElement(new_device, "name").text = "New Device"
ET.SubElement(new_device, "ip").text = "192.168.0.4"
ET.SubElement(new_device, "port").text = "80"
ET.SubElement(new_device, "status").text = "offline"
# append new device element to devices node
devices = root.find("devices")
devices.append(new_device)
# write back to config file
tree.write('config.xml')
在配置文件中查找到对应的 <device>
节点,然后删除即可。实现代码如下:
import xml.etree.ElementTree as ET
tree = ET.parse('config.xml')
root = tree.getroot()
# find device element
device_id = 1
device_to_remove = root.find(f"./devices/device[@id='{device_id}']")
# remove device element
root.find("devices").remove(device_to_remove)
# write back to config file
tree.write('config.xml')
可以通过查找到对应的 <device>
节点,然后修改相应的属性值实现。实现代码如下:
import xml.etree.ElementTree as ET
tree = ET.parse('config.xml')
root = tree.getroot()
# find target device element
device_id = 1
target_device = root.find(f"./devices/device[@id='{device_id}']")
# modify device name
target_device.find("name").text = "New Name"
# modify device IP
target_device.find("ip").text = "192.168.0.5"
# modify device port
target_device.find("port").text = "8080"
# write back to config file
tree.write('config.xml')
可以通过查找设备对应的 <status>
属性获取设备状态。实现代码如下:
import xml.etree.ElementTree as ET
tree = ET.parse('config.xml')
root = tree.getroot()
device_id = 1
# find target device element
target_device = root.find(f"./devices/device[@id='{device_id}']")
# get device status
status = target_device.find("status").text
print("Device status: ", status)
这样,就可以方便地管理和维护校园网络中的各种设备了。