ldc

TIM圖片20190917183435

http://www.javashuo.com/article/p-arzamtrk-y.htmlhtml

wusir講
Python垃圾回收機制

1568795352213

引用計數器爲主,標記清除和分代回收爲輔
a.什麼是引用計數器(源碼:object.h)
    當建立一個對象後,python內部有一個變量ob_refcnt保存着使用此內存的個數.
    a = 123 
    b = a 
    del b 
b.  循環引用
    a = [11,22]   a 1
    b = [33,44]
    a.append(b)   b 的引用 2 
    b.append(a)   a 2 
    del a    # a = 0 纔是垃圾 ,纔會被回收
    del b    
    內存中還有a和b [11,22]  .. 計數都是1了

c.  標記清除和分代回收
    python中維護了一個數據結構, 不爲0的對象放入,python解釋器回去逐一查找每一個元素,檢查是否有循環引入,若是有,都-1
    2
    1
    0
    若是是垃圾,就標記0,不是垃圾上升成1代,下一層掃10次,上一層掃1次,(700,10,10) 根據多少開始掃(900,200開始掃...) (時間效率)
在這個例子中程序執行完del語句後,A、B對象已經沒有任何引用指向這兩個對象,可是這兩個對象各包含一個對方對象的引用,雖然最後兩個對象都沒法經過其它變量來引用這兩個對象了,這對GC來講就是兩個非活動對象或者說是垃圾對象,可是他們的引用計數並無減小到零。所以若是是使用引用計數法來管理這兩對象的話,他們並不會被回收,它會一直駐留在內存中,就會形成了內存泄漏(內存空間在使用完畢後未釋放)。爲了解決對象的循環引用問題,Python引入了標記-清除和分代回收兩種GC機制。
a = [11, 22]
b = [33, 44]
a.append(b)  # a [11, 22, [33, 44]]  
b.append(a)  # [33, 44, [11, 22, [...]]] 循環了 a加b的時候,b又加a 
#  b [33,44,[11,22]]  a.append() 多是a[11,22,[33,44],[...]]
若是用兩個隊列實現一個棧?
把後面的幾個添加到b的隊列,而後剩下一個
和上面同樣,把後面的幾個添加到b的隊列,而後剩下一個

1568796930185

什麼是MySQL的存儲過程?
pymysql 
存在數據庫中的一個sql語句,併爲其取一個名字.
-- 建立存儲過程

delimiter //
create procedure p1()
BEGIN
    select * from t1;
END//
delimiter ;

-- 執行存儲過程
call p1()
  • 有參數的python

    對於存儲過程,能夠接收參數,其參數有三類:mysql

    • in 僅用於傳入參數用
    • out 僅用於返回值用
    • inout 既能夠傳入又能夠看成返回值
  • -- 建立存儲過程
    delimiter \\
    create procedure p1(
        in i1 int,
        in i2 int,
        inout i3 int,
        out r1 int
    )
    BEGIN
        DECLARE temp1 int;
        DECLARE temp2 int default 0;
        set temp1 = 1;
        set r1 = i1 + i2 + temp1 + temp2;
        set i3 = i3 + 100;
    end\\
    delimiter ;
    
    -- 執行存儲過程
    set @t1 =4;   # @相似於全局變量
    set @t2 = 0;
    CALL p1 (1, 2 ,@t1, @t2);
    SELECT @t1,@t2;
什麼是MySQL的觸發器?
對某個表進行【增/刪/改】操做的先後若是但願觸發某個特定的行爲時,可使用觸發器,觸發器用於定製用戶對錶的行進行【增/刪/改】先後的行爲。  (相似於裝飾器?)



一、建立基本語法
# 插入前
delimiter //
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW #每行
BEGIN
IF NEW. NAME == 'alex' THEN
    INSERT INTO tb2 (NAME)
VALUES
    ('aa')
END
END//
delimiter ;

..................................after.................
mysql視圖?
CREATE VIEW v1 AS 
select * from score where student_id = 2 and course_id = 1;
查過的結果集當作一張表  (簡化方便,相似於函數?)
select * from v1    (虛擬的)
select * from v1 where sid = 1 ;
http和Https的區別?****
http是超文本傳輸協議,信息是明文傳輸,https 則是具備安全性的ssl加密傳輸協議。

