欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线

go語言切片的例題 golang 創建切片

go面試題整理(附帶部分自己的解答)

原文:【 】

創新互聯公司專注于朝陽企業網站建設,響應式網站建設,電子商務商城網站建設。朝陽網站建設公司,為朝陽等地區提供建站服務。全流程按需定制網站,專業設計,全程項目跟蹤,創新互聯公司專業和態度為您提供的服務

如果有解答的不對的,麻煩各位在評論寫出來~

go的調度原理是基于GMP模型,G代表一個goroutine,不限制數量;M=machine,代表一個線程,最大1萬,所有G任務還是在M上執行;P=processor代表一個處理器,每一個允許的M都會綁定一個G,默認與邏輯CPU數量相等(通過runtime.GOMAXPROCS(runtime.NumCPU())設置)。

go調用過程:

可以能,也可以不能。

因為go存在不能使用==判斷類型:map、slice,如果struct包含這些類型的字段,則不能比較。

這兩種類型也不能作為map的key。

類似棧操作,后進先出。

因為go的return是一個非原子性操作,比如語句 return i ,實際上分兩步進行,即將i值存入棧中作為返回值,然后執行跳轉,而defer的執行時機正是跳轉前,所以說defer執行時還是有機會操作返回值的。

select的case的表達式必須是一個channel類型,所有case都會被求值,求值順序自上而下,從左至右。如果多個case可以完成,則會隨機執行一個case,如果有default分支,則執行default分支語句。如果連default都沒有,則select語句會一直阻塞,直到至少有一個IO操作可以進行。

break關鍵字可跳出select的執行。

goroutine管理、信息傳遞。context的意思是上下文,在線程、協程中都有這個概念,它指的是程序單元的一個運行狀態、現場、快照,包含。context在多個goroutine中是并發安全的。

應用場景:

例子參考:

waitgroup

channel

len:切片的長度,訪問時間復雜度為O(1),go的slice底層是對數組的引用。

cap:切片的容量,擴容是以這個值為標準。默認擴容是2倍,當達到1024的長度后,按1.25倍。

擴容:每次擴容slice底層都將先分配新的容量的內存空間,再將老的數組拷貝到新的內存空間,因為這個操作不是并發安全的。所以并發進行append操作,讀到內存中的老數組可能為同一個,最終導致append的數據丟失。

共享:slice的底層是對數組的引用,因此如果兩個切片引用了同一個數組片段,就會形成共享底層數組。當sliec發生內存的重新分配(如擴容)時,會對共享進行隔斷。詳細見下面例子:

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,如果要求并發安全,就用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文件讀寫參考:

保證排序前兩個相等的數其在序列的前后位置順序和排序后它們兩個的前后位置順序相同的排序叫穩定排序。

快速排序、希爾排序、堆排序、直接選擇排序不是穩定的排序算法。

基數排序、冒泡排序、直接插入排序、折半插入排序、歸并排序是穩定的排序算法。

參考:

head只請求頁面的首部。多用來判斷網頁是否被修改和超鏈接的有效性。

get請求頁面信息,并返回實例的主體。

參考:

401:未授權的訪問。

403: 拒絕訪問。

普通的http連接是客戶端連接上服務端,然后結束請求后,由客戶端或者服務端進行http連接的關閉。下次再發送請求的時候,客戶端再發起一個連接,傳送數據,關閉連接。這么個流程反復。但是一旦客戶端發送connection:keep-alive頭給服務端,且服務端也接受這個keep-alive的話,兩邊對上暗號,這個連接就可以復用了,一個http處理完之后,另外一個http數據直接從這個連接走了。減少新建和斷開TCP連接的消耗。這個可以在Nginx設置,

這個keepalive_timout時間值意味著:一個http產生的tcp連接在傳送完最后一個響應后,還需要hold住keepalive_timeout秒后,才開始關閉這個連接。

特別注意TCP層的keep alive和http不是一個意思。TCP的是指:tcp連接建立后,如果客戶端很長一段時間不發送消息,當連接很久沒有收到報文,tcp會主動發送一個為空的報文(偵測包)給對方,如果對方收到了并且回復了,證明對方還在。如果對方沒有報文返回,重試多次之后則確認連接丟失,斷開連接。

tcp的keep alive可通過

net.ipv4.tcp_keepalive_intvl = 75 // 當探測沒有確認時,重新發送探測的頻度。缺省是75秒。

net.ipv4.tcp_keepalive_probes = 9 //在認定連接失效之前,發送多少個TCP的keepalive探測包。缺省值是9。這個值乘以tcp_keepalive_intvl之后決定了,一個連接發送了keepalive之后可以有多少時間沒有回應

net.ipv4.tcp_keepalive_time = 7200 //當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時。一般設置為30分鐘1800

修改:

可以

