2025年高頻后端場景面試試題及最佳答案_第1頁
2025年高頻后端場景面試試題及最佳答案_第2頁
2025年高頻后端場景面試試題及最佳答案_第3頁
2025年高頻后端場景面試試題及最佳答案_第4頁
2025年高頻后端場景面試試題及最佳答案_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2025年高頻后端場景面試試題及最佳答案Q1:設(shè)計一個支持百萬級并發(fā)的秒殺系統(tǒng),需要考慮哪些核心問題?如何解決庫存超賣?核心問題包括流量峰值控制、庫存精準扣減、重復(fù)請求攔截、事務(wù)一致性保障、系統(tǒng)容錯能力。具體解決思路:1.流量分層過濾:前端做驗證碼限流(滑動拼圖/算術(shù)題),攔截機器刷單;Nginx層配置請求限流(如限制單個IP每秒5次請求),結(jié)合Lua腳本校驗用戶登錄態(tài);服務(wù)層用Sentinel做接口限流(QPS限制5萬/秒),將無效流量攔截在網(wǎng)關(guān)層。2.庫存預(yù)加載與原子扣減:秒殺前將商品庫存從數(shù)據(jù)庫加載到Redis(存儲結(jié)構(gòu)用string類型,key為"sku:1001:stock"),避免直接訪問數(shù)據(jù)庫??蹨p庫存時使用Lua腳本保證原子性:```lualocalstock=tonumber(redis.call('get',KEYS[1]))ifstock>0thenredis.call('decr',KEYS[1])return1elsereturn0end```該腳本通過Redis單線程執(zhí)行特性,避免多線程競爭導(dǎo)致的超賣。3.防重復(fù)提交:用戶點擊秒殺按鈕后,前端提供唯一token(UUID+時間戳),隨請求發(fā)送到服務(wù)端;服務(wù)端校驗token是否已使用(用Redis的setnx存儲,過期時間30秒),防止同一用戶重復(fù)提交。4.異步下單:秒殺成功后,將訂單信息寫入RabbitMQ(設(shè)置死信隊列處理失敗消息),由獨立的訂單服務(wù)異步處理庫存扣減、提供訂單等操作。數(shù)據(jù)庫層使用樂觀鎖(版本號機制)二次校驗庫存:```sqlupdatesku_stocksetstock=stock1,version=version+1wheresku_id=1001andversion={oldVersion}andstock>0```若更新行數(shù)為0,說明庫存已售罄,返回失敗。Q2:分布式系統(tǒng)中如何實現(xiàn)跨服務(wù)的事務(wù)一致性?Seata的AT模式與TCC模式的適用場景有何區(qū)別?分布式事務(wù)的核心是保證多個服務(wù)操作的原子性,常見方案包括XA協(xié)議、TCC(Try-Confirm-Cancel)、Saga模式、Seata框架等。實際項目中Seata的AT模式和TCC模式最常用:SeataAT模式(自動補償):原理:通過數(shù)據(jù)源代理攔截SQL,執(zhí)行前記錄"beforeimage"(數(shù)據(jù)快照),執(zhí)行后記錄"afterimage"。全局事務(wù)提交時直接提交本地事務(wù);回滾時根據(jù)beforeimage恢復(fù)數(shù)據(jù)。優(yōu)點:業(yè)務(wù)無侵入,開發(fā)者只需關(guān)注業(yè)務(wù)邏輯,無需編寫補償代碼。缺點:依賴數(shù)據(jù)庫的行鎖(如更新同一行數(shù)據(jù)時,AT模式會因全局鎖沖突導(dǎo)致性能下降),適合短事務(wù)(如電商下單-扣庫存場景,事務(wù)執(zhí)行時間<5秒)。TCC模式(手動補償):原理:將每個服務(wù)操作拆分為Try(預(yù)留資源)、Confirm(確認提交)、Cancel(回滾釋放)三個階段。例如,支付服務(wù)的Try階段凍結(jié)用戶賬戶余額,Confirm階段扣除凍結(jié)金額,Cancel階段解凍金額。優(yōu)點:不依賴數(shù)據(jù)庫鎖,可控制資源預(yù)留粒度(如凍結(jié)部分金額而非鎖定整個賬戶),適合長事務(wù)(如跨天的物流調(diào)度流程)或?qū)π阅芤蟾叩膱鼍埃ㄈ绺哳l交易)。缺點:業(yè)務(wù)侵入性強,需為每個操作編寫三個階段的代碼,且需保證Confirm/Cancel的冪等性(通過記錄事務(wù)日志+唯一事務(wù)ID校驗實現(xiàn))。選擇建議:短事務(wù)、低侵入選AT模式;長事務(wù)、需精細控制資源選TCC模式。例如,電商的"下單-扣庫存-減積分"流程適合AT模式(事務(wù)執(zhí)行快);金融的"跨行轉(zhuǎn)賬"流程適合TCC模式(需手動解凍資金)。Q3:MySQL分庫分表后,如何解決跨庫關(guān)聯(lián)查詢?如何設(shè)計全局唯一ID?跨庫關(guān)聯(lián)查詢的解決方案:1.字段冗余:在業(yè)務(wù)允許的范圍內(nèi),將關(guān)聯(lián)表的常用字段冗余到主表(如訂單表冗余用戶姓名、手機號)。需通過消息隊列(如Kafka)同步冗余字段變更(用戶修改手機號時,發(fā)送消息到訂單服務(wù)更新冗余字段)。2.全局索引表:單獨創(chuàng)建一張全局索引表(存儲分庫后的表名+記錄ID),通過ES或TiDB等中間件維護。例如,查詢用戶所有訂單時,先查ES獲取訂單ID列表,再根據(jù)ID路由到對應(yīng)的分庫查詢詳情。3.應(yīng)用層聚合:將關(guān)聯(lián)查詢拆分為多次單庫查詢,在應(yīng)用層合并結(jié)果。例如,查詢訂單及對應(yīng)的商品信息時,先查訂單庫獲取所有訂單,再根據(jù)商品ID列表分批查詢商品庫(使用in語句,注意控制in的長度,避免單庫壓力過大)。全局唯一ID設(shè)計方案:Snowflake(雪花算法):提供64位ID(1位符號位+41位時間戳+10位機器ID+12位序列號)。優(yōu)點是性能高(單機每秒提供百萬級ID)、有序性好(利于數(shù)據(jù)庫索引)。需解決時鐘回撥問題:檢測到時鐘回撥時,若回撥時間小于5ms,等待到正確時間再提供;若超過5ms,拋異常并報警(可結(jié)合ZooKeeper動態(tài)分配機器ID,避免固定機器ID導(dǎo)致的時鐘問題)。數(shù)據(jù)庫號段模式:通過一個全局數(shù)據(jù)庫表記錄各業(yè)務(wù)的ID號段(如業(yè)務(wù)A當前最大ID為10000,步長5000),應(yīng)用獲取號段后本地提供ID(10001-15000)。優(yōu)點是ID有序、無網(wǎng)絡(luò)開銷(本地提供)。需注意號段同步的原子性(用樂觀鎖更新號段:updateid_segmentsetmax_id={newMax}wherebiz_type={type}andmax_id={oldMax})。Redis提供:利用Redis的incr命令提供自增ID(如key為"id:order"),通過RDB+AOF持久化保證可靠性。優(yōu)點是支持高并發(fā)(Redis單線程處理incr命令,QPS可達10萬+)。缺點是ID無時間戳信息,且需考慮主從切換時的ID重復(fù)(可通過為不同節(jié)點設(shè)置不同的步長,如主節(jié)點步長3,從節(jié)點步長3,起始值分別為1、2、3)。實際項目中,電商訂單ID常用Snowflake(帶時間戳便于按時間統(tǒng)計),而用戶中心的用戶ID常用數(shù)據(jù)庫號段模式(保證絕對有序,便于分庫時按ID取模路由)。Q4:Redis緩存穿透、擊穿、雪崩的區(qū)別是什么?如何預(yù)防?三者區(qū)別:緩存穿透:查詢一個不存在的key(如用戶ID=-1),緩存不命中,請求直接打到數(shù)據(jù)庫。若被惡意攻擊,會導(dǎo)致數(shù)據(jù)庫壓力激增。緩存擊穿:熱點key過期瞬間,大量請求同時訪問該key,緩存不命中,請求全部打到數(shù)據(jù)庫(如某爆款商品的緩存過期)。緩存雪崩:大量key在同一時間過期(如設(shè)置相同的過期時間),導(dǎo)致緩存整體失效,請求集中打到數(shù)據(jù)庫,可能引發(fā)數(shù)據(jù)庫宕機。預(yù)防方案:緩存穿透:布隆過濾器:將所有可能的有效key預(yù)存入布隆過濾器(如用Guava的BloomFilter),查詢時先檢查key是否存在,不存在直接返回。需注意布隆過濾器的誤判率(可通過調(diào)整哈希函數(shù)和位數(shù)組大小降低)??罩稻彺妫翰樵兊綌?shù)據(jù)庫不存在該key時,將空值(如null)存入緩存,設(shè)置短過期時間(3-5分鐘),避免重復(fù)查詢。緩存擊穿:互斥鎖(分布式鎖):查詢緩存未命中時,用Redis的setnx獲取鎖(key為"lock:sku:1001",過期時間5秒),只有獲取鎖的請求去查詢數(shù)據(jù)庫并更新緩存,其他請求等待后重新查詢緩存。需處理鎖的過期時間與數(shù)據(jù)庫查詢時間的關(guān)系(可通過Lua腳本實現(xiàn)鎖的自動續(xù)期)。永不過期:對熱點key設(shè)置不過期,通過后臺任務(wù)異步更新緩存(如每隔30秒查詢數(shù)據(jù)庫,更新緩存值)。緩存雪崩:分散過期時間:為key設(shè)置隨機的過期時間(如基礎(chǔ)時間600秒+隨機0-120秒),避免大量key同時失效。二級緩存:使用本地緩存(如Caffeine)+Redis的二級緩存架構(gòu)。本地緩存無過期時間(或長過期時間),Redis作為主緩存。當Redis緩存失效時,先從本地緩存獲取,減少對數(shù)據(jù)庫的沖擊。限流降級:通過Sentinel對數(shù)據(jù)庫訪問接口設(shè)置限流(如QPS限制1000),超出閾值的請求直接返回降級信息(如"系統(tǒng)繁忙,請稍后再試")。Q5:設(shè)計一個高可用的微服務(wù)架構(gòu),需要考慮哪些關(guān)鍵組件?如何實現(xiàn)服務(wù)的自動擴縮容?關(guān)鍵組件包括:1.服務(wù)注冊與發(fā)現(xiàn):使用Consul或Nacos,服務(wù)啟動時向注冊中心注冊實例信息(IP:端口、健康狀態(tài)),消費者通過注冊中心獲取可用服務(wù)列表(避免硬編碼IP)。注冊中心需集群部署(如Nacos的3節(jié)點集群),保證自身高可用。2.負載均衡:客戶端負載均衡(如Ribbon、SpringCloudLoadBalancer)根據(jù)算法(輪詢、隨機、加權(quán))選擇服務(wù)實例;服務(wù)端負載均衡(如Nginx)用于網(wǎng)關(guān)層流量分發(fā)。需支持權(quán)重動態(tài)調(diào)整(如根據(jù)實例的CPU負載調(diào)整權(quán)重)。3.容錯機制:熔斷(Hystrix、Resilience4J):當服務(wù)錯誤率超過閾值(如50%),觸發(fā)熔斷,后續(xù)請求直接返回降級結(jié)果(如緩存的默認值),避免故障擴散。限流(Sentinel):限制單個服務(wù)實例的QPS(如限制為2000次/秒),防止因流量突增導(dǎo)致實例宕機。重試(SpringRetry):對冪等性操作(如查詢)設(shè)置重試策略(最多重試3次,間隔1秒),提高請求成功率。4.配置中心:使用Apollo或SpringCloudConfig,集中管理各環(huán)境的配置(開發(fā)、測試、生產(chǎn)),支持配置動態(tài)刷新(無需重啟服務(wù))。配置需加密存儲(如數(shù)據(jù)庫密碼用AES加密),通過配置中心解密后注入應(yīng)用。自動擴縮容實現(xiàn):基于指標的擴縮容:通過Prometheus采集服務(wù)實例的CPU使用率、內(nèi)存使用率、QPS等指標,結(jié)合K8s的HorizontalPodAutoscaler(HPA)實現(xiàn)自動擴縮容。例如,當平均CPU使用率超過70%時,自動增加Pod數(shù)量;低于30%時,減少Pod數(shù)量?;跁r間的擴縮容:針對業(yè)務(wù)高峰(如電商大促期間20:00-24:00),通過K8s的CronJob預(yù)先調(diào)整Pod數(shù)量,避免臨時擴容延遲。自定義擴縮容策略:對于特殊業(yè)務(wù)場景(如消息隊列堆積量),可開發(fā)自定義控制器(Operator),當RabbitMQ的隊列消息數(shù)超過10萬時,自動擴容消費者服務(wù)實例。需注意擴縮容的冷卻時間(如設(shè)置5分鐘內(nèi)不重復(fù)擴縮容),避免頻繁調(diào)整導(dǎo)致服務(wù)不穩(wěn)定。同時,擴縮容時需保證服務(wù)無狀態(tài)(通過將會話信息存儲在Redis中),新實例啟動后能快速加入服務(wù)集群。Q6:如何優(yōu)化MySQL慢查詢?請結(jié)合explain命令說明關(guān)鍵分析點。優(yōu)化慢查詢需從SQL語句、索引設(shè)計、數(shù)據(jù)庫配置三方面入手,具體步驟:1.開啟慢查詢?nèi)罩荆涸趂中設(shè)置slow_query_log=1,long_query_time=1(記錄執(zhí)行時間超過1秒的SQL),log_queries_not_using_indexes=1(記錄未使用索引的SQL)。通過慢查詢?nèi)罩径ㄎ粏栴}SQL。2.使用explain分析執(zhí)行計劃:type字段:理想情況為"ref"或"eq_ref"(表示使用索引查找),最差為"ALL"(全表掃描)。若type為"ALL",需檢查是否缺少索引。key字段:顯示實際使用的索引。若為空,說明未使用索引(可能因為索引失效,如對字段使用函數(shù)、類型不匹配)。rows字段:預(yù)估掃描的行數(shù)。數(shù)值越大,性能越差(如掃描10萬行vs100行)。Extra字段:常見問題包括"Usingfilesort"(需文件排序,可通過添加索引覆蓋排序字段優(yōu)化)、"Usingtemporary"(使用臨時表,需優(yōu)化GROUPBY或DISTINCT條件)。3.索引優(yōu)化策略:最左匹配原則:復(fù)合索引(a,b,c)可用于查詢條件a、a+b、a+b+c,但無法用于b或b+c(除非a是常量)。覆蓋索引:查詢字段全部包含在索引中(如索引(a,b),查詢selecta,bfromtable),避免回表操作(減少IO)。避免索引冗余:若已存在索引(a,b),無需再創(chuàng)建索引(a)(前者已包含后者)。4.其他優(yōu)化:分表分庫:單表數(shù)據(jù)量超過1000萬時,按時間或ID分表(如訂單表按月份分表)。升級硬件:增加內(nèi)存(使更多數(shù)據(jù)留在BufferPool)、使用SSD(提升磁盤IO速度)。調(diào)整數(shù)據(jù)庫配置:增大innodb_buffer_pool_size(建議為物理內(nèi)存的50%-70%),優(yōu)化innodb_flush_log_at_trx_commit(事務(wù)提交時日志寫入策略,對性能要求高的場景可設(shè)為2,但可能丟失1秒內(nèi)的日志)。示例:慢查詢SQL為"selectuser_name,order_timefromorderswhereuser_id=1234andorder_status=1orderbyorder_timedesclimit10"。通過explain發(fā)現(xiàn)type=ALL,key=null。優(yōu)化方案:創(chuàng)建復(fù)合索引(user_id,order_status,order_time),該索引覆蓋查詢條件和排序字段,執(zhí)行計劃type變?yōu)閞ef,rows從100000降至100,性能顯著提升。Q7:Kafka如何保證消息的有序性?如何處理消息重復(fù)與消息丟失?消息有序性保證:Kafka的有序性基于分區(qū)(Partition),同一分區(qū)內(nèi)的消息是有序的(寫入順序與消費順序一致)。要保證全局有序,需將消息路由到同一個分區(qū)(如通過key的哈希值取模分區(qū)數(shù))。例如,電商的訂單消息按order_id哈希路由到固定分區(qū),消費者按順序消費該分區(qū)的消息,即可保證同一訂單的操作有序。消息重復(fù)處理:原因:生產(chǎn)者發(fā)送消息時,若未收到Broker的ACK確認(如網(wǎng)絡(luò)延遲),會重試發(fā)送,導(dǎo)致消息重復(fù);消費者拉取消息后,未提交偏移量(offset)就宕機,重啟后重新拉取已處理的消息。解決方案:生產(chǎn)者:設(shè)置enable.idempotence=true(冪等模式),Kafka為每個生產(chǎn)者分配ID(PID),對每個消息提供序列號,Broker拒絕重復(fù)的序列號消息(僅保證單生產(chǎn)者、單分區(qū)內(nèi)的冪等)。消費者:業(yè)務(wù)層實現(xiàn)冪等(如訂單表的唯一訂單號,通過數(shù)據(jù)庫的唯一索引避免重復(fù)插入;或記錄已處理的消息ID,消費前校驗是否已處理)。消息丟失處理:生產(chǎn)者丟失:未開啟重試(retries=0)或重試次數(shù)不足。需設(shè)置retries=3,retry.backoff.ms=100(重試間隔),并配置acks=all(等待所有ISR副本確認)。Broker丟失:未正確配置副本。需設(shè)置min.insync.replicas=2(至少2個同步副本),當ISR副本數(shù)小于該值時,Broker拒絕寫入(避免數(shù)據(jù)僅存在于單個副本,副本宕機后丟失)。消費者丟失:自動提交偏移量(mit=true),但消息處理失敗未回滾。應(yīng)關(guān)閉自動提交,手動提交偏移量(處理完消息后調(diào)用commitSync());若處理失敗,可將消息重新發(fā)送到死信隊列(DLQ),避免無限重試。實際項目中,電商的支付通知消息需嚴格有序(支付成功→發(fā)貨),可通過單分區(qū)+消費者單線程消費實現(xiàn);而日志收集場景允許少量重復(fù)(通過ELK去重處理),更關(guān)注消息不丟失(生產(chǎn)者設(shè)置acks=all,消費者手動提交偏移量)。Q8:設(shè)計一個分布式鎖,需要考慮哪些問題?RedisRedlock與ZooKeeper分布式鎖的優(yōu)缺點?分布式鎖需滿足:互斥性(同一時間僅一個客戶端持有鎖)、可重入性(同一客戶端可多次加鎖)、容錯性(部分節(jié)點宕機不影響鎖服務(wù))、鎖超時(避免死鎖)。RedisRedlock實現(xiàn):原理:向N個獨立的Redis實例(通常5個)依次嘗試加鎖(key相同,value為唯一隨機字符串,過期時間T),若在多數(shù)實例(≥3)加鎖成功且總耗時<T,則認為加鎖成功。釋放鎖時向所有實例發(fā)送Lua腳本(刪除key當且僅當value匹配)。優(yōu)點:性能高(Redis單線程處理命令,QPS可達10萬+),適合高并發(fā)場景。缺點:依賴時鐘同步(若某實例時鐘回撥,可能導(dǎo)致鎖過期時間計算錯誤);網(wǎng)絡(luò)分區(qū)時可能出現(xiàn)鎖沖突(如客戶端A在3個實例加鎖成功,隨后發(fā)生網(wǎng)絡(luò)分區(qū),客戶端B在另外2個實例加鎖成功,此時兩個客戶端同時持有鎖)。ZooKeeper分布式鎖實現(xiàn):原理:客戶端在ZooKeeper的指定節(jié)點下創(chuàng)建臨時順序節(jié)點(如/lock/node_),節(jié)點按序號排序。若當前節(jié)點是最小節(jié)點,獲得鎖;否則監(jiān)聽前一個節(jié)點的刪除事件,前一個節(jié)點釋放鎖(斷開連接后臨時節(jié)點刪除)時,當前節(jié)點嘗試獲取鎖。優(yōu)點:強一致性(ZooKeeper使用ZAB協(xié)議保證數(shù)據(jù)一致性),無需依賴時鐘(通過事件通知實現(xiàn)鎖釋放);支持可重入(記錄客戶端ID,重復(fù)加鎖時增加計數(shù))。缺點:性能較低(每次加鎖需多次與ZooKeeper集群交互,QPS通常在1萬左右),適合對一致性要求高但并發(fā)量適中的場景(如分布式任務(wù)調(diào)度)。選擇建議:電商秒殺場景(高并發(fā))選RedisRedlock;金融交易(強一致性)選ZooKeeper鎖。實際項目中可結(jié)合兩者,用Redis做快速加鎖,ZooKeeper做最終一致性校驗。Q9:如何設(shè)計一個支持動態(tài)擴展的權(quán)限系統(tǒng)?RBAC與ABAC的區(qū)別及適用場景?動態(tài)擴展的權(quán)限系統(tǒng)需滿足:支持權(quán)限的動態(tài)添加/刪除,支持不同業(yè)務(wù)線的個性化權(quán)限需求,支持細粒度的資源控制(如數(shù)據(jù)級、字段級權(quán)限)。設(shè)計要點:1.模型分層:資源層:抽象所有可訪問的資源(如API接口、數(shù)據(jù)庫表、文件),為每個資源分配唯一標識(如"order:read"、"user:update:mobile")。策略層:定義權(quán)限規(guī)則(如"角色A可以訪問資源X"、"用戶B在部門C時可以修改資源Y")。執(zhí)行層:在網(wǎng)關(guān)(如SpringCloudGateway)或方法層面(如注解@PreAuthorize)攔截請求,根據(jù)策略層規(guī)則校驗權(quán)限。2.動態(tài)配置:使用配置中心(如Apollo)存儲權(quán)限策略,支持實時刷新。提供管理后臺,允許管理員動態(tài)添加角色、分配資源(前端通過樹形結(jié)構(gòu)展示資源層級)。RBAC(基于角色的訪問控制)與ABAC(基于屬性的訪問控制)區(qū)別:RBAC:通過角色關(guān)聯(lián)權(quán)限(用戶→角色→權(quán)限)。例如,"管理員"角色擁有所有權(quán)限,"普通用戶"角色只有查詢權(quán)限。優(yōu)點是簡單易維護,適合權(quán)限模型穩(wěn)定的系統(tǒng)(如企業(yè)OA)。缺點是靈活性差,無法處理復(fù)雜條件(如"用戶所在部門為技術(shù)部且時間在9:00-18:00")。ABAC:通過屬性(用戶屬性、資源屬性、環(huán)境屬性)定義策略。例如,策略"允許用戶{user.id}訪問訂單{order.id},當且僅當user.department=order.seller.department且order.amount<10000"。優(yōu)點是高度靈活,支持復(fù)雜條件判斷,適合權(quán)限規(guī)則多變的系統(tǒng)(如電商平臺的多商家管理)。缺點是策略編寫復(fù)雜(需定義屬性和邏輯表達式),性能可能受影響(每次校驗需計算多個屬性)。實際應(yīng)用:企業(yè)內(nèi)部系統(tǒng)多用RBAC(如員工根據(jù)職位分配角色);電商平臺的商家后臺需結(jié)合ABAC(如商家只能管理自己店鋪的商品,且大促期間權(quán)限受限)。可通過混合模式實現(xiàn):用RBAC處理基礎(chǔ)權(quán)限,用ABAC處理個性化需求(如在RBAC的角色基礎(chǔ)上,添加ABAC條件限制)。Q10:如何優(yōu)化Java應(yīng)用的內(nèi)存使用?常見的內(nèi)存泄漏場景有哪些?內(nèi)存優(yōu)化策略:1.選擇合適的數(shù)據(jù)結(jié)構(gòu):用ArrayDeque代替LinkedList(減少節(jié)點對象開銷),用Trove庫的原始類型集合(如TI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論