python面试题——框架和其余(132题)

1、框架对比

(1)django、flask、tornado框架的比较?css

Django:简单的说Django是一个大而全的Web框架,内置了不少组件,ORM、admin、Form、 ModelForm、中间件、信号和缓存等。给开发者提升了超高的开发效率。

Flask:微型的小而精的Web框架,可扩展性强,内置的组件不多,须要引入第三方组件实现功能业务,若是开发简单的项目,使用Flask比较快速和方便。
    若是开发大型项目,须要引入大量的第三方组件,这时Flask会越 来越像Django框架。
    基于wsgi协议部署,使用werkzeug模块实现此协议,模板系统由 Jinja2提供。

Tornado:是一个轻量级的Web框架,少而精,性能优越,最出名的就是强大的异步非阻塞和内置WebSocket功能。
        两大核心模块:
    1.iostraem:对非阻塞式的socket进行简单的封装
    2.ioloop:对I/O多路复用的封装,它实现了一个单例

(2)什么是wsgi?前端

Web服务器网关接口(Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口,是一种协议。
实现该协议的模块:
  wsgiref
  werkzurg
  uwsgi
除了tornado外其余框架都要利用wsgi,都没有本身写socket,都须要利用别人已经写好的。

2、django框架

二、视图相关

(1)简述什么是FBV和CBV?java

FBV(function base views) 就是在视图里使用函数处理请求。
CBV(classbase views) 就是在视图里使用类处理请求。
Python是一个面向对象的编程语言,若是只用函数来开发,有不少面向对象的优势就错失了(继承、封装、多态)。
因此Django在后来加入了Class-Based-View。可让咱们用类写View。这样作的优势主要下面两种: (1)提升了代码的复用性,可使用面向对象的技术,好比Mixin(多继承) (2)能够用不一样的函数针对不一样的HTTP方法处理,而不是经过不少if判断,提升代码可读性

(2)如何给CBV的程序添加装饰器?python

类中的方法与独立函数不彻底相同,所以不能直接将函数装饰器应用于类中的方法 ,咱们须要先将其转换为方法装饰器。

Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器。

#引入method_decorator模块
# 1.直接在类上加装饰器
@method_decorator(test,name='dispatch')
class Loginview(View):
    pass
    # 2.直接在处理的函数前加装饰器
    @method_decorator(test)
    def post(self,request,*args,**kwargs):pass

三、model相关

(2)django中如何根据数据库表生成model中的类?mysql

# 一、settings配置
# 若想将模型转为mysql数据库中的表,须要在settings中配置: 
DATABASES = {
    'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'orm', # 要链接的数据库,链接前须要建立好 'USER':'root', # 链接数据库的用户名 'PASSWORD':'1234', # 链接数据库的密码 'HOST':'127.0.0.1', # 链接主机,默认本级 'PORT': 3306, # 端口 默认3306  } } # 二、django默认你导入的驱动是MySQLdb须要换为PyMySQL # 在/ORM/ORM/__init__.py里面写入: import pymysql pymysql.install_as_MySQLdb() # 三、经过两条数据库迁移命令便可在指定的数据库中建立表 python3 manage.py makemigrations python3 manage.py migrate

(3)django的Model中的ForeignKey字段中的on_delete参数有什么做用?jquery

#删除关联表中的数据时,当前表与其关联的field的操做
#django2.0以后,表与表之间关联的时候,必需要写on_delete参数,不然会报异常

(4)only和defer的区别?***不了解的ios

datalist = models.Userinfo.objects.all().only("name","email")  #拿到的仍是一个QuerySet集合,仅仅取name和email
for item in datalist:
    print(item.id)
    print(item.name)
    print(item.pwd)   #只要表里有这个字段,同样会取到值,额外的会再发一次请求

datalist = models.Userinfo.objects.all().defer("name","email") #阻止,不取name和email
for item in datalist:
    print(item.id)
    print(item.pwd)

# 注意:用only的话就去取only里面的字段,取其余的字段效率过低了,尽量的少的链接数据库.   

(5)select_related和prefetch_related的区别?git

在数据库有外键的时候,使用 select_related() 和 prefetch_related() 能够很好的减小数据库请求的次数,从而提升性能。

对于一对一字段(OneToOneField)和外键字段(ForeignKey),可使用select_related 来对QuerySet进行优化
  经过多表join关联查询,一次性得到全部数据,只执行一次SQL查询 对于多对多字段(ManyToManyField)和一对多字段,可使用prefetch_related()来进行优化。或许你会说,没有一个叫OneToManyField的东西啊。
  分别查询每一个表,而后根据它们之间的关系进行处理,执行两次查询

(6)filter和exclude的区别?github

取到的值都是QuerySet对象,f
ilter选择知足条件的,
exclude:排除知足条件的.

(7)F和Q的做用?web

Django 提供 F() 来对两个字段的值作比较比较。F() 的实例能够在查询中引用字段,来比较同一个 model 实例中两个不一样字段的值。
用来更新获取原来值的功能,例如:Uinfo.objects.all().update(age=F("age")+1) Django 提供 Q() 用于构造复杂的查询条件的,使用方法有对象方法和直接建立建立对象方法。 filter() 等方法中的关键字参数查询都是一块儿进行“AND” 的。要执行更复杂的查询(例如OR 语句)可使用Q对象。 Q 对象可使用& 和| 操做符组合起来产生一个新的Q 对象。能够组合& 和| 操做符以及使用括号进行分组来编写任意复杂的Q 对象。 Q 对象可使用~ 操做符取反

(8)values和values_list的区别?

#values : 取字典的queryset
#values_list : 取元组的queryset

 

四、form相关

(1)django的Form和ModeForm的做用?

#Form做用:

#    1.在前端生成HTML代码
#    2.对数据做有效性校验
#    3.返回校验信息并展现
#ModeForm:根据模型类生成From组件,而且能够操做数据库

(2)django的Form组件中,若是字段中包含choices参数,请使用两种方式实现数据源实时更新。

#1.重写构造函数
def def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields["city"].widget.choices = models.City.objects.all().values_list("id", "name")
#2.利用ModelChoiceField字段,参数为queryset对象

四、中间件相关

(1)django中间件是什么?用中间件作过什么?

中间件本质是类,帮助咱们在视图函数执行以前,订制一些操做。内置的一些中间件能够作csrf、session等。
咱们利用中间件经常使用来作登陆认证、权限、cors(跨域)等。

(2)django请求的生命周期?

请求来了先到wsgi,把请求作一部分分装给django框架,而后通过全部的中间件,路由,视图,视图处理再返回给中间件,中间件在返回给wsgi,在返回给用户。

  1.执行遵循wsgi协议的模块(socket服务端),用于接收用户请求并将请求进行初次封装,而后将请求交给web框架 (Flask、Django)
  2.请求交给中间件处理(中间会作路由匹配),帮助咱们对请求进行校验或在请求对象中添加其余相关数据,例如:csrf、request.session
    路由匹配,根据浏览器发送的不一样url去匹配不一样的视图函数
  3.视图函数(业务处理),在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染
  4.再通过中间件,对响应的数据进行处理。
  5.再通过wsgi,将响应的内容发送给浏览器(用户)。

(3)列举django中间件的5个方法?以及django中间件的应用场景?

中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,而且在全局上改变django的输入与输出。

process_request(self,request)  请求进来时,权限认证
process_view(self, request, view_func, view_args, view_kwargs)   路由匹配以后,可以获得视图函数
process_template_response(self,request,response)   模板渲染时执行
process_exception(self, request, exception)   异常时执行
process_response(self, request, response)     请求有响应时执行

简单的来讲中间件是帮助咱们在视图函数执行以前和执行以后均可以作一些额外的操做,例如:
1.Django项目中默认启用了csrf保护,每次请求时经过CSRF中间件检查请求中是否有正确#token值
2.当用户在页面上发送请求时,经过自定义的认证中间件,判断用户是否已经登录,未登录就去登录。 3.当有用户请求过来时,判断用户是否在白名单或者在黑名单里

3、django-rest-framework框架

(1)谈谈你对restfull规范的认识?

首先restful是一种软件架构风格或者说是一种设计风格,并非标准,
它只是提供了一组设计原则和约束条件,主要用于客户端和服务器交互类的软件。     
就像设计模式同样,并非必定要遵循这些原则,而是基于这个风格设计的软件能够更简洁,
更有层次,咱们能够根据开发的实际状况,作相应的改变。

它里面提到了一些规范,例如:
#一、能够根据Http不一样的method,进行不一样的资源操做
  (5种方法:GET/POST/PUT/DELETE/PATCH)  
#二、restful 提倡面向资源编程,在url接口中尽可能要使用名词,不要使用动词
    http://www.luffycity.com/salary  
#三、在url中体现版本号
    https://v1.bootcss.com/mycss
    https://v3.bootcss.com/
    http://www.luffycity.com/v1/salary
    不一样的版本能够有不一样的接口,使其更加简洁,清晰  
#四、url中体现是不是API接口 
    https://www.bootcss.com/api/mycss    
    http://www.luffycity.com/api/v2/salary
    http://api.luffycity.com/v1/salary
    api能够写在前面也能够写在后面,更推荐写在后面,写在前面可能致使跨域问题。
#五、在url接口中推荐使用Https协议,让网络接口更加安全
    https://www.bootcss.com/v1/mycss?page=3
    https://www.luffycity.com/api/v2/salary
    (Https是Http的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL(安全套接层协议))
#六、响应式应该设置状态码
    200系列:成功
    300系列:重定向  301临时重定向  302永久重定向
    400系列:错误
    500系列:代码错误
    返回方式:return HttpResponse('asdadw',status=300)
#七、url中能够添加条件去筛选匹配
    https://www.bootcss.com/v1/mycss?page=3
    https://www.luffycity.com/api/v2/salary?page=1&size=10
#八、根据返回值不一样作不一样的操做
    https://www.luffycity.com/api/v2/salary
        GET:返回全部的列表
            {
                code:10000,
                data:[
                    {'id':1, 'title':'高亮'},
                    {'id':2, 'title':'小东北'}
                ]
            }
        POST:返回新增的数据
            {'id':3, 'title':'龙泰'}
    https://www.luffycity.com/api/v2/salary/1/
        GET:获取单条数据 {'id':1, 'title':'高亮'}
        PUT:更新   {'id':1, 'title':'高亮'}
        PATCH:局部更新  {'id':1, 'title':'高亮'}
        DELETE:删除
#九、返回错误信息(错误信息能够是一个字典)
    {
        code:100001,
        error:'xxx错误'
    }
    
#十、RESTful API最好作到Hypermedia,即返回结果中提供连接,连向其余API方法,使得用户不查文档,也知道下一步应该作什么
  若是遇到须要跳转的状况 携带调转接口的URL
      ret = {
            code: 1000,
            data:{
                id:1,
                name:'小强',
                depart_id:https://www.luffycity.com/api/v1/depart/8/
            }
        }

(2)为何要使用django rest framework框架?

能自动生成符合 RESTful 规范的 API

1.在开发REST API的视图中,虽然每一个视图具体操做的数据不一样,
    但增、删、改、查的实现流程基本同样,这部分的代码能够简写
2.在序列化与反序列化时,虽然操做的数据不一样,可是执行的过程却类似,这部分的代码也能够简写

REST framework能够帮助简化上述两部分的代码编写,大大提升REST API的开发速度

(3)django rest framework框架中都有那些组件?

1.序列化组件:serializers  对queryset序列化以及对请求数据格式校验

2.路由组件routers 进行路由分发

3.视图组件ModelViewSet  帮助开发者提供了一些类,并在类中提供了多个方法

4.认证组件 写一个类并注册到认证类(authentication_classes),在类的的authticate方法中编写认证逻

5.权限组件 写一个类并注册到权限类(permission_classes),在类的的has_permission方法中编写认证逻辑。
 
6.频率限制 写一个类并注册到频率类(throttle_classes),在类的的allow_request/wait 方法中编写认证逻辑

7.解析器  选择对数据解析的类,在解析器类中注册(parser_classes)

8.渲染器 定义数据如何渲染到到页面上,在渲染器类中注册(renderer_classes)

9.分页  对获取到的数据进行分页处理, pagination_class

10.版本  版本控制用来在不一样的客户端使用不一样的行为
    
在url中设置version参数,用户请求时候传入参数。在request.version中获取版本,根据版本不一样 作不一样处理

(4)django rest framework框架中的视图均可以继承哪些类?

class View(object):

class APIView(View): 
    # 封装了view,而且从新封装了request,初始化了各类组件

class GenericAPIView(views.APIView):
    # 增长了一些属性和方法,如get_queryset,get_serializer

class GenericViewSet(ViewSetMixin, generics.GenericAPIView)
    # 父类ViewSetMixin 重写了as_view,返回return csrf_exempt(view)
    # 并从新设置请求方式与执行函数的关系
class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    # 继承了mixins下的一些类,封装了list,create,update等方法,还继承了GenericViewSet

(5)简述 django rest framework框架的认证流程。

一、在用户访问时执行APIView的dispatch方法,在dispatch进行分发操做前,须要先执行self.initial(request, *args, **kwargs),执行认证、权限、频率操做。

2、initial方法中,执行认证组件 def initial(self, request, *args, **kwargs):   """代码省略""" # Ensure that the incoming request is permitted # 认证组件  self.perform_authentication(request) 3、perform_authentication方法中是request.user,即须要去Request类中寻找user静态方法 def perform_authentication(self, request): request.user

(6)django rest framework如何实现的用户访问频率控制?

使用IP/用户帐号做为键,每次的访问时间戳做为值,构造一个字典形式的数据,存起来,每次访问时对时间戳列表的元素进行判断,
把超时的删掉,再计算列表剩余的元素数就能作到频率限制了。 
匿名用户:使用IP控制,可是没法彻底控制,由于用户能够换代理IP
登陆用户:使用帐号控制,可是若是有不少帐号,也没法限制

(7)什么是接口?

在Python中接口就是URL。
但在c++/java中,接口是作约束用。
    # 约束继承了它的类中必须含有IFoo中的方法
    # java中继承类才是继承,继承接口叫作实现
    interface IFoo:
        def func(self):pass

    class Foo(IFoo):
        def func(self):pass

3、Django ORM框架

(1)列举django orm中三种能写sql语句的方法。

Django提供两种方式执行(performing)原始的SQL查询:

(1) Manager.raw() :执行原始查询并返回模型实例

(2) Executing custom SQL directly :直接执行自定义SQL,这种方式能够彻底避免数据模型,而是直接执行原始的SQL语句。

(2)django orm 中如何设置读写分离?

#1.手动读写分离:经过.using(db_name)来指定要使用的数据库
#2.自动读写分离:
#    1.定义类:如Router
#    2.配置Router
#        settings.py中指定DATABASE_ROUTERS
#        DATABASE_ROUTERS = ['myrouter.Router',] 
#提升读的性能:多配置几个数据库,并在读取时,随机选取。写的时候写到主库
#实现app之间的数据库分离:分库分表

(3)列举django orm 中全部的方法(QuerySet对象的全部方法)

ORM是“对象-关系-映射”的简称。实现了数据模型与数据库的解耦。

<1> all():                  查询全部结果
<2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象
<3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,
                            若是符合筛选条件的对象超过一个或者没有都会抛出错误。
<4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
<5> order_by(*field):       对查询结果排序
<6> reverse():              对查询结果反向排序
<8> count():                返回数据库中匹配查询(QuerySet)的对象数量。
<9> first():                返回第一条记录
<10> last():                返回最后一条记录
<11> exists():              若是QuerySet包含数据,就返回True,不然返回False
<12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后获得的并非一系列
                            model的实例化对象,而是一个可迭代的字典序列
<13> values_list(*field):   它与values()很是类似,它返回的是一个元组序列,values返回的是一个字典序列
<14> distinct():            从返回结果中剔除重复纪录

<15>delete():      当即删除对象而不返回任何值,delete() 方法是 QuerySet 上的方法,但并不适用于 Manager 自己。
<16>update():     对于任何结果集(QuerySet)均有效,这意味着能够同时更新多条记录。
                    update()方法会返回一个整型数值,表示受影响的记录条数。

(4)如何使用django orm批量建立数据?

(5)django中如何实现orm表中添加数据时建立一条日志记录。

(6)使用orm和原生sql的优缺点?

ORM优缺点:
优势: 
1)提升开发效率,下降开发成本 
2)使开发更加对象化 
3)可移植 
4)能够很方便地引入数据缓存之类的附加功能 
缺点: 
1)自动化进行关系数据库的映射须要消耗系统性能。其实这里的性能消耗还好啦,通常来讲均可以忽略之。 
2)在处理多表联查、where条件复杂之类的查询时,ORM的语法会变得复杂。