tcp是面向連接的,upd是無連接狀態的。

udp相比tcp沒有建立連接的過程,所以更快,同時也更安全,不容易被攻擊。upd沒有阻塞控制,因此出現網絡阻塞不會使源主機的發送效率降低。upd支持一對多,多對多等,tcp是點對點傳輸。tcp首部開銷20字節,udp8字節。

udp使用場景:視頻通話、im聊天等。

time-wait表示客戶端等待服務端返回關閉信息的狀態,closed_wait表示服務端得知客戶端想要關閉連接,進入半關閉狀態并返回一段TCP報文。

time-wait作用:

解決辦法:

close_wait:

被動關閉,通常是由于客戶端忘記關閉tcp連接導致。

根據業務來啊~

重要指標是cardinality(不重復數量),這個數量/總行數如果過?。ㄚ吔?)代表索引基本沒意義,比如sex性別這種。

另外查詢不要使用select *,根據select的條件+where條件做組合索引,盡量實現覆蓋索引,避免回表。

僵尸進程:

即子進程先于父進程退出后,子進程的PCB需要其父進程釋放,但是父進程并沒有釋放子進程的PCB,這樣的子進程就稱為僵尸進程,僵尸進程實際上是一個已經死掉的進程。

孤兒進程:

一個父進程退出,而它的一個或多個子進程還在運行,那么那些子進程將成為孤兒進程。孤兒進程將被init進程(進程號為1)所收養,并由init進程對它們完成狀態收集工作。

子進程死亡需要父進程來處理,那么意味著正常的進程應該是子進程先于父進程死亡。當父進程先于子進程死亡時,子進程死亡時沒父進程處理,這個死亡的子進程就是孤兒進程。

但孤兒進程與僵尸進程不同的是,由于父進程已經死亡,系統會幫助父進程回收處理孤兒進程。所以孤兒進程實際上是不占用資源的,因為它終究是被系統回收了。不會像僵尸進程那樣占用ID,損害運行系統。

原文鏈接:

產生死鎖的四個必要條件:

(1) 互斥條件:一個資源每次只能被一個進程使用。

