【面试题】花3个小时整理的朋友在深圳面试Python岗位的题

1.请写出一段 python 代码实现删除一个 list 里面的重复元素

 
方法一:利用 Set 集合去重实现。
 
1. l1 = ['b','c','d','b','c','a','a'] 
2. l2 = list(set(l1)) 
3. l2.sort(key=l1.index) 
4. print l2
方法二:使用字典函数。
 
【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第1张图片
方法三:用 append 方法实现。
 
1. def delList(L): 
2. L1 = [] 
3. for i in L:
4. if i not in L1: 
5. L1.append(i) 
6. 
7. return L1 
8. 
9. print(delList([1,2,2,3,3,4,5])) 
10. print(delList([1,8,8,3,9,3,3,3,3,3,6,3]))

换成列表推导式更简单:

1. l1 = ['b','c','d','b','c','a','a'] 
2. l2 = [] 
3. [l2.append(i) for i in l1 if not i in l2] 
4. print l2
方法四:先对元素进行排序,然后从列表的最后开始扫描。
 
【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第2张图片

 

2. 编程用 sort 进行排序,然后从最后一个元素开始判断

【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第3张图片

 

3.Python 里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)

 
1)赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。
 
2)浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改
其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如 list();3,copy 模块
的 copy()函数}。
 
3)深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改
变){copy 模块的 copy.deepcopy()函数}。
 

 

4.Python 里面 match()和 search()的区别?

re 模块中 match(pattern,string[,flags]),检查 string 的开头是否与 pattern 匹配。
re 模块中 research(pattern,string[,flags]),在 string 搜索 pattern 的第一个匹配
 
1. >>>print(re.match(‘super’, ‘superstition’).span()) 
2. 
3. (0, 5) 
4. 
5. >>>print(re.match(‘super’, ‘insuperable’)) 
6. 
7. None 
8. 
9. >>>print(re.search(‘super’, ‘superstition’).span()) 
10. 
11. (0, 5) 
12. 
13. >>>print(re.search(‘super’, ‘insuperable’).span()) 
14. 
15. (2, 7)

 

5.用 Python 匹配 HTML tag 的时候,<.*>和<.*?>有什么区别?

术语叫贪婪匹配( <.*> )和非贪婪匹配(<.*?> )

例如:test<.*> :
 
test<.*?>:
 
<.*>是贪婪匹配,会从第一个“<”开始匹配,直到最后一个“>”中间所有的字符都会匹配到,
 
中间可能会包含“<>”。
 
<.*?>是非贪婪匹配,从第一个“<”开始往后,遇到第一个“>”结束匹配,这中间的字符串都会
 
匹配到,但是不会有“<>”。
 

 

6.Python 里面如何生成随机数?

使用 random 模块。

1)随机整数:random.randint(a,b):返回随机整数 x,a<=x<=b

random.randrange(start,stop,[,step]):返回一个范围在(start,stop,step)之间的随机整数,不包括结束值

2)随机实数:random.random( ):返回 0 到 1 之间的浮点数,

random.uniform(a,b):返回指定范围内的浮点数。

 

7.请用代码实现一个冒泡排序?

【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第4张图片

 

8.请用代码实现输出:1,2,3,5,8,13,21,34,55,89……

这道题考的是斐波那契数列的实现。

用生成器实现:

【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第5张图片

迭代器实现:
 
【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第6张图片
 

 

9.请解释下 TCP/IP 协议和 HTTP 协议?

HTTP 协议:

HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是 Web 联网的基础,也是手机联网常用的协议之一,HTTP 协议是建立在 TCP 协议之上的一种应用。HTTP 连接最显著的特点是
客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
 
TCP/IP 协议:
 
TCP/IP(Transmission Control Protocol/Internet Protocol)协议是传输层协议,主要解决 数据如何在网络中传输。HTTP 是应用层协议,主要解决如何包装数据。IP 协议对应于网络层。 
 

 

10.Python 里面如何实现 tuple 和 list 的转换?

 
list 转换成 tuple:t=tuple(l)。
 
