面试题(二)

news/2024/7/20 15:24:17 标签: python, c/c++, 内存管理

1、什么是lambda函数?它有什么好处?另外python在函数编程方面提供了些什么函数和语法?

lambda是Python中的匿名函数。它语法简单,简化代码,不会产生命名冲突,污染命名空间。Python提供了map,reduce,filter等函数方法,提供了装饰器,闭包等语法
答案

2、详细说说tuple、list、dict的用法,它们的特点;

tuple 元祖,固定长度不可变的顺序容器,访问效率高,是和存储一些常量数据,可以作为字典的键使用
list 列表,是长度可变有序的数据存储容器,。可以通过下标索引取到相应的数据
dict 字典,长度可变的hash字典容器。存储的方式为键值对,可以通过相应的键获取相应的值,key支持多种类型
答案

3、说说python中装饰器、迭代器的用法;描述下dict 的 items() 方法与 iteritems() 方法的不同;

装饰器是指对函数执行过程,做一些扩展,甚至可以更改本身函数的执行
迭代器是指遵循迭代器协议的对象,这类对象在被for循环时,每次迭代生成下一个项,不用一开始就生成整个列表
在python3中 不存在iteritems,items方法返回可迭代对象
在python2中 items()返回[(key,value)]的列表对象,iteritems()返回迭代器对象,iteritems()循环时不可以增删dict的内容
答案

4、讲讲对unicode, gbk, utf-8等的理解,python2.x是如何处理编码问题?

unicode编码:为了解决各个国家的语言的存储,引进的unicode码,包括UCS2,UCS4,UTF-8,UTF-7等
gbk:和unicode不一样的编码方式 ,常用的为 gbk-2312
utf-8: UTF-8 使用 1-4 个字节来存储单个字符,应该是目前最流行的字符集。Linux 默认字符集就是UTF-8。既解决了大多数语言的编码方式,又避免了简单字符存储对空间的浪费

python 2.x 需要在文件上方声明文件的编码方式# -*- coding: utf8 -*-,可以通过str.decode/str.encode处理字符串的文本编码
保证 python 编辑器的编码正确,或使用 u’中文’保证被转换成 unicode 编码,推荐使用
sys.setdefaultencoding('utf-8')来保证我们的编码
答案

5、Python 是如何进行内存管理的?python 的程序会内存泄露吗?说说有没有什么方面防止或检测内存泄露?

Python GC主要使用 引用计数 来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”解决容器对象可能产生的循环引用问题。通过分代
以空间换时间的方法提高垃圾回收效率
1、引用计数: 每个对象中都有ob-refcnt来做引用计数。当一个对象...,ob-refcnt就会增加,当引用的对象删除,那么ob-refcnt就会减少当ob-refcnt为零,就会释放该对象的内存空间
2、标记清除: 解决循环引用的问题。先按需分配,等到没有空闲内存的时候,从寄存器和程序栈上的引用出发,遍历所有对象和引用把所有能访问的打标记,最后将没有标记的对象释放掉
3、分代技术: 提高效率,提高垃圾回收的效率,按照存活时间,分成不同的集合。将内存块按照其存活时间划分为不同的集合。每个集合就称为一个“代”,垃圾回收的频率随代的存活时间增大而减小。。Python默认定义分代对象集合,引用数越大,对象的存活时间越长

Python也会内存泄露,Python本身的垃圾回收机制无法回收重写了__del__的循环引用的对象

程序员管理好每个python对象的引用,尽量在不需要使用对象的时候,断开所有引用
尽量少通过循环引用组织数据,可以改用weakref做弱引用或者用id之类的句柄访问对象
通过gc模块的接口可以检查出每次垃圾回收有哪些对象不能自动处理,再逐个逐个处理
答案

6、关于 python 程序的运行性能方面,有什么手段能提升性能?

1、使用多进程,充分利用机器的多核性能
2、对于性能影响较大的部分代码,可以使用C或C++编写
3、对于IO阻塞造成的性能影响,可以使用IO多路复用来解决
4、尽量使用python的内建函数
5、尽量使用局部变量
答案

7、list 对象 alist [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}], 请按 alist 中元素的age 由大到小排序;

def sort_by_age(list1):
    return sorted(alist,key=lambda x:x['age'],reverse=True)
答案

8、两个 list 对象 alist ['a','b','c','d','e','f'], blist ['x','y','z','d','e','f'],请用简洁的方法合并这两个 list,并且 list 里面的元素不能重复;