:不安全/80
:安全/443  = http+ssl 

對稱加密: 雙方密鑰相同(123加密123解密,密碼易被劫持)
    非對稱加密:公鑰/私鑰  (加密/解密都行)
數字證書: (機構將公司信息加到證書裏,還有公鑰) / 密鑰本身拿着  訪問網站,瀏覽器生成隨機字符串(對稱密鑰),用公鑰加密,(內存中放着) 發給網站,(私鑰解密)  拿到隨機字符串 . 
而後根據對稱密鑰加密後的消息發送.
用到了對稱密鑰和非對稱密鑰.   非對稱密鑰是傳對稱密鑰的,對稱密鑰是加密的
對稱加密:
    雙方是同樣的,也是明文因此,容易被捕獲和更改. 
非對稱加密: 
    公鑰每一個人都有是用來加密的或者解密,密鑰是惟一的,用來解密.或者加密. b爲了證實是a傳過來的內容,先用a的私鑰加密,而後用b的公鑰加密. 而後b用b的私鑰解密用a的公鑰解密就能夠證實是a傳過來的內容. 
數字簽名:(驗證數據來源以及數據完整性)
    對整個內容加密若是內容多,太浪費時間,用哈希算法,給全部的加個密,爲摘要,而後在對摘要加上a的信息,的hash值爲h1,傳給b,b用a的公鑰解密,成功則說明是a傳過來的,對正文進行hash運算,獲得hash值爲h2, h1=h2,則郵件未被更改,可是不足: c趁a不在,用c的私鑰加密,而後發送了c的內容和公鑰,那麼b接收的就不知道是誰的了.就要用數字證書

非對稱加密:1569227302793git

數字簽名:img程序員

數字證書:imgimg
首先A去找"證書中心"(certificate authority,簡稱CA),爲公鑰作認證。證書中心用本身的私鑰,對A的公鑰和一些相關信息一塊兒加密,生成"數字證書"(Digital Certificate):
A在郵件正文下方除了數字簽名,另外加上這張數字證書
收到Email後用CA的公鑰解密這份數字證書,拿到A的公鑰,而後驗證數字簽名,後面流程就和圖1的流程同樣了
什麼是rpc?
遠程過程調用
api接口能夠(drf)
基於消息隊列 :*聽任務 取任務 (兩個隊列) 第二個:(收結果)
放:(任務信息,隨機字符串(名字))

瞭解https://www.rabbitmq.com/tutorials官方文檔web

1568800809463

redis aof 和 rdb
aof 記錄全部的命令 回覆的慢 執行命令
rdb 快照  每60秒 (到59秒)可能失真
redis和memcache區別?
memcache: 數據類型單一; 沒法持久化;不支持高可用;不支持集羣;
redis: 有5大數據類型;能夠持久化;支持高可用;支持集羣;
lulin面試題:
django中間件
跨域
什麼是跨域?
    當前瀏覽器訪問a.com域名,按鈕ajax向b.com發送請求(能夠發過去,b的服務器也能夠處理,處理完也能夠返回),可是返回到瀏覽器後, 瀏覽器給阻止.
    
爲何會存在跨域?
    瀏覽器具備同源策略.
    
如何解決跨域?
    jsonp 
    cors, 百度設置一個響應頭 Access-Control-Allow-Origin = "*"
    
    def index(request):
    
        data =  HttpResponse('xxxx')
        data['Access-Control-Allow-Origin'] = "*"
        return data
django請求生命週期
ajax
MVC & MTV
  • model view controller
  • model template view
  • 模型 模板 視圖
ORM的批量建立
bulk_create()
其餘的lidaichuang面試題目:

Python和Go的區別?以及各自的優點?
列表生成式的好處?面試

列表推導式是將全部的值一次性加載到內存中

生成器是將列表推導式的[]改爲(),不會將全部的值一次性加載到內存中,延遲計算,一次返回一個結果,它不會一次生成全部的結果

search和match的區別?ajax

match()函數只檢測字符串開頭位置是否匹配,匹配成功纔會返回結果,不然返回None
search()函數會在整個字符串內查找模式匹配,只到找到第一個匹配而後返回一個包含匹配信息的對象,該對象能夠經過調用group()方法獲得匹配的字符串,若是字符串沒有匹配,則返回None。