(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。

(3) 不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。

(4) 循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關系。

避免方法:

端口占用:lsof -i:端口號 或者 nestat

cpu、內存占用:top

發送信號:kill -l 列出所有信號,然后用 kill [信號變化] [進程號]來執行。如kill -9 453。強制殺死453進程

git log:查看提交記錄

git diff :查看變更記錄

git merge:目標分支改變,而源分支保持原樣。優點:保留提交歷史,保留分支結構。但會有大量的merge記錄

git rebase:將修改拼接到最新,復雜的記錄變得優雅,單個操作變得(revert)很簡單;缺點:

git revert:反做指定版本,會新生成一個版本

git reset:重置到某個版本,中間版本全部丟失

etcd、Consul

pprof

節省空間(非葉子節點不存儲數據,相對b tree的優勢),減少I/O次數(節省的空間全部存指針地址,讓樹變的矮胖),范圍查找方便(相對hash的優勢)。

explain

其他的見:

runtime2.go 中關于 p 的定義: 其中 runnext 指針決定了下一個要運行的 g,根據英文的注釋大致意思是說:

所以當設置 runtime.GOMAXPROCS(1) 時,此時只有一個 P,創建的 g 依次加入 P, 當最后一個即 i==9 時,加入的最后 一個 g 將會繼承當前主 goroutinue 的剩余時間片繼續執行,所以會先輸出 9, 之后再依次執行 P 隊列中其它的 g。

方法一:

方法二:

[圖片上傳失敗...(image-4ef445-1594976286098)]

方法1:to_days,返回給的日期從0開始算的天數。

方法2:data_add。向日期添加指定時間間隔

[圖片上傳失敗...(image-b67b10-1594976286098)]

golang-101-hacks(12)——切片作為函數參數傳遞

注:本文是對 golang-101-hacks 中文翻譯。

在Go語言中,函數參數是值傳遞。使用slice作為函數參數時,函數獲取到的是slice的副本:一個指針,指向底層數組的起始地址,同時帶有slice的長度和容量。既然各位熟知數據存儲的內存的地址,現在可以對切片數據進行修改。讓我們看看下面的例子:

In Go, the function parameters are passed by value. With respect to use slice as a function argument, that means the function will get the copies of the slice: a pointer which points to the starting address of the underlying array, accompanied by the length and capacity of the slice. Oh boy! Since you know the address of the memory which is used to store the data, you can tweak the slice now. Let's see the following example:

運行結果如下

由此可見,執行modifyValue函數,切片s的元素發生了變化。盡管modifyValue函數只是操作slice的副本,但是任然改變了切片的數據元素,看另一個例子:

You can see, after running modifyValue function, the content of slice s is changed. Although the modifyValue function just gets a copy of the memory address of slice's underlying array, it is enough!

See another example:

The result is like this:

而這一次,addValue函數并沒有修改main函數中的切片s的元素。這是因為它只是操作切片s的副本,而不是切片s本身。所以如果真的想讓函數改變切片的內容,可以傳遞切片的地址:

This time, the addValue function doesn't take effect on the s slice in main function. That's because it just manipulate the copy of the s, not the "real" s.

So if you really want the function to change the content of a slice, you can pass the address of the slice:

運行結果如下

go語言中實現切片(slice)的三種方式

定義一個切片,然后讓切片去引用一個已經創建好的數組。基本語法如下:

索引1:切片引用的起始元素位

索引2:切片只引用該元素位之前的元素

例程如下:

在該方法中,我們未指定容量cap,這里的值為5是系統定義的。

在方法一中,可以用arr數組名來操控數組中的元素,也可以通過slice切片來操控數組中的元素。切片是直接引用數組,數組是事先存在的,程序員是可見的。

通過 make 來創建切片,基本語法如下:

make函數第三個參數cap即容量是可選的,如果一定要自己注明的話,要注意保證cap≥len。

用該方法可以 指定切片的大小(len)和容量(cap)

例程如下:

由于未賦值系統默認將元素值置為0,即:

數值類型數組:????默認值為 0

字符串數組:? ? ? ?默認值為 ""

bool數組:? ? ? ? ? ?默認值為 false

在方法二中,通過make方式創建的切片對應的數組是由make底層維護,對外不可見,即只能通過slice去訪問各個元素。

定義一個切片,直接就指定具體數組,使用原理類似于make的方式。

例程如下:

Go語言 排序與搜索切片

Go語言標準庫中提供了sort包對整型,浮點型,字符串型切片進行排序,檢查一個切片是否排好序,使用二分法搜索函數在一個有序切片中搜索一個元素等功能。

關于sort包內的函數說明與使用,請查看

在這里簡單講幾個sort包中常用的函數

在Go語言中,對字符串的排序都是按照字節排序,也就是說在對字符串排序時是區分大小寫的。

二分搜索算法

Go語言中提供了一個使用二分搜索算法的sort.Search(size,fn)方法:每次只需要比較㏒?n個元素,其中n為切片中元素的總數。

sort.Search(size,fn)函數接受兩個參數:所處理的切片的長度和一個將目標元素與有序切片的元素相比較的函數,該函數是一個閉包,如果該有序切片是升序排列,那么在判斷時使用 有序切片的元素 = 目標元素。該函數返回一個int值,表示與目標元素相同的切片元素的索引。

在切片中查找出某個與目標字符串相同的元素索引

新聞名稱:go語言切片的例題 golang 創建切片
文章鏈接:http://www.kartarina.com/article12/ddddogc.html

成都網站建設公司_創新互聯,為您提供云服務器、微信公眾號App開發、ChatGPT、網站改版、微信小程序

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

手機網站建設
欧美日韩激情_美女国产一区_国产精品久久久久影院日本_69xxx在线
日韩欧美一级在线播放| 日本韩国精品在线| 青青草原综合久久大伊人精品 | 成人国产精品视频| 国产在线播精品第三| 久久精品免费观看| 国产一区二区三区视频在线播放| 久久草av在线| 成人午夜私人影院| 91精彩视频在线观看| 欧美午夜精品理论片a级按摩| 欧美三区在线视频| 日韩一卡二卡三卡国产欧美| 欧美一区二区三区精品| 日韩免费看的电影| 国产日韩av一区| 亚洲欧美国产77777| 婷婷开心激情综合| 久久99精品久久只有精品| 国产成人三级在线观看| 色综合网站在线| 777色狠狠一区二区三区| xnxx国产精品| 亚洲丝袜美腿综合| 麻豆国产欧美一区二区三区| 国产成人鲁色资源国产91色综| 成人av影视在线观看| 欧美精选一区二区| 国产亚洲一区字幕| 午夜欧美在线一二页| 国产一区二区精品久久99| 91一区一区三区| 日韩精品中文字幕在线不卡尤物 | 欧美网站一区二区| 2014亚洲片线观看视频免费| 亚洲人成精品久久久久久| 男女男精品视频| 99re这里只有精品视频首页| 宅男噜噜噜66一区二区66| 中文在线一区二区| 男男gaygay亚洲| 一本到不卡免费一区二区| 亚洲精品一线二线三线无人区| 亚洲免费观看高清在线观看| 久99久精品视频免费观看| 91久久国产最好的精华液| 国产网站一区二区三区| 日本伊人精品一区二区三区观看方式| 成人精品免费视频| 亚洲日本va午夜在线影院| 日本中文字幕一区| 日本精品视频一区二区| 国产精品伦一区| 国产一区欧美一区| 日韩一级黄色大片| 视频一区二区三区在线| 色又黄又爽网站www久久| 亚洲国产精品99久久久久久久久| 蜜桃一区二区三区四区| 欧美军同video69gay| 亚洲国产日日夜夜| 91福利国产精品| 亚洲欧美区自拍先锋| 不卡影院免费观看| 国产欧美日韩另类视频免费观看 | 日本大香伊一区二区三区| 久久久不卡影院| 韩国av一区二区| 精品福利在线导航| 久久99精品久久久久| 欧美va日韩va| 精品无码三级在线观看视频| 欧美成人在线直播| 韩国av一区二区三区四区| 日韩精品一区国产麻豆| 成人av免费观看| 国产精品久久夜| 99久久久久久99| 亚洲美女屁股眼交3| 91黄色激情网站| 亚洲成av人片在www色猫咪| 91福利在线看| 丝袜美腿亚洲一区| 欧美不卡视频一区| 国产黄色精品网站| 日韩一区在线免费观看| 欧美性videosxxxxx| 无码av免费一区二区三区试看 | 亚洲免费毛片网站| 欧美三级中文字幕| 老司机一区二区| 国产欧美精品在线观看| 菠萝蜜视频在线观看一区| 一区二区三区四区中文字幕| 欧美另类变人与禽xxxxx| 精品影院一区二区久久久| 国产精品美女久久久久aⅴ国产馆| 91网址在线看| 蜜臀久久久久久久| 中文字幕av一区二区三区免费看| 在线观看亚洲精品| 精品综合久久久久久8888| 18成人在线视频| 欧美日本在线一区| 国产91对白在线观看九色| 一区二区三区四区不卡视频| 日韩一区二区三区在线视频| 国产精品亚洲午夜一区二区三区 | 久久精品免费观看| 日韩理论在线观看| 日韩亚洲国产中文字幕欧美| 成+人+亚洲+综合天堂| 蜜桃av噜噜一区二区三区小说| 国产精品美女久久久久久久 | 久久综合狠狠综合久久综合88 | 日韩免费在线观看| 91啪亚洲精品| 精品在线你懂的| 亚洲一区中文日韩| 国产精品二三区| 精品福利一区二区三区免费视频| 91国产免费观看| 成人精品小蝌蚪| 国产精品原创巨作av| 午夜精品成人在线视频| 中文字幕亚洲电影| 欧美国产欧美综合| 精品国产电影一区二区| 制服丝袜激情欧洲亚洲| 在线国产亚洲欧美| 99久久精品情趣| 国产.精品.日韩.另类.中文.在线.播放| 日韩影视精彩在线| 亚洲成av人片一区二区梦乃| 国产精品久久二区二区| 国产亚洲1区2区3区| 中文字幕av资源一区| 久久综合九色欧美综合狠狠| 91精品福利在线一区二区三区| 欧美性生活大片视频| 一本一道综合狠狠老| 99精品1区2区| 91在线一区二区三区| 91在线一区二区| 色综合一区二区| 91久久精品国产91性色tv| 91老师国产黑色丝袜在线| 99久久免费精品高清特色大片| 国产91丝袜在线播放| 懂色中文一区二区在线播放| 国产成人亚洲精品青草天美| 国产精品123区| www.欧美.com| 欧美视频一区二区三区在线观看 | 成人污视频在线观看| 成人免费视频视频在线观看免费| 国产精品伊人色| 成人h动漫精品| 91在线高清观看| 91电影在线观看| 欧美日韩国产综合一区二区三区 | 国产精品麻豆视频| 亚洲三级在线看| 午夜日韩在线观看| 美女视频黄久久| 国产精品中文字幕一区二区三区| 国产91清纯白嫩初高中在线观看| 99国产精品99久久久久久| 欧美色综合影院| 精品国产一区二区三区久久久蜜月| 欧美精品一区视频| 亚洲天堂网中文字| 午夜精品福利一区二区蜜股av| 久久国产福利国产秒拍| 成人禁用看黄a在线| 欧美日韩免费观看一区二区三区| 欧美一区二区大片| 中文久久乱码一区二区| 亚洲国产乱码最新视频 | 久久这里只有精品视频网| 中文字幕欧美三区| 亚洲国产视频网站| 极品尤物av久久免费看| 色综合中文字幕| 精品国产髙清在线看国产毛片| 综合网在线视频| 久久99精品久久久久久| 色婷婷综合中文久久一本| 欧美成人午夜电影| 亚洲在线一区二区三区| 国产乱色国产精品免费视频| 欧美色涩在线第一页| 中文字幕第一区| 免费视频最近日韩| 欧洲精品一区二区三区在线观看| 日韩欧美资源站| 亚洲一二三四久久| av在线不卡电影| 久久免费精品国产久精品久久久久| 亚洲午夜精品网|