真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

flutter并發(fā),flutter 快速開發(fā)

Flutter浪潮下的音視頻研發(fā)探索

文/陳爐軍

創(chuàng)新互聯(lián)建站秉承實(shí)現(xiàn)全網(wǎng)價(jià)值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),做網(wǎng)站、成都做網(wǎng)站,小程序制作,網(wǎng)頁設(shè)計(jì)制作,成都手機(jī)網(wǎng)站制作營銷型網(wǎng)站建設(shè)幫助傳統(tǒng)企業(yè)實(shí)現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。

整理/LiveVideoStack

大家好,我是阿里巴巴閑魚事業(yè)部的陳爐軍,本次分享的主題是Flutter浪潮下的音視頻研發(fā)探索,主要內(nèi)容是針對閑魚APP在當(dāng)下流行的跨平臺框架Flutter的大規(guī)模實(shí)踐,介紹其在音視頻領(lǐng)域碰到的一些困難以及解決方案。

分享內(nèi)容主要分為四個(gè)方面,首先會對Flutter有一個(gè)簡單介紹以及選擇Flutter作為跨平臺框架的原因,其次會介紹Flutter中與音視頻關(guān)系非常大的外接紋理概念,以及對它做出的一些優(yōu)化。之后會對閑魚在音視頻實(shí)踐過程中碰到的一些Flutter問題提出了一些解決方案——TPM音視頻框架。最后是閑魚Flutter多媒體開源組件的介紹。

Flutter

Flutter是一個(gè)跨平臺框架,以往的做法是將音頻、視頻和網(wǎng)絡(luò)這些模塊都下沉到C++層或者ARM層,在其上封裝成一個(gè)音視頻的SDK,供UI層的PC、iOS和Android調(diào)用。

而Flutter做為一個(gè)UI層的跨平臺框架,顧名思義就是在UI層也實(shí)現(xiàn)了一個(gè)跨平臺開發(fā)??梢灶A(yù)想的是未Flutter發(fā)展的好的話,會逐漸變?yōu)橐粋€(gè)從底層到UI層的一個(gè)全鏈路的跨平臺開發(fā),技術(shù)人員分別負(fù)責(zé)SDK和UI層的開發(fā)。

在Flutter之前已經(jīng)有很多跨平臺UI解決方案,那為什么選擇Flutter呢?

我們主要考慮性能和跨平臺的能力。

以往的跨平臺方案比如Weex,ReactNative,Cordova等等因?yàn)榧軜?gòu)的原因無法滿足性能要求,尤其是在音視頻這種性能要求幾乎苛刻的場景。

而諸如Xamarin等,雖然性能可以和原生App一致,但是大部分邏輯還是需要分平臺實(shí)現(xiàn)。

我們可以看一下,為什么Flutter可以實(shí)現(xiàn)高性能:

原生的native組件渲染以IOS為例,蘋果的UIKit通過調(diào)用平臺自己的繪制框架QuaztCore來實(shí)現(xiàn)UI的繪制,圖形繪制也是調(diào)用底層的API,比如OpenGL、Metal等。

而Flutter也是和原生API邏輯一致,也是通過調(diào)用底層的繪制框架層SKIA實(shí)現(xiàn)UI層。這樣相當(dāng)于Flutter他自己實(shí)現(xiàn)了一套UI框架,提供了一種性能超越原生API的跨平臺可能性。

但是我們說一個(gè)框架最終性能怎樣,其實(shí)取決于設(shè)計(jì)者和開發(fā)者。至于現(xiàn)在到底是一個(gè)什么狀況:

在閑魚的實(shí)踐中,我們發(fā)現(xiàn)在正常的開發(fā)沒有特意的去優(yōu)化UI代碼的情況下,在一些低端機(jī)上,F(xiàn)lutter界面的流暢性是比Native界面要好的。

雖然現(xiàn)在閑魚某些場景下會有卡頓閃退等情況,但是這是一個(gè)新事物發(fā)展過程中的必然問題,我們相信未來性能肯定不會成為限制Flutter發(fā)展的瓶頸的。

