秋招的一些知识整理

来源:互联网 发布:微软平板软件下载 编辑:程序博客网 时间:2024/06/05 05:13

操作系统

1、死锁的概念?产生死锁的4个必要条件?怎么预防?

  死锁是指两个或者两个以上的进程在执行过程中,因为争夺资源而造成的一种循环等待的情况,若是没有外力的作用,它们都没办法推进下去。

条件:互斥条件,不可剥夺条件,循环等待,请求与保持。

预防策略:采用资源静态分配策略,破坏部分分配条件;允许进程剥夺占用其他进程占有的资源;采用资源有序分配。(破坏其必要条件就OK了)

 

2、进程间的几种通信方式?信号量概念?

信号量:无法介于用户态和内核态之间使用。信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一主机内不同线程之间的同步手段。

共享内存:共享内存就是映射一段能被其它进程所访问的内存,这段内存由一个进程创建,多个进程可以同时访问它。它是最快的IPC通信方式,它是针对其他进程间通信方式运行速率低而专门设计的。它通常与其他通信机制,如信号量配合着来使用。

消息队列:在中断时,无法无阻塞的接收数据。消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

管道:除了有名管道,一般都是父子进程间的通信。管道是一个半双工的,数据流都是单向流动的,而且都是在具有血缘关系的进程间通信的。有名管道允许无亲缘关系的进程通信。

套接字:与消息队列一样,在中断时,无法无阻塞的接收数据。它可以用于不同进程,或者其进程间的通信

 

3.操作系统用什么管理进程与线程。知道哪些进程调度算法?

  PCB。操作系统为了管理进程设置的一个专门的数据结构,用来记录进程的外部特征,描述进程的运动变化过程。

  进程的调度算法:先来先服务,最短作业优先,时间片轮转,最高响应比优先法,多级反馈队列

 

4.如何让一个内存只在栈上分配或者只在堆上分配?

 //只在栈上

class stackonly {

 private:void *operator new(size_t Size) { }

};

//只在堆上

 class heaponly

{

private:

heaponly(){}

~heaponly(){}

};

数据库

3、索引优缺点?

索引就是对数据表中的一个或多个列的值进行排序的结构,帮助MYSQL高速的获取其数据的数据结构。

  优点:加快数据库的检索速度;降低了插入,删除,修改,维护任务的速度;唯一索引可以确保每一行数据的唯一性;通过索引,可以在查询过程中使用优化隐藏器,提高系统的性能

  缺点:索引需要占物理和数据空间;创建索引和维护索引需要耗费时间,这种时间随着数据量的增大而增加;对表中的数据进行增,删,改时,索引也需要动态维护,这样降低了数据的维护速度。

 

4、事务优缺点?

事务是由一组SQL语句组成的逻辑处理单元。

事务的ACID属性:

  原子性,持久性,一致性,隔离性

 

5、增删改查是命令行还是图形用户界面?

是一个命令行,显示出来只是一个临时的用户界面表。

6.索引的底层是用什么来实现的?

  B+树(优化隐藏器)

7.数据库的锁机制?

表锁:开销小,加锁快,加锁力度大,不会出现死锁,发生锁冲突的概率最高,并发度最低

行锁:开销大,加锁慢,加锁力度小,会发生死锁,发生锁冲突的概率低,并发度也最高

共享锁(读锁):不会阻塞其他用户对同一张表的读请求,但会阻塞对同一张表的写请求

排它锁(写锁):会阻塞其他用户对同一张表的读写请求

悲观锁:假定会发生并发冲突,频弊一切可能违反数据完整性的操作

乐观锁:假定不会发生并发冲突,只在提交操作时检查是否违反数据完整性

8.数据库中的连接?

 内链接(等值连接,不等值连接,自然连接);外连接(左连接,右连接);交叉连接

计算机网络

6、HTTP状态码?301302

  表示网页服务器Http响应状态的状态码;

  301:永久重定向

  302:临时重定向

 

7、http中除了getpost方法还有哪些?getpost的区别?

