以下面试问题均为网上整理,系面试真题。答案是我根据自己的想法总结写的,不保证正确性,只作为我的一个复习参考!
计算机网络
Q: java 和 php 是在哪一层上面的?就是五层模型里的那些,比如数据链路层之类的。
A: 应用层
Q: 互联网分为哪5层?分别有什么功能?
A: 分为物理层、数据链路层、网络层、传输层、应用层。
- 物理层主要负责在物理线路上传输原始的二进制数据;
- 数据链路层主要负责在通信的实体间建立数据链路连接;
- 网络层主要负责数据的路由与转发;
- 传输层负责向用户提供端到端的通信服务;
- 应用层为应用程序提供了网络接口。
Q: 数据链路层有哪些物理器件,路由器有什么功能,怎样实现该功能
A: 数据链路层设备主要有网卡、交换机。路由器主要是进行数据包的转发和路由选择,可以通过人工配置静态路由、使用RIP协议进行动态路由实现该功能
Q: 数据链路层有什么协议?网络层有什么协议?应用层有什么协议?
A:
- 数据链路层:PPP协议、CSMA/CD
- 网络层协议:IP协议、ICMP协议、IGMP协议、ARP协议
- 应用层协议:HTTP协议、SMTP协议、FTP协议、POP3协议、Telnet协议
(再补充一个)
- 传输层协议:TCP/IP协议、UDP协议
Q: http协议是如何实现的?
A: 利用TCP/IP实现。首先客户端连接到Web服务器,然后发送HTTP请求,其次服务器接受请求并返回HTTP响应,接着释放连接TCP连接,最后客户端浏览器解析HTML内容。
Q: 网络中各个层对应的地址分别是什么?
A: 数据链路层:mac地址、网络层:IP地址、应用层:端口
Q: 信道复用技术都有哪些?
A: 分时复用技术和频分复用技术
- 时分复用技术:将提供给整个信道传输信息的时间划分成若干时间片(简称时隙),并将这些时隙分配给每一个信号源使用,每一路信号在自己的时隙内独占信道进行数据传输。
- 频分复用技术:将用于传输信道的总带宽划分成若干个子频带(或称子信道),每一个子信道传输1路信号。
Q: 路由有哪些协议、分别说以下原理?
A: RIP、OSPF协议
- RIP协议:基于UDP,在自己范围内的发送广播,基于跳数选择最短路径
- OSPF协议:基于IP,没有跳数限制,使用组播发送链路状态更新,只在链路状态变化时使用触发更新
数据结构
Q: 度为2的树与二叉树的区别?
A: 二叉树是有序的,度为2的树是无序的。也就是说二叉树不仅是度为2的树,其孩子还有左右之分,哪怕只有一个结点也是分左右的。
Q: 最小生成树有几种方法?
A: 1、Prim普利姆算法 2、Kruskal克鲁斯卡尔算法
普利姆基本思想:在图中取任意顶点v作为起始顶点,并加入集合V;之后遍历与V中顶点相邻的边,选择权值最小且顶点未加入集合V的边,把其加入集合V,直到集合V包含所有顶点结束。
克鲁斯卡尔基本思想:在含有n个顶点的图中始终选择权值最小且不会产生回路的边,一直进行此步骤直到选择n-1条边为止。
Q: 时间复杂度为nlogn的排序算法有哪些?
A: 快速排序、堆排序、归并排序
Q: 快排的操作流程
A: 首先选择一个元素作为枢轴,然后头尾指针交替遍历所有元素。比枢轴元素小的放在前面,比枢轴元素大的放在后面,最后将枢轴元素放在头尾指针共同指向的位置,至此为一趟快速排序,重复上述步骤直到元素有序
Q: 快排的操作流程
A: 首先选择一个元素作为枢轴,然后头尾指针交替遍历所有元素。比枢轴元素小的放在前面,比枢轴元素大的放在后面,最后将枢轴元素放在头尾指针共同指向的位置,至此为一趟快速排序,重复上述步骤直到元素有序
Q: 如何理解数据结构?
A: 数据结构是在编程中通常会用到的一种工具。用于表达程序中所需要的数据该如何组织,数据与数据之间的关系等。
Q: 线性表的存储结构?
A: 线性表的存储结构有两种:顺序存储、链式存储
- 顺序存储:适用于不经常对数据进行增加删除的情况。所有元素均可以随机访问
- 链式存储:适用于经常对数据进行增加删除的情况。所有元素只能顺序访问
Q: 图的存储方式有哪些?
A: 图的存储方式有四种:邻接矩阵、邻接表、十字链表、邻接多重表。其中邻接矩阵、邻接表有向图、无向图都适合;十字链表适合存储有向图、邻接多重表适合存储无向图
Q: 图有什么遍历方式、树有什么遍历方式?
A: 图的遍历方式有:广度优先遍历(BFS)、深度优先遍历(DFS)。树的遍历方式有:先根遍历、后根遍历
Q: 图的遍历与树的遍历有什么区别?
A: 首先,图的遍历可能会出现循环遍历的情况,要设置标记数组。而树的遍历则不会出现这种情况。其次,图可能存在不连通的情况,而树不存在,所以图的遍历要对所有的顶点都循环一遍。
Q: 设计一种效率高的查找算法
A: 这个问题真的灵活,主要看自己的想法了,要我回答的话我可能会围绕着哈希查找来答,因为没有哪种查找可以直接与关键字联系起来的了吧,哈哈哈哈哈哈…
Q: 哈希表的特性?如何实现?
A: 哈希表是通过关键字进行查找的一种数据结构。要实现这种特性就需要散列函数把元素散列到某个位置,常用的散列方法包括直接寻址法、除留余数法、数字分析法等。
Q: 排序算法中哪些最坏和平均的时间复杂度是一样的?
A: 直接插入、冒泡、简单选择、堆排序、2路归并、基数排序
操作系统
Q: 进程与线程的关系?
A: 子进程与父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,更好的利用CPU。线程的运行需要使用计算机内存资源和CPU。
Q: 什么是死锁?
A: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
Q: 饥饿与死锁的区别?
A: 首先,饥饿与死锁都是由于进程竞争资源导致的。饥饿一般是指,进程在执行的过程中一直有高于当前进程优先级的进程,导致操作系统无法分配资源给当前进程。而死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象。
组成原理
Q: 中断的过程是什么,断点的概念?
A: 中断过程指的是从中断源发出中断请求开始,CPU响应这个请求,现行程序被中断,转至中断服务程序,直到中断服务程序执行完毕,CPU再返回原来的程序继续执行。断点是在调试程序时人为使程序运行到某个位置而停止的一种手段
软件工程
Q: 软件的生命周期是什么?
A: 指软件的产生直到报废的生命周期,周期内包括问题定义、可行性分析、需求分析、开发阶段、维护等阶段
Q: 瀑布模型是什么,有什么优缺点?
A: 是将软件生存周期的各项活动,规定为按固定顺序而连接的若干阶段工作,形如瀑布流水
- 优点:为项目提供了按阶段划分的检查点;当前阶段完成后只需关注后续阶段;提供了一个模板,任何软件的开发都可以参照这一模板
- 缺点:各个阶段划分完全固定,阶段之间产生大量文档,增加了工作量;开发是线性的只有等整个工程全部结束才可以看到开发成果;不能适应用户的需求变化
数据库
Q: 数据库有哪些锁,各自的作用,举个例子说明一下
A: 数据库中有两种基本锁类型:排它锁、共享锁。
- 排他锁:当数据对象被加上排它锁时,其他的事务不能对它读取和修改。在更新操作(INSERT、UPDATE 或 DELETE)过程中始终应用排它锁。
- 共享锁:加了共享锁的数据对象可以被其他事务读取,但不能修改。对表中数据的查询(SELECT)时都会加共享锁
Q: 视图和表的区别是什么?
A: 视图是数据库中SQL语句构造出的虚表,我们对视图只能进行查询但不能进行修改。表是数据库中的实体,可以对其进行增删改查操作。
Q: 事务的 ACID 特性是什么?
A: 数据库中的事务(Transaction)有四个特性,分别是:原子性(Atomicity),一致性(Consistency),隔离性(lsolation),持久性(Durability)
- 原子性:指一个事务是一个不可再分割的工作单位,事务中的操作要么都执行,要么都不执行
- 一致性:指在执行一个事务前和后,数据库的完整性约束没有没有被破坏。也就是说事务不能破坏数据库的完整性以及业务逻辑的一致性。
- 隔离性:指多个事务并发时,每个事务应该是隔离的,一个事务不应影响其他事务的运行效果
- 永久性:指事务的执行更改是永久的
Q: 数据库中几种删除都有什么,有什么区别?
A: 有delete、truncate、drop三种删除
- delete:每次从表中删除一行数据,并将此次删除记录在日志,以便进行事务回滚
- truncate:从表中删除所有数据,且不记录日志,不会触发触发器事件,执行速度快,truncate只能对表使用
- drop:只能对表使用,同时删除表的结构和数据,不可恢复
C#相关
Q: 面向对象的特点
A: 抽象、封装、继承、多态
- 抽象:抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类
- 封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
- 继承:继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
- 多态:多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。多态性往往表现为"一个接口,多个功能"。
Q: 接口是什么?
A: 接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。
Q: C#里面抽象类和接口有什么区别?
A: 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。实现接口的,必须实现接口内所有方法,而抽象类只需要实现部分需要的方法。接口可以多继承而一个类只能继承一个抽象类。