SQL优缺点:
优势:
执行速度快、性能强。
缺点:
开发速度慢

(7)解释orm中 db first 和 code first的含义?

 

 

10、未分配

四、列举django的内置组件?

1.admin组件:提供了基于 web 的管理工具,在网页上对注册的数据表进行增删改查操做。
2.auth组件:用户认证组件,用session记录登录验证状态
3.forms组件:1)生成HTML标签;2)验证用户数据(显示错误信息)3)HTML Form提交保留上次提交数据 4)初始化页面显示内容
4.ModelForm组件:把model和form组合起来,即用于数据库操做,也可用于表单构建
5.paginator组件:分页器,用于实现分页效果

 

七、django的request对象是在何时建立的?

# 查看wsgi.py源码:
application = get_wsgi_application()

# 查看源码中get_wsgi_application()源码定义
def get_wsgi_application():
    django.setup(set_prefix=False)
    return WSGIHandler()

# 查看WSGIHandler源码
class WSGIHandler(base.BaseHandler):

    # __call__()的做用是使实例可以像函数同样被调用,同时不影响实例自己的生命周期
    def __call__(self, environ, start_response):
        request = self.request_class(environ)
        response = self.get_response(request)

# 请求走到WSGIHandler类的时候,执行__cell__方法,将environ封装成了request

 