PUTHEAD,TRACE,OPTIONS,DELETE

Get:向服务器索取数据;参数在URL之后传递;有大小限制,最多是1024;数据被缓存在浏览器,不安全;查询通过request,querystring()

post:向服务器提交数据;参数在HTML HEADER中提交;无大小限制;更安全;查询通过requestForm();

 

8、线程与进程的区别?

 程序是一个单纯的二进制文件。进程就是将程序的权限,属性,代码,数据加载到内存中,所以进程是资源分配的最小单位。操作系统会给进程分配PID,如果有父进程的话还会给分配PPID。所以进程就是运行着的程序。线程是进程的一条执行路径。线程拥有其自己私有的堆栈和寄存器,但是这些线程会共享父进程的内存,所以线程是任务调度的最小单位。然后再说说举个例子(谷歌浏览器就是一个程序的例子,每一个标签页都是一个进程,每个进程下面有多个线程在并发运行着(进程有独立的地址空间)这样设计的目的就是在保护模式下,一个标签页进程奔溃后,不会让整个浏览器都奔溃)

 

9.三次握手,四次挥手。 为什么需要四次挥手?

 

为什么需要三次握手而不是两次?为了防止失效的链接请求又传送到服务器端。造成服务器等待从而造成资源浪费。

为什么需要四次挥手?因为TCP是全双工的,发送了FIN代表我没有数据要再给你发了,但是却可以接收数据,同样的,我们也必须得等到另一方给我们发送它接收到我们的确认后,才可以进行关闭。就相当与两个人打招呼,别人和你打招呼了,你是得回复的。

为什么要进入TIME_WAIT阶段:等待的最大时间是2MSL4分钟,240S.因为我们也不确定服务端到底收没收到ACK,要是等到2MSL还没收到的话,就会发起超时重传机制。

1.保证TCP的全双工连接可以可靠的关闭

2.保证这次连接的重复数据段从网络中消失

 

10.说说sleepwait()的区别?

    (1)两个来自不同的类,sleep来自Thread,wait来自Object;

(2)sleep方法没有释放锁,wai't()方法释放锁

(3)wait只能在同步控制方法和同步控制块里使用,sleep在任何地方都可以。

(4)sleep必须捕获异常,wait不需要捕获异常

 

11.TCPUDP的区别?

TCP:面向连接的,可靠的,字节流服务。在进行一个TCP连接时,我们必须先建立一个连接,才能传输数据。而且TCP是一个全双工的。它有自己的一套独特的机制,有请求确认,超时重传,滑动窗口(连接建立时,各端分配一块缓冲区用来存储接收到的数据,并将缓冲区的大小发送给另一端,接收方发送的确认信息中有自己剩余的缓冲区大小,加速数据的传输,提高网络吞吐量)流量控制,拥塞控制(用来提高网络的利用率,降低丢包率,保证网络资源对每条数据流的公平性),错乱纠序等机制来保证收到无序,丢失,破坏的还可以恢复。对于传输大量数据是比较慢的

UDP:不面向连接的,不可靠的,数据报协议。从IP层发出去以后,并不能确保其能否达到目的,因为其不用提前建立一个连接,也没有超时重传机制,所以传输速度是比较快的,因此对于小数据的传输速度快。

 

12.http协议:超文本传输协议,就是一个应用层的协议。http协议是一个无状态的协议。

13.SYN包攻击?

   syn包是TCP连接的第一个包,是非常小的一种数据包,SYN攻击包括大量此类的包,由于这些包看上去来自实际不存在的站点,因此无法有效的进行处理,SYN攻击就是利用TCP连接的3次握手机制,但发起攻击的一方只来一两次握手,而被攻击端一直在试图完成TCP连接,因此造成资源不足。

 

