面试问题
(1)项目问题:
<1>3组:做的前端还是后端?主要承担什么角色的功能设计?项目的难点和关键点?thinkphp和django框架的不同点?
详见:五、项目准备
(2)专业课问题:
<1>成绩单上的课程相关问题
<2>1组:冯诺依曼机的特点、为什么二进制在计算机中比较重要?
①冯诺依曼机的特点:
冯诺依曼计算机主要是由运算器、控制器、存储器和输入输出设备组成;
它的特点是:以运算器和控制器为核心、程序均以二进制代码的形式存放在存储器中、所有指令都是由操作码和地址码所构成、指令在存储过程中按序执行。
②二进制好处:(学习文章https://blog.csdn.net/c46550/article/details/90951557)
技术上容易实现:0和1用相关电路(双稳态电路)很好表示;
可靠性高:二进制中只使用0和1两个数字,在传输和处理时不易出错;
适合逻辑运算:0表示假,1表示真;
运算规则简单:使运算器的结构得到简化,有利于提高运算速度;
易于十进制进行转换
<3>12组:C++和python的区别(学习文章https://www.zhihu.com/question/21976478)
①C++和Python都是强类型语言;
②C++为编译型语言,Python是解释型脚本语言;
③C++更接近于底层,方便直接操作内存,编程相比Python繁琐但是运行效率高;
对应的Python编程简单但是运行效率低。
<4>盛立杰组:图像处理、人工智能
<5>类和对象(自己话描述,学习文章http://www.monkey1024.com/javaseroute)
①类和对象是面向对象编程语言中的重要概念,例如在java语言中最基本的单位就是类,类=成员变量(方法外部定义的变量)+方法一组相关属性和行为的集合,类泛指某一事物,而对象就是该事物的具体体现;
②例如我们创建一个student类,那么它的对象就可以是周杰伦、成龙。
Student s1 = new Student();
s1.name = “周杰伦”;
s1.age = 42;
变式:什么是面向对象?面向对象三大特征?
①面向对象:
面向对象,是一种编程的思想,将问题分解成各个对象,让对象之间进行交互,每个对象内部又都封装了各种方法;与之对应的是面向过程,注重过程;
比如:吃烧烤,面向对象:1.去烧烤店2.找服务员点餐3.开吃4.招收银员买单
面向过程:1.买羊肉2.腌羊肉、穿羊肉3.点炭火4.烧烤5.开吃6.收拾,按步骤来的。
②三大特征:
封装:
隐藏对象的属性和实现细节,仅对外提供公共访问方式;
封装的一种体现形式:用private关键字修饰成员变量,对外提供该变量的get和set方法;这样可以提高程序的安全性;
继承:
class A extends B则称A是子类,B是父类;
在java中只有单继承,不支持多重继承,即一个子类只能extends一个父类;
优点:提高了代码的复用性、方便程序的维护、让类与类之间产生了联系,这是多态的基础;
缺点:增加了类之间的耦合,而软件开发的要求是高聚合(一个模块个元素之间的紧密程度)低耦合(不同模块之间相互连接的数量)。
多态:
事物的存在的多种形态,比如:一只兔子,它是一个动物、一个宠物;
Java多态的三个必要条件:继承、方法重写和父类引用指向子类对象
(Father c = new Child();那么c就只能看到child里面的father属性。)
<6>关系、树、图论
①关系:离散中最重要的是二元关系,对于给定集合A,它的二元关系可以用有向图(又称为关系图)或者关系矩阵表示;
关系的特性有:自反、反自反、对称的、反对称、传递。
②树,是一种特殊的图,离散中经常会遇到让你求一个图的最小生成树,方法有:K算法(选最小的边)、P算法(从一个点来选边)和破圈法 ;
树的常见性质:一棵树的节点数=各节点度数总和+1;对于一棵二叉树:
n0=n2+1,非空二叉树第k层上最多有2(k-1)个节点,一个高度为h的二叉树的节点数最多有2h-1(满二叉树)。
在数据结构中树也有很广泛的应用,比如:用于排序的堆就是一棵完全二叉树。
③图论
图可分为有向图和无向图,有向图表示方法有:邻接矩阵、邻接表;有向图又可分为:单连通图、强连通图和弱连通图;
常用D算法来求解单源点最短路径问题,F算法求解任意两点间的最短路径;
欧拉图(用于解决“一笔画”问题):一个无向图是欧拉图,当且仅当所有顶点的度数均为奇数;
哈密顿图:n个节点的简单无向图中,所有顶点度数均>=n/2;
<7>硬件接口
<8>12组:c++两个标准区别?OS作业和进程区别并举出具体例子?数据结构中建立二叉树需要集中遍历?为什么先后遍历不可以?
<9>6组(王宇平):高数、线代(矩阵合同等价)、C和C++的区别、构造Huffman树的过程和意义;
①矩阵合同、等价
②C和C++的区别:
C是面向过程的,C++可以是面向对象的程序设计语言;
详细区别:输入输出有区别:C++:cin,cout,但是可以兼容C的printf和scanf;
C++提供了更多地库函数,可以有效地简化编程。
③构造Huffman的过程:
<10>5组:数据库系统、编译原理、离散数学
<11>链表与数组、线程与进程、树以及图的存储方式、你所知道的端口号
①链表与数组:
链表是线性表的一种(还有一种叫顺序表),用指针实现的,在内存中不连续;数组元素在内存中是连续的。
链表是链式存储结构,而数组是顺序存储结构。
在链表中插入/删除某个元素较简单,但是查找一个元素较困难;而数组则相反,查找一个元素比较简单,但是插入/删除某个元素较困难,需要移动大量元素。
②线程与进程:
线程也叫轻量级进程,在引入线程之后,资源分配的基本单位仍然是进程,但是调度的基本单位就是线程(而不是原来的进程)了;
一个进程可以拥有一个/多个线程,线程的上下文切换比进程要快。
③树与图的存储方式:
树是特殊的图,图又阔以分为有向图和无向图,无向图可以看成特殊的有向图,所以我们考虑有向图的存储方式:
邻接矩阵(存储稠密图),邻接表(存储稀疏图)。
④熟知端口号:
服务器使用的端口号包括熟知端口号(0-1023)和登记端口(1024-…)
下面介绍下TCP使用的熟知端口号
文本传输协议FTP(数据):20,FTP(控制):21
终端网络TELNET:23,简单邮件传输协议SMTP:25,域名服务器DNS:53
HTTP:80,HTTPS:443
<12>1组:堆栈、堆排序、排序的最快时间复杂度、做过的硬件设计、计算机交互、你感兴趣的方向。
①堆栈:就是栈,一种运算受限的线性表,只能在栈顶进行push/pop,特性是先进后出。
②堆排序(学习文章https://blog.csdn.net/u010452388/article/details/81283998)
以大根堆为例:先要构建初始堆,然后输出一个最大值,调整剩下元素构成一个新的大根堆;重复上述过程。
③排序算法中最快的时间复杂度
O(Nlog2N),比如快速排序
④感兴趣的方向
<13>3组:排序、CSMA、XML;
①常见的排序算法有:冒泡排序、直接插入排序、折半插入排序、选择排序、快速排序、堆排序;
②CSMA即载波监听多路访问协议,是一种随机访问协议;还有ALOHA、CSMA/CD和CSMA/CA协议;
③XML
<14>2组:java反射机制
变式:集合?IO流?多线程?
①相比数组,集合类Collection可以用来存储任意长度的对象,它是一个接口,实现类有Vector、ArrayList、优先级队列Priorityqueue
②IO流即输入输出流,主要用来处理设备之间的数据传输;按照操作类型来分可分为字符流和字节流;一些常见的IO流类:FileReader、FileInputStream
③多线程实现的三种方式:继承Thread类,实现Runnable和Callable接口;
<15>联培导师组:C++多态如何实现?
<16>9组:网络加密在哪一层
对于不同层都有相应的网络加密解密协议,但是一般在应用层、传输层和IP层,比如应用层的PGP,IP层的IPsec;
<17>5组(田聪组):高度为n的完全二叉树节点数?P蕴含Q的真值表?偏序性质(>、<=等哪些是偏序)
①最多有2n-1,最少有2(n-1)-1+1=2^(n-1)
②P—>Q ,当且仅当P为1,Q为0时值为0,其余均为1
③偏序性质:集合A上的二元关系R是自反的、反对称的和传递的,则称R是A上的偏序;习惯上将偏序集合用哈斯图表示;
任何集合上的=关系、整数集合的>=关系、空集合上的空关系都是偏序关系。
<18>北京6所:计算机网络的5层协议、java和C++的区别
①计网5层协议:
应用层、传输层、IP层、数据链路层和物理层
②java和c++的区别:(学习文章:https://www.sohu.com/a/233598512_100180425)
sun公司(现java属于oracle)研究了多种程序设计语言(其中就包含C++),取其精华弃其糟粕,最终推出了一种面向对象的程序设计语言java。java和C++的相同之处多于不同之处,下面简单例举几项两者的不同之处:
指针:java中没有指针,避免了例如指针悬空造成的系统崩溃问题;
类型转换:C++中会出现隐含的强制类型转换(比如C++中可以将一个浮点值赋给整型变量,并去掉其尾数),而java程序中必须进行显示的强制类型转换;
多重继承:java中不支持C++的多重继承(一个子类继承多个父类),但它允许一个类实现多个接口(间接实现了多重继承的功能);
操作符重载:java不支持操作符重载(将+ - * /赋予新的意义),但是java还是可以通过类来实现。
<19>电科院(没关系别进):OSI 7层模型、香农定理、堆栈
①OSI的7层模型:
首先ISO是一个组织,由它所提出的OSI 7层模型包括:
应用层、表示层、会话层(资源子网部分),
传输层、IP层、数据链路层和物理层(通信子网部分);
②香农定理:
用来计算有噪声通道的最高数据速率=带宽log2(1+信噪比),
与之对应的还有:奈奎斯特准则,用来计算无噪声通道的最大比特率
= 2带宽*log2L,L表示数据信号的电平数量;
③堆栈:
首先介绍一下堆:是一种数据结构,堆一定是一棵完全二叉树,若堆中某个节点的值总是不大于根节点称为大顶堆,总不小于根节点值的称为小顶堆。程序运行时(不是编译时)动态申请OS为自己分配内存。
栈:又名堆栈,是一种运算受限(只能在栈顶进行push和pop操作)的线性表,先进后出是它的主要特点。是由OS自动为其分配内存
<20>基地班:TCP协议、C++模板、二叉树优势
答:①TCP协议:
是一种面向连接的、基于字节流的可靠传输协议,通过3次握手来建立连接、4次挥手来释放连接;与之对应的一个协议是面向无连接的、尽最大努力交付的、不可靠传输的UDP协议;
②C++模板:
相对于C来说,C++的标准模板库(STL)提供了很多的模板函数,比如:map函数用来统计一串数据中各元素出现的次数,结果按照升序排序;
sort函数可以说是非常方便了,当我们在对一串数据进行排序时不用再去单独编写一个函数,直接调用即可;这些模板函数大大简化了我们的编程;
③二叉树的优势:(学习文章:https://blog.csdn.net/cai2016/article/details/52589952)
有序数组(顺序表)方便查找,链表方便数据的插入和删除,但是二叉树可以综合两者的优势。常用于查找/排序的二叉搜索树(BST)。
(3)其他问题:
①6组:为什么读研?做项目时是用已有的方法还是自己去优化一个方法?
②3组:本科的成绩?专业课?
④经历、体会
⑤1组:4/6级成绩、学习能力咋样、了解你导师哪些方面、身边认识啥样的人;
⑥喜欢哪科目、本科课程对你的帮助
⑦研究生学习生活规划