正文共: 3467 字 5 图
预计阅读时间: 9 分钟
每日分享
The more you think and talk about your goals, the more positive and enthusiastic you become.
你越多地思考和谈论你的目标,你就越积极和热情。
小闫语录:
目标不应该是新年的一条朋友圈,目标不应该是伪装自己的人设,目标更不应该是一时爽的嘴瘾。它应该是我们前进的方向,困境时的希望,向前的动力。立下目标之后,要经常的回顾,思考,不断的修正自己前进的方向,把握住自己。重温当初的激情,让自己走出迷茫,摆脱浑浑噩噩的生活。你应该是那颗最闪耀的星。
面试题
1.在Linux如何查看程序的端口号,需要用什么命令?
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__
实现:
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
文件,当第二次导入的时候,会直接加载这个文件,而不会再执行模块代码。因此我们只需要把相关的函数和数据定义在一个模块中,就可以获得一个单例对象。
-----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项目为例:
----------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.实现一个简单的装饰器。
def setFunc(func):
def wrapper(*args,**kwargs):
print('wrapper context')
return func(*arg,**kwargs)
return wrapper
优质文章推荐: