(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,都須要利用別人已經寫好的。
(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
(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
(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.當有用戶請求過來時,判斷用戶是否在白名單或者在黑名單裏
(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
(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的含義?
四、列舉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上下文管理流程?
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中如何設置聯合惟一索引?
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框架的適用場景?
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的區別?
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二、是否瞭解過領域驅動模型?