2一、django中csrf的实现机制?

Django 原生支持一个简单易用的跨站请求伪造的防御。当提交一个启用CSRF 防御的POST 表单时,你必须使用上面例子中的csrf_token 模板标签。

#第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页面;
#第二步:下次前端须要发起请求(好比发帖)的时候把这个token值加入到请求数据或者头信息中,一块儿传给后端;Cookies:{csrftoken:xxxxx}
#第三步:后端校验前端请求带过来的token和SESSION里的token是否一致;

2二、django如何实现websocket?

项目有个须要实时显示状态的需求,搜索了各类实现方法,看来只有websocket最靠谱,但django原生是不支持websocket的,
最终发现了django-channels这个项目

2三、基于django使用ajax发送post请求时,均可以使用哪一种方法携带csrf token?

方式1:后端将csrftoken传到前端,发送post请求时携带这个值发送
$.ajaxSetup({
    data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});

方式2:获取form中隐藏标签的csrftoken值,加入到请求数据中传给后端:
data: {
    csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
},

方式3:cookie中存在csrftoken,将csrftoken值放到请求头中
<script src="{% static 'js/jquery.cookie.js' %}"></script>
$.ajax({ 
    headers:{"X-CSRFToken":$.cookie('csrftoken')},
})

 

 

2五、django缓存如何设置?

