python技术面试题(十)

2019-07-18 14:48:36 浏览数 (1)

正文共: 3467 字 5 图 预计阅读时间: 9 分钟

每日分享

The more you think and talk about your goals, the more positive and enthusiastic you become.

你越多地思考和谈论你的目标,你就越积极和热情。

小闫语录

目标不应该是新年的一条朋友圈,目标不应该是伪装自己的人设,目标更不应该是一时爽的嘴瘾。它应该是我们前进的方向,困境时的希望,向前的动力。立下目标之后,要经常的回顾,思考,不断的修正自己前进的方向,把握住自己。重温当初的激情,让自己走出迷茫,摆脱浑浑噩噩的生活。你应该是那颗最闪耀的星。

面试题

1.在Linux如何查看程序的端口号,需要用什么命令?

代码语言:javascript复制
netstat -tnulp
------------------------
[ethanyan@localhost ~]$ netstat -tnulp
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp6       0      0 :::111                  :::*                    LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
tcp6       0      0 ::1:25                  :::*                    LISTEN
tcp6       0      0 :::3306                 :::*                    LISTEN
udp        0      0 0.0.0.0:53814           0.0.0.0:*       
udp        0      0 0.0.0.0:5353            0.0.0.0:*   
udp        0      0 192.168.122.1:53        0.0.0.0:*
udp        0      0 0.0.0.0:67              0.0.0.0:*
udp        0      0 127.0.0.1:323           0.0.0.0:*
udp6       0      0 ::1:323                 :::*
  • -t:显示tcp端口。
  • -u:显示udp端口。
  • -l:仅显示套接字。
  • -p:显示进程标识符和程序名称。
  • -n:不进行DNS轮询,显示IP

2.python如何实现单例模式?请写出两种实现方法。

1)使用 __new__实现:

代码语言:javascript复制
class Singeton(object):
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

2)python的模块就是天然的单例模式,因为模块在第一次导入时,会生成 .pyc文件,当第二次导入的时候,会直接加载这个文件,而不会再执行模块代码。因此我们只需要把相关的函数和数据定义在一个模块中,就可以获得一个单例对象。

代码语言:javascript复制
-----mysingle.py-----
class MySingle:
    def foo(self):
        pass
sinleton = MySingle()
-----test1.py-------
from mysingle.py import sinleton
sinleton.foo()
-----test2.py-------
from mysingle.py import sinleton
sinleton.foo()

3.设计一个工厂模式。

在项目初期搭建的时候,我们应该想到一个问题,就是在不同的环境下去使用不同的配置,毕竟开发环境和线上环境是不同的,那么如何快速的切换,使得项目不受影响呢?答案就是框架搭建初期,使用工厂类方法创建应用实例。我们以Flask项目为例:

代码语言:javascript复制
----------config.py----------
from datetime import timedelta
from redis import StrictRedis

#设置配置信息(基类配置信息)
class Config(object):
    #调试信息
    DEBUG = True
    SECRET_KEY = "fdfdjfkdjfkdf"
    #数据库配置信息
    SQLALCHEMY_DATABASE_URI = "数据库地址"
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    #redis配置信息
    REDIS_HOST = "127.0.0.1"
    REDIS_PORT = 6379
    #session配置信息
    SESSION_TYPE = "redis" #设置session存储类型
    SESSION_REDIS = StrictRedis(host=REDIS_HOST,port=REDIS_PORT) #指定session存储的redis服务器
    SESSION_USE_SIGNER = True #设置签名存储
    PERMANENT_SESSION_LIFETIME = timedelta(days=2) #设置session有效期,两天时间

#开发环境配置信息
class DevelopConfig(Config):
    pass

#生产(线上)环境配置信息
class ProductConfig(Config):
    DEBUG = False

#测试环境配置信息
class TestConfig(Config):
    pass

#提供一个统一的访问入口
config_dict = {
    "develop":DevelopConfig,
    "product":ProductConfig,
    "test":TestConfig
}
---------info/__init__.py---------
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from redis import StrictRedis
from flask_session import Session
from flask_wtf.csrf import CSRFProtect
from config import config_dict

#定义redis_store变量
redis_store = None
#定义工厂方法
def create_app(config_name):
    app = Flask(__name__)
    #根据传入的配置类名称,取出对应的配置类
    config = config_dict.get(config_name)
    #加载配置类
    app.config.from_object(config)
    #创建SQLAlchemy对象,关联app
    db = SQLAlchemy(app)
    #创建redis对象
    global redis_store #global将局部变量声明为一个全局的
    redis_store = StrictRedis(host=config.REDIS_HOST,port=config.REDIS_PORT,decode_responses=True)
    #创建Session对象,读取APP中session配置信息
    Session(app)
    #使用CSRFProtect保护app
    CSRFProtect(app)
    return app

-----------manage.py----------
from info import create_app
#调用方法,获取app
app = create_app("product")
if __name__ == '__main__':
    app.run()

4.实现一个简单的装饰器。

代码语言:javascript复制
def setFunc(func):
    def wrapper(*args,**kwargs):
        print('wrapper context')
        return func(*arg,**kwargs)
    return wrapper

优质文章推荐:

公众号使用指南

redis操作命令总结

前端中那些让你头疼的英文单词

Flask框架重点知识总结回顾

项目重点知识点详解

难点理解&面试题问答

flask框架中的一些常见问题

团队开发注意事项

浅谈密码加密

Django框架中的英文单词

Django中数据库的相关操作

DRF框架中的英文单词

重点内容回顾-DRF

Django相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

0 人点赞