python程序员面试宝典:12个Python程序员面试必备问题与答案
@本文来源于公众## 标题号:csdn2299,喜欢可以关注公众号 程序员学府
文章目录
- 1. 什么是pickling和unpickling?
- 2. 什么是Python的命名空间?
- 3. args,kwargs?参数是什么?
- 4. 负索引是什么?
- 5. Python是如何进行内存管理的?
- 6. 如何判断单向链表中是否有环
- 7. mysql数据库如何分区、分表?
- 8. 如何对查询命令进行优化?
- 9. 多进程与多线程的区别?
- 10. select和epoll的区别?
- 11. TCP和UDP的区别?边缘触发和水平触发的区别?
- 12. 下面的代码能够运行么?请解释?
1. 什么是pickling和unpickling?
Pickle模块读入任何Python对象,将它们转换成字符串,然后使用dump函数将其转储到一个文件中——这个过程叫做pickling。反之从存储的字符串文件中提取原始Python对象的过程,叫做unpickling。
2. 什么是Python的命名空间?
在Python中,所有的名字都存在于一个空间中,它们在该空间中存在和被操作——这就是命名空间。它就好像一个盒子,每一个变量名字都对应装着一个对象。当查询变量的时候,会从该盒子里面寻找相应的对象。
3. args,kwargs?参数是什么?
如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args;如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs。
4. 负索引是什么?
Python中的序列索引可以是正也可以是负。如果是正索引,0是序列中的第一个索引,1是第二个索引。如果是负索引,(-1)是最后一个索引而(-2)是倒数第二个索引。
5. Python是如何进行内存管理的?
Python的内存管理是由私有heap空间管理的。所有的Python对象和数据结构都在一个私有heap中。程序员没有访问该heap的权限,只有解释器才能对它进行操作。为Python的heap空间分配内存是由Python的内存管理模块进行的,其核心API会提供一些访问该模块的方法供程序员使用。Python有自带的垃圾回收系统,它回收并释放没有被使用的内存,让它们能够被其他程序使用。
6. 如何判断单向链表中是否有环
首先遍历链表,寻找是否有相同地址,借此判断链表中是否有环。如果程序进入死循环,则需要一块空间来存储指针,遍历新指针时将其和储存的旧指针比对,若有相同指针,则该链表有环,否则将这个新指针存下来后继续往下读取,直到遇见NULL,这说明这个链表无环。
7. mysql数据库如何分区、分表?
分表可以通过三种方式:mysql集群、自定义规则和merge存储引擎。
分区有四类:
RANGE 分区:基于属于一个给定连续区间的列值,把多行分配给分区。
LIST 分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区:基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。
KEY 分区:类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL 服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
8. 如何对查询命令进行优化?
a. 应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索。
b. 应尽量避免在 where 子句中对字段进行 null 值判断,避免使用!=或<>操作符,避免使用 or 连接条件,或在where子句中使用参数、对字段进行表达式或函数操作,否则会导致权标扫描
c. 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
d. 使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。
e. 很多时候可考虑用 exists 代替 in
f. 尽量使用数字型字段
g. 尽可能的使用 varchar/nvarchar 代替 char/nchar
h. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
i. 尽量使用表变量来代替临时表。
j. 避免频繁创建和删除临时表,以减少系统表资源的消耗。
k. 尽量避免使用游标,因为游标的效率较差。
l. 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF
m. 尽量避免大事务操作,提高系统并发能力。
n. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
9. 多进程与多线程的区别?
a. 简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
b. 线程的划分尺度小于进程,使得多线程程序的并发性高。
c. 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
d. 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
e. 从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。
10. select和epoll的区别?
a. select实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select在“醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,这节省了大量的CPU时间。
b. select每次调用都要把fd集合从用户态往内核态拷贝一次,并且要把current往设备等待队列中挂一次,而epoll只要一次拷贝,而且把current往等待队列上挂也只挂一次(在epoll_wait的开始,注意这里的等待队列并不是设备等待队列,只是一个epoll内部定义的等待队列)。这也能节省不少的开销。
11. TCP和UDP的区别?边缘触发和水平触发的区别?
a. 基本区别:
基于连接与无连接
TCP要求系统资源较多,UDP较少;
UDP程序结构较简单
流模式(TCP)与数据报模式(UDP);
TCP保证数据正确性,UDP可能丢包
TCP保证数据顺序,UDP不保证
b. 编程中的区别
socket()的参数不同
UDP Server不需要调用listen和accept
UDP收发数据用sendto/recvfrom函数
TCP:地址信息在connect/accept时确定
UDP:在sendto/recvfrom函数中每次均 需指定地址信息
UDP:shutdown函数无效
12. 下面的代码能够运行么?请解释?
例如:
非常感谢你的阅读
大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是
没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深
入的研习计算机基础知识,整理好了,我放在我们的微信公众号《程序员学府》,如果你也不甘平庸,
那就与我一起在编码之外,不断成长吧!
其实这里不仅有技术,更有那些技术之外的东西,比如,如何
做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?点击加入
想做你自己想成为高尚人,加油!
python程序员面试宝典:12个Python程序员面试必备问题与答案相关推荐
- python程序员工作怎样-12个Python程序员面试必备问题与答案(小结)
1. 什么是pickling和unpickling? Pickle模块读入任何Python对象,将它们转换成字符串,然后使用dump函数将其转储到一个文件中――这个过程叫做pickling.反之从存储 ...
- python程序员面试宝典 陈屹_程序员面试宝典 - 总结
1 类型转换 当执行算术运算时,操作数的类型如果不同,就会发生转换,数据类型一般朝着浮点精度高.长度更长的方向转换,整数型如果转换为signed不会丢失信息,就转换为signed,否则转换为unsig ...
- 2020最新软件测试(Python自动化测试)面试宝典大全(一)挑战高薪必备!!!赶紧收藏!!!!
1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台.软件平台上是否可以正常的运行,即是通常说的软件的可移植性. 兼容的类型,如果细分的话,有平台的兼容, ...
- 传智播客Java面试宝典 | 张老师尽心整理的面试宝典大全,面试阿里腾讯不成问题。西边人西说测试
提示:本大全每半月更新一次,请持续保持关注!谢谢! 索取方式:头条或公众号中回复[面试] 从享受生活的角度上来说:"程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员, ...
- 【2022最新Java面试宝典】—— Java异常面试题(33道含答案)
目录 一.Java异常架构与异常关键字 1. Java异常简介 2. Java异常架构 1.Throwable 2. Error(错误) 3. Exception(异常) 运行时异常 编译时异常 3. ...
- Android面试宝典(一位优秀应届生面试经验,很多Android高阶问题)
写一个专属自己的面试宝典: 小巫写这篇面试宝典,主要是为了积累经验和记录自己的求职之路.小巫并不是一种教导别人怎么去面试的心态来写这篇文章的,我只是想把自己的经历与大家分享,或许你能在其中发现一些小巫 ...
- 2022程序员进阶宝典,微众银行java面试经验
前言 Redis作为基于键值对的NoSQL数据库,具有高性能.丰富的数据结构.持久化.高可用.分布式等特性,同时Redis本身非常稳定,已经得到业界的广泛认可和使用.因此,作为一个Java开发者,掌握 ...
- 面试金典12(Python)—— 删除中间节点(简单)
删除中间节点 概述:若链表中的某个节点,既不是链表头节点,也不是链表尾节点,则称其为该链表的「中间节点」.假定已知链表的某一个中间节点,请实现一种算法,将该节点从链表中删除. 输入:节点 5 (位于单 ...
- 100天精通Python丨办公效率篇 —— 12、Python自动化操作 office-word(word转pdf、转docx、段落、表格、标题、页面、格式)
本文收录于 <100天精通Python专栏 - 快速入门到黑科技>专栏,是由 CSDN 内容合伙人丨全站排名 Top 4 的硬核博主 不吃西红柿 倾力打造. 基础知识篇以理论知识为主,旨在 ...
- 并发编程面试宝典(内含69道常问面试题及答案解析)
一.开篇: 众所周知,在Java的知识体系中,并发编程是非常重要的一环,也是面试的必问题,一个好的Java程序员是必须对并发编程这块有所了解的. 因此,大家不难发现 Java 并发问题一直是各个大厂面 ...
最新文章
- boost::log::sinks::unlocked_sink用法的测试程序
- 一种求凸多边形内部似最大圆的算法
- Reactive Extensions 相见恨晚的Rx.Net
- java语言50到100之间素数和_用JAVA语言编写一程序,求100以内的所有素数
- arcgis 字段计算器 条件赋值_ArcGIS中属性表的常用操作汇总
- Linux游戏开发包 ClanLib 2.1.0 发布
- kill mysql 进程_如何快速处理mysql连接数占满的问题?
- 【Vue】转-Vue.js经典开源项目汇总
- python解决写入文件乱码问题
- asp实现注册登录界面_(01)ASP运行环境的搭建
- Caller-saved register and Callee-saved register
- 四种存储结构及其特点
- LED灯亮灭模拟小星星第一句
- JavaSE之异常处理
- kafka 不可以脱离 zookeeper
- 计算机word.实训报告体会,计算机实训报告【五篇】.docx
- 渐变的alert_模仿新浪邮箱的alert渐变的提示框
- 【技术科普】区块链世界也存在多元宇宙
- 获取root权限及破解原理分析
- 使用腾讯云轻量服务器搭建CS GO社区服(基于Centos)