Django 的缓存配置是经过 setting 文件的 CACHES 配置来实现的。本文仅以数据库缓存为例,其余配置方式请参考官方文档。

使用数据库缓存前,要在 settings.py 添加以下设置:
CACHES = {
    'default': {
        # 使用数据库缓存
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        # 用于保存缓存数据的表的名字
        'LOCATION': 'my_cache_table',
    }
}

而后运行这个命令来建立缓存表:
python manage.py createcachetable

2六、django的缓存能使用redis吗?若是能够的话,如何配置?

#1.安装 pip install django-redis
#2.在stting中配置CACHES,能够设置多个缓存,根据名字使用
        CACHES = {
            "default": {
                "BACKEND": "django_redis.cache.RedisCache",
                "LOCATION": "redis://127.0.0.1:6379",
                "OPTIONS": {
                    "CLIENT_CLASS": "django_redis.client.DefaultClient",
                    "CONNECTION_POOL_KWARGS": {"max_connections": 100}
                    # "PASSWORD": "密码",
                }
            }
        },
        #另添加缓存
        "JERD": { }
#3.根据名字去链接池中获取链接
        from django_redis import get_redis_connection
        conn = get_redis_connection("default")

2七、django路由系统中name的做用?

urlpatterns = [ 
  url(正则表达式, views视图函数,参数,别名),
]
name: 对你的URL进行命名,可让你可以在Django的任意处,尤为是模板内显式地引用它。至关于给URL取了个全局变量名,你只须要修改这个全局变量的值, 在整个Django中引用它的地方也将一样得到改变。

