記錄荒廢了三年的四年.net開(kāi)發(fā)的第一次面試

來(lái)源:好特整理 | 時(shí)間:2024-07-13 15:46:18 | 閱讀:73 |  標(biāo)簽: T Net 開(kāi)發(fā) 面試   | 分享到:

對(duì)象 身在成都小微企業(yè),前兩天面試深圳老牌金蝶公司。對(duì)我這個(gè)荒廢了三年光影的人來(lái)說(shuō),怎一個(gè)跨度之大了得?作為人我生第一次面試的,整個(gè)面試過(guò)程,只能用詭異來(lái)形容這次感受。而結(jié)尾也是迷迷糊糊中草草收?qǐng)觥?不是很好的開(kāi)局 我我畢業(yè)就進(jìn)了國(guó)企。畢業(yè)前,在我想象中,他是一個(gè)偉光正的形象。所以我抱著人生值得,未

對(duì)象

身在成都小微企業(yè),前兩天面試深圳老牌金蝶公司。對(duì)我這個(gè)荒廢了三年光影的人來(lái)說(shuō),怎一個(gè)跨度之大了得?作為人我生第一次面試的,整個(gè)面試過(guò)程,只能用詭異來(lái)形容這次感受。而結(jié)尾也是迷迷糊糊中草草收?qǐng)觥?

不是很好的開(kāi)局

我我畢業(yè)就進(jìn)了國(guó)企。畢業(yè)前,在我想象中,他是一個(gè)偉光正的形象。所以我抱著人生值得,未來(lái)可期的想法進(jìn)去了。結(jié)果不懂事的我被暗中轉(zhuǎn)了外包。之后那就是段黑暗中的日子了。一個(gè)書(shū)記負(fù)責(zé)畫(huà)大餅及洗腦,一個(gè)負(fù)責(zé)催加班。主打一個(gè)職責(zé)分離,找人時(shí)方便推卸責(zé)任。而工資也是入職以來(lái)一動(dòng)不動(dòng)的8000多,我也因此悲觀,頹廢了三年,感覺(jué)受到了欺騙,怎么是這樣的?世界觀崩塌了。整天就是行尸走肉的上下班,沒(méi)話可說(shuō),就這樣略去吧。

算了,學(xué)習(xí)其他的去了

這基本是我下班后唯一的學(xué)習(xí)和值得說(shuō)的地方。生活總是先使人絕望,又去點(diǎn)燃人的希望,又讓人失望,再讓人希望,反反復(fù)復(fù),這樣來(lái)訓(xùn)練我的認(rèn)知。作為工科生的我,關(guān)于自然的科學(xué)知識(shí)和計(jì)算機(jī)知識(shí)學(xué)了一大把,但關(guān)于人的社會(huì)知識(shí)卻沒(méi)有學(xué)。不知道社會(huì)險(xiǎn)惡,所以碰到點(diǎn)事就繃不住了。

因此我進(jìn)公司幾個(gè)月之后,就伙著同事,和上級(jí)鬧情緒,搞串聯(lián),搞曠工。不過(guò)我們?cè)趯I(yè)的書(shū)記面前搞這些,豈不是太嫩了點(diǎn)?我在這期間讀列寧的《帝國(guó)主義是資本注意的最高階段》,《資本論》第一卷。還專門(mén)跑到中馬庫(kù)讀了很多小冊(cè)子,工人小說(shuō)。后來(lái)又向前,讀更早的盧梭的《社會(huì)契約論》。這時(shí)的我更像是在無(wú)力的臆想,精神可嘉,戰(zhàn)斗力拉跨。但遭受打擊卻催發(fā)了其他的東西。讀社會(huì)學(xué)怎么能不讀哲學(xué)?

