位元組跳動dns伺服器ip
『壹』 位元組跳動的機房在什麼位置
在數據彎余中心。
位元組跳動採用的是橫跨多個機房的聯晌戚邦大集群部署模式,即HDFS只有一個集群,這個集群有多個nameservice。
北京位元組跳動科技有限公司成立於2012年,是中國北京的一家信息科技公司,地址位於北京市海淀區知春路甲48號。獨立研發的「今日頭條」客戶端,通過海量信息採集、深度數據挖掘和用戶行為分析,為用戶智能推薦個性化信息,從而開創了一種全新的新聞閱讀模式。2019年3月,位元組跳動收購了上海墨數碼科技有限公司,加快布局游戲領域。4月25日,SmartisanOS已經成為位元組跳動旗下子公司的產品。5月19日,社交產品「飛聊」上線。6月,位元組跳動以12.6億人民幣的價格收購了虎撲30%的股權,成為其第一大股東。位元組范是位元組跳動企業文化的重要組成部分,是共同認可的行為准則。追求極致,務實敢為,開放謙遜,坦誠清晰,始宴鬧陵終創業,多元兼容。
『貳』 抖音域名ip地址
抖音域名ip地址查看方法如下:
1、打開抖音點擊下方我進入個人主頁。2、進入個人主頁點擊介紹頁面的「+」號處進入。3、最後在所在地下方就能看到ip屬地。
抖音,是由位元組跳動孵化的一款音樂創意短視頻社交軟體。抖音破紅線,該軟體於2016年9月20日上線,是一個面向全年齡的短視頻社區平台,用戶可以通過這款軟體選擇歌曲,拍攝音樂作品形成自己的作品。
『叄』 tiktok屬於中國嗎
屬於。
TikTok當然是中國的,是中國公司,屬於位元組跳動。
之前美國政府宣布將封禁TikTok,並要求在劃定時間內出售在美的營業,否則將對其舉行封殺。雖然罩雀中間鬧過一段時間的風波,位元組也被打成火星企業。
但是最後在商務部的強力配合支持讓悶悔下,最後位元組跳動選擇了不賣TikTok。
22年9月15日,經央坦正視新聞報道的最終解決方案是:為確保1億美國用戶能夠繼續使用TikTok,滿足美國政府監管要求,加強TikTok美國業務,位元組跳動、甲骨文、沃爾瑪對TikTok的合作形成原則性共識。
『肆』 位元組跳動是用哪個雲端伺服器的
位元組敬銀跳動全用自己開發的伺服器,硬體找代工廠購買碧塌,軟體是自己開發的。不僅在國內有數據中心,也開始布局海外,亮慧宴印度也有數據中心
『伍』 位元組跳動也加入了造晶元的行列,他們在打什麼算盤
位元組跳動加入了造晶元的行列。在打什麼算盤
隨著互聯網的不斷發展,人工智慧的晶元競爭也將會成為新一輪的變革的因素,互聯網企業業開始進攻晶元領域。
互聯網企業進入晶元領域基本上著手於AI晶元或者Arm伺服器晶元。一旦研發並應用成功,對於位元組跳動的效果幾乎也是立竿見影的。不過對於位元組跳動來說,其野心不止雲計算。隨著5G和萬物互聯時代的到來,位元組跳動布局雲計算或許是在為其進軍IOT領域做鋪墊。
所以說向雲市場以外的其他市場拓展或許將成為位元組跳動未來的發展方向之一。
『陸』 位元組跳動高級測試工程師面試問題—親測
1.測試微信的朋友圈功能
功能測試(文字、視頻、文字長度、圖片大小、可見、位置、提醒、瀏覽、長文字處理,評論)
界面易用性測試
中斷測試
網路測試、弱網測試
兼容性測試
安全測試
性能測試(伺服器、客戶端、壓力穩定性測試)
2.函數重載
python不支持函數重載,用繼承可實現函數重寫,具體自行網路
3.redis數據類型
string,hash,List,set,sorted set
4.sql鎖----忘記當時問我什麼了
5.liuux修改文件中的指定數據
sed -i 's/book/books/g' file 匹配文件中每一行的第一個book替代為books
sed 's/book/books/g' file 替代文件中每一行的所有匹配
6.深拷貝和淺拷貝有什麼區別?
淺拷貝,復制的對象變了,但是復制對象的元素的地址復制完是沒有改變的,當改變了復制對象的可變元素時,復制出的元素也跟著變化
深拷貝,復制的的對象變了,復制後的元素地址可變元素如list的地址變化(復制對象和拷貝對象所有的可變元素地址沒有相同的),字元等不會變化,改變可變元素的值,復制後的值不會變化
7.三次握手,四次揮手
8.http方法,缺拍哪個方法每次返回都是一樣的
get、post、head、delete、
9.哪個數據類型不能修改
元組
10.鏈表成對調換
class ListNode:
def __init__(self,x):
self.val = x
self.next = none
class Solution(object):
def swapPairs(sele,head):
if not head or not head.next:
return head
tmp = head.next
head.next = self.swapPairs(tmp,next)
tmp.next = head
return tmp
11.將列表中重復的數去除並不改變順序:
li = ['a','b','b','c','d','a','c']
list = []
for i in li:
if i not in list[]
list.append.(i)
print list
當然問題肯定不止這些,因為我後面表現不好所以只問了伏殲羨這么多,但是朋友圈問題我看了很多帖子和親身經歷,都改喊是出場機率特別高
沒有答案的,知道的也可以告訴我
『柒』 位元組跳動一下子消失,無法輸入是怎麼回事
字跳動一下子消失無法敏賣做輸入的情況可能是由於網路問題或者伺服器問題造成的。可能是由於網路不穩定或者伺服器出現故障,導致無法正常訪問字跳動的網站配戚,從而導致無法輸入。此外,也可能是由於字跳動網站自身的原因,比如網站維護或者網站更新,導致無法訪問字跳動網站,從而導致無法輸入。因此,如果出現字跳動一下子消失無法輸入的情況,可以嘗試重新連接網路,或者稍後再橋衡試,以便解決這個問題。
『捌』 牛客網位元組跳動面試題解析
1)
題目給畢擾出的初始值是在計算機存儲形式,即補碼形式。a為負數,b為整數。
a-b = a + (-b)——思路是先得到(-b)的補碼形式,然後將a的補碼與(-b)的補碼相加。
a的補碼題目已給出: 0xF000000000000000
-b的原碼:0xFFFFFFFFFFFFFFFF
-b的反碼:0x8000000000000000
-b的補碼:0x8000000000000001
a-b = 0xF000000000000000 + 0x8000000000000001
= 0x7000000000000001
= 2^62 + 2^61 + 2^60 + 1
負數-正數 = 正數?這是因為計算機存儲位元組長度的限制導致的最高位溢出。
2)
Boolean([]) //true
布爾類型里只有這幾參數個返回false,其它都為true
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean('') // false
布爾類型與其它任何類型進行比較,布爾類型將會轉換為number類型。
Number([])返回0所以第二題為true
Number轉換類型的參數如果為對象返回的就是NaN,
那麼Number({})返回的就是NaN。
通過Object.prototype.toString.call({})來判斷類型,0與NaN相比為false
所以手困旦 true true false
3)
塊元素
address - 地址
blockquote - 塊引用
center - 舉中對齊塊
dir - 目錄列表
div - 常用塊級容易,也是css layout的主要標簽
dl - 定義列表
fieldset - form控制組
form - 交互表單
h1 - 大標題
h2 - 副標題
h3 - 3級標題
h4 - 4級標題
h5 - 5級標題
h6 - 6級標題
hr - 水平分隔線
isindex - input prompt
menu - 菜單列表尺型
noframes - frames可選內容6)
一、無繼承性的屬性
1、display:規定元素應該生成的框的類型
2、文本屬性:
vertical-align:垂直文本對齊
text-decoration:規定添加到文本的裝飾
text-shadow:文本陰影效果
white-space:空白符的處理
unicode-bidi:設置文本的方向
3、盒子模型的屬性:width、height、margin 、margin-top、margin-right、margin-bottom、margin-left、border、border-style、border-top-style、border-right-style、border-bottom-style、border-left-style、border-width、border-top-width、border-right-right、border-bottom-width、border-left-width、border-color、border-top-color、border-right-color、border-bottom-color、border-left-color、border-top、border-right、border-bottom、border-left、padding、padding-top、padding-right、padding-bottom、padding-left
4、背景屬性:background、background-color、background-image、background-repeat、background-position、background-attachment
5、定位屬性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
6、生成內容屬性:content、counter-reset、counter-increment
7、輪廓樣式屬性:outline-style、outline-width、outline-color、outline
8、頁面樣式屬性:size、page-break-before、page-break-after
9、聲,(對於不支持frame的瀏覽器顯示此區塊內容
noscript - )可選腳本內容(對於不支持script的瀏覽器顯示此內容)
ol - 排序表單
p - 段落
pre - 格式化文本
table - 表格
ul - 非排序列表
4)
通過iframe設置document.domain可以實現跨域
5)
ES6
A:類必須使用new調用,否則會報錯。這是它跟普通構造函數的一個主要區別,後者不用new也可以執行。
B:export命令規定的是對外的介面,必須與模塊內部的變數建立一一對應關系。
// 報錯
export 1;
// 報錯
var m = 1;
export m;
上面兩種寫法都會報錯,因為沒有提供對外的介面。第一種寫法直接輸出 1,第二種寫法通過變數m,還是直接輸出 1。1隻是一個值,不是介面。正確的寫法是下面這樣。
// 寫法一
export var m = 1;
// 寫法二
var m = 1;
export {m};
// 寫法三
var n = 1;
export {n as m};
D:A模塊對外暴露了一個對象,引入的時候需要使用解構賦值
上面兩種寫法都會報錯,因為沒有提供對外的介面。第一種寫法直接輸出 1,第二種寫法通過變數m,還是直接輸出 1。1隻是一個值,不是介面。正確的寫法是下面這樣。
import {readFile} from 『A'
6)
一、無繼承性的屬性
1、display:規定元素應該生成的框的類型
2、文本屬性:
vertical-align:垂直文本對齊
text-decoration:規定添加到文本的裝飾
text-shadow:文本陰影效果
white-space:空白符的處理
unicode-bidi:設置文本的方向
3、盒子模型的屬性:width、height、margin 、margin-top、margin-right、margin-bottom、margin-left、border、border-style、border-top-style、border-right-style、border-bottom-style、border-left-style、border-width、border-top-width、border-right-right、border-bottom-width、border-left-width、border-color、border-top-color、border-right-color、border-bottom-color、border-left-color、border-top、border-right、border-bottom、border-left、padding、padding-top、padding-right、padding-bottom、padding-left
4、背景屬性:background、background-color、background-image、background-repeat、background-position、background-attachment
5、定位屬性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
6、生成內容屬性:content、counter-reset、counter-increment
7、輪廓樣式屬性:outline-style、outline-width、outline-color、outline
8、頁面樣式屬性:size、page-break-before、page-break-after
9、聲音樣式屬性:pause-before、pause-after、pause、cue-before、cue-after、cue、play-ring
二、有繼承性的屬性
1、字體系列屬性
font:組合字體
font-family:規定元素的字體系列
font-weight:設置字體的粗細
font-size:設置字體的尺寸
font-style:定義字體的風格
font-variant:設置小型大寫字母的字體顯示文本,這意味著所有的小寫字母均會被轉換為大寫,但是所有使用小型大寫字體的字母與其餘文本相比,其字體尺寸更小。
font-stretch:對當前的 font-family 進行伸縮變形。所有主流瀏覽器都不支持。
font-size-adjust:為某個元素規定一個 aspect 值,這樣就可以保持首選字體的 x-height。
2、文本系列屬性
text-indent:文本縮進
text-align:文本水平對齊
line-height:行高
word-spacing:增加或減少單詞間的空白(即字間隔)
letter-spacing:增加或減少字元間的空白(字元間距)
text-transform:控制文本大小寫
direction:規定文本的書寫方向
color:文本顏色
3、元素可見性:visibility
4、表格布局屬性:caption-side、border-collapse、border-spacing、empty-cells、table-layout
5、列表布局屬性:list-style-type、list-style-image、list-style-position、list-style
6、生成內容屬性:quotes
7、游標屬性:cursor
8、頁面樣式屬性:page、page-break-inside、windows、orphans
9、聲音樣式屬性:speak、speak-punctuation、speak-numeral、speak-header、speech-rate、volume、voice-family、pitch、pitch-range、stress、richness、、azimuth、elevation
三、所有元素可以繼承的屬性
1、元素可見性:visibility
2、游標屬性:cursor
四、內聯元素可以繼承的屬性
1、字體系列屬性
2、除text-indent、text-align之外的文本系列屬性
五、塊級元素可以繼承的屬性
1、text-indent、text-align
7)
將一個數組調整為最大堆.
根據堆的性質, 只要保證部分有序即可, 即根節點大於左右節點的值. 將數組抽象為一個完全二叉樹, 所以只要從最後一個非葉子節點向前遍歷每一個節點即可. 如果當前節點比左右子樹節點都大, 則已經是一個最大堆, 否則將當前節點與左右節點較大的一個交換, 並且交換過之後依然要遞歸的查看子節點是否滿足堆的性質, 不滿足再往下調整. 如此即可完成數組的堆化.
8)
http請求方法(get、post區別)
1、本質區別:get用於查詢信息(查),post用於插入信息(插);
2、安全性:對於伺服器講,get是安全(不更改信息)、冪等(作用1次和n次效果相同); post不安全、不冪等;
對於客戶端將,get參數直接暴露在URL, 不安全;post參數放消息體中,更安全;
3、傳送長度: get受 URL限制,傳送數據量小; post傳送數據量大,默認不受限制;
4、緩存機制、歷史記錄:get請求會被瀏覽器主動緩存,也會被保留在歷史記錄中,post都不可以;
5、數據類型:get只允許ASCII碼字元類型,post無限制;
9)
屬於javaScript的typeof運算符的可能結果
10)
條件概率
男,周二:1/14
男,非周二:6/14
女,周二:1/14
女,非周二:6/17
兩個孩子至少一個是周二生的男孩:1/14+1/14-1/14*1/14=27/196
兩個孩子都是男孩且至少一個是周二生的:1/14*1/14+1/14*6/14+6/14*1/14=13/196
條件概率:13/27
12)
14)
關於下列CSS選擇器:ID選擇器、類選擇器、偽類選擇器、標簽名稱選擇器,排序正確的是
ID選擇器>Class選擇器=偽類>標簽名稱選擇器
15)
假設兩線程為A、B,設有3種情況:
1.AB不並發:此時相當於兩個方法順序執行。A執行完後a=-1,B使用-1作為a的初值,B執行完後a=-2
2.AB完全並發:此時讀寫沖突,相當於只有一個線程對a的讀寫最終生效。相同於方法只執行了一次。此時a=-1
3.AB部分並發:假設A先進行第一次讀寫,得到a=1;之後A的讀寫被B覆蓋了。B使用用1作為a的初值,B執行完後a=0
『玖』 位元組跳動有多少機房
最近看到一個有意思的提問:抖音伺服器帶寬有多大,為什麼能夠供那麼多人同時刷?作為一名程序員,今天來給大家科普一下。
北京位元組跳動有限公司旗下,除了最為人所熟知的兩款產品「今日頭條」和「抖音」,還包括「西瓜視頻」、「火山小視頻」以及「悟空問答」等其他產品線。
位元組跳動在美租用數據中心:數十萬台伺服器,能耗達53兆瓦。
近日有報道稱,今年上半年位元組跳動達成三起交易,在弗吉尼亞州北部租用了能耗達53兆瓦的數據中心。分析師稱,能耗如此大的數據中心,可以容納數十萬台服務源悉型器,佔地面積可達數十萬平方英尺。
圖片來自 Pexels
抖音,網路,阿里雲,騰訊都是自建的數據中心,都是 T 級別出口帶寬(總出口帶寬),也就是達到 1T=1024G/s 的出口帶寬,伺服器總署基本都在 20 萬台以上,甚至阿里雲都超過了 100 萬台。
位元組跳動的數據中心總帶寬,可能在 10TB 級別左右,預期突破 15TB 級別不遠了。
一般情況下:總出口帶寬 1TB,實際機房出口帶寬可能只有 100G 上下,這是採用雙(多)鏈路設計,雙出口實現動態流量分擔,總的出口帶寬可以達到 T 級別。
大型數據中心
想要同一時間有數億人在線,TB 級別帶寬,CDN 加速和多節點,負載均衡等等技術缺一不可。(這個設計技術過於復雜,有相關專業朋友,可以評論簡要概述)
CDN 加速
位元組跳動有多少台伺服器?雹猜
根據網路數據整理,2017 年 2-3 萬台伺服器,這個時候主要是租用伺服器為主。
2018 年,位元組跳動自己建設了數據中心,最大的數據中心在河北懷來官廳湖新媒體產業園,一期 5 萬台伺服器,二期 9 萬台伺服器。
2018 年,租用+自建的伺服器數量達到 17 萬台伺服器。
2020 年,根據位元組跳動招聘公告的數據,顯示有 42 萬台伺服器。比 2018 年增長了 1.5 倍。(數據來自網路)
一個機櫃中 10-20 台伺服器
這部分伺服器都是給中國區域使用,主要應用國內的抖音,西瓜視頻,今日頭條,飛書等產品。
在美國的 TIKTOK 是獨立出來的運營,數據在美國當地存儲和分發。2020 年 Tiktok 在美國也租用了近 10 萬台伺服器
據 Business Insider 公布數據,2020 年上半年,位元組跳動在美國弗吉尼亞州北部租用了能耗達 53 兆瓦的數據中心。可以容納數十萬台伺服器,佔地面積陸孝可達數十萬平方英尺。
Tiktok在印度,新加坡都在投資建設數據中心。
位元組跳動大型的數據中心出口帶寬是多少?
聊完了伺服器數量,那麼咱們來點硬核的東西
『拾』 【面經】位元組跳動-後端開發-2019秋招
https://zhuanlan.hu.com/p/50186804
因為每個人的理解不太一樣,所以我在這里就不給出所謂的答案了,大家可以根據自己的理解加以描述,我只在一些地方做出一些提示。有的問題已經忘了,大概也就這些了。
線程用於小任務,而進程用於更多的'重量級'的任務- 應用基本執行。 一個線程和進程之間的另一個區別是,在同一進程中的線程共享相同的地址空間,而不同的進程沒有。 因此線程可以讀寫同樣的數據結構和變數,便於線程之間的通信。
定義方面:進程是程序在某個數據集合上的一次運行活動;線程是進程中的一個執行路徑。
進程間的通信主要是指多個進程間的數據交互。
同步主要指維護多個進程或者線程之間數據的准確性和一致性。
進程通信方式:管道(Pipe)、信號(signal)、信號量(semophere)、消息隊列(message queue)、共享內存(shared memory)、套接字(socket)。
同步方式:將線程串列化(wait notify方法來睡眠和喚醒線程)、互斥鎖(加鎖 mutex)、管程、臨界區、信號量
TCP的優點: 可靠,穩定。TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。TCP的邏輯通信信道是全雙工的可靠信道。
TCP的缺點: 慢,效率低,佔用系統資源高,易被攻擊 TCP在傳遞數據之前,要先建連接,這會消耗時間,而且在數據傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每台設備上維護所有的傳輸連接,事實上,每個連接都會佔用系統的CPU、內存等硬體資源。 而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。
UDP的優點: 快,比TCP稍安全 UDP沒有TCP的握手、確認、窗口、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞數據時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊……
UDP的缺點: 不可靠,不穩定。因為UDP沒有TCP那些可靠的機制,在數據傳遞時,如果網路質量不好,就會很容易丟包。
面向數據報: 不能夠靈活的控制讀寫數據的次數和數量,應用層交給UDP多長的報文, UDP原樣發送, 既不會拆分, 也不會合並。但是不會存在粘包的問題。
三次握手:為了保證接收方和發送方的接收能力和發送能力都正常。
四次揮手:為了釋放全雙工的信道。所以是單獨釋放和確認的。
這是因為服務端在LISTEN狀態下,收到建立連接請求的SYN報文後,把ACK和SYN放在一個報文里發送給客戶端。而關閉連接時,當收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,己方是否現在關閉發送數據通道,需要上層應用來決定,因此,己方ACK和FIN一般都會分開發送。
TCP通過序列號、確認應答、超時重傳、擁塞控制來保證傳輸的可靠性
確認應答機制&序列號
TCP將每個位元組的數據都進行了編號,即為序列號。
每一個ACK都帶有對應的確認序列號,意思是告訴發送者,我已經收到了哪些數據;;下一次你從哪裡開始發。
超時重傳&序列號
主機A發送數據給B之後, 可能因為網路擁堵等原因, 數據無法到達主機B; 如果主機A在一個特定時間間隔內沒有收到B發來的確認應答, 就會進行重發;主機A未收到B發來的確認應答,也可能是因為ACK丟失了,因此主機B會收到很多重復數據,這時候利用序列號可以使得主機B來實現數據報文的去重。
擁塞控制
每次發送數據包的時候, 將擁塞窗口和接收端主機反饋的窗口大小做比較, 取較小的值作為實際發送的窗口。
擁塞控制, 歸根結底是TCP協議想盡可能快的把數據傳輸給對方, 但是又要避免給網路造成太大壓力的折中方案。
TCP通過滑動窗口、流量控制、延遲應答、捎帶應答來提升傳輸的效率
滑動窗口機制
1. 窗口大小指的是無需等待確認應答而可以繼續發送數據的最大值.
2. 發送窗口內欄位的時候, 不需要等待任何ACK, 直接發送;
3. 收到第一個ACK後, 滑動窗口向後移動, 繼續發送下一個窗口欄位的數據; 依次類推;
4. 操作系統內核為了維護這個滑動窗口, 需要開辟發送緩沖區來記錄當前還有哪些數據沒有應答; 只有確認應答過的數據, 才能從緩沖區刪掉;
5. 窗口越大, 則網路的吞吐率就越高
流量控制
接收端處理數據的速度是有限的. 如果發送端發的太快, 導致接收端的緩沖區被打滿, 這個時候如果發送端繼續發送, 就會造成丟包, 繼而引起丟包重傳等等一系列連鎖反應。
1.接收端將自己可以接收的緩沖區大小放入TCP首部中的 "窗口大小" 欄位, 通過ACK端通知發送端;
2.窗口大小欄位越大, 說明網路的吞吐量越⾼高;
3.接收端一旦發現自己的緩沖區快滿了, 就會將窗口大小設置成一個更小的值通知給發送端;
4.發送端接受到這個窗口之後, 就會減慢自己的發送速度;
5.如果接收端緩沖區滿了, 就會將窗口置為0; 這時發送⽅方不再發送數據, 但是需要定期發送一個窗口
延遲應答
如果接收數據的主機立刻返回ACK應答, 這時候返回的窗口可能比較小.
窗口越大, 網路吞吐量就越大, 傳輸效率就越高. 我們的目標是在保證網路不擁塞的情況下盡量提高傳輸效率;
捎帶應答
在延遲應答的基礎上, 我們發現, 很多情況下, 客戶端伺服器在應用層也是 「一發一收」 的.
那麼客戶端在發送數據的同時,攜帶對方消息的報文序列號,來順帶通知對方,自己所接收到的報文情況
TCP擁塞控制主要有四種方法,滑動窗口機制、慢啟動機制、擁塞避免機制、快速重傳與恢復。
滑動窗口機制
在發送數據的時候,將發送窗口內的數據全部發送,才會停下來等待ACK,如果接收到對方的ACK信息,則滑動窗口前移。
慢啟動機制
在剛開始發送數據的時候,發送窗口取一個較小的值,來防止網路擁塞,同時探測對方的接收能力。如果收到了對方的ACK回應,則按照對方要求的窗口大小來調整發送窗口,否則進行窗口的擴大。窗口大小一開始是1,之後進行指數級別擴大,其中ssthresh為估算的一個發送窗口閾值,當窗口大小超過這個閾值,則之後的窗口每次擴大1,不再是指數級別的擴大。
還有一個概念是 AIMD(加法增大乘法減小):無論在慢啟動階段還是在擁塞控制階段,只要網路出現超時,就是將發送端的擁塞窗口(cwnd)置為1,ssthresh置為cwnd的一半,然後開始執行慢啟動演算法;當網路頻發出現超時情況時,ssthresh就下降的很快,為了減少注入到網路當中的分組數,而加法增大是執行擁塞避免演算法後,使擁塞窗口緩慢的增大,以防止網路過早出現擁塞。
快速重傳
快重傳演算法要求首先接收方收到一個失序的報文段後立刻發出重復確認,而不要等待自己發送數據時才進行捎帶確認。當發送方收到ACK之後,進行相應的報文重傳。
快速恢復
當發送方連續收到三個重復確認時(代表丟了三個包),執行「乘法減小」演算法,慢啟動門限減半,從而預防網路發生阻塞。由於發送方現在認為網路很可能沒有發生阻塞(因為沒有超時),因此現在不執行慢啟動演算法,而是把擁塞窗口(cwnd)值設置為慢啟動門限減半後的值,然後開始執行擁塞避免演算法,擁塞窗口cwnd值線性增大
TCP和UDP是傳輸層協議(物理層、數據鏈路層、網路層、傳輸層、會話層、表示層、應用層)
UDP沒有擁塞解決措施,當網路擁塞時,直接丟掉UDP的包。解決方式:在傳輸層之上,利用UDP並改造:如 RUDP(傳輸層)、RTP(應用層和傳輸層之間)、UDT(應用層)等
先把兩個鏈表按照奇偶性分成兩個鏈表(偶數構造成雙向鏈表);然後一個鏈表從頭部開始,另一個鏈表從尾部開始,插入第一個鏈表即可。
創建一個class,利用雙向鏈表構造這個雙向隊列,實現 getHead() getTail() addToHead() addToTail() popHead() popTail()
假設二維矩陣 g,查找的數為 t
先往右找(二分查找),找到 g[0][i]=a > t > g[0][i+1]=b,(所有行的 i+1, ... 的列的元素肯定全部小於 t,可以忽略),然後從 i 往下找(二分查找),找到 g[j][i] = c > t > g[j+1][i] = d,(說明 0~j 行的 0~i 列均大於 t,可以忽略),然後繼續往左找,再往下找,左下不斷交替,最終即可判斷是否存在 t
翻轉鏈表:三個指針解決。p c n 分別記錄 前一個節點,當前節點,後一個節點
初始化:前一個節點 p = NULL,當前節點 c = head,後一個節點 n = head.next;
運行:c.next = p; p = n.next ; n.next = c; c = p ; p = n; n = c.next; 注意判斷是不是null
結束:while(n != null)
redis有五種數據類型:string(字元串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
String(字元串)
string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個 key 對應一個 value。
string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數據。比如jpg圖片或者序列化的對象。
string 類型是 Redis 最基本的數據類型,string 類型的值最大能存儲 512MB。
常用命令:set、get、decr、incr、mget等。
注意:一個鍵最大能存儲512MB。
Hash(哈希)
Redis hash 是一個鍵值(key→value)對集合;是一個 string 類型的 field 和 value 的映射表,hash 特別適合用於存儲對象。
每個 hash 可以存儲 2^32 -1 鍵值對(40多億)。
常用命令:hget、hset、hgetall等。
應用場景:存儲一些結構化的數據,比如用戶的昵稱、年齡、性別、積分等,存儲一個用戶信息對象數據。
List(列表)
Redis 列表是簡單的字元串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
list類型經常會被用於消息隊列的服務,以完成多程序之間的消息交換。
常用命令:lpush、rpush、lpop、rpop、lrange等。
列表最多可存儲 2^32 - 1 元素 (4294967295, 每個列表可存儲40多億)。
Set(集合)
Redis的Set是string類型的無序集合。和列表一樣,在執行插入和刪除和判斷是否存在某元素時,效率是很高的。集合最大的優勢在於可以進行交集並集差集操作。Set可包含的最大元素數量是4294967295。
集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。
應用場景:
1、利用交集求共同好友
2、利用唯一性,可以統計訪問網站的所有獨立IP。
3、好友推薦的時候根據tag求交集,大於某個threshold(臨界值的)就可以推薦。
常用命令:sadd、spop、smembers、sunion, srem, srange, sinter等。
集合中最大的成員數為 232 - 1(4294967295, 每個集合可存儲40多億個成員)。
zset(sorted set:有序集合)
Redis zset 和 set 一樣也是string類型元素的集合,且不允許重復的成員。
不同的是每個元素都會關聯一個double類型的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。
zset的成員是唯一的,但分數(score)卻可以重復。
sorted set是插入有序的,即自動排序。
常用命令:zadd、zrange、zrem、zcard等。
當你需要一個有序的並且不重復的集合列表時,那麼可以選擇sorted set數據結構。
應用舉例:
(1)例如存儲全班同學的成績,其集合value可以是同學的學號,而score就可以是成績。
(2)排行榜應用,根據得分列出topN的用戶等。
Redis對於hash沖突,採用的是鏈地址法(其他的解決沖突的方法是再哈希和開放地址(線性探測和二次探測))
Redis為了控制哈希表佔用內存的大小,採用雙哈希表結構,並逐步擴大哈希表容量的策略。
Redis存儲一個對象時,首先使用 zipmap又稱為small hash存儲。這樣會節省很多哈希自身所需要的元數據的存儲開銷。當域欄位field的數量超過限制范圍,或者欄位值value的長度大小超過系統限定的位元組數,此時Redis將該zipmap轉化為正常的hash進行存儲。
參考 https://www.jianshu.com/p/7f53f5e683cf 源碼分析:
結構
但是在 dict 擴容縮容時,需要分配新的 hashtable,然後進行漸進式搬遷,這時候兩個 hashtable 存儲的分別是舊的 hashtable 和新的 hashtable。待搬遷結束後,舊的 hashtable 被刪除,新的 hashtable 取而代之。
rehash
擴容:當 hash 表中元素的個數(即第一個hash表的used)等於第一維數組的長度(即第一個hash表的size)時,就會開始擴容,擴容的新數組是原數組大小的 2 倍。不過如果 Redis 正在做 bgsave,為了減少內存頁的過多分離 (Copy On Write),Redis 盡量不去擴容 (dict_can_resize 標志是否能夠擴容),但是如果 hash 表已經非常滿了,元素的個數已經達到了第一維數組長度的 5 倍 (dict_force_resize_ratio),說明 hash 表已經過於擁擠了,這個時候就會強制擴容。
縮容:當 hash 表因為元素的逐漸刪除變得越來越稀疏時,,Redis 會對 hash 表進行縮容來減少 hash 表的第一維數組空間佔用。縮容的條件是元素個數低於數組長度的 10%。縮容不會考慮 Redis 是否正在做 bgsave。
收縮或者擴展哈希表需要將ht[0]表中的所有鍵全部rehash到ht[1]中,但是rehash操作不是一次性、集中式完成的,而是分多次,漸進式,斷續進行的,這樣才不會對伺服器性能造成影響
漸進式rehash(incremental rehashing)
漸進式rehash的關鍵:
1、字典結構dict中的一個成員rehashidx,當rehashidx為-1時表示不進行rehash,當rehashidx值為0時,表示開始進行rehash。
2、在rehash期間,每次對字典的添加(只加到 ht[1])、刪除(ht[0] ht[1] 全部查找並刪除)、查找(先查找 ht[0],如果未找到再查 ht[1])、或更新操作時,都會判斷是否正在進行rehash操作,如果是,則順帶進行單步rehash(調用_dictRehashStep 函數,該函數調用 dictRehash(d, 1)),並將rehashidx+1。新添加到字典的key-val一律會被保存到ht[1]裡面,而ht[0]不再進行任何添加操作,這一措施保證了ht[0]包含的key-val對數量只增不減,並隨著rehash操作的執行而最終變成空表。
3、dictRehash(dict* d, int n) 函數每次 rehash 前進 n 步(順序訪問 n 個 ht[0].table 的非空 dictEntry),如果 dictEntry 一直為空,則訪問到 n*10 個空 dictEntry 之後,本次 rehash 結束。
4、啟動 redis 會啟動一個 cron 定時任務(定時任務默認每秒執行 server.h CONFIG_DEFAULT_HZ=10 次),每次定時任務運行 1ms 的 rehash,調用 dictRehash(d, 100),執行100步rehash。
4、當rehash時進行完成時,將rehashidx置為-1,表示完成rehash。同時 ht[0]=ht[1],ht[1]=Null,更換表指針。
http1.1 通過設定 Connection:keep-alive 欄位來保持TCP的長連接,從而能夠在一次建立連接的情況下處理多個請求。
下一個請求需要在上一個請求的響應之後發送,因此會存在隊頭阻塞。
HTTP1.1進一步地支持在持久連接上使用管道化(pipelining)特性。管道化允許客戶端在已發送的請求收到服務端的響應之前發送下一個請求,藉此來減少等待時間提高吞吐率。但是需要響應的順序是按照請求順序進行,因此也會存在隊頭阻塞。
http2 開啟了完全的多路復用:一個連接被多個流復用。一個流表示一次請求-響應過程。
這個過程有兩個概念:流和幀。幀代表著最小的數據單位,每個幀會標識出該幀屬於哪個流,流也就是多個幀組成的數據流。
多路復用,就是在一個 TCP 連接中可以存在多條流。換句話說,也就是可以發送多個請求,對端可以通過幀中的標識知道屬於哪個請求。通過這個技術,可以避免 HTTP 舊版本中的隊頭阻塞問題,極大的提高傳輸性能。
掛掉,則一段時間之後,保活時間到期,則關閉。或者TCP等待時間結束,關閉TCP連接。或者採用應用層周期發送心跳包來檢測是否對方還在。
好處:
減少服務端連接壓力,減少佔用內存,提升連接吞吐量;
連接數的減少改善了網路擁塞狀況,慢啟動時間減少,擁塞和丟包恢復速度更快;
避免連接頻繁創建和關閉(三次連接、四次揮手);
四種方法
GET:獲取信息
POST:傳輸實體
PUT:上傳文件
DELETE:刪除文件
頭部信息:
Host (主機和埠號)
Connection (鏈接類型)
Upgrade-Insecure-Requests (升級為 HTTPS 請求)
User-Agent (瀏覽器名稱)
Accept (傳輸文件類型)
Referer (頁面跳轉處)
Accept-Encoding(文件編解碼格式)
Cookie (Cookie)
x-requested-with :XMLHttpRequest (是 Ajax 非同步請求)
arp發出去之後,交換機會查找自己的 mac 緩存表,如果存在,則直接返回,不存在則按照 IP 選擇埠進行發送,如果不存在 IP 的埠,則廣播。之後每個路由器都有隔離廣播的作用,其也緩存了 IP 對應的埠,並向對應的埠進行發送。
java 相關
創建進程調用的是OS哪些方法?具體說說
我們聊聊JAVA吧,你了解JVM嗎?給我講講
JVM具體會在什麼時候進行垃圾回收?JMM具體說說?
垃圾回收演算法具體說說?各種垃圾回收器了解嗎?什麼時候執行STOP THE WORLD?
感覺應該是總監,很高冷。
說說項目?(沒啥興趣)
我們聊聊JAVA吧,現在我要求設計一個容器,容器滿的時候生產者阻塞,容器空的時候消費者阻塞(我跟他講了一下BlockingQueue和Condition,然後用Condition來寫)
二叉樹的最大路徑。
好吧,今天就到這里了(哈???)
三面面完一度覺得自己涼透了,過兩天收到offer call,然後就收到offer了。白菜價,很高興了。
總的來說,個人感覺頭條面試演算法題不難(應該是給我放水了,謝謝面試官),不過絕對不能做不出來。基礎一定要牢固,一些細節問題一定要搞清楚,一般還會問一些設計問題,這種問題就要靠靈機一動了(其實主要還是看對各種原理的理解,例如說那道隊列的問題)。噢,對了,還有一件事,一面是要求自己寫測試用例運行的,所以coding一定要快准狠。