面试总结

多线程是否成倍增加效率

如果是CPU密集型的,每个线程执行一下,相当于单线程再跑,io切换浪费时间
如果是IO密集型的,比如发送一个请求,等待服务器返回的时候,再次发送下一条url请求,这样在时间上复用了,效率也就提高了
如果想利用cpu好python的,可以采用多进程,concurrent.futures中的ProcessPoolExecutor,ThreadPollExecutor
mutiprocessing和gevent

logging 怎么配置,有什么作用

debug
info
warning
error
critical

多线程在项目中哪里用到了

数据库:
1、修改一张表的一列数据如何修改
update table_name set 字段名=新的字段名(值)
alert  table table_name   rename 新表名
alert table table_name add 字段名 数据类型 [约束条件]
修改字段有modify和change两种方法
alert table 表名 modify 字段名 字段类型 【完整约束条件】
alert table 表名 change 旧字段名 新字段名 新数据类型 【完整约束条件】

开启事务:begin  rollback  commit

ajax 如何局部刷新,如何跨域

ajax  是一个javascript + xml  异步执行

Highchart应用在前端还是后端

nginx,uwsgi 

解析器有哪些,默认的   

参考

全局使用

    in settings.py  #直接copy REST_FRAMEWORK到配置文件就行  
        REST_FRAMEWORK = {  
            'DEFAULT_PARSER_CLASSES':[  
                'rest_framework.parsers.JSONParser' #使用的解析器  
                'rest_framework.parsers.FormParser'  
                'rest_framework.parsers.MultiPartParser'  
            ]  
      
        }  
multipart/form-data:当上传图片的时候用的到   === MultiPartParser
JSONParser   ===   application/json
FormParser  === application/x-www-form-urlencoded 
FileUploadParser   === 针对上传文件

业务:

权限是调用的python内置的包吗
权限:怎么做的限制,你做了哪些(按照有哪些表,哪些字段,实现了哪些功能)
权限怎么给经营主任划分的,为什么要分组(权限)
权限设计了多久
你的业务参与了多少(都是你做的吗)
权限怎么实现的(说一下代码)

药品配送审核系统,心脑管家:
    你做了哪些功能,用了多长时间
    
所有的业务你参与了多少

有没有做过地图方面的
用那些软件上线的

复习CRM系统--stack

请介绍下怎么开发的系统:

第一步:url的设计,为每个model设计相对应的url(增删改查)

django的url可以设计二级路由转发和一级路由

crm系统设计,url设计方面,需要考虑一级转发和二级转发,现在我们使用的是一级转发:

设计的时候模仿Admin开发一个注册model的类(StarkSite),这个类内部有一个字典类型的属性,把所有的注册的类存储起来,然后为每个存储的类生成一个相对应的url,每个类都会有增删改查对应的四条url,同时用用户也可以自定义url(在StarkSite下面定义一个函数用来确定用户增加自己的url).每条url都有自己的对应的视图函数。每条url都有一个反向解析

需要注意:用户使用StarkSite注册自己的类的时候,类的一些基本配置默认继承一个类(ModelConfig类)-定制了默认基本的配置,如显示字段控制,多级过滤,定制按钮和默认显示什么样的按钮

路由需要注意的知识点 :

获取model的名称:self.model._meta.model_name 
获取App名称:self.model._meta.app_label 

第二步:

 ChangeList用户可以自定义前端显示定制的字段名称,比如,可定义跟进记录。定义前端显示字段,定制了一个类来进行统一处理,在前端显示字段。

每一条数据,默认编辑字段和删除字段,checkbox字段,编辑字段和删除字段,需要根据用户权限或者用户自定义进行判断

表格头部显示字段的要求:

但是ModelConfig有默认的显示字段,需要有专门的函数处理相应的字段,这个处理函数的目的主要是构建前端显示的字段:如选择框,是否显示编辑、删除按钮。编辑按钮是在用户没有自定义的情况下并且,用户有编辑权限,才把ModelConfig默认编辑按钮添加上,删除按钮用户必须有删除权限