完敗的我又跑去讀哲學(xué),《讀西方哲學(xué)史》,讀《理想國(guó)》,留意智者和形而上學(xué)的針?shù)h相對(duì)的觀點(diǎn),現(xiàn)在看來(lái)都不無(wú)道理。略過(guò)中世紀(jì),從笛卡爾的我思故我在開(kāi)始了解,到后面形而上學(xué)的終點(diǎn),讀《純粹理性批判》、《實(shí)踐理性批判》、《判斷力批判》,《精神現(xiàn)象學(xué)》。最后到了理性的崩塌后的三個(gè)解決方案,馬克思的異化理論、尼采的超人、弗洛伊德的精神分析。把馬克思和之前的哲學(xué)史串聯(lián)了起來(lái)。

從馬克思的《1844年經(jīng)濟(jì)學(xué)哲學(xué)手稿》開(kāi)始又轉(zhuǎn)到經(jīng)濟(jì)學(xué)。從古希臘的奴隸經(jīng)濟(jì)開(kāi)始,到中世紀(jì)的莊園經(jīng)濟(jì),再到近代的資本主義。從英國(guó)重商主義開(kāi)始,讀托馬斯孟的《貿(mào)易論》《論英國(guó)本土的公共福利》,到法國(guó)重農(nóng)主義,讀《獻(xiàn)給國(guó)王和王后的政治經(jīng)濟(jì)學(xué)》。最后到古典政治經(jīng)濟(jì)學(xué),讀英國(guó)威廉配第的《政治算術(shù)》、《獻(xiàn)給英明人士》、《賦稅論》、《貨幣略論》、法國(guó)布阿吉爾貝爾的《法國(guó)詳情》、魁奈的《經(jīng)濟(jì)表》、亞當(dāng)斯密的《國(guó)富論》、李嘉圖的《政治經(jīng)濟(jì)學(xué)及賦稅原理》、最后到了西蒙斯第的經(jīng)濟(jì)危機(jī)理論結(jié)束。
最后,當(dāng)然就是馬克思的經(jīng)濟(jì)理論了。這場(chǎng)經(jīng)濟(jì)學(xué)冒險(xiǎn)也讓我經(jīng)濟(jì)學(xué)歷史串聯(lián)了起來(lái)。

走了算了

我人生加起來(lái)也沒(méi)讀過(guò)這么多書(shū),遇到這么多針?shù)h相對(duì)而又各自明智的觀點(diǎn)。正印了那句“人是萬(wàn)物的尺度”。我說(shuō)不出具體的影響,但沒(méi)有這些知識(shí),我可能還在渾渾噩噩。

到了去年過(guò)年,幾個(gè)親戚兄弟碰到一起,頓時(shí)激起了我的心思,社會(huì)形勢(shì)惡化不可逆轉(zhuǎn),公司待遇惡化不可逆轉(zhuǎn)。人生沒(méi)有反途,不能在這坐以待斃,死耗下去了!

于是我今年過(guò)年后就開(kāi)始努力學(xué)習(xí),沒(méi)有一天荒廢。爭(zhēng)取把這三年落下的技術(shù)追回來(lái)。這樣從2月份到7月份,5個(gè)月時(shí)間,每天晚上4個(gè)小時(shí)學(xué)習(xí),周末24個(gè)小時(shí)的學(xué)習(xí)。平時(shí)和同事暗中比較,技術(shù)已經(jīng)超過(guò)不少了。是時(shí)候走了,離開(kāi)這個(gè)傷心之地了。他們有家庭,這份工還算能糊口,而我沒(méi)家庭牽掛,只剩下點(diǎn)技術(shù),這里又缺少磨練和實(shí)踐,久了技術(shù)就忘了,走了。

面試

面試以騰訊語(yǔ)音會(huì)議的方式開(kāi)始,時(shí)長(zhǎng)大概40分鐘。聽(tīng)聲音,是一個(gè)中老年人事,一個(gè)中青年技術(shù)。

