欧美1区2区3区激情无套,两个女人互添下身视频在线观看,久久av无码精品人妻系列,久久精品噜噜噜成人,末发育娇小性色xxxx

Galxe - 二面 - 杭州 面經(jīng) 已oc

(一個(gè)小時(shí)二十分鐘)

1. 介紹一下最近三個(gè)月做的事情。

2. 對(duì)于 rocksdb 了解嗎?(參與的開(kāi)源項(xiàng)目中用到了)

3. 講講在這個(gè)項(xiàng)目中的用法。(對(duì)實(shí)現(xiàn)不太了解,從設(shè)計(jì)相關(guān)的角度講了一下)

4. 假設(shè)你有一個(gè)集群,有一批大量的 kv(key 很大(無(wú)規(guī)律),value很?。┬枰獙懭耄阆胂脒@里對(duì)讀/寫分別怎么優(yōu)化?(大概從集群結(jié)構(gòu),然后梳理到單節(jié)點(diǎn),之后討論讀寫優(yōu)化,講異步寫的時(shí)候提到了 WAL)

5. 項(xiàng)目中 WAL 怎么用的?(拉了一個(gè)具體的實(shí)現(xiàn)場(chǎng)景出來(lái)講,ZSet SkipList優(yōu)化實(shí)現(xiàn)相關(guān),講了流程)

6. 集群分片這里怎么實(shí)現(xiàn)?(上一輪面試和另一個(gè)面試官聊過(guò),大概講了一下)

7. 我看你這里有做集群的擴(kuò)縮容,講講怎么做的。(本節(jié)點(diǎn)存一份連接信息,新增Voter,然后廣播出去)

8. 我看你這里有一些內(nèi)存泄漏的排查經(jīng)驗(yàn),可以講講平時(shí)怎么排查嗎?(還是拉了一件具體做過(guò)的事情講了整個(gè)排查到確認(rèn)問(wèn)題的過(guò)程)

9. 我看你這里Golang比較熟悉,做個(gè)題吧。(并發(fā)安全的LRUCache)

遇到兩次了,貼個(gè)代碼

package main

import (
	"fmt"
	"sync"
	"sync/atomic"
	"unsafe"
)

type Node struct {
	key  string
	val  string
	next *Node
	prev *Node
}

type LRUCache struct {
	capacity int
	size atomic.Int64
	cache sync.Map // key -> *Node
	head  *Node
	tail  *Node
}

func NewLRUCache(capacity int) *LRUCache {
	lru := &LRUCache{
		capacity: capacity,
		head:     &Node{},
		tail:     &Node{},
	}

	lru.head.next = lru.tail
	lru.tail.prev = lru.head

	return lru
}

func (c *LRUCache) Get(key string) (string, bool) {
	if node, ok := c.cache.Load(key); ok {
		c.moveToHead(node.(*Node))
		return node.(*Node).val, true
	}

	return "", false
}

func (c *LRUCache) Put(key string, value string) {
	if node, ok := c.cache.Load(key); ok {
		node.(*Node).val = value
		c.moveToHead(node.(*Node))
		return
	}

	newNode := &Node{key: key, val: value}
	c.cache.Store(key, newNode)
	c.addToHead(newNode)
	c.size.Add(1)

	if c.size.Load() > int64(c.capacity) {
		removed := c.removeTail()
		c.cache.Delete(removed.key)
		c.size.Add(-1)
	}
}

func (c *LRUCache) addToHead(n *Node) {
	atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(&n.prev)), unsafe.Pointer(n.prev), unsafe.Pointer(c.head))
	atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(&n.next)), unsafe.Pointer(n.next), unsafe.Pointer(c.head.next))
	atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(&c.head.next.prev)), unsafe.Pointer(c.head.next.prev), unsafe.Pointer(n))
	atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(&c.head.next)), unsafe.Pointer(c.head.next), unsafe.Pointer(n))
}

func (c *LRUCache) moveToHead(n *Node) {
	c.removeNode(n)
	c.addToHead(n)
}

func (c *LRUCache) removeNode(n *Node) {
	atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(&n.prev.next)), unsafe.Pointer(n.prev.next), unsafe.Pointer(n.next))
	atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(&n.next.prev)), unsafe.Pointer(n.next.prev), unsafe.Pointer(n.prev))
}

