title: 2021.4.6 腾讯 IEG 运营开发实习面试(一面)
tags: 面经
2021.4.6 腾讯 IEG 运营开发实习面试(一面)
自我介绍
线程与进程的区别
说一下常见的锁(synchronized,lock,volatile,CAS)
那这几个锁之间有什么区别呢?
你对linux有了解吗?
你经常用哪些常见的linux指令呢
说一下linux中比较常见的信号
数据库了解过吗?(MySQL)设计过数据库吗?(没有)
NoSQL有了解吗?(没有)
http短连接和长连接的区别,以及各自使用的场景(见下文)
长连接的缺点有哪些?(见下文)
你的一个网站如果使用到长连接,那你会怎么做呢?(见下文)
说一下面向对象的继承和多态(见JavaGuide)
pytho中的压制类型你听说过吗?(没有)
python中的常见的数据类型(这个地方还说错了,尴尬。。。)
那Java中的基本数据类型。(byte、short、int、long、double、float、boolean、char)
byte 和 short类型有什么不一样呢?(这个地方说的不好)(主要是存储空间的大小和取值范围不同)(具体见下文)
迭代和递归的区别吗?(这个说的也不是很好)(见下文)
简单说一下类方法和实例方法(见下文)
反问环节
1、 说一下linux中比较常见的信号
在linux下有很多信号,按可靠性分为可靠信号和非可靠信号,按时间分为实时信号和非实时信号,linux进程也有三种方式来处理收到的信号:
(1)忽略信号,即对信号不做任何处理,其中,有两个信号不能忽略:SIGKILL及SIGSTOP;
(2)捕捉信号。定义信号处理函数,当信号发生时,执行相应的处理函数;
(3)执行缺省操作,Linux对每种信号都规定了默认操作。
常见的信号:
① SIGINT (2) 程序终止(interrupt)信号,在用户键入INTR字符(通常是Ctrl + C)时发出。
② SIGQUIT (3) 和SIGINT类似,但由QUIT字符(通常是Ctrl + )来控制。进程在因收到 SIGQUIT退出时会产生core文件,在这个意义上类似于一个程序错误信号。
③ SIGKILL (9) 用来立即结束程序的运行。本信号不能被阻塞、处理和忽略。
④ SIGTERM (15) 程序结束(terminate)信号。与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常(优雅地)退出。shell命令kill缺省产生这个信号。
⑤ SIGSTOP (19) 停止(stopped)进程的执行。注意它和terminate以及interrupt的区别:该进程还未结束,只是暂停执行。本信号不能被阻塞、处理或忽略。
2、Http 短连接和长连接的区别,以及各自使用的场景,以及长连接的缺点有哪些?
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
**短连接:**就是说,浏览器和服务器每进行一次Http操作,就会建立一次连接,但是任务结束后就会中断连接;
**长连接:**在使用长连接的情况下,当打开一个网页完成后,客户端和服务器之间用于HTTP数据的Tcp 连接不会关闭。
区别:
① 服务器端空间管理上:
Keep-Alive不会永久保持连接,因为TCP连接将会越来越多,直到把服务器的TCP连接数量撑爆到上限为止,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间;
短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。
② 时间上:
在客户请求频繁的情况下:若使用短连接,将在TCP的建立和关闭操作上浪费时间和带宽;
若使用长连接,就可以节省很多这样的消耗;
使用场景:
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连接好。
长连结的缺点:
在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,从而导致服务器崩溃。
3. 你的一个网站如果使用到长连接,那你会怎么做呢?
这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。
4、python中的常见的数据类型
number(数字)、string(字符串)、Boolean(布尔值)、None(空值)
list(列表)、tuple(元组)、dict(字典)、set(集合)
5、整型数据类型中的byte ,short ,int ,long有什么区别?
主要是存储空间的大小和取值范围不同。
byte:存储空间1个字节,取值范围 -128~127(-2的7次方 – 2的7次方-1 )
short:存储空间2个字节,取值范围 -2的15次方~2的15次方-1
int :存储空间4个字节,取值范围 -2的31次方~2的31次方-1
long:存储空间8个字节,取值范围-2的63次方~2的63次方-1
6、迭代和递归的区别吗?
**递归:**重复调用函数自身实现循环称为递归;
**迭代:**利用变量的原值推出新值称为迭代,或着说迭代是函数内某段代码实现循环;
7、简单说一下类方法和实例方法
类方法:用static修饰的方法。
1.类方法中不能引用对象变量;
2.类方法中不能调用类的对象方法;
3.在类方法中不能调使用super,this关键字;
4.类方法不能被覆盖。
实例方法:当一个类创建了一个对象后,这个对象就可以调用该类的方法(对象方法)。
1.实例方法中可以引用对象变量,也可以引用类变量;
2.实例方法中可以调用类方法;
3.对象方法中可以使用super,this关键字。
区别:
① 类方法可以通过类名调用,实例方法不能通过类名调用
② 当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行。
③ 类方法在该类被加载到内存时,就分配了相应的入口地址。从而类方法不仅可以被类创建的任何对象调用执行,也可以直接通过类名调用。
④类方法的入口地址直到程序退出时才被取消。