首先是讓我 自我介紹 ,我之前總結(jié)了一段自我介紹,基本上照著念了一遍。這是我第一次面試,很緊張,感覺(jué)聲音有點(diǎn)發(fā)抖。沒(méi)有任何反映。

然后讓我 介紹一下平時(shí)怎么工作的,在團(tuán)隊(duì)中扮演的角色 。我對(duì)著準(zhǔn)備的資料,回憶著總結(jié)了一下日常工作以及面對(duì)新項(xiàng)目時(shí)的組織小組工作方式。沒(méi)有任何反映。

接下來(lái)問(wèn)“ 你的工作經(jīng)歷和項(xiàng)目中遇到過(guò)哪些難題 ”。我說(shuō)了一下剛開(kāi)始那段時(shí)間用 XSLT 生成doc文檔,然后合并的經(jīng)歷。然后技術(shù)人員就問(wèn)我假如我有20個(gè)文檔,要合成四個(gè)怎么辦?我蒙了,我們那是一個(gè)資料文件,要存檔的,分成四部分干什么?我提出了疑惑,他還是堅(jiān)持問(wèn),并說(shuō),20個(gè)文檔合成4個(gè),每5個(gè)合并成1個(gè),最后四個(gè)怎么合并。我想了一會(huì)兒,我就說(shuō),你是想說(shuō)多線程的問(wèn)題嗎?那就線程同步唄。不過(guò)我們一般都使用異步,而不是多線程。我感覺(jué)他沉默了一下,不知道是不是記錯(cuò)了。
然后最近還遇到一個(gè)內(nèi)存泄漏的問(wèn)題,我起先以為是托管內(nèi)存泄漏,但用內(nèi)存診斷工具又沒(méi)發(fā)現(xiàn)異常。到現(xiàn)在也沒(méi)解決,只能一段時(shí)間就重啟。我在這方面也不懂太多。(這個(gè)我是真想找那個(gè).net高級(jí)調(diào)試 一線碼農(nóng) 去問(wèn)下)

他說(shuō)那 你說(shuō)一下多線程的異步的區(qū)別 。我就說(shuō)異步是語(yǔ)法糖,會(huì)翻譯成狀態(tài)機(jī),最后用線程池里面的線程執(zhí)行。多線程則是創(chuàng)建了一個(gè)新的線程。他問(wèn)異步怎么回到原來(lái)的線程?我又懵了?為什么異步要回到原來(lái)的線程?(可能他是想問(wèn)同步上下文?或者是他想問(wèn)一發(fā)即忘和阻塞式的調(diào)用方式?)我就說(shuō)異步方法碰到耗時(shí)任務(wù)后,原線程就返回最上層的同步方法繼續(xù)向下執(zhí)行了?而異步方法中的代碼會(huì)有新線程來(lái)接手(用并行堆棧工具可以觀察到這個(gè)過(guò)程),為什么需要返回原來(lái)的線程?這整個(gè)異步方法都會(huì)被交給新線程。這樣可以避免原線程阻塞(控制臺(tái)中才需要手動(dòng)配置任務(wù)返回原線程。只有更新ui才需要返回原線程,但WPF中任務(wù)會(huì)自動(dòng)返回原線程,但這也不需要我們特別指定?)因?yàn)樗冀K不正面提問(wèn),我始終不知道他想問(wèn)什么?這就是面試的方式嗎,詭異。

他然后問(wèn)我看里 簡(jiǎn)歷里面寫(xiě)你們用webform和mvc,那他們有什么優(yōu)缺點(diǎn) ?我說(shuō)我們用的不多,只中間用了一年,后面就轉(zhuǎn)向webapi加web項(xiàng)目了。他又問(wèn),那 什么是前后端分離 ?我又懵了?這怎么回答?我想,后端寫(xiě)webapi,前端寫(xiě)html和js,js請(qǐng)求后端接口的數(shù)據(jù)刷新頁(yè)面,標(biāo)準(zhǔn)的web開(kāi)發(fā)流程,這還要回答什么?我就說(shuō)不明白你的意思。我感覺(jué)他又沉默了。他到底想問(wèn)什么呢?也許webform和mvc是用的服務(wù)端組件和razor,而webapi+html不用?這有什么可說(shuō)的嗎?難道他不是這個(gè)意思?好奇怪啊?

