複習

Python,是j解釋性語言,執行時先編譯後解釋html

推薦博客:https://www.cnblogs.com/aiyr/p/6867732.html前端

.py .pyc .pyw .pyw .pyo .pyd的區別 ,推薦博客:https://blog.csdn.net/feeltouch/article/details/45952003vue

.py 源代碼文件python

.pyc 編譯後的文件(商業用途防止泄露源碼)   .pyw 運行有圖形界面  .pyo優化編譯後的文件mysql

.pyd  .pyd文件並非使用python語言編寫的,而是使用其餘語言編寫的Python擴展模塊,nginx

.pyd文件是用D語言按照必定的格式編寫,並處理成二進制文件。那麼什麼是D語言呢??它是c/c++的綜合進化版,不只具備兩者的所有優勢,並且總體性能更佳,可是其抽象程度高c++

 

def quicksortshort(arr):
return [] if arr==[] else quicksortshort([y for y in arr[1:] if y<arr[0]]) + [arr[0]]+ quicksortshort([y for y in arr[1:] if y>=arr[0]])
一行代碼寫快排git

 

幾隻球隊比賽,結果以下
id  球隊   結果(勝是1,敗是0)
1	hebei		1
2	shanxi		1
3	henan		0
4	shandong	0
5	hebei		1
6	shanxi		0
7	guangzhou	1
8	guangzhou	1
9	hebei		0

要求查詢結果以下
id   name        勝    敗
 1    hebei
 2	 shanxi
 3	 henan
 4	 shandong
 5	 guangzhou


set @rownum=0;
select @rownum:=@rownum+1 AS id,C.name,C.acount as 勝,D.bcount as 負 from 
(SELECT A.name,acount from 
(select name  from `match` GROUP BY name ) as A
LEFT JOIN
(SELECT name,count(result) as acount from `match` WHERE result=1 GROUP BY name) as B
on A.name = B.name) as C
LEFT JOIN
(SELECT name,count(result) as bcount from `match` WHERE result=0 GROUP BY name) as D
on C.name = D.name

  

 

裝飾器:在不改變裝飾器的狀況下,給裝飾器的執行加上log信息web

給裝飾器加一層裝飾器redis

from functools import wraps

from logger.log import get_logger
import traceback
def decoratore(func):
    @wraps(func)
    def log(*args,**kwargs):
        try:
            print("當前運行方法",func.__name__)
            return func(*args,**kwargs)
        except Exception as e:
            get_logger().error(f"{func.__name__} is error,here are details:{traceback.format_exc()}")
    return log
 
 
字典相關:
dict.setdefault(k ,v)   # 字典的setdefault屬性,當字典中沒有鍵k時才設置鍵值對 k ,有則不設置


from collections import defaultdict   # 設置字典默認的值,當字典只有key沒有值時,默認的值
dic = defaultdict(lambda :{'a':[]})  # 這裏的參數必須是可調用的函數
dic['k1']['a'].append('111')
dic['k2']
print(dict(dic))  # {'k1': {'a': ['111']}, 'k2': {'a': []}}  再轉化回字典

python 引用變量時,看變量是不是可變變量(列表,字符串)仍是不可變變量(字符串),可變變量引用的是空間,而後若是是不可變變量,看不可變變量相對於引用處是局部變量仍是非局部變量,若是是局部變量,那引用的是值,不然引用的仍是空間

深度優先對應的是棧,棧對應的是遞歸
廣度優先對應的是隊列

基於爬蟲的推薦系統
爬取各大門戶網站的網頁新聞,作上標記,使用百度AI分析關鍵字,文章分類,保存在數據庫中,而後在網頁中顯示,當用戶點擊時,記錄用戶點擊文章的標籤類型,而後作一個權重,更多的推薦這個標籤下的文章

分佈式爬蟲通常用於處理量特別大的數據,超過500萬條,



面向對象,雙下劃線函數
結構分析
	靜態變量(靜態字段)
	私有靜態變量(私有靜態字段)  變量名前有__
	普通方法(構造方法)
		對象屬性(普通字段)
		私有對象屬性(私有普通字段  屬性名前有__  )
	私有方法  方法名前有__
	類方法  方法名上有@classmethod  定義類方法,至少有一個cls參數
	靜態方法  方法名上有@staticmethod
	將方法變爲屬性的方法  方法名上有@property

# 反射 自省函數
hasattr(obj,'name')
getattr(obj,'name')
setattr(obj,'name')
delattr(obj,'name')