在閑魚實(shí)踐Flutter的過程中,混合棧和音視頻是其中比較難解決的兩個(gè)問題,混合棧是指一個(gè)APP在Flutter過程中不可能一口氣將所有業(yè)務(wù)全部重寫為Flutter,所以這是一個(gè)逐步迭代的過程,這期間原生native界面與Flutter界面共存的狀態(tài)就稱之為混合棧。閑魚在混合棧上也有一些比較好的輸出,例如FlutterBoost。

外接紋理

在講音視頻之前需要簡要介紹一下外接紋理的概念,我們將它稱之為是Flutter和Frame之間的橋梁。

Flutter渲染一幀屏幕數(shù)據(jù)首先要做的是,GPU發(fā)出的VC信號在Flutter的UI線程,通過AOT編譯的機(jī)器碼結(jié)合當(dāng)前Dart Runtime,生成Layer Tree UI樹,Layer Tree上每一個(gè)葉子節(jié)點(diǎn)都代表了當(dāng)前屏幕上所需要渲染的每一個(gè)元素,包含了這些元素渲染所需要的內(nèi)容。將Layer Tree拋給GPU線程,在GPU線程內(nèi)調(diào)用Skia去完成整個(gè)UI的渲染過程。Layer Tree中有PictureLayer和TextureLayer兩個(gè)比較重要的節(jié)點(diǎn)。PictureLayer主要負(fù)責(zé)屏幕圖片的渲染,F(xiàn)lutter內(nèi)部實(shí)現(xiàn)了一套圖片解碼邏輯,在IO線程將圖片讀取或者從網(wǎng)絡(luò)上拉取之后,通過解碼能夠在IO線程上加載出紋理,交給GPU線程將圖片渲染到屏幕上。但是由于音視頻場景下系統(tǒng)API太過繁多,業(yè)務(wù)場景過于復(fù)雜。Flutter沒有一套邏輯去實(shí)現(xiàn)跨平臺的音視頻組件,所以說Flutter提出了一種讓第三方開發(fā)者來實(shí)現(xiàn)音視頻組件的方式,而這些音視頻組件的視頻渲染出口,就是TextureLayer。

在整個(gè)Layer Tree渲染的過程中,TextureLayer的數(shù)據(jù)紋理需要由外部第三方開發(fā)者來指定,可以把視頻數(shù)據(jù)和播放器數(shù)據(jù)送到TextureLayer里,由Flutter將這些數(shù)據(jù)渲染出來。

TextureLayer渲染過程:首先判斷Layer是否已經(jīng)初始化,如果沒有就創(chuàng)建一個(gè)Texture,然后將Texture Attach到一個(gè)SufaceTexture上。

這個(gè)SufaceTexture是音視頻的native代碼可以獲取到的對象,通過這個(gè)對象創(chuàng)建的Suface,我們可以將視頻數(shù)據(jù)、攝像頭數(shù)據(jù)解碼放到Suface中,然后Flutter端通過監(jiān)聽SufaceTexture的數(shù)據(jù)更新就可以順利把剛才創(chuàng)建的數(shù)據(jù)更新到它的紋理中,然后再將紋理交給SKIA渲染到屏幕上。

然而我們?nèi)绻枰肍lutter實(shí)現(xiàn)美顏,濾鏡,人臉貼圖等等功能,就需要將視頻數(shù)據(jù)讀取出來,更新到紋理中,再將GPU紋理經(jīng)過美顏濾鏡處理后生成一個(gè)處理后的紋理。按Flutter提供的現(xiàn)有能力,必須先將紋理中的數(shù)據(jù)從GPU讀出到CPU中,生成Bitmap后再寫入Surface中,這樣在Flutter中才能順利的更新到視頻數(shù)據(jù),這樣做對系統(tǒng)性能的消耗很大。

通過對Flutter渲染過程分析,我們知道Flutter底層需要渲染的數(shù)據(jù)就是GPU紋理,而我們經(jīng)過美顏濾鏡處理完成以后的結(jié)果也是GPU紋理,如果可以將它直接交給Flutter渲染,那就可以避免GPU-CPU-GPU這樣的無用循環(huán)。這樣的方法是可行的,但是需要一個(gè)條件,就是OpenGL上下文共享。