我看你簡(jiǎn)歷寫(xiě)了redis,redis是怎么緩存的? 我說(shuō)我們主要是緩存主要用memorycache,redis還是主要用來(lái)存一些實(shí)時(shí)數(shù)據(jù)。我的話就是當(dāng)時(shí)做一個(gè)簽到的接口,因?yàn)槎虝r(shí)間內(nèi)訪問(wèn)量可能比較大,所以把redis作為消息隊(duì)列,用來(lái)削峰。(他是想問(wèn)有哪些數(shù)據(jù)類型嗎?)

他又接著問(wèn),MVVM是什么? 這下我激動(dòng)了,就說(shuō)MVVM的好處是增加了一個(gè)視圖模型VM,可以為UI建模,如何為UI建模,這是之前建模方法中沒(méi)有見(jiàn)過(guò)的。而UI易變,MVVM可以讓UI的變化不會(huì)影響到VM和Model。(也許還應(yīng)該加上VM利于測(cè)試?我一緊張就忘了,不過(guò)我們到現(xiàn)在都沒(méi)寫(xiě)過(guò)正規(guī)單元測(cè)試,存疑)

他問(wèn)VM如何跟UI通信 ,我說(shuō)是通過(guò)命令command。他問(wèn) 具體是怎么通信 ,我一時(shí)間沒(méi)想明白,問(wèn)是不是調(diào)用和傳參。他說(shuō)都講一下。然后我說(shuō)調(diào)用是通過(guò)datacontext(xaml文件在訪問(wèn)時(shí)通過(guò)構(gòu)造函數(shù)那句InitializeComponent代碼被實(shí)例化了,VM可以在這個(gè)過(guò)程中實(shí)例化,也可以通過(guò)構(gòu)造注入到這個(gè)對(duì)象中,因此VM是通過(guò)委托調(diào)用的。一緊張也忘了說(shuō)出來(lái))

然后他問(wèn)界面的數(shù)據(jù)變化怎么通知到后端 。我說(shuō)是INotification這個(gè)接口(實(shí)際上叫INotifyPropertyChanged)。他問(wèn)具體怎么通知的?我想,界面的屬性是依賴屬性,通過(guò)將數(shù)據(jù)存到統(tǒng)一的一個(gè)私有靜態(tài)屬性中,通過(guò)屬性去訪問(wèn)這個(gè)值,所以能知道數(shù)據(jù)的訪問(wèn)。但是不是所有屬性都是依賴屬性啊。INotification接口原理沒(méi)搞清楚,沒(méi)回答上來(lái)。

然后人事問(wèn)我, 你們加班情況怎么樣 ,我說(shuō)我們是半個(gè)國(guó)企,很少加班。

面試差不多這就結(jié)束了。然后人事問(wèn)我,你還有什么想問(wèn)的嗎?我想好多都答得不好,估計(jì)沒(méi)戲了。就說(shuō)沒(méi)什么想問(wèn)的。結(jié)束得非常急迫,半分鐘不到。
至此,面試結(jié)束。

