1.1 谈一谈软件工程的基本原理
口语直答:
软件工程基本原理,说白了就是:别把写软件当成一个人闷头敲代码。它得按工程化办法来管。比如分阶段、做评审、控版本、控变更、选合适技术、结果能检查、人别堆太多、做完还要复盘改进。核心就一句话:让成本、进度、质量别失控。
追问 1:为啥要分阶段和阶段评审?
因为软件太复杂,一口气干完很容易翻车。分成需求、设计、编码、测试、维护这些阶段,能把大问题拆小。每个阶段评审一下,错误早发现,返工就少,也好控制进度。
追问 2:严格产品控制和配置管理是啥意思?
就是版本别乱、变更别乱、文档别乱。谁改了什么、为什么改、影响哪些地方,都要能查。不然多人协作时,很容易“你改一处,我改一处,最后全对不上”。
追问 3:现在都敏捷了,这些原理还要吗?
还要。敏捷只是把周期缩短、迭代变快,不是不要需求管理、测试、评审、版本控制。需求稳定就用阶段式,需求变化快就用敏捷,但底层工程原理还在。
完善后的口语答案:
如果面试官问,你可以这么说:软件工程基本原理,就是用工程办法管软件的全生命周期。需求、设计、编码、测试、维护分阶段来,每阶段有评审;版本、变更、文档要管住;技术选合适的;结果要能检查;人别堆太多;做完要持续改进。核心就是成本、进度、质量三者平衡。敏捷也一样,只是迭代快,这些事还得做。
1.2 谈一谈自主访问控制 DAC 的基本思想
口语直答:
DAC 就是“资源归谁,谁说了算”。比如我的文件,我想给张三读、给李四写,我就能授权。它很灵活,但安全性比较依赖人,容易权限给大了、忘了收、到处扩散。
追问 1:DAC 和 MAC 有啥区别?
DAC 是自主的,资源拥有者可以决定给谁权限。MAC 是强制的,系统按安全标签和规则统一控制,用户不能随便改。DAC 灵活但弱一点,MAC 严格但管理麻烦,实际常配合用。
追问 2:DAC 一般怎么实现?
常见有访问控制矩阵、访问控制列表 ACL、能力表。操作系统里的文件权限、共享权限、用户组权限,很多都是 DAC 思想。
追问 3:DAC 的主要风险和怎么改进?
风险就是权限过大、权限扩散、配置错了、账号被滥用、离职账号没回收。改进办法:最小权限、定期审计、权限回收、按角色分组,重要系统再加 RBAC 或 MAC。
完善后的口语答案:
DAC 的核心就是“主人自主授权”。优点是灵活、好用,适合一般企业环境。缺点是安全边界靠人和配置,所以得配审计、最小权限和强制访问控制来补。面试时说:DAC 不是不好,是不能单靠它。
1.3 何为网络适配器?其作用是什么?
1.3.1 回答
口语直答:
网络适配器就是网卡,也叫 NIC。你可以把它理解成电脑连网络的一扇门。它负责把电脑的数据发出去、把网络的数据收回来,还带着 MAC 地址,做帧的封装、解封装、差错检测,跟 CPU 通过中断、DMA 打交道。
追问 1:网卡和猫、交换机、路由器有啥区别?
网卡在电脑里面,负责电脑接入网络。猫是调制解调器,负责信号转换。交换机在局域网里转发数据。路由器负责不同网络之间互联。各干各的活。
追问 2:有线网卡、无线网卡、虚拟网卡有啥区别?
有线网卡接网线,稳定高速。无线网卡接 Wi-Fi,灵活但受信号影响。虚拟网卡是软件模拟出来的,比如 lo、VMware、Docker 里的 veth,用来本机通信、虚拟化和容器网络。
追问 3:网卡出问题怎么排查?
先看系统认没认到,驱动正不正常,网卡启没启用。再看 IP、网关、DNS 对不对。然后看网线、信号、交换机口。命令可以用 ipconfig、ifconfig、ip a、ping、tracert,实在不行抓包。
完善后的口语答案:
网络适配器就是网卡,是电脑和网络之间的接口。它管收发数据帧、MAC 地址、差错检测,还跟 CPU 交互。有线、无线、虚拟网卡都是这个角色。排查问题时,从“认没认到、驱没驱动、启没启用、IP 对不对、线路通不通”一步步看。
1.3.2 附:通过 Python 获取网络适配器信息
口语说明:
用 Python 查网卡,最省事的是 psutil。它能列出网卡名、IP、子网掩码、MAC、状态、速率。想只看某张卡,就按名字过滤。
先装:
bash
pip install psutil
代码:
python
import socket
import psutil
def show_adapters():
addrs = psutil.net_if_addrs()
stats = psutil.net_if_stats()
for name, addr_list in addrs.items():
st = stats.get(name)
status = "开着" if st and st.isup else "没开/断了"
speed = f"{st.speed} Mbps" if st and st.speed > 0 else "速度未知"
print(f"\n网卡:{name}")
print(f" 状态:{status}")
print(f" 速率:{speed}")
for addr in addr_list:
if addr.family == socket.AF_INET:
print(f" IPv4:{addr.address}")
print(f" 子网掩码:{addr.netmask}")
elif addr.family == socket.AF_INET6:
print(f" IPv6:{addr.address}")
elif addr.family == psutil.AF_LINK:
print(f" MAC:{addr.address}")
if __name__ == "__main__":
show_adapters()
标准库简单版:
python
import socket
import uuid
hostname = socket.gethostname()
print("主机名:", hostname)
print("IP 信息:", socket.gethostbyname_ex(hostname))
mac_int = uuid.getnode()
mac = ":".join(f"{(mac_int >> i) & 0xff:02x}" for i in range(40, -1, -8))
print("MAC:", mac)
追问 1:为啥推荐 psutil?
因为它跨平台,Windows、Linux、macOS 都能用,拿网卡地址、状态、速率比较方便,不用自己写一堆系统命令解析。
追问 2:只想看某一张网卡怎么办?
可以加判断,比如 if name == "WLAN": 或 if name == "eth0":。也可以直接取 psutil.net_if_addrs()["WLAN"]。
追问 3:这些信息能干嘛?
排查 IP 冲突、确认 MAC、做资产盘点、监控网络状态、写自动化脚本都用得上。
完善后的口语答案:
用 Python 查网卡,最省事就是 psutil。它能列出网卡名、IP、掩码、MAC、状态、速率。想只看某张卡就按名字过滤。标准库也能拿主机名、IP、MAC,但信息少一些。这个脚本适合做网络排查和资产盘点的小工具。
1.4 谈一谈摩尔定律的主要内容
口语直答:
摩尔定律就是说,芯片上能塞的晶体管,大概每 18 到 24 个月翻一番。结果就是性能上去了,成本下来了。它不是物理定律,是经验规律,也是整个 IT 产业的节奏。
追问 1:摩尔定律的准确说法是啥?
最早 1965 年摩尔说大约每年翻番,1975 年修正成大约每两年翻番。业界常说的是 18 到 24 个月翻一番,强调集成度、性能和成本的变化趋势。
追问 2:摩尔定律会失效吗?
会放缓。制程越来越接近物理极限,有量子隧穿、功耗墙、散热、成本问题。现在靠 3D 堆叠、Chiplet、异构集成、新材料、专用加速器继续往前推。
追问 3:摩尔定律对软件有啥影响?
以前软件经常靠硬件变快,现在不能老这么想。更得关注性能优化、并行计算、能效、云原生、算法效率、专用硬件加速。不然硬件红利没那么好吃了。
完善后的口语答案:
摩尔定律就是芯片晶体管大约一年半到两年翻一倍,性能涨、成本降。它不是物理定律,是经验规律。现在制程难了,速度慢了,但靠 3D 堆叠、Chiplet、异构集成接着拱。对软件来说,别老等硬件变快,得优化算法、并行、能效和架构。
1.5 谈一谈虚拟局域网的优点,结构化开发的优缺点
1.5.1 虚拟局域网 VLAN 的优点
口语直答:
VLAN 就是在交换机上逻辑分网,不是按办公室位置分,而是按部门、项目、安全等级分。优点就是:隔离广播、提高性能、增强安全、灵活分组、简化管理、还省钱。
追问 1:VLAN 怎么划分?
可以按端口、MAC 地址、协议、子网、策略来分。跨交换机常用 Trunk 和 802.1Q 标签。
追问 2:VLAN 的优点具体体现在哪?
广播少了,广播风暴不容易扩散;不同 VLAN 默认不能直接通信,安全隔离好;按部门或项目分组,不受物理位置限制;搬家、调整、上 QoS 策略都方便。
追问 3:VLAN 有啥局限?
跨 VLAN 通信要三层路由;配置不一致容易出故障;Trunk 和本征 VLAN 配不好有 VLAN 跳变风险;大规模 VLAN 管理也复杂。
完善后的口语答案:
VLAN 的核心价值就是“逻辑隔离、灵活管理、安全和性能兼顾”。它把一个大局域网切成多个小网,广播少了,安全好了,人搬来搬去也不用重新布线。但它不是万能的,跨 VLAN 要路由,配置要规范,不然也容易出问题。
1.5.2 结构化开发的优缺点
口语直答:
结构化开发就是自顶向下、逐步求精、模块化、结构化编程,还有文档规范。优点:阶段清楚、质量可控、好懂好维护。缺点:需求一变就难受,周期长,文档多,用户反馈晚。
追问 1:结构化开发的核心工具是啥?
数据流图 DFD、数据字典、判定表、判定树、ER 图、结构图这些。它强调功能分解和过程抽象。
追问 2:结构化和面向对象有啥区别?
结构化是以功能和过程为中心。面向对象是以对象、类、封装、继承、多态为中心。复杂、易变、交互强的系统,面向对象更合适。
追问 3:结构化开发适合啥场景?
适合需求稳定、数据处理明确、流程固定的项目,比如传统银行、政务、嵌入式控制。需求变化快,就上敏捷和面向对象,或者混着用。
完善后的口语答案:
结构化开发就是自顶向下、一步步拆、模块化、流程清楚、文档规范。好处是质量可控、好懂好维护。坏处是需求一变就难受,周期长,文档多,用户看到东西晚。所以需求稳的适合,需求变得快的就上敏捷/OOP,或者混着用。
1.6 开放类题目:你觉得你的优势在哪里?
口语直答:
我的优势不是“我很努力”这种空话,而是岗位需要的能力、我能拿出的成果、还有我跟别人不一样的地方。比如学习快、能结构化解决问题、落地执行强、沟通协作还行。
追问 1:怎么定义“优势”?
优势 = 目标岗位需要的能力 + 可证明的成果 + 你跟别人不同的地方。比如学习能力、沟通协作、工程实践、抗压能力、业务理解,都算。
追问 2:怎么证明你的优势?
用 STAR 法则:当时啥情况、任务是什么、我做了什么、结果怎么样。最好有数字。比如“接口响应从 2 秒降到 300 毫秒”“独立完成某模块并上线”“竞赛获奖”“文档被团队复用”。
追问 3:怎么把优势转成团队价值,还持续提升?
把优势用在团队痛点上,比如提升效率、降低故障、改善协作。然后定期复盘,听反馈,补短板。形成“优势—成果—迭代”的循环。
完善后的口语答案:
面试问优势,别只说“我努力”。要说岗位需要啥,我有啥,能拿啥证明。比如我学习快、能结构化解决问题、落地执行强。用 STAR 讲:当时啥情况、任务啥、我做了啥、结果咋样,最好有数字。然后说我能帮团队解决啥问题,最后说我知道自己短板,会继续补。
如果是我作为 AI 助手,我会说:我的优势是信息整合、结构化表达、快速给代码示例;短板是没真实项目经验,所以更适合当辅助工具。