OpenGL

在說上下文之前,得提到一個(gè)和上線文息息相關(guān)的概念:線程。

Flutter引擎啟動(dòng)后會啟動(dòng)四個(gè)線程:

第一個(gè)線程是UI線程,這是Flutter自己定義的UI線程,主要負(fù)責(zé)GPU發(fā)出的VSync信號時(shí)候用當(dāng)前Dart編譯的機(jī)器碼和當(dāng)前運(yùn)行環(huán)境創(chuàng)建出Layer Tree。

還有就是IO線程和GPU線程。和大部分OpenGL處理解決方案中一樣,F(xiàn)lutter也采取一個(gè)線程責(zé)資源加載,一部分負(fù)責(zé)資源渲染這種思路。

兩個(gè)線程之間紋理共享有兩種方式。一種是EGLImage(IOS是 CVOpenGLESTextureCache)。一種是OpenGL Share Context。Flutter通過Share Context來實(shí)現(xiàn)紋理共享,將IO線程的Context和GPU線程的Context進(jìn)行Share,放到同一個(gè)Share Group下面,這樣兩個(gè)線程下資源是互相可見可以共享的。

Platform線程是主線程,F(xiàn)lutter中有一個(gè)很奇怪的設(shè)定,GPU線程和主線程共用一個(gè)Context。并且在主線程也有很多OpenGL 操作。

這樣的設(shè)計(jì)會給音視頻開發(fā)帶來很多問題,后面會詳細(xì)說。

音視頻端美顏處理完成的OpenGL紋理能夠讓Flutter直接使用的條件就是Flutter的上下文需要和平臺音視頻相關(guān)的OpenGL上下文處在一個(gè)Share Group下面。

由于Flutter主線程的Context就是GPU的Context,所以在音視頻端主線程中有一些OpenGL操作的話,很有可能使Flutter整個(gè)OpenGL被破壞掉。所以需要將所有的OpenGL操作都限制在子線程中。

通過上述這兩個(gè)條件的處理,我們就可以在沒有增加GPU消耗的前提下實(shí)現(xiàn)美顏和濾鏡等等功能。

TPM

在經(jīng)過demo驗(yàn)證之后,我們將這個(gè)方案應(yīng)用到閑魚音視頻組件中,但改造過程中發(fā)現(xiàn)了一些問題。

上圖是攝像頭采集數(shù)據(jù)轉(zhuǎn)換為紋理的一段代碼,其中有兩個(gè)操作:首先是切進(jìn)程,將后面的OpenGL操作都切到cameraQueue中。然后是設(shè)置一次上下文。然后這種限制條件或者說是潛規(guī)則往往在開發(fā)過程中容易被忽略的。而這個(gè)條件一旦忽略后果就是出現(xiàn)一些莫名其妙的詭異問題極難排查。因此我們就希望能抽象出一套框架,由框架本身實(shí)現(xiàn)線程的切換、上下文和模塊生命周期等的管理,開發(fā)者接入框架以后只需要安心實(shí)現(xiàn)自己的算法,而不需要關(guān)心這些潛規(guī)則還有其他一些重復(fù)的邏輯操作。

在引入Flutter之前閑魚的音視頻架構(gòu)與大部分音視頻邏輯一樣采用分層架構(gòu):

1:底層是一些獨(dú)立模塊

2:SDK層是對底層模塊的封裝

3:最上層是UI層。

引入Flutter之后,通過分析各個(gè)模塊的使用場景,我們可以得出一個(gè)假設(shè)或者說是抽象:音視頻應(yīng)用在終端上可以歸納為視頻幀解碼之后視頻數(shù)據(jù)幀在各個(gè)模塊之間流動(dòng)的過程,基于這種假設(shè)去做Flutter音視頻框架的抽象。

咸魚Flutter多媒體開源組件

整個(gè)Flutter音視頻框架抽象分為管線和數(shù)據(jù)的抽象、模塊的抽象、線程統(tǒng)一管理和上下文同一管理四部分。