什麼是貪婪匹配?redis

什麼是貪婪匹配:貪婪匹配在匹配字符串時老是嘗試匹配儘量多的字符。
什麼是非貪婪匹配:與貪婪匹配相反,非貪婪匹配在匹配字符串時老是嘗試匹配儘量少的字符。
在python中默認採用的是貪婪模式,使用非貪婪模式的話,只須要在量詞後面直接加上一個問號」?」。
m1 = re.search(f'\w+',a).group()
m2 = re.search(f'\w+?',a).group()
33dkfkdsji3456
3

面向對象中的__cal__方法的做用?算法

對象後面加括號,觸發執行。
對於 __call__ 方法的執行是由對象後加括號觸發的,即:對象() 或者 類()()

什麼是元類?【很差】

一切皆對象:類實際上就是一個對象

Person類也是一個對象,那他必定是由一個類實例化獲得的,這個類就是元類
type是內置的一個元類,全部的類都是由type實例化獲得的
產生類的類叫作元類
print(type(object))  # type     object 是 type類型
print(issubclass(type, object))  # type 是 object 的子類   # class type(object):

super的做用?【很差】

返回一個父類或兄弟類類型的代理對象,讓你可以調用一些從繼承過來的方法。
它有兩個典型做用:
a. 在單繼承的類層次結構中,super()可用於引用父類而不顯式父類名稱,從而使代碼更易於維護。
b. 在多重繼承中,能夠保證公共父類僅被執行一次。

什麼是偏函數?

因此,簡單總結functools.partial的做用就是,把一個函數的某些參數給固定住(也就是設置默認值),返回一個新的函數,調用這個新函數會更簡單。
int2 = functools.partial(int, base=2)   # 不然的話,默認是10進制
functools.partial就是幫助咱們建立一個偏函數的,不須要咱們本身定義int2(),能夠直接使用下面的代碼建立一個新的函數int2:
def int2(x, base=2):
    return int(x, base)
    
e2:
max2 = functools.partial(max, 10)
  實際上會把10做爲*args的一部分自動加到左邊,也就是:
max2(5, 6, 7)

裝飾器的應用場景?什麼是單例模式?

csrf_token  
自定義標籤,過濾器
auth_required

staticmethod和classmethod的區別?

面向對象的上下文管理?【很差】
棧和隊列的區別?

如何作鏈表的逆置?【回去寫】

class Foo:
     def __init__(self,item):
        self.item = item
        self.next = None
循環反轉單鏈表

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    def ReverseList(self, pHead):
        if not pHead or not pHead.next:
            return pHead
          
        last = None
          
        while pHead:
            tmp = pHead.next
            pHead.next = last
            last = pHead
            pHead = tmp
        return last

什麼是中序遍歷?

先遍歷左子樹,而後訪問根結點,最後遍歷右子樹。

如何將一個列表中第二大的數找到?

對列表進行倒敘排序sorted(),而後取索引爲1的數

若是遙過yield本身實現一個協程?【很差】
async、await關鍵字?【很差】

async 是定義一個協程函數的
阻塞操做必須使用await關鍵字進行掛起
async def request(url):
    print('請求前')
    # response = aiohttp.get(url)
    # 老師模擬的請求我覺得真的請求的,也是請求那裏是 time.sleep() 不支持異步
    await asyncio.sleep(2)  # 阻塞操做必須使用await關鍵字進行掛起
    
for url in urls:
    c = request(url)
    task = asyncio.ensure_future(c)   # 任務對象和協程對象同樣      # 如今還未執行
    # print(task)     # <Task pending coro=<request() running at D:  ...
    task.add_done_callback(callback)    # callback 裏沒有task參數,前面就是task調用的  #   # 報錯: asyncio.base_futures.InvalidStateError: Result is not set.
    loop = asyncio.get_event_loop()
    loop.run_until_complete(task)     # 可是這裏放c 協程對象會出錯 cannot reuse already awaited coroutine
    # print(task)      # <Task finished coro=<request() done, defined at D:  ... # 執行完

什麼是I0多路複用?【很差】
線程池和進程池的用法?