后續(xù)總結(jié)

  • 第一個(gè)沒(méi)答上來(lái)的問(wèn)題是前后端分離是什么
    這怪我不識(shí)廬山真面目,只緣身在此山中;旧蠜](méi)有寫(xiě)過(guò)以前的面條代碼,一直都是前端后端分開(kāi)寫(xiě)。結(jié)果就忘了什么是前后端分離了。這里應(yīng)該是要談web的歷史。最開(kāi)始只有靜態(tài)html文件。服務(wù)器就是去去文件,然后返回報(bào)文。到了動(dòng)態(tài)網(wǎng)頁(yè)時(shí)期,因?yàn)楹蠖私涌诜祷氐膆ttp報(bào)文,靜態(tài)網(wǎng)頁(yè)文件也是服務(wù)器響應(yīng)的http報(bào)文,所以是可以代碼拼字符串,設(shè)置content-type來(lái)模擬一個(gè)靜態(tài)文件的,這個(gè)時(shí)候只有后端。再后面一點(diǎn)有了模板引擎,razor,webform之類的,前端可以寫(xiě)一些HTML+js了,但還是后端代碼生成網(wǎng)頁(yè)需要的靜態(tài)文件。而現(xiàn)在有了xhr和fetch,一般都是前端后端各寫(xiě)各的。以后用blazor還是要回去。

  • 第二個(gè)沒(méi)答上來(lái)的問(wèn)題是wpf中INotifyPropertyChanged的原理
    從寫(xiě)法上來(lái)看,繼承INotifyPropertyChanged接口的VM具有一個(gè)事件

    public event PropertyChangedEventHandler PropertyChanged;
    
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    

    然后在屬性set中,觸發(fā)了此事件。到這里為止還是很好理解。那么應(yīng)該是UI元素綁定到這個(gè)屬性時(shí),訂閱了此事件,所以才能接到通知并更新界面。UI元素有個(gè)SetBinding方法,應(yīng)該是實(shí)例化xaml文件時(shí),遇到了 {Bingding} 標(biāo)記,這個(gè)SetBinding方法于是被調(diào)用,才建立了UI元素依賴屬性和VM的CLR屬性的binding關(guān)系。然后 Binding 會(huì)偵聽(tīng)實(shí)現(xiàn)了這個(gè)接口的對(duì)象的 PropertyChanged 事件。這個(gè)對(duì)象更新屬性時(shí),clr屬性中set中主動(dòng)觸發(fā)了此事件,然后Binding偵聽(tīng)到此事件,更新UI元素。
    如果他又追問(wèn)binding監(jiān)聽(tīng)了這個(gè)事件是怎么取到數(shù)據(jù),并傳遞給UI,通知UI變化的?我還要研究一下這個(gè)問(wèn)題。
    這個(gè)也比較簡(jiǎn)單,因?yàn)榫褪鞘录嗛,然后通過(guò)反射取數(shù)據(jù)源的值。

    internal class MyBinding
    {
    	/// 
    	/// 這一般是UI元素的屬性
    	/// 
    	public DependencyProperty dependency;
    	public PropertyPath path;
    	/// 
    	/// 一般是UI元素
    	/// 
    	public DependencyObject dependencyObject;
    	public object source { get; set; }
    
    	public MyBinding( DependencyObject dependencyObject, DependencyProperty dependency, object source, PropertyPath path)
    	{
    		if (source is INotifyPropertyChanged inpc)
    		{
    			inpc.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChanged);
    		}
    		this.source = source;
    		this.dependency = dependency;
    		this.path = path;
    		this.dependencyObject = dependencyObject;
    	}
    
    	private void OnPropertyChanged(object? sender, PropertyChangedEventArgs e)
    	{
    		//數(shù)據(jù)源可能又多個(gè)屬性被綁定,檢查是不是綁定的那個(gè)屬性發(fā)生了變化
    		if (e.PropertyName==path.Path)
    		{
    			dependencyObject.SetValue(dependency, sender.GetType().GetProperty(e.PropertyName).GetValue(sender));
    		}
    	}
    }
    

    我來(lái)測(cè)試一下

    TextInfo textInfo;
    public MyBindingTest()
    {
    	InitializeComponent();
    	textInfo = new TextInfo() { Text = "TextInfo" };
    	MyBinding myBindin = new MyBinding(this.text, TextBlock.TextProperty, textInfo, new PropertyPath("Text"));
    }
    
    private void btn_Click(object sender, RoutedEventArgs e)
    {
    	textInfo.Text = "newValue";
    }
    

    記錄荒廢了三年的四年.net開(kāi)發(fā)的第一次面試
    不同之處在于wpf的綁定時(shí)基于弱事件而我這里是 += 。我的 MyBinding 類沒(méi)有繼承 MarkupExtension ,所以沒(méi)法被xaml解析。但這里暫時(shí)不研究了。

  • 第三個(gè)沒(méi)答上來(lái)的問(wèn)題,Redis是怎么緩存的 ,這問(wèn)到我的知識(shí)盲區(qū)了。我下來(lái)去網(wǎng)上搜了一下。Redis緩存有3種模式

    • Cache Aside(旁路緩存): 旁路模式在讀取取時(shí),優(yōu)先取緩存,沒(méi)有再取數(shù)據(jù)庫(kù)并刷新緩存。寫(xiě)數(shù)據(jù)時(shí)則更新數(shù)據(jù)庫(kù),再刪除舊緩存。
      這個(gè)模式其實(shí)我們MemoeyCache做緩存時(shí)也是這么干的,只是忽略了寫(xiě)的操作,不知道這叫旁路模式,給緩存設(shè)置了過(guò)期時(shí)間就完了。這種模式缺點(diǎn)是存數(shù)據(jù)和刪除緩存之間時(shí)間段內(nèi)讀的數(shù)據(jù)和實(shí)際的不一致。
    • Read/Write Through(讀寫(xiě)穿透) 的改進(jìn)是搞了緩存中間層,代替應(yīng)用訪問(wèn)數(shù)據(jù)庫(kù)。再中間層中進(jìn)行數(shù)據(jù)庫(kù)讀寫(xiě)。并且在寫(xiě)數(shù)據(jù)的時(shí)候,以事務(wù)的方式更新緩存和數(shù)據(jù)庫(kù),避免數(shù)據(jù)不一致。缺點(diǎn)是更新數(shù)據(jù)庫(kù)這段時(shí)間,其他讀緩存的阻塞了。
    • Write Behind Caching(異步緩存寫(xiě)入) 在讀寫(xiě)穿透的基礎(chǔ)上取消了事務(wù),寫(xiě)數(shù)據(jù)時(shí)優(yōu)先更新緩存,并在之后異步的更新數(shù)據(jù)庫(kù),這樣解決了寫(xiě)數(shù)據(jù)這段時(shí)間里,讀緩存阻塞的問(wèn)題。但缺點(diǎn)是寫(xiě)入數(shù)據(jù)庫(kù)之前有人訪問(wèn)數(shù)據(jù)庫(kù)的話,數(shù)據(jù)實(shí)際是不對(duì)的。
  • 第四個(gè)沒(méi)答上來(lái)的問(wèn)題是webform和mvc的優(yōu)缺點(diǎn) ,說(shuō)實(shí)話,我兩者都沒(méi)怎么用過(guò)。對(duì)webform的了解限于知道開(kāi)發(fā)起來(lái)像winform,有服務(wù)端組件和視圖狀態(tài)。開(kāi)發(fā)起來(lái)很快。缺點(diǎn)是WebForms傾向于生成較為笨重的HTML和ViewState,這可能會(huì)導(dǎo)致頁(yè)面加載速度慢,而且調(diào)試復(fù)雜,不靈活。但我們實(shí)際用webform的時(shí)候都是一般事件處理程序 ashx+aspx.cs后臺(tái)事件+ajax 突過(guò)去得了,沒(méi)想過(guò)這玩意。也許我該做個(gè)demo看看了。
    MVC里面我還是第一次接觸到路由,這玩意確實(shí)比原來(lái)的webform那個(gè)路由方便。還有是實(shí)現(xiàn)了視圖和模型關(guān)注點(diǎn)分離。可以一定程度上前后端分離。其優(yōu)點(diǎn)對(duì)于不熟悉的人同時(shí)也是缺點(diǎn)。
    不管怎么說(shuō),這兩個(gè)框架都是表現(xiàn)層框架,主要精力還是集中在UI上。

  • 面試觀點(diǎn)
    我和同學(xué)說(shuō)了這事,他說(shuō)我碰到的面試可能是喜歡聽(tīng)聽(tīng)你的知識(shí)面,然后挑著問(wèn)的類型,掌控方在我手里。而不是那種面試官需要明確面試者掌握了哪些知識(shí),固定提問(wèn)的類型。要發(fā)散思維,展示你的知識(shí)面。
    他問(wèn)了你很多自學(xué)的東西,這種記得不牢固是正常的。
    還有,問(wèn)你工作經(jīng)歷那里讓你繼續(xù)說(shuō)是感覺(jué)還好,應(yīng)該繼續(xù)下去。可視我總結(jié)的不夠,反而說(shuō)不下去了。
    他問(wèn)你現(xiàn)在的加班情況,是考慮你能不能適應(yīng)。像我這種回答人家未必會(huì)考慮。
    關(guān)于工資,金蝶寫(xiě)的是15-30K,像你這種3-5年的應(yīng)該18-20K。但是我現(xiàn)在這家奇葩公司月薪才8900啊,就算加年終獎(jiǎng)也才一萬(wàn),我怎么敢想。而且我之前幾年一直沒(méi)考慮過(guò)離職,也不知道自己在人力市場(chǎng)上應(yīng)該要多少,我說(shuō)不出口。

