一、概念题
1.描述对super、pass、yield、lambda关键字修饰的理解
2.大致描述一下python GIL的机制,以及python中多线程和多进程的区别
GIL全局解释器锁,是python解释器内置的线程锁,目的是保护线程安全,但也使python解释器在同一时刻只能处理一个线程,在处理一些科学计算等一些数据运算时python多线程无法发挥其作用,但处理IO密集型的数据时,因为阻塞时间远远大于python程序运算时间,所以GIL锁对多线程处理IO时,效率影响不大
数据共享:因为进程间的资源是独立的,多进程数据共享复杂,需要用IPC;同步简单;多线程共享同一进程数据,所以共享数据简单,但这也会导致同步数据复杂
内存/CPU:进程间占用内存多,CPU利用率低;多线程相比于进程占用内存少,CPU利用率高
创建/销毁/切换:进程的创建、销毁和切换都很慢,复杂;线程的创建、销毁和切换都很简单,很快速
编程调试:进程的编程和调试都很简单;线程的编程和调试都很困难
可靠性:进程间不会相互影响;线程间一个挂掉,整个个挂掉
3.python是如何进行内存管理的,以及大致描述一下python的GC机制
python的垃圾回收(GC)机制以引用计数为主,隔代回收,标记清除为辅
引用计数:当一个对象被引用时它的引用计数+1,当不被一个变量引用时它的引用计数减一,当一个对象的引用计数为0时,这个对象将会从内存中删除
隔代回收:大部分对象的生命周期很短,对年轻代和老年代使用不同的算法可以提高效率。新创建的对象放在零代链表上,经过一段时间后gc检测零代链表中是否有循环引用,有则引用计数减一,当引用计数为0时释放内存大于零放到另一个链表中,在经过一段时间检查一代放入三代。这就是新生代和老年代
标记清除:并不改动真实的应用计数,而是将集合中的对象的引用计数复制一份副本,改动该引用对象的副本。
4.请分别描述一下装饰器和函数修饰器的实现过程以及应用场景
装饰器就是把函数进行包装,为函数添加一些附加的功能。装饰器本质是一个闭包函数,被装饰函数将会被当做参数传入到装饰器函数中
二、
1.请用两个队列来实现一个栈(给出伪代码即可)
class Solution:
def __init__(self):
self._queue1 = []
self._queue2 = []
def push(self,x):
if len(self._queue1) == 0:
self._queue1.append(x)
elif len(self._queue2) == 0:
self._queue2.append(x)
if len(self._queue2) == 1 and len(self._queue1) >=1:
Where self._queue1:
self._queue2.append(self._queue1.pop(0))
elif len(self._queue1) == 1 and len(self._queue2) > 1:
Where self._queue2:
self._queue1.append(self._queue2.pop(0))
def pop(self):
if self._queue1:
return self._queue1.pop(0)
elif self._queue2:
return self._queue2.pop(0)
else:
return None
2.实现一个 Singleton单例类。要求遵循语言编程规范
import time
import threading
class Singleton():
_instance_lock = threading.Lock()
def __init__(self):
time.sleep(1)
print('init',self)
def new(cls,*args,**kwargs):
if not hasattr(Singleton,'_instance'):
with Singleton._instance_lock:
if not hasattr(Singleton,'_instance'):
Singleton._instance = object.__new__(cls,*args,**kwargs)
return Singleton._instance
class Singleton():
_lock = threading.Lock()
def __init__(self):
pass
@classmethod
def instance(cls,*args,**kwargs):
if not hasattr(Singleton):
whth Singleton._lock:
if not hasattr(Singleton,'_instance'):
Singleton._instance = Singleton(*args,**kwargs)
return Singleton._instance
3.实现一个socket编程。要求实现server端的功能即可和遵循语言的编程规范
from socket import *
server = socket(AF_INET,SOCK_STREAM)
server.bind('127.0.0.1',8080)
server.listen(5) conn,addr = server.accept()
Where Ture:
data = conn.recv(1024)
print('data'data)
conn.send(data.upper())
conn.close()
server.close()
三、设计题
1.请为掌阅设计一个并发处理key-value引擎,要求每条请求数据小于16k,数据总量为1T,QRS为50要求:
①请给出该系统需要配备多少资源,服务器数量,服务器内存大小及硬盘空间等
②要求系统平滑可扩展,高可用
③尽可能的降低系统复杂度

面试题fugui02的更多相关文章

  1. .NET面试题系列[8] - 泛型

    “可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...

  2. 关于面试题 Array.indexof() 方法的实现及思考

    这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...

  3. 对Thoughtworks的有趣笔试题实践

    记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...

  4. 从阿里巴巴笔试题看Java加载顺序

    一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...

  5. JAVA面试题

    在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...

  6. C++常考面试题汇总

    c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...

  7. .NET面试题系列[4] - C# 基础知识(2)

    2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...

  8. 我们公司的ASP.NET 笔试题,你觉得难度如何

    本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...

  9. 我设计的ASP.NET笔试题,你会多少呢

    本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...

随机推荐

  1. 把tomcat服务器配置为windows服务的方法

    转自:http://ykyfendou.iteye.com/blog/2032916 使用tomcat开发的项目,我们把项目交付给客户的时候,客户都不希望在每次开机的时候都要启动一下tomcat服务器 ...

  2. python 内置数据类型之数字

    目录: 1.2. 数字 1.2.1. 数字类型 1.2.2. 浮点数 1.2.3. 进制记数 1.2.4. 设置小数精度 1.2.5. 分数 1.2.6. 除法 1.2 数字   1.2.1 数字类型 ...

  3. HDU 1166 敌兵布阵(线段树/树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. caffe调loss方法

    正文 what should I do if... ...my loss diverges? (increases by order of magnitude, goes to inf. or NaN ...

  5. 一脸懵逼学习Linux的Shell编程

    1:什么是Shell??? (1)Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell(2)Shell也是一门编程语言<解释型的编程语言>,即she ...

  6. 【BZOJ3514】Codechef MARCH14 GERALD07加强版 LCT+主席树

    题解: 还是比较简单的 首先我们的思路是 确定起点 然后之后贪心的选择边(也就是越靠前越希望选) 我们发现我们只需要将起点从后向前枚举 然后用lct维护连通性 因为强制在线,所以用主席树记录状态就可以 ...

  7. C# 之 Structure 和 Class的区别

    一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...

  8. (三)apache的安装与配置

    一.安装: 推荐使用cygwin自带的Setup.exe.带来的好处不言而喻,所有安装的程序都是经过测试的,这样确保你不会把宝贵的时间浪费来毫无意义的劳动上. 在安装程序中选择两个包就行了(分别是ap ...

  9. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十一集之安装FastDFS】

    1,安装FastDFS之前,先安装libevent工具包. yum -y install libevent 2,安装libfastcommonV1.0.7工具包.有可能找到新版本的zip压缩包:lib ...

  10. 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。

    给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...