14.TCP五层协议是什么?列举一些应用层协议?

  应用层(HTTP,Talent(远程登录协议),DNS(域名服务,提供域名到IP地址的转换),SMTP,FIP,ping(是程序,不是协议,用来检测网络是否畅通),OSPF(开放最短路径优先,是一种动态路由更新协议))

  表示层(翻译,加密,压缩)

  会话层(对话控制,建立同步点)

  传输层(TCP,UDP)

  网络层(IP,ICMP)

  数据链路层(ARP,RARP),成帧,物理寻址

  物理层(比特传输),设置网络拓扑结构

  ARP作用:网络层使用IP地址寻址一台机器,数据链路层使用物理地址寻址一台机器,因此网络层必须先将目标机器的IP地址转化成其物理地址,才能使用数据链路层提供服务。

  RARP:运行RARP服务的网络管理者通常存有改网络上所有机器的物理地址到IP地址的映射。

 

15.TCP的头部结构?

  16位源端口号       16位目标端口号

              32位序号

              32位确认号

  4位头部长度  6位保留  6位标志位  16位窗口大小

  16位校验和          16位紧急指针

       

  

C++

1.static关键字的作用?

 在函数体内,其作用范围是整个函数体,与AUTO变量不同,该变量的内存只被分配一次,因此其值在下次不改变。

 在模块内的static全局变量可以被模块内的所有函数访问,不能被模块外的其他函数访问

 在模块内的可被模块内的其他函数调用

 在类里面,属于整个类所拥有的,对类的所有对象只有一份拷贝

 在类中这个函数不接收this指针,因而只能访问类的static成员变量

2.const常量与define的区别

 Const                         define

有数据类型  没有

编译器会进行内型检查           只是简单的宏替换

可以调试                       不能调试

Const修饰的东西都受到C++语言实现的静态类型检查机制的强制保护,可以防止意外修改,提高程序的健壮性

 

3.inline函数

在函数的调用点,把函数的代码全部展开。称为一种更安全的过程,在编译过程中,会进行类型检查。

没有标准的函数栈帧的开辟与回退

 仅在函数内部可见

 调用函数的开销大于函数执行的开销,就写成内联函数

 

4.new与malloc的区别

      New                     malloc

运算符                    库函数

内存分配失败抛出异常        返回为空

有重载                    没有重载

可以初始化,分配内存            申请堆空间,不能初始化

不需要类型强转            需要

无需计算大小              sizeof计算大小

delete释放               用free释放

 

5.什么是虚函数?什么是纯虚函数?区别是什么?

  虚函数:在父类中声明,在子类中重写,实现了C++的多态。虚函数是运行时的多态。模板是编译时的多态。

  纯虚函数:在父类中声明的虚函数让其=0,父类自己不一定会实现,因为父类不知道应该怎么实现才是比较好的。需要在子类中重写函数来实现。

   区别:虚函数在父类中是可以被实现的,只要在运行调用时判断要调用的是父类还是子类就可以了。

 

6.c++的多态问题?

     静多态:编译时的多态(函数模板:函数名字相同,但是函数的参数类型却不一样,相当、于一个泛型的模板吧。重载:函数名相同,参数列表不同,在同一个作用域里面,通过对参数个数的判断,来确定具体调用的是哪一个函数)

 

动多态:运行时的多态(虚函数)只要使用了指针或者引用都会发生多态的调用

7.菱形继承的问题?

  继承的本质就是代码的复用,菱形继承的主要问题就是代码的重复使用,浪费内存

  解决办法:进行虚继承

8.智能指针的交叉引用?

  将其中一个的类型强制转换成weak_ptr就可以了

9.指针与引用的区别?

       指针                     引用

      一个地址                别名

      可以为空                  必须初始化

      可变                      不可变

      const                   -

      ++代表偏移                ++代表自增

      有多级指针

 

10.全局变量与局部变量的区别?

      全局变量                      局部变量

      作用域为整个程序              作用域为当前函数或循环体

      存储在全局数据区              存储在栈区

      生命周期和主程序一样,随程    在函数内部或循环内部,随函数的结束而

      序的销毁而销毁                不存在

      声明后在程序的各个部分都能用到 只在局部使用

  

      

11.四种C++强制类型的转换?