管線,其實(shí)就是視頻幀流動(dòng)的管道。數(shù)據(jù),音視頻中涉及到的數(shù)據(jù)包括紋理、Bit Map以及時(shí)間戳等。結(jié)合現(xiàn)有的應(yīng)用場景我們定義了管線流通數(shù)據(jù)以Texture為主數(shù)據(jù),同時(shí)可以選擇性的添加Bit Map等作為輔助數(shù)據(jù)。這樣的數(shù)據(jù)定義方式,避免重復(fù)的創(chuàng)建和銷毀紋理帶來的性能開銷以及多線程訪問紋理帶來的一些問題。也滿足一些特殊模塊對特殊數(shù)據(jù)的需求。同時(shí)也設(shè)計(jì)了紋理池來管理管線中的紋理數(shù)據(jù)。

模塊:如果把管線和數(shù)據(jù)比喻成血管和血液,那框架音視頻的場景就可以比喻成器官,我們根據(jù)模塊所在管線的位置抽象出采集、處理和輸出三個(gè)基類。這三個(gè)基類里實(shí)現(xiàn)了剛才說的線程切換,上下文切換,格式轉(zhuǎn)換等等共同邏輯,各個(gè)功能模塊通過集成自這些基類,可以避免很多重復(fù)勞動(dòng)。

線程:每一個(gè)模塊初始化的時(shí)候,初始化函數(shù)就會去線程管理的模塊去獲取自己的線程,線程管理模塊可以決定給初始化函數(shù)分配新的線程或者已經(jīng)分配過其他模塊的線程。

這樣有三個(gè)好處:

一是可以根據(jù)需要去決定一個(gè)線程可以掛載多少模塊,做到線程間的負(fù)載均衡。第二,多線程并發(fā)式能夠保證模塊內(nèi)的OpenGL操作是在當(dāng)前線程內(nèi)而不會跑到主線程去,徹底避免Flutter的OpenGL 環(huán)境被破壞。第三,多線程并行可以充分利用CPU多核架構(gòu),提升處理速度。

從Flutter端修改Flutter引擎將Context取出后,根據(jù)Context創(chuàng)建上下文的統(tǒng)一管理模塊,每一個(gè)模塊在初始化的時(shí)候會獲取它的線程,獲取之后會調(diào)用上下文管理模塊獲取自己的上下文。這樣可以保證每一個(gè)模塊的上下文都是與Flutter的上下文進(jìn)行Share的,每個(gè)模塊之間資源都是共享可見的,F(xiàn)lutter和音視頻native之間也是互相共享可見的。

基于上述框架如果要實(shí)現(xiàn)一個(gè)簡單的場景,比如畫面實(shí)時(shí)預(yù)覽和濾鏡處理功能,

1:需要選擇功能模塊,功能模塊包括攝像頭模塊、濾鏡處理模塊和Flutter畫面渲染模塊,

2:需要配置模塊參數(shù),比如采集分辨率、濾鏡參數(shù)和前后攝像頭設(shè)置等,

3:在創(chuàng)建視頻管線后使用已配置的參數(shù)創(chuàng)建模塊

4:最后管線搭載模塊,開啟管線就可以實(shí)現(xiàn)這樣簡單的功能。

上圖為整個(gè)功能實(shí)現(xiàn)的代碼和結(jié)構(gòu)圖。

結(jié)合上述音視頻框架,閑魚實(shí)現(xiàn)了Flutter多媒體開源組件。

組要包含四個(gè)基本組件分別是:

1:視頻圖像拍攝組件

2:播放器組件

3:視頻圖像編輯組件

4:相冊選擇組件

現(xiàn)在這些組件正在走內(nèi)部開源流程。預(yù)計(jì)9月份,相冊和播放器會實(shí)現(xiàn)開源。

后續(xù)展望和規(guī)劃

1:實(shí)現(xiàn)開頭所說的從底層SDK到UI的全鏈路的跨端開發(fā)。目前底層框架層和模塊層都是各個(gè)平臺各自實(shí)現(xiàn),反而是Flutter的UI端進(jìn)行了跨平臺的統(tǒng)一,所以后續(xù)會將底層也按照音視頻常用做法把邏輯下沉到C++層,盡可能的實(shí)現(xiàn)全鏈路跨平臺。