func (c *LRUCache) removeTail() *Node {
	tail := c.tail.prev
	c.removeNode(tail)
	return tail
}

func main() {
	// 創(chuàng)建一個(gè)容量為 2 的 LRUCache
	c := NewLRUCache(2)

	// 放入 k1, k2
	c.Put("k1", "v1")
	c.Put("k2", "v2")

	// 再次獲取 k1
	if val, ok := c.Get("k1"); ok {
		fmt.Println("Get k1:", val) // 期望輸出 "v1"
	} else {
		fmt.Println("k1 不存在")
	}

	// 插入 k3,此時(shí)容量超出,應(yīng)當(dāng)淘汰最久未使用的元素 (k2 或 k1)
	c.Put("k3", "v3")

	// 檢查 k2 是否被淘汰
	if val, ok := c.Get("k2"); ok {
		fmt.Println("Get k2:", val)
	} else {
		fmt.Println("k2 不存在,已經(jīng)被淘汰")
	}

	// 繼續(xù)查看 k3
	if val, ok := c.Get("k3"); ok {
		fmt.Println("Get k3:", val) // 期望輸出 "v3"
	} else {
		fmt.Println("k3 不存在")
	}
}

10. 繼續(xù)做題。(假設(shè)在區(qū)塊鏈中每次交易是一個(gè)最小事務(wù),我現(xiàn)在需要保證并發(fā)進(jìn)行的結(jié)果和串行的結(jié)果是一致的,怎么實(shí)現(xiàn))

結(jié)構(gòu)定義:

    type Transaction struct {
    	ID string
    	WriteSet map[string]string // 準(zhǔn)備寫入的 key->newValue
    }

測(cè)試數(shù)據(jù):

txs := []Transaction{
    		{
    			ID: "Tx1",
    			WriteSet: map[string]string{
    				"A": "100",
    				"B": "200",
    			},
    		},
    		{
    			ID: "Tx2",
    			WriteSet: map[string]string{
    				"C": "300",
    				"B": "200",
    			},
    		},
    		{
    			ID: "Tx3",
    			WriteSet: map[string]string{
    				"A": "200",
    			},
    		},
    	}

大致意思就是現(xiàn)在串行的結(jié)果是 A = 200, B = 200, C = 300

需要修改為并發(fā),并且并發(fā)執(zhí)行的結(jié)果要和串行的一致。

思路:注意到 ID 的性質(zhì),可以根據(jù) ID 確認(rèn)哪個(gè)值更新,考慮類似多版本的思想,將 ID 作為結(jié)果的版本,并發(fā)執(zhí)行時(shí)保存所有的版本,最終結(jié)果即每個(gè)key最新版本的值。

維護(hù)版本使用大根堆即可。如下:

 	type TxPair struct {
    	ID    string
    	Value string
    }
    
    type TxPairHeap []TxPair
    
    func (h TxPairHeap) Len() int { return len(h) }
    
    func (h TxPairHeap) Less(i, j int) bool { return h[i].ID > h[j].ID }
    
    func (h TxPairHeap) Swap(i, j int) {
    	h[i], h[j] = h[j], h[i]
    }
    
    func (h *TxPairHeap) Push(x interface{}) {
    	*h = append(*h, x.(TxPair))
    }
    
    func (h *TxPairHeap) Pop() interface{} {
    	old := *h
    	n := len(old)
    	x := old[n-1]
    	*h = old[0 : n-1]
    	return x
    }