你瞭解的MySQL引影和區別?
組合索引想要命中須要遵循什麼?什麼是MySQL的執行計劃?
什麼是MySQL的慢日誌?【很差】
什麼是分庫分表?【很差】
你能想到的性能優化?

django和flask的區別?

wsgi的做用?
什麼是cgi?【沒講過】
F和Q是什麼?
django的orm中on_delete的做用?
django中方法:only、defer?
django中的 selete_related、prefetch_related的做用?【很差】

有外鍵存在時,能夠很好的減小數據庫請求的次數,提升性能
select_related經過多表join關聯查詢,一次性得到全部數據,只執行一次SQL查詢
prefetch_related分別查詢每一個表,而後根據它們之間的關係進行處理,執行兩次查詢

django如何作讀寫分離?
django如何寫原生SQL?

redis和memcache的區別?

m 只有一種數據類型 字符串  k/v 能夠json字典
redis 五種  
m:沒法持久化(斷電 不行),不支持高可用; 不支持集羣;
redis 能夠持久化  高可用 (哨兵); 集羣;

redis如何保留熱點數據?過時策略
redis的分佈式鎖是什麼?
redis如何實現的高可用?
rabbmitMQ和kafka的區別?

什麼是celery?

一個簡單、靈活且可靠、處理大量消息的分佈式系統,能夠在一臺或者多臺機器上運行。
單個 Celery 進程每分鐘可處理數以百萬計的任務。
經過消息進行通訊,使用消息隊列(broker)在客戶端和消費者之間進行協調。
安裝方式
pip install -U Celery

ORM和原生SQL的區別?
drf如何實現的認證流程?

獲取原生request, self._request
獲取認證類的對象, request.authenticator
1.封裝Request
認證成功,走反射方法
認證失敗,拋異常
實現認證走perform_authentication 
裏面有request.user
獲取認證對象, 進行一步步的認證
            self._authenticate()
執行認證類的authenticate方法
1.若是auth方法拋出異常,self._not_auth()執行
2.有返回值,必須得是元祖(request.user, request.auth)
3.返回None , 當前不處理,下一個認證來處理
重寫Authtication
重寫函數
authenticate
authenticate_header

drf如何實現的截流?

 

gitm何作協同開發?

基於gitlab作的協同開發,每一個人一個分支.

git如何作code review?

基於pull request來實現 (gitee)
組長(贊成,合併)

權限組件的實現流程?權限都用到了那些表?
如何實現粒度控制到按鈕?
若是讓你實現的話,如何實現粒度控制到行?【思考題】
權限信息爲何要放在session中?放在session中有什麼很差的地方?
django中如何實現事務?
crm有應用到數據庫的鎖嗎?
crm系統都有哪些功能?
爲何不用現成的crm而來本身開發?
有據說過有第三方現成的crm嗎?

第二張

深淺拷貝?

淺拷貝: 只拷貝第一層元素
深拷貝: 不可變數據類型共用一個內存空間的值,可變數據類型從新開闢空間,無論嵌套多深

你瞭解的內置函數?【很差】

filter 
map
zip 
reduce

經常使用的模塊?【很差】

os
time
hashilib
sys

什麼是迭代器?什麼是生成器?

擁有__iter__方法和__next__方法
迭代器

面向對象中_new_方法的做用?_call_方法的做用?【很差】

 

進程、線程、協程的區別?【通常】

進程
    特色:操做系統級別 開銷大 數據隔離
         資源分配的最小單位 數據不安全
         能夠利用多核
線程
    特色:操做系統級別 開銷小 數據共享
         被cpu調度的最小單位 數據不安全
         能夠利用多核
協程
    特色:用戶級別  開銷極小 數據共享的
        不能利用多核 從代碼級別來看數據安全
進程
    你用過什麼起進程的模塊麼?
        multprocessing
        concurrent.futrues  進程池
        Process(target=func,args=(參數,)).start()
        join()
        ProcessPoolExcutor

    爲何要起進程?
        爬蟲的時候 數據分析作的比較複雜 比較多  -- 開啓多進程
        爲何要爬蟲?

