HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> xen 動(dòng)態(tài)遷移遇到個(gè)問題:xl migrate xen_node7 192.168.0.120 錯(cuò)誤 libxl: error: libxl_utils.c:408:libxl_read_exactly file/stream truncated reading banner from migration receiver stream libxl: info: libxl_exec.c:72:libxl_report_child_exitstatus migration target process [5252] exited with error status 2
哪位大牛遇到過?
來源:開源中國(guó)
發(fā)布時(shí)間:2013-08-07 15:12:00
我有個(gè) css 問題, 標(biāo)簽里的內(nèi)容如果太長(zhǎng)了會(huì)顯示橫的和豎的 scroll,能有辦法去掉橫的和豎的 scroll,然后如果某行 code 太長(zhǎng)了就自動(dòng)換行,問一下怎么做呢? 比如這個(gè)頁(yè)面拉到最下面那個(gè) pdf 的 code 區(qū)塊,我要去掉這個(gè) scroll,把右邊超出的地方換行: https://gitbookio.gitbooks.io/documentation/content/format/configuration.html
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:03:06
技術(shù)棧:vue2+element-ui+vue-cli4
需求:現(xiàn)在項(xiàng)目上需要拆分代碼,我想通過 lerna 管理前端的業(yè)務(wù)模塊代碼,抽離一個(gè)主要的模塊,編譯過后,通過 npm 包的形式來給其他業(yè)務(wù)模塊使用。
現(xiàn)在的方式: 我目前通過 vue.config.js 配置 webpack,打包出 lib 文件,現(xiàn)在可以滿足上面的需求;但是必須不能抽離公共文件,也就是:config.optimization.delete('splitChunks') 這樣導(dǎo)致 lib 文件過大,不刪除 splitChunks 的話,打包出來的文件運(yùn)行報(bào)錯(cuò),無法使用。
我在想,能不能僅編譯.vue 文件成.js 文件,符合 es module 的形式來直接使用呢? 請(qǐng)教一下各位大佬??
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:03:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> 在xen中用virt-clone 克隆虛擬機(jī),克隆出來的虛擬機(jī)性能會(huì)收到影響嗎?在xenserver中貌似會(huì)有影響看了這篇文章http://xenme.com/1133 之后知道de
來源:開源中國(guó)
發(fā)布時(shí)間:2013-07-17 16:22:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> xenserver6.2如何動(dòng)態(tài)調(diào)整虛擬機(jī)的cpu的個(gè)數(shù)。他們說收費(fèi)的版的才有,郁悶了。xen都可以在線調(diào)整CPU個(gè)數(shù)的
來源:開源中國(guó)
發(fā)布時(shí)間:2013-07-09 11:39:07
記得今年年初 1 月多的時(shí)候,打算去買陳奕迅演唱會(huì)的門票,進(jìn)大麥網(wǎng)購(gòu)票頁(yè)的時(shí)候,Vue.js Devtools 的圖標(biāo)就亮了,當(dāng)時(shí)人都傻了。后來沒幾天,疫情的消息出來了,也就沒去搶票了。 剛剛刷到了隔壁悟空問答的帖子,然后想起了這件事,跑到大麥網(wǎng)看了看,購(gòu)票頁(yè)還是老樣子……
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:02:45
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
1.多長(zhǎng)時(shí)間寫出來大家能接受?
2.加廣告會(huì)不會(huì)惹眾怒?
3.當(dāng)然是非官方版本的。 @紅薯 會(huì)不會(huì)封殺掉?
來源:開源中國(guó)
發(fā)布時(shí)間:2014-06-07 15:06:04
如題,我見過的討論似乎用的都是 elementui,沒用過付費(fèi)版,感覺免費(fèi)版的設(shè)計(jì)不好看。自己用過一個(gè)叫 buefy 的,感覺內(nèi)容太少了。還是說 vue 本身生態(tài)不好,該換 react 了?
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:02:28
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
// let a = arc4random()%100
// let b = arc4random_uniform(100)
// 這兩種在2.2中可以,在3.0好像都不行了
來源:開源中國(guó)
發(fā)布時(shí)間:2016-09-26 21:44:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
項(xiàng)目中使用了MBProgressHUD
在界面上隨意區(qū)域點(diǎn)擊會(huì)崩潰?。。?
報(bào)錯(cuò)原因如下:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView setLetterpressStyle:]: unrecognized selector sent to instance 0x7fe156ed6870'
求大神指導(dǎo) [淚奔]
來源:開源中國(guó)
發(fā)布時(shí)間:2017-07-24 15:12:00
最近發(fā)現(xiàn)啟動(dòng) chrome 后不開其他界面掛著,電腦的發(fā)熱量都會(huì)增加。于是留了個(gè)心眼看了下任務(wù)管理器,發(fā)現(xiàn) chrome 用了 50%+的 cpu 。于是看了下 chrome 內(nèi)置的任務(wù)管理器,發(fā)現(xiàn)是 Markdown Here 插件下的兩個(gè) js 在跑: 插件地址: Markdown Here
疑問:為啥 Markdown Here 會(huì)去使用作為壓縮 /轉(zhuǎn)換圖片用的 js......
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:01:59
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
我已分享至騰訊視頻,希望對(duì)小伙伴有些用
https://v.qq.com/x/page/d0508da6joe.html?ptag=qqbrowser
來源:開源中國(guó)
發(fā)布時(shí)間:2017-05-29 15:45:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
服務(wù)端返回 經(jīng)過urlencode函數(shù)處理過的gb2312字符串,在swift ios中 如何解碼 ?
來源:開源中國(guó)
發(fā)布時(shí)間:2015-05-19 21:07:00
之前用過 ungoogled-chromium 和 Brave ,各有優(yōu)劣,但是也不能 100%滿足需求,所以準(zhǔn)備自己定制一些功能。
現(xiàn)在從上述兩個(gè)開源項(xiàng)目移植了一些 patch,從 Chromium 中移除 /禁用了下列功能: Safe Browsing Crash Reporter/Crashpad RLZ Rappor Network Time Tracker New Tab Page 中的推廣信息 IPv6 Probe 大量統(tǒng)計(jì)信息,Chromium 中幾乎一切操作都會(huì)被統(tǒng)計(jì)(在 chrome://histograms 中可以查看)
然后又從 Edge 抄了灰色 Web 控件顏色和直角、帶陰影的 Tab 欄,接下來計(jì)劃實(shí)現(xiàn)如下功能: 移植 Firefox Container 原生實(shí)現(xiàn) ClearURLs 擴(kuò)展的移除 URL 中統(tǒng)計(jì)參數(shù)的功能,畢竟多開一個(gè)擴(kuò)展就多占一份內(nèi)存 集成 Zotero Connector 移植 Brave 中的 Fingerprint Protection 功能。現(xiàn)在實(shí)現(xiàn)了返回隨機(jī)數(shù)據(jù)( Panopticlick 中部分 fingerprint 數(shù)據(jù)返回 randomized ),但是功能無法開關(guān),對(duì)一些滑動(dòng)驗(yàn)證功能有影響 再試試把 Chromium 中的 tcmalloc 內(nèi)存分配器換成微軟的 mimalloc
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:01:40
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
對(duì)技術(shù)、邏輯等能力要求較高的 IT 行業(yè),往往會(huì)讓人覺得男性更符合行業(yè)需求,而現(xiàn)實(shí)中也確實(shí)是男性占比較高。但可不要因?yàn)閿?shù)量對(duì)比就忽視了女性的存在,對(duì)于技術(shù),她們同樣有著極強(qiáng)的專業(yè)素養(yǎng)和能力。本期,【開源訪談】邀請(qǐng)到了來自極光推送的華西地區(qū)技術(shù)管理施文婷,跟大家分享作為女程序員的心路歷程,以及從 Java 轉(zhuǎn)做 iOS 并踏入管理層的那些背后的成長(zhǎng)故事。
【本期嘉賓】
施文婷,四年以上開發(fā)經(jīng)驗(yàn),熟悉 Java 后端開發(fā)的流程和技術(shù)面,了解 html/css 和 js ,自學(xué) iOS 開發(fā)。極光推送華西地區(qū)技術(shù)支持負(fù)責(zé)。OSC 源創(chuàng)會(huì)第53期、54期成都、重慶站講師。
【訪談實(shí)錄】
1 )先簡(jiǎn)單介紹下自己
答:大家好,我是施文婷,之前一直在一家外資企業(yè)工作,今年剛剛來到極光推送,目前主要負(fù)責(zé)極光推送華西地區(qū)的技術(shù)支持。最開始我是做 Java 的,后來因?yàn)楣狙邪l(fā)上面的一些需要,自學(xué)了 iOS 開發(fā)。
2 )當(dāng)初是因?yàn)槭裁醋隽碎_發(fā)?女程序員的比例畢竟在少數(shù),心態(tài)怎么調(diào)節(jié)?
答:其實(shí)沒有想太多,從小到大,沒有特別覺得女生就應(yīng)該去做什么、不該做什么。以前上學(xué)的時(shí)候也是覺得文科太繞腦子,選擇了理科。后來大學(xué)專業(yè)學(xué)的也是這個(gè),順其自然的就做了這行。
平常接觸到的人中確實(shí)會(huì)些很驚訝我是做開發(fā)的,但從個(gè)人角度來說,不管是男生還是女生,這是大家都可以做的一件事情。而且現(xiàn)在做開發(fā)的女生也越來越多了,所以倒也沒覺得有什么特別的。
3 )對(duì)于相對(duì)比較枯燥的工作環(huán)境,是如何適應(yīng)的?作為管理層,現(xiàn)在和之前最大的不同是什么?
答:枯燥其實(shí)覺得還好,當(dāng)實(shí)現(xiàn)某個(gè)功能,或者是當(dāng)解決掉某個(gè) BUG 的時(shí)候,這種成就感是還很挺讓人自豪的。還有的人會(huì)跟我說做開發(fā)要一直坐著敲代碼不動(dòng)彈對(duì)身體不好,我覺得現(xiàn)在很多行業(yè)都有這種現(xiàn)象,自己在工作之外調(diào)節(jié)就好。
至于管理,其實(shí)沒有給自己標(biāo)榜管理的概念,我覺得就是綜合大家的能力,將合適的事情給到合適的人,把合適的人放到合適的位置,最終將事情處理好就行。
4)在自學(xué) iOS 開發(fā)的過程中有什么感觸?
答:那段時(shí)間正好處于 iOS 上升期,對(duì) iOS 開發(fā)人員的需求量比較大,公司又剛好比較缺乏,所以就征詢了我的意見,問我想不想嘗試去做。當(dāng)時(shí)覺得可以給自己多一些鍛煉和學(xué)習(xí)的機(jī)會(huì),就跟著其他同事,從一開始進(jìn)項(xiàng)目組學(xué)習(xí),再自己總結(jié)經(jīng)驗(yàn),到最后可以獨(dú)立完成開發(fā)。
因?yàn)橹安皇菍W(xué)這個(gè)的,對(duì) iOS 沒有很系統(tǒng)的了解,而做 iOS 和做 Java 雖然都是使用面向?qū)ο蟮恼Z(yǔ)言,但它們還是存在著很大的區(qū)別。所以一開始,學(xué)習(xí)對(duì)我來說是個(gè)艱難的過程。
我覺得學(xué)習(xí)貴在堅(jiān)持吧,最開始我將公司整個(gè)系統(tǒng)的代碼看了一遍,對(duì)于里面比較核心的知識(shí)向其他同事請(qǐng)教,平時(shí)也會(huì)去看一些資料,特別是官方的視頻,就這樣一步一步走下來了。再有我發(fā)現(xiàn)從做 Java 后臺(tái)轉(zhuǎn)做 iOS 前臺(tái)開發(fā),跟單獨(dú)做前臺(tái)或者做后臺(tái)的人比,我有自己的優(yōu)勢(shì),既能兼顧到后臺(tái)的需要,也可以滿足前臺(tái)的一些需要。
5 )過程中有遇到很記憶深刻的坑嗎?
答:公司有一個(gè)自己寫的播放器,是在我進(jìn)公司的前兩年寫的,代碼有點(diǎn)老了。那時(shí)候我剛進(jìn)去,剛好之前的同事離職了,只有我一個(gè)人在做 iOS 開發(fā)。當(dāng)時(shí)我對(duì)這個(gè)播放器的原理又不是很了解,只能整天的在那觀察、找各種資料、請(qǐng)教同事,直到大致對(duì)它有所了解。但是在實(shí)際開發(fā)的時(shí)候,又因?yàn)闆]有實(shí)戰(zhàn)經(jīng)驗(yàn),直接閱讀老舊的代碼,導(dǎo)致處理起來比較混亂。幸好,在其他同事的幫助下,最終克服了這個(gè)難關(guān)。
6)說到 iOS 開發(fā),自然會(huì)想到 Swift 語(yǔ)言,對(duì)于這個(gè)語(yǔ)言怎么看?
答:之前有做過一個(gè)項(xiàng)目,使用的就是 Swift 語(yǔ)言,當(dāng)時(shí)也是和初學(xué) iOS 開發(fā)一樣,對(duì) Swift 沒有任何了解。記得那時(shí)候的 Swift 版本和現(xiàn)在的版本差別比較大,迭代很快。Swift 是蘋果官方主推的語(yǔ)言,可能將來在 iOS 開發(fā)上會(huì)被更大范圍的使用。但對(duì)于目前的 iOS 開發(fā)初學(xué)者來說,我覺得還是從 Objective-C 入手會(huì)比較好,因?yàn)樗讓拥囊恍〇|西能相對(duì)更容易被理解。Swift 太像自然的語(yǔ)言,可能最開始沒那么容易讀懂。
7)iOS 開發(fā)技術(shù)更新迭代特別快,每次都會(huì)推出新特性,又需要重新學(xué)習(xí),而且難免也會(huì)隨之出現(xiàn)新的坑,對(duì)此怎么看?
答:我覺得更新很正常,沒有任何一門語(yǔ)言是完美的。更新,往往可以更便于開發(fā),也能給用戶帶來更好的用戶體驗(yàn)。所以,它能更新,就是一件好事。
在推出新特性的時(shí)候,官方都會(huì)發(fā)布相關(guān)的視頻、文檔介紹,以及官方的 API,這是最直接最高效的學(xué)習(xí)途徑。另外,基本上發(fā)布一段時(shí)間后,就會(huì)有網(wǎng)友總結(jié)并發(fā)布自己的經(jīng)驗(yàn),也可以去參考。其實(shí),推出新特性肯定是因?yàn)橛腥藢?duì)此有需要的,至于說新特性剛出來時(shí)并不完美,沒有兼顧到很多人,這個(gè)也能理解,我們需要給它完善的時(shí)間。
8)對(duì)于 iOS 開發(fā)的未來發(fā)展怎么看?
答:從市場(chǎng)占有率來講,Android 的終端比 iOS 的多,但是從高端一點(diǎn)的手機(jī)應(yīng)用端來說,iOS 占比還是比較大的。而且從用戶的體驗(yàn)來說,iOS 比 Android 要好,iOS 的審核機(jī)制也保證了用戶的體驗(yàn)。我相信,沒有用戶會(huì)拒絕為他們著想的平臺(tái)。
從目前來看,iOS 混合開發(fā)的優(yōu)勢(shì)明顯于原生開發(fā),但我覺得不能完全的使用混合開發(fā),應(yīng)該相互結(jié)合。而且我看到它加了一些關(guān)于智能方面的東西,現(xiàn)在這一塊也比較火,可能未來會(huì)往這個(gè)方向有所動(dòng)作和改變。
9)iOS 開發(fā)者除了了解 iOS 知識(shí)外,是否還需要學(xué)習(xí)其他方面的知識(shí)?
答:這個(gè)要從個(gè)人的發(fā)展規(guī)劃來看,我不能因?yàn)樽约鹤鲞^后臺(tái)也做過前臺(tái),就說每個(gè)人都需要去了解前臺(tái)和后臺(tái)的運(yùn)行。但如果是想成為全面型的人才,那應(yīng)該去了解更多的知識(shí)。如果只是想做好 iOS 開發(fā),那我覺得專心深挖也是很好的。當(dāng)然,如果有精力再去學(xué)習(xí)一些東西,自然更好。
10)對(duì)于 iOS 開發(fā)初學(xué)者,有什么建議?
答:首先,需要有一個(gè)學(xué)習(xí)目標(biāo),是基于興趣還是工作需要。如果是工作需要,我覺得可以先對(duì) iOS 的語(yǔ)法進(jìn)行大概的了解,然后可以拿別人開源的代碼進(jìn)行閱讀。如果是出于興趣,建議先系統(tǒng)的學(xué)習(xí)整個(gè)流程,再找出自己具體感興趣的某個(gè)方面,往這方向深入。
11 )對(duì)于正準(zhǔn)備往技術(shù)這條路上前行的女生,有沒有什么建議?
答:首先來說,可能很多剛剛?cè)胄谢蛘呤沁€沒有入行的女生,會(huì)有疑問說:自己是女生,到底適不適合做這個(gè)?其實(shí)我覺得,你們不要想太多,只要是確實(shí)喜歡,覺得這行有發(fā)展,那么就認(rèn)真地來做。在平時(shí)的過程中,不要自己給自己貼標(biāo)簽,不要覺得自己跟男生有什么區(qū)別,大家都是一樣的。別人會(huì)有什么誤解,一笑置之吧。
12 )最后,您眼中的男程序員是什么樣子的?
在我看來,“技術(shù)宅男”是一個(gè)很吸引人的代名詞。站在普通的女生角度來說,能解決一些問題,能和機(jī)器打交道,能寫出高深的代碼,能做出一些我們平時(shí)使用的應(yīng)用、網(wǎng)頁(yè),都是很酷的。
來源:開源中國(guó)
發(fā)布時(shí)間:2016-11-07 16:39:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
這樣子的,我們公司面向的客戶是開發(fā)公司,用戶基于我們提供的源碼進(jìn)行二次開發(fā)。簡(jiǎn)單的說就是賣源碼的。所以想問問,一般的開發(fā)公司對(duì)這兩個(gè)是咋看的,給點(diǎn)意見。謝啦。
來源:開源中國(guó)
發(fā)布時(shí)間:2015-09-10 17:09:00
只看到 pending review --> reject,沒有 reject 的任何信息。舊版、新版界面都找了。哪里能看反饋信息? 很早以前會(huì)有 reject 原因的郵件,現(xiàn)在也沒了。。。
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:01:30
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
小編語(yǔ)
本文為 DevLink 專訪系列,本期采訪嘉賓是 iDev 蘋果開發(fā)者大會(huì) RxSwift 講師——靛青K。在即將到來的 iDev 大會(huì)上,他將為大家講述為何仍然應(yīng)當(dāng)考慮使用 RxSwift 處理各種異步問題。
以下為采訪內(nèi)容,提問者:DevLink,受訪者:靛青K。
1 、小青你好,能否簡(jiǎn)單的介紹一下你自己?
Swift 開發(fā)者,目前在 ENJOY 進(jìn)行相關(guān)產(chǎn)品的開發(fā),最近在寫一本關(guān)于 iOS 響應(yīng)式相關(guān)的書籍(當(dāng)然是基于 RxSwift 了),目前也在學(xué)習(xí)寫其他技術(shù)棧的 Hello World 。
2 、作為一名 iOS 開發(fā)者,同時(shí)也是 SwiftGG 的成員,您的微博里面多數(shù)內(nèi)容都是有關(guān) Swift 的,能否說說您如何看待 Swift 這個(gè)新生的開發(fā)語(yǔ)言?與 Objective-C 相比,它的優(yōu)勢(shì)在哪里?
Swift 的前景非常好,畢竟它是“剽竊”了各大現(xiàn)代語(yǔ)言的優(yōu)勢(shì),相比 Objective-C 具有 Optional 、protocol 等優(yōu)勢(shì),但我個(gè)人最喜歡的是帶有關(guān)聯(lián)值的 enum ,這樣的 enum 極大的提高了代碼的可讀性。
3 、您本次的分享主題是關(guān)于 RxSwift 和響應(yīng)式編程的,能否給大家劇透一下為什么會(huì)選擇這樣的分享主題,主要的分享重點(diǎn)會(huì)在哪里?
我們可能經(jīng)常聽到用 RxSwift 處理異步是多么多么的優(yōu)雅,特別是鏈?zhǔn)教幚懋惒降幕卣{(diào)。但我在實(shí)際開發(fā)中,發(fā)現(xiàn)它有更多可玩性,使用 RxSwift 遠(yuǎn)不只是單純的處理異步,它可以幫助我們優(yōu)雅的處理各種復(fù)雜的邏輯。我希望能以這樣的一種分享,大家可以看到 RxSwift 更強(qiáng)大的一面。換句話說,本次分享會(huì)從不同的角度實(shí)踐,帶來更多頭腦風(fēng)暴,誘惑大家先用起來。
4 、現(xiàn)在很多公司大部分還是使用 Objective-C , 作為開發(fā)者自身而言,如果要引入響應(yīng)式編程,那么是用 ReactiveCocoa 呢? 還是 RxSwift ?
對(duì)于使用 Objective-C 團(tuán)隊(duì),我的建議是使用 ReactiveCocoa 2.x 版本。當(dāng)然如果會(huì)有新項(xiàng)目,我建議使用 Swift 3 開發(fā),引入響應(yīng)式編程我更推薦 RxSwift ,相比 ReactiveCocoa 的使用會(huì)更優(yōu)雅一些,同時(shí)還有很多 ReactiveX 的相關(guān)參考。這里更正一個(gè)大多文章提到了 RxSwift 對(duì)于 Cocoa 的支持不好的事情,事實(shí)上在 iOS 和 macOS 開發(fā)都是需要再引入 RxCocoa 的這個(gè)庫(kù)的,這是特別為 Cocoa 做的響應(yīng)式支持的框架。
響應(yīng)式的實(shí)踐,我更建議先在一些 demo 或者較小的項(xiàng)目中應(yīng)用起來,在積累了一定經(jīng)驗(yàn)后,再應(yīng)用到更大的項(xiàng)目中。不熟悉的技術(shù)應(yīng)用到實(shí)際工程中,還是比較坑的。但這不影響我們學(xué)習(xí)新的技術(shù),在覺得可以用到工程時(shí),那么用起來一定是最好的。
5 、跟我們講講 SwiftGG 翻譯組的故事吧?
SwiftGG 已經(jīng)成立一年多了!起源是,梁杰帶領(lǐng)大家翻譯完 Swift 2.0 的官方文檔,翻譯文檔就結(jié)束了有些可惜,于是成立了翻譯組,為大家?guī)砀鄧?guó)外優(yōu)秀的博客翻譯。目前已經(jīng)完成了 330 余篇文章的翻譯。年初進(jìn)行了很多討論,決定開展線下 T 沙龍以更好的促進(jìn)技術(shù)交流。
6 、我們知道 SwiftGG 翻譯了很多優(yōu)質(zhì)的海外開發(fā)資源,未來 SwiftGG 的方向是什么?
我們?nèi)匀皇且苑g文章為主,未來將和國(guó)外更多優(yōu)秀的博主談授權(quán),為大家?guī)砀嗑实奈恼?。同時(shí)我們現(xiàn)在在進(jìn)行一些文檔、書籍的翻譯工作,目前在進(jìn)行的是將 JSPatch 和 Element 文檔翻譯成英文、翻譯一本 iOS 安全方面的書籍(即將出版)。
目前在進(jìn)行線下 T 沙龍的實(shí)踐,未來我們想做更多有意思的事情,比如開展 Android 、Web 等方面的沙龍。記得喵神(onevcat)和我說的一句話是:“國(guó)內(nèi)的演講相比國(guó)外差距還是很大”,我們希望通過沙龍可以提高大家的分享、交流、演講水平,把我們的演講推薦到國(guó)內(nèi)、國(guó)外各種大會(huì)中。
7、 對(duì)身處蘋果生態(tài)鏈的一線開發(fā)者有什么要說的么?
我不算是一個(gè)老司機(jī),但對(duì)于一線開發(fā)者們,我想表達(dá)的是:
多向前端學(xué)習(xí) 時(shí)刻要追求新的技術(shù),找到自己感興趣的點(diǎn),并研究下去 對(duì)于任何一個(gè)方向的學(xué)習(xí),我們都應(yīng)當(dāng)注意深度和廣度的發(fā)展 要將基礎(chǔ)打扎實(shí) 盡可能地多交流 最重要的,不斷的追求極致。
本篇文章僅代表嘉賓個(gè)人觀點(diǎn)
iDev 開發(fā)者大會(huì),將于2016.11.5-6 在北京國(guó)際會(huì)議中心舉辦,是一場(chǎng)千人規(guī)模的蘋果開發(fā)者技術(shù)盛宴。
每天忙于完成 coding ?無暇顧及最新的技術(shù)趨勢(shì)?老板要求穩(wěn)定壓倒一切,無心實(shí)踐新的開發(fā)工具?這恐怕是每位開發(fā)者都會(huì)遇到生存 V.S. 成長(zhǎng)的難題。
iDev 開發(fā)者大會(huì)就來為大家解決這個(gè)問題,不僅講實(shí)際開發(fā),還有新的開發(fā)思想、開發(fā)工具的普及和深入實(shí)踐分享。從 Swift 到 函數(shù)式編程,從動(dòng)態(tài)化到 hybrid ,從實(shí)際開發(fā)到測(cè)試管理,都安排了諸多環(huán)節(jié)來幫助大家“抬頭看路”。
無論是 iOS、Mac OS 還是最近火熱的智能硬件和 HomeKit,亦或是對(duì)OS X內(nèi)核的探索,都會(huì)有相關(guān)的分享環(huán)節(jié),無論你是移動(dòng)開發(fā)者,還是桌面端開發(fā)者,或者正在IoT領(lǐng)域探索的技術(shù)人員,都會(huì)在本次大會(huì)中找到適合你的話題。
本周是 8 折優(yōu)惠的最后一周,小伙伴們報(bào)名請(qǐng)抓緊。如果三位小伙伴一起來,還可以每個(gè)人都有 50元 的額外減免。
大會(huì)的詳細(xì)信息請(qǐng)見:http://idev2016.devlink.cn/
來源:開源中國(guó)
發(fā)布時(shí)間:2016-10-19 14:41:00
在數(shù)組中找到第 k 大的元素。(你可以交換數(shù)組中的元素的位置)
點(diǎn)此在線做題
樣例 1: 輸入: n = 1, nums = [1,3,4,2] 輸出: 4
樣例 2: 輸入: n = 3, nums = [9,3,2,4,8] 輸出: 4
[題解]
算法:快速選擇算法
最容易想到的就是直接排序,返回第 k 大的值。時(shí)間復(fù)雜度是 O(nlogn),這里提供 O(n)的解法。
這題其實(shí)是快速排序算法的變體,在 九章算法班 中也有詳細(xì)講解。通過快速排序算法的 partition 步驟,可以將小于 pivot 的值劃分到 pivot 左邊,大于 pivot 的值劃分到 pivot 右邊,所以可以直接得到 pivot 的 rank 。從而縮小范圍繼續(xù)找第 k 大的值。
partition 步驟: 令 left = start,right = end,pivot = nums[left]。 當(dāng) nums[left] < pivot 時(shí),left 指針向右移動(dòng)。 當(dāng) nums[right] > pivot 時(shí),right 指針向左移動(dòng)。 交換兩個(gè)位置的值,right 指針左移,left 指針右移。 直到兩指針相遇,否則回到第 2 步。 每次 partition 后根據(jù) pivot 的位置,尋找下一個(gè)搜索的范圍。
復(fù)雜度分析
設(shè)數(shù)組長(zhǎng)度為 n
時(shí)間復(fù)雜度 O(n) 對(duì)一個(gè)數(shù)組進(jìn)行 partition 的時(shí)間復(fù)雜度為 O(n)。 分治,選擇一邊繼續(xù)進(jìn)行 partition 。 所以總的復(fù)雜度為 T(n) = T(n / 2) + O(n),總時(shí)間復(fù)雜度依然為 O(n)。
空間復(fù)雜度 O(1)
只需要快速選擇游標(biāo)的 O(1)額外空間。 public class Solution { /** * @param n: An integer * @param nums: An array * @return: the Kth largest element */ public int kthLargestElement(int k, int[] nums) { int n = nums.length; // 為了方便編寫代碼,這里將第 k 大轉(zhuǎn)換成第 k 小問題。 k = n - k; return partition(nums, 0, n - 1, k); } public int partition(int[] nums, int start, int end, int k) { int left = start, right = end; int pivot = nums[left]; while (left <= right) { while (left <= right && nums[left] < pivot) { left++; } while (left <= right && nums[right] > pivot) { right--; } if (left <= right) { swap(nums, left, right); left++; right--; } } // 如果第 k 小在右側(cè),搜索右邊的范圍,否則搜索左側(cè)。 if (k <= right) { return partition(nums, start, right, k); } if (k >= left) { return partition(nums, left, end, k); } return nums[k]; } public void swap(int[] nums, int x, int y) { int temp = nums[x]; nums[x] = nums[y]; nums[y] = temp; } }
更多題解參見
評(píng)論區(qū)可領(lǐng)取 LintCode 7 天 VIP ,輸入優(yōu)惠碼 9C06EB 即可領(lǐng)取
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:01:22
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
小編語(yǔ)
本文為 DevLink 專訪系列,本期采訪嘉賓是 iDev 蘋果開發(fā)者大會(huì) iOS 逆向工程講師——沙梓社。在即將到來的 iDev 大會(huì)上,他將和大家分享對(duì)逆向工程的理解,以此激發(fā)大家的思路和靈感。
《 iOS 應(yīng)用逆向工程》第一作者——沙梓社是 iOS 越獄社區(qū)骨灰級(jí)活躍份子,對(duì)技術(shù)有著狂熱的追求。非典型技術(shù)男。做事標(biāo)準(zhǔn)較高,喜歡歸納總結(jié),推崇深度思考,樂于討論分享??释Y(jié)識(shí)優(yōu)秀人才,督促自己不斷成長(zhǎng)。
而這次 iDev 大會(huì)組委會(huì)特別有請(qǐng)到了他來作為嘉賓,希望他能在蘋果的開發(fā)者大會(huì)上,分享一些他多年的專業(yè)知識(shí)。 這次他為我們帶來的議題題目為《 iOS 逆向工程一隅》。
什么是逆向工程?
它能解決什么正向開發(fā)所解決不了的問題?
很多 3 年經(jīng)驗(yàn)的 iOS 工程師都已碰到技能提升瓶頸,我們應(yīng)該如何用 iOS 逆向工程來武裝自己,打破 App 開發(fā)的“ 3 年之癢”?
以下為采訪內(nèi)容,提問者:DevLink,受訪者:沙梓社。
1、 沙老師您好,能否簡(jiǎn)單的介紹一下你自己?
大家好,我是沙梓社,“老師”還不敢當(dāng),以我目前的狀態(tài)來說,無論是在做人還是做事上,我都還是一枚普通的學(xué)生,哈哈。
我是一個(gè)非典型的技術(shù)男、理工男。我在讀碩士時(shí)“僥幸”踏上了 iOS 逆向工程這條“賊船”,之后就再也沒有下來過;我出過書,創(chuàng)過業(yè),做得越多,見識(shí)越廣,對(duì)“人外有人,山外有山”的感受就越深,雖然我自認(rèn)為是一個(gè)比較有上進(jìn)心的人,但隨著年齡的增長(zhǎng)和經(jīng)歷的豐富,我慢慢褪去了年輕氣盛的浮躁,逐漸生出了心平氣和的淡定。
2、 您關(guān)注的領(lǐng)域在大家看來,與普通開發(fā)者會(huì)有一些差異,您關(guān)注的更多是 iOS 在代碼安全領(lǐng)域的事情,而不是具體的開發(fā)實(shí)現(xiàn)。能否介紹下為什么比較關(guān)注這個(gè)領(lǐng)域么?
其實(shí)這里存在一些普遍的誤解,就是 iOS 逆向工程主要服務(wù)于 iOS 安全;但事實(shí)并非如此。iOS 逆向工程是一個(gè)工具,iOS 安全只是這個(gè)工具的應(yīng)用場(chǎng)合之一,而我的興趣點(diǎn)其實(shí)并不在這個(gè)應(yīng)用場(chǎng)合;我關(guān)注更多的是如何運(yùn)用逆向工程技術(shù)來改進(jìn)自己的代碼,如何運(yùn)用逆向工程思維來優(yōu)化自己的產(chǎn)品。這是一種打破思維定勢(shì)的思考和辦事方法論,也就是蘋果所提倡的“非同凡想( Think Different )”。
其實(shí)對(duì)這個(gè)領(lǐng)域的關(guān)注,更多地要?dú)w功于我的碩士生導(dǎo)師。計(jì)算機(jī)碩士畢業(yè),一般需要在畢業(yè)設(shè)計(jì)中體現(xiàn)一些“研究成果”,而在 5 年前,iOS 開發(fā)還停留在初、中級(jí)階段,絕大多數(shù)功能只需要對(duì)著文檔擼代碼就可以了,沒有什么“研究”可言;這樣我的碩士是無法畢業(yè)的?;谶@個(gè)最主要的原因,結(jié)合蘋果較為“封閉”的特點(diǎn),我的導(dǎo)師建議我選擇“研究”性質(zhì)相對(duì)較強(qiáng)的逆向工程,做一些技術(shù)門檻相對(duì)正向開發(fā)更高的事情,來順利畢業(yè)。
后來,我在摸索中深深感受到了逆向工程的巨大魅力,從此一發(fā)不可收拾。誰能想到,本來只是為了碩士畢業(yè)的選擇,竟然對(duì)我的人生產(chǎn)生了如此深遠(yuǎn)的影響。真是——緣,妙不可言~
3、 您這次分享的主題是關(guān)于 iOS 逆向工程的,能否跟大家“劇透”一下要講些什么?
剛才提到,正向開發(fā)沒有太多“研究”可言,而這也是絕大多數(shù) iOS 工程正在面臨的“三年之癢”——很多擁有三年 App 開發(fā)經(jīng)驗(yàn)的 iOS 工程師,遇到了技術(shù)提高瓶頸,職業(yè)規(guī)劃貌似也碰到了天花板。在我看來,這是比技術(shù)問題更值得深入探討的話題,它的難點(diǎn)在于,沒有標(biāo)準(zhǔn)答案,解決方案又因人而異。
我這次的分享不會(huì)過多涉及技術(shù)細(xì)節(jié),這些瑣碎的東西可以在我建立的諸如 QQ 群、論壇等渠道私下交流;主要想討論的,是我對(duì)逆向工程的理解,和它所能夠解決的一些問題,希望以此為契機(jī),激發(fā)大家的思路和靈感。在我創(chuàng)業(yè)的一年半載中,我觀察到,絕大多數(shù)的 IT 工程師是“兩耳不聞窗外事,一心只寫圣賢碼”的,且不以為“恥”,反以為榮。私以為,這樣的思維方式,在提高專業(yè)技術(shù)上是我們的絕對(duì)優(yōu)勢(shì),但在培養(yǎng)綜合能力上則是我們的巨大短板。
在這次會(huì)議中,我希望能夠通過從形式到內(nèi)容上的不同,來帶給與會(huì)的朋友們一些“沖擊”,激發(fā)他們的思考。
4、 作為越獄社區(qū)的活躍者,您如何看待 iOS 越獄這件事?有人說,隨著 iOS系統(tǒng)的進(jìn)步,普通用戶對(duì)越獄的需求變得少了,您是怎么看待這個(gè)問題的?
我是越獄的堅(jiān)定擁護(hù)者;我的所有 iOS 設(shè)備,只要能越獄,一定會(huì)越獄,因?yàn)槲倚枰獙?shí)現(xiàn)很多不越獄所實(shí)現(xiàn)不了的功能,比如 定制第三方推送的提示音 ( t.cn/RtiZ7vD ) 。
蘋果在防范越獄上采用了非常高明的招數(shù)——它不是生硬地通過法律或其他手段來阻止黑客繼續(xù)越獄,而是“偷走”了越獄社區(qū)里無窮無盡的奇思妙想。例如,現(xiàn)在的 banner 式推送通知,靈感來源于 Peter Hajas 開發(fā)的 MobileNotifier ;現(xiàn)在的 control center,靈感來源于 BigBoss 開發(fā)的SBSettings;現(xiàn)在的 night shift ,靈感來源于 f.lux 。
大多數(shù)普通果粉感興趣的并不是越獄本身,而是越獄之后他們能干很多不越獄干不了的事。現(xiàn)在蘋果把大多數(shù)果粉越獄后最想干的事情,給搬到了原版 iOS 中,很多果粉就沒有再越獄的理由了。沒有了群眾基礎(chǔ),國(guó)外的大多數(shù)越獄玩家也就喪失了研究越獄的動(dòng)力,由盤古等國(guó)內(nèi)團(tuán)隊(duì)接棒了。雖然我是越獄社區(qū)的一員,但我認(rèn)為,越獄的黃金時(shí)代已經(jīng)過去,我們社區(qū)的活躍程度也大不如前了。但好消息是,幾乎所有老玩家,都還奮斗在一線,尋找下一個(gè)“監(jiān)獄”,哈哈。
5、 除了《 iOS 應(yīng)用逆向工程》這本書以外,您接下來有沒有其他的寫作計(jì)劃,能否透露一下?
我暫時(shí)沒有其他的寫作計(jì)劃了;很多朋友問我是否會(huì)出版《 iOS 應(yīng)用逆向工程》的第 3 版,我的答案是否定的,因?yàn)殡m然 iOS 在不斷更新?lián)Q代,盡管實(shí)現(xiàn)細(xì)節(jié)會(huì)略有差異,但 iOS 逆向工程最最核心的思路卻一直沒有變化,書中所介紹的思維方式和方法論適用于所有 iOS 版本。在這種情況下,我不想換湯不換藥地為了出書而出書,那意義就不大了。
前陣子,機(jī)械工業(yè)出版社的編輯朋友問我,有沒有打算把我的創(chuàng)業(yè)文章整理出版;因?yàn)榭偣惨矝]寫多少東西,而且都是粗淺的理解,還遠(yuǎn)遠(yuǎn)夠不上出書的水平,所以后來我抱歉地拒絕了。
6、 我們知道,前段時(shí)間您剛剛結(jié)束了一個(gè)為期 18 個(gè)月的創(chuàng)業(yè),并把創(chuàng)業(yè)經(jīng)歷寫成了文章與大家分享,對(duì)于技術(shù)人員創(chuàng)業(yè),您有什么建議給大家么?
我花了整整一個(gè)月的時(shí)間,專心去寫 這十篇文章 ( t.cn/R5em4LU ),它們既是一次分享,又是一次總結(jié);我所有的建議都已經(jīng)毫無保留地體現(xiàn)在文章里了。
如果是對(duì)技術(shù)人員創(chuàng)業(yè),我的建議就是不要把自己當(dāng)成技術(shù)人員。隨著閱歷的豐富,我對(duì)這一事實(shí)的感受越來越明顯:每個(gè)人都是獨(dú)一無二的,不要被別人和自己貼的各種標(biāo)簽給束縛了手腳,限制了自己;大膽去做。
7、 對(duì)身處蘋果生態(tài)鏈的一線開發(fā)者有什么要說的么?
在今年的 5 月,我有幸作為 PHP 之父 Rasmus 的貼身翻譯,全程參與了你們主辦的 PHP 全球開發(fā)者大會(huì);對(duì)大會(huì)的評(píng)價(jià),大家的反響都出奇地高。其中,我認(rèn)為最能洞悉參會(huì)意義的,是知乎上的“ trylife ”,他說:
我去參加參加大會(huì)的動(dòng)機(jī)是沐浴大神的氣息,特別是父與鳥哥的氣息。氣息這種事情很虛,遠(yuǎn)比“ PHP7 為什么這么快”虛無縹緲難以捉摸,但是影響深遠(yuǎn),一旦捕獲受益終生。
這種事情很難線上體驗(yàn),會(huì)有很多缺失。但是其他的如分享的內(nèi)容,你總是可以免費(fèi)得到的,無非就是晚一點(diǎn)。找基友也有群,也不用太靦腆。
這也是我想對(duì)參會(huì)的各位朋友所表述的。
對(duì)于無法到場(chǎng)參會(huì)的朋友,我想說的是,在職場(chǎng)中,我們每個(gè)人的價(jià)值,不是“我會(huì)什么”,而是“我能為我的用戶、客戶、領(lǐng)導(dǎo)、上司、老板、公司解決什么樣的問題”。這句話跟張小龍說過的“用完即走”一樣,字面意思極其淺顯,但希望大家有一天能領(lǐng)悟到它的深層含義。
謝謝!
本篇文章僅代表嘉賓個(gè)人觀點(diǎn)
大會(huì)的詳細(xì)信息請(qǐng)見:http://idev2016.devlink.cn/
來源:開源中國(guó)
發(fā)布時(shí)間:2016-10-21 14:46:00
對(duì)于一個(gè)給定的 source 字符串和一個(gè) target 字符串,你應(yīng)該在 source 字符串中找出 target 字符串出現(xiàn)的第一個(gè)位置(從 0 開始)。如果不存在,則返回 -1 。
說明
在面試中我是否需要實(shí)現(xiàn) KMP 算法? 不需要,當(dāng)這種問題出現(xiàn)在面試中時(shí),面試官很可能只是想要測(cè)試一下你的基礎(chǔ)應(yīng)用能力。當(dāng)然你需要先跟面試官確認(rèn)清楚要怎么實(shí)現(xiàn)這個(gè)題。 《九章算法班》中講過比 KMP 更簡(jiǎn)單的算法:Rabin-karp 算法
在線做題地址
樣例 1: 輸入: source = "source" ,target = "target" 輸出:-1 樣例解釋: 如果 source 里沒有包含 target 的內(nèi)容,返回-1
樣例 2: 輸入: source = "abcdabcdefg" ,target = "bcd" 輸出: 1 樣例解釋: 如果 source 里包含 target 的內(nèi)容,返回 target 在 source 里第一次出現(xiàn)的位置
[題解]
算法:模擬
算法思路
因?yàn)楸绢}的時(shí)間復(fù)雜度比較寬限,不需要更為復(fù)雜的 KMP 算法,可以直接模擬,逐一比對(duì)每個(gè)字符。
代碼思路 先進(jìn)行特判,若 target 長(zhǎng)度為 0,則返回 0 ;若 target 的長(zhǎng)度大于 source,則表示不可能匹配,返回-1 枚舉匹配 source 的起始位置,從 0 到 sourceLen-targetLen 對(duì)于一個(gè)起始位置,比對(duì)之后的 targetLen 位是否相同,若遇到不相同直接退出判斷,嘗試下一個(gè)起始位置 當(dāng)成功比對(duì)完 targetLen 位后,說明全部相同,則返回起始位置
復(fù)雜度分析
M 表示 source 的長(zhǎng)度 N 表示 target 的長(zhǎng)度 空間復(fù)雜度:O(M+N) 時(shí)間復(fù)雜度:O(MN) public class Solution { /** * @param source: * @param target: * @return: return the index */ public int strStr(String source, String target) { //獲取兩個(gè)字符串的長(zhǎng)度 int sourceLen = source.length(); int targetLen = target.length(); //注意特判,若 target 長(zhǎng)度為 0 則答案為 0 if(targetLen == 0){ return 0; } //若 target 長(zhǎng)度大于 source,則不可能匹配 if(targetLen > sourceLen){ return -1; } for(int i = 0; i < sourceLen-targetLen+1; i++){ //k 表示比對(duì)時(shí) source 中所指向的字符 int k = i; for(int j = 0; j < targetLen; j++){ if(source.charAt(k) == target.charAt(j)){ //最后一個(gè)字符匹配完成,輸出答案 if(j == targetLen - 1){ return i; } k++; } //其中一個(gè)字符無法匹配,直接退出做下一次循環(huán) else{ break; } } } return -1; } }
更多題解參見
評(píng)論區(qū)可領(lǐng)取 LintCode 7 天 VIP
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:01:13
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
xcode+swift感覺比較卡,尤其是自動(dòng)提示的時(shí)候,感覺打字都有延遲了,大家有同感么?
網(wǎng)上搜了一下,好像抱怨的人還不好,大家有什么解決方法么?
來源:開源中國(guó)
發(fā)布時(shí)間:2016-09-25 16:04:00
在 n 個(gè)物品中挑選若干物品裝入背包,最多能裝多滿?假設(shè)背包的大小為 m,每個(gè)物品的大小為 A[i]。 你不可以將物品進(jìn)行切割。
點(diǎn)此在線做題
樣例 1: 輸入: [3,4,8,5], backpack size=10 輸出: 9
樣例 2: 輸入: [2,3,5,7], backpack size=12 輸出: 12
算法:DP
從已知的題目中,可以總結(jié)出以下兩點(diǎn): 每件物品只有一種 每件物品最多選擇一次 那么考慮對(duì)于前 i 件的物品在容量為 w 的背包下,最大的裝載量是多少,由此可以總結(jié)出對(duì)應(yīng)的子結(jié)構(gòu),進(jìn)行動(dòng)態(tài)規(guī)劃。
算法思路
設(shè)計(jì) dp 數(shù)組 dp[n][m],用 dp[i][j]表示第 i 個(gè)物品在容量為 j 的背包下,最大的裝載量。
在這個(gè)問題中,若只考慮第 i 件物品的策略(放或不放),那么就可以轉(zhuǎn)化為一個(gè)只牽扯前 i?1 件物品的問題: 如果不放第 i 件物品,可得 dp[i][j]=dp[i?1][j] 如果放了第 i 件物品,可得 dp[i][j]=dp[i?1][j?A[i]]+A i 總結(jié)狀態(tài)轉(zhuǎn)義方程為:dp[i][j]=max(dp[i?1][j],dp[i?1][j?A[i]]+A[i])
復(fù)雜度分析
n 表示物品件數(shù),m 表示背包容量 時(shí)間復(fù)雜度:O(nm) 空間復(fù)雜度:O(nm)
算法優(yōu)化觀察上方的狀態(tài)轉(zhuǎn)義方程,可以發(fā)現(xiàn) dp[i][j]方程的兩個(gè)狀態(tài)都只和 dp[i-1]有關(guān),顯然通過 O(nm)的空間復(fù)雜度,難免會(huì)浪費(fèi)一些空間。
可以考慮使用滾動(dòng)數(shù)組優(yōu)化,建立 dp 數(shù)組 dp[m],使用 dp[j-A[i]]代替 dp[i-1][j-A[i]]。優(yōu)化后狀態(tài)轉(zhuǎn)義方程為 dp[j]=max(dp[j],dp[j?A[i]]+A[i])
優(yōu)化后復(fù)雜度分析
時(shí)間復(fù)雜度:O(nm) 空間復(fù)雜度:O(m)
代碼思路分析
建立數(shù)組 dp[m]表示背包容量為 m 的情況下,最大的裝載量 初始化 dp[0]=0 正序枚舉 A[i],并倒敘枚舉 j,這樣所需要的 dp[j-A[i]]不會(huì)被提前更新 最后返回 dp[m],表示背包容量在 m 下的答案 public class Solution { /** * @param m: An integer m denotes the size of a backpack * @param A: Given n items with size A[i] * @return: The maximum size */ public int backPack(int m, int[] A) { // write your code here // 如果背包容量或者物品數(shù)量為 0,則直接返回 if (A.length == 0 || m == 0) { return 0; } int n = A.length; int[] dp = new int[m + 1]; for (int i = 0; i < n; i++) { // 滾動(dòng)數(shù)組優(yōu)化 倒序枚舉 j for (int j = m; j >= A[i]; j--) { dp[j] = Integer.max(dp[j], dp[j - A[i]] + A[i]); } } return dp[m]; } }
點(diǎn)此獲取更多大廠面試動(dòng)態(tài)規(guī)劃題解
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:00:57
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>> swift label的寬度和高度都固定,現(xiàn)在要用自定義的字體內(nèi)容如何填滿這個(gè)label
來源:開源中國(guó)
發(fā)布時(shí)間:2016-10-07 13:00:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
看了這篇文章:Swift中使用JSON(譯) http://www.jianshu.com/p/2224b801722a
覺得swift處理Json好麻煩啊。。。除了使用原始的JSONSerialization,大家還用什么方法或者第三方庫(kù)來解析json?
swift有沒有像Java中的fastJson或者Gson這種級(jí)別的庫(kù)呢?
來源:開源中國(guó)
發(fā)布時(shí)間:2016-09-22 11:55:00
全文地址https://zhuanlan.zhihu.com/p/195059458 在<使用 redis 實(shí)現(xiàn) 5 萬人同服的'相位技術(shù)'>中我介紹了基于九宮格和相位技術(shù)的空間管理技術(shù)。這里我們也要借鑒游戲服務(wù)器中“服務(wù)”的概念。可能有些同學(xué)沒有接觸過游戲服務(wù)器,對(duì)服務(wù)的概念不是很熟悉。服務(wù)可以看做是一個(gè)獨(dú)立的線程環(huán)境。這個(gè)線程監(jiān)聽著一個(gè)消息隊(duì)列。其它的服務(wù)可以發(fā)送消息給他。這種方式在服務(wù)器開發(fā)中的 go 語(yǔ)言,erlang 語(yǔ)言,skynet 框架中被廣泛應(yīng)用。消息隊(duì)列保證了服務(wù)所創(chuàng)建的數(shù)據(jù)是私有并且多線程安全的,只能通過消息通訊的方式進(jìn)行修改。服務(wù)的概念為多線程下使用數(shù)據(jù)的安全問題提供了保護(hù)。通過消息通訊建立了在多線程下的秩序。但這種方式在客戶端使用的并不多。各種服務(wù)的框架也都是在服務(wù)器端使用的多。 客戶端使用多線程開發(fā)管理 1 萬多個(gè)線程將會(huì)是一場(chǎng)噩夢(mèng)。而管理 1 萬多個(gè)服務(wù)對(duì)技術(shù)水平要求也還是比較高的。針對(duì)客戶端沒有多線程的服務(wù)框架問題,我開發(fā)了 pelagia 框架。借用“服務(wù)”的概念來管理客戶端多線程。通過內(nèi)嵌 kv 數(shù)據(jù)庫(kù)和預(yù)判以及服務(wù)私有數(shù)據(jù)的概念徹底消滅多線程死鎖和依賴的問題。因?yàn)橹挥薪鉀Q多線程的安全問題。才能進(jìn)一步思考如何優(yōu)化通信和計(jì)算以及存儲(chǔ)的平衡問題。安全問題不解決所有的優(yōu)化問題就會(huì)是空中樓閣。 全文地址 https://zhuanlan.zhihu.com/p/195059458
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:00:46
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
Swift的構(gòu)造函數(shù)為什么需要設(shè)計(jì)指定構(gòu)造函數(shù),便利構(gòu)造函數(shù), 構(gòu)造函數(shù)的繼承, 這些概念?而且Swift很看重中幾個(gè)概念,還有專門的關(guān)鍵字override和convenience來修飾,這種設(shè)計(jì)有什么好處?能處理什么問題?和Java中的傳統(tǒng)設(shè)計(jì),其先進(jìn)的地方在哪里?
來源:開源中國(guó)
發(fā)布時(shí)間:2016-09-20 22:20:00
喲西, 事情大概是這樣子的, 姐們我最近接了一個(gè)技術(shù) Leader 的位子, 項(xiàng)目需求增多(今年能有大量的項(xiàng)目不簡(jiǎn)單吶) UE4 方向項(xiàng)目技術(shù)過硬,能上天入地的(上能對(duì)接需求,解決技術(shù)難題,下能快速搭建 UE4 團(tuán)隊(duì)) 自己的人好辦事嘛~~~ -------------猜到我是誰的請(qǐng)閉嘴的分割線--------------------- 大概需要這樣一些小伙伴: UE4 C++/JS/GIS 開源引擎 /大數(shù)據(jù)可視化經(jīng)驗(yàn) / UE4 程序 /美術(shù) /視覺設(shè)計(jì)師,BIM, SKETCHUP, REVIT, Lumion, City Engine, UE 4 動(dòng)畫特效??哟蟾庞惺畮讉€(gè)。 -------------恰飯的分割線--------------------------------- 由于姐們我已經(jīng)在坑里了, 所以可以跟大家來說一下恰飯的事情. 新行業(yè), 很好玩,高科技, 待遇我看了下普遍能 open,看能力, 大小周, 自由文化,加班看項(xiàng)目情況 -------------要求的分割線--------------------------------- 要求是這樣的: 希望你的日常主力計(jì)算機(jī)環(huán)境(除了打游戲的時(shí)候)是 UE4 等相關(guān)崗位, 會(huì)寫并且喜歡 C++, 藍(lán)圖等相關(guān)崗位技術(shù), 在工作之外喜歡寫點(diǎn)小東西,不必是基礎(chǔ)框架或很牛的東西,普通應(yīng)用即可,主要是要有那個(gè)習(xí)慣和興趣. 足夠聰明, 工作年限最好有 2-3 年,能獨(dú)立做項(xiàng)目,優(yōu)秀應(yīng)屆生或者實(shí)習(xí)生都?xì)g迎.
面試都是技術(shù)大佬,主要看作品,覺得作品和能力夠好使就來試試.
聯(lián)系方式這里:13726204100 (微信同號(hào))
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:00:36
背景: 我們的引擎是 Egret,使用的是原生的 EUI,轉(zhuǎn)微信小游戲; 工程第一版出來后使用 PerfDog 測(cè)試一波數(shù)據(jù)。結(jié)果發(fā)現(xiàn)很多問題,本文主要分兩部分
第一部分主要介紹通過 PerfDog 發(fā)現(xiàn)問題, 第二部分主要介紹通過 PerfDog 的數(shù)據(jù)定位并解決問題。 PerfDog 具體操作可以看文檔 PerfDog 使用說明
第一部分————數(shù)據(jù)分析 本次的案例多見于游戲第一版時(shí)的情況,比較常見,所以拿出來做個(gè)分析。 這里強(qiáng)調(diào)一點(diǎn)。分析問題需要整體數(shù)據(jù)聯(lián)動(dòng)分析,單獨(dú)看某單一信息是沒是意義的
第一次測(cè)試數(shù)據(jù) FPS: https://imgchr.com/i/dcUgKS 內(nèi)存: https://imgchr.com/i/dcU2Dg CPU: https://imgchr.com/i/dcURbQ 結(jié)論:
1.我們發(fā)現(xiàn)在戰(zhàn)斗時(shí) FPS 波動(dòng)較大 2.內(nèi)存呈現(xiàn)持續(xù)上升的趨勢(shì) 3.CPU 的 APP Usage 太小,僅占 1%左右
首先針對(duì)問題 3 的說明: 我之前選擇測(cè)試的是微信 app,而小游戲是作為子進(jìn)程而存在的,所以應(yīng)該選擇 PerfDog 的子進(jìn)程進(jìn)行測(cè)試,這樣得到的數(shù)據(jù)會(huì)更加的精準(zhǔn);下圖的深色進(jìn)程表示正在運(yùn)行的頂層進(jìn)程
針對(duì)這種多進(jìn)程的應(yīng)用測(cè)試:
iOS 平臺(tái),APP 多進(jìn)程分為 APP Extension 和系統(tǒng) XPC Server 。 比如:某電競(jìng)直播軟件用到 APP Extension 擴(kuò)展進(jìn)程(擴(kuò)展進(jìn)程名 LABroadcastUpload)。當(dāng)然也可能用到系統(tǒng) XPC Server 服務(wù)進(jìn)程,如一般 web 瀏覽器會(huì)用到 webkit 。
Android 平臺(tái),一般大型 APP,比如游戲有時(shí)候是多進(jìn)程協(xié)作運(yùn)行(微信小游戲,微視等 APP 及王者榮耀等游戲多子進(jìn)程),可選擇目標(biāo)子進(jìn)程進(jìn)行針對(duì)性測(cè)試。默認(rèn)是主進(jìn)程。如圖王者榮耀 https://imgchr.com/i/dcaEad https://imgchr.com/i/dcaVIA 詳細(xì)的使用說明可以看這里:PerfDog 使用說明書
為了判斷是什么導(dǎo)致的 FPS 波動(dòng)較大,也為了判斷是否存在 OOM,現(xiàn)在我們來選擇子進(jìn)程進(jìn)行第二次測(cè)試; https://imgchr.com/i/dcaePI
第二次測(cè)試數(shù)據(jù) 測(cè)試數(shù)據(jù)組成: 為了驗(yàn)證我的一些猜想,也為了更細(xì)致的定位問題,我們?cè)跍y(cè)試過程中做了一些特殊操作:
1.戰(zhàn)斗掛機(jī) [為了判斷是否是戰(zhàn)斗過程中觸發(fā)的內(nèi)存泄露] 2.反復(fù)打開關(guān)閉 UI [為了判斷 UI 創(chuàng)建與銷毀是否存在內(nèi)存泄露] 3.靜止在某一 UI 頁(yè)面 [為了與其他場(chǎng)景作區(qū)分] 4.息屏掛機(jī) [為了判斷是否是由圖像資源引起的內(nèi)存泄露還是代碼資源引起的泄露] FPS 數(shù)據(jù): https://imgchr.com/i/dcamGt
CPU 數(shù)據(jù):
https://imgchr.com/i/dcauxf 內(nèi)存數(shù)據(jù): https://imgchr.com/i/dcaWQK GPU 壓力山大
https://imgchr.com/i/dcahLD FPS 與 GPU 分析:
我們通過 FPS 數(shù)據(jù)發(fā)現(xiàn)在游戲過程 Jank 十分嚴(yán)重,F(xiàn)PS 波動(dòng)過于劇烈,尤其是集中在 UI 開啟或者關(guān)閉的時(shí)候,游戲來說,渲染畫面,相對(duì)來說 GPU 可能出現(xiàn)瓶頸,逐對(duì) GPU 進(jìn)行查看,這個(gè)時(shí)候我們進(jìn)行數(shù)據(jù)排查發(fā)現(xiàn) GPU 的使用率也變得異常高,很明顯渲染的壓力很大,而我們游戲 UI 打開時(shí)實(shí)際上戰(zhàn)斗也會(huì)被渲染,這和我們游戲的設(shè)計(jì)有關(guān),所以渲染的壓力很大。
內(nèi)存分析: https://imgchr.com/i/dca5ee
我們通過 PerfDog 的數(shù)據(jù)發(fā)現(xiàn)內(nèi)存是呈現(xiàn)一直上升的狀態(tài),這樣下去最終的結(jié)果就是被 System Kill 掉。其實(shí)現(xiàn)在已經(jīng)可以確定是發(fā)生了內(nèi)存泄露,在 72 分鐘的時(shí)間里內(nèi)存從 726M 到了 956M,而且還在不斷上升;
這里額外說下,看是否存在 OOM 不能只看 PSS ( PerfDog 默認(rèn)的 memory 是 PSS ),同樣要注意 VSS,有的游戲可能會(huì)存在 PSS 一般大小,VSS 不斷增大的情況,這也是不科學(xué)的。 簡(jiǎn)單分享下常見內(nèi)存指標(biāo)關(guān)系
內(nèi)存耗用 VSS - Virtual Set Size 虛擬耗用內(nèi)存(包含共享庫(kù)占用的內(nèi)存) RSS - Resident Set Size 實(shí)際使用物理內(nèi)存(包含共享庫(kù)占用的內(nèi)存) PSS - Proportional Set Size 實(shí)際使用的物理內(nèi)存(比例分配共享庫(kù)占用的內(nèi)存) USS - Unique Set Size 進(jìn)程獨(dú)自占用的物理內(nèi)存(不包含共享庫(kù)占用的內(nèi)存) 一般來說內(nèi)存占用大小有如下規(guī)律:VSS >= RSS >= PSS >= USS
這里再稍微介紹下安卓的 LMK ( Low memory killer ),詳細(xì)信息就不多贅述了。
1.Android 系統(tǒng) 會(huì)定時(shí)執(zhí)行一次檢查,內(nèi)存達(dá)到某個(gè)值后,就會(huì)殺死相應(yīng)的進(jìn)程,釋放掉內(nèi)存。 2.每個(gè)程序都會(huì)有一個(gè) oom_adj 值,這個(gè)值越小,程序越重要,被殺的可能性越低 3.Low memory killer 主要是通過進(jìn)程的 oom_adj 來判定進(jìn)程的重要程度。oom_adj 的大小和進(jìn)程的類型以及進(jìn)程被調(diào)度的次序有關(guān) 4.閾值表可以通過 /sys/module/lowmemorykiller/parameters/adj 和 /sys/module/lowmemorykiller/parameters/minfree 進(jìn)行配置
現(xiàn)在綜合兩次測(cè)試數(shù)據(jù)得出結(jié)論
結(jié)論: 1.FPS 波動(dòng)過于劇烈,很不穩(wěn)定,尤其是在 uI 創(chuàng)建與關(guān)閉時(shí)候; 2.存在內(nèi)存泄露,由于不管什么操作內(nèi)存都一直漲,大概率是公共組件部分引起的 3.其實(shí)還有一些其他小問題,不過優(yōu)先解決這兩個(gè)
第二部分————問題定位 內(nèi)存泄露問題分析 有了 PerfDog 以上的數(shù)據(jù),接下來我們就要開始定位排查問題啦,
項(xiàng)目局部架構(gòu): https://imgchr.com/i/dcaIdH 1.我們的項(xiàng)目的基礎(chǔ)架構(gòu)是所有的基礎(chǔ)功能都調(diào)用的同一份基礎(chǔ) class (祖?zhèn)鞔a),例如通信類等等; 2.我們發(fā)現(xiàn)內(nèi)存在一直上升,無論是角色在什么環(huán)境下,甚至是在息屏的時(shí)候內(nèi)存也在上升,那么我們其實(shí)可以大概率定位是項(xiàng)目?jī)?nèi)部的基礎(chǔ) class 內(nèi)部出了問題;
接下來開始細(xì)細(xì)排查;
內(nèi)存泄露排查 首先要先了解一些 JS 的內(nèi)存管理機(jī)制
回收機(jī)制 JS 中內(nèi)存的分配和回收都是 VM 自動(dòng)完成的,不需要像 C/C++為每一個(gè) new/malloc 操作去寫配對(duì)的 delete/free 代碼,JS 引擎中對(duì)變量的存儲(chǔ)主要是在棧內(nèi)存,堆內(nèi)存。內(nèi)存泄漏的實(shí)質(zhì)是一些對(duì)象出現(xiàn)意外而沒有被回收,而是常駐內(nèi)存。 GC 原理 JavaScript 虛擬機(jī)有一個(gè)特點(diǎn),就是對(duì)象創(chuàng)建的開銷遠(yuǎn)遠(yuǎn)大于對(duì)象計(jì)算的開銷,并且對(duì)象創(chuàng)建會(huì)導(dǎo)致垃圾回收,而垃圾回收會(huì)導(dǎo)致游戲不定期卡頓。 在堆中查看無用的對(duì)象,把這些對(duì)象占用的內(nèi)存空間進(jìn)行回收。瀏覽器上的 GC(Gabage Collection 垃圾回收)實(shí)現(xiàn),大多是采用可達(dá)性算法,關(guān)于可達(dá)性的對(duì)象,便是能與 GC Roots 構(gòu)成連通圖的對(duì)象。當(dāng)一個(gè)對(duì)象到 GC Roots 沒有任何引用鏈時(shí),則會(huì)成為垃圾回收器的目標(biāo),系統(tǒng)會(huì)在合適的時(shí)候回收它所占的內(nèi)存。
我這里使用的谷歌瀏覽器的 Head Profiling,或者你也可以使用白鷺引擎的 profiler: 使用很簡(jiǎn)單:
1.打開 Google 瀏覽器,打開要監(jiān)控的網(wǎng)頁(yè),win 下按 F12 彈出開發(fā)者工具 2.切換到 Memory,選擇堆類型,選中 Take Heap SnapShot 開始進(jìn)行快照 3.右邊的視圖列出了 heap 里的對(duì)象列表,點(diǎn)擊對(duì)象可以看到對(duì)象的引用層級(jí)關(guān)系 4.進(jìn)入游戲后拍下快照,打開某個(gè)界面,關(guān)閉界面,拍下快照 5.將新的快照轉(zhuǎn)換到 Comparsion 對(duì)比視圖,進(jìn)行內(nèi)存對(duì)比分析 需要額外注意的是: 每次拍快照前,都會(huì)先自動(dòng)執(zhí)行一次 GC,保證視圖里的對(duì)象都是 root 可及的。GC 的觸發(fā)是依賴瀏覽器的,所以不能通過時(shí)時(shí)觀察內(nèi)存峰值而判斷是否有內(nèi)存泄漏。
我們可以每隔一段時(shí)間來拍一次快照(由于公司項(xiàng)目原因,我就不展示真實(shí)項(xiàng)目了,此處僅作為教學(xué)):
我們可以打開谷歌瀏覽器的內(nèi)存分析工具后有三個(gè)選項(xiàng),我們可以根據(jù)自己的調(diào)試方式交替使用;
1.Heap snapshot - 用以打印堆快照,堆快照文件顯示頁(yè)面的 javascript 對(duì)象和相關(guān) DOM 節(jié)點(diǎn)之間的內(nèi)存分配 2.Allocation instrumentation on timeline - 在時(shí)間軸上記錄內(nèi)存信息,隨著時(shí)間變化記錄內(nèi)存信息。 3.Allocation sampling - 內(nèi)存信息采樣,使用采樣的方法記錄內(nèi)存分配。此配置文件類型具有最小的性能開銷,可用于長(zhǎng)時(shí)間運(yùn)行的操作。它提供了由 javascript 執(zhí)行堆棧細(xì)分的良好近似值分配。 https://imgchr.com/i/dcdtTH
這里舉例使用堆快照分析, https://imgchr.com/i/dcdatA 右側(cè)查看詳細(xì)信息 https://imgchr.com/i/dcd0pt 可見 rect 對(duì)象一直在增高,那么我們可以查看一下導(dǎo)致 rect 對(duì)象未被釋放的原因: https://imgchr.com/i/dcdD6f 是由于 Rect 對(duì)象中存在一個(gè)屬性 rect 一直被引用導(dǎo)致內(nèi)存無法釋放,那么我們到代碼對(duì)應(yīng)的位置去找,就可以較快的定位原因;最終我們發(fā)現(xiàn)是因?yàn)樵谧远x的一個(gè)全局事件監(jiān)聽器中實(shí)例化了一個(gè)對(duì)象,但是這個(gè)對(duì)象的一些屬性會(huì)持續(xù)被這個(gè)事件監(jiān)聽器所引用而不會(huì)被回收
當(dāng)然為了更快的定位哪個(gè)函數(shù),我們也可以使用 https://imgchr.com/i/dcdrX8 一般結(jié)果是這個(gè)樣子 https://imgchr.com/i/dcd60g
Overview 的 HEAP(堆)曲線圖表示 JS 堆。 Call Stack 通常來說,垂直方向并沒有太大的意義,僅僅表示函數(shù)嵌套比較深而已,但是橫向表示調(diào)用時(shí)間,如果調(diào)用時(shí)間太長(zhǎng),那么就需要優(yōu)化優(yōu)化了。錄制結(jié)果的調(diào)用堆棧,橫向表示時(shí)會(huì)出現(xiàn)帶有更多詳情的浮窗間,垂直方向表示調(diào)用棧,從上往下表示函數(shù)調(diào)用?;瑒?dòng)鼠標(biāo)滾輪可以查看某段時(shí)間的調(diào)用棧信息。把鼠標(biāo)放到 Call Stacks 調(diào)用棧的某個(gè)函數(shù)上面可以查看函數(shù)詳細(xì)信息。這個(gè)一般是性能優(yōu)化時(shí)關(guān)注,對(duì)于內(nèi)存泄漏,主要用于幫助定位進(jìn)行了什么操作。 Counter(計(jì)數(shù)器)窗格。在這里你可以看到內(nèi)存使用情況(與 Overview(概述)窗格中的 HEAP(堆)曲線圖相同),分別顯示以下內(nèi)容:JS heap(JS 堆),documents(文檔),DOM nodes(DOM 節(jié)點(diǎn)),listeners(偵聽器)和 GPU memory(GPU 內(nèi)存)。勾選或取消勾選復(fù)選框可以將其從圖表中顯示或隱藏。
主要關(guān)注第三個(gè)的 JS 堆內(nèi)存、節(jié)點(diǎn)數(shù)量、監(jiān)聽器數(shù)量。鼠標(biāo)移到曲線上,可以在左下角顯示具體數(shù)據(jù)。這些數(shù)據(jù)若有一個(gè)在持續(xù)上漲,沒有下降趨勢(shì),都有可能是泄漏。 由于篇幅原因,這里不過多介紹這些工具的使用,網(wǎng)上有很多相關(guān)教程;
卡頓優(yōu)化 我們通過 PerfDog 的數(shù)據(jù)發(fā)現(xiàn) GPU 壓力很大,游戲來說,渲染畫面久一般是 drawcall 過多,或者每次 draw 的時(shí)間較長(zhǎng)。 https://imgchr.com/i/dcd2kj 而我們的游戲在查看在 drawcall 后確定是由于游戲運(yùn)行時(shí) drawcall 過多,導(dǎo)致每幀的渲染耗時(shí)比較長(zhǎng),所以會(huì)呈現(xiàn)一種卡頓的現(xiàn)象; 關(guān)于查看 drawcall 等可以通過白鷺自身的 FPS 面板查看 白鷺 debug 文檔 在優(yōu)化前首先要了解 egret 在渲染的一幀里做了什么工作內(nèi)容 https://imgchr.com/i/dcdRts 細(xì)分的話又可以分成 https://imgchr.com/i/dcwk4A
每一幀的工作內(nèi)容:
1.執(zhí)行一次 EnterFrame,此時(shí),引擎會(huì)執(zhí)行游戲中的邏輯。并且拋出 EnterFrame 事件 2.引擎會(huì)執(zhí)行一個(gè) clear 。將上一幀的畫面全部擦除 3.Egret 內(nèi)核會(huì)遍歷游戲場(chǎng)景中的所有 DisplayObject,并重新計(jì)算所有顯示對(duì)象的 transform 4.所有的圖像全部 draw 到畫布
現(xiàn)在來優(yōu)化一下: 首先要降低 drawcall:
1.把小圖全都換成圖集 2.實(shí)現(xiàn)文字合批,通過自定義字體,使用圖片字體的方式代替原生的字體 3.動(dòng)靜分離,將需要變化的和不變的分別放在不同的層級(jí)下,比如背景層、圖標(biāo)層和動(dòng)態(tài)變化層 4.動(dòng)畫盡量使用 dragon bones 幀動(dòng)畫而不是 spine 動(dòng)畫 5.使用 cacheAsBitmap,把矢量圖在運(yùn)行時(shí)以位圖形式進(jìn)行計(jì)算
降低幀事件的開銷:
1.不要的 DisplayObject,直接 removeChild 而不是設(shè)置他的 visible 屬性為 false,否則在第三步還會(huì)參與計(jì)算 2.不在主循環(huán)里創(chuàng)建任何對(duì)象,游戲中的人物、怪物、技能特效統(tǒng)統(tǒng)做成對(duì)象池 3.不在 EnterFrame 事件中做過多的操作,非要用可以自定義一些事件
我們可以用以下的函數(shù)統(tǒng)計(jì)創(chuàng)建的 gameobject 的數(shù)量 https://imgchr.com/i/dcwE9I 它是顯示了每一秒鐘去拿一個(gè) hashCount 跟上一個(gè) hashCount 作對(duì)比,這個(gè) hashCount 是由白鷺引擎內(nèi)部 API,用于統(tǒng)計(jì)引擎對(duì)象的創(chuàng)建數(shù)量。如果游戲靜止放置不動(dòng),理論上 hashCount diff 的結(jié)果應(yīng)該是 0,實(shí)際上要盡可能控制在 120 以下,如果超標(biāo),只需要在引擎的 HashObject 的構(gòu)造函數(shù)這里添加一個(gè)斷點(diǎn),在運(yùn)行時(shí)去檢查調(diào)用堆棧就排查就可以了。
查看 PerfDog 詳情: https://perfdog.qq.com/?ADTAG=media.dev_website
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:00:26
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
初步嘗試swift,就遇到了一個(gè)問題,十多個(gè)小時(shí)仍然沒有解決
這是測(cè)試代碼
//print("Hello, World!") let CONTEXT_LIST_URL:String = "http://192.168.0.218:8080/xxx/api/context/list"; let url:NSURL = NSURL(string: CONTEXT_LIST_URL)! do{ var data = try NSString(contentsOfURL: url, encoding: NSUTF8StringEncoding) print(data) } catch{ let nsError = error as NSError print(nsError.localizedDescription) }
異常信息
The file “l(fā)ist” couldn’t be opened using text encoding Unicode (UTF-8). Program ended with exit code: 0
由于我的服務(wù)端測(cè)試環(huán)境是windows平臺(tái),輸出的字符無法完全解析emoji的字符,導(dǎo)致部分內(nèi)容出現(xiàn)亂碼 亂碼如下圖下圖為可以正常編碼
現(xiàn)在,我使用swift請(qǐng)求獲取輸出,將得到的NSData使用utf8的編碼解析成字符串,非常令人苦惱的是, NSString在執(zhí)行的過程中一旦遇到無法解析的編碼,直接返回為nil ?是否可以嘗試逐個(gè)替換掉無法解析字符,想想效率太低不想嘗試。有哪些方式可以忽略掉其中的非utf-8編碼?或者有沒有容錯(cuò)機(jī)制?
希望熟悉swfit的朋友能夠幫到我,非常感謝!
來源:開源中國(guó)
發(fā)布時(shí)間:2016-08-04 13:53:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
先上圖看效果
這個(gè)為什么不是自動(dòng)居中了呢? 我一點(diǎn)擊 update frames,文字就跑到了左上角去了。
小弟剛學(xué)ios,很多不懂,希望大鳥們指點(diǎn)下。 在故事版里紅色是不是代表有問題?
來源:開源中國(guó)
發(fā)布時(shí)間:2016-06-21 23:26:00
最近嘗試用 VS Code 跑些 Java 項(xiàng)目,基于 Maven 構(gòu)建的,其中一個(gè)很順利,沒問題。但另外一個(gè)項(xiàng)目導(dǎo)進(jìn)來全是編譯錯(cuò)誤,看了下錯(cuò)誤消息如下:
The declared package "com.qq.weixin.mp.aes" does not match the expected package "main.java.com.qq.weixin.mp.aes"
錯(cuò)誤消息很明顯,他把 main/java 也看成 package 路徑一部分了,導(dǎo)致和文件的 package 不匹配,找了半天也沒找到有哪里可以改的,求 vs code 高手,這個(gè)如何解決,為啥同樣的配置,另外一個(gè)項(xiàng)目正常打開 build,而這個(gè)就不行了。
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:00:09
感覺 kwp3 有點(diǎn)卡,有時(shí)候還死機(jī),而且用過一次一代的 oasis,感覺屏幕比 kpw3 好不少。正好發(fā)現(xiàn)可以刷公司飯卡買 kindle,店里只有 kpw4,oasis2 和 oasis3,有點(diǎn)糾結(jié)有沒有升級(jí)一下的必要。oasis 3 8g 刷飯卡 2900....
來源:V2EX
發(fā)布時(shí)間:2020-08-27 17:00:03
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
今天按照swift官網(wǎng)上的教程( https://swift.org/getting-started/#installing-swift )安裝好后,輸入swift --version后可以顯示相關(guān)信息
而且在登陸RPEL也能正常運(yùn)行
但當(dāng)輸入swift build --help后就不行了
希望大家?guī)椭幌?,謝謝!??!
來源:開源中國(guó)
發(fā)布時(shí)間:2016-05-09 11:16:00
快速改善 UI 設(shè)計(jì)的 16 個(gè)小技巧快進(jìn)傳送門 --> https://www.qimiaodh.com/post/1490.html -----------------------------了解 more---------------------------- --> https://www.qimiaodh.com
來源:V2EX
發(fā)布時(shí)間:2020-08-27 16:59:54
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
google將會(huì)采納swift作為安卓開發(fā)語(yǔ)言
Java確實(shí)太落后了
來源:開源中國(guó)
發(fā)布時(shí)間:2016-04-23 13:27:00
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
比如:
var name = "abc" println(name)
這樣是輸入abc
但是我現(xiàn)在要輸入字符串name,對(duì),就是要 輸出 該變量自身的名稱,而不是該變量的值 。
找了swift的反射的資料,沒成功啊。
大半夜的研究這個(gè)問題,被困住了...
來源:開源中國(guó)
發(fā)布時(shí)間:2015-08-26 00:38:00
第六個(gè)網(wǎng)口做 ikuai 的 wan 口網(wǎng)卡
第一個(gè)網(wǎng)口(之前的管理口)是不是就閑置了?還是該怎么接線來用?
來源:V2EX
發(fā)布時(shí)間:2020-08-27 16:59:40
一下是我的操作步驟:1. 在一臺(tái) Ubuntu 系統(tǒng)上安裝 docker, 同時(shí)安裝 openwrt 系統(tǒng) 2. 開啟網(wǎng)卡混雜模式,創(chuàng)建 macvlan 3. 啟動(dòng) docker openwrt 4. 修改被抓包設(shè)備網(wǎng)關(guān)為 openwrt IP 地址
來源:V2EX
發(fā)布時(shí)間:2020-08-27 16:59:34
HDC調(diào)試需求開發(fā)(15萬預(yù)算),能者速來!>>>
從C#轉(zhuǎn)C++有段時(shí)間了,一直想分享點(diǎn)什么,但又不太好意思分享,畢竟自己做C++的時(shí)間不太長(zhǎng),最近感覺自己已能勝任現(xiàn)有工作,想分享的想法又強(qiáng)了點(diǎn),前幾天看到這樣一篇博客《 那些年·我們讀過的專業(yè)書籍 》,里面列了很多大家認(rèn)為很好的書,加上自己在自學(xué)C++的工程中也看了不少書,感覺并不是所有的書都值得花時(shí)間去看的,畢竟很多人一年下來也看不了2,3本書,不同的技術(shù)能力的人,適合看的書都不太一樣,在這么多大家都認(rèn)為是經(jīng)典的書中,選出幾本真正適合自己的才是王道,經(jīng)典一多了,有些比起來就不是那么經(jīng)典了,當(dāng)然大家都說經(jīng)典,自然有可看之處,如果有多余的時(shí)間,多看些書自然是好的。
下面是我看過的技術(shù)書籍(不一定看完),還有本《程序員的自我修養(yǎng)》在老家,其他幾本不怎么樣就沒有列出來。
買的第一本技術(shù)書籍是《數(shù)據(jù)結(jié)構(gòu)與算法分析》
當(dāng)時(shí)剛畢業(yè)不久,在學(xué)校時(shí)沒有買技術(shù)書籍的概念,在學(xué)校時(shí)也沒怎么逛過技術(shù)網(wǎng)站,畢業(yè)后逛得比較多,當(dāng)時(shí)是做C#,那時(shí)Android很火想學(xué),內(nèi)心又一直認(rèn)為成為一名好的程序員,底層知識(shí)是要會(huì)的,當(dāng)時(shí)的情況是:在做C#,想做Android,又想做C++,沒準(zhǔn)備長(zhǎng)做C#,最后買了這本算法相關(guān)的書籍,決定學(xué)C++,注意準(zhǔn)備開始吐槽:是誰說程序=算法+XX,這個(gè)等式對(duì)于很多剛畢業(yè)的同學(xué)們根本不成立,算法對(duì)于大部分的程序員來說都是弱項(xiàng)好不好,很多菜逼根本就不會(huì)算法,就會(huì)增刪改查,有木有,別一開始就來最難的,容易打擊自信心,是誰說算法很重要的,哥才寫了90多篇博客,就有19篇跟算法有關(guān)的,私底下也學(xué)習(xí)了很多算法相關(guān)的文章,哥是要轉(zhuǎn)C++好不好。吐槽告一段落, 算法還是很重要的 ,有時(shí)間還是要好好研究一下。
《Effective C++ 》買的第一本完全關(guān)于C++ 的書
剛開始都看不懂,反復(fù)看之后,就很懂了,到現(xiàn)在為止應(yīng)該至少看了4遍,感覺現(xiàn)在給我大半天的時(shí)間,能大致在看一遍,曾經(jīng)一度想把書中的50條法則寫成幾篇博客的,最后由于太懶只寫了3篇
Effective C++面向?qū)ο笈c繼承
Effective C++ 類與函數(shù)設(shè)計(jì)和申明
Effective C++構(gòu)造函數(shù)析構(gòu)函數(shù)Assignment運(yùn)算符
開始沒看懂的時(shí)候,沒覺得這書怎么樣,等一條一條的看懂之后,發(fā)現(xiàn)這書他媽的寫得太好,我忍不住的要贊美他,作者用很短的幾句話就把事情說得很清楚,作者的表達(dá)能力的確牛逼,再次發(fā)現(xiàn)作者表達(dá)能力特別牛逼的是看吳軍的《數(shù)學(xué)之美》,他用幾句話就把一個(gè)關(guān)于圖的問題講得很清楚,其他的一些所謂的經(jīng)典作者寫的內(nèi)容看起來就不是那么好理解,當(dāng)然這跟講的內(nèi)容、跟讀者所掌握的的知識(shí)以及讀者的理解能力有關(guān)。
如果你要學(xué)C++,那么我推薦你看這本,雖然它沒有教我們?nèi)腴TC++,也沒有教我們深度理解C++,也沒講更底層的知識(shí),但是它是第一本,將很多關(guān)于C++編程的重要知識(shí)點(diǎn)收錄成的第一本書,第一本自然收錄的是在開發(fā)中出現(xiàn)頻率較大的,值得一講的內(nèi)容,之后有很多所謂經(jīng)典的跟風(fēng)之作,如
《Exceptional C++》和《More Exceptional C++》,包括作者自己的《More Effective C++》,
當(dāng)然這些書中講的內(nèi)容可能是你八輩子也用不上的,但可能是要掌握的,這些書講的差不多是一些技巧性的東西,或是實(shí)現(xiàn)了一個(gè)XX功能,有點(diǎn)通用性,人家把這些點(diǎn)講得很清楚,這類書不用急著看,等你C++學(xué)得差不多了,再看也不遲,那時(shí)會(huì)看得很快,因?yàn)樗麄儧]講什么新的知識(shí),都是對(duì)現(xiàn)有知識(shí)的運(yùn)用。
《深度探索C++ 對(duì)象模型》 要想更深入的理解C++,當(dāng)然是這本,這本真的是經(jīng)典中的必看。
這本書共7章320頁(yè),但出版社卻把它弄得比較厚,好像不厚就感覺不是好書似的。每章的內(nèi)容都很不錯(cuò),建議重點(diǎn)看第三章和第四章,第三章講C++對(duì)象的內(nèi)存布局,第四章講C++的各種方法編譯后是啥樣子的,以及方法是怎么被調(diào)用的,這是C++最重要的東西,其他任何技術(shù)不都是建立在數(shù)據(jù)和方法之上嗎!當(dāng)然如果你是菜鳥看完之后你還是菜鳥,你不會(huì)變成大牛,因?yàn)槲铱戳诉@些書后我并沒有變成大牛,你同樣也不會(huì),但你會(huì)更深入的理解C++,你會(huì)對(duì)你自己的能力更自信??赐赀@本書后,我覺得我可以做C++了,于是跨部門面試,十分鐘左右,我現(xiàn)在的經(jīng)理就問我什么時(shí)候可以過來。當(dāng)然剛開始做C++時(shí)各種不順,實(shí)戰(zhàn)太少。你不會(huì)因?yàn)榭戳藥妆緯蔀榇笈!?催@本書之前除了《編譯原理》還沒有買,其他的書都看完或是看過一些,剛開始的時(shí)候有點(diǎn)看不懂,之后很快的看懂并看完了,因?yàn)榭催@本書之前我反復(fù)看了《深入理解計(jì)算機(jī)系統(tǒng)》的第七章(鏈接)和《程序員的自我修養(yǎng)》的大部分內(nèi)容,對(duì)編譯和鏈接還是有些了解,再看這本書自然會(huì)快些??赐赀@本書我寫了三篇博客,但看的人很少。
構(gòu)造函數(shù)產(chǎn)生的點(diǎn)及原因
虛方法的調(diào)用是怎么實(shí)現(xiàn)的(單繼承VS多繼承)
C++ Data Member內(nèi)存布局
《 深入理解計(jì)算機(jī)系統(tǒng) 》 就不多說了,估計(jì)每個(gè)過來人都會(huì)推薦,如果你想成為一名好的程序員,就是必看必看,不管你是什么程序員,我相信很多C#牛逼的程序員都看過,這本書講了很多重要的知識(shí),不是很深,但裝逼足以,要全都看懂還是有些難的,之前就有個(gè)同事買了這本書,里面夾了一張跟他有純潔男女關(guān)系的女性朋友的照片,作為書簽,,這的確是督促自己看書的好方法。關(guān)于這本書我寫了兩篇博客,用這本書的內(nèi)容寫博客可以寫很多篇。
數(shù)據(jù)對(duì)齊
在開發(fā)中你可能沒有考慮到的兩個(gè)性能優(yōu)化
由于我一直在自學(xué)C++,重點(diǎn)推薦這3本,前兩本推薦指數(shù)更高:
1 :深度探索C++ 對(duì)象模型
2 :深入理解計(jì)算機(jī)系統(tǒng)
3 :Effective C++
其他的一些書都是值得看的,寫到這里就有點(diǎn)不想寫了,再說一本吧,其他的就不多說了,看完了上面這三本,再看其他的。由于我是做Windows C++開發(fā),就說說《Windows核心編程》,做Windows開發(fā)的同學(xué)要看看。關(guān)于這本書我寫了4篇博客
多線程編程--5種方法實(shí)現(xiàn)線程同步
Windows幾種線程同步方法介紹
Windows線程基礎(chǔ)
Windows內(nèi)核對(duì)象簡(jiǎn)介
這4篇博客基本上是講線程、進(jìn)程、內(nèi)核對(duì)象、線程同步。這本書講了Windows操作系統(tǒng)的很多東西,如內(nèi)存管理,動(dòng)態(tài)鏈接庫(kù),這些都是做Windows開發(fā)需要知道的,也是我比較薄弱的,在開發(fā)中基本都是用庫(kù),現(xiàn)在做的項(xiàng)目,兩個(gè)Solution,其中一個(gè)有100多個(gè)project,剛開始來的時(shí)候經(jīng)常編譯都通過不了,加上每次編譯的時(shí)間較長(zhǎng),搞了半天編譯失敗,挺打擊人的。
關(guān)于書的內(nèi)容就說到這里,免得大家以為我是來說書,顯然說書不是我的強(qiáng)項(xiàng),現(xiàn)在就來說說轉(zhuǎn)C++的一些感受。
老實(shí)說如果現(xiàn)在用的是C#、JAVA、PHP等,且沒用過C/C++不太建議轉(zhuǎn)C/C++,但非常建議多看看底層的知識(shí),C#做了幾年之后發(fā)現(xiàn)也就是那點(diǎn)東西,不深入學(xué)習(xí),很多東西其實(shí)是只會(huì)用,根本不知道到底是怎么回事。我相信很多C#程序員不知道多態(tài)到底是怎么實(shí)現(xiàn);方法到底是怎么被調(diào)用的;不知道哪些是在編譯器確定,哪些是在運(yùn)行時(shí)確定的;經(jīng)常聽到字符串池的概念等,微軟把C#封裝得太好了,掉坑里的機(jī)會(huì)太少了,大不了不管3721,try...catch一下,也讓有些人變得不那么愛思考了,像C/C++一不小心就掉坑里了,不思考都不行。經(jīng)常聽到有人說:C#入門容易,精通難。那是因?yàn)閷W(xué)底層的知識(shí)更難些好不好。說這些不是針對(duì)誰,以前寫C#就是吃著火鍋唱著歌,各種輕松舒服,C++就兩字:苦逼。要啥啥沒有,如分割字符串這種最基本的功能都得自己實(shí)現(xiàn),剛做C++的感覺就是:自己坐在豪華的游艇上,看到對(duì)面的海盜船很酷,于是就往海盜船一跳,一上船發(fā)現(xiàn)這坐船到處都在漏水,各種設(shè)施都很差勁,一不小心就掉水里了,各種感覺不適應(yīng)。
學(xué)C++ 好很長(zhǎng)時(shí)間嗎?不要
從自學(xué)C++到現(xiàn)在差不多3年時(shí)間,期間多次想放棄,心中常有的一個(gè)念頭就是:把這些時(shí)間用在學(xué)C#,C#可以學(xué)得更好,工資可以拿得更多,每次看到發(fā)到手中的這點(diǎn)工資,就沒啥干勁了,但我也一直明白若要把程序當(dāng)做一個(gè)長(zhǎng)久的職業(yè),我是要必會(huì)C/C++的,期間偶爾有幾個(gè)月沒有學(xué)C++,但最后還是放不下,又想起她。最后拖到兩年多才做自己一直想做的C++,感覺是個(gè)很漫長(zhǎng)的過程,內(nèi)心的針扎還是挺多的。這兩年來業(yè)余時(shí)間拿來學(xué)習(xí)C++的時(shí)間平均在半個(gè)小時(shí)左右,跟10000個(gè)小時(shí)比起來還是很少的,當(dāng)然10000個(gè)小時(shí)是要成為真正的大牛的,而我是剛上賊船,看了這么多書理論還是有些,還需大量實(shí)戰(zhàn)。
C++ 很難嗎?NO
C++被成為世界上最難的編程語(yǔ)言,其實(shí)并沒有傳說中的那么難,但有一點(diǎn)是可以肯定的C++程序員在沒有成為小牛之前一直都在針扎,對(duì),就是針扎,過得很苦逼,我在上個(gè)部門做C#的時(shí)候沒加過一天班,做C++后,以前的同事說我瘦了,以前做C#用一個(gè)月的時(shí)間一個(gè)人重寫了公司的工作流,做C++后,花了兩個(gè)多月做個(gè)歷史管理器,還經(jīng)常加班。雖然現(xiàn)在自信多了,但還要繼續(xù)針扎下去。等成為小牛后,我相信就不分編程語(yǔ)言了,但如果你不是做C/C++,卻想做C/C++,就別聽語(yǔ)言都是浮云這種廢話。在你成為小牛之前你才是浮云,你得苦逼,而且這是轉(zhuǎn)行,這也是我不太建議轉(zhuǎn)C/C++的一個(gè)原因,你之前學(xué)到的很多東西都是白學(xué)的,你要從0.1開始,又開始做菜鳥,大家都知道菜鳥的日子不是那么好過,等你成為小牛之后編程語(yǔ)言才是浮云。為什么大家都說他難呢?我估計(jì)就是被哪些沒學(xué)好的人宣傳的,沒學(xué)好之前過得苦逼,那當(dāng)然發(fā)自內(nèi)心的認(rèn)為難,其他的朋友們聽他們一說估計(jì)也覺得難。在加上一些大牛也說C++難,人家說難不是因?yàn)樽约簺]學(xué)好而說難,人家是因?yàn)橹赖么蠖?,發(fā)現(xiàn)C++太靈活,坑太多,新手很容易掉坑里。要我說,任何編程語(yǔ)言,基礎(chǔ)語(yǔ)法也就那點(diǎn)東西,等你明白了這些基礎(chǔ)的東西是怎么實(shí)現(xiàn),為什么要這樣實(shí)現(xiàn),編譯后是個(gè)什么樣子,你也就發(fā)現(xiàn)C++也就那樣,不管牛不牛,也都是在用C++干活,只不過是有的人再用C++做增刪改查,有的人在做大家都在用的產(chǎn)品。
怎么學(xué)習(xí)C++ ?標(biāo)準(zhǔn)答案是:多思多寫多看
作為新菜鳥的我,是不應(yīng)該回答這個(gè)問題的,但這個(gè)問題的正確答案的確是多思多寫多看?,F(xiàn)在來說說我的失敗經(jīng)歷,作為智商不太低的我,學(xué)了兩年多才做C++,這顯然是失?。ü绦騿T就應(yīng)該自信,千萬別懷疑自己的智商,一點(diǎn)都不能有)。的確我是走了彎路,所以我像很多有失敗經(jīng)歷的前輩一樣,來分享自己的失敗經(jīng)歷,以免后輩們重蹈前輩們的覆轍。
我學(xué)了好久的C++,都不會(huì)寫一個(gè)C++的類,其實(shí)開始的時(shí)候一直都是在寫C,一直在用C寫算法,嚴(yán)重受了算法重要的影響,其實(shí)開始的時(shí)候我都不是在學(xué)C++,買的第一本技術(shù)書,不是關(guān)于C++的,而是關(guān)于算法的。學(xué)C++的時(shí)候也沒有買一本比較好的系統(tǒng)介紹C++的書籍。直接第一本C++書籍就是Effective C++,看這本書還是要一定基礎(chǔ)的??催@本書的時(shí)候我已經(jīng)做了兩年多的C#,在學(xué)校里有一點(diǎn)C的基礎(chǔ),之后也看過《高質(zhì)量C++編程指南》,還是有一定的程序基礎(chǔ),如果你有一定的程序基礎(chǔ),想轉(zhuǎn)C++,還是建議先看本系統(tǒng)介紹C++的書籍,如《C++ Primer》,這本書的作者也是《深度探索C++對(duì)象模型》的作者,還有C++他爹寫的那本啥也值得一讀,大家都是這么說,應(yīng)該不會(huì)錯(cuò),兩本選一本,有一定基礎(chǔ)之后再看Effective C++,感覺不錯(cuò)之后再看《深度探索C++對(duì)象模型》,這本差不多之后再看《深入理解計(jì)算機(jī)系統(tǒng)》,這本不是講C++的,講的是底層的東西,你學(xué)C++不就是想學(xué)底層的東西嗎,C++語(yǔ)法就那點(diǎn)東西,成為牛人之前還有一堆的書等著你去看,你還要寫一堆的代碼。
我 http://www.gwdang.com/app/extension 現(xiàn)在在學(xué)習(xí)Windows的一些東西,做Windows C++方向嗎!業(yè)余時(shí)間看看《編譯原理》,比較難懂,看懂之后,我相信很多東西都會(huì)明白得更透徹。明年估計(jì)是我成為小牛的重要階段, 阿漢 加油。 http://www.gwdang.com
來源:開源中國(guó)
發(fā)布時(shí)間:2014-01-17 19:30:00