__len__
__hash__
__str__ 	打印對象默認輸出該方法的返回值
__repr__  	定義了__repr__後,repr(對象)時,默認返回該方法的返回值
__call__  	對象後面加括號觸發執行
__eq__  	當語句出現雙等號時執行此方法
__del__ 	無須定義,Python個解釋器自動執行
__new__  	類執行__init__方法前執行__new__方法,詳細解釋見保存的網上的博客
__init__	init 在對象建立後,對對象進行初始化。new 是在對象建立以前建立一個對象,並將該對象返回給 init
__iter__ 	可迭代對象內部含有這個方法
__next__ 	迭代器內部含有這個方法
__getitem__ 定義迭代器類,能夠進行索引
__slot__ 	限制實例屬性(僅對當前類有效,對子類無效)
__getattr__ 當調用不存在的屬性時調用此方法來嘗試得到屬性
@property 將方法變爲屬性(即不用加括號就能夠調用方法)
@xxx.setter 把一個setter方法變爲屬性並賦值,當對象調用xxx方法進行賦值時觸發此方法,如
	class Student(object):

		@property
		def birth(self):
			return self._birth

		@birth.setter
		def birth(self, value):
			self._birth = value

		@property
		def age(self):  #只定義getter方法,不定義setter方法就是一個只讀屬性
			return 2015 - self._birth

	s1 = Student()
	s1.birth = 1995  # 這裏進行了賦值操做,調用birth()方法
	print(s1.age)

 

處理高併發:
  負載均衡,讀寫分離,緩存(分佈式)
  cdn dns

 

老村長複習  