2:第二部分內(nèi)容為開源共建,閑魚開源的內(nèi)容不僅包括拍攝、編輯組件,還包括了很多底層模塊,希望有開發(fā)者在基于Flutter開發(fā)音視頻應(yīng)用時(shí)可以充分利用閑魚開源出的音視頻模塊能力,搭建APP框架,開發(fā)者只要去負(fù)責(zé)實(shí)現(xiàn)特殊需求模塊就可以,盡可能的減少重復(fù)勞動(dòng)。

離不開DART的Flutter(dart篇)

hello world例子

在終端打印字符串‘Hello World!’

計(jì)算斐波那契數(shù)列

一個(gè)簡單的類

計(jì)算兩點(diǎn)距離

異步并發(fā)示例

使用了Isolate

1.面向?qū)ο?/p>

對于面向?qū)ο筮@個(gè)概念,相信了解Java的同學(xué)對這個(gè)概念一定不會陌生。

例如:我們有個(gè)Person Object他有很多特征和行為。

這些都是這個(gè)Person Object的屬性。

也就是因?yàn)橛辛诉@些特征,行為等等才決定了這個(gè)人是誰。

那么回到Dart當(dāng)中,所有的都是對象,那么在就可以可以跟進(jìn)對象的屬性的特征,方法等等來進(jìn)行編程。

之所以我們在這里又特別強(qiáng)調(diào)了一下面向?qū)ο蟮母拍?,是因?yàn)檫@個(gè)概念在Dart語言當(dāng)中,至關(guān)重要!

2.最重要的幾個(gè)概念

3.Dart的部分特性

4.Dart的內(nèi)置庫

包名

描述

dart:asynv

異步編程,提供Future,Stream類

dart:collection

集合

dart:convert

不同類型的字符編碼解碼

dart:core

Dart語言核心功能,內(nèi)置類型

dart:html

網(wǎng)頁開發(fā)用到的庫

dart:io

文件讀寫,IO相關(guān)

dart:math

數(shù)字常量以及函數(shù),隨機(jī)算法等

dart:svg

事件和動(dòng)畫矢量圖支持

綜上述所說要想學(xué)Flutter,先學(xué)Dart!關(guān)于Flutter下篇我會講到。為什么離不開dart!

有關(guān)更多面經(jīng)、核心技術(shù)筆記;自己也是從事Android開發(fā)5年有余了;整理了一些Android開發(fā)技術(shù)核心筆記和面經(jīng)題綱, 如有需要的同學(xué)請私信我回復(fù)“核心筆記”或“面試”領(lǐng)取!

做混合的話Uniapp和Flutter我應(yīng)該學(xué)哪個(gè)啊?

Uniapp目前比較成熟,而且用的是Vue語法,學(xué)習(xí)成本比較低,而且行業(yè)里面用的也比較廣泛,而Flutter的話,學(xué)習(xí)成本略高,因?yàn)橐獙W(xué)習(xí)新的語言,還有就是目前生態(tài)不是特別完備,等他再發(fā)展發(fā)展吧。黑馬程序員官網(wǎng)有成套免費(fèi)視頻哦,有什么不懂的可以直接過去學(xué)習(xí)。您的采納是對我成長的鞭策

過了40的“程序猿”會后悔當(dāng)初進(jìn)入這個(gè)行業(yè)嗎?

真實(shí)來說,做程序員沒有五年經(jīng)驗(yàn),根本無法理解其中的奧秘,很多高深的知識,比如框架設(shè)計(jì),分布式原理,領(lǐng)域?qū)S谜Z言,這些高級點(diǎn)的知識,沒書沒材料沒人講,沒經(jīng)驗(yàn)根本就是要止步了,國內(nèi)需要的根本就不是真正的程序員而是代碼的搬運(yùn)工,把業(yè)務(wù)給我寫出來,加班寫出來就行了。而國外,那些程序員都會去想著把業(yè)務(wù)寫得更好,更具有創(chuàng)新,快捷,方便大眾。還是思想的問題。忙著賺錢的公司太多。