剩下的 goroutine + WaitGroup,不斷Push到堆就行

	func main() {
    	txs := []Transaction{
    		{
    			ID: "Tx1",
    			WriteSet: map[string]string{
    				"A": "100",
    				"B": "200",
    			},
    		},
    		{
    			ID: "Tx2",
    			WriteSet: map[string]string{
    				"C": "300",
    				"B": "200",
    			},
    		},
    		{
    			ID: "Tx3",
    			WriteSet: map[string]string{
    				"A": "200",
    			},
    		},
    	}
    
    	res := make(map[string]*TxPairHeap)
    
    	var wg sync.WaitGroup
    	mu := &sync.Mutex{}
    
    	for _, tx := range txs {
    		wg.Add(1)
    		go func(t Transaction) {
    			defer wg.Done()
    
    			mu.Lock()
    			defer mu.Unlock()
    
    			txID := t.ID
    			for k, v := range t.WriteSet {
    				var pairHeap *TxPairHeap
    				if _, ok := res[k]; ok {
    					pairHeap = res[k]
    				} else {
    					pairHeap = &TxPairHeap{}
    					res[k] = pairHeap
    					heap.Init(pairHeap)
    				}
    
    				pairHeap.Push(TxPair{ID: txID, Value: v})
    			}
    		}(tx)
    	}
    
    	wg.Wait()
    
    	for k, hp := range res {
    		fmt.Println("Key = ", k, "Value = ", hp.Pop().(TxPair).Value)
    	}
    }

11. 這里如果我每個(gè)交易都需要一個(gè)前提條件的完成后才能進(jìn)行,怎么辦,講講思路。(引入拓?fù)?,維護(hù)拓?fù)湫再|(zhì)的前提下維護(hù)堆性質(zhì))

---

結(jié)束。

