1 Go的內存逃逸如何分析
go build -gcflags=-m main_pointer.go
2 http狀態碼
300 請求的資源可包括多個位置,相應可返回一個資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇
301 永久移動。請求的資源已被永久的移動到新URI,返回信息會包括新的URI,瀏覽器會自動定向到新URI。今后任何新的請求都應使用新的URI代替
302 臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URI
303 查看其它地址。與301類似。使用GET和POST請求查看
304 未修改。所請求的資源未修改,服務器返回此狀態碼時,不會返回任何資源。客戶端通常會緩存訪問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源
3 父子進程共享哪些資源
共享資源
- 文件描述符、環境變量、 工作目錄、 內存映射
獨立資源
- 地址空間、文件描述符的位置指針、 進程ID (PID)
4 零拷貝
sendfile 目的是簡化通過網絡在兩個通道之間進行的數據傳輸過程。sendfile 允許操作系統從 Page Cache 直接將文件發送至 socket 緩存區,節省了內核空間 & 用戶空間的兩次冗余的 cpu 拷貝操作,最后只需要通過 DMA 傳輸將數據復制到網卡。這樣使得調用變得更加簡潔:不僅減少了 CPU 拷貝的次數,由于文件傳輸拷貝僅發生在內核空間,還減少了上下文切換的次數。)。
5 mysql如何枷鎖(非唯一索引等值查詢)
- 當查詢的記錄「存在」時,由于不是唯一索引,所以肯定存在索引值相同的記錄,于是非唯一索引等值查詢的過程是一個掃描的過程,直到掃描到第一個不符合條件的二級索引記錄就停止掃描,然后在掃描的過程中,對掃描到的二級索引記錄加的是 next-key 鎖,而對于第一個不符合條件的二級索引記錄該二級索引的 next-key 鎖會退化成間隙鎖。同時,在符合查詢條件的記錄的主鍵索引上加記錄鎖。
- 當查詢的記錄「不存在」時,掃描到第一條不符合條件的二級索引記錄,該二級索引的 next-key 鎖會退化成間隙鎖。因為不存在滿足查詢條件的記錄,所以不會對主鍵索引加鎖。
6 Redis大量key有相同前綴,如何批量查找
SCAN 0 MATCH user:* COUNT 100
7 如何解決TIMEWAIT過多
- net.ipv4.tcp_tw_reuse 允許將處于TIME_WAIT狀態的套接字重新用于新的連接
- net.ipv4.tcp_fin_timeout 限制系統中TIME_WAIT狀態的連接數量
8 線程獨占哪些資源?
CPU(處理器)時間片、棧空間、寄存器、** 線程ID和線程屬性**
9 內存管理
10 redis數據結構組成
11 redis多線程
Redis 在啟動的時候,默認情況下會額外創建6個線程(這里的線程數不包括主線程)
·Redis-server: Redis的主線程,分別異步處理關閉文件任務、AOF刷盤任務、釋放內存任務;
io thd 1、io thd 2、io thd 3:三個1/0 線程,io-threads 默認是4,所以會啟動3(4-1)個//0多.
線程,用來分擔 Redis 網絡 //O 的壓力。
12 mysql case函數
SELECT CASE WHEN age < 25 OR age IS NULL THEN '25歲以下'WHEN age >= 25 THEN '25歲及以上'END age_cut,COUNT(*)number
FROM user_profile
GROUP BY age_cut
13 窗口函數
(一)聚合窗口函數
常見的聚合函數可以做窗口函數,如AVG()、SUM()、COUNT()、MAX()以及MIN()等
(二)排序窗口函數
對數據進行分組排名,包括ROW_NUMBER()、RANK()、DENSE_RANK()、PERCENT_RANK()、CUME_DIST()以及NTILE()等函數。
使用窗口函數按照dt升序進行排序
row_number 排序結果是 1、2、3、4……
rank 排序結果是 1、2、2、4……
dense_rank 排序結果是 1、2、2、3……
(三)取值窗口函數
用于返回指定位置上的數據行,包括FIRST_VALUE()、LAST_VALUE()、LAG()、LEAD()、NTH_VALUE()等函數。
SELECT *,
lag(amount,1)OVER(PARTITION BY product ORDER BY ym)
FROM sales_monthly;