Const_cast(增删const属性),static_cast(编译时,要求等号两边是有联系的,比如说是父子关系),reintepret_cast(类似于C的强转),dynamic_cast(运行时,要求被转换的类所对应的基类中一定有虚函数,也是唯一一个支持RTTI类型检查)

JAVA

11.finally语句一般都写什么?

比如关闭流文件,调用系统的垃圾回收机制,提醒系统记得回收。因为本身finally语句块是与try()catch()语句块不分离的。要是try()语句块发生异常的话,就会跳出进入catch()异常处理语句块,最后由finally()来关闭上面未关闭的文件流,或者未释放的资源,以免造成资源浪费。不管是否抛出异常,finanlly都会执行。finally主要是处理其善后工作

Try{}

Catch(exception e){

}finally{}

 

12.final,finally,finalize的区别

final主要是用来修饰变量,方法和类。修饰变量的话意味着变量不能被修改;修饰方法的话意味着方法不能被重写;修饰类的话意味着类不能被继承。finalize主要是用来进行垃圾回收的。它是系统直接调用的。finally就是用来处理异常的。

13.exceptionruntime exception有什么区别?

ThrowableJAVA的一个异常处理框架,ERROR(错误,一般表现为内存泄漏)Exception(又分为runtime exception(运行时的异常,这些异常是不检查的异常,一般在程序运行时才会发生,比如数组越界,空指针,一般都是一些程序的逻辑错误引起的)和不运行时的异常(要进行异常捕获的,否则不让编译通过))

14.equall==的区别?

 首先一个是库函数,一个是运算符

 equall是判断两个对象内容是否相等,==一般比较的是它内存地址。

 

15.重载和重写的区别?

  重载:函数名相同,参数列表不同,在同一作用域下通过传递的参数个数不同就可以实现不同的功能和返回值,大大的减少了代码的输入量。

  重写:子类对父类的成员方法进行重写。主要特点是能够定义子类方法的主要特征。重写必须是返回类型和函数名以及参数列表都相同。

 

16.抽象类和接口有什么区别?

抽象类可以提供成员方法的具体实现,而接口不行

抽象类除了private以外,其它修饰符都是可以用来修饰的。接口只能用public来修饰

抽象类有静态代码块和静态方法,接口没有

抽象类中的成员变量可以是各种类型,而接口只能是public static final类型

一个类可以有好多个接口,但是只能继承一个抽象类

 

数据结构和算法

14、讲一下快排?最坏的情况时间复杂度?解释为什么?

   先设定一个基准,然后开始比较。最坏的情况就是数组大致有序的情况。时间复杂度是On^2

开放性题

15、买瓶水1元,两个空瓶可以换一瓶水,现有20元,可以买几瓶水?不借一块钱话可以买几瓶?37

测试内容:

16、测试用例的方法?等价有效类是什么?为什么要用这个方法?

  白盒测试,黑盒测试(等价类划分,错误推断,边界值分析,因果图法,判定表,正交试验)

17.有哪些方法预测双十一的峰值?

   历史数据记录

   用户购物车

   预售手段

   根据每个用户的年度销售额概率

18.有一个游戏APP,你会做哪些测试?

   功能测试:

     软件是否可以正常运行,安装,下载

     登录,注册,注销

     数据更新,APP更新

   客户端测试

     兼容不同版本的浏览器,对其性能进行相对应的压力测试,模拟用户的高并发峰值进行相对应的压力,负载,容量测试(利用loadrunner进行性能的模拟测试)

   APP兼容性测试

     在不同机型上的安装,点击,下载和卸载是否正常

     再不同操作系统上其属性是否一样

     不同分辨率下

   安全测试

     包括发送信息,拨打电话,连接网络,访问手机信息,联系人信息和设置权限

     某些操作时导致的输入有效性验证,授权,数据加密

     网络协议的测试,防止恶意的网络协议发送到服务器

     弱网络测试

19.怎么测试点评功能?

20.怎么测试群聊功能?测试群聊的时候怎么测试消息没有失序?

21.测试百度首页?

22.测试一瓶水,测试一支笔?

23.测试美团点评的酒店住宿功能这块?