你看看很多著名的框架,比如前端jQuery bootstrap 爬蟲框架scrap,深度學(xué)習(xí)框架keras,TensorFlow. Flutter都是國外程序?qū)懙?,還有大量的工具型無盈利網(wǎng)站,國內(nèi)為啥寫不出,很簡單,因?yàn)樵谀阏@研更高深的知識的時(shí)候,把你裁掉,讓你轉(zhuǎn)行搞其他的,你自己飯碗都保不住,還怎么去想著搞?

中國企業(yè)很簡單的一點(diǎn)就是,出業(yè)務(wù),做PPT,拿融資,擴(kuò)大推廣,裁掉程序員,這叫卸磨殺驢。這是小中型企業(yè)的模式,招程序員就是看能不能加班,能不能抗壓。

不想講了,當(dāng)興趣不能當(dāng)飯吃的時(shí)候,你們還怪這片土地出不了天才。

我年過40,進(jìn)入這個(gè)行業(yè)已經(jīng)二十多年了,總的來說,談不上后悔,有得有失。現(xiàn)在談?wù)勎业膸c(diǎn)感悟吧。

一、綜合素質(zhì)很重要

進(jìn)入這個(gè)行業(yè)開始,就是做一個(gè)程序員,到后面成為了架構(gòu)師,再到技術(shù)總監(jiān)。給我的啟示就是,偏科的程序員發(fā)展前景是有限的。綜合素質(zhì)包括溝通能力,領(lǐng)導(dǎo)能力和組織能力有時(shí)候比編程能力更為重要。有很多程序員不善于溝通,但是在中國 社會 ,溝通很重要,和領(lǐng)導(dǎo)的溝通,和同事的溝通,和下級的溝通。不會溝通的程序員,注定是難于轉(zhuǎn)型的,只能干程序員,干編程,而編程是青春飯。

二、自學(xué)能力很重要

在IT這個(gè)行業(yè),自學(xué)能力太重要了,不能自學(xué)最新的技術(shù)并運(yùn)用到工作中,你會發(fā)現(xiàn)很快就跟不上這個(gè)行業(yè)的發(fā)展,工作起來力不從心,進(jìn)而被淘汰。自學(xué)的過程中,合理的分配時(shí)間是關(guān)鍵,很多程序員平常工作很忙,基本沒有時(shí)間去學(xué)習(xí),而領(lǐng)導(dǎo)分配任務(wù)的時(shí)候是不會給你專門留出學(xué)習(xí)時(shí)間的,你只有合理利用好時(shí)間,忙里偷閑。

三、盡早向上“提升”

在中國,程序員做到30多歲就算“大齡”了,在這之前,就要考慮好自己的向上晉升渠道,是適合繼續(xù)做技術(shù)?還是轉(zhuǎn)型管理?如果還想做技術(shù),必須要在技術(shù)上往上提升一層,能夠達(dá)到架構(gòu)師的水平,否則,30多歲的程序員如果被公司末位淘汰請不要吃驚。如果轉(zhuǎn)型做管理,這個(gè)就要體現(xiàn)出你的管理能力,盡早被上司賞識,從 而 被提拔到管理崗位上。

一路走來,感悟很多,不管怎樣,選擇了程序員這個(gè)職位,就沒必要后悔,后悔也沒有用,愿天下所有程序員都 人生無悔,活在當(dāng)下 。

人類 歷史 長河中,各行各業(yè)有幾個(gè)小黃人兒留下的東西?小黃人兒哪都短 不是嗎?

這個(gè)問題應(yīng)該不同人有不同答案吧,說說我自己吧,入行十幾年了,談不上后悔,但整體有點(diǎn)無奈。

回顧這十幾年的經(jīng)歷,彎路沒少走,錯(cuò)誤沒少犯,就算一些現(xiàn)在看來走對的路,也是誤打誤撞。

總結(jié)起來走過兩個(gè)階段,個(gè)人觀點(diǎn),僅供參考。