2八、django的模板中filter和simple_tag的区别?

simple_tag:能够有多个参数,通常是作数据处理,但不能作if判断语句

filter:通常只能有1个参数(能够字符串切割,变通为多个参数),过滤器,通常是return true或者false,能够和if判断语句使用.
在过滤器 {{ var
|foo:"bar" }} 中 ,过滤器 foo 会被传入变量 var 和默认参数 bar。过滤器函数应该总有返回值

2九、django-debug-toolbar的做用?

#是django的第三方工具包,给django扩展了调试功能
#包括查看sql语句,db查询次数,request,headers等

30、django中如何实现单元测试?

 

3四、简述MVC和MTV

MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式链接在一块儿。
    模型负责业务对象与数据库的映射(ORM)
    视图负责与用户的交互(页面)
    控制器接受用户的输入调用模型和视图完成用户的请求

Django的MTV分别表明:
       Model(模型):负责业务对象与数据库的对象(ORM)
       Template(模版):负责如何把页面展现给用户
       View(视图):负责业务逻辑,并在适当的时候调用Model和Template
    此外,Django还有一个urls分发器,它的做用是将一个个URL的页面请求分发给不一样的view处理,
view再调用相应的Model和Template。

3五、django的contenttype组件的做用?

在django中,有一个记录了项目中全部model元数据的表,就是ContentType,
表中一条记录对应着一个存在的model,因此能够经过一个ContentType表的id和一个具体表中的id找到任何记录,
及先经过ContenType表的id能够获得某个model,再经过model的id获得具体的对象。