24.性能测试的指标?

   1)事务

   2)请求响应时间

   3)事物响应时间

   4)吞吐量

   5)并发用户数

   6)TPS每秒钟系统能够处理的交易或者事务的数量.它是衡量系统处理能力的重要指标.

   7)点击率

   8)资源利用率

25.什么时候测试结束?

    覆盖率达到一定水平,且发现的缺陷数处于收敛期。

指标达到预定要求即可

Linux:

1.Http的cookie和session的区别?

HTTP协议传输明文内容,安全性比较大。它是一个无状态的协议。为了解决HTTP协议的无状态的缺陷产生了COOKIE,将其保存在一个本地文件中。

  Cookie:存储在客户端的。只能保管ASCII字符串,UNICOD或二进制数据得进行编码,不能直接存取JAVA对象

  Session:记录浏览后的状态用的。在浏览器浏览过后,我们会在服务端利用cookie保存其对应的session id。因此session是被保存在服务端的。其保存的方法是以一种散列表的方法进行信息保存的;可以存取任何类型的数据,可以直接保管JAVA bean和JAVA类,对象;URL重写就是把session id 直接附加在URL路径之后。

两者的不同点:隐私策略不同,有效期不同,服务器压力不同,浏览器支持不同呢,跨域支持上不同。

 

2.输入www.meituan.com,接下来会有什么流程?

  1)DNS域名解析(迭代查询和递归查询),找到其相对应的IP地址

  2)通过TCP的三次握手进行建立连接

3)传输到应用层发送HTTP请求(HTTP请求报文主要包括请求行,请求头,请求正文)

4)处理请求链接,返回HTTP响应(服务器在收到浏览器发送的HTTP请求后,会将收到的HTTP报文封装成HTTP的REQUEST对象,并通过不同的WEB服务器进行处理,处理完的结果以HTTP的RESPONS对象返回,主要包括状态码,响应头,相迎报文)

5)进行一系列的页面渲染(主要可以用到DOM树,不过没过多了解)

6)关闭连接

 

3.http状态码?

 100 continue

 200  ok

 301  Moved permanently  永久性重定向

 302  Moue  tempoarily   临时性重定向

 400  Bad Request

 403  Forbidden

 404  Not found

 500  服务器内部错误

 

4.http与服务器的交互方式?及其之间的区别?

Get,post

put(上传某个资源)

delete(删除某个资源)

patch(对某个资源做部分修改)

head(仅要求服务器返回头部信息)

trace(要求目标服务器返回原始HTTP请求的内容)

options(查看服务器对某个特定URL都支持哪些方法)

connect(对于某些代理服务器,将请求连接转化成一个安全隧道)

5.xss网络攻击?sql注入?如何预防网络安全?

 

6.如何将A文件复制到/c目录下改名为B

 Cp -p

7.Find 命令

 查找命令,从根目录进行查找

8.查看进程,并杀死某一进程?

 Ps -ef

 Kill +PID

9.查看监听端口的命令?

 Netstat -tanp

10.怎么查看内存使用的命令?

 Top -u

 Cat /proc/meminfor

11.查看进程地址空间映射?

12.查看磁盘的占用? de -h/hl

13.查看IP地址?

   Ifconfig -a

 

 

 

 

关于项目会问的:

1.你知道哪些对称加密算法?非对称加密算法?加密方法?

对称加密算法:DES

非对称加密算法:RSA

编码:

美团一二面

链表反转,判断链表是否有环,字符全排列,字符串反转方法,二分查找

滴滴一面
求数组最大的数和次大的数
求二叉树的深度
二面
求两个文件的合并
链家
求数组元素的子集比如123的子集 就是 1 2 3 12 13 23 123
cvte一面
递归和循环分别实现两个链表的合并
深拷贝的拷贝构造函数
求一个字符串中最长的对称子串
百度一面
链表求环
手写链表 实现所有方法
二面
把二叉搜索树转化成双向链表
一组字符串 判断是否可以构成环 首尾相连

 

 

 

原创粉丝点击