有些問(wèn)題忘了(

---

2.24 update: oc

#面經(jīng)#
全部評(píng)論
記錄一下:和群友聊天的時(shí)候才發(fā)現(xiàn) lru 并發(fā)有點(diǎn)問(wèn)題(,還是得加大鎖,優(yōu)化的話考慮分桶
1 回復(fù) 分享
發(fā)布于 02-22 23:36 寧夏
太強(qiáng)了,佬
點(diǎn)贊 回復(fù) 分享
發(fā)布于 03-14 14:54 湖南
都是本地idea寫的嗎
點(diǎn)贊 回復(fù) 分享
發(fā)布于 02-25 10:32 香港

相關(guān)推薦

前情提要:http://www.fangfengwang8.cn/share/jump/1744867053616--太長(zhǎng)不看,直接先上整理的面經(jīng)# 4399 - java只有一面 ● 你為什么選擇投遞Java后端開(kāi)發(fā)崗位?  ● Java和Go語(yǔ)言的優(yōu)缺點(diǎn)是什么?  ● 你了解Go語(yǔ)言的協(xié)程實(shí)現(xiàn)嗎?  ● 在Go語(yǔ)言中,編寫協(xié)程時(shí)需要關(guān)注哪些問(wèn)題?  ● Go語(yǔ)言中,有哪些方案可以保證并發(fā)安全?  ● Go語(yǔ)言中常見(jiàn)的原子操作有哪些?  ● Go中的sync.WaitGroup和sync.Once有什么區(qū)別?  ● 如果第三方接口返回的數(shù)據(jù)類型不確定,你會(huì)如何設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)?  ● 如何處理Go語(yǔ)言中接口的空類型?  ● 如果你請(qǐng)求第三方接口時(shí)出現(xiàn)超時(shí),你會(huì)如何處理?  ● 在Go語(yǔ)言中,如何使用Context實(shí)現(xiàn)請(qǐng)求超時(shí)?  ● Go語(yǔ)言中常用的ORM框架有哪些?  ● MySQL中常見(jiàn)的鎖類型有哪些?  ● MySQL中的間隙鎖是如何產(chǎn)生的?  ● Redis中常見(jiàn)的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)有哪些?  ● 如果有多個(gè)服務(wù)器需要加鎖處理接口請(qǐng)求,你會(huì)怎么做?  ● 如何實(shí)現(xiàn)分布式鎖?在Redis中,分布式鎖會(huì)用到哪些命令?  ● 如果分布式鎖沒(méi)有正常釋放,你會(huì)如何進(jìn)行容災(zāi)處理?  ● 如果加了分布式鎖后,業(yè)務(wù)長(zhǎng)時(shí)間被阻塞,如何減少服務(wù)不可用的時(shí)間?  ● 如何監(jiān)控接口響應(yīng)時(shí)間并優(yōu)化服務(wù)的可用性?  ● 如果你需要將代碼部署到阿里云的Linux服務(wù)器上,你會(huì)如何做?  ● 如何在Windows開(kāi)發(fā)環(huán)境下打包Go語(yǔ)言代碼,并使其在Linux環(huán)境中運(yùn)行?  ● 你覺(jué)得自己做的哪些項(xiàng)目比較有亮點(diǎn)?  ● 在設(shè)計(jì)單點(diǎn)登錄系統(tǒng)時(shí),遇到的核心難點(diǎn)是什么?  ● 為什么你選擇找實(shí)習(xí),除了零花錢,還有哪些原因?  ● 如果公司需要你學(xué)習(xí)新的編程語(yǔ)言,你是否有信心快速上手?  ● 你的學(xué)習(xí)規(guī)劃是什么樣的?  # 訊飛 - java - 消費(fèi)者 只有一面  ● Golang語(yǔ)言的優(yōu)勢(shì)和劣勢(shì)是什么?  ● 你之前在抖音服務(wù)端開(kāi)發(fā)的項(xiàng)目中,團(tuán)隊(duì)的規(guī)模有多大?  ● 作為服務(wù)端后端負(fù)責(zé)人,你在項(xiàng)目中具體負(fù)責(zé)哪些工作?  ● 你是如何管理項(xiàng)目的節(jié)奏和設(shè)計(jì)文檔的?  ● 在團(tuán)隊(duì)協(xié)作中,你是如何分配任務(wù)和溝通進(jìn)度的?  ● 在項(xiàng)目中遇到過(guò)團(tuán)隊(duì)成員之間的認(rèn)知偏差,如何處理?  ● 你在項(xiàng)目中遇到過(guò)哪些技術(shù)上的挑戰(zhàn)或難題?  ● Golang語(yǔ)言中,內(nèi)存泄漏的常見(jiàn)原因是什么?  ● 如何排查Golang中的內(nèi)存泄漏問(wèn)題?  ● Go語(yǔ)言的協(xié)程與傳統(tǒng)線程有什么區(qū)別?  ● Go語(yǔ)言是如何實(shí)現(xiàn)協(xié)程之間的通信的?  ● MySQL的索引結(jié)構(gòu)是什么?  ● B+樹(shù)是什么樣的結(jié)構(gòu),它有哪些特性?  ● 聚簇索引和非聚簇索引有什么區(qū)別?  ● 如果一個(gè)表沒(méi)有主鍵,它還會(huì)有聚簇索引嗎?  ● 如果我們?cè)诙鄠€(gè)字段上建立聯(lián)合索引,字段順序是a、b、c,查詢條件為b=... and a=...,會(huì)使用該索引嗎?  ● 為什么MySQL使用MVCC來(lái)實(shí)現(xiàn)不同的事務(wù)隔離級(jí)別?  ● 你在項(xiàng)目中使用過(guò)Redis嗎?  ● 使用Redis作為緩存時(shí),如何保證緩存和底層數(shù)據(jù)的一致性?  ● 當(dāng)某些數(shù)據(jù)訪問(wèn)頻繁時(shí),刪除緩存可能會(huì)帶來(lái)壓力,如何優(yōu)化?  ● 在高并發(fā)的場(chǎng)景下,如何優(yōu)化旁路緩存策略?  ● 如果遇到DB和緩存不一致的情況,如何解決?  ● Redis的高性能是如何設(shè)計(jì)出來(lái)的?  ● Redis為何采用單線程模型,它的性能優(yōu)勢(shì)是什么?  ● 在高并發(fā)場(chǎng)景下使用分布式鎖時(shí),如何避免加鎖帶來(lái)的性能問(wèn)題?# 知乎 - 監(jiān)控組● 前綴樹(shù)是什么?它的應(yīng)用場(chǎng)景是什么?  ● LRU緩存是怎么實(shí)現(xiàn)的?  ● 你能解釋一下虛擬內(nèi)存嗎?它解決了什么問(wèn)題?  ● 如果宿主機(jī)的CPU打爆了,你如何判斷哪個(gè)進(jìn)程占用了最多的CPU資源?  ● 軟鏈接和硬鏈接有什么區(qū)別?  ● 什么是上下文切換?一般在什么情況下會(huì)發(fā)生上下文切換?  ● 如果創(chuàng)建了10萬(wàn)線程來(lái)處理任務(wù),會(huì)有什么問(wèn)題?除了內(nèi)存泄漏和性能問(wèn)題,還有哪些方面會(huì)受到影響?  ● 你怎么分析慢SQL查詢?  ● IP協(xié)議和ARP協(xié)議的作用分別是什么?  ● 如果帶寬不是瓶頸,如何快速傳輸大文件?  ● Singleflight的機(jī)制是什么?  ● TCP的流量控制和擁塞控制有何不同?  ● 如何調(diào)整TCP的滑動(dòng)窗口大小,以確保最大的吞吐量?  ● 常見(jiàn)的限流算法有哪些?漏桶算法和令牌桶算法有什么區(qū)別?  ● 雪花算法是什么?為什么你在項(xiàng)目中使用了它?  --面試上的反思的話,最開(kāi)始也好像也沒(méi)太多好說(shuō)的:?jiǎn)栴}后面還是改掉了大部分只是最開(kāi)始面試的話,根本就不怎么會(huì)面試雖然我也是前暑期,大二下就開(kāi)始的了但是我根本沒(méi)那么強(qiáng)的學(xué)習(xí)進(jìn)化能力這是比較讓人絕望的事情經(jīng)歷回顧的話,我的秋招是從十月末開(kāi)始的那個(gè)時(shí)候已經(jīng)準(zhǔn)備從實(shí)習(xí)離職了,沒(méi)轉(zhuǎn)正然后其實(shí)當(dāng)時(shí),根本就沒(méi)多少中大廠能過(guò)我的簡(jiǎn)歷想了下后面還是詳細(xì)開(kāi)另一個(gè)帖子專門說(shuō)我的秋招詳細(xì)經(jīng)歷和心路,如果有人感興趣的話這里就先打住這里只說(shuō)跟面試強(qiáng)相關(guān)一點(diǎn)的事情了清楚記得第一個(gè)過(guò)我簡(jiǎn)歷還是4399所以雖然面試體驗(yàn)不好?好像也沒(méi)太不好,算一般吧。只是公司比較一般面4399的時(shí)候,更多是基礎(chǔ)知識(shí)沒(méi)答上來(lái)。一些場(chǎng)景分析欠佳現(xiàn)在想來(lái)的話,其實(shí)這些東西都能背不是只停留在對(duì)基礎(chǔ)知識(shí)的理解,而是確實(shí)去針對(duì)針對(duì)問(wèn)題的回答演練所以當(dāng)時(shí)得出的一個(gè)很重要的結(jié)論是,模擬面試和刷面經(jīng)很重要。想起來(lái)了,面試官遲到+只面了30min,只能說(shuō)態(tài)度還行這個(gè)是實(shí)習(xí)中面的,偷感拉滿當(dāng)時(shí)裝作去對(duì)接安卓頭頭離開(kāi)的工位訊飛忘了是什么階段了當(dāng)時(shí)在校還找不到面試的地方在圖書(shū)館陽(yáng)臺(tái)面的,環(huán)境比較差整體好像回答得還行,但是也是一面就掛了算是第一個(gè)還挺想去的廠夢(mèng)碎了當(dāng)時(shí)應(yīng)該是問(wèn)得算簡(jiǎn)單,但是幾個(gè)關(guān)鍵技術(shù)問(wèn)題答得不是很完美就掛了不過(guò)說(shuō)起來(lái)訊飛挺看測(cè)評(píng)的,面試的時(shí)候還問(wèn)我有認(rèn)真做沒(méi)知乎也清楚記得,是離職前一天面的很有意思,當(dāng)時(shí)饅頭還說(shuō)我們這邊挺方便的,到處都是能面的會(huì)議室然后整體知乎算是第一次給我打上一點(diǎn)自信的面試體驗(yàn)還不錯(cuò),面試官雖然沒(méi)開(kāi)麥,但是會(huì)充分引導(dǎo)你然后這場(chǎng)突出一個(gè)酣暢淋漓其實(shí)問(wèn)題不止上面那些,是ai提取的,如果想要詳細(xì)的可以私我就是問(wèn)的問(wèn)題都挺有難度,但是我也能答出來(lái)一些雖然最后還是不合要求給掛了
青春豬頭少年不能沒(méi)有offer:佬真的很優(yōu)秀,加油!哥們也還在找
點(diǎn)贊 評(píng)論 收藏
分享
TIMELINE4.19 速通技術(shù)面,效率很高,我很喜歡4.22 已OC一面全面八股拷打OSI網(wǎng)絡(luò)模型TCP和UDP對(duì)比HTTP和HTTPS對(duì)比B+樹(shù)說(shuō)一下HTTP常見(jiàn)狀態(tài)碼線程和進(jìn)程的區(qū)別goroutine的調(diào)度模型GMP常見(jiàn)的排序了解哪些用過(guò)什么設(shè)計(jì)模式,單例模式,工廠模式這表有三個(gè)字段,第一個(gè)呢是學(xué)生的ID,第二個(gè)呢是科目的ID,第三個(gè)是分?jǐn)?shù),就是我怎么獲取每個(gè)學(xué)生的所有科目的總分兒。SQL如果要獲取總分在300以上的呢?SQL優(yōu)化怎么做explain type最好和最壞情況常用linux命令chmod 設(shè)置只讀,只讀+寫怎么設(shè)置手撕:快排無(wú)重復(fù)字符的最長(zhǎng)子串二面我的bg是安全專業(yè)AI怎么和安全結(jié)合起來(lái)UDP和TCP在哪層HTTP狀態(tài)碼三次握手和四次揮手的原因,為什么要三次握手,四次揮手?又問(wèn)一遍線程進(jìn)程和協(xié)程Golang的GC機(jī)制GC用什么工具查看用什么框架?GIN框架說(shuō)一下請(qǐng)求流程場(chǎng)景圖如何設(shè)計(jì)一個(gè)高并發(fā)高可用得系統(tǒng)代碼題:給了一段代碼查看有什么bug第三面AI面三小時(shí)速通今天打電話OC了總包和美團(tuán)白菜差不多可以參考一下
點(diǎn)贊 評(píng)論 收藏
分享
04-30 14:00
已編輯
門頭溝學(xué)院 golang
面了五十分鐘好多都答不上來(lái),但是面試官非常友善,還會(huì)教我很多我不懂的,雖然很緊張沒(méi)記住,好可惜問(wèn)的問(wèn)題很多,主要是因?yàn)槲覍W(xué)的也雜,雖然干的后端,但是前端因?yàn)閭€(gè)人經(jīng)歷也順帶(被迫)學(xué)了很多只停留在應(yīng)用層面1. 項(xiàng)目一拷打(不用Websocket可以改用什么 http輪詢 Channel Goroutine 高并發(fā)場(chǎng)景設(shè)計(jì))2. Docker命令,容器調(diào)度,如何打包3. mysql主從復(fù)制、聯(lián)合索引、InnoDB的索引結(jié)構(gòu)、InnoDB(支持事務(wù))和MyslAM的區(qū)別、sql優(yōu)化方法4. Typesrcipt 和 javascript的區(qū)別5. Kafka、RabbitMQ 的使用和場(chǎng)景6. Nginx的負(fù)載均衡、反向代理如何實(shí)現(xiàn)7. 操作系統(tǒng)零拷貝8. Redis緩存、分布式鎖、持久化機(jī)制9. 看你簡(jiǎn)歷寫了Vue,講一下Vue做的項(xiàng)目二吧(拷打了幾分鐘 給面試官展示項(xiàng)目網(wǎng)站成品)反問(wèn)1. 對(duì)我的面試評(píng)價(jià) (悲 感覺(jué)涼涼,說(shuō)我學(xué)的廣但不深雖然是事實(shí))2. 公司業(yè)務(wù)團(tuán)隊(duì)規(guī)模找實(shí)習(xí)真難啊,,,準(zhǔn)備的問(wèn)題都沒(méi)考,問(wèn)的都特別的落地,八股很少發(fā)個(gè)面經(jīng)積累人品吧,許愿oc----4.30更新oc啦哈哈,據(jù)hr說(shuō)面試官對(duì)我很滿意,開(kāi)心~祝大家都找到理想的工作!#牛客AI配圖神器#
查看9道真題和解析
點(diǎn)贊 評(píng)論 收藏
分享
評(píng)論
8
12
分享

創(chuàng)作者周榜

更多
正在熱議
更多
??途W(wǎng)
??推髽I(yè)服務(wù)