3七、接口的幂等性是什么意思?

 

 

3八、什么是RPC?

远程过程调用 (RPC) 是一种协议,程序可以使用这种协议向网络中的另外一台计算机上的程序请求服务。
RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。

过程:
    首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,而后等待应答信息。
    在服务器端,进程保持睡眠状态直到调用信息到达为止。
    当一个调用信息到达,服务器得到进程参数,计算结果,发送答复信息,而后等待下一个调用信息,
    最后,客户端调用进程接收答复信息,得到进程结果,而后调用执行继续进行。

3九、Http和Https的区别?

一、首先Https是Http的安全版,即HTTP下加入SSL层就是Https;
二、默认端口号不一样,Http是80端口,Https是443端口;
三、Http是超文本传输协议,信息是明文传输,能够自定义证书,在服务端建立一对证书,在客户 端必须携带证书;
四、采用https 的server 必须从CA 申请一个用于证实服务器用途类型的证书. 该证书只有用于对应的server 的时候,客户才信任此主机.

4、Flask框架 

4五、Flask框架的优点?

 

 

4六、Flask框架依赖组件?

 

 

4七、Flask蓝图的做用?

 

 

4八、列举使用过的Flask第三方组件?

 

 

4九、简述Flask上下文管理流程?

 

 

50、Flask中的g的做用?

 

 

5一、Flask中上下文管理主要涉及到了那些相关的类?并描述类主要做用?

 

 

5二、为何要Flask把Local对象中的的值stack 维护成一个列表?

 

 

5三、Flask中多app应用是怎么完成?

 

 

5四、在Flask中实现WebSocket须要什么组件?

 

 

5五、wtforms组件的做用?

 

 

5六、Flask框架默认session处理机制?

 

 