路飛

    自我介紹
        
        劉志超,
        後端開發
        百分之80代碼我寫的

    項目背景
        
        2012年 賣視頻 + 加羣  1000
        2016年 51CTO, 視頻給51CTO, 老師直播(一週1到2次) + 答疑  5000 - 7000
        2016年末  微服務課程  一對一VIP導師服務 (學員能夠對導師提出問題, )       

            導師不負責任
            導師不夠用
            對學生沒有監督
        
        2017年7月 路飛正式成立了
            
            願景 在線上教育平臺學習, 提升學員完課率
            
    創始團隊
        
        CEO 1
            把控全局
            提出想法
            
        產品 1
            分析需求
            寫出詳細的需求方案
            
        UI 1
            根據產品的原型圖, 設計頁面
            
        前端 1
            負責前端項目頁面搭建
        
        後端 1.5 接口開發 1 管理後臺
            根據給出需求文檔 實現接口
        
        測試 1
            測試寫的項目
            
            bug 禪道軟件 
             
        運營 1
            負責網站運營
            
        運維 1
            負責項目的上線和部署
            
    項目架構
            
        主站
            全球用戶
            
            初版(2017年7月 -- 2017年11月)  維護2個月 (修復bug, 推廣活動)
            
                課程模塊|(2-3天)
                    課程列表獲取
                    課程詳情展現
                    課程評論
                    課程的課時
                    課程的常見問題
                
                登陸註冊
                    登陸: 滑動驗證碼
                        
                        防止盜刷接口
                        
                        極驗驗證碼
                        
                        
                    註冊: 發短信
                        阿里雲的服務 短信價格 4分5
                    
                
                購物車模塊
                    redis
                    
                        1, 購物車操做比較頻繁, 避免屢次查詢數據庫, 減小查詢數據庫壓力
                        2, redis 存取速度快
                        
                    
                    哈希
                        SHOPPING_CAR {
                            user_id [],
                            user_id [],
                            user_id [],
                            user_id [],
                        }
                        
                        user_id_course_id 
                            
                            有效期 , 價格
                        
                        使用這種數據結構 存取方便, 使用靈活
                        
                    列表
                    
                
                支付模塊
                
                    數據存儲 redis 
                        
                    商品 -> 課程優惠券 -> 通用優惠券 -> 貝里 -> 實際付款金額
                    
                    剖析這塊兒業務需求
                    時序圖
                    再去寫代碼
                    
                    調用第三方支付業務
                        
                    用戶付款
                    
                    付款成功:
                        
                        1, 修改訂單狀態
                        2, 訂單下所購買的課程, 建立報名的課程
                        3, 運營(班主任) 學員分配導師
                        4,         報名記錄 -> 導師 
                                    分配成功 給導師分配一筆凍結的輔導費用
                                    微信通知:
                                        通知到 導師,學員 是誰
                                        
                                學員提交做業:
                                    微信通知: 
                                    
                                導師批改做業:
                                    微信通知:
                                    
                                模塊下做業完成:
                                        
                                    模塊考覈 
                                        遠程 
                                        
                                    考覈經過, 開通下一個模塊
                                    
                        5, 獎懲機制
                            
                            導師:
                                
                                7天沒有跟進學員, 扣貝里 500 
                                24小時沒有批改做業, 扣貝里 500
                                
                            學員:    
                                做業:
                                    B+ 獎勵
                                    週期 獎勵 
                                    
                微信服務號模塊
                        
                報名模塊            

                提現模塊
                    
                    實名認證
                    
                    涉及到支付寶的轉帳API
                
                
                資訊模塊
                    
            
            第二版(2018年3月 -- 2018年6月)
                
                學 練 改 管 測
                
                題庫
                
                爲何要作題庫?
                
                推薦不同的題的話
                    
                    網站進行埋點, 用戶行爲統計
                    
                    看視頻的次數, 看視頻的時長, 
                    
                    分配題目
        
            
            第三版(2018年6月 -- 至今)
                    
                問答系統
                
                    {
                        
                    }
                
                評價系統()
                    
                    批改以後 學員針對於這個做業記錄 -> 
                    
                    提出問題 導師解答 針對於這條問題是否是能夠評價 -> 
                    
                    添加跟進記錄 針對跟進記錄進行評價 -> 
                    
                    低分評價 -> 形式 通知到 管理員 
                    
                視頻 
                    
                    第三方: 免費的視頻 阿里雲的服務  0.24元
                            收費的視頻 保利威視頻    0.5元
                            
                
        
        管理後臺
            運營用戶
            做用: 
        
        導師後臺
            導師後臺
            做用: 

    技術棧:
    
        nginx
            web 服務器
            
            提升併發(動靜分離, 負載均衡, 反向代理)
        
        uwsgi
            橋樑 鏈接nginx和django服務
        
        django + drf
        
            提供接口服務
        
        vue
            前端數據展現
        
        mysql
            數據持久化存儲
        
        redis
            緩存, 
            可能常常不變動的數據且常常被查詢, 能夠放緩存
            
            緩存的數據結構都有哪些應用場景?
        
        celery
            1, 定時任務(場景: 定時跑懲罰的腳本)
            2, 異步任務(場景: 發送郵件)
        
        sentry 
            logging 記錄錯誤日誌
                
            錯誤日誌收集起來, 頁面可視化
            
        jenkins     
            持續集成的項目管理工具
            
            CI  
                
        git
            代碼版本控制
            協同開發
    
        虛擬環境
            項目環境隔離
        
        第三方服務插件
            阿里雲短信服務 視頻服務
            支付寶支付接口 轉帳 實名認證 
            微信服務號開發(發送消息, ) 微信支付
            
    項目中遇到的問題?
        
        不會寫? 
        
            畫圖 涉及到表操做有哪些             
            映射到代碼
        
        跨域, 是怎麼解決的?
            先後端 
            設置響應頭
            
        支付成功, 服務器宕機了?
            24小時, 2分鐘 4分鐘 8分鐘 ...
            
        防止支付在短期內建立不少次
            前端
                把按鈕禁掉, 作一些友好提示
                
            後端
                1, 接口頻率限制
                2, 首次下單, 清空緩存訂單信息, 再次點擊, 若是沒有就提示異常
                
        redis 宕機了, 緩存在購物車的數據怎麼辦?
            
            redis 持久化
                
                AOF
                RDB
            
            redis 哨兵監控, 處於一個高可用的狀態
            
        redis 應用場景
        
            1, 哈希  計數器
            2, 哈希  緩存購物車數據
                        
        拋出內存錯誤
        
            uwsgi 內存
                
        邏輯嚴謹清晰
        
            course["seciton"]
            course.get("seciton", 0)
        
        加強的代碼容錯性
            
        新功能:
            
            產品 -> 原型圖(UI), 產品需求文檔(開發)
            
            UI   -> 按照原型圖   -> 設計圖
            
            開發 -> 產品需求文檔 -> 概要設計文檔
            
            測試 -> 測試用例  
            
            開發 -> 按照設計圖 -> 前端: 作頁面, 後端: 接口開發
            
            先後端基本接口聯調完成, 就給出一個版本
            
            測試 -> 根據測試用例去測功能
                
                第一輪: 
                
                第二輪: 
                
                第三輪: UI + 產品驗收

            公測版本
            
            發佈到預發佈 
            
                一輪測試 
            
            發佈到正式環境
            
                1, 涉及表結構更新
                    sql 執行
                2, 經過jenkins上線
                3, 測試
                
    
    項目部署:
        
        2臺前端 
        2臺後端
        1臺redis
        1臺mysql
        1臺預發佈
        1臺測試機
        
    天天 100行左右代碼
    
    一共 3.7萬行代碼 5W(包含 註釋行 + 空行)
    
    項目中有什麼亮點?
    
        1, 根據現有的業務抽離出他們公有的部分, 寫成一個組件
        
        2, 項目架構很好, 支持服務器橫向擴展(增長服務器組, 提升併發) 
        
        3, 引用一些新的技術, 提升生產效率
        
    


        
        
View Code

 

同步和異步關注的是消息通訊機制
	同步:發出一個調用,沒有獲得結果,該調用不返回
	異步:調用發出後,這個調用直接返回,被調用者執行完後經過狀態、通知來通知調用者
阻塞和非阻塞關注的是程序在等待調用結果(消息、返回值)時的狀態

  

 推薦博客:http://www.cnblogs.com/it-xiaozhi/p/9906026.html

                https://www.cnblogs.com/it-xiaozhi/p/9906142.html

相關文章
相關標籤/搜索