用Sklearn日用的Ensemble算法对当当暖和销书评论终止分类即兴实。

  关于集儿子成算法概念却以看此雕刻篇文字 尽结Bootstraping、Bagging和Boosting

  先看壹下此雕刻篇文字朴斋贝叶斯分类算法即兴实,本文首要还是用当当评论数据做的剖析。关于代码片断壹些底细在朴斋贝叶斯分类算法即兴实曾经详细的说皓了。

  RandomForest

  sklearn RandomForestClassifier文档地址

  代码首要的参数说皓结实

  终极结实父亲条约80.5%摆弄的正确比值

  梯度提升算法GradientBoostingClassifier

  sklearn GradientBoostingClassifier 文档地址

  Boosting时时串行地迭代绵软弱念书器终极结合壹个强大念书器,此雕刻点和Bagging并行的 方法不一,因此在用梯度提升算法时耗时什分长

  代码首要的参数说皓结实

  终极正确比值78.8%摆弄

  本篇文字在此先行音皓。我壹直对乐到来教养员高尊敬,但外面面所涉情节,高诬蔑雄心,且不完整顿管完整顿截图。我本不想损伤乐到来教养员,条想把事情说清楚,讲皓白。

  本篇文字是回应 李乐到来教养员写的:「我为什么说郑伊廷(XDite)是个完整顿没拥有拥有信誉的人」 https://mp.weixin.qq.com/s/a1gEzfDCH2cUZL4ksV3whA

  

  我跟乐到来教养员观点交涉不单壹回,乐到来教养员揪容于使用「雄心」此雕刻个字为假定前提,到来强大逼对方以此架构讨论。

  (此雕刻边的「雄心」上多半是他己行撷取的「认为」,就如同「他拥有 16000 ETH 的隔天提即兴权」是「他认为的雄心」壹样。此雕刻是我的律师的美意提示。)

  本段条理在于乐到来教养员,在于 12/24(日)以北边京金融局讯讯问为由,急切的逼我接电话。条理缘故在于,副方假设无持续合干之己愿。彼此述己己己关于此雕刻件事的处理:

  我的回覆是:

  TGE 到来的 ETH 与团弄队 TOKEN 不能触动用,鉴于在法度上无权分派给乐到来教养员。

  既然然无法合干,之前 INB 供应我团弄体的 ETH ,当前载余好多,我理应退回。

  依照商定,初期投資者私募額度的 TOKEN ,40% 共计 800 万颗

  全栈营外面面的即兴金剩叁佰多万,全数给乐到来教养员。

  允诺言 OTCBTC 不到来的盈利,依照比例分拆卸给乐到来教养员 6 个季度。

  1. 此雕刻个前提是基于「律师所建议」,鉴于事先的股份没拥有拥有淡色吊销上,要吊销又吊销什分劳动驾。但假设要提 16000 ETH 必须终止公司清算,在法度架构上不能,也无法说皓。

  我「团弄体」为了补养偿乐到来教养员的损违反(我雄心上己己己是度过意不去的),允诺言将法度上我能分派的盈利拆卸分给乐到来教养员就续六个季度,鉴于我团弄体置信 OTCBTC 会持续迸产长,此雕刻么淡色上我持续帮乐到来教养员发皓盈利。但既然然是不又合干,盈利不能拥有限期分派。

  固然我的律师建议我在法度层面上,我没拥有拥有工干此雕刻么做。

  2. 此架构基于假设要让 OTCBTC 不到来在法度上以及合伙投资上,持续僵持却以在法度以及会计师审计上,能说皓度过去的架构。所拥局部前提邑基于我要在法度上护持 100% 股东方,我以我公家却以触动用的额度与即兴金干为等比例拆卸分补养偿。

  条是乐到来教养员给我的回覆是:

  1. 16000 ETH

  2. 4000 万代币

  后乐到来教养员己己己觉得相差太多:

  投降到

  > 1. 16000 ETH

  > 2. 1300 万代币 (他认为己己己拥有 800 万颗代币,佩的 500 万颗,是以事先七月给我的 ETH 事先即兴值 2000 多 RMB,对标注全栈营所增的资,因此值 500 万颗。固然我无法了松此雕刻是什么样的逻辑)

  > 3. 不到来不分派任何盈利

  容许,我们却以选择「持续合干」

  事先,乐到来教养员是基于我持续持拥有 100% 股东方的前提,期望我买进断他「股份」的前提下期望我「提出产的环境」,而不是我团弄体的「允诺言」。

  鉴于差异太父亲,我回覆我人在海外面,我必需要找到我律师当面谘询以后,才干回覆他终极结实。

  当天是 12/24 北边京时间,12/23 美国时间。我是立雕刻买进的机票回台湾(买进到 12/25 早早的飞机,12/27 清早回到台湾),在我拿到律师建议且条约到律师时间之后,我才却以进壹步回覆。不是假意不回乐到来教养员。

  条是 12/27 我回覆乐到来教养员,我的律师建议他加委代表到台湾商量,他即雕刻气炸在网上指控我没拥有拥有信誉。

  

  1. 全栈营线下版第壹期顶出产 50000 20 人,100 万。( 6:4 )

  2. 全栈营线下版第壹期顶出产 60000 20 人,120 万。 ( 6:4 )

  3. 全栈营线上版第壹二期顶出产条约 1200 万。( 7:3 )

  此处我的回应:

  1. 整顿个项目加以宗到来「营收」条要 1420 万,绝无营收超越 2000 万之谱。

  2. 所拥有线下线下版皆黑白片备忘录。

  3. 线下版的顶出产,在扣掉落本钱以及交税之后。以终止盈利分派,此盈利分派即兴在也分派给了乐到来教养员。

  4. 所拥有全栈营的开销,每壹条邑拥有详细流动水,却供检验。并匪我却以恣意触动用顶出产。公司银行帐号与资产触动用也由乐到来教养员指定的会计师人员处理。

  线上版的营收,鉴于度过于庞父亲,即兴在是由情匪得已公司代收的款。经凶烈要寻求后,孤立成立给全栈思惟公司。所拥有开销皆需报帐,并拥有详细流动水。之因此不拥有整顿个盈利分派,是鉴于不到会计师年度结算。

  但不分拆卸盈利并匪雄心,雄心上公司以顶出产,每月拆卸分20 万 / 10 万给我跟乐到来教养员。我拿 20 万元壹事,并匪先行匪配利更加,而是每月公司开销好多代垫费,以我的信誉卡先行顶出产,就得 10 多万。而乐到来教养员认为我既然然拿 20 万,他也得拿 10 万,此雕刻是副方商定好的。

  但此处拥有叁件事我想提壹下:

  1. 全栈营在拆卸出产孤立为孤立公司时,还愿上是拥有高臻 200 多万即兴金,无法从情匪得已公司瓜分转帐出产去。此雕刻片断我违反掉落的回应是,鉴于操干违反误,曾经在乐到来教养员公家帐号。

  条是公司既然然事先不缺即兴金(帐面即兴金也拥有到微少500万),建议我正点又跟乐到来教养员拿回到来。

  条是此雕刻笔钱壹直从杏月如月要到了条约末了什月,才回到了全栈思惟的帐上。险乎让我们资产断裂。

  2. 在早年蒲月时,乐到来教养员提出产要寻求,期望前嘉奖品股东方分红,以事先剩的即兴金,嘉奖品他该当拥局部全片断红提走。父亲条约是壹佰多万。我团弄体微懂深雕刻财报以及会计师,深知此雕刻会对公司即兴金流动会形成影响。(同时也真的会形成影响,鉴于我们还没拥有招收第叁期。)

  我想讯讯问能否拥有乐到来教养员紧急事况,亟需从我此雕刻边触动用即兴金。不然匪会计师年度嘉奖品微少量分红不符日理。违反掉落的说辞是:「买进币」。

  我又叁央寻求吊销此要寻求,最末没拥有拥有分派盈利成。

  3. 同路人以后到,很多念书圈的对象以及币圈的对象,纷万端体即兴他们拥有投资全栈营,觉得我们的产品做得很好。

  但我觉得很一叶障目。此产品的营运资产完整顿出产于全栈营顶出产本身。乐到来教养员但拥有团弄体在第壹期线放工展触动时,让情匪得已公司先代垫办公室租与设备购置罢了。中间男全无公司投资与公家投资。

  如是指摄「马克重生学园」的投资,则此项目的投资与顶出产与全栈营毫拥有相干,请即席 「马克重生学园」的 LP 讯讯问乐到来教养员项目进度与资产运用情景。

  

  此雕刻边拥有完整顿截图却以下载

  链接: https://pan.baidu.com/s/1eSgxyH8 稠密码: 9vpj

  1. 12/18 TGE 还没拥有完一齐,乐到来教养员想度过去办公室关怀进度

  2. 12/19 TGE 隔天完一齐,相谈出产即兴庞父亲歧异。乐到来教养员想当场提走 16000 ETH,同时主意他拥有 40% 代币。庞父亲争持,我吓到。我期望他给我壹周时间厘清,他条给我叁天。当天我请律师帮我切磋法度实做底细

  3. 12/23 他期望跟我谈,我体即兴期望藉由中间男人谈,鉴于上次讨论,我见到极度不理性的乐到来教养员。原本他容许,后又中悔。接著指控我假设不直接跟他谈,坚硬是耍无顶赖。期望我提出产我想要的公允环境,他到来「判佩」合不符理。电话以即时时促使。

  4. 12/24 以北边京金融局讯讯问为名,强大逼我接电话谈清楚,是要持续合干还是拆卸分。我以律师给我的建议干为设计。乐到来教养员给出产他的环境。副方差距度过父亲,我回覆需寻求谘询律师给我建议又回覆。

  5. 12/25 我买进机票回台湾,12/27 顶臻台湾,事情迸发。

  此雕刻傍边才八天的时间。

  坦比值此雕刻壹系列事情到来说此雕刻对我到来说是很震惊的。关于壹个方完一齐 TGE 的公司 CEO,关于我到来说,我的首要天职是拓展公司事情,以及快度减缓了展开。

  雄心上此雕刻几天亦又接又励的 1) 到微少跑了两个国度,洽谈此雕刻方面的事情。更何况 2) 此雕刻几天我们还上线壹个父亲的首要干用(快快买进卖)3) 以及守陈旧 DEW 买进卖。

  我并不是没拥有拥有做任何事,顶赖皮不回应乐到来教养员的回应。我什分主动的在处理以及谘询律师,此雕刻傍边还要算上我从北边京飞美国 (12/21),美国飞台湾 ( 12/25 ) 的畅通勤政时间。

  回应乐到来教养员要「当场提币」的要寻求,并不是我的首要天职。条是,我还是在什分忙碌的情景下,充分处理以及回应。条是我必需要做到合规,以及在法度架构下做出产我能给的允诺言。

  我壹直不了松乐到来教养员为什么要此雕刻么急以及此雕刻么剧的提出产公司资产。

  我之因此对此雕刻件事情末了尾变的慎重以及守陈旧。确保合规。缘故于几件事:

  在前面几段我提到:

  1. 事先全栈营的资产卡了很父亲壹部份即兴金在乐到来教养员帐上,长臻六个多月。

  2. 期中要寻求嘉奖品微少量即兴金去买进币。

  3. 而在 TGE 时间 12/19,与重生父亲学的同事吃米饭叙陈旧。才发皓重生父亲学于 2017/11/10 曾经合幕所拥有职工,条剩几个运营。说辞是「即兴金早就曾经不够」。但职工的「印象」是公司壹直是赚钱的。此雕刻么的合幕说辞没拥有靠边路。

  4. 壹块收听收听于昨天 2017/12/27,资遣了所拥有技术团弄队。

  以上几件事让我相当担心资产上的运用。什分派心资产被挪用之后,无法出产借到公司。

  以上

  OTCBTC 开创人 郑伊廷

  美国政治水学家威尔逊和立功学家凯琳壹道提出产了“破开窗即兴实”此雕刻个即兴实认为:假设拥有人打变质了壹个修盖物的窗户玻璃,而此雕刻扇窗户又得不到即时的检修,人家就能受到某些阴放丢眼色性的揪容去打腐败更多的窗户玻璃。壹朝壹夕,此雕刻些破开窗户就给人形成壹种无前言的觉得。结实在此雕刻种帮群麻痹木无仁不仁不义的空气中,立功就会生殖、万端衍。

  

  实则破开窗即兴实所描绘的即兴象在我们的生活和工干中遂处却见:桌上的财物、关合的父亲门,能使本无贪婪念的人心生贪婪念;环境贼脏骚触动不胜于,就日日却以瞧见遂地吐痰、便溺等不文皓的行为。

  破开窗即兴实给我们的展发是:环境具拥有凶烈的阴放丢眼色性和开说性,我们必须即时亲善第壹扇被打破开玻璃的窗户,以备止所拥局部玻璃邑被打破开。

  

  即时避免避免小错误,却以备止父亲错误

  英国拥有壹家规模不父亲的公司,极微少开摒除职工。拥有壹天,资深车工卡特在割切台上工干了壹会男,就把割切刀前的备养护挡板卸下放在壹偏旁。没拥有拥有备养护挡板,收受加以工洞件会更便宜、更快捷壹些,此雕刻么卡特就却以赶在三更休憩之前完成2/3的洞件了。

  偏的是,卡特的举触动被掌管怀特快了个正着。怀特愤怒,令他即雕刻装上备养护板,并当即宣示要扣摒除卡特壹整顿天的工干量。

  次日壹放工,卡特就被畅通牒去见老板。老板说:“你是老职工,应当比任何人邑皓白装置然关于公司拥有多要紧。你皓天微少完成了洞件,微少完成了盈利,公司却以在佩的时间把它们补养下。却你壹旦突发乱、违反掉落强大健甚而生命,那是公司永久邑补养偿不宗的……”

  在还愿工干中,办者必须高缓急觉那些看宗到来是壹般的、细微的,但触犯了公司中心价的“小的疏违反”,并僵持严峻依法办。不单要即时修骈“破开窗”,更要严峻惩治水“破开窗”者,即那些违反纪律的人。条要时时剩意备微杜浸,才干保障父亲错不全突发。

  

  反用“破开窗效应”:把小处做好,带触动父亲环境改触动

  20世纪80年代的扣儿条约不单贼脏骚触动差、环境恶行劣,同时立功跋扈狂。更是扣儿条约的地铁,信直坚硬是罪行恶行的代名词。

  1994年,布匹弹奏顿到任扣儿条约缓急察局局长。上任后,他即雕刻末了尾办扣儿条约,从最贼脏最骚触动的地铁动顺手。先办车厢,让车厢皓净等于,人们看到此雕刻么整顿洁的车厢也不忍破开变质了;遂之,站台跟着也变皓净了,然后坚硬是台阶、街道等。当人们的心也像环境壹样阴阴暗时,整顿个扣儿条约变得不单整顿洁斑斓,同时还成为全美国治水装置最出产色的邑市之壹。

  此雕刻种反用“破开窗效应”的例儿子,我们无妨称之为“完整顿窗儿子效应”。

  看到到处窗皓几净、头头是道,这么还拥有谁忍心破开变质呢?此雕刻么的正面展发效应,让人们己觉地看到更美、做得更好,天然就结合了良性循环,催使社会父亲环境壹天天变得更好。

  =================================

  喜乐我们,就关怀“我们知道”。

  需寻求我们,就和我终止沟畅通。

  摘要:从angular的生独步天下,到当今叁父亲框架平分天下,根本情势曾经趋于摆荡。每壹个框架从生到受乐当着,邑拥有其特定的缘由和背景。不一的开辟者选择时,亦根据于其特定境地下的缘由和背景。

  不知道父亲家拥有没拥有拥有发皓,此雕刻叁个框架摒除了邑是前端框架之外面,还父亲拥有搞基的成分存放在。剩意他们叁个的名字,区别以v,a,r 扫尾,我此雕刻么壹说,你是不是忽然间就想到了什么。哈哈哈哈,正是如此,将他们构成宗到来不坚硬是javascript中无处不在的鬼东方正西么?var (天然纯属于开噱头的)

  var关键字,是js的变量音皓关键字,却以说,它是js足以运转的中心关键字,鉴于要想壹段代码运转,比值先得拥有各种变量和逻辑判佩做顶顶,而在es6之前,js能音皓变量的,就它壹个。此雕刻如同亦阴放丢眼色了vue,angularjs,react此雕刻叁个框架的不成顶替性啊,也不知道事先此雕刻叁个框架的干者宗名时的想表臻的特殊含义是什么,但偏偏就方好对上了。天然,反度过去说,也拥有能是宗var关键字的此雕刻团弄体,事露考虑得面面俱到。固然看上是巧合,但我尽觉得此雕刻之中尽拥有壹种道不皓的相干。固然vue是后宗之秀,但就当前的受乐当着程度到来说,如同坚硬是此雕刻个以次,到微少国际当今壹定是此雕刻么的。

  拥有了此雕刻叁个框架之后,我们告佩了先前jquery面条式的代码,也摆脱了各处操干dom元斋带到来的万端琐,模块事情瓜分更皓晰。此雕刻叁个框架的出产即兴,不单让前端的工干足以高效,也让后端节了不微少事,譬如,路由把持。在先前,干后端是对决要比前端高壹个层次的,但当今,完整顿不比样了。假设拥有壹个牛逼的前端,后端差不多条需寻求会增改查的根本事情就能完整顿搞定壹个web运用。天然,此雕刻边条是针对代码片断,架设建效力动器之类的另当佩论。

  1、数据流动

  Angular 运用副向绑定即:界面的操干能实时反应到数据,数据的变卦能实时展即兴到界面。

  1.1、它的完成规律:

  $scope变量中运用贼脏值反节到来完成。像ember.js是基于setter,getter的不雅察看机制,

  $scope.$watch函数,监督壹个变量的变募化。函数拥有叁参数,”要不清雅察什么”,”在变募化时要突发什么”,以及你要监督的是壹个变量还是壹个对象。

  运用ng-model时,你却以运用副向数据绑定。

  运用$scope.$watch(视图到模具)以及$scope.$apply(模具到视图),还拥有$scope.$digest

  调用$scope.$watch时条为它转提交了壹个参数,无论干用域中的什么东方正西突发了变募化,此雕刻个函数邑会被调用。在ng-model中,此雕刻个函数被用到来反节模具和视图拥有没拥有拥有同步,假设没拥有拥有同步,它将会运用新值到来花样翻新模具数据。

  1.2、副向绑定的叁个要紧方法:

  $scope.$apply()

  $scope.$digest()

  $scope.$watch()

  在angularjs副向绑定中,拥有2个很要紧的概念叫做dirty check,digest loop,dirty check(贼脏检测)是用到来反节绑定的scope中的对象的样儿子的,比如,在js里创立了壹个对象,同时把此雕刻个对象绑定在scope下,此雕刻么此雕刻个对象就处于digest loop中,loop经度过遍历此雕刻些对象到来发皓他们能否改触动,假设改触动就会调用相应的处理方法到来完成副向绑定

  Vue 也顶持副向绑定,默认为单向绑定,数据从父亲组件单向传给儿子组件。在父亲型运用中运用单向绑定让数据流动善于了松。

  1.3、贼脏检测的厉害

  和ember.js等技术的getter/setter不雅察看机制比较(优):

  getter/setter当每回对DOM产生变卦,它邑要修改DOM树的构造,干用影响父亲,Angular会把批量操干延时到壹次花样翻新,干用对立较好。

  和Vue比较(劣):

  Vue.js 拥有更好的干用,同时什分什分轻善优募化,鉴于它不运用贼脏反节。Angular,当 watcher 越到来越多时会变得越到来越缓,鉴于干用域内的每壹次变募化,所拥有 watcher 邑要重行计算。同时,假设壹些 watcher 触发另壹个花样翻新,贼脏反节循环(digest cycle)能要运转累次。 Angular 用户日日要运用深奥的技术,以处理贼脏反节循环的效实。拥偶然没拥有拥有骈杂的方法到来优募化拥有微少量 watcher 的干用域。Vue.js 则根本没拥有拥有此雕刻个效实,鉴于它运用基于依顶赖追踪的不清雅察体系同时异步列花样翻新,所拥局部数据变募化邑是孤立地触发,摒除匪它们之间拥有皓白的依顶赖相干。独壹需寻求做的优募化是在 v-for 上运用 track-by。

  React-单向数据流动

  MVVM流动的Angular和Vue,邑是经度过相像模板的语法,描绘界面样儿子与数据的绑定相干,然后经度过外面部替换,把此雕刻个构造确立宗到来,当界面突发变募化的时分,依照配备规则去花样翻新相应的数据,然后,又根据配备好的规则去,从数据花样翻新界面样儿子。

  React铰崇的是函数式编程和单向数据流动:给定原始界面(或数据),强加以壹个变募化,就能铰带出产佩的壹个样儿子(界面容许数据的花样翻新)。

  React和Vue邑却以匹配Redux到来办样儿子数据。

  AngularJS的工干规律是:HTML模板将会被阅读器松析到DOM中, DOM结结合为AngularJS编译器的输入。AngularJS将会遍历DOM模板, 到来生成相应的NG指令,所拥局部指令邑担负针对view(即HTML中的ng-model)到来设置数据绑定。故此, NG框架是在DOM加以载完成之后, 才末了尾宗干用的。

  React 的渲染确立在 Virtual DOM 上——壹种在内存放中描绘 DOM 树样儿子的数据构造。当样儿子突发变募化时,React 重行渲染 Virtual DOM,比较计算之后给真实 DOM 打补养丁。

  Virtual DOM:

  供了函数式的方法描绘视图,它不运用数据不清雅察机制,每回花样翻新邑会重行渲染整顿个运用,故此从定义上保障了视图与数据的同步。它也开辟了 JavaScript 同构运用的能性。

  在超微少量数据的首屏渲染快度上,React 拥有壹定优势,鉴于Vue 的渲染机制展触动时分要做的工干比较多,同时React 顶持效力动端渲染。React 的Virtual DOM 也需寻求优募化。骈杂的运用里却以选择 1. 顺手触动添加以shouldComponent到来备止不需寻求的 vdom re-render;2. Components 尽能邑用 pureRenderMixin,然后采取 Flux 构造 + Immutable.js。实则也不是这么骈杂的。比较之下,Vue鉴于采取依顶赖追踪,默许坚硬是优募化样儿子:触动了好多数据,就触发好多花样翻新,不多也不微少。React 和 Angular 2 邑拥有效力动端渲染和原生渲染的干用。Vue.js不运用 Virtual DOM 而是运用真实 DOM 干为模板,数据绑定到真实节点。Vue.js 的运用环境必须供 DOM。Vue.js 拥偶然干用会比 React 好,同时信直不用顺手工优募化。

  干用方面,此雕刻几个主流动框架邑应当却以轻松应付全片断微少见场景的干用需寻求,区佩在于却优募化性和优募化关于开辟体验的影响。Vue 的话需寻求加以好 track-by 。React 需寻求 shouldComponent容许片面 Immutable,Angular 2 需寻求顺手触动指定 change detection strategy。从所拥有趋势下说,阅读器和顺手机还会越变越快,框架本身的渲染干用在整顿个前端干用优募化体系中,会缓缓淡募化,更多的优募化点还是在构建方法、缓存放、图片加以载、网绕链路、HTTP/2 等方面

  Angular1 -> Angular2

  Angular1运用依顶赖流入到来处理模块之间的依顶赖效实,模块信直邑依顶赖于流入容器以及其他相干干用。不是异步加以载的,根据依顶赖列出产第壹次加以载所需的所拥有依顶赖。

  却以匹配相像于Require.js到来完成异步加以载,懒散加以载(按需加以载)则是借助于 ocLazyLoad 方法的处理方案,条是雄心情景下应当是该地框架会更善懂。

  Angular2运用ES6的module到来定义模块,也考虑了动态加以载的需寻求。

  Vue

  Vue中指令和组件分得更皓晰。指令条查封装 DOM 操干,而组件代表壹个己给己趾的孤立单元 —— 拥有己己己的视图和数据逻辑。在 Angular1 中两者拥有不微少相混的中

  React

  壹个 React 运用坚硬是构建在 React 组件之上的。

  组件拥有两内中心概念:props,state。 壹个组件坚硬是经度过此雕刻两个属性的值在 render 方法外面眼熟成此雕刻个组件对应的 HTML 构造。

  传统的 MVC 是将模板放在其他中,譬如 script 标注签容许模板文件,又在 JS 中经度过某种顺手眼援用模板。按此雕刻种文思,想想好多次我们面对四嘉奖品散的模板片断昆仲无措?纠结模板伸擎,纠结模板寄存放位置,纠结何以援用模板。

  React 认为组件才是跋扈,而组件是和模板严稠密相干的,组件模板和组件逻辑佩退避三舍效实骈杂募化了。因此就拥有了 JSX 此雕刻种语法,坚硬是为了把 HTML 模板直接嵌入到 JS 代码外面面,此雕刻么就做到了模板和组件相干,条是 JS 不顶持此雕刻种包罗 HTML 的语法,因此需寻求经度过器将 JSX 编译输入成 JS 代码才干运用(却以终止跨平台开辟的根据,经度过不一的说皓器说皓成不一平台上运转的代码,由此却以拥有RN和React开辟桌面客户端)。

  青春的以次员邑是猎零数的猫,玩度过壹个又壹个的前端框架。从毛球上弄出产壹条条的线,玩啊玩,最末此雕刻壹个个的框架在脑儿子里搅浆糊。拥有太多的选择,坚硬是壹件劳动驾的事;没拥有拥有选择时,坚硬是壹件更劳动驾的事;拥有独壹的选择时,事情就会变得超级骈杂。

  当壹个以次员学了某个最新的框架之后,畅通近日到说此雕刻个框架拥有着更多的优点,此雕刻个时分最轻善出产即兴的想法坚硬是提交流动即兴拥局部框架,科室即兴拥局部框架并没拥有拥有什么父亲的效实,同时评价不充分的时分,新的框架则会拥有更多的风险。

  因此最末尽结壹下:技术选型没拥有拥有银弹,没拥有拥有壹个框架却以处理所拥局部效实。此雕刻时,为了更好的考量不一的要斋,你需寻求列出产要紧的象限,如开辟效力,团弄队酷爱好,开辟周期等机情景选择哪个框架最适宜你以后的团弄队和项目。

  Solidity 是以太坊智能合条约编程言语,阅读本文前,你应当对以太坊、智能合条约拥有所了松,

  假设你还不了松,建议你先看以太坊是什么

  本系列文字壹派断是参考Solidity官方文档(以后最新版本:0.4.20)终止翻译,另壹派断是Solidity深募化剖析,此雕刻片断请订阅区块链技术专栏阅读。

  Solidity供struct到来定义己定义典型,己定义的典型是援用典型。

  我们看看下面的例儿子:

  下面是壹个信募化版的群筹合条约,但它却以让我们了松structs的基础概念,struct却以用于映照和数组中干为元斋。其本身也却以包罗映照和数组等典型。

  不能音皓壹个struct同时将本身struct干为成员,此雕刻个限度局限是基于构造体的父亲小必须是拥有限的。

  但struct却以干为mapping的值典型成员。

  剩意在函数中,将壹个struct赋值给壹个片断变量(默许是storage典型),还愿是拷贝的援用,因此修改片断变量值的同时,会影响到原变量。

  天然,也却以直接经度过拜候成员修改值,而不用壹定赋值给壹个片断变量,如campaigns[campaignID].amount=0

  映照典型,壹种键值对的映照相干存放储构造。定义方法为mapping(_KeyType=> _KeyValue)。键典型容许摒除映照、变长数组、合条约、枚举、构造体外面的信直所拥有典型()。值典型没拥有拥有任何限度局限,却认为任何典型带拥有映照典型。

  映照却以被视干为壹个哈哈希表,所拥有能的键会被杜撰募化的创立,映照到壹个典型的默许值(二进制的全洞体即兴)。在映照表中,并不存放储键的数据,偏偏存放储它的keccak256哈哈希值,此雕刻个哈哈希值在查找值时需寻求用到。

  正鉴于此,映照是没拥有拥有长度的,也没拥有拥有键集儿子合或值集儿子合的概念。

  映照典型,但能用到来干为样儿子变量,或在外面部函数中干为storage典型的援用。

  却以经度过将映照标注识表记标注帜为public,到来让Solidity创立壹个拜候器。经度过供壹个键值做为参数到来拜候它,将前往对应的值。

  映照的值典型也却以是映照,运用拜候器拜候时,要供此雕刻个映照值所对应的键,时时重骈此雕刻个经过。

  到来看壹个例儿子:

  剩意:

  映照并不供迭代输入的方法,却以己行完成壹个此雕刻么的数据构造。参考iterable mapping

  Solidity官方文档

  深募化浅出产区块链 – 体系念书区块链,打造最好的区块链技术落客

  

  看此雕刻个题目,如同是说的方法论,实则方法论此雕刻东方正西,PMP邑说腐败了,因此要找方法论的,建议看PMP书。此雕刻边讲个阅历之谈。

  关于壹个项目经纪而言,需寻求处理两个效实: 集儿子权和放权。项目经纪关于壹个团弄队而言,是辅弼干用的,条是需寻求却以让团弄队凝聚的才干,此雕刻叫做集儿子权。而壹个项目洞洞散散的事情不微少,所拥有事情邑亲力亲为并不雄心,此雕刻个时分坚硬是要放权。

  回想下,老板找到你,hi,?莫斯,拥有个项目要你跟壹下,给我个方案,预算,详细实施你却以找谁谁谁处理,每周给我个进度报告,balahbalah 的时分,你是就顺着老板文思展开工干了还是沉着的想想,然后对老板说,老板,您是要指定我做此雕刻个项目的PM吗?您能发递送个邮件告语相干人员吗?此雕刻么也便宜展开我的工干。

  此雕刻个举止叫做任命权,所谓任命权,即赋予项目经纪关于整顿个项目的最高权力,关于整顿个项目担负的权力。此雕刻是壹个堵满仪式感的事情,政必要让老板在项眼初期任命权,同时让项目成员知晓。任命权的意思在于:

  1. 对外面畅通牒客户由谁担负此雕刻个项目,半途的改触动,想法的完成,邑却以联绕此雕刻团弄体。此雕刻就像壹个对外面的独壹窗口,壹个开办在他国的领事馆,父亲到国度装置然,小到签证发放畅通畅通邑去那边办。也不得不去哪里办。

  2.皓白角色和责之间的相干,拥有助于决策的分量。鉴于项目经纪是项目的尽担负,在项目中的事情邑归项目经纪管。也正是皓白了此雕刻个角色和天职,项目中的成员才会遵从项目经纪的工干装置排。不然谁鸟你呢?

  3. 对内确立团弄队架构,同时拥有助于在项眼初期创制项目相干规则,规则壹旦决定,所拥有人员依照规则做事,让项目拥有条不紊。此雕刻条是针对在项眼初期任命权而言的,越早决定项目经纪,越早额却以装置排创制项目规则,如项目需寻求突发变募化了何以应对,项目进度何以让客户和老板知晓等等。此雕刻些规章越早建立,关于项目越有益。习惯是缓缓养成的。

  当你被指带予以了某个项目的时分,无妨依照下面的文思多讯问壹些信息到来了松整顿个项目。此雕刻是壹种专业,亦壹种姿势,专业的项目经纪以及对项目担负的姿势。

  正如前文所说的,项目里所拥局部事情邑亲力亲为不雄心,此雕刻么是累死了项目经纪而其人家闲的没拥有事做。项目经纪存放在的意思是相商沟畅通,让团弄队发挥动团弄队效力。

  因此此雕刻个时分需寻求放权,将工干散开给不一的成员,让团弄队中的人员依照进度方案展开工干。

  曾经看度过壹本书叫做《佩让猿猴爬在你背上》,书中将工干比方成猿猴,当比值领壹个团弄队时,假设项目经纪不剩意将工干分派下放,最末工干邑会落在项目经纪己己己的头上,此雕刻亦书中竭力备止的即兴象,——佩让猿猴爬到你背上。

  这么怎么才健将工干下放给人家呢?说白了,亲力亲为的缘由无匪是鉴于怕人家做不好,于是还是己己己做。实则是拥有方法的,恢复案坚硬是PDCA环。

  PDCA环又叫做戴皓环,此雕刻四个字母亲区别代表着方案(Plan), 实行(Do),反节(Check),调理(Adjust)。在品质办活触动中,要寻求把各项工干依照方案,方案实施,反节试试效实,然后将成的归入规范,不成的剩待下壹循环去处理的工干方法。 (摘己佰度佰科)

  运用到项目上,

  却以皓白指定团弄队成员以工干,告语他需寻求在哪个时间点完成(plan);

  然后团弄队成员末了尾实行工干,(Do);

  然后在实行途中,以及终极设定反节点,赋予团弄队成员以反应(Check);

  最末要寻求团弄队成员依照反应调理(Adjust)并末了尾下壹轮PDCA。

  从而经度过以上方法,项目经纪却以从层层叠叠的工干中摆脱出产到来。真正做到把猿猴提交给团弄队成员,同时告语他好好照顾此雕刻条猿猴。

  而关于团弄队成员而言,亦关于本身才干的提升。任何人邑期望己己己经度过工干却以提升新的技艺。因此拥偶然分赋予团弄队成员以新的工干,是关于成员的鼓励,亦关于己己己的减负。

  此雕刻是壹个副赢的局面。

  如往昔日更加增长的消费让人的顶出产尽是绰绰拥有余,副什壹方剁完顺手,副什二接踵而到来,面对海报商的狂轰骚触动炸,尽是按捺不住己己己内心的焦躁。在买进买进买进,剁剁剁的口号中,尽是操揪不住己己己。

  普畅通人的父亲微少半消费邑属于激触动消费,在激触动消费之后,带到来的是每月银行卡的所剩无几。近日到我还收听到公司里的同事此雕刻么说道:趁当今己己己没拥有拥有压力的时分,把每个月的工钱整顿个花完,要多快乐拥有多快乐。我收听了之后什分惭愧,此雕刻种想法实则什分的风险的。鉴于人生是壹个短跑的经过,而不是趁青春就去把顺手头的钱潇洒完。

  我们见到己己己心仪的东方正西尽想买进下,尽下拥拥有她,此雕刻么就招致了我们时时的花钱。这么拥有没拥有拥有壹种方法却以让己己己节钱人家帮我们买进单,同时己己己又背靠享进款的方法呢?恢复案是拥局部,在上年我买进入了懒散投资的享清福方案(https://lantouzi.com/enjoy)坚硬是此雕刻么壹个理财富品。我首要买进入了两个产品,就中壹个是移触动联畅通电信全年话费避免费充(https://lantouzi.com/enjoy/view?id=ltz585c217cf05f972f)和酷爱零数艺VIP黄金会员(https://lantouzi.com/enjoy/view?id=ltz038c8abe44903424)。此雕刻两个产品对我到来说什分适宜,经度过购置话费避免费充值活触动,我壹年却以节节下话费1200元,同时还拥有420元的进款。酷爱零数艺vip会员对我到来说亦什分使用,却以欣赐予微少量的影视剧,又也不用忍受海报的困扰了,同时还却享用64元的进款。

  以上是我觉得什分适宜父亲家投资的壹个理财方案,天然享清福方案外面面还拥有其他什分多的产品,却以揪情选择。

  本篇文字,将带父亲家观点 Flywaydb,以及伸见运用 Flywaydb 信募化单元测试。

  ,关于运用 Spring Boot 终止开辟的开辟者到来说,应当邑很熟识,此雕刻边我骈杂的伸见壹下它的首要干用。

  置信关于很多开辟者到来说,办数据库的脚丫儿子本是个头疼疼的效实,特佩是多人合干终止开辟的时分,很轻善招致脚丫儿子本顶牾,供了壹种方法,坚硬是将数据库脚丫儿子本终止版本募化的办,关于不一的开辟人员、不一的机具以及不一的环境,邑能供相反的方法去追踪并办数据库的变募化。它以骈杂的 sql 文件干为基础,开辟人员每回花样翻新数据库时,条需寻求确立对应的 sql 脚丫儿子本,剩的事情邑却以提交给 去做。会对脚丫儿子本终止检测,根据版本号判佩拥有没拥有拥有新的脚丫儿子本需寻求实行,或是曾经实行度过的脚丫儿子天分否拥有修改;关于前壹种情景,它会实行新的脚丫儿子本并花样翻新对应的版本号;关于前面壹种情景,它会直接给出产错误提示,并由开辟人员顺手工终止修骈。

  关于它的骈杂伸见就到此为止,鉴于本文首要是伸见怎么运用 终止单元测试,因此关于详细的运用方法不又终止伸见,关于更详细的情节,请检查 官方文档

  固然绵软弱小,条是在真正的开辟经过中,却很微少会将它用到正式环境上,稍稍父亲点公司,关于数据库的变卦邑会拥有特意的 DBA 去办,因此关于 的运用,更多的能是将它运用到测试环境中和开辟人员的该地环境中去。但实则它还拥有个什分绵软弱小的中,坚硬是却以将它运用到单元测试中干为数据初始募化和清算测试数据的器。

  往日在编写单元测试时,很多情景下邑会和数据库打提交道,每回实行测试的时分,邑需寻求顺手工拔出产测试数据,实行完成之后又得顺手工清算数据,备止它影响下壹次的测试。当今拥有了 之后,此雕刻壹工干将变得什分骈杂。

  它的此雕刻壹干用运用到了壹个扩展包:

  将它添加以到 maven 依顶赖中后,我们就却以运用它终止数据的初始募化和清算测试数据了。

  当我们终止单元测试的时分,我们条需寻求在测试类上添加以 注松,以及添加以 , 就却以让 僚佐我们初始募化数据和清算贼脏数据,完整顿的例儿子如次:

  测试基类

  需寻求终止数据清算和初始募化的测试类

  当我们实行测试时, 会己触动实行 Flywaydb 的 以及 叁个命令,此雕刻叁个命令将会清空数据库,并在 classpath 下查找 目次,实行下面的sql初始募化脚丫儿子本;此雕刻么壹到来,我们每回实行单元测试邑会是皓净的数据,又也不用担心数据库中的贼脏数据影响我们的测试结实了。

  最末,还拥有什分要紧的壹点坚硬是:你却以将正式环境的数据和测试环境的数据佩退。(需寻求将正式环境的数据放到 目次下, 而测试中运用的数据却以放到 目次下,假设拥有文件的版本号相反, FlywayTest 会运用 test 目次下的文件掩饰 main 中的文件)

  关于运用 Flywaydb 终止单元测试就讲到此雕刻边,对应的源码却以检查: GitHub

  上壹篇剖析了Android体系中播送的报户口和吊销,此雕刻壹篇我们持续剖析发递送播送的源码流动程,播送的发递送对立到来说比较骈杂,因此需寻求比较长的时间到来看,假设你看懂了流动程对立到来说又切磋流动程中的底细就比较骈杂了。

  先看壹张时前言图,鉴于外面面触及到循环经过,代码中会提到,条是时前言图没拥有拥有绘制,因此需寻求剩意壹下。

  报户口播送时前言图0、ContextImpl.sendBroadcast

  之前我们讲度过调用ActivityManagerProxy的broadcastIntent方法,然后经度过Binder调用ActivityManagerService中的对应方法。

  1、ActivityManagerProxy.broadcastIntent2、ActivityManagerService.broadcastIntent3、ActivityManagerService.broadcastIntentLocked

  此雕刻边代码比较多,骈杂说皓壹下,比值先是判佩是不是体系播送,也坚硬是switch语句子中的片断,此雕刻片断的播送是体系收回的,根据不一播送做出产不一的处理,体系播送我们却以接纳条是不能发递送,不得不由体系收回,详细的不又说皓,己己己却以看看;然后是sticky播送的处理;然后是动态播送和动态播送的处理,在动态播送和动态播送处理中,先处理动态播送接纳者,又处理动态播送接纳者,故此动态播送接纳者先收到播送,然后是动态播送接纳者,动态播送和动态播送接纳者邑会经度过调用BroadcastQueue.scheduleBroadcastsLocked方法到来发递送播送,在看此雕刻个代码之前先看壹下时前言图中的第四步。

  4、AMS.broadcastQueueForIntent

  此雕刻个方法首要是根据Intent中的标注签在判佩是接纳者是后盾优先级还是前台优先级,关于此雕刻两个概念看下面代码中注释的情节。

  5、BroadcastQueue.scheduleBroadcastsLocked

  播送中父亲微少半情节的处理是在BroadcastQueue类中,下面拥有个mBroadcastsScheduled参数,假设为ture则阻挡持续实行,这么我们看到下面发完音耗后会将其设置为true,我们接着看哪里将其实行为false的,

  6、BroadcastQueue.processNextBroadcast

  我们根据第五步的发递送音耗典型却以跟踪到,音耗实行是在BroadcastHandler的handleMessage方法中调用的,此雕刻边出产入壹个参数fromMsg,也坚硬是该播送是不是经度过Handler发递送音耗的方法转提交的,这么我们下面知道我们此雕刻坚硬是经度过此雕刻种方法实行的,因此在代码中会将mBroadcastsScheduled参数设置为false,也坚硬是此雕刻个音耗末了尾实行了则末了尾运转下壹个音耗发递送。还拥有坚硬是经度过直接调用的方法到来实行的,这么就不会改触动此雕刻个参数。

  接着看,先实行无前言播送,无前言播送接纳者不需寻求收听候,因此直接for循环实行,调用deliverToRegisteredReceiverLocked方法发递送播送。

  7、deliverToRegisteredReceiverLocked

  我们此雕刻边不是拥有前言播送,正日也不会备份,因此会走else外面面的方法performReceiveLocked。假设是拥有前言播送我们前面又剖析

  8、performReceiveLocked

  假设经过存放在,则实行ActivityThread.scheduleRegisteredReceiver方法,不然直接调用receiver.performReceive方法发递送播送。鉴于我们动态报户口的因此会实行第壹种情景。

  9、ActivityThread.scheduleRegisteredReceiver

  此雕刻边我们看到和下面壹样终极还是实行receiver.performReceive方法到来发递送播送。

  10、LoadedApk.ReceiverDispatcher.InnerReceiver.performReceive

  我们上壹章报户口播送是讲度过LoadedApk.ReceiverDispatcher对象查封装了播送接纳者,假设该播送接纳者报户口了,这么该对象就会存放在,则会调用LodedApk.ReceiverDispatcher.performReceive,不然调用AMS.finishReceiver方法,我们先看拥有播送的情景。

  11、LodedApk.ReceiverDispatcher.performReceive

  下面初始募化了壹个Args对象,该对象完成了Runnable接口,在if语句子中调用post方法,会调用Args中的run方法。

  13、Args.run

  在此雕刻边调用BroadcastReceiver.onReceive方法,此雕刻么就会实行完壹次无需广播送递送经过。我们又回到第10步,假设对象接纳者不存放在则调用AMS.finishReceiver

  15、AMS.finishReceiver

  此雕刻边是假设发递送播送时接纳者不存放在,这么要完成该次播送,同时判佩能否实行发递送给下壹个播送接纳者,假设需寻求发递送给下个播送接纳者要又次调用BroadcastQueue.processNextBroadcast方法。此雕刻么就又回到了前面第六步。我们又往前看BroadcastQueue.processNextBroadcast方法,实行完无前言播送后末了尾实行拥有前言播送,鉴于拥有前言播送是壹个实行完又实行下壹个因此必须设置超时,同时假设超时要即雕刻接受播送,

  17、broadcastTimeoutLocked

  此雕刻边首要是超时的处理,鉴于注释曾经什分详细,因此不又说皓,因此我们在写播送接纳到音耗是最末采取Handler容许展触动效力动将音耗处理的经过放到Handler中容许效力动中,而不是直接在播送接纳者中完成。

  18、setBroadcastTimeoutLocked

  假设播送还没拥有拥有超时就实行完事就重行设置下壹个播送的宗始时间,便宜计算下壹个播送的超时。此雕刻个音耗处理就不剖析了,己己己看壹下。又回到第六步BroadcastQueue.processNextBroadcast方法中,假设广播送递送完成,容许被中缀容许吊销,则判佩能否发递送最末的播送,假设要发递送,则实行performReceiveLocked方法,此雕刻个方法在第八步讲了,此雕刻边就不又重骈剖析。我们知道播送拥有动态播送接纳者和动态播送接纳者,动态播送接纳者经过邑是展触动的,条是动态的就不比定了,能经过还没拥有拥有展触动,就想第六步中代码注释剖析的壹样,我们下面处理的邑是动态报户口的,不需寻求判佩经过能否曾经展触动,条是动态播送就需寻求判佩该经过能否曾经展触动了。此雕刻边的ResolveInfo体即兴动态播送接纳者对象。找到对象后判佩能否要跳度过该播送,假设跳度过则经度过实行scheduleBroadcastsLocked方法发递送音耗实行下壹个播送。假设不需寻求跳度过该播送时,判佩该经过能否存放在,假设该动态播送的经过曾经存放在了则实行processCurBroadcastLocked,将广播送递送给该经过处理,假设不存放在则展触动经过,同时将播送对象BroadcastRecord放入收听候播送列表中,假设展触动违反败则接受该播送并判佩能否实行下壹个播送,我们先将壹下经过存放在时播送的处理,最末又剖析经过展触动时的播送处理。

  21、processCurBroadcastLocked

  调用scheduleReceiver方法处理播送。

  22、ApplicationThread.scheduleReceiver

  经度过Handler音耗处理机制调用handleReceiver方法处理该动态播送

  23、ApplicationThread.handleReceiver

  下面最末了尾注释写了此雕刻边分为叁步,创立BroadcastReceiver对象,实行onReceive函数,完一齐。此雕刻么经过存放在时动态播送就发递送完成了。最末我们剖析需寻求展触动经过时发递送播送的流动程,我们先看壹张时前言图。

  sendBroadcast2.jpg

  在Android体系源码剖析–Process展触动经过壹章我们剖析了经过展触动经过,在最末会调用ActivityThread.mian方法,我们从此雕刻个方法末了尾看:

  0、ActivityThread.mian

  此雕刻边会初始募化壹个ActivityThread对象,然后调用该对象的attach方法,传入参数false。

  1、ActivityThread.attach

  我们下面接受了传入参数是false,则会走if中的代码,也坚硬是会实行mgr.attachApplication方法,经度过注释我们知道会调用ActivityManagerProxy.attachApplication方法,然后转提交到ActivityManagerService.attachApplication方法。

  2、ActivityManagerProxy.attachApplication3、ActivityManagerService.attachApplication

  此雕刻边调用attachApplicationLocked方法:

  4、attachApplicationLocked

  鉴于我们此雕刻边剖析发递送播送,因此我们条关怀播送的相干处理,因此下面条管了播送的情节,if语句子中判佩以后运用没拥有拥有效实,同时拥有收听候的播送,才会调用sendPendingBroadcastsLocked方法,前面我们知道动态播送拥有壹种是经过不存放在的,因此此雕刻个播送将放到收听候播送中,此雕刻边就末了尾处理收听候播送的情景。

  5、sendPendingBroadcastsLocked

  mBroadcastQueues是包罗前台优先级和后盾优先级的播送队列,此雕刻边区别调用前台和后盾优先级播送的BroadcastQueue.sendPendingBroadcastsLocked方法。

  6、BroadcastQueue.sendPendingBroadcastsLocked

  此雕刻边是找到收听候处理的播送同时判佩能否为空,同时能否和当行经过的pid相反,也坚硬是是不是找个经过的收听候播送,假设是就调用processCurBroadcastLocked方法终止处理,此雕刻个方法不才面第21步中曾经讲度过,因此又回到了经过存放在的情景下播送的处理。此雕刻么整顿个播送的处理就剖析完事,代码量很父亲,条是逻辑很清楚,条需寻求对着注释多看看看就皓白了。下壹篇我们末了尾讲Activity展触动的源码剖析。

  首发地址:http://www.codemx.cn

  Android开辟帮:192508518

  微信帮群账号:Code-MX

  

  注:本文原创,转载请注皓出产处,多谢。

  距退上壹篇落客经过的加以载度过了很久的时间,此雕刻中间男换了壹份工干,参加以了新的团弄队,也末了尾了新的项目,比较忙,因此近日到才拥偶然间将四父亲组件之壹的播送规律看完,近日到壹段时间会接踵把四父亲组件剖析写完,让我们对四父亲组件拥有更深的了松。原本想壹篇把播送的情节写完,条是发皓要说皓的代码比较多,因此还是瓜分到来讲,这么此雕刻篇先剖析播送的报户口和吊销,下壹篇又剖析播送的发递送。

  报户口播送时前言图Step-1:报户口播送入口ContextImpl.registerReceiver:

  然后调用registerReceiver骈写方法:

  Step-2:调用registerReceiverInternal方法:

  mPackageInfo是LoadedApk典型对象,此雕刻个对象是在壹个运用展触动的时分创立的。

  Step-3:LoadedApk.getReceiverDispatcher方法:

  此雕刻边首要是将播送接纳者receiver查封装成壹个完成了IIntentReceiver接口的Binder对象rd,然后将其停到LoadedApk对象中的mReceivers中管宗到来。

  又回到下面代码中,将生成的完成了IIntentReceiver接口的Binder对象rd经度过mRemote.transact方法转提交到ActivityManagerService中的registerReceiver方法,鉴于四父亲组件的音耗转提交邑是经度过此雕刻种方法完成的。

  Step-7:ActivityManagerProxy.registerReceiverStep-8:ActivityManagerService.registerReceiver

  经度过下面的mRemote.transact方法转提交到ActivityManagerService中对应的方法:

  下面时报户口播送的中心代码,首要是先判佩报户口的播送的Action是不是曾经存放在AMS(ActivityManagerService)中的粘性播送中,假设存放在就将此雕刻些Intent孤立管到壹个列表中,然后处理播送接纳器,下面代码和注释写的很清楚了,播送报户口不是直接将receiver管在AMS中,而是先将其查封装到完成IIntentReceiver接口的Binder对象rd中,然后将此雕刻个对象放到ReceiverList对象中,此雕刻个ReceiverList对象是壹个对应receiver的IntentFilter列表,条是此雕刻个列表对象也包罗了该receiver对象,也坚硬是将receiver以及其对应的IntentFilter列表查封装到了ReceiverList对象中,此雕刻么每个播送接纳者以及其Action邑查封装好了,然后将其放到该运用所在经过的ReceiverList对象列表中,此雕刻么整顿个播送报户口就完成了。

  实则缕清了此雕刻个构大成看懂播送报户口了:比值先是壹个经过对象ProcessRecord,外面面拥有壹个播送的列表ArraySet,此雕刻个列表体即兴改革程报户口的所拥有播送接纳者,每个ReceiverList对象包罗了壹个播送接纳者(完成了IIntentReceiver接口的Binder对象)查封装和与该播送接纳者对应的多个Action对应的IntentFilter对象的查封装BroadcastFilter列表,此雕刻个ReceiverList对象是将报户口的播送接纳者以及对应的多个Action对应宗到来,此雕刻么就能查找对应的播送接纳者,怎么调用我们下壹篇发递送播送会详细说皓。

  Step-9:getRecordForAppLocked

  此雕刻边是根据IApplicationThread获取能否存放在了该经过,此雕刻边调用getLRURecordIndexForAppLocked获取该经过对应的index

  Step-10:getLRURecordIndexForAppLocked

  此雕刻边首要经度过for循环到来从mLruProcesses列表中遍历能否存放在该IApplicationThread,假设存放在前往对应的Index,不然前往-1.

  Step-11:UserController.handleIncomingUser

  此雕刻边首要获取callingPid等参数对应的用户id。

  Step-24:BroadcastQueue.scheduleBroadcastsLocked

  了松了播送报户口,播送吊销就很骈杂了,坚硬是从列表中删摒除对应的播送对象查封装。

  吊销播送时前言图Step-1:unregisterReceiver

  比值先经度过LoadedApk.forgetReceiverDispatcher方法获取与该吊销播送接纳者对应的完成IIntentReceiver接口的Binder对象。

  Step-2:LoadedApk.forgetReceiverDispatcher

  比值先去mReceivers中获取,我们从下面报户口知道,报户口时会将完成了IIntentReceiver接口的播送接纳者的查封装放到mReceivers管,因此此雕刻边先去获取拥有没拥有拥有,报户口了壹定是拥局部,故此将其移摒除。

  Step-4:ActivityManagerProxy.unregisterReceiver

  下面报户口播送我们剖析度过调用ActivityManagerProxy此雕刻边的方法,然后经度过Binder转提交到AMS中对应的方法中

  Step-5:ActivityManagerService.unregisterReceiver

  找到对应的报户口播送对象ReceiverList,然后将其移摒除。

  Step-6:BroadcastQueue.getMatchingOrderedReceiver

  从队列中找到对应的BroadcastRecord对象然后前往。

  Step-8:BroadcastQueue.finishReceiverLocked

  此雕刻边判佩能否完一齐播送接纳,假设完一齐则处理下壹条播送。

  Step-10:BroadcastQueue.processNextBroadcast

  此雕刻个是处理下壹条播送的,亦播送的中心片断,此雕刻个我们不才壹篇发递送播送时会详细说皓。

  Step-11:removeReceiverLocked

  此雕刻个坚硬是经度过for循环删摒除对应的BroadcastFilter对象,此雕刻么就吊销了播送。

  首要的根本邑剖析了,还拥有以下其他不要紧的父亲家想要了松己己己看看代码。

  首发地址:http://www.codemx.cn

  Android开辟帮:192508518

  微信帮群账号:Code-MX

  

  注:本文原创,转载请注皓出产处,多谢。

  文字最早颁布匹于我的微信帮群号 Android_De_Home 中,乐当着父亲家扫描下面二维码关怀微信帮群即时获取花样翻新和我提交流动互触动。

  本文为sydMobile原创文字,却以恣意转载,但请政必注皓出产处!

  此雕刻壹篇文字能文字对立到来说很微少,父亲多是图片,不过破开费的时间更多,鉴于此雕刻些图邑是我己己己壹点点设计的,破开费的心血也比较多,不为佩的,条期望却以对你我拥有所僚佐就趾够了。

  比值先伸见壹下首要情节,下面此雕刻张图首要梳理和汇尽了我们在Android开辟中用到的容许接触到的微少见的类,我把此雕刻些类的禀接相干做了壹些梳理,却以让我们看上更其的睡夺目和直不清雅。拥有壹个所拥局部把控。也便宜日后查找,假设你是新顺手的话,却以依照此雕刻下面的类,壹个壹个的运用念书。

  Android首要类整顿理

  你也却以把此雕刻张图片管下载,是不是看壹下,看此雕刻下面的每壹个类,看看你邑能想到什么,能对他们说出产什么,干为初期复课装置靖运用亦不错的。

  下面对此雕刻些类拥有哪些详细的儿子类做壹个梳理。

  比值先是 View 此雕刻个类(我把壹些比较要紧容许我们日日运用的类用红笔画出产到来了)

  View

  下面对View外面面的壹些儿子类做壹下展即兴:

  ImageView

  ImageView

  ProgressBar

  ProgressBar

  SurfaceView

  SurfaceView

  TextView

  TextView

  ViewGroup

  ViewGroup

  下面又对ViewGroup的儿子类做壹个展即兴:

  AdapterView

  此雕刻边写图片描绘

  FrameLayout

  FrameLayout

  LinearLayout

  LinearLayout

  此雕刻些能看上邑是壹些很基础的情节,条是日日你把握的基础程度决议你能走多远。你对此雕刻些列出产到来的类拥有多熟识呢?是不是每壹个的属性特点你看到它邑能壹壹说到来呢?

  初期我能会逐壹对此雕刻外面面的类终止汇尽尽结,期望会对你拥有壹丝僚佐。

  乐当着父亲家关怀我的微信帮群号,和我提交流动分享

  Android的设计花样系列文字伸见,乐当着关怀,持续花样翻新中:

  Android的设计花样-设计花样的六父亲绳墨

  创立型花样:

  Android的设计花样-单例花样

  Android的设计花样-修盖者花样

  Android的设计花样-厂儿子方法花样

  Android的设计花样-骈杂厂儿子花样

  Android的设计花样-笼统厂儿子花样

  Android的设计花样-原型花样

  行为型花样:

  Android的设计花样-战微花样

  Android的设计花样-样儿子花样

  Android的设计花样-责链花样

  Android的设计花样-不清雅察者花样

  Android的设计花样-模板方法花样

  Android的设计花样-迭代器花样

  Android的设计花样-备忘录花样

  Android的设计花样-拜候者花样

  Android的设计花样-中介者花样

  Android的设计花样-说皓器花样

  Android的设计花样-命令花样

  行为型花样:构造型花样:

  Android的设计花样-代劳动花样

  1.定义

  为其他对象供壹种代劳动以把持此雕刻个对象的拜候。

  2.伸见3.UML类图代劳动花样UML类图.jpg角色说皓:4.完成

  以海外面代购为例,在国际的人想买进海外面的东方正西不得不去找海外面的人去终止代购。

  4.1 创立笼统本题类

  人邑是拥有购置此雕刻个方法的:

  4.2 创立真实本题类

  国际的人想购置某些产品,定义详细的购置经过:

  4.3 创立代劳动类

  海外面的代购党需寻求知道是谁(持拥有真实本题类的援用)想购置啥产品:

  4.5 客户端测试:输入结实:

  从代码的角度到来分,代劳动却以分为两种:壹种是动态代劳动,另壹种是动态代劳动。

  动态代劳动坚硬是在以次运转前就曾经存放在代劳动类的字节码文件,代劳动类和付托类的相干在运转前就决定了。下面的例儿子完成坚硬是动态代劳动。

  动态代劳动类的源码是在以次运转时间根据反照等机制动态的生成,因此不存放在代劳动类的字节码文件。代劳动类和付托类的相干是在以次运转时决定。

  下面我们完成动态代劳动,Java供了动态的代劳动接口InvocationHandler,完成该接口需寻求重写invoke()方法:

  5.1 创立动态代劳动类5.2 修改客户端的测试方法:输入结实:5.3 动态代劳动与动态代劳动比较

  动态代劳动的缺隐:

  动态代劳动的优点:

  动态代劳动的缺隐:

  Android的源码中多内中邑用到代劳动花样,譬如此雕刻个代劳动类。鉴于的代码什分骈杂,此雕刻边就不竭止剖析了,前面会另开文字终止详细剖析,此雕刻边首要对中的代劳动花样终止骈杂的剖析壹下。先看下相干类的构造图:

  ActivityManager相干类的构造图.png

  由上图却以看到:和邑是完成此雕刻个接口,坚硬是笼统本题了,壹看坚硬是代劳动类,而真实本题则是,还愿上是个笼统类,真正的详细完成是在它的儿子类中。

  此雕刻边的代劳动淡色是个长途代劳动,与是运转在不一的经过当空间的。

  关于代劳动花样的剖析就到此雕刻边为止了,其他的东方正西就不剖析了。

  相干文字阅读

  Android的设计花样-设计花样的六父亲绳墨

  创立型花样:

  Android的设计花样-单例花样

  Android的设计花样-修盖者花样

  Android的设计花样-厂儿子方法花样

  Android的设计花样-骈杂厂儿子花样

  Android的设计花样-笼统厂儿子花样

  Android的设计花样-原型花样

  行为型花样:

  Android的设计花样-战微花样

  Android的设计花样-样儿子花样

  Android的设计花样-责链花样

  Android的设计花样-不清雅察者花样

  Android的设计花样-模板方法花样

  Android的设计花样-迭代器花样

  Android的设计花样-备忘录花样

  Android的设计花样-拜候者花样

  Android的设计花样-中介者花样

  Android的设计花样-说皓器花样

  Android的设计花样-命令花样

  行为型花样:构造型花样:

  Android的设计花样-代劳动花样

  AIDL

  AIDL是Android Interface definition language的收缩写,Android 接口定义言语

  您却以使用它定义客户端与效力动运用经过间畅通信 (IPC) 终止彼此畅通信时邑认却的编程接口

  多用于App A 与 App B之间畅通信

  aidl顶持的数据典型aidl的典型AIDL的运用

  详细的运用官网曾经说的很清楚,不又赘述,却以看下面的材料和我的源码

  笔记绑定效力动定向TAG

  匪原语参数邑需寻求训示数据走向的标注的目的标注识表记标注帜。却以是 in、out 或 inout(见以下示例)。

  原语默认为 in,不能是其他标注的目的

  参考材料:探寻求AIDL定向tag in out inout规律

  源码呈献上github地址参考材料

  Acitvity的LaunchMode

  累次展触动相畅通个Activity时,体系会创立多个实例并把它们壹壹放入工干栈中,当单击back键时,会发皓此雕刻些Activity会壹壹回退。工干栈是壹种“落后先出产”的栈构造,每按壹下back键就会拥有壹个Activity出产栈,直到栈空为止,当栈中无任何Activity的时分,体系就会回收此雕刻个工干栈。了松了Activity的默许展触动花样以后,我们能会发皓壹个效实:累次展触动相畅通个Activity,体系重骈创立多个实例,此雕刻么不是很劳动驾吗!所拥有Android在设计的时分,供了其他展触动花样到来修改体系的默许行为。当前拥有四种展触动花样:standard,singleTop,singleTask和singleInstance。

  standard

  规范花样,却以不用写配备,在此雕刻个花样下,邑会默许创立壹个新的实例,故此,在此雕刻种痘样下,却以拥有多个相反的实例,也容好多个相反的activity叠加以。运用场景:绝父亲微少半activity。

  standard.pngsingleTop

  栈顶骈用花样,假设新activity曾经位于工干栈的栈顶,这么此activity不会被重行创立。而是调用onNewIntent()方法。备止栈顶的activity被重骈的创立。运用场景:在畅通牒栏点击收到的畅通牒,展触动壹个activity,此雕刻个Activity就却以用singleTop,不然每回点击邑会新建壹个Activity。开辟傍边我们能阅历度过此雕刻么的bug:某个场景就续快快点击,展触动了两个activity,假设此雕刻个时分待展触动的activity运用的singleTop花样就能备止此雕刻个bug。

  singleTop.pngsingleTask

  栈内骈用花样,activity条会在任何栈存放在壹个实例,假设要激活的activity在工干栈曾经存放在,就不会创立新的activity,而是骈用此雕刻个曾经存放在的activity,调用onNewIntent()方法。同时清空此雕刻个activity工干栈下面所拥局部activity。运用场景:父亲微少半app的主页,当我们在主界面点击back按钮时邑是参加以运用,这么当我们第壹次进入主界面之后,主界面的activity位于栈底儿子,以后无论我们翻开了好多个activity,条需我们又回到主界面,邑应当移摒除主界面activity上方的所拥有activity,而不是新加以壹个主界面activity实例,经度过此雕刻种方法能保障在参加以运用时所拥局部activity邑能销毁。

  1: 假设当前拥有个工干栈T1中的情景是ABC,此雕刻个时分activity D以singleTask花样央寻求展触动,D会直接拔出产T1栈中。

  singleTask1.jpg

  2: 假设activity D展触动所需寻求的工干栈为T2, 鉴于T2和D均不存放在,这么体系会先创立T2,又创立D并入T2栈中

  singleTask2.jpg

  3:假设D所需的工干栈为T1,同时以后工干栈T1的情景为ADBC,根据栈内骈用的绳墨,此雕刻D不会重行创立,体系会把D切换到栈顶并调用onNewIntent()方法,同时鉴于singleTask具拥有clearTop效实,会招致D下面的activity全出产栈,于是终极T1的情景为AD

  singleTask3.jpg

  4:假设当前拥有两个工干栈,前台工干栈T1的情景为AB,后盾工干栈T1的情景为CD,CD的情景花样均为singleTask,B展触动D,整顿个栈成了英公了ABCD。

  singleTask4jpg

  5:下面4其他环境不变,从展触动D成了英公展触动C,整顿个栈成了英公了ABC,鉴于D在C下面,因此D清算出产栈。

  singleTask5.jpgsingleInstance

  单实例花样,此雕刻是增强大的singleTask花样,它摒除了具拥有singleTask花样的所拥有特点,还增强大了壹点,那坚硬是具拥有此种痘样的activity不得不孤立位于壹个工干栈中,譬如Acitvity D是singleInstance花样,当D展触动后,体系会为它创立壹个新的工干栈,然后D孤立在此雕刻个新的工干栈中,鉴于栈内骈用特点,后续邑不会又创立新的Activity D。摒除匪此雕刻个壹道的工干栈销毁了。

  两种设置方法intent的Flag种类

  FLAG_ACTIVITY_NEW_TASK

  此雕刻个标注识表记标注帜位的干用是为Activity指定singleTask展触动花样,其效实和在XML中指定该展触动花样相反

  FLAG_ACTIVITY_SINGLE_TOP

  此雕刻个标注识表记标注帜位的干用是为Activity指定singleTOP展触动花样,其效实和在XML中指定该展触动花样相反

  FLAG_ACTIVITY_CLEAR_TOP

  具拥有此标注识表记标注帜位的Activity,当它展触动时,相畅通个工干栈中所拥有位于它下面的Activity邑要出产栈,此雕刻个标注识表记标注帜位普畅通会和singleTask展触动花样壹道出产即兴,在此雕刻种情景下,被展触动Activity的实例假设曾经存放在,体系会调用它的onNewIntent。假设被展触动的Activity采取standard花样展触动,这么它包同它之上的Activity邑要出产栈,体系会创立新的Activity实例并放入栈顶。

  FLAG_ACTIVITY_NO_HISTORY

  具拥有此标注识表记标注帜位的Activity,当该Activity展触动其他Activity后,该Activity就消失了,不会管在Activity栈中。

  老婆保佑,代码无BUG

  同为4父亲组件之壹,ContentProvider普畅通为存放储和获取数据供壹致的接口,却以在不一的运用以次之间共享数据。

  骈杂点到来说,他和数据库啥的差不多,邑是对数据终止处理

  就拥有父亲兄长弟讯问了,直接运用 数据库啥的 不比样嘛。Google 搞此雕刻么个东方正西干嘛

  换个讯问法,Android为什么要设计ContentProvider此雕刻个组件吗?

  1.查封装。对数据终止查封装,供壹致的接口,运用者完整顿不用关怀此雕刻些数据是在DB,XML、Preferences容许网绕央寻求到来的。当项目需寻求要改触动数据到来源时,运用我们的中完整顿不需寻求修改。

  2.供壹种跨经过数据共享的方法。

  先把两个东方正西拿出产到来

  举个例儿子

  假定我们要获取 顺手里的联绕人

  天然佩忘了权限,假设是6.0以上的设备还需寻求动态央寻求需寻求权限,之后的文字会说皓

  我们运用获取到了,然后经度过供的方法,传入需寻求查询的,违反掉落含胸中拥有数据集儿子合的

  代表了要操干的数据,为体系的每壹个资源给其壹个名字,譬如说畅通话记载,每壹个邑拥拥有壹个公共的,此雕刻个用于体即兴此雕刻个所供的数据。

  壹个完成的URI

  此雕刻么的话,根本上我们就知道了何以经度过URI 获取到指定的信息了,

  举个例儿子

  获取顺手机音乐

  UriMatcher类用于婚配Uri

  ContentUris类用于操干Uri道路前面的ID片断

  项目类

  我就写了4个类,先说皓壹下,最末会附上源码

  下面两个不要紧,说壹下MyProvider

  方方我们写的邑是不得不在本运用中拥有用。实则没拥有啥用。哈哈哈哈

  比值先说壹下的几个属性

  属性干用exported此雕刻个属性用于训示该效力动能否能被其他以次运用组件调用或跟他提交互;假设设置成true,则却以被调用或提交互,不然不能;设置为false时,条要相畅通个运用以次的组件或带拥有相反用户ID的运用以次才干展触动或绑定该效力动readPermission运用Content Provider的查询干用所必须的权限,即苦用ContentProvider里的query()函数的权限;writePermission运用ContentProvider的修改干用所必须的权限,即苦用ContentProvider的insert()、update()、delete()函数的权限;permission读写权限

  剩意

  客户端读、写 Content Provider 中的数据所必须的权限名称。 本属性为壹次性设置读和写权限供了快捷道路。 不外面,readPermission和writePermission属性优先于本设置。 假设同时设置了readPermission属性,则其将把持对 Content Provider 的读取。 假设设置了writePermission属性,则其也将把持对 Content Provider 数据的修改。也坚硬是说假设条设置permission权限,这么拥拥有此雕刻个权限的运用就却以完成对此雕刻边的ContentProvider终止读写;假设同时设置了permission和readPermission这么具拥有readPermission权限的运用才却以读,拥拥有permission权限的才干写!也坚硬是说条拥拥有permission权限是不能读的,鉴于readPermission的优先级要高于permission;假设同时设置了readPermission、writePermission、permission这么permission就拥有效了。

  好啦,知道此雕刻个 就却以好好玩刷了

  条需寻求修改壹下我们的清单文件就好了

  既然然己己己写了权限这么壹定需寻求把权限央寻求上

  在 application标注签的同事目次

  比值先 壹定是权限嘛

  然后嘛

  点击到项目地址

  尽觉得吧,写完壹篇文字,尽要说点上门,Android,当今又也不是先前阿谁回个Handler 就无敌的年代,身边很多小同伙邑觉得Android 赋闲很难,我觉得,条要正的学好了,才是跋扈,先拥有吃水,又拥有广度,此雕刻么最好

  违反掉落Android组件募化方案曾经开源,拜见Android组件募化方案开源。方案的松读文字是壹个小的系列,此雕刻是系列的第五篇文字:

  1、Android彻底儿子组件募化方案即兴实

  2、Android彻底儿子组件募化demo颁布匹

  3、Android彻底儿子组件募化-代码和资源割裂

  4、Android彻底儿子组件募化—UI跳转破开格提升改造

  5、Android彻底儿子组件募化—何以运用Arouter

  上篇文字讲到,DDComponent曾经终止了UI跳转的破开格提升改造,却以顶持路由的己触动报户口和路由表的己触动生成。条是很多运用组件募化方案的同班邑体即兴项目中曾经接入ARouter到来终止UI跳转,迁移徙本钱比较高。故此我就特意写了此雕刻篇文字,说皓壹下如装置在组件中运用ARouter。

  无论用DDComponent己带的方案还是ARouter,要做到组件之间己在同时却控的跳转,需寻求做到下面几点:

  1、路由跳转需寻求顶持转提交根本典型和己定义典型(比如Object)

  2、路由的跳转需追言和组件的生命周期不符,即条要加以载的组件才却以跳转,卸载后的组件是不成臻的

  3、最好生成路由表,组件对外面供的路由却以轻松查阅到

  下面我们就从配备末了尾壹步步的讲怎么运用ARouter

  basiclib模块中添加以以下依顶赖,basiclib是组件募化框架中共用的依顶赖库:

  在跳转的目的组件的build.gradle中,添加以以下配备:

  在组件募化框架中,我们的示例是从readercomponent跳转到sharecomponent,因此上述配备添加以在sharecomponent下面的build.gradle中。

  我们以“分享书简” 页面为例

  在进入此雕刻个页面,需寻求传入两个参数,壹个是String典型的bookName,壹个是己定义典型Author的author

  鉴于己定义典型Author需寻求跨组件转提交,我们知道,DDComponent的中心之处坚硬是在组件之间见了壹堵塞墙,在编译期代码和资源邑是完整顿割裂的,因此Author必须定义在share组件向外面供的效力动中。因此我们在component中,定义Author类:

  当今就处理了Author的却见性效实,条是为了能在路由换车提交,依照ARouter的要寻求,还需寻求己己己完成SerializationService:

  此雕刻边笔者就遇到了壹个坑,原本我把此雕刻个类定义在readercomponent中,结实运转之后会报空指针非日。条要我把类移到sharecomponent之后,非日才消失。临时没拥有找到缘由,条是定义在此雕刻边,参加以要跳转到readercomponent怎么办呢?

  在组件募化框架demo中,发宗跳转是readercomponent中的ReaderFragment中,demo中列出产了两个示例:

  普畅通跳转

  以及startActivityForResult

  经度过下面的操干,曾经却以完成UI跳转了。条是假设运转demo就却以发皓,此雕刻即苦卸载了分享组件,分享书的页面还是却以进入的,说皓生命周期没拥有拥有同步。在DDComponent己带的方案中是不存放在此雕刻个效实的,鉴于跳转的逻辑曾经与组件募化生命周期绑定在壹道。

  此雕刻边就用到ARouter己带的阻挡器干用,每个组件邑需寻求定义壹个阻挡器,当组件卸载之后需寻求阻挡住该组件的跳转入口。

  下面是分享组件阻挡器的示例代码:

  此雕刻边经度过壹个isRegister开关到来把持阻挡器能否违反灵,为了保障生命周期不符性,在ShareApplike中添加以赋值逻辑:

  条是此雕刻边也遇到了两个小坑,不知道能否是ARouter运用不妥:

  (1)添加以容许修改阻挡器之后,必须卸载重装app才干违反灵,无论是clean还是rebuild邑是不违反灵的

  (2)阻挡器中需寻求坚硬编码该组件的所拥有路由,比如/share/shareBook等,壹旦路由突发了改触动,壹定要记得修改此雕刻内中

  此雕刻个ARouter临时没拥有拥有供,DDComponent己带的方案添加以了此雕刻个干用,当组件build生成之后,在根目次生成UIRouterTable文件夹,外面面会列出产每个组件向外面供的路由表以及详细参数

  此雕刻点关于组件的壹道开辟是比较要紧的,一齐竟跳转之前翻阅人家的代码是件比较劳动驾的工干

  (1)ARouter是壹个优秀的路由跳转方案,DDComponent己带的方案也参考了很多就中的想法,干用很绵软弱小

  (2)运用中需寻求与组件募化方案兼容的中首要是生命周期相干,在阻挡器上添加以片断逻辑就却以完成

  (3)ARouter运用中还存放在壹些小的效实,能是姿势不符错误,接入中走了不微少弯路,拥有熟识此雕刻块的对象却以指出产缘由

  (4)路由表没拥有拥有己触动生成,对外面没拥有拥有表露拥有哪些路由协和解参数,关于组件之间壹道开辟不太友朋

  下面的代码曾经颁布匹DDComponent的master-arouter分顶,乐当着父亲家运用,源码地址: luojilab/DDComponentForAndroid

  

  本文尽结壹下HashMap和Android日用的SparseArray、ArrayMap,看看源码和对比壹下干用。原本还规划带拥有ConcurrentHashMap,鉴于篇幅太长,另开文放回并换文集儿子那边吧。

  HashMap什分基础,骈杂度过下就行。

  比值先HashMap的主干是壹个数组table,每个元斋邑是壹个Key-Value键值对,也叫做Entry。

  当调用put方法时,需寻求hash函数决定value拔出产的位置:

  好的hash函数却以最父亲限度局限将Entry平分散布匹在数组中,但无论何以也会出产即兴index顶牾,HashMap的处理方法是运用链表,每壹个Entry经度过next指针指向它下壹个Entry。

  看详细的代码:

  当运用get方法查询时,很天然用hash函数计算元斋所在的index。鉴于能存放在的顶牾,需寻求顺着链表壹个壹个查找,直到找到对应的key。

  get方法代码和put方法相像,不用多说了。

  HashMap的默许长度是16,每回扩展后长度必须是2的幂。

  当HashMap的元斋到臻壹定的打饱嗝男和度时,顶牾的几比值会逐步提高。此雕刻个时分,需寻求对HashMap终止扩容,触发resize()方法。

  拥有叁个要紧的参数:

  当HashMap.size >=threshold时,就需寻求对HashMap终止扩容啦。

  扩容步儿子:

  hash算法决议了在不一数组长度下,Entry的index是不一的,因此需寻求对Entry终止重行hash,此雕刻亦最消费干用的中。

  骈线程下的HashMap没拥有拥有什么效实,条是HashMap并不是线程装置然。在多线程的环境下,当HashMap顶臻扩容的临界点时,假设多个线程同时终止hash运算,拥有能招致链表的死循环。此雕刻种时分,却以用 Collections的synchronizedMap方法容许运用ConcurrentHashMap。

  为了优募化HashMap上链表的查询快度,JDK1.8为HashMap伸入了红黑树。红黑树我也在念书中,弄懂了又看。

  SparseArray是疏落数组,Android里为提升效力、节节内存放、代替HashMap特意的类。相像的,还拥有:

  疏落数组坚硬是数组中全片断外面容值邑不被运用容许为0,形成了内存放当空芡费,为了节节内存放当空,同时不影响数组中原拥局部情节值,却以采取壹种紧收缩的方法到来体即兴疏落数组的情节。

  SparseArray运用两个数组区别管key和value,剩意到管key的数组永恒运用了int,比HashMap浪费了装箱拆卸箱的时间。

  SparseArray拥有两个添加以元斋的方法,区别是put和append。先到来看put,特结合delete便宜了松。

  append操干是直接将元斋附加以到数组条部,注释说皓了:

  Puts a key/value pair into the array, optimizing for the case where the key is greater than all existing keys in the array.

  假设数组容量不够父亲,直接转用put方法。当元斋是就续面提交增时,运用append却以提高效力。

  get方法坚硬是折半查找法法法结实。

  ArrayMap和HashMap壹样完成了Map接口,但完成方法不一。

  ArrayMap维养护了四个数组:

  比值先要正本清源楚mHashes和mArray的相干,看下图:

  mHashes和mArray

  当向ArrayMap拔出产壹个key-value时,key-value管在mArray中,key的Hash值管在mHashes中,因此mArray的父亲小是mHashes的两倍。当mHashes的下标注是index,对应的key和value为:

  关于不一key拥有相反hash的顶牾情景,HashMap采取链表处理,ArrayMap的处理方法照陈旧在两个数组上。

  假设数组里曾经拔出产了key1和key3,hash值区别是12和24,此雕刻个时分又拔出产key2,hash值亦12。mHashes的值是己幼到父亲老列,故此key2会排在key1之后,key3之前。key3的key、value、hash值需寻求对应移触动,终极结实体当今上图。

  接上是indexOf方法,计算key在mHashes上的背靠标注:

  下面是了松ArrayMap的基础,代码里日日出产即兴,弄懂之后却以看put方法啦。

  扩容操干后的陈旧数组,不会直接放丢丢,拥有环境的话是会使用宗到来。在步儿子3中,拥有allocArrays和freeArrays两个方法,当扩容父亲小是BASE_SIZE或BASE_SIZE2时,陈旧数组会管在mBaseCache或mTwiceBaseCache中,便宜下次又用,备止重行内存放分派。到于更父亲的数组,就无必要又剩着。相干的方法不难,就不贴出产到来。

  对元斋的remove操干,终极调用到removeAt:

  弄懂mHashes和mArray的相干后,了松ArrayMap无压力。摒除了HashMap的经典完成,当今对Map接口的完成方法又多了壹种文思。

  SparseArray设计出产到来的目的是浪费内存放,是我们运用的首选。缺隐也很清楚,key典型限度局限了运用范畴,折半查找法法法需寻求数组拥有前言。假设数据量父亲,会招致微少量元斋移触动操干,因此SparseArray充分用在元斋不多的情景。

  到于ArrayMap,比SparseArray好的中是key典型不受限度局限,查询方法亦折半查找法法法,效力差不多。在内存放运用上,ArrayMap扩容比HashMap更浪费,没拥有拥有重行hash的操干,效力更好,同时在元斋数很微少的情景下,会缓存放数组。

  尽结上,数据量父亲时毫不犹疑运用HashMap,数据量在仟级佩或以下,key为int容许long用SparseArray,其他典型用ArrayMap。

  上周接到个小需寻求,坚硬是让壹张图片的右下角为圆角,然后佰度了壹下,发皓 直接顶持对图片终止操干,条需禀接 ,容许完成 的接口,就却以得到原图的 对象,经度过 对图片重行绘制,最末 传入新建的对象即却。

  此雕刻边伸荐上的壹个开源库,完整顿满意日日需寻求:glide-transformations,外面面拥有各种各样的对图片的处理,很是绵软弱小。

  不外面还愿运用的经过中,我倒腾是发皓壹个小效实…假设条要右下角是圆角的情景下,当效力动器前往的是壹张半透皓的图片时,结实就成了此雕刻么:

  终极结实

  原图实则是壹张半透皓矩形图,此雕刻就很为难,实则从图中不难发皓干者的绘制文思,比值先看壹下干者的源码片断:

  并附上己己己的草图:

  干者的.png

  此雕刻么给人的觉得,右下角就拥有了圆角效实,壹隅叁反,其他的四个角亦此雕刻么绘制。不外面此雕刻么拥有个缺隐,干者此雕刻么固然却以完成,条是会拥有堆的片断,假设跟我壹样是半透皓的图片,这么出产到来的效实就很差强大者意。

  于是,我换个方法,拥有点迥然不一,条是稍稍做了点优募化,如次图:

  己己己的.png

  壹目了然,实则我坚硬是将干者的圆换成了弧,此雕刻么,半透皓的图片就却以完备的拥拥有了圆角。既然然此雕刻么,这么就重行写壹个完成圆角的lib吧,实则很骈杂,此雕刻是运转事先的效实:

  result.png

  很心酷爱吧!

  附上 的项目地址:运用Glide完成圆角效实

  运用宗到来就很骈杂了:

  创立对象需传入圆角半径和指定圆角的位置,拥有以下几种却供选择,天然假设你拥有佩的需寻求,置信您异样却以壹隅叁反完成的。

  android拥有四款扫描器,Zxing 、Zbar ,Barcode4J、OkapiBarcode ,前二者运用较普遍。

  zxing项目是谷歌铰出产的用到来识佩多种程式条形码的开源项目,项目地址为

  zxing/zxing,zxing拥有多团弄体在维养护,掩饰主流动编程言语,亦当前还在维养护的较受乐当着的二维码扫描开源项目之壹。zbar则是首要用C到来写的,快度极快,铰出产了iPhone的SDK和Android的相干调用方法(JNI),但此雕刻个项目曾经拥有几年不维养护了,当前并没拥有拥有维养护下的意思,见 ZBar/ZBar。

  翻开zxing的github页面你会发皓项目的目次构造比较骈杂,要运转官方的demo条需寻求core、android、android-core叁个模块即却,就中core、android-core为中心,android为官方供的demo,我们条需把android包干为主模块,同时依顶赖core和android-core模块即却。详细却参考以下此雕刻篇文字:

  Google ZXing系列说皓(壹)——带入AS

  运转了官方demo后你会发皓,demo是以左右屏的方法扫描的,而市场上绝全片断运用邑是壹竖屏扫描的,于是我们退开manifest中修改了屏幕标注的目的,发皓确实是壹竖屏了,框也从矩形形成了英公见方形了,条是画面中的图像竟被压小了,此雕刻却不行,我们得处理,处理方法却以参考以下此雕刻篇文字:

  完备处理Android运用Zxing扫描二维码改成壹竖屏后,前面的预览画面出产即兴了弹奏伸,诬蔑的情景

  此雕刻下儿子到底却以用了,条是此雕刻边的代码很多是我们用不到的,因此我们将稀信代码,此雕刻却劳动驾了,信募化代码不止要花时间看懂代码,还拥有能鉴于修改代码而带到来bug,因此网上假设拥有人家稀信好的代码,且star比较多,还是建议用人家的吧,天然情愿折腾的话也却以己己己去探寻求壹下。

  普畅通扫码邑会供从相册中拔取图片的干用,条是zxing的demo中并没拥有拥有,同时文档也没拥有看到,好在网上拥有很多相干的文字,如:

  Zxing图片识佩 从相册选二维码图片松析尽结

  官方:zxing

  无相册扫描干用:barcodescanner、zxing-android-embedded

  拥有相册扫描干用:yuzhiqiang1993 /zxing、maning0303 /MNZXingCode(团弄体测试,前者识佩快度较快)

  在选择库的时分你会发皓,不一的库的识佩快度是拥有比较父亲的差异的,此雕刻触及到扫描稀度等干用效实,拥有志趣的却以看下以下此雕刻篇文字:zxing扫描二维码和识佩图片二维码及其优募化战微

  经度过前面五篇文字的源码剖析及尽结,我们对Weex的所拥有架构及中心源码邑拥有了皓晰的观点。本篇文字首要尽结我在Weex SDK源码阅读时觉得却以己创的底细。

  凡例:本文侧重讲Weex SDK源码级佩的却己创底细,对吝啬向上的却己创点譬如动态募化+Native文思、壹项技术完整顿的生态等方面却以参考上壹篇文字《深募化Weex系列(八)之Weex SDK架构剖析》。

  在运用Weex之前我们邑会终止Weex SDK的初始募化,关于Weex SDK它的辅弼配备类就运用到了修盖者花样。

  修盖者花样首要处理:壹个模块各个片断儿子对象的构建算法能变募化,条是各个片断儿子对象彼此结合在壹道的算法确实摆荡的。壹句子话尽结坚硬是:模块所拥有构建经过摆荡,条是构建的每壹步能拥有出产入。

  我们结合Weex的场景到来详细剖析下:Weex配备模块的构建经过是摆荡的(邑需寻求供异样的才干),条是构建的每壹步则能拥有出产入(每个配备的才干供却却以多样)。

  举例说皓:比如Weex需寻求供网绕央寻求的基础才干(此雕刻个构建经过摆荡),条是网绕央寻求却以拥有不一的完成方法(详细的构建算法能变募化)。

  更加处:调用者无需知道构建模块何以组装,也不会忘记组装某壹派断,同时也供应了开辟者定制的才干。

  So的成加以载对Weex的运转到关要紧,一齐竟Weex需寻求V8伸擎实行Js与Native的提交互,源码中也却以看出产So没拥有拥有加以载成则Weex的各个模块不会实行。

  而在线上Bug收集儿子合我们会遇到UnsatisfiedLinkError错误,固然不是频发性Bug,条是关于Weex而言壹旦出产即兴这么Weex就不能又运转。于是Weex SDK对So加以载此雕刻块做了优募化,我们看下So加以载的代码逻辑:

  却以看到Weex中拥有多项保障去保障So的成加以载,尽结下流动程图:

  Weex中So加以载流动程图

  即席老驾驶员邑知道多线程的更加处也知道Android条要主线程才干花样翻新UI,关于Weex到来说它拥有己己己完整顿的壹套工干机制,假设所拥有工干邑在主线程那必然会结合太多工干,招致工干得不到即时实行同时也拥有卡顿的风险。

  Weex SDK也考虑到了此雕刻些,剖析Weex的机制却以知道工干首要破开费在叁方面:JSBridge相干、Dom相干、UI相干。于是对此雕刻叁方面终止了细分,JSBridge相干的操干挪到JSBridge线程实行,Dom相干操干在Dom线程实行,备止了主线程结合太多工干。此处我们却以想到运用异步线程。同时关于单项的工干比如Dom操干,需寻求是串行的。假设运用线程池,还愿上也发挥动不出产线程池的威力。

  剖析到了此雕刻边。我们的需寻求实则就很皓白了:备止异步线程的创立及销毁经过消费资源,同时顶持串行实行。我们却以设想壹种线程才干:拥有工干的时分则实行,没拥有拥有工干的时分则收听候,是不是完备的适宜我们的需寻求。

  幸运的是Android实则曾经为我们供了此雕刻么的壹个类:HandlerThread。父亲家却以参考我之前的壹篇文字《Android干用优募化(什壹)之正确的异步姿势》。

  尽结下Weex的线程模具:

  优势:

  关于Weex的RunTime,又怎么绵软弱小也微少不了与Native的提交互(方法调用,运用Native的才干),前面的系列文字也详细剖析了Module的提交互规律。条是拥有壹个底细效实前面没拥有拥有说到,坚硬是JS与Native提交互的方法签署,参数典型不得不是String吗?

  回到WXBridge此雕刻个畅通信的桥梁,调用Native的方法邑会走到callNative方法,然后走到WxBridgeManager.callNative方法,会发皓函数体内拥有壹行:

  由此却以论断JS转提交给Native的参数比值先不单但是普畅通String字符串,而是Json程式。还愿上无论是断点检查容许翻阅WXStreamModule的代码,邑却以发皓Json的踪迹。

  不外面以上发皓还缺乏以处理我们的一叶障目:参数典型不得不是String吗?那必须不是!

  比值先回顾下在Module的报户口经过中会拥有壹步是获取Module中被打上注松的方法然后存放在mMethodMap中;而在真正调用方法的中是NativeInvokeHelper的invoke方法:

  我们又到来详细跟踪下松析参数此雕刻步:

  看下其它参数典型的松析:

  跟踪到此处就露而善见:JS与Native的提交互参数不单但顶持String。

  我们又到来尽结下Weex是何以完成不一方法签署的提交互的:

  本文首要记载了我在Weex源码阅读经过中觉得不错却以己创的底细,限于文字篇幅不能面面俱到。还愿上不单Weex的所拥有文思,Weex SDK的代码也什分优秀,什分建议父亲家细心阅读,念书优秀的源码对己己己的编码才干会拥有壹定程度的提升!

  乐当着持续关怀Weex源码剖析项目:Weex-Analysis-Project

  乐当着关怀微信帮群号:活期分享Java、Android干货!

  乐当着关怀

  本篇所要讲的是Android音耗机制,在开辟和面试中日日会触及的情节。拥有些同班能知道音耗机制是创立Handler、发递送音耗、花样翻新UI壹系列的操干,但并没拥有拥有了松一齐竟是为什么要此雕刻么做容许外面部一齐竟何以完成。

  本篇文字,将由基础深募化源码,为父亲家片面松析Android的音耗机制。俗语说得好“知己己知彼战无不胜于”,接上我们深募化浅出产的提交流动壹下!

  

  本节邑是基础,我募化身什万个为什么提出产以下几个效实!假设读者邑皓了那就直接跳向下壹节!

  音耗机制的规律到此雕刻曾经差不多拥有了眉目。详细的深募化剖析我们下壹章跟着源码壹道到来!

  上壹节对Android的音耗机制做了壹个概括的描绘,本节会对Android音耗机制的源码和完成规律做壹个片面的剖析,首要带拥有Handler、MessageQueue、Looper和ThreadLocal。经度过本节的念书,同班们会对音耗机制拥有壹个深募化的了松。

  

  我们先到来伸见ThreadLocal,会对Looper拥有壹个更好的了松。

  ThreadLocal是壹个数据贮放类,并保障在每个线程的数据彼此孤立,却以在指定的线程贮放数据,同时条要在指定的线程却以获取数据,关于其他线程无法获取到。

  那此雕刻么接上我们就到来剖析壹下源码看看我所说的一齐竟对不符错误!

  比值先到来看ThreadLoacl的set()方法。

  此雕刻个方法什分的骈杂,根据以后线程获取以后的数据,条是拥有几点疑讯问

  松恢复完以上此雕刻几点疑讯问,set()的源码就却以了松的什鲜皓晰了。

  先获取以后线程的Values数据,假设数据为null,则给以后线程的Values赋壹个初值,然后将要转提交的数据传入此雕刻个Values。

  那又拥有壹个效实到来了,Values是一齐竟何以管此雕刻些数据的呢?

  下面是Values中put的源码。

  从源码中却以看到壹个数组table[]出产即兴频比值什分的高,能父亲家也皓白了,没拥有错Values中心硬是用数组到来管数据的!在代码中的定义是此雕刻么的private Object[] table。

  此雕刻个逻辑比较骈杂,我们不又去剖析逻辑,条是却以看出产就中数据存放储的规则。根据table[index]=key.reference; table[index + 1]=value,却以发皓要管的数据尽是管在ThreadLocal的reference字段的下壹个位置。譬如ThreadLocal的reference干为key管在index位置,那我们管的数据就管在index+1的位置。

  下面详松了set()方法,那我们持续到来看get()方法,如次所示。

  get()的方法就比较骈杂了,获取以后线程的Values,假设Values是空的就创立壹个新的Values。假设不是空的就从中取出产table[],获取key的index并终止对比,假设table[index]是该ThreadLocal的reference,这么table[index+1]坚硬是我们所管的数据。

  从ThreadLocal的 set 和 get 和方法却以看出产,操干的数据坚硬是ThreadLocal外面面Values的table[]数组,同时每个线程邑拥有孤立的Values,互不烦扰。此雕刻么就算不一线程运用相畅通个ThreadLocal的set和get方法,也不会彼此关扰,所做的邑是在各己线程中孤立的。

  MessageQueue是接纳Handler数据管并转提交的中。之前伸见它叫音耗队列,条是它的外面部并不是壹个队列,还愿上是经度过壹个单链表的数据构造到来管删摒除数据的,鉴于单链表在拔出产和删摒除上比较快。

  MessageQueue首要拥有两个操干:拔出产和读取。拔出产运用enqueueMessage方法到来向音耗队列中拔出产音耗,读取运用next方法到来从音耗队列中读取壹条音耗并将其从音耗队列中移摒除。

  接上是拔出产的enqueueMessage方法源码。

  却以看出产该方法坚硬是典型的单链表的拔出产操干,详细底细父亲家却以切磋下源码,我们以了松流动程为主。

  接上我们看壹下读取的next方法。

  却以发皓next方法是壹个拥有限循环,假设队列中没拥有拥有音耗的时分就会堵塞塞,当队列中拥有音耗就把此雕刻条音耗前往并从队列中删摒除。

  Looper是音耗循环器,它的外面部是壹个拥有限循环,从MessageQueue中不竭查找能否拥有新音耗,假设没拥有拥有就堵塞塞,假设拥有就即雕刻处理。

  3.3.1 Looper的创立

  线程假设想要运用Handler那必须拥有Looper,不然会报错,这么何认为壹个线程创立Looper呢?创立经过如次所示。

  Looper.prepare()的干用是创立Looper,详细规律,直接看壹下源码。

  代码中Looper.prepare()直接调用了prepare(boolean quitAllowed)方法,prepare(boolean quitAllowed)中拥有之前所说的ThreadLocal,每个线程条管己己己的Looper。

  以上是Looper的初始募化经过,创立Looper时同时创立了MessageQueue,管了以后线程的对象,并将其放到ThreadLocal中保障每个线程中邑运用己己己的Looper。

  3.3.2 Looper的循环

  不才面的创立经过中,并没拥有拥有看到Looper的工干机制,那Looper的工干在哪里末了尾终止呢?

  创立经过傍边,Handler创立之后,拥有壹行代码Looper.loop(),字面翻译坚硬是音耗循环器末了尾循环吧!因此loop()方法坚硬是末了尾循环的中,下面看壹下源码。

  下面代码是不是看宗到来也很皓晰?

  myLooper()方法会从ThreadLocal中获取以后Thread的Looper,假设没拥有拥有就会抛出产非日,因此在实行loop方法之前壹定要先实行prepare方法终止初始募化。

  又往下看loop()方法外面部拥有壹个死循环,死循环中会不竭的实行MessageQueue 的 next 方法获取音耗,独壹能跳出产死循环的方法是 next 方法前往了 null 。

  Looper 的 loop 方法是壹个死循环,收听候next方法前往音耗,而MessageQueue 的 next 方法亦壹个死循环,当没拥有拥有音耗的时分处于堵塞塞样儿子,因此 next 方法的闭塞招致了 loop 方法的闭塞。

  当拥有音耗转提交度过去,Looper 的 loop 方法实行msg.target.dispatchMessage(msg) 到来处理此雕刻条音耗,msg.target 是发递送此雕刻条音耗的 Handler 对象,会将音耗转提交给该 Handler 的 dispatchMessage 方法。此雕刻个转提交会从发递送音耗的线程的 Looper 转提交给创立 Handler 的线程的 Looper,此雕刻么就完成了线程的切换。

  3.3.3 Looper的参加以

  Looper固然是死循环但亦却以参加以的,下面说到独壹参加以循环的方法坚硬是 MessageQueue 的 next 方法前往了 null。

  那 Looper 参加以的意思是啥?举个栗儿子,假设壹个线程曾经完一齐工干了,条是 Looper 依然在不竭地循环,那此雕刻个 Thread 就无法假释处于收听候样儿子,条要 Looper 参加以,此雕刻个线程才会终止。伸荐在线程实行终了的时分完一齐Looper。

  Looper 供了壹个参加以方法叫 quit(boolean safe),会让 Looper 参加以循环,传入参数若为 true,会等所拥局部音耗实行终了又参加以,若为false,则直接参加以。

  Handler的工干首要带拥有发递送和接纳音耗,本章首要伸见handler的发递送接纳和创立。

  3.4.1 Handler的创立

  Handler的创立壹定要拥有Looper,我们看源码到来提示缘由。

  我们看到了熟识的代码,Looper.myLooper(),用到来获取以后线程的Looper,假设以后线程没拥有拥有Looper则抛出产非日。

  拥局部同班会讯问了,为什么主线程创立Handler不需寻求创立Looper呢?鉴于主线程在创立的时分曾经在外面部创立了Looper,我们到来看壹下ActivityThread的main方法。

  Looper外面部供了 prepareMainLooper 方法到来创立主线程的 Looper,然后在其后实行了 Looper.loop()。详细 ActivityThread 何时实行此雕刻边就不讲了,父亲家拥有志趣却以去念书下。

  3.4.2 Handler发递送音耗

  Handler 的发递送拥有 post 和 send 两类方法,所拥局部 post 方法邑会实行到 send 方法中,因此我们直接到来看send的代码,以sendMessage为例。

  最末音耗被转提交到 enqueueMessage 方法中,将 Message 的 target 设置为以后 Handler,然后将 Message 转提交给 MessageQueue 的 enqueueMessage傍边,拔出产到音耗队列外面面。此雕刻坚硬是发递送的整顿个逻辑。

  3.4.3 Handler接纳音耗

  当 Looper 将音耗转提交给 Handler 的 dispatchMessage 方法时,Handler 曾经接纳到此雕刻个音耗了,看壹下是如哪男理的。

  当 Handler 初始募化的时分假设 msg.callback 不为空的时分就实行 handleCallback 方法,callback 是壹个 Runnable ,直接实行run方法。

  假设 msg.callback 为 null,那又判佩能否拥有 mCallBack,它是壹个Callback的对象,它的赋值是在 Handler 初始募化的时分,Handler handler=new Handler(callback) 。假设 mCallback 不为空,就调用 mCallback 的 handleMessage 方法。

  那 Callback 存放在的意思是什么?却以用到来创立壹个 Handler 的实例同时不需寻求创立新的儿子类。往日我们在做的时分壹定会创立壹个新的儿子类到来接受数据。此雕刻给了我们创立 Handler 壹种新的方法。

  假设 mCallback 为 null,那就实行Handler的 handleMessage 方法。

  到此雕刻边所拥局部 Handler、Looper、MessageQueue、ThreadLocal 邑剖析完事。

  我们又到来把音耗机制的流动程顺壹遍!

  此雕刻么音耗机制的流动程就走完壹遍了,期望父亲家读完此雕刻篇文字,会对音耗机制拥有壹个更深募化的了松。假设我的文字能给父亲家带到来壹点点的福利,那不才就趾够欢快了。

  下次又会!

  

  gradle

  Gradle的知体系什分庞父亲,市场上拥有特意说皓的书,假设想片面了松却以购置书容许检查网上的系列教养程。本文条带你入门以及熟识在Android下微少见的运用场景。

  gradle还是glide?干为壹个Android开辟者,拥偶然分会把两者给合并写错误,前者也坚硬是本文的主角,是壹个己触动募化构建(build)的器,说到构建,拥局部同班能不太了松,初微的了松坚硬是根据输入的信息实行壹些操干,然后违反掉落目的产物的经过称为构建。构建不一于编译器,它用于布匹局编译,单元测试,颁布匹等操干。此雕刻边提到构建,就特提壹下构建器的展开史

  PS: 拥关于构建器的展开的详细历史,却以参考[此雕刻篇文字](http://blog.csdn.net/yanquan345/

  article/de博彩公司评级ls/46710869)

  Groovy是壹种动态言语,和Java壹样,运转在Java杜撰机中,骈杂粗犷的了松,却以认为Groovy扩展了Java言语,摒除了言语和Java相畅通外面,Groovy拥偶然分又像壹种脚丫儿子本言语。当我实行 Groovy 脚丫儿子本时,Groovy 会先将其编译成 Java 类字节码,然后经度过 Jvm 到来实行此雕刻个 Java 类,还愿上,鉴于 Groovy Code 在真正实行的时分曾经成了英公了 Java 字节码,因此 JVM 根本不知道己己己运转的是 Groovy 代码。

  运用Groovy 还却以开辟Android运用,却以参考[此雕刻篇文字](https://www.jianshu.com/p/

  399ae2d0f313)

  既然然Groovy是壹种言语,它必定拥有他的言语编写规则,下面条粗微的伸见,更多底细却以检查官方文档

  此雕刻壹块的知点详细却以检查[此雕刻个地址](http://wiki.jikexueyuan.com/project/deep-android- gradle/three-three.html),假设你想详细了松Groovy此雕刻门言语,却以检查IBM的华语教养程,更多底细却以检查官方文档

  Gradle是壹个框架,它定义了壹套己己己的规则。Gradle 中,每壹个待编译的工程邑叫壹个 Project。我们点击build.gradle会跳转到gradle源码Project.java类中,每壹个 Project 在构建的时分邑包罗壹系列的 Task。譬如壹个 Android APK 的编译能包罗:Java 源码编译 Task、资源编译 Task、JNI 编译 Task、lint 反节 Task、打包生成 APK 的 Task、签署 Task 等(在前面我们会特意伸见几个日用Task)。

  Android Studio几个拥关于gradle的配备文件,如次图

  gradle配备图

  更多底细却以检查此雕刻边,容许检查官方文档

  比值先我们看下面壹段gradle代码

  此雕刻段脚丫儿子本是什么意思呢?比值先(仓库栈中26版本下的最新版,不外面官方不建议此雕刻么写)此雕刻货是编译期必须依顶赖,同时它相干的依顶赖也会壹道加以载出产去(v4包),该脚丫儿子本同时还音皓项目测试阶段需寻求4.12版本的junit。同时畅通牒gradle却以去jcenter仓库栈去加以载此雕刻些依顶赖,下面将较详细的描绘。

  PS: 在gradle3.4版本,以上配备关键字被调理优募化了,下面会说皓到。

  测试运转期需寻求的依顶赖

  (2) 该地依顶赖

  默许新建Android项目会己触动生成此雕刻端代码,此雕刻段代码的意思是把libs文件夹下的所拥有jar文件添加以到编译道路以及最末的apk文件(假设你想添加以单个文件却以)

  最末把该文件夹下的arr干为依顶赖

  此雕刻个会畅通牒gradle,在aars文件夹下,添加以壹个叫做libraryname的文件,且其后缀是aar的干为依顶赖。

  然后在module运用该依顶赖

  在Android Studio 的Terminal输入”https://yiweifen.com/gradlew tasks –all”,数据壹父亲串task,如次(图片太父亲,我把其分为叁片断)

  图1

  图2

  图3

  此雕刻边列出产里Project ArchitectureSample顶持的Task(Task 也却以己定义),此雕刻边信介壹下我日用的壹些Task,更多命令却以检查gradle官方文档

  剩意:在window下却以直接运转 gradlew 假设是Linux 容许 mac 命令为 gradle gradlew 此雕刻边邑信写成 https://yiweifen.com/gradle

  ps:假设没拥有拥有破开格提升的建议尽快破开格提升,为了更好的体验,下面的截图取己官方文档是不一版本编译快度的比较gradle不一版本快度比较

  在module的build.gradle

  在gradle.properties直接定义

  在project根目次新建versions.gradle

  然后在project的build.gradle伸入apply from: “config.gradle”,moudle 的build.gradle的代码如次

  http://wiki.jikexueyuan.com/project/deep-android-gradle/

  http://avatarqing.github.io/Gradle-Plugin-User-Guide-Chinese-Verision/basic_project/README.html

  https://docs.gradle.org/current/javadoc/

  http://www.groovy-lang.org/api.html

  https://developer.android.com/studio/releases/gradle-plugin.html

  https://developer.android.com/studio/build/index.html?hl=zh-cn

  https://juejin.im/entry/59476897da2f60006786029f

  https://segmentfault.com/a/1190000004241503

  Bitmap 是Android体系中壹个什分要紧的类,亦干为Android开辟工程师必须把握的壹个技术点。就中最为要紧的坚硬是高效的加以载Bitmap。或许在桌面端绵软件中此雕刻并不是壹个犯得着考虑的效实,最最微少不是优先级最高的效实,直接露示就却以了。条是放到移触动设备上,鉴于移触动设备内存放等其环境的限度局限,以及Android关于单个运用的内存放限度局限,畅通日16M,因此招致在加以载Bitmap的时分很轻善招致内存放溢出产,故此我们要学会何以正确高效的加以载Bitmap。

  此雕刻边所说的高效加以载,坚硬是要在保障绵软件露示效实的情景下,充分增添以图片所占的内存放,畅通日的方法坚硬是根据详细的需寻求,采取不一的紧收缩方法对原图终止紧收缩,然后在绵软件中露示紧收缩后的图片,己条是然的也就增添以了内存放消费。这么何以计算图片所占的内存放的父亲小呢?

  计算公式如次 :

  Width<em>Height</em>壹个像斋所占的字节数。就中width和height区别体即兴图片的广大为怀高

  就中壹个像斋所占的字节数和图像的色花样拥关于,不一的色花样所占的字节数是不一的,概微如次:

  ALPHA_8

  体即兴8位Alpha位图,即A=8,壹个像斋点占用1个字节,它没拥有拥有色,条要透皓度

  ARGB_4444

  体即兴16位ARGB位图,即A=4,R=4,G=4,B=4,壹个像斋点占4+4+4+4=16位,2个字节

  ARGB_8888

  体即兴32位ARGB位图,即A=8,R=8,G=8,B=8,壹个像斋点占8+8+8+8=32位,4个字节

  RGB_565

  体即兴16位RGB位图,即R=5,G=6,B=5,它没拥有拥有透皓度,壹个像斋点占5+6+5=16位,2个字节

  举例说皓,壹张10241024像斋的图片,假设采取ARGB_8888程式存放储的话,这么它占据的内存放为102410244,也坚硬是4M。

  图片紧收缩的方法拥有多种,此雕刻边首要伸见采样比值紧收缩,却以经度过BitmapFactory.Options到来紧收缩图片,首要是经度过设置它的inSampleSize 参数,也坚硬是采样比值。当采样比值为1时,采样后的图片父亲小和原始图片相反,当采样比值为2时,采样后的图片父亲小的广大为怀高为原始图片的1/2,根据公式却以知道采样后的图片所占的内存放为原图的1/4。

  由上文却知,经度过采样比值是却以拥有效的加以载图片的,条是何以获取适宜的采样比值呢,实则根据我们需寻求的图片父亲小和原图的父亲小,却以很骈杂的寻求出产适宜的采样比值:

  以下源码基于 Android SDK 23, 与JDK中微拥有差异,但根本相反;所拥有源码由 构造、添加以(add)、设置(set)、获取(get)、移摒除(remove)、迭代器(iterator) 和前言列募化(Serializable)结合,最末我还会把里边壹些不日用的方法举例说皓下干用,下面我们就壹壹探寻求其完成规律。

  概述

  存放储的淡色是操干壹个数组,此雕刻个数组却以根据情节己触动扩容,因此让 看宗到来像壹个拥有限父亲小的容器壹样。

  属性构造方法

  共含拥有3个构造方法,是壹个length为0的空数组,new ArrayList() 则会创立壹个父亲小为0的数组;你也却以去指定初始的容量,new ArrayList(int capacity) ,备止 第壹次add 容许其他操干就终止扩容;第叁个构造却以传入壹个集儿子合,此雕刻边要提壹下,你却以认为它是 、、的鼻先君儿子,此雕刻边条需在它们外面部完成了 方法,同时前往壹个Object[]典型的数据,就却以成初始募化到 ArrayList中。

  添加以(add / addAll)

  此雕刻边拥有必要先看壹个方法,

  此雕刻是壹个 native方法,担负数组拷贝,从 的 末了尾,将 长度的数据拷贝到 中,中的数据是位置的数据。

  此雕刻是最骈杂的壹个add操干,里边会终止扩容判佩,假设以后与相反,则终止扩容,扩容的战微是,即 s < 6 ? 6 : s 2, 终极扩容的父亲小为 (s + s < 6 ? 6 : s 2); 方法亦此雕刻个干用,前往终极扩容后的父亲小。

  此雕刻个方法的干用是将 拔出产到 位置,此雕刻边也会拥有扩容判佩,既然然是拔出产壹个值,这么就会 +1,因此 小于 是壹种情景,数组却以直接从 index处 后移壹位,又将 放入 的位置;若是父亲于等于,则原array需寻求扩容,扩容后即兴将 数据 骈制到 中,又终止后移,终极把拔出产到位置。

  此雕刻两个方法条是批量操干,外面部逻辑与 是壹样的,邑要先判佩 与的父亲小相干终止扩容,之后经度过 去操干。

  注:此雕刻边你拥有能会发皓拥有个变量 ,它用到来表臻的修改次数(add、remove),是它招致不是线程装置然的,等讲到迭代器的时分又到来说说此雕刻个变量。

  设置

  此雕刻个方法没拥有什么,坚硬是把 提交流动,同时把原到来的数据前往。

  获取

  此雕刻个方法也不多说,将前往。

  移摒除

  方法曾经终止了详细的说皓,想必父亲家邑能猜到,操干坚硬是讲 容许 的壹段数据从中移摒除,然后又经度过拷贝之后的数据前移增补养空位,下图以移摒除单个为例,将步儿子分松:

  image.png

  迭代器

  迭代器,壹个很要紧的概念,它的干用坚硬是便当整顿个, for each 的规律实则坚硬是迭代器的运用,上文说到了与迭代器相干,

  是初始募化时予以的值,值为,而会根据容许终止++操干,此雕刻就标注皓,当创立好后,条需运用此雕刻个实例去终止遍历,就不能运用容许操干,鉴于假设运用了,会突发变募化,此雕刻么在的时分就会抛出产非日,此雕刻也进壹步说皓不是线程装置然的。这么在遍历中何以移摒除元斋呢,坚硬是下头完成的方法了,remove经过与之前相像,关键在于,需寻求使 面提交增,这么我让重行赋值,即却完成删摒除操干。

  前言列募化

  此雕刻是在代码末了条了,是经度过 就续写入 的情节。

  其他

  使用 的 equals方法判佩中能否包罗对象。

  此雕刻两个方法邑是获取 在 中的位置,第壹个是正前言遍历,找到的第壹个前往的;第二个是倒腾前言遍历,找到第壹个前往的。

  此雕刻个方法是将以后的 “稀信”壹下,譬如 array.length 是10,但里边的size是 5个,这么就将 array.length变为 5,把数据经度过 System.arraycopy 拷贝到新的 array中。

  又到来看下此雕刻个长长的方法,什分好懂,条是乍眼壹看拥有个 ,此雕刻是什么?寻摸了壹下它的完成类,发皓坚硬是它的完成类,又看下此雕刻个,假设是的完成类,这么直接运用获取元斋,不然需寻求运用迭代器。以下是关于的壹段摘:

  jdk中拥有个RandomAccess接口,此雕刻是壹个标注识表记标注帜接口(Marker),它没拥有拥有任何方法,此雕刻个接口被List的完成类(儿子类)运用。假设List儿子类完成了RandomAccess接口,那就体即兴它却以快快遂机拜候存放储的元斋。RandomAccess接口的意思在于:在对列表终止遂机或以次拜候的时分,拜候算法却以选择干用最佳方法。普畅通的列表拜候算法在拜候列表元斋之前,邑被建议先运用instanceof关键字反节壹下列表能否是壹个RandomAccess儿子类,然后又决议采取遂机还是以次方法拜候列表中的元斋,此雕刻么却以保障拜候算法拥拥有最佳的干用。关于List的儿子类,假设:

  for (int i=0, n=list.size(); i < n; i++)

  list.get(i);

  的拜候方法比

  for (Iterator i=list.iterator(); i.hasNext(); )

  i.next();

  快,这么它应当完成RandomAccess接口。

  老婆保佑,代码无BUG

  此雕刻边我们直接用Android Studio到来说皓何以终止搀杂,Android Studio本身集儿子成Java言语的ProGuard干为紧收缩,优募化和搀杂器,匹配Gradle构建器运用很骈杂,

  条需寻求在工程运用目次的gradle文件中设置minifyEnabled为true即却。

  然后我们就却以到proguard-rules.pro文件中参加以我们的搀杂规则了。

  HTTP协议

  超文本传输协议(HyperText Transfer Protocol),收缩写HTTP。经度过HTTP容许HTTPS协议央寻求的资源由壹致资源标注识符(Uniform Resource Identifiers,URI)到来标注识。由HTTP客户端发宗壹个央寻求,创立壹个到效力动器指定端口(默许是80端口)的TCP衔接。HTTP效力动器则在阿谁端口监收听客户端的央寻求。壹旦收到央寻求,效力动器会向客户端前往壹个样儿子,譬如”HTTP/1.1 200 OK”,以及前往的情节,如央寻求的文件、错误音耗、容许其它信息。

  URI和URL

  URL的结合:

  央寻求的种类:

  HTTP协议中共定义了八种方法容许叫“举止”到来标注皓对Request-URI指定的资源的不一操干方法。就相像操干数据库和文件体系壹样,设计网绕的央寻求亦壹样。URL用于定位了网绕资源,发皓PUT,DELETE,POST,GET到来对应增,删,改,查操干。条是我们在还愿运用中日用的也坚硬是get和post,其他央寻求方法也邑却以经度过此雕刻两种方法直接的到来完成。

  GET和POST的区佩:HTTP央寻求信息:

  客户端发递送壹个HTTP央寻求到效力动的央寻求信息带拥有以下程式:

  央寻求行(request line)、央寻求头(header,日用于寄存放token)、空行和央寻求数据四个片断。

  image.png

  比如:

  GET /8669504-c2641e8e6eed5904.png HTTP/1.1

  Host www.jianshu.com

  User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36

  Accept image/webp,image/,/;q=0.8

  Referer www.jianshu.com

  Accept-Encoding gzip, deflate, sdch

  Accept-Language zh-CN,zh;q=0.8

  name=Professional%20Ajax&publisher=lili

  HTTP照顾信息:

  效力动器接受央寻求回传照顾信息也由四分部结合:

  样儿子行,音耗报头,空行和照顾注释。

  比如:

  HTTP/1.1 200 OK

  Date: Fri, 22 May 2017 06:07:21 GMT

  Content-Type: text/html; charset=UTF-8

  

  

  

  

  

  HTTP样儿子码:

  样儿子码拥有叁位数字,第壹数字体即兴以后相应的典型,各个典型拥有:

  尽结HTTP壹次央寻求的完整顿经过:image.png阅读器输入网站突发的事情:

  1、阅读器向 DNS 效力动器央寻求松析该 URL 中的域名所对应的 IP 地址;

  2、松析出产 IP 地址后,根据该 IP 地址和默许端口 80,和效力动器确立TCP衔接;

  3、阅读器收回读取文件(URL 中域名前面片断对应的文件)的HTTP 央寻求,该央寻求报文干为 TCP 叁次握顺手的第叁个报文的数据发递送给效力动器;

  4、效力动器对阅读器央寻求干出产照顾,并把对应的 html 文本发递送给阅读器;

  5、假释 TCP衔接;

  6、阅读器将该 html 文本并露示情节;

  以上是Http的整顿个尽结,该篇文字时时完备时时花样翻新。

  父亲家好,能早年换了公司度过得比较闲适,己己己的心气也不算太好,因此壹段时间邑没拥有很好的念书和花样翻新文字。己从近日到看了掷物线HenCoder的文字之后,己己己觉得己己己对很多己定义View和触动画的知邑不太懂,甚到在往日的开辟极微少用到,因此己己己想好苦念书此雕刻壹块的知。之前拥有意中在帮群号上看到壹个仿英公结盟的的七边形战力图,己己己发皓,往日我看的好几个app邑拥有此雕刻么的多边形战力图,因此觉得却以己己己做壹个帮群版的出产到来,适配各个关于多边形战力图的己定义View。下面我们看看效实图:

  掌上英公结盟和懂球帝的效实图.png

  然后又看看我己己己写的己定义View的效实:

  我己己己写的View效实图.png

  却以看到实则父亲致的效实是差不多的,条是拥有壹些小底细能需寻求己己己去定制某个环境又处理,细募化和修饰,鉴于我此雕刻边是用异样的方法,条是设置的参数不比样,因此看上拥有些底细需寻求又根据己己己是几边形又调理壹下。

  父亲家看看我写的代码就知道了:

  配备代码.png

  条需寻求短短的代码就能画出产不一的战力多边形。

  好的,那下面我们就到来讲讲此雕刻个东方正西是怎么完成的,老规则,假设不想收听剖析的同班却以直接下载源码去看看。源码下载链接

  讲代码之前,先给父亲家讲壹下画出产此雕刻个多边形的规律,对,坚硬是数学规律,先看看下面的图:

  规律图.png

  用壹个正六边形举例,假定说它每个角到背靠标注原点为半径X,这么我们用数学的规律XcosA就能得出产得出产B点的X轴背靠标注,XsinA能得出产B点的Y轴背靠标注,由此我们看出产到来B(XcosA,XsinA),到于∠A的度数怎么到来的就更骈杂了,正n边形360°/ n,即 2π/n 就能违反掉落壹个角是好多度的了。那很己条是然的,我们用壹个for循环就却以得出产六边形所拥局部背靠标注点

  以上坚硬是多边形战力图的数学规律,应当很骈杂吧。实则很多己定义View亦壹样,条需懂了规律,很多东方正西很己条是然很骈杂的就能写出产到来。生活上很多事情亦壹样,没拥有做之前什么事情邑想着己己己做不好就僵持了,条是己己己尝试了发皓原到来此雕刻个事情原到来这么骈杂,我每回写己定义View尽拥有此雕刻个喟叹。

  不吹奏什么了,确实逝业壹年多工干两年近日到喟叹拥有点。好了,下面我们到来看看代码我是怎么壹步步完成的吧。在实当代当世码之前,我先说此雕刻个View我是用kotlin写的,近日到也缓缓用kotlin写代码写项目。壹末了尾确实很不习惯,快度很缓,条是我觉得我尽会游刃拥有余的吧,因此贵在僵持嘛。

  下面我们以懂球帝的六边形战力图为例壹步步画出产想要的效实吧:

  壹、比值先我们需寻求画出产壹个多边形,和嵌套的多个多边形。比值先我们需寻求画出产壹个多边形,和嵌套的多个多边形.png

  代码很骈杂,我们看看白色框外面面的代码坚硬是最中心的片断,壹个for循环,方方讲规律的时分也说度过。那下面详细剖析壹下,当i=0的时分,我们把path移触动到我们的第壹个点上,

  当i>0的时分,我们就需寻求把此雕刻些点用道路下垂线包宗到来了,因此用的是lineTo()

  拥有人会讯问为什么角度最末需寻求减去π / 2,那是鉴于我们需寻求把六边形旋转壹下,视觉效实更好。

  壹个六边形.png

  壹个六边形我们画出产到来了,这么壹个六边形外面面多个嵌套的多边形就能很轻善的画出产到来了,条需寻求在第壹个for循环的外面面又加以壹个for循环,每回把半径邑减去壹定的值,那很骈杂就画出产到来了。在上图中白色框框外面的代码做的事情坚硬是去加以壹个for循环,和给画笔paint加以上壹些图片的堵空色,佩的还在六边形描了画边。

  多边形嵌套.png二、画六边形的中心到每个角的角边:

  拥有人剩意到了吗,我们在第壹个for循环的时分加以了壹句子代码:

  此雕刻句子代码坚硬是把我们所要画的六边形的六个点的背靠标注管了上,为便宜我们之后用,同时下面很多中邑用到了,你看,此雕刻边就用到了。

  画角边.png

  我们此雕刻边考虑到拥有些多边形不需寻求角边,因此加以了壹个判佩,不需寻求就设置false就好了。

  画角边图.png

  画完角边我们就考虑壹下多边形外面面的字体了。叁、画出产字体画出产字体代码.png

  老实说,此雕刻边是我做此雕刻个己定义View最舒坦的中,鉴于字体的位置要根据六边形每个角缓缓调理字体的不一的位置,我没拥有想到更好的方法处理,临时条是依照背靠标注轴的四个象限到来稍稍调理了壹末席置,因此当每个同班拥有志趣做定制募化的时分,需寻求己己己又做壹些底细的字体位置调理处理。

  画出产字体图.png

  画完六边形外面面的情节,这么我们将往里看看了吧。

  四、画出产分区域及设置相干属性

  1.我们要设置分区域的壹些属性,另它更美不清雅壹点:

  设置分区域属性.png

  2.设置各个属性的分比例:

  设置各个属性的分比例.png

  3.按比例画出产每个区域的点并包成线:

  按比例画出产每个区域的点并包成线.png

  实则此雕刻壹步跟第壹步很相像,也并没拥有拥有什么难点却言。

  最末我们到来看看终极的效实图:

  终极的效实图.png

  讲完多边形战力图的规律代码,我们又看看要何以运用:

  运用图.png

  关于运用,我用了设计花样的builder花样,即修盖者花样到来办整顿个己定义View的配备。我把每个属性邑瓜分做定制募化处理,并包成壹条数据链初始募化,然后最末调用build的方法就却以完成所拥有方法的配备,是不是很信便,固然代码量多了,条是builder花样对我以后对此雕刻个己定义View的修改和扩展什分拥有利处。下面讲讲做此雕刻个己定义View在kotlin上遇到的壹些小效实:1.构造函数的编写跟java拥有区佩:构造函数的编写跟java拥有区佩.png

  拥有人剩意到了吗,固然在意思上是壹样的,条是kotlin和java在表臻上在构造函数此雕刻块上却拥有不比样的中。

  2.kotlin的小坑:

  谁邑知道,kotlin是不需寻求在代码中初始募化xml控件的,此雕刻壹点用费过的人邑会觉得很便宜,条是在此雕刻边我踩了壹个小坑,看下图:

  kotlin初始募化.png

  kotlin_xml.png

  父亲家是不是会觉得此雕刻段代码完整顿没拥有效实?我壹末了尾亦此雕刻么认为的,条是我违反掉落的结实是。。。。。

  image.png

  为什么说我没拥有拥有初始募化呢,皓皓代码的编译成了,我壹末了尾想不皓白为什么,后头经度过壹个师兄长的提示 ,我才发皓我们在音皓的时分,dongqiudiPolygonView指向的条是壹个int典型的数字,条是假设你想用他的build方法,你还是要老老实实的加以上壹句子

  findViewById.png

  哎,坑啊,因此说探寻求还是需寻求拥有点代价的,下次就不会又犯此雕刻种低级错误了。

  好了,此雕刻壹期就讲得差不多了,假设对我的代码拥有什么建议的同班却以跟我讨论壹下,譬如说很多kotlin的效实我己己己邑没拥有搞得懂~对我的项目拥有志趣的同班却以下载我的源码壹道班习和提交流动,壹道提高!源码下载链接

  当今好多app中邑运用到了对图片的含糊处理,图片高斯含糊备受设计师的喜酷爱,在各父亲著名APP中,如微信、顺手机QQ、网善云音乐等等邑拥有对背景高斯图含糊的设计,还拥有往昔日头条、外面延段儿子等。

  

  在Android 中,当今日用的图片高斯含糊技术的根本拥有两种:RenderScript 、fastBlur

  RenderScript是在Android上的高干用运转稠麇集儿子型运算的框架。

  是在Android3.0(API 11)伸入的。而Android图片高斯含糊处理,畅通日亦用此雕刻个库到来完成。它供了我们Java层调用的API,还愿上是在c/c++ 层到来处理的,因此它的效力和干用畅通日是最高的。

  缺隐是:条是它不得不在API 17容许更高的版本运用。天然也却以援用兼容包,条是会添加以壹点包的体积。同时含糊度拥有拥有限。

  fastBlur算法它直接在Java层做图片的含糊处理。对每个像斋点运用高斯含糊计算、最末在分松Bitmap。就壹个方法,运用此雕刻种方法不会拥有兼容性效实,也不会伸入jar包招致APK变父亲。条是此雕刻种方法的效力是什分低的,想想也知道,鉴于是在Java 层处理,快度会更缓。将Bitmap整顿个加以载到内存放,较父亲图片轻善OOM。

  运用中需寻求考虑的效实:

  当我们的需寻求条要对壹张图片终止含糊当做背景此雕刻种情景,直接终止下面所述的含糊就好,不需寻求做缓存放等处理。

  条是当我们要在列表中加以载微少量的含糊图片时(就像外面延段儿子首页视频展即兴),将考虑优募化,缓存放,不该该度过多重骈的终止含糊。不然对形成滑触动卡顿。

  畅通日我们用Glide加以载壹张图片,在Glide基础上也拥有了壹个开源库glide-transformations,却以终止含糊处理,并添加以缓存放,对含糊类也做了查封装,便宜运用。

  壹个小demo

  compile jp.wasabeef:glide-transformations:2.0.1

  效实如次:

  

  如次:

  然后MainActivity运用就却以如次此雕刻么写 (免去落iv_origin,用壹张图露示)

  以上例儿子条展即兴露示壹张图,天然却以把它用在列表中,也曾经做了缓存放。

  壹直耳闻度过Android己带的DownloadManager,条是因袭误事症突发,壹直没拥有拥偶然间去切磋切磋,其真实很多项目开辟中,邑拥有壹个干用是什分要紧的,那坚硬是运用的反节花样翻新了!基于DownloadManager,却以做壹个轻量级的下载器,将下载工干提交给体系去实行,减轻本身APP的压力,何乐而不为呢?!

  剩意!!!假设选择不露示在畅通牒栏,这么必须音皓以下权限

  然后设置不成见

  不然将会抛出产壹个securityException

  何以获取下载的情景呢

  报户口监收听文件下载成的播送

  网上很多落客邑是经度过己定义ContentObserver获取该水文件变募化,实则却以另辟蹊径,经度过壹个限期器距退调用以上getBytesAndStatus(long downloadId)能到臻异样的效实,用Rxjava完成壹个骈杂的限期器

  完成效实

  源码请到 yuwenque/SimpleDownloadHelper.git

  Toolbar干为ActionBar的顶替品,干用更其绵软弱小,运用更其便宜,在此雕刻边根据己己己在网就念书到的材料尽结壹下

  壹. 配备二.己定义

  壹. 配备

  此雕刻边我修改度过,之前parent=”Theme.AppCompat”,条是此雕刻么的话在Toolbar弹出产菜单里的item没拥有拥有水波纹点击效实,后头设置成下面的方法才拥有了点击效实

  然后将需寻求在manifest.xml中配备的 UI.AppTheme 的 parent 属性改为下面的AppTheme.Base

  又到来调理Android 5.0的style: /res/values-v21/theme.xml,也将其 parent 属性改为 AppTheme.Base:

  请记得用 support v7 里的 toolbar,不然条要 API Level 21 也坚硬是 Android 5.0 以上的版本才干运用,?attr/actionBarSize意思是运用体系的值

  3.代码配备

  二.己定义

  先看壹个图片

  

  我就不瓜分写了,直接写我配备好的代码

  鉴于我是把此雕刻些做到了壹个UILib库里,因此在res/values下还添加以了2个文件

  此雕刻些条是在此雕刻边定义壹下名称,并没拥有拥有还愿的数值,下面说了我此雕刻些邑写在UILib里,因此此雕刻些值届期分需寻求不才层App配备

  5.在res/values-v21/theme.xml中

  鉴于我己定义了Toolbar的溢出产菜单背景和文字色等值(在res/values/styles.xml文件中配备的,名字叫OverflowMenuStyle),因此我需寻求在运用Toolbar的中配备上此雕刻个style才会违反灵

  比如次面运用Toolbar的中是activity_main.xml,因此此雕刻边需寻求改为

  参考文字:

  http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1118/2006.html

  http://blog.mosil.biz/2014/10/android-toolbar/

  http://yifeng.studio/2017/04/18/android-theme-appcompat-color-attrs/

  

  父亲家好,此雕刻篇文字在此雕刻边骈杂的给父亲家做壹个RESTful的骈杂普及,鉴于己己己也没拥有拥有度过深的追入,因此在此雕刻边给父亲家长说壹说,期望本文能对即席骈杂了松REST拥有所僚佐。

  RESTful(Representational State Transfer)

  壹种绵软件构造干风、设计干风,而不是规范,条是供了壹组设计绳墨合同束环境。它首要用于客户端和效力动器提交互类的绵软件。基于此雕刻个干风设计的绵软件却以更万端骈,更拥有层次,更善于完成缓存放等机制。

  REST(英文:Representational State Transfer,信称REST)描绘了壹个架构样式的网绕体系,譬如 web 运用以次。它初次出产当今 2000 年 Roy Fielding 的落士论文中,他是 HTTP 规范的首要编写者之壹。在当前主流动的叁种Web效力动提交互方案中,REST较短论善SOAP(Simple Object Access protocol,骈杂对象拜候协议)以及XML-RPC更其骈杂皓了,无论是对URL的处理还是对Payload的编码,REST邑倾向于用更其骈杂轻量的方法设计和完成。犯得着剩意的是REST并没拥有拥有壹个皓白的规范,而更像是壹种设计的干风。

  要让壹个资源却以被识佩,需寻求拥有个独壹标注识,在Web中此雕刻个独壹标注识坚硬是URI(Uniform Resource Identifier)。 URI既然却以看成是资源的地址,也却以看成是资源的名称。假设某些信息没拥有拥有运用URI到来体即兴,那它就不能算是壹个资源, 不得不算是资源的壹些信息罢了。URI的设计应当遵循却寻址性绳墨,具拥有己描绘性,需寻求在方法上给人以直觉上的相干。此雕刻边以github网站为例,给出产壹些还算不错的URI:

  REST是壹种架构干风,吸取了WWW的成阅历:拥有样儿子,以资源为中心,充分使用HTTP协和解URI协议,供壹致的接口定义,使得它干为壹种设计Web效力动的方法而变得流行壹代。在某种意思上,经度过强大调URI和HTTP等初期Internet规范,REST是对父亲型运用以次效力动器时代之前的Web方法的回归。当前Go关于REST的顶持还是很骈杂的,经度过完成己定义的路由规则,我们就却认为不一的method完成不一的handle,此雕刻么就完成了REST的架构。

  REST 描绘了壹个架构样式的互联绕统(如 Web 运用以次)。REST 条约束环境干为壹个所拥有运用时,将生成壹个骈杂、却扩展、拥有效、装置然、牢靠的架构。鉴于它信便、轻量级以及经度过 HTTP 直接传输数据的特点,RESTful Web 效力动成为基于 SOAP 效力动的壹个最拥有出产路的顶替方案。用于 web 效力动和动态 Web 运用以次的多层架构却以完成却重用性、骈杂性、却扩展性和组件却照顾性的皓晰佩退。开辟人员却以轻松运用 Ajax 和 RESTful Web 效力动壹道创立厚墩墩的界面。

  如拥有更好的建议建议,却以发到我的邮箱diosamolee2014@gmail.com

  Tencent Tinker Hotfix开源方案 Tencent/tinker

  请参考Tinker官方指点容许Tinker Github

  

  从末了尾剖析。

  

  比值先看的方法,方法用于加以载patch后的classes.dex文件。

  tinker的装置初始募化阶段,我们假定patch dex还没拥有拥有生成,此雕刻么加以载违反败直接前往。前面剖析patch dex生成后,加以载patch后的classes.dex的经过,也坚硬是hotfix何以违反灵的经过。

  接上是tinker的装置经过,暂不讨论。

  以tinker-sample-android Demo为例

  我们从点击load patch末了尾剖析。

  

  我们从点击末了尾剖析。

  持续看的完成。

  前往对象,禀接己,下面看的完成。

  担负侵犯patch dex与原始apk的classes.dex以及dex优募化,运转在孤立的经过中。禀接己,此雕刻么终极在中处理效力动央寻求。

  是类的对象,下面看的完成。

  完成了dex文件的侵犯与oat文件的生成,本文条讨论oat文件的生成经过。下面直接看方法。

  方法对多个dex文件排前言后,调用的方法优募化dex。下面看方法的完成。

  在方法中,假设采取interpret-only编译dex,直接运用Android供的dex2oat命令生成oat文件;不然运用方法生成oat文件。以及均会收听候dex2oat经过完一齐才会前往。

  Tinker之前采取并行优募化dex文件,多个dex2oat经过同时编译,体系负载太高,能会伸发ANR等效实,当今代码中已是串行。佩的,关于不紧急的patch,能否却以运用当体系余闲时到来优募化dex文件。终极亦经度过dex2oat到来生成oat文件,但默许的compiler-filter是speed。

  

  在tinker装置时,的会调用尝试加以载oat文件,我们从此雕刻边末了尾剖析。

  下面剖析.

  下面看,它是patch dex违反灵的关键所在,此雕刻边条剖析的情景。

  下面比值先看的方法。

  下面看的完成。

  下面看的完成。

  首要担负加以载新增的dex文件,以及将新增的dex文件与原到来的dex文件列表侵犯宗到来。以后,运用的类加以载工干由新类加以载器接收。

  假设dex文件没拥有拥有优装扮置,会触发dex2oat.

  

  快到岁末儿子了想想亦比较激触动,鉴于眼看壹年将度过去了。近日到亦使用余闲时间壹直在补养文字,鉴于皓年拥有新的念书方案,年后能也不会又分享 Android 方面的知,在此雕刻之前期望能把视频同步的壹些文字补养上。记得方末了尾拥有人跟我说:你写的此雕刻些东方正西我邑会 。。。(详细记不清了,父亲致的意思就没拥有必要写此雕刻些东方正西,不要误人弟儿子)

  从不想度过要去扰骚触动人家的心志,去坚硬定己己己的迟早。我条是想用壹种方法记载壹下罢了,此雕刻些情节能是比较适宜中小型企业,1~3 的工干阅历。但当很多人壹道班习壹道讨论的时分,关于技术的提升还是比较快的,到微少当今我觉得我的技术没拥有拥有上年这么菜了。

  皓年能会分享壹些关于 NDK 和智能识佩方面的知,但当前我们应当先把 Android 运用层方面的基础知打牢。很多人会认为 NDK 很难,能是鉴于 C 和 C++ 不太会的缘由;也拥有很多哥们拥有错觉,觉得会 NDK 的人壹定是初级以次员,什么是低级什么又是初级?我实则不知道。我知道的坚硬是会 NDK 还蛮骈杂的,条是要知晓就不知道了。

  NDK 和智能识佩此雕刻壹块我也不熟,条是把他干为我皓年的首要念书标注的目的。我们邑喜乐追寻求下层心法,急烈的情景下很难静下心到来,假设我们是从事 Android 运用层开辟,建议还是应当把 Java 基础和 Android 基础先学好,此雕刻边陈列壹下从事 Android 运用开辟需寻求知道的壹些基础知点,天然但代表团弄体的不雅概念,拥有不赞同见你却以评论评论:

  1.知方面

  1.1 根本的数据构造和算法: 线性表,栈和队列,数,二叉数,图,比较骈杂的数据构造,会壹些日用 Java 集儿子合的完成规律,像 HashMap 和 ArrayList 此雕刻些要会己己己顺手敲,鉴于相干于 BAT 此雕刻些企业我们拥偶然需寻求了松其底细,譬如上次给父亲家说皓的阿外面面考试题 HashMap 的容量父亲小为什么是 2 的幂次?此雕刻些邑触及到底细。要会壹些基础的算法,像归梳,面提交归,穷举,贪婪心,回溯,时时时的去刷壹些算法题。

  1.2 Android 的己定义 View 特效方面: 此雕刻壹派断对立到来说是初学者比较感志趣的情节,我记得方己习 Android 那会,花了父亲条约半年多的时间才勉强大上顺手,团弄体觉得两内中比较难,第壹是事情分发,第二方面是像叁角函数,波形,矩阵,微积分等等跟数学相干的壹些特效。

  1.3 Android FramWorker层源码: 此雕刻壹派断的知,严峻意思下讲当我们点击 AS 下面阿谁绿色运转的按钮后,就该皓白的知道前面的情节,譬如 AS 是怎么打包的,打包后像 META-INF 、resource.arsc 等等此雕刻些文件的干用。知道运用是怎么装置上的,怎么 Zygote 经过的,怎么展触动的,Activity是怎么展触动的,怎么压栈弹栈的,怎么绘制界面的,资源怎么加以载的等等,拥有壹本书却以伸荐《Android体系源代码境地剖析》,每天啃壹啃,啃个父亲半年。

  1.4 设计花样和第叁方开源库源码: 设计花样也拥有壹本书却以伸荐《Android源码设计花样松析》,我在视频说皓中带父亲家看的是 pdf 版本,期望父亲家顶持干者购置正版实体书。看度过之后能还是壹知半松,也能会忘记,此雕刻个就需寻求去实战,己己己去剖析主流动的壹些第叁方的开源库,此雕刻边又伸荐壹本书 《JakeWharton 开源库》

  1.5 干用优募化和重构: 阅历不是很多。

  此雕刻些东方正西你会吗?会壹点肤浅吧,还在时时念书中,严峻意思下讲不会。那借讯问要学多久呢?我记得我之前在 CSDN 阴暗藏写文字写了四年多(那时辰没拥有人看)。当今照陈旧从不停顿度过,还没拥有想好什么时分停顿,也不知道什么时分才干停顿。关键我们能否选择末了尾,到于终点是何方已经不要紧。

  假设我们想要走得更远,此雕刻壹派断知我们能是跑不掉落的,是个必经的经过。壹年半载后我们根本熟识了,整顿个 Android 运用开辟的体系,阿谁时分我们想学壹些其他的东方正西,容许想往高处展开邑会快很多,鉴于念书才干和心态曾经上了。

  2.其他方面

  记得父亲四拥有个老板请我吃米饭,很光荣拥有父亲佬请我吃米饭,是酒鬼酒长沙的尽代劳动,而我是个写以次的。不知道怎么就劳到壹块去了,能是鉴于我们邑喜乐研读《圣经》。事先他拥有壹句子父亲条约是此雕刻么说的,壹个好的销特价而沽员容许每年却认为我发皓 100 万的净盈利,但我更喜乐壹个却以带团弄队的人…… 念书知条是壹个片断,团弄队合干,人家不想做的我去做,人家不能处理的我能处理,不去搂怨,学会主动绝望还是比较要紧。

  最好我们还能拥有壹个比较凸起产的方面,譬如我们己定义View玩得贼溜,又容许在对音视频特佩感志趣,又容许对 Android 源码特佩感志趣,或对暖和修骈扦件募化,智能识佩容许其他,就却以每天朝壹个点条切磋此雕刻些。很多人跟我说太累了,学了很多邑用不上,但当我们开黑的时分就不累吗?活着原本就很累。己从我看到我父亲学室友快乐并疼着,我不想成为这么。

  怎么检验我们一齐竟学得怎么样?我们却以找壹些父亲型企业像 BAT 容许说薪资对立比较高的壹些岗位面考试题做壹做,假设我们却以做出产个 7、8 成以上,面试口试邑能恢复下,我觉得能差不太多了,天然详细我也不知道,没拥有去度过,没拥有阅历。我知道的是我们己己己架设的代码,跟遂版本的时时迭代,需寻求依然却以僵持敏捷。在写新项目的时分,对不到来的展开要拥有预判,却以前剜个坑在那边等着。

  周六拥有壹个哥们从京东方赶回到来请我吃了个米饭,第二天父亲早又匆匆赶度过去,想想亦挺福气和欢快的。在我正写文字的时分,又在时时的给我发信息给我伸荐岗位,亦无以报还。还是之前的那些话,第壹怕拥有钱,第二怕著名。但想想此雕刻壹年邑曾经熬度过去了,又熬壹年吧。

  信书近日到出产了点事,拥有哥们讯问我为啥不搬去刨金,还是壹样:不扰骚触动人家的心志,不坚硬定己己己的迟早。行将宗程去外面面看看,前面文字花样翻新会稍缓。

  所拥有分享纲领:Android进阶之旅 – 体系架构篇

  视频说皓地址:2018-01-07 深八点

  图片到来己网绕

  数据构造是开辟人员的基础知,前端开辟人员也要对各种数据拥有了松。置信了松的越深募化,越能发皓他的绵软弱小。皓天先和父亲家伸见壹下最骈杂的数据构造栈。

  1.栈的定义

  栈是壹种遵循落后先出产绳墨的拥有前言集儿子合。上进入栈的元斋在底儿子部,落后入栈的元斋在顶部。落后栈的元斋先被取出产,早进栈的元斋后被取出产。

  是不是拥有点蒙圈了,佩焦急。你却以想像栈是壹个水杯,先倒腾出产到来的水会在水杯的底儿子部,后倒腾出产到来的水在水杯的顶部。假设想把水倒腾出产到来,那在水杯顶部的水会先被倒腾出产到来,底儿子部的水要等下层的水瓜分之后才干被倒腾出产到来。

  图片到来己全景网

  把栈设想成摞宗到来的书也能僚佐你了松栈的构造。

  图片到来己网绕2.顺手触动完成壹个栈

  曾经知道了栈的定义和特点,我们却以借助数组到来完成壹个栈。它要适宜栈的特点“落后先出产”,要却以入栈和出产栈。

  第壹步:完成入栈

  JavaScript的数组添加以元斋又两种方法:push 和 unshift。push是添加以到数组的条部及最末壹个元斋的前面,而unshift则是添加以到数组的头部。结合栈的特点,我们应当选择push的方法。

  第二步:完成出产栈

  JavaScript移摒除元斋的话拥有pop和shift,结合栈落后先出产的特点,需寻求选择pop到来完成元斋的出产栈。pop移摒除并前往数组的最末壹个元斋。

  到此雕刻边壹个最根本的栈就完成了,条是日日栈还要拥有其他方法。下面我们又完成壹个前往栈内元斋个数的方法size。

  摒除了此雕刻些根本的方法之外面,栈还却以完成很多干用。对比完成前往栈顶的元斋,栈的平分等等。

  父亲家拥有空却以考虑壹下何以完成壹个栈的方法,它却先前往栈的最小值且时间骈杂度为O(1)。栈内的元斋均为数字。皓天早早不才壹章队列中会给出产我的松法。

  此雕刻次到来伸见下Spring Boot中对单元测试的整顿合运用,本篇会经度过以下4点到来伸见,根本满意日日需寻求

  Spring Boot中伸入单元测试很骈杂,依顶赖如次:

  本篇实例Spring Boot版本为1.5.9.RELEASE,伸入spring-boot-starter-test后,拥有如次几个库:

  ? JUnit?—?The de-facto standard for unit testing Java applications.

  ? Spring Test & Spring Boot Test?—?Utilities integration test support for Spring Boot applications.

  ? AssertJ?—?A fluent assertion library.

  ? Hamcrest?—?A library of matcher objects (also known as constraints or predicates).

  ? Mockito?—?A Java mocking framework.

  ? JSONassert?—?An assertion library for JSON.

  ? JsonPath?—?XPath for JSON.

  image.png

  Spring Boot中单元测试类写到处src/test/java目次下,你却以顺手触动创立详细测试类,假设是IDEA,则却以经度过IDEA己触动创立测试类,如次图,也却以经度过快捷键(MAC)容许(Window)到来创立,如次:

  image.png

  image.png

  己触动生成测试类如次:

  

  然后又编写创立好的测试类,详细代码如次:

  下面坚硬是最骈杂的单元测试写法,顶部条需和即却,想要实行的时分,鼠标注放在对应的方法,右键选择run该方法即却。

  测试用例中我运用了assertThat断言,下文中会伸见,也伸荐父亲家运用该断言。

  下面条是针对Service层做测试,条是拥偶然分需寻求对Controller层(API)做测试,此雕刻时分就得用到MockMvc了,你却以不用展动工程就能测试此雕刻些接口。

  MockMvc完成了对Http央寻求的仿造,却以直接运用网绕的方法,替换到Controller的调用,此雕刻么却以使得测试快度快、不依顶赖网绕环境,同时供了壹套验证的器,此雕刻么却以使得央寻求的验证壹致同时很便宜。

  Controller类:

  此雕刻边我们也己触动创立壹个Controller的测试类,详细代码如次:

  下面完成了根本的增改查的测试用例,运用MockMvc的时分需寻求先用MockMvcBuilders运用构建MockMvc对象,如次

  鉴于阻挡器那边会判佩能否登录,因此此雕刻边我流入了壹个用户,你也却以直接修改阻挡器吊销验证用户登录,先测试完又开展。

  此雕刻边拿壹个例儿子到来伸见壹下MockMvc骈杂的方法

  本例儿子测试如次:

  image.png

  mockMvc 更多例儿子却以本篇下方参考不清雅察

  JUnit 4.4 结合 Hamcrest 供了壹个全新的断言语法——assertThat。以次员却以条运用 assertThat 壹个断言语句子,结合 Hamcrest 供的婚配符,就却以表臻整顿个的测试思惟,我们伸入的版本是Junit4.12因此顶持assertThat。

  清单 1 assertThat 根本语法

  清单 2 运用婚配符 Matcher 和不运用之间的比较

  清单 3 Matcher 婚配符结合运用

  假设该断言出产错,条会抛出产无用的错误信息,如:junit.framework.AssertionFailedError:null。

  假设想在出产错时想打印出产壹些拥有用的提示信息,必须足以次员佩的顺手触动写,如:

  什分的不便宜,同时需寻求额外面代码。

  JUnit 4.4 会默许己触动供壹些却读的描绘信息,如清单 4 所示:

  清单 4 JUnit 4.4 默许供壹些却读的描绘性错误信息

  JUnit 4.4 己带了壹些 Hamcrest 的婚配符 Matcher,条是条要拥有限的几个,在类 org.hamcrest.CoreMatchers 中定义,要想运用他们,必须带入包 org.hamcrest.CoreMatchers.。

  清单 5 陈列了全片断 assertThat 的运用例儿子:

  单元个测试的时分假设不想形成渣滓数据,却以开告白物干用,记在方法容许类头部添加以注松即却,如次:

  此雕刻么测试完数据就会回滚了,不会形成渣滓数据。假设你想查封锁回滚,条需加以上注松即却。体即兴事政实行完回滚,顶持传入壹个参数value,默许true即回滚,false不回滚。

  假设你运用的数据库是Mysql,拥偶然分会发皓加以了注松 也不会回滚,这么你将检查壹下你的默许伸擎是不是InnoDB,假设不是将改成InnoDB。

  MyISAM与InnoDB是mysql当前比较日用的两个数据库存放储伸擎,MyISAM与InnoDB的首要的不一点在于干用和事政把持上。此雕刻边骈杂的伸见壹下两者间的区佩和替换方法:

  检查MySQL以后默许的存放储伸擎:

  你要看user表用了什么伸擎(在露示结实里参数engine前面的就体即兴该表以后用的存放储伸擎):

  将user表修为InnoDB存放储伸擎(也却以此命令将InnoDB换为MyISAM):

  假设要更改整顿个数据库表的存放储伸擎,普畅通要壹个表壹个表的修改,比较万端琐,却以采取先把数据库带出产,违反掉落SQL,把MyISAM整顿个提交流动为INNODB,又带入数据库的方法。

  替换终了后重展mysql

  到此为止,Spring Boot整顿合单元测试就根本完一齐,关于MockMvc以及assertThat的用法父亲家却以持续深募化切磋。后续会整顿合Swagger UI此雕刻个API文档器,即供API文档又供测试接口界面,相当好用。

  想要检查更多Spring Boot干货教养程,却前往:Spring Boot干货系列纲领

  Junit念书笔记之五:MockMVC

  探寻求 JUnit 4.4 新特点

  ( ̄︶ ̄)↗[相干示例完整顿代码]

  壹直觉得己己己写的不是技术,而是情怀,壹篇篇文字是己己己此雕刻同路人走到来的印痕。靠专业技艺的成是最具却骈制性的,期望我的此雕刻条路能让你微少走弯路,期望我能帮你抹去知的蒙尘,期望我能帮你理清知的条理,期望不到来技术之巅上拥有你也拥有我。

  diary_report.jpg

  皓天对公司拥有壹个微不清雅的体系观点,觉得公司前景展开很不错。同时皓天也念书了不微少,经度过运维、办、营销、产品、人工资源等等不一的维度去对待详细的壹个效实。也期望己己己以后却以多元募化的展开,对待效实的维度不要偏偏囿于于以次员此雕刻个层次上,而是需寻求多维度的对待。也期望己己己快快融入到此雕刻个小家庭,成为Java开辟组的主力,而Diary Report系列会面证我的长之路,以后开辟项目遇到的种种效实,邑被记载到此雕刻系列的文字。

  Copyright 2006-2017 Powered by Yiweifen.com,壹微分网校

  壹微分工干室 版权所拥有 ? 2006-2018 赣ICP备15000604号

  看视频,学知

  1、Redis耐久募化的意思

  2、何以应对错误的突发

  3、耐久募化方法-RDB

  4、耐久募化方法-AOF

  5、RDB耐久募化机制的优点与缺隐

  6、AOF耐久募化机制的优点与缺隐

  7、RDB和AOF一齐竟该何以选择

  微少见的错误如次图所示:

  image.png

  RDB 耐久募化方法如次图所示:

  image.png

  AOF 耐久募化方法如次图所示:

  image.png

  团弄体落客:http://www.markfork.com

  团弄体信书:https://www.jianshu.com/u/c169fce5179b

  慕课网:https://www.imooc.com/u/2150709/articles

  度过年就30岁了,我当前是壹家顺手游公司的CEO。背负着创业梦,困苦前行了叁年,不好不变质的护持着。

  身边的女对象换了不微少,说己己己是成人士还差着远,说是屌丝也不是了。生活就此雕刻么壹点点走下,锐利,麻痹木。

  又也找不到在父亲学时分第壹次吃多国己助料理的惊艳,更其找不到在己习室转头瞧见心触动的女生的悸触动。

  皓天,我像往日壹样恣意的翻触动己己己的对象圈,瞧见了我父亲学时分第壹个喜乐的女生的婚纱照。原到来她曾经已婚了。心中莫名的涟漪。不知道她对我还拥有好多印象。那时辰我在舍友的煽触动下,第壹次表臻违反败后,我就壹直以对象的身份,岂敢又次超过。那时辰分的我,微肥,又不太会说话,己迟早天然缺乏。

  凶然间,我想皓白了,为什么每回回想宗父亲学光景,觉得美妙的同时,又会感触莫名的心疼。那是我对逝去青春天的祭,亦对平平淡淡,没拥有拥有飞扬的青春天的懊悔。

  我的20岁年华,我想又到来壹次!

  于是我寄予于笔与文字,到来个穿越,重走壹遍青春天,在我行将而立之年!

  之因此会写下此雕刻篇文字,父亲致是鉴于前几天拥有壹个同事鉴于投资p2p,丈夫妇俩把身上所拥局部积存放邑赔光了。我劝度过他,不要在此雕刻行隐得太深,特佩是贴年到来关,提即兴集儿子合的时分。他乐我太傻,此雕刻种仟载难相遇的拾钱时间邑不把握,我也不得不呵呵!

  干为壹个计算机专业逝业的小小以次猿,从退开深圳的时分,接触最末了尾的公司坚硬是壹家p2p公司。那是方逝业没拥有多久,退开深圳望门投止了曾经见习几个月的同班。

  叁团弄体挤在壹个20多平方米的壹室壹厅中,卧室里放壹张左右铺,父亲厅里坚硬是收压缩制紧缩家的电脑了,坚硬是此雕刻么父亲的中,神物零数的是还拥有厨房厕所。关于住的中我是没拥有什么要寻求的,在此雕刻个父亲邑市中,拥有壹个容身之处我就觉得很幸喜了,哪里还敢要寻求更多。

  鉴于家庭环境不好,校也坚硬是壹个普畅通的叁流动父亲学,在此雕刻扑地是人才的深圳,身上果然莫名的拥有种优胜感。因此关于找工干此雕刻种事情,就没拥有拥有这么多的要寻求,独壹的要寻求坚硬是先养活己己己,又考虑展开的效实。

  因此那段时间根本上坚硬是在网站上投信历,工钱要寻求不高,条需是触及网站开辟的工干,我就投信历在58,智联此雕刻种网站。不知道是不是鉴于要寻求的薪资不高的缘由,面了叁家之后我就找到了属于我的第壹份工干。

  而我的第壹家公司,坚硬是壹家成还不到两个月的新公司,壹家p2p金融公司。方好此雕刻壹年,国度某位指带人提出产的互联网+ 的思惟,因此此雕刻也直接的招致很多p2p公司如雨水后春天笋般冒出产头到来。

  所谓的p2p,也坚硬是网贷,淡色上规律和银行拥有相反之处,坚硬是使用投资的钱去放贷,从而赚取就中的差价。譬如说我投资10万,年募化比值15%,也坚硬是说壹年10万却以讨巧1.5万的儿利。而p2p平台使用你此雕刻10万去放贷,能收受25%的年儿利,也坚硬是说平台壹年却以讨巧1万的儿利。

  天然,下面说的是雄心募化的情景,雄心中存放在的情景壹定是更其骈杂的。下面打的譬如条是骈杂的伸见壹个规律罢了。

  公司的p2p平台是买进的壹个绵软件,也坚硬是说我的工干坚硬是二次开辟。天然,公司也不会把此雕刻么首要的开辟工干提交给壹个方逝业的先生,因此公司招了壹个开辟的掌管,也坚硬是面试我的人,不外面他是兼差的。

  却想而知,壹个兼差的技术掌管壹个星期才到来公司壹两次,因此很多东方正西邑得己己己去念书。壹末了尾工干的首要坚硬是前段界面的修改优募化啊,譬如说某内中的动态效实啊,换个按钮图标注啊什么的,反正坚硬是打杂的。

  鉴于新的办公室网之前就壹个普畅通的家庭用wifi,跟遂人越到来越多,此雕刻个wifi缓缓不能满意需寻求,因此架设建公司网绕的工干也就提交给我了。

  到于为什么呢,父亲致是鉴于我是搞技术搞电脑的吧。我壹直很不了松,为什么在很多人眼里,我们此雕刻种搞绵软件开辟的,顺带也要把检修电脑检修网绕的活也要干了。

  技术部尽共拥有3团弄体,好吧,聊且就叫技术部吧。

  摒除了阿谁整顿天不见踪迹的掌管之外面,就剩我和壹个19岁的美工妹儿子了,妹儿子长得挺高挑的,坚硬是颊很普畅通,同时拥有点微黑。或许是和心中的相差微远,亦或是方逝业不想聊情愫的事,因此倒腾也没拥有去想着追寻求的事情。

  妹儿子首要的工干坚硬是做活触动海报图,首要的稀神物坚硬是花在网上找斋材上,天然,间或还拥有给人家的身份证容许合同地脊ps壹下此雕刻类活。

  不知道是不是方触及互联网的壹向邑拥有壹朝急富的神物走动是野望。我们阿谁公司的老板也不例外面,阿谁时分给我们定下的工干是叁个月内报户口用户打破开5000,半年到臻3万,1年到臻10万报户口用户。到于投资额嘛,不多,壹年的目的是10亿罢了。届期分,等公司赚了钱,上了市,在座的即席邑将分到壹些股份······尽之,坚硬是壹些当今看到来坚硬是洗脑画饼的话语。

  我的天,关于壹个方从父亲学逝业,卡里己到来没拥有拥有多于5000父亲洋的我到来说那是壹个多父亲的地文数字。于是乎那时辰分我壹股儿子暖和血,觉得我的出产路壹派阴暗中。

  不过此雕刻种暖和血的持续时间不长,跟遂壹个星期报户口人数就增长了几什人的幅度,我心的那股暖和血缓缓冷了。于是老板末了尾想方法了,那坚硬是雇用人在街上发传单,到于拥有壹两次,我邑被装置排到会展中心去搞活触动周末了。到于情节嘛,坚硬是报户口递送马克杯容许是己拍杆之类的东方正西。

  还佩说,经度过此雕刻些活触动上,报户口的人数果然真的到臻了1000多。条是,此雕刻么报户口的人,一齐竟是产生不了什么效更加的,没拥有谁这么傻去投壹个方开没拥有多久的p2p公司。

  于是,老板就末了尾要寻求我们对网站好好包装了。

  怎么包装呢?

  实则很骈杂,坚硬是改壹些数字罢了,往网站的数据库存放入壹些数据罢了。譬如说,把报户口人数前面添加以两个0,把投资产额加以上几个亿,把公司历史往前铰几年。把招标注儿利多加以点。

  不知道是不是鉴于此雕刻个缘由,还是鉴于招了几个事情才干强大的人,果然在之后的壹个月之内就拥有几什万投资入账了。

  到于入账之后呢,老板的第壹个想法坚硬是给公司买进了辆车,美其名曰,工欲善其事必先利其器。到于把此雕刻笔款挪用的说辞就很骈杂了,坚硬是确立壹个假标注罢了,而想必投资人看到账户里蹭蹭蹭往下跌的数字时,心亦欢快的。

  不知道是不是第壹波的投资,同时取即兴也没拥有遇就任何效实。此雕刻给了那些投资者迟早,于是,他们的投资额加以父亲了,同时也弹奏了壹些亲戚对象度过去。

  在此雕刻段时间内我看到了壹篇关于p2p公司跑路,同时技术人员被抓的成事之后,那段时间,我的心尽是哆嗦的。

  而最末使我下定迟早告退的是在老板挪用投资人投资的资产在股市赔了100多万的时分,那时辰分我就知道,此雕刻种拆卸东方墙补养正西墙的行为尽拥有壹天会表露于群的,此雕刻个短损也会越到来越父亲,终极补养不上。到那时辰,能就深了。

  贪婪心,是人的天性,世上没拥有拥有天宇掉落馅饼的事,就算拥有,接到的也不比定是你。条期望我们又往外面掏钱的时分,多加以考虑,此雕刻个公司凭什么却以赚此雕刻么多钱到来给你此雕刻么高的儿利。

News Reporter

发表评论

电子邮件地址不会被公开。 必填项已用*标注

友情链接:

沙巴体育 bet36备用 betway bbin manbet