線程
    你用過多線程麼?  用過、爬蟲
    django(默認就是線程)\socketserver(多線程+io多路複用)\flask(默認用協程,協程找不到,就用線程)
    你知不知道python的GIL鎖
    這個鎖有什麼效果

    你寫代碼的時候用到過哪些鎖
        互斥鎖(只能acquire一次) 遞歸鎖(在一個線程中acquire屢次也不會死鎖)
        互斥鎖 效率高、用好了也不會出錯
    logging queue list 是否線程安全
        logging queue 線程安全
        list 的全部方法都是線程安全的 append insert extend pop
            list[0] += 1 線程不安全了
        dict update setdefault 都是線程安全的
            dic[key] += 1 線程不安全
協程
    gevent  asyncio
    你用過協程麼?
        爬蟲 aiohttp
        web項目 sanic asyncio模塊
    線程和協程的區別
        操做系統控制線程 程序員代碼用戶控制協程
        協程的本質就是一條線程
        線程對於IO操做的感知力更強 :打開文件 網絡操做 時間模塊
        協程對於IO操做的感知力弱不少 :網絡操做 時間操做
        文件操做頻繁的狀況下 協程沒法規避掉這部分io操做
    協程有哪些模塊?
        gevent
        acyncio :aiohttp sanic

什麼是GL鎖?

GIL:全局解釋器鎖 , Cpython解釋器下的
,致使了同一進程中多個線程不能利用多核
    相對安全  gc垃圾回收機制,不想加太多細粒度的鎖

TCP三次握手和四次揮手?

三次握手
tcp協議在創建鏈接的時候經歷的過程
第一次由客戶端向server端發送Syn請求
server端在發送ack回覆的時候順便發送syn請求
客戶端收到請求和回覆再確認發送一次ack請求
就創建起一個全雙工的通訊
四次揮手
tcp協議 再斷開鏈接的時候經歷的過程
第一次由客戶端或者server端發起 發送FIN請求
對方回覆ack
對方發送fin請求
接收並回復ack
斷開了兩端的鏈接

爲何要有三次握手和四次揮手?

 

OSI7層模型?爲何要有這麼多層?

應用層 http https ftp snmp  (會話層 表示層 應用層)
傳輸層 tcp udp 四層路由器 四層交換機
網絡層 ip     路由器 三層交換機
數據鏈路層 arp 交換機 網卡
物理層   

分層的目的是利用層次結構能夠把開放系統的信息交換問題分解到一系列容易控制的軟硬件模塊-層中,而各層能夠根據須要獨立進行修改或擴充功能,同時,有利於個不一樣製造廠家的設備互連,也有利於你們學習、理解數據通信網絡。
OSI參考模型中不一樣層完成不一樣的功能,各層相互配合經過標準的接口進行通訊。

left join和inner join的區別?【很差】

外連接之左鏈接:優先顯示左表所有記錄
全外鏈接:顯示左右兩個表所有記錄

char和varchar的區別?

varchar 變長的 時間換空間型
char 定長的

如何導出和導入數據?【很差】

組合索引想要命中索引應該遵循什麼原則?【很差】

列舉http請求頭?

user-agent
session 
cookie

請求方法:

get 
post 
put : update
delete
options 
patch : partial_update
head
trace

列舉http常見的狀態碼?

1xx(消息)   接受了 還沒處理完
2xx(成功)   接受理解處理完
3xx(重定向)  訪問了一會又去訪問了別的(更新的) 
             老網站大用戶量,從新推廣開新域名 跳轉:localtion.href='網址' 跳過去了
4xx(請求錯誤)  請求不和發
5xx (服務器錯誤)  服務器在處理某個正確請求是發生錯誤

django請求生命週期。

請求進來,路由系統,先走as_view(),而後在走dispatch,反射
def as_view():
​ def view():
​ return view
而後至關於執行的view()函數 as_view()

就成fbv那樣了, 執行的view , 而後就是 view() : def view() : return self.dispatch() # drf , 請求封裝 ,認證, 權限 , 節流, 反射對應的method執行
走models數據操做 走templates返回頁面 中間件 response回去

列舉django的orm操做?
django orm中on_delete的做用?
django如何執行原生SQL?

項目的功能?發佈流程?實現方式?