tuple 转换成 list:l=list(t)。

 

11.请写出以下 Linux 的 SHELL 命令?

【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第7张图片

12. Python 如何实现单例模式?请写出两种实现方法?

在 Python 中,我们可以用多种方法来实现单例模式:

1. 使用模块;
2.使用__new__;
3.使用装饰器;
4. 使用元类(metaclass)。
 
1)使用模块:其实,Python 的模块就是天然的单例模式,因为模块在第一次导入时,会生成.pyc 文件,当第二次导入时,就会直接加载.pyc 文件,而不会再次执行模块代码。因此我们只需把相关的函数和数 据定义在一个模块中,就可以获得一个单例对象了。
 
【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第8张图片
 
2)使用__new__:为了使类只能出现一个实例,我们可以使用__new__来控制实例的创建过程
 
【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第9张图片

 

3)使用装饰器:装饰器可以动态的修改一个类或函数的功能。这里,我们也可以使用装饰器来装饰某个类,使其只能生成一个实例
 
【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第10张图片
 
 
4)使用 metaclass(元类):元类可以控制类的创建过程,它主要做三件事:
-
拦截类的创建
-
修改类的定义
-
返回修改后的类
 
【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第11张图片
【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第12张图片
 

 

13.Python 如何生成随机数?

【面试题】花3个小时整理的朋友在深圳面试Python岗位的题_第13张图片

 

14.Mysql 集群的优缺点?

优点:
 
99.999%的高可用性
 
快速的自动失效切换
 
灵活的分布式体系结构,没有单点故障
 
高吞吐量和低延迟
 
可扩展性强,支持在线扩容
 
缺点:
 
存在很多限制,比如:不支持外键
 
部署、管理、配置很复杂
 
占用磁盘空间大、内存大
 
备份和恢复不方便
 
重启的时候,数据节点将数据 load 到内存需要很长的时间
 
 

15.你用的 Mysql 是哪个引擎,各引擎之间有什么区别?

主要MyISAM 与 InnoDB 两个引擎,其主要区别如下:

InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM 就不可以了;

MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;

InnoDB 支持外键,MyISAM 不支持;

MyISAM 是默认引擎,InnoDB 需要指定;

InnoDB 不支持 FULLTEXT

类型的索引;

InnoDB 中不保存表的行数,如select count() from table 时,InnoDB;需要扫描一遍整个表来 计算有多少行,但是 MyISAM 只要简单的读出保存好的行数即可。注意的是,当 count()语句包含

where 条件时 MyISAM 也需要扫描整个表;

对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM 表中可以和其他字 段一起建立联合索引;清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建

表;

InnoDB 支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%'

 

16. 数据库的优化?

1.优化索引、SQL 语句、分析慢查询;

2.设计表的时候严格根据数据库的设计范式来设计数据库;

3.使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能节约磁盘 IO

4.优化硬件;采用 SSD,使用磁盘队列技术(RAID0,RAID1,RDID5)等

5.采用 MySQL 内部自带的表分区技术,把数据分层不同的文件,能够提高磁盘的读取效率;

6.垂直分表;把一些不经常读的数据放在一张表里,节约磁盘 I/O;

7.主从分离读写;采用主从复制把数据库的读操作和写入操作分离开来;

8.分库分表分机器(数据量特别大),主要的的原理就是数据路由;

9.选择合适的表引擎,参数上的优化

10.进行架构级别的缓存,静态化和分布式;

11.不采用全文索引;

12.采用更快的存储方式,例如:NoSQL 存储经常访问的数据**。

 

17. Mysql 数据库中怎么实现分页?

select * from table limit (start-1)*limit,limit; 其中 start 是页码,limit 是每页显示的条数。

 

18. sql 语句怎么看效率?

SQLServer2005-->新建一个查询-->输入语句 SELECT * FROM Person.Contact

执行(F5)-->Ctrl+L.

 

20.Python 中调用 mongo 数据库的包叫什么?

Pymongo。

 

未完。。。

 

 

 

 

 

你可能感兴趣的:(关于Python,分布式,数据库,python,mysql)