本文目錄一覽:
python如何把csrftoken寫入cookie
csrftoken這個值一般是作為提交表單的一個隱藏域
input type=”hidden” name=”csrftoken
” value=”xxxxxxxxx”
Python後端工程師面試題目有哪些
一.語言
1.推薦一本看過最好的python書籍?
2.談談python的裝飾器,迭代器,yield?
3.標準庫線程安全的隊列是哪一個?不安全的是哪一個?logging是線程安全的嗎?
4.python適合的場景有哪些?當遇到計算密集型任務怎麼辦?
5.python高並發解決方案?我希望聽到twisted-tornado-gevent,能扯到golang,erlang更好
二.操作系統
可以直接認為是linux,畢竟搞後端的多數是和linux打交道。
1.tcp/udp的區別?tcp粘包是怎麼回事,如何處理?udp有粘包嗎?
2.time_wait是什麼情況?出現過多的close_wait可能是什麼原因?
3.epoll,select的區別?邊緣觸發,水平觸發區別?
三.存儲
存儲可能包含rdbms,nosql以及緩存等,我以mysql,redis舉例
mysql相關
1.談談mysql字符集和排序規則?
2.varchar與char的區別是什麼?大小限制?utf8字符集下varchar最多能存多少個字符
3.primary key和unique的區別?
4.外鍵有什麼用,是否該用外鍵?外鍵一定需要索引嗎?
5.myisam與innodb的區別?innodb的兩階段鎖定協議是什麼情況?
6.索引有什麼用,大致原理是什麼?設計索引有什麼注意點?
redis相關
1.什麼場景用redis,為什麼mysql不適合?
2.談談redis的事務?用事務模擬原子+1操作?原子操作還有其它解決方案嗎?
3.redis內存滿了會怎麼樣?
四.安全
web安全相關
1.sql注入是怎麼產生的,如何防止?
2.xss如何預防?htmlescape後能否避免xss?
3.csrf是什麼?django是如何防範的?
密碼技術
1.什麼是分組加密?加密模式有哪些?ecb和cbc模式有什麼區別?為什麼需要iv向量?
2.簡單說說https的過程?
3.對稱加密與非對稱加密區別?
3.如何生成共享秘鑰? 如何防範中間人攻擊?
五.雜
是否關注新技術啊?golang,rust是否了解?numpy,pandas是啥鳥?
是否緊跟時代潮流?逛不逛微博,刷不刷知乎?
可能你覺得我問的好細,但這好多都是平常經常遇到,並需要解決的,細節更能體現一個人。
如果你覺得小kiss,歡迎投簡歷給我yihaibo@longtugame.com,龍圖遊戲運營支持中心數據分析部招人;覺得有點問題,那還等什麼,趕快來和我交流交流。
更新:討論區挺熱鬧,有人說好簡單,有人說好難,其實我覺得這隻適合面試2~3年工作經驗的後端工程師。真的沒有問
很難的題目,只是可能你平時沒有注意。
在這裡我推薦幾本書吧
python參考手冊,絕對讓你更上一層樓
圖解密碼技術,密碼入門不二之選
mysql技術內幕第五版,有點厚當手冊讀讀,要有耐心,高性能mysql也強烈建議讀讀
effective tcp/ip programming
為什麼評論區有這麼大差異?我想是個人經歷不一樣吧,如果是搞web的對操作系統這塊和密碼技術會偏弱,但如果是系統工程師或是遊戲服務端這塊會明顯偏強。
六.後記
最近我也面試了不少童鞋,我發現能達到要求的真的少之又少,很多hr都說Python是最難招聘的崗位,我想是有道理的,這真的很值得我們去深思?
我想有一部分原因是Python這門語言造成的,會寫Python的人很多,但寫的好的人很少,大部分都把Python當做腳本來寫,缺乏面向對 象,模式的思想。想想Java,大家都習慣了接口,實現分離,設計模式在Java中也喊了很多年,尤其是ssh三大框架一出,用着用着就理所當然的認為就 該這麼做,雖然也有點壞處,但對企業級Java開發無疑是一大進步。
反觀Python,尤其是生成器,協程,元類給Python注入了很大的靈活性,想寫的Pythonic有不小難度,但其實Python高級特性就那麼幾個,幹掉了也就沒有了。
當你覺得Python遇到了瓶頸,不妨停下來好好想想。研究研究設計模式,想想重構,了解領域驅動設計,敏捷開發,再回來讀讀以前寫的代碼,當眼界變高了,代碼也就美了。
當然思想的提高不是一朝一夕,模式,原則會經常讓你糾結,糾結就會思索,思考就走出了自己的路,當然條條大路通羅馬。
數據庫等存儲技術是研發工程師邁不過的坎,對關係數據庫以mysql舉例來說,你必須清楚的知道什麼字段選擇什麼類型,類型位元組大小,限制條件,這 東西也很容易理解,多想想即可,比如set類型,要支持交並等操作,1個位元組只能存8個類別。數據類型搞定了,下面就是索引了,mysql索引種類?主 鍵,唯一索引,普通索引。索引類別,BTree索引,hash索引。索引的優缺點,mysql的索引查找原理,join原理(大部分都是nested loop),以及一些特殊的情況,比如mysql子查詢慢等。其實到這裡研發工程師就差不多,當然你可以繼續深入下去,比如讀寫分離,集群管理,甚至一些 參數調優。
python學科都學習寫什麼
以下是老男孩教育Python全棧課程內容:階段一:Python開發基礎
Python開發基礎課程內容包括:計算機硬件、操作系統原理、安裝linux操作系統、linux操作系統維護常用命令、Python語言介紹、環境安裝、基本語法、基本數據類型、二進制運算、流程控制、字符編碼、文件處理、數據類型、用戶認證、三級菜單程序、購物車程序開發、函數、內置方法、遞歸、迭代器、裝飾器、內置方法、員工信息表開發、模塊的跨目錄導入、常用標準庫學習,b加密\re正則\logging日誌模塊等,軟件開發規範學習,計算器程序、ATM程序開發等。
階段二:Python高級級編編程數據庫開發
Python高級級編編程數據庫開發課程內容包括:面向對象介紹、特性、成員變量、方法、封裝、繼承、多態、類的生成原理、MetaClass、__new__的作用、抽象類、靜態方法、類方法、屬性方法、如何在程序中使用面向對象思想寫程序、選課程序開發、TCP/IP協議介紹、Socket網絡套接字模塊學習、簡單遠程命令執行客戶端開發、C\S架構FTP服務器開發、線程、進程、隊列、IO多路模型、數據庫類型、特性介紹,表字段類型、表結構構建語句、常用增刪改查語句、索引、存儲過程、視圖、觸發器、事務、分組、聚合、分頁、連接池、基於數據庫的學員管理系統開發等。
階段三:前端開發
前端開發課程內容包括:HTML\CSS\JS學習、DOM操作、JSONP、原生Ajax異步加載、購物商城開發、Jquery、動畫效果、事件、定時期、輪播圖、跑馬燈、HTML5\CSS3語法學習、bootstrap、抽屜新熱榜開發、流行前端框架介紹、Vue架構剖析、mvvm開發思想、Vue數據綁定與計算屬性、條件渲染類與樣式綁定、表單控件綁定、事件綁定webpack使用、vue-router使用、vuex單向數據流與應用結構、vuex actions與mutations熱重載、vue單頁面項目實戰開發等。
階段四:WEB框架開發
WEB框架開發課程內容包括:Web框架原理剖析、Web請求生命周期、自行開發簡單的Web框架、MTV\MVC框架介紹、Django框架使用、路由系統、模板引擎、FBV\CBV視圖、Models ORM、FORM、表單驗證、Django session cookie、CSRF驗證、XSS、中間件、分頁、自定義tags、Django Admin、cache系統、信號、message、自定義用戶認證、Memcached、redis緩存學習、RabbitMQ隊列學習、Celery分佈式任務隊列學習、Flask框架、Tornado框架、Restful API、BBS+Blog實戰項目開發等。
階段五:爬蟲開發
爬蟲開發課程內容包括:Requests模塊、BeautifulSoup,Selenium模塊、PhantomJS模塊學習、基於requests實現登陸:抽屜、github、知乎、博客園、爬取拉鉤職位信息、開發Web版微信、高性能IO性能相關模塊:asyncio、aiohttp、grequests、Twisted、自定義開發一個異步非阻塞模塊、驗證碼圖像識別、Scrapy框架以及源碼剖析、框架組件介紹(engine、spider、downloader、scheduler、pipeline)、分佈式爬蟲實戰等。
階段六:全棧項目實戰
全棧項目實戰課程內容包括:互聯網企業專業開發流程講解、git、github協作開發工具講解、任務管理系統講解、接口單元測試、敏捷開發與持續集成介紹、django + uwsgi + nginx生產環境部署學習、接口文檔編寫示例、互聯網企業大型項目架構圖深度講解、CRM客戶關係管理系統開發、路飛學城在線教育平台開發等。
階段七:數據分析
數據分析課程內容包括:金融、股票知識入門股票基本概念、常見投資工具介紹、市基本交易規則、A股構成等,K線、平均線、KDJ、MACD等各項技術指標分析,股市操作模擬盤演示量化策略的開發流程,金融量化與Python,numpy、pandas、matplotlib模塊常用功能學習在線量化投資平台:優礦、聚寬、米筐等介紹和使用、常見量化策略學習,如雙均線策略、因子選股策略、因子選股策略、小市值策略、海龜交易法則、均值回歸、策略、動量策略、反轉策略、羊駝交易法則、PEG策略等、開發一個簡單的量化策略平台,實現選股、擇時、倉位管理、止盈止損、回測結果展示等功能。
階段八:人工智能
人工智能課程內容包括:機器學習要素、常見流派、自然語言識別、分析原理詞向量模型word2vec、剖析分類、聚類、決策樹、隨機森林、回歸以及神經網絡、測試集以及評價標準Python機器學習常用庫scikit-learn、數據預處理、Tensorflow學習、基於Tensorflow的CNN與RNN模型、Caffe兩種常用數據源製作、OpenCV庫詳解、人臉識別技術、車牌自動提取和遮蔽、無人機開發、Keras深度學習、貝葉斯模型、無人駕駛模擬器使用和開發、特斯拉遠程控制API和自動化駕駛開發等。
階段九:自動化運維開發
自動化運維開發課程內容包括:設計符合企業實際需求的CMDB資產管理系統,如安全API接口開發與使用,開發支持windows和linux平台的客戶端,對其它系統開放靈活的api設計與開發IT資產的上線、下線、變更流程等業務流程。IT審計+主機管理系統開發,真實企業系統的用戶行為、管理權限、批量文件操作、用戶登錄報表等。分佈式主機監控系統開發,監控多個服務,多種設備,報警機制,基於http+restful架構開發,實現水平擴展,可輕鬆實現分佈式監控等功能。
階段十:高並發語言GO開發高並發語言GO開發課程內容包括:Golang的發展介紹、開發環境搭建、golang和其他語言對比、字符串詳解、條件判斷、循環、使用數組和map數據類型、go程序編譯和Makefile、gofmt工具、godoc文檔生成工具詳解、斐波那契數列、數據和切片、makenew、字符串、go程序調試、slicemap、map排序、常用標準庫使用、文件增刪改查操作、函數和面向對象詳解、並發、並行與goroute、channel詳解goroute同步、channel、超時與定時器reover捕獲異常、Go高並發模型、Lazy生成器、並發數控制、高並發web服務器的開發等。
Python Post遇到csrftoken問題
我上次在用django的時候遇到過這個問題,資料如下:
django對POST請求需要csrf_token驗證,後端會檢測前端發過來的token,如果有問題可以會出現403Forbidden的錯誤。
這個token是由後端在頁面GET請求頁面文件的時候就放進去的,可以在模板中使用{% csrf_token %},例如表單的POST請求就可以這個做,會生成一個隱藏的表單域,帶有後端響應頁面時塞進來的隨機生成的token值。而ajax的請求可以在HTTP header里把這個值放進去,後端需要響應並返回頁面文件時塞進cookie,以便前端可以拿到這個值然後放到Header里再進行POST請求。
對於POST請求,要想前端有token數據,需要幾個修飾方法decorator method
from django.views.decorators.csrf import csrf_protect
或
from django.views.decorators.csrf import requires_csrf_token
或
from django.views.decorators.csrf import ensure_csrf_cookie
這裡使用的是這個,前端可以從cookie里拿到token值
使用的時候在相應的view或者方法上加上
@ensure_csrf_cookie
例如:
from django.views.decorators.csrf import requires_csrf_token
from django.shortcuts import render
@requires_csrf_token
def my_view(request):
c = {}
c.update(csrf(request))
return HttpResponse(“value”, c)
而要使POST不會檢測token可以使用
@csrf_exempt
對於ajax ,前端需要獲取token
Javascipt
function getCookie(name) {
var cookieValue = null;
if (document.cookie document.cookie != ”) {
var cookies = document.cookie.split(‘;’);
for (var i = 0; i cookies.length; i++) {
var cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + ‘=’)) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function loaddata()
{
var csrftoken = getCookie(‘csrftoken’);
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 xmlhttp.status==200)
{
str = xmlhttp.responseText;
alert(str);
}
}
xmlhttp.open(“POST”,”ajax/”,true);
xmlhttp.setRequestHeader(‘X-CSRFToken’,csrftoken)
xmlhttp.send();
}
要先open(),再setRequestheader(),然後再send()
JQuery 來自官方文檔
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
function sameOrigin(url) {
// test that a given url is a same-origin URL
// url could be relative or scheme relative or absolute
var host = document.location.host; // host + port
var protocol = document.location.protocol;
var sr_origin = ‘//’ + host;
var origin = protocol + sr_origin;
// Allow absolute or scheme relative URLs to same origin
return (url == origin || url.slice(0, origin.length + 1) == origin + ‘/’) ||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + ‘/’) ||
// or any other URL that isn’t scheme relative or absolute i.e relative.
!(/^(\/\/|http:|https:).*/.test(url));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) sameOrigin(settings.url)) {
// Send the token to same-origin, relative URLs only.
// Send the token only if the method warrants CSRF protection
// Using the CSRFToken value acquired earlier
xhr.setRequestHeader(“X-CSRFToken”, csrftoken);
}
}
});
原創文章,作者:YZEOI,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/325424.html