PS:面試題內(nèi)容來自群友收集分享,非本人D唷J当巍上炎!
真實(shí)面試題
load方法調(diào)用順序、調(diào)用superLoad會(huì)走到誰蕊程?
總結(jié):
- 1.父類先于子類調(diào)用;
- 2.類先于分類調(diào)用;
- load調(diào)用時(shí)機(jī)比較早,當(dāng)load調(diào)用時(shí),其他類可能還沒加載完成,運(yùn)行環(huán)境不安全;
- 4.load方法是線程安全的椒袍,它使用了鎖,我們應(yīng)該避免線程阻塞在load方法;
- 5.load是根據(jù)函數(shù)地址直接調(diào)用的,與類在Compile Sources中的順序一致藻茂;
- 6.load方法通常用來進(jìn)行
Method Swizzle
;
PS: 調(diào)用superLoad, 走消息轉(zhuǎn)發(fā)流程
KVO 沒有setter
- _NSSetValueAndNotify
atomic
- 非線程安全驹暑,僅能保證進(jìn)入set、get方法是線程安全的
Barried和group
- 柵欄和組辨赐,
- 柵欄只能阻攔同步任務(wù)
- group可以處理異步任務(wù)
target project workspace scheme configuration
- (workspace -> project -> target -> scheme -> configuration) 包含關(guān)系
autoreleasePool
繪制完成后下次runloop還繪制么
- 是否繪制取決于UIKit是否認(rèn)為他是dirty
二叉樹深度
- 遞歸优俘,如果有,則深度+1 取左右子樹最大深度
鎖
- 自旋鎖忙等待掀序, 優(yōu)先級(jí)反轉(zhuǎn) 高優(yōu)先級(jí)占用時(shí)間片帆焕,低優(yōu)先級(jí)任務(wù)無法搶占時(shí)間片,任務(wù)完不成不恭,不釋放資源
- 互斥鎖
- 遞歸鎖 統(tǒng)一線程可以重復(fù)獲取遞歸鎖
- synchronized 性能最差 是遞歸鎖
- 找到obj對(duì)應(yīng)的syncData結(jié)構(gòu)進(jìn)行加解鎖
設(shè)置一個(gè)單寫多讀的數(shù)據(jù)庫(kù)叶雹,要考慮什么(setter如何加鎖,同時(shí)getter如何高效)
- 并發(fā)隊(duì)列
- 寫異步dispatch_barried_async
- 讀同步并發(fā)隊(duì)列
App卡頓檢測(cè)
- runloop監(jiān)測(cè)beforeSource -》 beforeWaitting 的間隔
- 每次runloop CallBack的時(shí)候信號(hào)量釋放换吧,while循環(huán)里wait折晦,使用的是信號(hào)量的超時(shí)機(jī)制(如果等待的時(shí)間大于設(shè)置的時(shí)間則直接執(zhí)行, 超時(shí)信號(hào)量則返回的是非0
- afterWaitting之后
如何設(shè)計(jì)一個(gè)圖片異步加載框架
- api簡(jiǎn)潔易用
- 任務(wù)優(yōu)先級(jí)
- 下載器
- 取消之前任務(wù)
- 解碼
- 緩存策略
- 緩存過期策略LRU(雙向鏈表配合hash表式散,key為URL value為node節(jié)點(diǎn))
IM如何解決啟動(dòng)消息堆積問題
- 緩沖池緩存 空閑時(shí)處理筋遭,或者間隔多久處理一次
- 合并處理
數(shù)據(jù)庫(kù)事務(wù)的好處
- 原子性 (要么全執(zhí)行 要么全不執(zhí)行)
- 隔離性(各個(gè)事務(wù)是隔離的,互不影響)
- 一致性(事務(wù)完成時(shí)暴拄,數(shù)據(jù)保持一致狀態(tài))
- 持久性 (事務(wù)一旦提交漓滔,對(duì)數(shù)據(jù)的改變是永久性的)
瀏覽器輸入網(wǎng)址后的過程
- dns解析,
- 三次握手后 https交換密鑰乖篷,
- 然后正常請(qǐng)求
中間人攻擊
swift可選類型如何實(shí)現(xiàn)响驴?
- wrapper
http2.1 (多路復(fù)用)
HTTP滑動(dòng)窗口、流量控制
- 報(bào)文中有窗口字段撕蔼,窗口為0時(shí)發(fā)送方停止發(fā)送數(shù)據(jù)
- 防止接收方緩存區(qū)快滿了豁鲤,發(fā)送方還在發(fā)送數(shù)據(jù)
- 發(fā)送方的發(fā)送窗口大小不能超過接收方的給出的窗口大小
Isa
- 實(shí)例對(duì)象 isa指向類,
- 類對(duì)象的isa指向 metaclass
單鏈表翻轉(zhuǎn)
-
遞歸
def reverseList(self, head: ListNode) -> ListNode: # 1. 遞歸終止條件 if head is None or head.next is None: return head p = self.reverseList(head.next) head.next.next = head head.next = None return p
性能檢測(cè)
- CPU
- FPS
- 卡頓檢測(cè)(利用runloop 和 信號(hào)量超時(shí)機(jī)制)
SDWeb 然后一個(gè)帶圖片的列表鲸沮,用sd展示琳骡,譬如第二和第四是同一個(gè)鏈接,這種情況下它的策略是什么
- 查找隊(duì)列任務(wù)讼溺,并把回調(diào)放在同一張圖片operation的回調(diào)中
- download operation存儲(chǔ)著對(duì)同一張圖片的回調(diào)block
tcp擁塞控制楣号,
- 慢開始
- 擁塞避免
- 快重傳
- 快恢復(fù)
加密
- MD5
- SHA256
- Hash
- AES
gcd里的group,enter,leave炫狱,notify作用藻懒,
- enter 開始執(zhí)行任務(wù)了
- leave 我執(zhí)行完成了
- notify 是獲取當(dāng)前組里的任務(wù)都完成了,不過要注意notify的位置
方法緩存cache怎么查找的
- 快查
- 慢查
- 填充緩存
MachO的方法列表排序
- 類加載的時(shí)候视译,先是把類中的方法排序然后加到類的方法數(shù)組后面嬉荆,然后到分類時(shí)也是先把分類方法排序,再加到類方法數(shù)組的前面酷含。
- 分類中的方法地址比原始類中的方法地址要小鄙早,這樣便能能保證方法列表是有序的,所以能用二分查找
weak的原理第美,
- weak_table_t
項(xiàng)目結(jié)構(gòu)蝶锋,組件化分層
- 地基層(第三方依賴以及工程的基礎(chǔ)庫(kù))
- 基礎(chǔ)通用組件(對(duì)第三方庫(kù)的封裝以及異常上報(bào),推送服務(wù)什往、支付)
- 基礎(chǔ)UI組件
- 基礎(chǔ)功能組件(登錄注冊(cè)這種不依賴業(yè)務(wù)的組件)
- 業(yè)務(wù)組件
- 更小的業(yè)務(wù)模塊
- 殼工程
查找沖突怎么實(shí)現(xiàn)的, 線上日志 崩潰
埋點(diǎn)這些
- 無痕埋點(diǎn) aop
swift struct 和 class 區(qū)別
- 默認(rèn)創(chuàng)建構(gòu)造器慌闭,
- 值類型和引用類型别威,
- 繼承,
- class堆驴剔,
- struct棧省古,
- 線程安全
- struct更輕量
mutating 關(guān)鍵字
- @inout 傳遞引用修改
WebView優(yōu)化
- 包緩存,
- 空白webview常駐緩存丧失,
- 使用wk
swift 派發(fā)機(jī)制
- 函數(shù)表派發(fā)豺妓,
- 動(dòng)態(tài)派發(fā),
- 直接派發(fā)
optinoal怎么實(shí)現(xiàn)的
- (struct wapper)
protocol 怎么實(shí)現(xiàn)optional
- (@objc)
swift訪問權(quán)限修飾符
- private
- public
- fileprivate
- protect
上傳1個(gè)G的大文件布讹,怎么設(shè)計(jì)琳拭,上傳的時(shí)候讀取到內(nèi)存,一定是一次性讀完嗎
- 分段讀取描验,NSFileHandler
微信通話白嘁,讓你設(shè)計(jì),用TCP 還是 UDP膘流,為什么
- udp絮缅, 視頻通話丟包可以接受,
UDP發(fā)送1呼股、2耕魄、3、4彭谁、5吸奴,5 個(gè)數(shù)據(jù)包,怎么保證它的順序
- 協(xié)議中添加包的編號(hào),接受包的時(shí)候排序
冷啟動(dòng)runtime的初始化調(diào)用哪些方法
編譯器運(yùn)行原理
- 詞法分析奄抽,
- 語法分析蔼两,
- 語義分析,
- 中間代碼生成逞度,
- 中間代碼優(yōu)化额划,
- 目標(biāo)代碼生成,
- 符號(hào)表管理档泽,
- 出錯(cuò)管理
runloop應(yīng)用場(chǎng)景俊戳,
- 監(jiān)控卡頓,
- 線程惫菽洌活抑胎,
- timer滑動(dòng)停止
AOP,函數(shù)式等等區(qū)別渐北,
runtime應(yīng)用
- 動(dòng)態(tài)添加屬性和方法阿逃,
- 方法交換,
- 獲取和修改私有屬性和方法
- 字典轉(zhuǎn)模型
怎么hook+load
- 制作動(dòng)態(tài)庫(kù)
- 優(yōu)先編譯
內(nèi)存管理機(jī)制
- ARC
- MRC
內(nèi)存分區(qū)以及堆區(qū)棧區(qū)區(qū)別赃蛛,對(duì)象存哪里
- 指針在棧區(qū) 325
- 對(duì)象在堆區(qū)
- 堆恃锉、棧、全局呕臂、代碼破托、數(shù)據(jù)
block值捕獲,
從點(diǎn)擊應(yīng)用圖標(biāo)開始的app啟動(dòng)流程(系統(tǒng)為程序啟動(dòng)做好準(zhǔn)備歧蒋,
Runloop作用以及如何監(jiān)測(cè)卡頓
- (beforeSource -> waitting 大于閾值土砂, 子線程監(jiān)聽,dump出調(diào)用棧)
KVO原理以及自己如何實(shí)現(xiàn)
自動(dòng)釋放池相關(guān)谜洽,譬如何時(shí)釋放萝映、實(shí)現(xiàn)原理、@autoreleasepool加for循環(huán)情況下何時(shí)釋放
深copy與淺copy
- (淺拷貝 拷貝指針)
KVC原理 之后是Key與keypath區(qū)別褥琐,然后定義一個(gè)屬性_name 然后kvc通過setValueforkey锌俱,這時(shí)賦值是用key賦值還是keypath
- keyPath 可以通過路徑查找
- 都可以
消息發(fā)送原理 然后消息轉(zhuǎn)發(fā)為啥要分三個(gè)階段,蘋果這樣設(shè)計(jì)的意義在哪兒(字節(jié))
- 第一階段為動(dòng)態(tài)添加方法
- 第二階段為替換接收方
- 第三階段為完全消息轉(zhuǎn)發(fā)(有invocation對(duì)象敌呈,可以實(shí)現(xiàn)多次轉(zhuǎn)發(fā)贸宏,轉(zhuǎn)發(fā)給多個(gè)對(duì)象)
輸入法要加載大量表情這時(shí)引起內(nèi)存激增,這種情況如何優(yōu)化
- 如圖大 imageIO進(jìn)行縮放
- 按需加載
- 如不需要常駐內(nèi)存磕洪,去掉內(nèi)存緩存
- 如本地圖片吭练,使用autoreleasepool包裹加載
事件響應(yīng)鏈如何尋找fitview(有次回答了事件響應(yīng)鏈的hittest、pointinside方法尋找以及后邊touchebegan之類的方法判定后析显,又這樣問我有些懵逼)(字節(jié)鲫咽、小紅書、攜程都有問)
tcp/udp區(qū)別
- tcp 可靠、一對(duì)一分尸、流量控制和擁塞控制锦聊、面向連接、首部開銷大
- udp 不可靠箩绍,可一對(duì)一孔庭、一對(duì)多、多對(duì)一材蛛、多對(duì)多圆到、無流量控制和擁塞控制、首部開銷小
strong 卑吭、weak芽淡、copy 、assign 豆赏、retain 挣菲、unsafe_unretained 與autoreleasing
- autoreleasing當(dāng)前autoreleasepool作用域內(nèi)有效,出去即銷毀
- 對(duì)不可變對(duì)象執(zhí)行
copy
操作掷邦,是指針復(fù)制己单,執(zhí)行mutableCopy
操作是內(nèi)容復(fù)制。 - 對(duì)可變對(duì)象執(zhí)行
copy
操作和mutableCopy
操作都是內(nèi)容復(fù)制耙饰。
https原理
- Client Hello: Random1、SSL version纹份、 加密套件
- Server Hello:Random2苟跪、server選擇的加密套件
- Certificate:server讓客戶端校驗(yàn)證書
- Certificate Verify:client通過證書加密Random3
- Client Key Exchange: server和client用同樣的算法加密 random1、2蔓涧、3即為通訊秘鑰
websocket原理
- 利用http協(xié)議握手
- 利用tcp來傳輸數(shù)據(jù)件已,請(qǐng)求頭小
runloop與autoreleasepool關(guān)系
- 線程與runloop一一對(duì)應(yīng)
- autoreleasepool依賴runloop來工作
weak實(shí)現(xiàn)原理
- 調(diào)用 objc_release
- 因?yàn)閷?duì)象的引用計(jì)數(shù)為0,所以執(zhí)行 dealloc
- 在 dealloc 中元暴,調(diào)用了 _objc_rootDealloc 函數(shù)
- 在 _objc_rootDealloc 中篷扩,調(diào)用了 object_dispose 函數(shù)
- 調(diào)用 objc_destructInstance
- 最后調(diào)用 objc_clear_deallocating,詳細(xì)過程如下:
- a. 從 weak 表中獲取廢棄對(duì)象的地址為鍵值的記錄
- b. 將包含在記錄中的所有附有 weak 修飾符變量的地址,賦值為 nil
- c. 將 weak 表中該記錄刪除
- d. 從引用計(jì)數(shù)表中刪除廢棄對(duì)象的地址為鍵值的記錄
Swift與OC區(qū)別 以及swift安全性體現(xiàn)
- 文件個(gè)數(shù)和后綴不同
- 不需要main函數(shù)
- 會(huì)自動(dòng)推導(dǎo)類型
- bool類型明確
- 可以不繼承任何類
- final修飾不能被其他類繼承
- guard
- inout
逃逸閉包與非逃逸閉包
- 閉包調(diào)用時(shí)的時(shí)機(jī)劃分為逃逸閉包和非逃逸閉包
gcd如何取消線程
- 線程是由系統(tǒng)管理的茉盏,不需要手動(dòng)管理
- 如果問的是取消任務(wù)的話鉴未,可以cancel掉未執(zhí)行的任務(wù)
app保活
- backgroundTask
- 持續(xù)定位
- 播放無聲音頻
- 后臺(tái)下載資源
- BGTaskScheduler
深拷貝和淺拷貝
- 對(duì)數(shù)組等集合類app進(jìn)行深拷貝鸠姨,其內(nèi)容不變
- 因?yàn)閿?shù)組里存的只是內(nèi)容的指針铜秆,并非本體
啟動(dòng)優(yōu)化
內(nèi)存管理,關(guān)鍵字 weak釋放
category加載 消息機(jī)制(方法查找)
setNeedLayout和layoutIfNeed
UIView性能問題(卡頓掉幀)
- 離屏渲染
- 主線程執(zhí)行耗時(shí)操作
- 大圖優(yōu)化
- tableview優(yōu)化
- 圖層過于復(fù)雜
SD 解碼
- 已經(jīng)解碼過
- 動(dòng)圖不解碼
- 矢量圖不解碼
組件化分層
看過哪些源碼
音視頻遇到過哪些問題
im丟消息怎么處理
多線程的應(yīng)用
YYWebImage和SD 異同點(diǎn)
- 相同點(diǎn)
- category擴(kuò)展
- 緩存&解碼
- 不同
- YY URLConnect
- sd URLSession
- 解碼(yy可控制讶迁,sd不能控制)
騰訊1面
Block
- StackBlock
- GlobalBlock
- 不會(huì)訪問任何auto變量
- MallocBlock
kvc與kvo
+load 和 +initialize(有什么注意)
- load由runtime通過函數(shù)指針直接調(diào)用连茧,無需調(diào)用super
- initialize有msgsend調(diào)用,存在方法查找,子類不實(shí)現(xiàn)啸驯,父類可能會(huì)調(diào)用多次
Catagory 和 extension
commbine
- 響應(yīng)式
- publisher客扎,
- subscripter,
- subject罚斗,
- operator
method swizzling
- 注意事項(xiàng)
- 1.hook次數(shù)徙鱼,
- 2.hook父類導(dǎo)致調(diào)用順序錯(cuò)亂
- 3.很難追查問題
application生命周期
- 啟動(dòng)程序
- willFinishLaunchingWithOptions
- didFinishLaunchingWithOptions
- applicationDidBecomeActive
- 按下home鍵
- applicationWillResignActive:
- applicationDidEnterBackground:
- app在后臺(tái)狀態(tài),點(diǎn)擊app打開
- applicationWillEnterForeground:
- applicationDidBecomeActive:
騰訊二面
工作經(jīng)歷
編譯優(yōu)化
多繼承
- oc/swift不支持多繼承
- 使用協(xié)議模擬
ARC MRC
weak 線程安全惰聂?
- 線程安全疆偿,每次獲取weak指針都會(huì)通過objc_loadWeakRetained這個(gè)函數(shù)
- 判斷其是否為tagged
- 加鎖并取值
浮點(diǎn)數(shù)相等
- NSDecimalNumber,
- 或在已定誤差范圍內(nèi)認(rèn)為其相等
性能監(jiān)測(cè)
- CPU
- 內(nèi)存 使用量or泄漏
- FPS
- 卡頓檢測(cè)
- 網(wǎng)絡(luò)
- crash檢測(cè)
- 耗電量監(jiān)控
- 啟動(dòng)時(shí)間
斷點(diǎn)
- 符號(hào)斷點(diǎn)
- 條件斷點(diǎn)
離屏渲染
TCP UDP
頭條1面
sona優(yōu)化
- 代碼過于復(fù)雜
- 函數(shù)代碼行數(shù)過多
- switch case條件過多
- if else嵌套嚴(yán)重
- C參數(shù)未 release
Flutter與Lua
- 異同點(diǎn)
- Flutter
- 三棵樹
- Widget 存儲(chǔ)渲染信息
- Element 元素樹,渲染實(shí)體
- RenderObject 管理布局和繪制
- 三棵樹
路由方案及事件總線
- protocol
- URL
包體積優(yōu)化
- 無用圖片搓幌、類杆故、資源等,壓縮圖片
- 減少動(dòng)態(tài)庫(kù)數(shù)量
- 減少無用依賴
- 去除無用架構(gòu)
- xcode默認(rèn)配置的編譯參數(shù)
App啟動(dòng)過程
runloop及應(yīng)用
- 卡頓檢測(cè)
搜狐一面
sd用了哪些鎖
- synchronized
鎖的性能排行
- synchronized 最差
- os_unfair_lock 最好
synchronized原理
- objc_sync_enter
- objc_sync_exit
- 鎖對(duì)象只能是同一個(gè)
- 可重入型互斥鎖
afn線程备瘸睿活
- afn各版本的區(qū)別
- 2.0有線程贝︻酰活,基于URLConnection拐揭,回調(diào)只能回調(diào)給原runloop
- 3.0不需要 URLSession可以指定回調(diào)隊(duì)列撤蟆,NSOperationQueue設(shè)定max為1,讓回調(diào)串行執(zhí)行
偽代碼設(shè)計(jì)單寫多讀
runloop source0和1分別都對(duì)應(yīng)什么事件
- source 1 系統(tǒng)級(jí)別的事件
- source 0 是程序員處理的任務(wù)
點(diǎn)擊btn是如何事件傳遞喚醒runloop
- 包裝event -> source1 -> mach_port喚醒runloop -> source0
runloop和線程的關(guān)系
- 關(guān)系存儲(chǔ)在全局字典里 線程key runloop是value
- 一一對(duì)應(yīng)
runloop有多少個(gè)mode 多少個(gè)status堂污、
- kCFRunLoopBeforeTimers
- kCFRunLoopBeforeSources
- kCFRunLoopBeforeWaiting
- kCFRunLoopAfterWaiting *
- kCFRunLoopExit
@synthesize 和 @dynamic
- 如果沒有手動(dòng)實(shí)現(xiàn)將為屬性自動(dòng)生成getter和setter方法
- dynamic 告訴編譯器不要自動(dòng)生成setter和getter
NSString類型為什么要用copy修飾
- 對(duì)NSString來說沒影響
- 對(duì)NSMutableString來說有家肯,防止被修改
多線程實(shí)現(xiàn)方式以及優(yōu)缺點(diǎn)(gcd對(duì)比NSOperation)
- GCD是C語言, 所以效率更高盟猖, operation獲得更好的依賴讨衣、優(yōu)先級(jí)、kvo等優(yōu)點(diǎn)
- operation 是對(duì)GCD的高層次抽象
- 依賴關(guān)系式镐,operation可以設(shè)置依賴反镇,gcd不行,可以用其他方法
- operation可以kvo
NSTimer循環(huán)引用
- 使用block的形式
- 使用NSProxy
- iOS13+新API
block類型 以及循環(huán)引用
- stackBlock
- mallocBlock
- globalBlock
如何優(yōu)化啟動(dòng)時(shí)長(zhǎng)
- 管理啟動(dòng)項(xiàng)
- load方法清理
- 減少動(dòng)態(tài)庫(kù)
- 減少類的數(shù)量
extension和category的區(qū)別
- extension在編譯期間娘汞, 可新增成員變量歹茶,是類的一部分,無法為系統(tǒng)類添加extension
- category在運(yùn)行期間你弦,不能添加成員變量
autoreleasepool分別在哪些情況下會(huì)釋放
- runloop即將進(jìn)入休眠時(shí)
- 出pool作用域
- 線程被釋放
autoreleasepool底層原理惊豺,
- 雙向鏈表
- runloop enter的時(shí)候會(huì)push, exit會(huì)pop
- runloop 在即將休眠時(shí)先pop 然后再push
weak實(shí)現(xiàn)原理
解壓zip遇到過哪些問題
- 中文文件名亂碼
webview加載優(yōu)化
autorelease 和 runloop的關(guān)系
- 注冊(cè)了entry來push 優(yōu)先級(jí)最高鳖目,優(yōu)先執(zhí)行
- 監(jiān)聽beforeWaiting來pop和push 優(yōu)先級(jí)最低扮叨,保證最后執(zhí)行
webview橋接怎么做的
說說Swift為什么將String,Array领迈,Dictionary設(shè)計(jì)成值類型
- 值類型相比引用類型彻磁,最大的優(yōu)勢(shì)在于內(nèi)存使用的高效
- 線程安全考慮
MachO結(jié)構(gòu)
- Header(包含文件類型碍沐、目標(biāo)架構(gòu)類型等)
- Load Commands(文件在虛擬內(nèi)存中的邏輯結(jié)構(gòu)、布局)
- segment(segment約定使用雙下劃線加大寫字母衷蜓,例如
__TEXT
)- section(section約定使用雙下劃線加小寫字母,例如:
__text
)
- section(section約定使用雙下劃線加小寫字母,例如:
MachO Segment
-
__TEXT
段包含代碼累提,它被以只讀和可執(zhí)行的方式映射,即進(jìn)程可以執(zhí)行代碼磁浇,但不能修改代碼斋陪。代碼也不能修改自身,因此置吓,page永遠(yuǎn)不會(huì)dirty无虚。
-
__text
section包含編譯好的機(jī)器碼。 -
__stubs
和__stub_helper
section用于動(dòng)態(tài)鏈接器(dyld)衍锚,這樣鏈接動(dòng)態(tài)鏈接代碼時(shí)友题,可以延遲鏈接 -
__const
其是常量; -
__cstring
包含可執(zhí)行文件中字面量字符串戴质。
-
-
__DATA
段是可讀可寫的度宦,但不能執(zhí)行,包含可被更新的值告匠。-
__nl_symbol_ptr
是非懶加載符號(hào)指針戈抄,在可執(zhí)行文件加載時(shí)就已經(jīng)加載了 -
__la_symbol_ptr
是懶加載符號(hào)指針,用于調(diào)用可執(zhí)行文件中未定義的符號(hào) -
__const
:包含一些需要重定向的常量數(shù)據(jù)后专。如char * const p = "foo";
被p
指針指向的數(shù)據(jù)不是常量划鸽。 -
__bss
:包含未初始化的靜態(tài)變量。如static int a
戚哎。 -
__common
:包含未初始化的外部全局變量漾稀。如函數(shù)外的int a
。 -
__dyld
:是占位section建瘫,用于動(dòng)態(tài)鏈接器。
-