前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python技术面试题(十)

python技术面试题(十)

作者头像
小闫同学啊
发布2019-07-18 14:48:36
4140
发布2019-07-18 14:48:36
举报
文章被收录于专栏:小闫笔记小闫笔记

正文共: 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相关知识点回顾

美多商城项目导航帖

项目重要技术点介绍

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • 面试题
    • 1.在Linux如何查看程序的端口号,需要用什么命令?
      • 2.python如何实现单例模式?请写出两种实现方法。
        • 3.设计一个工厂模式。
          • 4.实现一个简单的装饰器。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档