alist = ['a','b','c','d','e','f']
blist = ['x','y','z','d','e','f']

def merge_list(*args):
    s = set()
    for i in args:
        s = s.union(i)
    return list(s)
答案

9、打乱一个排好序的 list 对象 alist;

import random
random.shuffle(alist)
答案

10、简单实现一个stack

class Stack:
    def __init__(self):
        self.items = []

    def __iter__(self):
        return self.items.__iter__()

    def pop(self):
        return self.items.pop()

    def top(self):
        if len(self.items) > 0:
            return self.items[len(self.items) - 1]

    def push(self, item):
        self.items.append(item)

    def empty(self):
        self.items = []

    def size(self):
        return len(self.items)
答案

11、输入某年某月某日,判断这一天是这一年的第几天?(可以用 python 标准库)

import datetime
def dayofyear():
    year = input("请输入年份:")
    month = input("请输入月份:")
    day = input("请输入天:")
    date1 = datetime.date(year=int(year),month=int(month),day=int(day))
    date2 = datetime.date(year=int(year),month=1,day=1)
    return (date1 -date2).days
答案

12、将字符串:"k:1|k1:2|k2:3|k3:4",处理成 python 字典:{k:1, k1:2, ... }

str1 = "k:1|k1:2|k2:3|k3:4"
def str2dict(str1):
    dict1 = {}
    for iterms in str1.split('|'):
        key,value = iterms.split(':')
        dict1[key] = value
    return dict1
答案

 

转载于:https://www.cnblogs.com/skiler/p/6938170.html


http://www.niftyadmin.cn/n/756135.html

相关文章

android 按钮前加图片,android 按钮添加图片并靠左显示

效果图:布局文件:android:id"id/photoGraphBtn"android:layout_width"match_parent"android:layout_height"0sp"android:layout_weight"1"android:background"color/white"android:drawableLeft"…

android轮播图实现过程,Android_记封装Banner的过程,快速实现App轮播图

支持图片无限轮播的BannerLayoutRecyclerView Banner利用RecyclerView实现的Banner轮播代码示例:BannerLayout支持图片无限轮播的BannerLayout支持功能功能较多,很多功能都已添加,建议下载sample ,查看代码支持动态更新数据可自定…

2017年10月31日结束Outlook 2007与Office 365的连接

2017 年10月31日 ,微软即将推出 Office 365中Exchange Online邮箱将需要Outlook for Windows的连接,即通过HTTP Over MAPI方式,传统使用RPC over HTTP(例如Outlook 2007)的Windows客户端的Outlook将无法访问Exchange O…

android weight代码,Android:weight,margin,padding详解实例

标题图weight详解weight是用来等比例划分区域的属性。案例代码dashucodingxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:id"id/LinearLayout"android:layout_width"ma…

element-ui tree组件 return span 标签报错

原因: webpack无法解析vue-jsx的语法问题 解决方案 (1).安装依赖 [babel-plugin-transform-vue-jsx][1] npm install\babel-plugin-syntax-jsx\babel-plugin-transform-vue-jsx\babel-helper-vue-jsx-merge-props\ --save-dev (2).在.babelrc…

android 4.2.2优化启动速度,HTC G12 Desire S CM10.1 安卓4.2.2 优化 华丽稳定运行

您可能感兴趣的话题:rom刷机核心提示:注意事项:1. 本刷机教程需在windows操作系统下进行2. 记录机器12位S/N号(拆卸电池后可见)3. 刷机前确保手机电量不少于50%4. 为避免资料丢失,刷机前请先备份个人资料5. 本教程内容均来自于互联…

堆 续3

---------------------siwuxie095 索引从 0 开始 程序 1&#xff1a;最大堆的实现 MaxHeap.h&#xff1a; #ifndef MAXHEAP_H #define MAXHEAP_H #include <iostream> #include <algorithm> #include <string> #include <cmath> #include <casse…

html audio标签无效,HTML5的audio标签设置currentTime无效解决方案

上帝视角看民宿产业 - 马化腾00:0001:06在firefox、IE、中都有效&#xff0c;但是在chrome中无效&#xff0c;原因&#xff1a;这是一个与服务器有关的chrome报错解决方案&#xff1a;1、将的src引用的视频最好是在线网站视频完整引用地址 //(亲自测试有效)&#xff0c;查找在线…