每日分享
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