一、運維項目管理
創(chuàng)新互聯公司2013年成立,是專業(yè)互聯網技術服務公司,擁有項目網站制作、網站設計網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元黃州做網站,已為上家服務,為黃州各地企業(yè)和個人服務,聯系電話:18980820575
工作職責:
1、負責IT資源項目的管理工作,確保項目團隊協同工作;
2、負責IT資產管理和定期資產盤點工作;
3、跟蹤IT資源的使用,并對數據進行分析,完成日常報表;
4、協助IT成本管理工作,預算制定、供應商溝通等。
職位要求:
1、具備數據敏感性和探知欲、分析和解決問題的能力、良好的數據呈現能力;
2、工作認真、負責、嚴謹,有良好的團隊合作精神;
3、有良好溝通能力和技巧;
4、有外語溝通能力、海外背景優(yōu)先。
二、數據開發(fā)工程師
工作職責:
1、負責直播業(yè)務的數據調研,數倉模型設計,ETL開發(fā),任務監(jiān)控和優(yōu)化等;
2、負責數據倉庫多場景的應用產品建設,如快報,告警推送等;
3、負責基于數據倉庫之上的數據探索,如特征工程,標簽挖掘等;
4、負責數據管理相關的開發(fā)和實施。
任職要求:
1、計算機、數學相關專業(yè)全日制本科及以上學歷;
2、熟練使用SQL,?了解數倉ETL開發(fā);
3、熟悉R、Python、Shell等腳本的至少一種語言,有實戰(zhàn)經驗的優(yōu)先;
4、有Java/Golang?開發(fā)經驗優(yōu)先;
5、業(yè)務理解能力強,技術學習能力強,工作積極主動,有良好的團隊合作能力。
三、前端開發(fā)工程師
工作職責:
1、參與嗶哩嗶哩各產品線web前端研發(fā)工作;
2、優(yōu)化產品交互邏輯,提升產品易用性;
3、參與前瞻性技術的研究,為持續(xù)性的產品創(chuàng)新做準備。
職位要求:
1、精通HTML、CSS及JavaScript等Web前端技術;
2、具備跨瀏覽器、跨終端的前端開發(fā)經驗;
3、了解至少一種Server端語言(Node.JS/PHP/Python/Java等;
4、熟悉一種使用較廣泛的前端框架;
5、具備扎實的計算機基礎,對數據結構和算法設計較為深刻的理解;
6、學習能力強,具有良好的溝通能力和良好的團隊合作精神。
四、測試工程師
工作職責:
1、負責嗶哩嗶哩客戶端和服務端測試工作;
2、參與制定測試方案,設計并執(zhí)行測試案例,整理對應項目測試文檔;
3、跟蹤線上反饋問題,協助開發(fā)定位和推進解決問題;
4、參與對項目流程和工具進行優(yōu)化,提升整個項目的交付效率。
職位要求:
1、計算機相關專業(yè),本科以上學歷;
2、熟悉軟件工程、軟件測試理論和方法,熟悉相關的測試流程和軟件工程原理;
3、對二次元互聯網產品感興趣,善于學習接受新事物,具備良好的文檔編寫習慣和能力,良好的團隊協作能力,有較強的邏輯思維及自我學習能力;
4、熟悉一門或者多門編程語言者(Python,Java,Golang等)優(yōu)先。
五、游戲測試
工作職責:
1、能夠根據游戲功能設計文檔,以及根據游戲實際內容表現編寫測試用例;
2、根據測試用例對游戲進行功能測試,能及時發(fā)現產品缺陷,對測試中發(fā)現的問題進行及時的記錄、跟蹤、反饋、分析;
3、負責撰寫測試報告;
4、負責bug生命周期的跟蹤反饋,能協調相關人員定位bug,協助研發(fā)人員修復bug;
5、對iOS,Android雙端進行兼容性測試。
任職要求:
1、本科及以上學歷;
2、熱愛游戲,對自己玩過的游戲在特定的領域有自己獨到的見解;
3、嚴密的邏輯性,能客觀分析問題并通過圖文工具表述;
4、有積極上進心和強大的自驅力,抗壓能力強;
5、有良好的團隊合作精神,優(yōu)秀的溝通技巧,以及高度的職業(yè)素養(yǎng);
6、平時有追番的習慣。
擴展資料:
B站主要業(yè)務:
1、直播
嗶哩嗶哩(bilibili)直播是B站推出的國內首家關注ACG直播的互動平臺,內容有趣、活動豐富、玩法多樣,并向電競、生活、娛樂領域不斷延伸。
“電競+游戲”都是B站直播的重要品類。目前B站已經覆蓋了包括《英雄聯盟》LPL職業(yè)聯賽、《DOTA2》TI國際邀請賽、《王者榮耀》KPL職業(yè)聯賽等在內的各大賽事;在泛娛樂直播方面,B站則以音樂、舞蹈、繪畫、美食、萌寵、明星訪談為主。
此外,B站也在開拓學習直播、虛擬主播等新興直播品類。2019年一季度內,共有超6000位虛擬主播在B站開播,觀看人數近600萬。
2019年12月6日,B站宣布獲得《英雄聯盟》全球總決賽S10至S12連續(xù)三年(2020年至2022年)的國內獨家直播版權。
2019年12月19日,嗶哩嗶哩直播宣布簽約馮提莫。
2、游戲
B站是國內重要的二次元游戲分發(fā)渠道,代理了超 500 款聯運手游,13 款獨家代理游戲,及1 款自研手游。
從2014年開始,bilibili開啟游戲聯運和代理發(fā)行業(yè)務,成功推出《夢100》《FGO》《碧藍航線》《幻想戰(zhàn)姬》《Fate/Grand Order》《明日方舟》等多款業(yè)內知名游戲,并幫助《陰陽師》《崩壞3》等產品獲得成功,是當前國內一家二次元游戲發(fā)行平臺。
2019年,與騰訊全球聯合發(fā)行的聽覺探案游戲《Unheard-疑案追聲》在Steam上線后升至國區(qū)熱銷榜第二位,一周之內售出15萬份。
2019年7月,B站首次舉辦獨立游戲發(fā)布會,發(fā)布包括《一起開火車!》、《妄想破綻》在內的5款獨立游戲。
3、廣告
B站廣告業(yè)務主要分為效果廣告和品牌廣告。2018年,B站舉辦了對廣告主的廣告推介會AD TALK,首次開放自制內容的招商。
在2019年的AD TALK上,B站明確了自己的商業(yè)化進程,宣布2020年將向所有品牌合作伙伴開放生態(tài)。B站確定開放的生態(tài)資源包括14部國產動畫、15部紀錄片、6部綜藝、30余位UP主、11項大事件以及電競、虛擬偶像等。
4、電商
B站擁有自己的電商平臺“會員購”,于2017年上線,以漫展演唱會票務、手辦、模型、潮玩、周邊的銷售為主, 在不到兩年的時間已經占領了二次元票務域最大的市場份額。
2019年10月底,B站今年的電商業(yè)務GMV已經突破10億元。
參考資料來源:華南農業(yè)大學-上海嗶哩嗶哩科技有限公司2020招聘簡章
使用go語言的好處: go語言的設計是務實的, go在針對并發(fā)上進行了優(yōu)化, 并且支持大規(guī)模高并發(fā), 又由于單一的碼格式, 相比于其他語言更具有可讀性, 在垃圾回收上比java和Python更有效, 因為他是和程序同時執(zhí)行的.
1. 進程, 線程, 協程的區(qū)別, 協程的優(yōu)勢
2. 講一下GMP模型(重點)
3. Go的GC, 混合寫屏障(重點)
4. go的Slice和數組的區(qū)別, slice的擴容原理(重點)
5. 講一下channel,實現原理(重點)
6. 講一下Go的Map的實現原理, 是否線程安全, 如何實現安全(重點)
7. new 和 make 的區(qū)別
8. 說一下內存逃逸
9. 函數傳指針和傳值有什么區(qū)別
10. goroutine之間的通信方式
11. 測試是怎么做的(單元測試, 壓力測試)
12. 堆和棧的區(qū)別
請實現 個算法,確定 個字符串的所有字符【是否全都不同】。這 我們要求【不允
許使 額外的存儲結構】。 給定 個string,請返回 個bool值,true代表所有字符全都
不同,false代表存在相同的字符。 保證字符串中的字符為【ASCII字符】。字符串的
度 于等于【3000】。
這 有 個重點,第 個是 ASCII字符 , ASCII字符 字符 共有256個,其中128個是常
字符,可以在鍵盤上輸 。128之后的是鍵盤上 法找到的。
然后是全部不同,也就是字符串中的字符沒有重復的,再次,不準使 額外的儲存結
構,且字符串 于等于3000。
如果允許其他額外儲存結構,這個題 很好做。如果不允許的話,可以使 golang內置
的 式實現。
通過 strings.Count 函數判斷:
使 的是golang內置 法 strings.Count ,可以 來判斷在 個字符串中包含
的另外 個字符串的數量
還有不同的方法同樣可以實現,你了解嗎?
推薦go相關技術 專欄
gRPC-go源碼剖析與實戰(zhàn)_帶你走進gRPC-go的源碼世界-CSDN博客
原文:【 】
如果有解答的不對的,麻煩各位在評論寫出來~
go的調度原理是基于GMP模型,G代表一個goroutine,不限制數量;M=machine,代表一個線程,最大1萬,所有G任務還是在M上執(zhí)行;P=processor代表一個處理器,每一個允許的M都會綁定一個G,默認與邏輯CPU數量相等(通過runtime.GOMAXPROCS(runtime.NumCPU())設置)。
go調用過程:
可以能,也可以不能。
因為go存在不能使用==判斷類型:map、slice,如果struct包含這些類型的字段,則不能比較。
這兩種類型也不能作為map的key。
類似棧操作,后進先出。
因為go的return是一個非原子性操作,比如語句 return i ,實際上分兩步進行,即將i值存入棧中作為返回值,然后執(zhí)行跳轉,而defer的執(zhí)行時機正是跳轉前,所以說defer執(zhí)行時還是有機會操作返回值的。
select的case的表達式必須是一個channel類型,所有case都會被求值,求值順序自上而下,從左至右。如果多個case可以完成,則會隨機執(zhí)行一個case,如果有default分支,則執(zhí)行default分支語句。如果連default都沒有,則select語句會一直阻塞,直到至少有一個IO操作可以進行。
break關鍵字可跳出select的執(zhí)行。
goroutine管理、信息傳遞。context的意思是上下文,在線程、協程中都有這個概念,它指的是程序單元的一個運行狀態(tài)、現場、快照,包含。context在多個goroutine中是并發(fā)安全的。
應用場景:
例子參考:
waitgroup
channel
len:切片的長度,訪問時間復雜度為O(1),go的slice底層是對數組的引用。
cap:切片的容量,擴容是以這個值為標準。默認擴容是2倍,當達到1024的長度后,按1.25倍。
擴容:每次擴容slice底層都將先分配新的容量的內存空間,再將老的數組拷貝到新的內存空間,因為這個操作不是并發(fā)安全的。所以并發(fā)進行append操作,讀到內存中的老數組可能為同一個,最終導致append的數據丟失。
共享:slice的底層是對數組的引用,因此如果兩個切片引用了同一個數組片段,就會形成共享底層數組。當sliec發(fā)生內存的重新分配(如擴容)時,會對共享進行隔斷。詳細見下面例子:
make([]Type,len,cap)
map的底層是hash table(hmap類型),對key值進行了hash,并將結果的低八位用于確定key/value存在于哪個bucket(bmap類型)。再將高八位與bucket的tophash進行依次比較,確定是否存在。出現hash沖撞時,會通過bucket的overflow指向另一個bucket,形成一個單向鏈表。每個bucket存儲8個鍵值對。
如果要實現map的順序讀取,需要使用一個slice來存儲map的key并按照順序進行排序。
利用map,如果要求并發(fā)安全,就用sync.map
要注意下set中的delete函數需要使用 delete(map) 來實現,但是這個并不會釋放內存,除非value也是一個子map。當進行多次delete后,可以使用make來重建map。
使用sync.Map來管理topic,用channel來做隊列。
參考:
多路歸并法:
pre class="vditor-reset" placeholder="" contenteditable="true" spellcheck="false"p data-block="0"(1)假設有K路a href=""數據流/a,流內部是有序的,且流間同為升序或降序;
/pp data-block="0"(2)首先讀取每個流的第一個數,如果已經EOF,pass;
/pp data-block="0"(3)將有效的k(k可能小于K)個數比較,選出最小的那路mink,輸出,讀取mink的下一個;
/pp data-block="0"(4)直到所有K路都EOF。
/p/pre
假設文件又1個G,內存只有256M,無法將1個G的文件全部讀到內存進行排序。
第一步:
可以分為10段讀取,每段讀取100M的數據并排序好寫入硬盤。
假設寫入后的文件為A,B,C...10
第二步:
將A,B,C...10的第一個字符拿出來,對這10個字符進行排序,并將結果寫入硬盤,同時記錄被寫入的字符的文件指針P。
第三步:
將剛剛排序好的9個字符再加上從指針P讀取到的P+1位數據進行排序,并寫入硬盤。
重復二、三步驟。
go文件讀寫參考:
保證排序前兩個相等的數其在序列的前后位置順序和排序后它們兩個的前后位置順序相同的排序叫穩(wěn)定排序。
快速排序、希爾排序、堆排序、直接選擇排序不是穩(wěn)定的排序算法。
基數排序、冒泡排序、直接插入排序、折半插入排序、歸并排序是穩(wěn)定的排序算法。
參考:
head只請求頁面的首部。多用來判斷網頁是否被修改和超鏈接的有效性。
get請求頁面信息,并返回實例的主體。
參考:
401:未授權的訪問。
403: 拒絕訪問。
普通的http連接是客戶端連接上服務端,然后結束請求后,由客戶端或者服務端進行http連接的關閉。下次再發(fā)送請求的時候,客戶端再發(fā)起一個連接,傳送數據,關閉連接。這么個流程反復。但是一旦客戶端發(fā)送connection:keep-alive頭給服務端,且服務端也接受這個keep-alive的話,兩邊對上暗號,這個連接就可以復用了,一個http處理完之后,另外一個http數據直接從這個連接走了。減少新建和斷開TCP連接的消耗。這個可以在Nginx設置,
這個keepalive_timout時間值意味著:一個http產生的tcp連接在傳送完最后一個響應后,還需要hold住keepalive_timeout秒后,才開始關閉這個連接。
特別注意TCP層的keep alive和http不是一個意思。TCP的是指:tcp連接建立后,如果客戶端很長一段時間不發(fā)送消息,當連接很久沒有收到報文,tcp會主動發(fā)送一個為空的報文(偵測包)給對方,如果對方收到了并且回復了,證明對方還在。如果對方沒有報文返回,重試多次之后則確認連接丟失,斷開連接。
tcp的keep alive可通過
net.ipv4.tcp_keepalive_intvl = 75 // 當探測沒有確認時,重新發(fā)送探測的頻度。缺省是75秒。
net.ipv4.tcp_keepalive_probes = 9 //在認定連接失效之前,發(fā)送多少個TCP的keepalive探測包。缺省值是9。這個值乘以tcp_keepalive_intvl之后決定了,一個連接發(fā)送了keepalive之后可以有多少時間沒有回應
net.ipv4.tcp_keepalive_time = 7200 //當keepalive起用的時候,TCP發(fā)送keepalive消息的頻度。缺省是2小時。一般設置為30分鐘1800
修改:
可以
tcp是面向連接的,upd是無連接狀態(tài)的。
udp相比tcp沒有建立連接的過程,所以更快,同時也更安全,不容易被攻擊。upd沒有阻塞控制,因此出現網絡阻塞不會使源主機的發(fā)送效率降低。upd支持一對多,多對多等,tcp是點對點傳輸。tcp首部開銷20字節(jié),udp8字節(jié)。
udp使用場景:視頻通話、im聊天等。
time-wait表示客戶端等待服務端返回關閉信息的狀態(tài),closed_wait表示服務端得知客戶端想要關閉連接,進入半關閉狀態(tài)并返回一段TCP報文。
time-wait作用:
解決辦法:
close_wait:
被動關閉,通常是由于客戶端忘記關閉tcp連接導致。
根據業(yè)務來啊~
重要指標是cardinality(不重復數量),這個數量/總行數如果過?。ㄚ吔?)代表索引基本沒意義,比如sex性別這種。
另外查詢不要使用select *,根據select的條件+where條件做組合索引,盡量實現覆蓋索引,避免回表。
僵尸進程:
即子進程先于父進程退出后,子進程的PCB需要其父進程釋放,但是父進程并沒有釋放子進程的PCB,這樣的子進程就稱為僵尸進程,僵尸進程實際上是一個已經死掉的進程。
孤兒進程:
一個父進程退出,而它的一個或多個子進程還在運行,那么那些子進程將成為孤兒進程。孤兒進程將被init進程(進程號為1)所收養(yǎng),并由init進程對它們完成狀態(tài)收集工作。
子進程死亡需要父進程來處理,那么意味著正常的進程應該是子進程先于父進程死亡。當父進程先于子進程死亡時,子進程死亡時沒父進程處理,這個死亡的子進程就是孤兒進程。
但孤兒進程與僵尸進程不同的是,由于父進程已經死亡,系統會幫助父進程回收處理孤兒進程。所以孤兒進程實際上是不占用資源的,因為它終究是被系統回收了。不會像僵尸進程那樣占用ID,損害運行系統。
原文鏈接:
產生死鎖的四個必要條件:
(1) 互斥條件:一個資源每次只能被一個進程使用。
(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 循環(huán)等待條件:若干進程之間形成一種頭尾相接的循環(huán)等待資源關系。
避免方法:
端口占用:lsof -i:端口號 或者 nestat
cpu、內存占用:top
發(fā)送信號:kill -l 列出所有信號,然后用 kill [信號變化] [進程號]來執(zhí)行。如kill -9 453。強制殺死453進程
git log:查看提交記錄
git diff :查看變更記錄
git merge:目標分支改變,而源分支保持原樣。優(yōu)點:保留提交歷史,保留分支結構。但會有大量的merge記錄
git rebase:將修改拼接到最新,復雜的記錄變得優(yōu)雅,單個操作變得(revert)很簡單;缺點:
git revert:反做指定版本,會新生成一個版本
git reset:重置到某個版本,中間版本全部丟失
etcd、Consul
pprof
節(jié)省空間(非葉子節(jié)點不存儲數據,相對b tree的優(yōu)勢),減少I/O次數(節(jié)省的空間全部存指針地址,讓樹變的矮胖),范圍查找方便(相對hash的優(yōu)勢)。
explain
其他的見:
runtime2.go 中關于 p 的定義: 其中 runnext 指針決定了下一個要運行的 g,根據英文的注釋大致意思是說:
所以當設置 runtime.GOMAXPROCS(1) 時,此時只有一個 P,創(chuàng)建的 g 依次加入 P, 當最后一個即 i==9 時,加入的最后 一個 g 將會繼承當前主 goroutinue 的剩余時間片繼續(xù)執(zhí)行,所以會先輸出 9, 之后再依次執(zhí)行 P 隊列中其它的 g。
方法一:
方法二:
[圖片上傳失敗...(image-4ef445-1594976286098)]
方法1:to_days,返回給的日期從0開始算的天數。
方法2:data_add。向日期添加指定時間間隔
[圖片上傳失敗...(image-b67b10-1594976286098)]