ansible模塊?
ansible 和saltstack的對比?
ansible連不上遠程機器怎麼辦?
項目實現時間?負責內容?
協同合做?
git 經常使用命令?

git init
git add
git commit -m 」 「
git push
git pull
svn:
區域:
工做區: 當前的目錄
緩存區: add以後的區域
本地倉庫:commit以後的區域
遠程倉庫:
git log 查看當前版本以前的全部的提交記錄
git reflog 查看全部的提交記錄
git log -n # 顯示最近的#條數據
git log -p 對比每次提交的差別
git log --format="%an:%ae:%s:%h" 自定義輸出格式
git reset --hard hash值 回滾到自定的版本
git checkout -- file 將文件回滾到最近的一次提交
git status 查看狀態
git reset HEAD file 將制定的文件從緩存區拉取到工做區,只是顏色的變化
git diff 對比工做區和本地倉庫的區別
git diff --cached 對比本地倉庫和緩存區的區別

git stash
git stash list 查看stash
git stash drop 刪除快照
git stash pop 恢復快照並刪除快照 = git stash apply + git stash drop
git stash apply stashid 恢復快照

git branch 查看分支
git branch name 新建分支
git checkout name 切換分支
git branch -d name 刪除分支
git merge name 在合併到的分支上合併
git checkout -b name 建立分支並切換分支=git branch name +git chekcout name

git tag 查看標籤
git tag -a name -m 「」 建立一個tag
git tag -a name -m "" hash 以hash爲模板建立一個tag
git tag -d name 刪除一個本地的tag git push origin --tags
git tag -d v0.5 #刪除本地
git push origin :refs/tags/name 刪除遠程倉庫的tag
git push origin :refs/tags/v0.5 #往上推送一個空的=刪除遠程

git clone 將遠程倉庫的代碼拉取到本地,默認是master
git push origin master 上傳
git pull origin dev 下載

新電腦如何快速拿到代碼?【很差】

環境搭建
安裝所須要的模塊(requirement)
數據庫(和老闆要測試庫或者手動搭建一個)
功能和url去項目中找代碼加註釋(粗略看,抓緊爲公司辦事)
切記: 不要多問技術問題,能夠問業務問題
主動:彙報最近的工做狀況(週報).

celery使用方式?
爲何要使用celery執行異步任務?
如何代碼實現異步?
如何單獨文件上傳?exce表如何設計?
redis數據類型?

redis是一種高級的key:value存儲系統,其中value支持五種數據類型
字符串(strings)
散列(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)

redis 字符串經常使用方法?

set   設置key
get   獲取key
append  追加string
mset   設置多個鍵值對
mget   獲取多個鍵值對
del  刪除key
incr  遞增+1
decr  遞減-1

redis 超時時間?【很差】

redis 的使用場景?【不知道】

性能高,讀取速度10萬次每秒
寫入速度8萬次每秒
全部操做支持原子性

用做緩存數據庫,數據放在內存中
替代某些場景下的mysql,如社交類app
大型系統中,能夠存儲session信息,購物車訂單

運維開發幾我的?離職緣由?

redis面試題:

redis和memcached比較?
redis中數據庫默認是多少個db 及做用?
python操做redis的模塊?
若是redis中的某個列表中的數據量很是大,若是實現循環顯示每個值?
redis如何實現主從複製?以及數據同步機制?
redis中的sentinel的做用?
如何實現redis集羣?
redis中默認有多少個哈希槽?
簡述redis的有哪幾種持久化策略及比較?
列舉redis支持的過時策略。
MySQL 裏有 2000w 數據,redis 中只存 20w 的數據,如何保證 redis 中都是熱點數據?
寫代碼,基於redis的列表實現 先進先出、後進先出隊列、優先級隊列。
如何基於redis實現消息隊列?
如何基於redis實現發佈和訂閱?以及發佈訂閱和消息隊列的區別?
什麼是codis及做用?
什麼是twemproxy及做用?
寫代碼實現redis事務操做。
redis中的watch的命令的做用?
基於redis如何實現商城商品數量計數器?
簡述redis分佈式鎖和redlock的實現機制。
什麼是一致性哈希?Python中是否有相應模塊?
如何高效的找到redis中全部以oldboy開頭的key?
相關文章
相關標籤/搜索