form 组建choice类型有:choicefilet 、multipleChoiceFiled

form前端自动生成:使用form.as_p

modelform需要进行进行更新的时候,需要指定instance=obj,不指定相当于创建

表格主体显示内容要求:

表格主体上的按钮(编辑,删除)咨询医生等按钮需要,根据model获取字段名称,进行字段类型判断,字段类型是否是多对多和一对多进行判断。

添加视图函数:需要判断是GET请求还是POST请求,如果是post请求,需要保存数据且判断是否是pop弹窗

需要注意的是:创建一个函数,隶属于ModelConfig,根据用户当前的model,创建Modelform对象(get_model_form)。这样在实例化的时候,动态的根据用户所在的表结构进行添加数据,判断用户可以自定义Modelform,没有定义使用默认的

编辑视图函数:和添加视图一样,根据用户当前的model,创建Modelform对象(get_model_form)。这样在实例化的时候,动态的根据用户所在的表结构进行添加数据,判断用户可以自定义Modelform,没有定义使用默认的。

用户可以预定义编辑字段,代码实现,get_list_display 进行判断用户是否是,是否设置编辑字段,没有设置  list_display_link=【】,则使用默认的,出现编辑按钮。

如果用户配置了ist_display_link=【】,前端进行body显示字段的时候就需要对出现在ist_display_link=【】中的字段进行设置编辑url


总结:添加视图函数和编辑视图函数都是在一个get_model_form方法上,来判断用户是否自定义了modelform,有就使用用户自定义的,没有就使用默认的

如何给字段添加编辑url?:

 在ModelStark类中进行

用户可以预定义编辑字段,代码实现,get_list_display 进行判断用户是否是,是否设置编辑字段,没有设置  list_display_link=【】,则使用默认的,出现编辑按钮。

如果用户配置了ist_display_link=【】,前端进行body显示字段的时候就需要对出现在ist_display_link=【】中的字段进行设置编辑url

删除视图函数:

 

分页

自定义分页需要获取前端的request.GET----类型QuryDict类型。QuryDict需要设置_mutable=Tur才能修改数据类型

需要记录当前页,数据库中的总条数,每夜显示的条数,当前数字前面和后面的数据。复制当前的请求,显示最多的页码,把分页做成插件,生成特顶的html页码在前端显示就可以

 分页时保留前段的条件:

需要传给组建一个params,分页把该请求条件加到每个按键的后面

批处理

前端批量处理函数,需要自定义一个函数,和编辑函数一样,前端循环的时候,批量处理的select有一个name值,

标签渲染

前端标签渲染,定义一个类,然后通过该类,进行渲染标签,需要判断该类是什么类型的。获取该类下面的所有标签

pop页面需要openner函数

需要在index页面定义一个函数,然后再新建一个pop页面,定义的openner函数需要和index页面的函数一致

 

 

 

如何防范dos攻击

如何使用微信推送消息

快排

 

杭州芸品绿

mysql的查询短链接 长链接

怎么用django中间件应对高并发

如何进行查找死锁的线程

快排

蒂联

filter

map

zip

reduce

django的懶加载

__get__

getattr

__getattribute__

总结:不管属性存在与否,都执行__getattribute__,getattr,访问的属性有get,然会get函数的返回值

io 多路复用

restful 请求方法 header

 

python2   python3

python2 xrange 是生成器,range是列表

python3  range是迭代对象

 

yeild

def count_down(n):
    while n>=0:
        newn = yield n 
        if newn:
            n = newn 
        else:
            n -= 1
            
cd = count_down(5)
for i in cd:
    print(i)
    if i == 5:
        cd.send(3)


5210   #解释器打印出现53210

 高并发,循环引用,装饰器(类)

 

posted @ 2018-06-09 22:47  AndRew-A  阅读(164)  评论(0)    收藏  举报