面试题fugui
1.什么是栈溢出,在什么情况下可能会出现
栈溢出是由于C语言系列没有内置检查机制来确保复制到缓冲区的数据不得大于缓冲区的大小,因此当数据足够大时,将会溢出缓冲区的范围。
python函数调用是通过栈这种结构实现的,每当进入一个函数调用,栈都会增加一层栈帧,每当函数返回栈就会减少一层栈帧。由于栈的大小不是无线的,所以递归的调用过多,会导致栈溢出。
2.Cpython的内存管理机制
引用计数:一种非常高效的内存管理手段,当一个对象被引用时其引用计数增加一,当其不再被一个变量引用时则计数减一,当引用计数为0时对象被删除
垃圾回收:python中,所有能够引用其他对象的对象都被称之为容器。因此容器之间才能形成循环引用。python的垃圾回收机制利用了这个特点寻找需要被释放的对象
为了记录下所有的容器对象,python将每一个容器都链到一个双向链表中,之所以使用双向链表是为了方便快速的在容器集合中插入和删除对象。
3.python的魔法方法以及用途
4.已知下列list
list1 = [
{'mm':2},
{'mm':1},
{'mm':4},
{'mm':3},
{'mm':3},
]
4.1把list中的元素按mm值排序
list1.sort(key=lambda x:x['mm'])
print(list1)
4.2获取list1中第一个mm值等于x的元素
s = list(filter(lambda x:x['mm']=='x',list1))[0]
print(s)
4.3list1的输出结果是什么
print(list1[::4])
[
{'mm':1},
{'mm':3},
]
4.4删除list1中所有mm=x的元素,切不对list重新赋值
for i in list(filter(lambda x:x['mm']==3,list1)):
list1.remove(i)
print(list1)
4.5取出list中mm的值最大的元素,不能排序
max_num = max(list(map(lambda x:x['mm'],list1)))
max_dict = list(filter(lambda x:x['mm']==max_num,list1))[0]
print(max_dict)
5.以下操作的时间复杂度
list.index O(1)
dict.get() O(1)
for i in set() O(n)
6.解释以下输出的原因
s1 = '{:0.2f}'.format(0.135)
s2 = '{:0.2f}'.format(0.145)
四舍六入五成双
五前为奇数进位
五前为偶数不进位
7.简述代码抛出以下异常的原因
IndexError 下标索引超出序列边界
AttributeError 这个对象没有这个属性
BaseException 所有异常的类
SystemExit 解释器请求退出
Keyboardlnterrupt 用户中断执行(通常为^C)
Exception 常规错误基类
Stoplteration 迭代器没有更多的值
GeneratorExit 生成器发生异常来通知错误
StandardError 所有内建标准异常的基类
ArithmeticError 所有数值计算错误的基类
FloatingPointError 浮点计算错误
OverflowError 数值运算超过最大限制
ZeroDivisionError 除(或取模)零(所有数据类型)
AssertionError 断言错误
EOFError 没有内建输出,达到EOF标记
EnvironmentError 操作系统错误的基类
IOError 输入/输出错误
OSError 操作系统错误
WindowsError 系统调试错误
LookupError 无效数据查询的基类
KeyError 映射中没有这个键
MemoryError 内存溢出错误
UnboundLocalError 访问未初始化本地变量
ReferenceError 弱引用视图访问已经垃圾回收了的对象
RuntimeError 一般的运行时错误
NotImplementedError 尚未实现的方法
SyntaxError python语法错误
IndentationError 缩进错误
TabError Tab与空格混用
SystemError 一般的解释器系统错误
TypeError 对类型无效操作
ValueError 传入无效操作
8.简述你对GIL的理解
GIL全局解释器锁,python解释器内置的线程锁,保护了线程安全。
但也,使python无法发挥多核的优势,多线程无法实现并行,同一时刻只能一个线程
9.简述以下内置函数的用法
reduce 第一个参数为函数,第二个个参数为可迭代对象。作用是可以对参数序列中的元素进行累加
map 第一个参数为函数,第二个参数为一个或多个可迭代对象。对相同位置的相加
any 判断一个可迭代对象对象有一个不为空,就返回Ture,否则,返回False
all 判断一个可迭代对象所有元素都不为空,就返回Ture,否则,返回False
10.copy与deepcopy的区别是什么
copy:浅拷贝,只拷贝表面一层,深层不会拷贝,如果改变深层,被拷贝的深层也随之改变
deepcopy:深拷贝,无论深层还是浅层被修改,都不会使原被拷贝对象修改
11.进程、线程、协程间的区别和联系
进程:是系统进行资源分配的独立单位,就是说不同的进程拥有不同的堆和栈,既不共享堆,也不共享栈
线程:线程是进程的一个实体,是CPU调度和分配的基本单位,他是比进程更小的能独立运行的基本单位,他又有独立的栈和共享的堆
协程:又称微线程,它和线程一样拥有独立的栈和共享的堆。是由程序员调度执行单元
区别和优缺点:
一个程序至少拥有一个进程,一个进程至少拥有一个线程(主线程)
进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率
协程、线程不能够独立执行,必须依存在进程中,应当使用互斥锁机制来加以控制
进程之间可以通过MQ来传递数据,而线程、协程之间的全局变量是共享的
进程和线程都是由操作系统调度的,而协程的调度是程序员控制的
在IO操作密集型的程序使用协程可以很好的避免CPU的浪费,将CPU的资源主动让出给其他协程使用。操作系统为了程序运行的高效性每个线程都有自己缓存Cache等等数据,操作系统还会帮你做这些数据的恢复操作。 所以线程的切换非常耗性能。但是协程的切换只是单纯的操作CPU的上下文,所以一秒钟切换个上百万次系统都抗的住
12.*ages,**kwargs的含义与用法
接受多个形参传值,接收多个键值对传值
13.http header及其功能
因为http本身是个无状态协议,所以需要在请求头与响应头中存放一些信息,比如协议的类型,使用的编码,cookie发送的内容长度这样服务端就知道浏览器是谁想要做什么
14.cookie与session的区别和联系
cookie存放于浏览器端用于服务器识别浏览器的身份
session在服务器端,它的运行依赖于session ID ,而session ID存放于cookie中,如果浏览器禁用了cookie ,session也会失效
15.什么是浏览器的同源策略
相同IP端口的为同一个域,一个域的脚本仅仅具有本域内的权限,而没有其他域的权限。这种安全限制成为同源策略
为了安全,在进行跨域请求时,浏览器会阻碍数据的接收
16.git commit --amend 有何用处
改写操作,用新的commit替换旧的commit
17.git 如何查看某次提交修改的内容
git log
18.git 比较两个commit的区别
git diff commit-id-1 commit-id-2 > d:/dome.py
+表示2相对于1减少了内容
-表示2相对于1增加了内容
19.git 如何把A分支上的某个commit应用到分支B上
git checkout B
git cherry-pick 上次提交的commit ID
20.如何查看Linux的系统时间,磁盘使用量,内存使用量
查看系统时间
date -s1
磁盘使用量
df -l
内存使用量
top
面试题fugui的更多相关文章
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- JAVA面试题
在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...
- C++常考面试题汇总
c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...
- .NET面试题系列[4] - C# 基础知识(2)
2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...
- 我们公司的ASP.NET 笔试题,你觉得难度如何
本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...
- 我设计的ASP.NET笔试题,你会多少呢
本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...
随机推荐
- 论文阅读笔记三十七:Grid R-CNN(CVPR2018)
论文源址:https://arxiv.org/abs/1811.12030 开源代码:未公开 摘要 本文提出了目标检测网络Grid R-CNN,其基于网格定位机制实现准确的目标检测.传统方法主要基于回 ...
- C#学习-字段
字段的定义由3部分组成,访问修饰符.字段的类型和字段的名称.以下是 public class Person { //姓名,类型为字符串类型 private string name; //年龄,类型为i ...
- RSA javascript加密 lua解密
一个在线RSA非对称加密解密,可以用这个地址生成公钥和私钥 https://blog.zhengxianjun.com/online-tool/rsa/ javascript加密 jsencrypt. ...
- java数组知识点总结
数组是一个用来存储同一个数据类型多个元素的一个容器(数组长度是固定的,数组中存储的元素的数据类型要求一致) 1.格式: 格式1: 数据类型[] 数组名 = new 数据类型[数组长度]; 格式2: 数 ...
- [SDOI2018]荣誉称号
题解: 并不需要什么算法 首先我们随便画一画就会发现 能画出一颗满二叉树 然后要满足每个点从上往下的路径和都相同(%m意义下) 一个点上可能对应了多个点 然后这样我们可以暴力dp $2^k*m^2+n ...
- [转]Centos 查看端口占用情况和开启端口命令
http://www.cnblogs.com/xqzt/p/4919191.html 1.Centos 查看端口占用 比如查看 80 端口占用情况使用如下命令: lsof -i tcp:80 2.列出 ...
- mysql数据类型(三)
MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...
- 【AtCoder】AGC016
A - Shrinking 用每个字母模拟一下就行 #include <bits/stdc++.h> #define fi first #define se second #define ...
- 【转】Android 模拟器横屏竖屏切换设置
http://blog.csdn.net/zanfeng/article/details/18355305# Android 模拟器横屏竖屏切换设置时间:2012-07-04 来源:设计与开发 ...
- Python学习(二十一) —— 前端之JavaScript
转载自http://www.cnblogs.com/liwenzhou/p/8004649.html 一.JavaScript概述 1.JavaScript的历史 1992年Nombas开发出C-mi ...