入行第一個(gè)階段,無論職業(yè)規(guī)劃是否正確,發(fā)展都還算順利

這個(gè)階段基本就是學(xué)習(xí)和工作的循環(huán)階段,即便沒有很明確的目標(biāo)性,只要努力,薪資一般都會持續(xù)增長,所以現(xiàn)在回頭看這個(gè)階段,應(yīng)該是最爽的一個(gè)階段了。

當(dāng)然,如果想要在這個(gè)行業(yè)持續(xù)做下去,并且中年以后依然可以游刃有余,最好能在這個(gè)階段完成三件事外加明白一個(gè)道理

需要完成的三件事:

明白一個(gè)道理:

人過中年靠投簡歷找工作不太靠譜,需要為未來鋪條路(也就是說一旦發(fā)生職業(yè)危機(jī),他可以幫個(gè)忙),盡管這條路未必用得上,也但愿永遠(yuǎn)別用上。

也就是說要選擇發(fā)展自己的技術(shù)優(yōu)勢還是人脈優(yōu)勢留在日后備用。

如果要發(fā)展技術(shù)優(yōu)勢,也就是人們常說的技術(shù)大牛,這個(gè)大牛可不是某個(gè)小技術(shù)團(tuán)隊(duì)的大牛,而是某個(gè)領(lǐng)域內(nèi)切切實(shí)實(shí)的牛人,至少在某個(gè)領(lǐng)域內(nèi)有一定的知名度。這就不僅僅對你個(gè)人努力程度有一定要求,還要看機(jī)遇。例如,你想成為并發(fā)領(lǐng)域?qū)<?,如果沒有機(jī)會接觸真真的大并發(fā)場景,僅僅靠啃幾本書想成為這個(gè)領(lǐng)域的專家,無異于水中撈月。

如果要發(fā)展人脈,前提條件要求你也具備相當(dāng)?shù)募夹g(shù)能力,否則到時(shí)候別人怎么幫你也沒用。

入行第二個(gè)階段,決定未來職業(yè)走向的關(guān)鍵時(shí)期

如果第一個(gè)階段隨波逐流的走過來(注意,是隨波逐流,不是混,如果是混過來,可能在第三四個(gè)年頭就不好找工作了),除非運(yùn)氣特別好,否則在第二個(gè)六年中再找工作就會感覺力不從心了,也就是人們常說的實(shí)力和工齡不符。

然而這一切才剛剛開始,如果第二個(gè)階段依然得過且過的工作,第三個(gè)階段的職場將更加難混。

在這個(gè)階段要完成的事情

需要確定好自己未來的職業(yè)方向,管理還是技術(shù)。

不論選擇哪一個(gè),在選擇好之后最好確定一個(gè)偏向,因?yàn)闊o論管理還是技術(shù),里面涉及的東西都太多,一個(gè)人有限的精力很難全面精通。

過了技術(shù)積累期之后,任何工作都離不開對業(yè)務(wù)的深入理解,這也意味著每一次跳槽都需要重新組建自己的業(yè)務(wù)架構(gòu)。

因此,有一個(gè)可以持續(xù)打拼而不需要不斷更換的平臺就顯得尤為重要。

以上就是十幾年經(jīng)歷過的兩個(gè)階段的總結(jié),至于后面該怎么走,依舊處于迷茫階段^0^。

過了40的程序員基本上幾百萬的資產(chǎn)是有的,這是大多數(shù)人一輩子才能掙到的錢,所以應(yīng)該說是很辛運(yùn)的,大部分學(xué)計(jì)算機(jī)的其實(shí)一畢業(yè)就轉(zhuǎn)行了,根本就進(jìn)不了這個(gè)行業(yè),進(jìn)來的也會有不少半路不愿干或者干不下去轉(zhuǎn)行的,中國大環(huán)境其實(shí)對程序員不是太友好,所以來說能干到40來歲的只有很少一部分。


網(wǎng)站欄目:flutter并發(fā),flutter 快速開發(fā)
網(wǎng)站URL:http://weahome.cn/article/hoeoos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部