追加

  • 前后端分離是什么意思
    看了 @過(guò)錯(cuò) 的評(píng)論,我上網(wǎng)去搜了一圈?偨Y(jié)出這樣一段話。

    職責(zé)分離并非一個(gè)具體的設(shè)計(jì)模式,而是一種設(shè)計(jì)原則
    職責(zé)分離(Separation of Concerns,SoC)雖然不是嚴(yán)格意義上的設(shè)計(jì)模式,但它是軟件工程中的一種重要設(shè)計(jì)原則或思想。
    它指的是將一個(gè)軟件系統(tǒng)分解為不同的部分,每個(gè)部分解決特定的任務(wù)或關(guān)注點(diǎn),從而降低系統(tǒng)的復(fù)雜性并提高可維護(hù)性。
    具體來(lái)說(shuō),職責(zé)分離強(qiáng)調(diào)以下幾點(diǎn)
    單一職責(zé)原則(Single Responsibility Principle,SRP):一個(gè)類或模塊應(yīng)該專注于實(shí)現(xiàn)單一的功能或職責(zé)。這樣做不僅使得代碼更加清晰和易于理解,而且在需要修改時(shí)也可以降低影響范圍,減少引入錯(cuò)誤的可能性。
    職責(zé)分離的實(shí)現(xiàn)可以依賴于多種設(shè)計(jì)模式,例如:
    MVC(Model-View-Controller):將應(yīng)用程序分為模型(數(shù)據(jù)和業(yè)務(wù)邏輯)、視圖(用戶界面)和控制器(處理用戶輸入和調(diào)度任務(wù)),實(shí)現(xiàn)了職責(zé)分離和代碼重用。
    MVVM(Model-View-ViewModel):在WPF和其他現(xiàn)代UI框架中使用的一種模式,通過(guò)數(shù)據(jù)綁定將視圖(View)與視圖模型(ViewModel)分離,使得UI設(shè)計(jì)和業(yè)務(wù)邏輯分開(kāi)。(這確實(shí)和 @過(guò)錯(cuò) 所說(shuō)不差)

    前后端分離看起來(lái)是符合單一職責(zé)原則的軟件設(shè)計(jì)

小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號(hào)!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]

湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2024 haote.com 好特網(wǎng)