文因互联-PythonWeb开发工程师

2018/03/24 面试题

文因互联-软件工程师

请列举Python2与Python的区别,请将下面的Python2的代码转换成Python3。

代码:

class Point:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __str__(self):
        return '({}, {})'.format(self.x, self.y)
points = [Point(9, 2), Point(1, 5), Point(2, 7), Point(3, 8), Point(2, 5)]

sorted_points = sorted(points,lambda (x0, y0), (x1, y1): x0 - x1 if x0 != x1 else y0 - y1,lambda point: (point.x, point.y))
# 预期结果为(1, 5), (2, 5), (2, 7), (3, 8), (9, 2)
print ', '.join(map(str, sorted_points))

区别:

1.性能:

​ Py3.1性能比Py2.5慢15%,还有很大的提升空间

2.编码

​ Py3.X源码文件默认使用utf-8编码

3.语法

​ 1)去除了<>,全部改用!=

​ 2)去除``,全部改用repr()

​ 3)关键词加入as和with,还有True,False,None

4.字符串和字节串

​ 1)现在字符串只有str一种类型,但它跟2.x版本的unicode几乎一样。

5.数据类型

​ 1)Py3.X去除了long类型,现在只有一种整型——int,但它的行为就像2.X版本的long

​ 2)新增了bytes类型,对应于2.X版本的八位串

​ 3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函数都被废弃。同时去掉的还有

dict.has_key(),用 in替代

6.面向对象

​ 1)引入抽象基类(AbstraactBase Classes,ABCs)。

​ 2)容器类和迭代器类被ABCs化

修改后的代码:

class Point(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __str__(self):
        return '({}, {})'.format(self.x, self.y)
points = [Point(9, 2), Point(1,5), Point(2, 7), Point(3, 8), Point(2, 5)]
sorted_points = sorted(points,key=lambda p:(p.x,p.y))
print(', '.join(map(str, sorted_points)))

请用 python 写一个正则表达式实现电话号码的提取功能,下面是需要满足条件:

  • a. 匹配(123)-456-7890 和 123-456-7890
  • b. 不匹配(123-456-7890 和 123)-456-7890

代码:

import re
def get_tel(text):
    pattern = r'\(\d{3}\)-\d{3}-\d{4}|\d{3}-\d{3}-\d{4}'
    tels = re.search(pattern,text)
    if tels:
        tels = tels.group()
    print('匹配到的电话号码为:',tels)

text = input('请输入字符串:')
get_tel(text)

描述 python 开发中,协程,线程和进程的区别,请将下面代码改成可以在多核 CPU 上并行执行的程序。

代码:

import os
import sys

def dump_file(input_dir):
    if not os.path.exists(input_dir):
        print('dir {} not exists'.format(input_dir))
        return

    path_list = [os.path.join(input_dir, f).strip('\n') for f in os.listdir(input_dir)]
    file_path_list = filter(lambda file_path: os.path.isfile(file_path), path_list)
    for file_path in file_path_list:
        print('{}:{} size:{}'.format(os.getpid(), file_path, os.path.getsize(file_path)))
if __name__ == '__main__':
    if len(sys.argv) > 1:
        dump_file(sys.argv[1])
    else:
        dump_file(os.getcwd())
  • 进程是系统分配系统资源的最小单位,进程之中可以有多个线程,一个进程中的所有资源共享,进程之间资源不会共享;
  • 线程是系统进行任务调度的最小单位,一个进程中的线程共享该进程的系统资源,线程是轻量级的进程;
  • 协程又称微线程,轻量级线程,执行具有原子性,执行需要程序员来调用度,可以执行效率高

修改后代码:

import os
import sys
import multiprocessing
def dump_file(input_dir):
    if not os.path.exists(input_dir):
        print('dir {} not exists'.format(input_dir))
        return
    path_list = [os.path.join(input_dir, f).strip('\n') for f in os.listdir(input_dir)]
    file_path_list = filter(lambda file_path: os.path.isfile(file_path),path_list)
    for file_path in file_path_list:
        print('{}:{} size:{}'.format(os.getpid(), file_path,os.path.getsize(file_path)))

if __name__ == '__main__':
    pool_size = multiprocessing.cpu_count()
    pool = multiprocessing.Pool(processes=pool_size,)
for i in range(pool_size):
    if len(sys.argv) > 1:
        pool.apply_async(dump_file, args=(sys.argv[1],))
    else:
        pool.apply_async(dump_file, args=(os.getcwd(),))
    pool.close()
    pool.join()

假设这里有一台服务器地址为192.168.0.2,开放端口为6623,如何连接到远程服务器操作?

SSH -p 6623 root@192.168.0.2

找出当前目录下2天内新创建的多有json文件

find / -name “*.json” -a -mtime +2

如何查看(监控)CPU使用情况,硬盘读写情况以及网络读写情况?

  • ①可以调用系统资源监视器
  • ②安装glances程序,使用glances名可以直接查看

如何设置一个程序在Linux启动的时候自动运行?

在/etc/rc.local 中最后一行添加要执行程序的绝对路径

简述在浏览器中输入网址到网页内容展现出来,经历了一个什么样的过程。

  • ①浏览器向DNS服务器发起域名解析请求,域名解析服务器返回对应的ip地址
  • ②浏览器向解析后的ip地址发起资源请求,服务器查询该请求的url资源,并向客户端浏览器返回该资源的源代码
  • ③浏览器接收到该页面资源后检查页面是否用引用资源,若有则再次发起对该引用的请求,并将请求到的资源渲染输出到显示器,最终在显示器上显示出一个请求到的完整页面

请简单描述您对人工智能知识图谱的了解。

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学

人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等

实际应用在机器视觉,指纹识别,人脸识别,视网膜识别,虹膜识别,掌纹识别,专家系统,自动规划,智能搜索,定理证明,博弈,自动程序设计,智能控制,机器人学,语言和图像理解,遗传编程等

涉及的学科哲学和认知科学,数学,神经生理学,心理学,计算机科学,信息论,控制论,不定性论

请简单描述您未来5年的规划

在未来的1-2年内我能够在岗位沉淀下来,称为技术的中坚力量,在不断的努力后,争取晋升,在未来的3-5年内,如果公司认为我的话,可以发展称为公司的管理层或者架构师, 同时我也希望自己能够在企业的平台上得到进一步的职业能力提升

Search

    Table of Contents