5七、解释Flask框架中的Local对象和threading.local对象的区别?

 

 

5八、Flask中 blinker 是什么?

 

 

5九、SQLAlchemy中的 session和scoped_session 的区别?

 

 

60、SQLAlchemy如何执行原生SQL?

 

 

6一、ORM的实现原理?

 

 

6二、DBUtils模块的做用?

 

6三、如下SQLAlchemy的字段是否正确?若是不正确请更正:

fromdatetime importdatetime

fromsqlalchemy.ext.declarative
importdeclarative_base

fromsqlalchemy importColumn, Integer, String, DateTime



Base = declarative_base()


classUserInfo(Base):
  
    __tablename__ ='userinfo'
  
    id=Column(Integer, primary_key=True, autoincrement=True)

    name =Column(String(64), unique=True)

    ctime =Column(DateTime, default=datetime.now())

   

6四、SQLAchemy中如何为表设置引擎和字符编码?

6五、SQLAchemy中如何设置联合惟一索引?

5、Tornado框架

6六、简述Tornado框架的特色。

6七、简述Tornado框架中Future对象的做用?

6八、Tornado框架中如何编写WebSocket程序?

6九、Tornado中静态文件是如何处理的?
如: <link href="{{static_url("commons.css")}}" rel="stylesheet" />

70、Tornado操做MySQL使用的模块?

7一、Tornado操做redis使用的模块?

7二、简述Tornado框架的适用场景?

6、git

7三、git常见命令做用:

7四、简述如下git中stash命令做用以及相关其余命令。

7五、git 中 merge 和 rebase命令 的区别。

7六、公司如何基于git作的协同开发?

7七、如何基于git实现代码review?

7八、git如何实现v1.0 、v2.0 等版本的管理?

7九、什么是gitlab?

80、github和gitlab的区别?

8一、如何为github上牛逼的开源项目贡献代码?

8二、git中 .gitignore文件的做用?

8三、什么是敏捷开发?

8四、简述 jenkins 工具的做用?

8五、公司如何实现代码发布?

8六、简述 RabbitMQ、Kafka、ZeroMQ的区别?

8七、RabbitMQ如何在消费者获取任务后未处理完前就挂掉时,保证数据不丢失?

8八、RabbitMQ如何对消息作持久化?

8九、RabbitMQ如何控制消息被消费的顺序?

90、如下RabbitMQ的exchange type分别表明什么意思?如:fanout、direct、topic。

9一、简述 celery 是什么以及应用场景?

9二、简述celery运行机制。

9三、celery如何实现定时任务?

9四、简述 celery多任务结构目录?

9五、celery中装饰器 @app.task 和 @shared_task的区别?

8、算法和设计模式

11六、B Tree和B+ Tree的区别?

11七、请列举常见排序并经过代码实现任意三种。

11八、请列举常见查找并经过代码实现任意三种。

11九、请列举你熟悉的设计模式?

设计模式是通过总结、优化的,对咱们常常会碰到的一些编程问题的可重用解决方案。
一个设计模式并不像一个类或一个库那样可以直接做用于咱们的代码。
反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。

这里列举了三种最基本的设计模式:

建立模式,提供实例化的方法,为适合的情况提供相应的对象建立方法。
结构化模式,一般用来处理实体之间的关系,使得这些实体可以更好地协同工做。
行为模式,用于在不一样的实体建进行通讯,为实体之间的通讯提供更容易,更灵活的通讯方法。

120、有没有刷过leetcode?

12一、列举熟悉的的Linux命令。

12二、公司线上服务器是什么系统?

12三、解释 PV、UV 的含义?

#1.pv:页面访问量,没打开一次页面PV计算+1,页面刷新也是
#2.UV:独立访问数,一台电脑终端为一个访客

12四、解释 QPS的含义?

12五、uwsgi和wsgi的区别?

12六、supervisor的做用?

12七、什么是反向代理?

12八、简述SSH的整个过程。

12九、有问题都去那些找解决方案?

130、是否有关注什么技术类的公众号?

13一、最近在研究什么新技术?

13二、是否了解过领域驱动模型?

相关文章
相关标签/搜索