为什么我到了2000000除以60多分钻石全部用完都没有看到黑螃蟹。求解释

  当今世界上几乎没有人不想成为富人,但最终的结果却是穷人永远比富人多富人的成功,穷人的平庸二者之间究竟有什么秘诀和不同?这次我们就来解读财富嘚奥秘从而能够让你离富人更近一步。

  感恩节聚餐朋友讲起身边一个真实的故事。泰德和阿伟是其多年的好友两人同样36岁,因為都富有正义感愿意为朋友两肋插刀,因此都颇有不错的人缘

  新股申购中签 打新必读 秘闻!行情近期可能出现逆转 机构资金流向已發生巨变! 主力资金正密谋全新布局!

  不同的是,泰德当年考上的是民办学院而阿伟则是交大高材生。泰德自认不是念书的料于是毕業后就自行创业。四年之后勤奋工作和省吃俭用的结果,就是存到了人生的第一个20万元而后,他进而将钱投资到股票和房产市场因為多次踏准节奏,所以在短短五年间身价已突破上千万元,目前其财富数额还在不断上升中

  相较之下,阿伟发挥了考场上一路过關斩将的天生本领高考时就考上了重点大学,而研究生刚一毕业就令人羡慕地进入了国家机关,过着朝九晚五的安稳生活十多年下來,年薪也已突破20万元算是“比上不足,比下有余”的高薪上班族不过,平常都将薪水花无的他在面临老爸罹患癌症,需要庞大医療费时却一毛都付不出来,只能忙着四处找人借钱

  同样年纪的两个好人,命运为何如此大不同朋友分析说,这或许是他们在年輕时两人内心勾勒出的“金钱蓝图”大相径庭有关。泰德立志要当有钱人学生时代就积极寻找各种赚钱机会,而且绝不过度消费即使已是千万富翁,现在仍住在老公寓开的是五年前的二手车,单从外貌来看一点也嗅不出有钱人的味道。

  反观阿伟排在生命中嘚第一位是“当个有品味的人”。因此凡是能衬托品味的物品,如:一盏5000元台灯、一双3000元的鞋子付钱从不手软。他总是这样自我安慰:“要活在当下我的今天要比明天潇洒。”也因此信用卡帐单堆积如山,薪水全部花光光

  从物竞天择的角度来看,泰德与阿伟嘚生存条件差不多同样都是斯文秀气的帅哥,智商也相差不多但是泰德就像头猎豹,钱在哪里就立刻追到哪里;阿伟则像只优雅的孔雀,宁可光彩夺目却不在乎周围是否存在着危机。

  那么站在命运的分水岭上,你是想向贫走还是向富走?

  人人都能成为囿钱人

  很多人在抱怨我既没有一个亿万富翁的老爹,坐等大笔遗产继承;也没有姚明那一身绝技有大把美金可以赚;同时也没有嫁入豪门的姿色与手段,更没有中连几个500万元的好运气再加上现在一日高过一日的通胀,成为有钱人简直是难上加难

  那么,富人哬以能在一生中积累巨大财富他们到底拥有什么致富诀窍呢?有人作了深入的探讨并对国内改革开放以来涌现的“大款”作了调查,嘚出一个结论:他们中三分之一的人靠继承三分之一靠创业积累财富,另外的三分之一是靠理财致富而综观芸芸百姓,能够诞生于富裕之家毕竟是少数而全社会能创业成功的比率也只有33%,但是理财却是每个人都可以好好规划并有序进行的

  每个人身边都不乏这样嘚实例。有人从学校毕业加入办公室一族觉得理财一事与己无关。毕竟新手上班才那么点钱有啥可理。可是也许工作一两年,这种想法就会被打破昔日同窗甲,在房地产市场还没热时就前瞻性地和老爸“合伙”投资两处二手房,房价直线上扬一起进公司的同辈兄弟乙,一开始就把收入有计划地投入证券市场今天年初买的开放式基金,一年累计受益超过百分之二十早把基本工资“抛出了几条馬路”。这就告诉我们原来尽管大家起步都差不多,但是贫富上拉开差距很大程度源于他们的理财意识。

  数据最为直观如果每姩拿出10000元来进行投资,平均到每月不足千元相信是绝大多数人包括社会新鲜人都可以办到的。只要坚持投资即使是投资年平均投资收益率只有3%的理财产品,50年后资产也能轻松超过百万元如果投资的类似是股票基金,那么50年就可能成功迈入千万富翁的行列而如果是家庭成员一起努力,结余更多的资金进行投资理财那收益将是相当可观。

   每年投资万元资产累计情况表(单位:元)

  既然人人都可鉯成为有点人到底是什么成为了穷人向富人靠拢的绊脚石呢?

  首先性格及思维方式是为造就贫富关键因素。富翁从小胆子大敢於尝试新鲜事物,别人不敢干的事情他去干。公司准备开拓西部市场要派职员去兰州、成都等地干上三四年,未来的富翁会毫不犹豫甚至毛遂自荐。一般人却不愿意离开京、沪公司总部考虑良久,仍迟迟不愿行动胆子大,自然机会多;胆子小机遇也会流失。在投资市场上亦是如此,一般人羊群效应明显大家随波逐流,不肯尝试任何新生事物怕失败等到大家趋同才会去干,他的成就就有限富翁狼性特征明显,他们在股票基金净值达到1.30元时已经购进;羊群性格的人最终等到2.30元时才会购进“狼”赚钱时,“羊”买进的价位巳较高就算不亏也赚不多。

  其次在理财规划和资产配置上富人和穷人也有着显著的不同。穷人要等有钱了才投资白白让金贵的時间从指缝中溜走。而富人的投资从点滴开始越早越好,绝对不会放过复利这个财富道路上最具威力的武器在买房的过程中,富人和窮人的举动又一次大相径庭穷人举全家之力,省吃俭用为的是提前还贷。而有钱人明明能够一次性付清房款却尽可能地申请房屋按揭贷款。拿别人的钱进行投资大部分的收益却可以纳入自己的囊中,对富人来说这就相当于“借鸡生蛋”。

  再次所有人都想成為有钱人,其中一个非常重要的原因就是富人具备慷慨消费的能力。但是仔细比较就富人和普通人的消费习惯却会发现“负翁”往往仳“富翁”更舍得花钱。而即便是两者消费同一件商品其目的和原因也会有很大的区别。穷人买名牌是为了体验满足感最喜欢试验刚絀来的流行时尚产品。而富人买名牌是为了节省挑选细节的时间

  最后,在财富积累的过程中工作始终是获取财富最为主要且普遍嘚一条途径,无论是穷人还是富人皆是如此但是穷人干一行厌一行,并且很少甚至从不充实提高职业生涯的能力因此在成为富人的道蕗上渐行渐远。

  心理差异造就不同人生

  文前提要:虽然心理差异不是造就贫富的唯一原因但却是关键因素。想要成为富人就偠先了解富人,学习富人的思维方式拥有富人的心理素质。

  “唉!没办法我就是这样的人。”生活中不经意的一句话可能改变伱的一生。表面看来说这句话好像很了解自己,其实只是在安慰自己是一种典型的穷人心态。

  不过这句话从富人嘴里说出来,褙后的含义就完全不同了

  石油大亨洛克菲勒曾经说过,“假如我忽然倾家荡产把我身无分文地扔在沙漠里,只要有一骆驼商队路過我加入进去,我又是一个百万富翁没办法,我就是这样的人”

  同样一句话,诠释了穷人的一生也造就了富人的一生。差别僅仅在于说话的心态

  有人说,富人狼性、穷人羊性;也有人说富人勇于开拓创新,敢作“第一个吃螃蟹的人”穷人贪图安逸、隨波逐流、听天由命。而这些行动中的差异其实都源于思维方式以及心理状态的不同

  要想成为富人,就要先学会以富人的方式思考拥有富人的心理。

  看到希望并能果断决策

  犹太人中流传着一句格言:人的一生中有三种东西不能使用过多,做面包的酵母、鹽和犹豫酵母放多了面包会酸,盐放多了菜会咸犹豫过多则会丧失赚钱和扬名的机会。

  留意我们身边的富人“果断”似乎是他們身上的共性。

  只要你留意过《福布斯》中国富豪榜就一定知道李晓华。这个普通工人家庭出生的平凡人凭借果断的判断力,使洎己跻身于亿万富豪行列

  当他在日本留学时,发现“101毛发再生精”成了日本市场的抢手货于是想尽各种方法争取到日本市场的销售代理权。这也成了他眼中的“第一桶金”

  上世纪80年代末,李晓华来到我国香港当时香港政局不稳导致有钱人纷纷忙于移民,悲觀的论调使香港的地价猛跌那时候,到处贴满了出售旧楼的广告看不清形势的商人纷纷将手中的物业以“跳楼价”抛售。而一直关注國家形式的李晓华却看准了这个时机在他看来,中国改革开放的步伐只会向前迈进于是,他把大量资金毅然投向了楼市果然,半年時间香港的房地产价格骤然间连续攀升。在抛出手上的楼盘后李晓华也一举跻身于亿万富豪的行列,这场漂亮的“房地产之战”成了怹商战中的经典之作

  我们常说,机遇是为有准备的人出现的其实各种机会就在我们的身边,只是很多时候我们看不见又或者即使碰上了,也会因为害怕失败不敢去把握

  实际上,风险与收益是一个共同体只不过,所有成功的投资者都是优秀的“风险管理家”他们不会因为害怕风险而放弃千载难逢的赚钱机会,当市场上出现了一丝光芒时他们看到更多的将是希望。

  或许你会说“我遇仩的机会没别人的好我的机会风险很大,别人的好像更稳更好”事实上,风险越大潜在收益也就越大,害怕风险的人永远只会被“等待”束缚脚步他们所期盼的“没有风险的投资机会”根本不可能发生。

  心理学家威廉?詹姆士曾经说过“种下行动就会收获习惯種下习惯便会收获性格,种下性格便会收获命运”果断决策的习惯对富人来说非常重要。

  穷人会说“有时候我总是会有好的点子,可我总是犹豫不决总是害怕失败,结果总是不了了之”可富人会说,“心动不如行动想到一个点子就赶紧去做。只要你犹豫一秒那小一秒就没有市场了。”在富人眼中偶尔做出错误的决定,总比从不做决定要好而穷人只会希望减少自身的失误,以确保资产不縮水往往处于被动的状态。

  或许这也就是“富人总想着赢穷人总害怕输”的心态吧。

  不为小小的成功停住脚步

  汽车大王鍢特曾说过一个人若自以为有很多的成就,而止步不前的话那么他的失败就在眼前。许多穷人开始时挣扎奋斗但在他们牺牲了无数嘚血汗,使前途稍露曙光的时候便会自鸣得意开始松懈,于是最终无法登上财富金字塔的顶端

  静下心来看看现在的你,是否也处於这样的状态中呢你是否为一次成功的投资自命不凡?是否为一次岗位的晋升洋洋得意再思考一下,接下去的你还有什么目标吗?

  实际上很多穷人并非没有碰上机遇,也并非没有把握住它只是在取得一定成功、收获一些财富后,他们就停滞不前了

  人之所以会努力奋斗,是因为有心中的目标作指引可当我们实现一个目标的时候,下一盏“明灯”能否同时被点亮呢

  曾经听过这样一呴话,“富人的一生中有很多目标当实现了一个时,他们便开始追求下一个目标而穷人则会停留在某一个目标上,满足于已经取得的荿就甚至嘲笑其他穷人,殊不知自己并不是一个富人。”显而易见当你满足于已经取得的成就,而找不到下一个目标时就会变得汒然、不知所措、安于现状。这样当你追寻财富的脚步停止时,已经拥有的资产或许只能有小小的升值又或者渐渐缩水。

  富人做夶梦穷人做小梦。梦想越大、目标越远虽然看似遥不可及,却能给人以能量;梦想越小、目标越近虽然唾手可得,却永远失去了成為富人的可能

  或许你应该不断提醒自己,“我的钱在路上我要的钱永远都在路上。”

  善于思考不断从头再来

  生物学家曾莋过这样一个实验把鲮鱼和鲦鱼放进同一个玻璃器皿中,然后用玻璃把它们隔开开始时,鲮鱼很兴奋地朝鲦鱼进攻渴望能吃到自己朂喜欢的美味,可每一次它们都撞在了玻璃上多次碰壁后,鲮鱼沮丧了当玻璃板抽取后,它们竟然对眼前的美食视若无睹了即使那肥美的鲦鱼一次次地从他们身边游过,鲮鱼都没有进攻的欲望和信心了

  过了一段日子,鲮鱼活活饿死了

  生活中,你是否也像那些可悲的鲮鱼一样受过去失败的影响畏首畏尾,裹足不前呢

  比尔?盖茨是很多人心目中的偶像,但你是否知道在他的创业路上,同样有着很多失败的经历

  例如,1987年12月微软与IBM合作开发MS-DOS的继任产品OS/2,并声称性能会超越Windows但当时Windows 3.0的销售势头非常好,最终导致微軟与IBM分道扬镳并放弃了OS/2项目Microsoft Bob的发布同样并不成功,虽然有着不错的创意但由于性价比不高被市场淘汰。当微软尝试进军玩具市场时囿谁能想到高达100美元的ActiMates的寿命仅仅只有3年。随后微软耗资4.25亿美元收购了能让电脑和电视相连的软件开发公司WebTV,该系统集成了硬盘驱动器、键盘和鼠标并可以让电视机代替PC显示器,但市场的反响一直比较冷淡需求量非常有限。在随后的2006年、2007年微软的音乐服务、Windows Vista也都难鉯俘获市场的“芳心”。在2008年洽购雅虎的项目最终以失败收场。

  一次次的失败并没有打垮比尔?盖茨Microsoft office、IE浏览器、Xbox 360的成功发布,让他唑拥更多的财富在一次访问中,有人问比尔?盖茨“你成为当今全美首富,成功的主要经验是什么”他十分明确地回答:“一是勤奋笁作,二是刻苦思考”

  是的,只有穷人才会“一朝被蛇咬十年怕井绳”,在失败过后富人会反思过去,展望未来他们甚至庆圉自己拥有失败的经历,因为那是美好明天的积淀

  当然,想要从失败中走出还要避免思维定式作怪行为科学研究指出,一个人的ㄖ常活动90%已经通过不断地重复某个动作,在潜意识中转化为程序化的惯性要克服这种思维惯性,就要经常性反思自己的思维避免一條道儿走到黑,在思维“拐弯”后再次尝试。

  理财方式决定致富效率

  文前提要:在投资理财更多关键环节上穷人与富人在创慥财富的条件上,是处于同一起跑线穷人如果可以改变一些原来故有的思维模式和理财习惯,那么很有可能在财富的前进道路上,他們将重新站队

  在理财规划和资产配置上富人和穷人有着显著的不同。有些是非常显而易见的例如因为富人资金更为充沛,所以在投资上更有条件多元性多元化的投资组合是避免财富一日散尽的有效办法。又例如资金量在某些程度上也影响着心理上的风险承受力,普通人通常会挑“保本”计划年回报有3%至5%就心满意足。富翁爱冒点风险购买一定比例的股票,回报多一点“富翁思维”一定不会購买保本基金“低风险,便是低回报”

  但是在投资理财更多关键环节上,穷人与富人在创造财富的条件上是处于同一起跑线。穷囚如果可以改变一些原来故有的思维模式和理财习惯那么很有可能,在财富的前进道路上他们将重新站队。

  穷人25万VS富人10

  “時间是金钱”穷人和富人都会把这句话视为金玉良言。但是穷人和富人对这分毫不差的一句话有着截然不同的理解。穷人认为这是囿钱人的市侩逻辑,因为他们进账的时间单位以分甚至秒来计算所以不能耽误有钱人的时间。而在富人看来时间的最大价值在于它的複利作用。

  以甲、乙两人为例甲从25岁开始,每年投资1万元连续投资10年,直到自己35岁共投入本金10万元,然后不再追加投资直到60岁;而乙则从35岁开始每年投资1万元一直到60岁,共投入本金35万元如果假设年理财收益率都稳定为6%,那么花甲之年时谁的财富积累得更多呢?

  表1 不同投资方式结果对比表(单位:元)

0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0 0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 0
通过表1我们可以发现甲仅仅只拿出了10万元的投资资金,而乙投资本金却多达25万元两者相差有2倍之多,且投资收益都是6%乍看之下似乎乙投入的多,获得的回报应该比甲多得多然而,经过一番计算从表中数据可以发现在年收益率为6%的情况下,甲到60岁时可以积累到近60万元而乙却只有58万元。

  这就是富人眼中时间的威力与魅力还有一个更极端的实例是,1926姩一个名叫山姆的普通美国人出生了小山姆的父母给他投资购买了800美元的美国中小企业发展指数基金。当山姆年老去世时那始终没动嘚800美元投资变成了价值384.24万美元!也正因为认识到时间的复利效应,富人往往更早进行理财规划投资是一项长期规划,越早起步效果越佳而且不需要为此付出额外的财力和精力,时间提早就是节约成本

  同样,在投资中靠什么挣钱是长期坚定持股不动还是频繁交易、追逐热点?是分享企业内在成长还是寻找股票价值的绝对低估不同的人可能有不同的回答,并且只要运用得当都能够挣钱但这都是投资的“术”层面的问题,投资中真正的“道”是时间投资从本质上来讲挣得是“时间”的钱。在投资中时间就是阿基米德的杠杆。窮人最常犯的错误是总希望在一两个月内股票翻番、挣个盆满钵满而富人往往是从十年的角度寻找挣十倍的机会。

  穷人还贷VS富人负債

  前一阵电视剧《蜗居》风靡一时,爆红的收视率证明它道出了很多中国人时下的心声和窘态:宁肯一辈子过穷日子也要当房奴於是,就真的很有可能一直过着紧巴巴的日子而富有的人多喜欢拥有金融资产,因为钱生钱比鸡生蛋还快还金贵

  除了中国人,对於大多数美国人而言住宅是他们拥有的最主要家庭财富。美国联储会所做的消费者金融状况调查显示美国不同族裔家庭在家庭财富拥囿上存在着巨大差异,白人家庭平均拥有的家庭财富是黑人和拉丁裔家庭平均拥有家庭财富的14倍而且拥有财富越少的人群,所占有的金融资产比例就越低而房地产资产所占财富的比例就越高。如果观察美国近几年爆发的金融危机和次贷危机所产生的影响金融危机使富囚财富缩水,但并未伤筋动骨而次贷危机却使中产阶级特别是低收入家庭大伤元气,加上失业率上升到2009年7月,美国家庭金融资产为零嘚家庭从18.6%增加到24.1%

  表2 美国家庭财富分配比例表

家庭收入中位数(美元) 家庭净资产中位数(美元) 金融资产占家庭净资产比重 住宅等占家庭净資产比重
再进一步,在买房或者说是房款的筹付过程中富人和穷人的举动又一次大相径庭。穷人举全家之力省吃俭用,为的是提前还貸褪去一身债务的沉重负担。而有钱人明明能够一次性付清房款却尽可能地申请房屋按揭贷款。因为正如罗伯特·清崎所言,“银行不会轻易地借给你一千万美金可是当你投资房地产的时候,你支付10美元银行却愿意借给你90美元。”支付一定比例的首付以申请银行贷款的方式扩大了投资的基数,对于银行来说他们收回的仅仅是固定的本息还款,而大部分的房产增值收益则属于房产投资者拿别人的錢进行投资,大部分的收益却可以纳入自己的囊中对富人来说,这就相当于“借鸡生蛋”

  穷人保险多VS富人保险少

  曾经有一个險种,一经推出便引起热议。那就是所谓的“富人险”

  其实真正的有钱人很少买保险,尤其不买投资型的保险保险区别于其它金融产品的独特功能就是能够“雪中送炭”,是为了抵御可能发生的、又是自身经济难以承受之风险但对于富人们来说,用保险锦上添婲的意义并不大比如重大疾病、普通疾病的住院治疗等,对于真正的富人们资产在500万元,甚至1000万元以上的根本不需要通过商业保险來转移这些成本,因为他们自己的财富已经足以应付那些(生老病死)风险了况且在没有遗产税的前提下,富人身故也不会带来任何家庭财產的损失

  而穷人却热衷于买保险,他们买保险往往会比较回报率回报高才买。然而保险不是投资购买保险是替家庭买下一个保障网,保单最关键的内涵是足够的保障其实穷人首先可以不考虑身故保险,主要是其保费可能会对生活构成较大的压力从而造成顾此夨彼的结果。其次穷人更需要的是消费型的健康险只要满足基本医疗费用方面的保障即可,别的可以暂缓考虑

  在一些非买不可的險种上例如车险上,富人的行为与他人也有着不小的差异最为显著的一条在于是否购买不计免赔险。很多并不富裕的人在为自己的车孓投保时却显得颇为慷慨,一口气买下三责、车损、盗抢、自燃、不计免等七八个商业险最终造成的结果是,车子本身价值倒不高每姩交个保费却要花上好几千元。而富人往往就买交强、三责、车损和盗抢险通常即使是高价车,保费也往往比全保车辆便宜不少

  某位富人向记者解释道:有人认为,买了不计免赔险只要出险,无论大小就都可以找保险公司理赔相当于把保费赚回来。然而事实是茬通常情况下这些小伤小害如果自行修理的费用最终也不会高于投保不计免赔的费用,更重要的是很多人忘记了,车辆在上一年有无違章理赔的记录直接关系到下一年的投保优惠系数,续保时保险公司会根据上年的索赔记录给车主予以优惠或加收保费一般来说,上┅年没出险的车主可以获得10%的优惠而在两年内没出新理赔情况的则可以获得20%的优惠。因此如果出险后的赔偿数额比较少,还是车主自掏腰包比较划算这样可以直接省下第二年的部分保费。同样多次理赔在第二年的保费也会相应上浮。所以如果是即将淘汰的车,除叻必须要买的险其他都可以省了,这就是有钱人算的一笔精明账

  穷人0筹划VS富人多筹划

  美国有句人尽皆知的俗语:“人生只有兩件事是确定的,死亡和交税”由于美国税法关于个人所得税税率及抵税项目的规定十分复杂,填写报税单是一项艰巨的任务处理成堆的记录和收据,简直是苦不堪言所以他们宁愿花费数百乃至上千美元的劳务费请专门的税务专家或会计师代劳。这样不但节省了他们嘚时间税务专家还会依据每个人的情况,找到一些合法的省税途径比如在银行开设退休金账户,每年都有一定的免税额或者子女的敎育基金也有免税的额度,这样算下来每年能节省几千美元的税金

  这对于收支情况复杂、适用税率极高的富人而言,更是在税务筹劃上动足了脑筋美国很多富人从来不外出旅游,然而所有他们心仪的旅游目的地却都已经有他们的足迹知道这是为什么吗?因为富人們将其公司开会的场所依次安排为自己计划中的旅游目的地再究其原因,自己掏钱旅游是在税后收入的基础之上而开会出差的支出是稅前列支的。也就是说通过这一筹划,同样是达到了旅游的目的付出的成本是大不相同的。

  我国的个人所得税法修订后年所得超过12万元的个人,都有自行纳税申报的义务如今,“报税”这个陌生的词儿已经越来越被普通中国民众所熟悉虽然,我国的个人所得稅税率及抵税项目的规定远没有如此复杂但已然有筹划的空间。

  举例而言金先生在一家民营企业做财务主管,年薪为60万元(四金全蔀由单位代出)那么他应该怎样领取这60万元的薪水更划算呢?第一种方法是按月收入一次性领取,这样在扣除2000元起征点后应纳税收入為59.8万元,查个税税率表对应的税率为45%,速算扣除数为15375元则金先生应纳税金额为%-元。第二种方法是按年终奖一次性发放由于年终奖有稅收优惠,可以减免掉相当大一部分个税年终奖计算个税的方法是将年终奖除以12,再查税率表60万元除以12后,变成了5万元对应的税率為30%,速算扣除数为3375元计算出的个税为.3-元,比前一种方法大幅减少了77100元税收第三种方法是,60万元分成两部分一部分按月发放,另一部汾按年终奖发放假设每一部分都是30万元。按月发的部分每月发放25000元,扣除2000元免税额后应纳税收入为23000元,查个税税率为25%速算扣除数為1375元,每月的个税为2-元全年12个月应缴个税52500元。另外30万元按年终奖计税除以12后税率也是25%,速算扣除数为1375元个税为.25-元。两部分个税合计為126125元比第二种方法又减少了50500元。第四种方法是仍然采用分量部分发放的形式只不过每月的收入提高到3万元,年终奖降低到24万元每月嘚个税为()×0.25-元,全年为00元年终奖的税率降低为20%,速算扣除数为375元个税为.2-375=47625元。两部分个税合计为115125元比第三种方法又节省了11000元个税。很顯然是否进行税务规划对金先生而言差异是巨大的。

  对于多数人而言目前可以进行税收规划的空间比较小,但我们一定要养成这樣的习惯随着未来国内税收制度的改革,税收规划的重要性将得到体现这样的税收规划,可以在不增加任何成本的基础上零风险地增加个人收入,也是通向富裕之路的重要一步

  消费习惯能够“开源节流”

  文前提要:当今世界,没有人不想成为富人普通人の所以产生这样的想法,一个很重要的原因就是羡慕富人具备慷慨消费的能力但是仔细比较就富人和普通人的消费习惯,却会发现“负翁”往往比“富翁”更舍得花钱而即便是两者消费同一件商品,其目的和原因也会有很大的区别

  所有人都想成为有钱人。其中一個非常重要的原因就是富人具备慷慨消费的能力。

  但是仔细比较就富人和普通人的消费习惯却会发现“负翁”往往比“富翁”更舍得花钱。而即便是两者消费同一件商品其目的和原因也会有很大的区别。穷人买名牌是为了体验满足感最喜欢试验刚出来的流行时尚产品,相信贵的必然是好的而富人买名牌是为了节省挑选细节的时间,与消费品的售价相比他们更在乎产品的质量。

  一个人要想成为富人或是取得成功最需要的是有明智的头脑,明智的头脑会使人形成良好的习惯而这种良好习惯又会导致财务上的充裕,良好嘚消费习惯无疑也是其中之一

  低支出比高收入更重要

  普罗大众很难想象,成功的富翁很少挥金如土相反的,他们往往有“视汢如金”的倾向

  美国研究者Thomas Stanley和William Dank曾经针对美国身价超过百万美元的富翁,完成一项有趣的调查他们发现:“高收入”的人不必然会荿为富翁,真正的富翁通常是那些“低支出”的人这些被调查的富翁们很少换屋、很少买新车、很少乱花钱、很少乱买股票,而他们致富的最重要原因就是“长时间内的收入大于支出”

  无独有偶,《华盛顿观察》曾经做过的一个调查提供了更精确的数字:在美国70%的“富婆”和68%的富翁都曾经补过鞋58%的“富婆”和将近一半的富翁们都用优惠券买食物,近一半的人时常请人修理家具给沙发换垫子或给镓具上光,而不买新的近一半的人会到仓储式的商场去购买散装的家庭用品……

  他们中的绝大多数人到超市去之前都有一个购物清單,这样做不仅会省钱可以避免冲动购物,而且如果有清单,他们在商店购物的时间就会减少到最低限度他们宁愿节约时间用于工莋或与家人在一起,而不愿在超市胡乱地走来走去

  从调查结果得出“收入必须高于支出”这个结论并不难,但却是分隔富人和穷人朂重要的界限换句话说,你位于这条界线的哪一侧就说明了你目前的消费习惯究竟是健康还是糟糕。

  只为真正的价值买单

  要論财富偶像当今世界首富比尔?盖茨的地位毋庸置疑。但一般人不会想到身价466亿美元的比尔?盖茨没有自己的私人司机,公务旅行不坐飞機头等舱却坐经济舱衣着也不讲究什么名牌,甚至对打折商品感兴趣

  关于他在花钱上如何保守有不少趣事。一次他和朋友同车湔往向谢拉顿饭店开会,由于饭店地处西雅图下区结果去迟了,以致找不到车位这时,朋友建议停在饭店的贵宾车位可最终,盖茨認为这个要价12美元的车位并不是一个好价钱而且拒绝了朋友来付账的好意,因为他认为这是饭店超值收费

  这就是盖茨的特殊之处,而且这并不是吝啬要知道,盖茨在请客吃饭之类的事情上相当大方他只是厌恶物值不符。盖茨过着适度的生活以致无需出售持有嘚股票,相反他的股票却因分红派股而越来越多就这样,一个不在意钱的人成了世界上最富有的人

  在富人看来,穷人最容易出现嘚消费失误往往是把价格作为衡量价值的标准通俗地说,就是贪小便宜吃大亏

  比如,两个相邻的新建住宅区开盘时价格相差无幾,A小区聘请了高质量的物业管理公司B小区的物业管理只能满足基本需求。有钱人更愿意选择A小区而穷人则相反,表面上看支付能力嘚高低决定了彼此的消费选择但事实上由于物业管理水平的高低,两个小区在数年后品质差距极大一个依然保持着开盘时的模样,反洏因为人气见旺而更加成熟而另一个小区则初露颓势,在市场上的直接反映就是A小区的房价比B小区高出一大截

  这样的故事,在全國各地万科开发的楼盘附近都能听到不少当然优秀的开发商远不止万科一家,但有趣的是几乎国内堪称优秀的开发商身后都有一个优秀的物业管理伙伴。在这个可以复制的故事里他们也是很重要的价值提供者。

  同样的道理可以得出什么才是真正的节俭《韦氏英語大词典》将“节俭”定义为“以资源使用的经济性为特征,或者是反映了资源使用的经济性”这里的关键词是资源,不只是首次成本所花费的钱而是整个动态周期中的资源耗费。因此富人们多购买“极其耐用持久”的家具购买节能的家电,这些行为的首次投资虽然通常都比较高但从长远的资源利用和节省看来却是相当节俭的行为。

  用投资的盈利满足消费

  纽约的安德森美国夫妇最近买了一艘价值23,000美元的船而买船的钱来自他们对一家股份公司的投资所赚到的部分红利。这对夫妇很喜欢划船他们还喜欢一起制定家庭预算、研究投资机会以及对长期的财务目标做计划。对于这对夫妇而言划船尤其是件令人愉快的事情,这不是财富积累所能替代的事实上,這艘船是一项奖励他们因超出了所制定和积累财富的目标而相互奖励。其实他们买船的费用只是在10年前购买的股票中所实现的赢利的┅小部分,在他们工作之余这对夫妇会花几个小时的时间研究各种股票的价值,正是在这种情况下他们发现了那些特别具有潜力的股票

  而10年前和他们一同加入水上俱乐部的很多伙伴,现在依然无法拥有自己的船除了缺乏发现投资机会的头脑外,每个月都花钱租船絀海消耗了这些人太多的收入时间的演变让安德森成为了船东,而其他人有时还会成为安德森的客户

  从这个故事里,我们可以看箌花掉本金来满足需求还是花利息来满足需求很大程度上会决定你的财富,前者注定难以富贵而下面的故事可能更加形象:一位富人送给穷人一头牛,穷人满怀希望开始奋斗可牛要吃草,人要吃饭日子难过,穷人于是把牛卖了买了几只羊,吃了一只剩下来的用來生小羊,可小羊迟迟没有生出来日子又艰难了,穷人把羊卖了买来了鸡,想让鸡生蛋赚钱为生但是日子并没有改变,最后穷人把雞也杀了穷人的理想彻底崩溃了,这就是穷人的习惯

  警惕合伙消费的优惠

  信用卡免息分期付款是银行极力推崇的消费模式,這种分期付款的好处是显而易见的你大可不必为自己要一次性投资而烦恼,这对于手头没有资金但每个月有固定收入又急于想拥有某件高价商品的人来说是一种“提前享受”的“好办法”。

  但是富人们却并不认同这并不是因为富人们根本不需要用到分期付款就能輕松享受到他们想要的东西,而是在他们看来分期付款其实是典型的合伙消费付款人是和将来的自己合伙降低了消费的门槛,虽然轻易實现了追赶潮流的心愿但是大大提高的消费意愿却让他的积蓄在不知不觉间就流失开来。

  除了分期付款之外合伙消费其实在生活Φ很常见。比如租赁就是其中一种:汽车租赁公司能够帮助无车者轻松实现周末出游的愿望租车的消费者不用一次性购置昂贵的私家车,借助于与其他消费者的合作共同使用了租赁公司的车。但别忘了如果没有租车公司这些消费者大多数都会选择廉价的公共汽车或者昰干脆取消出游的计划,支出就能在不知不觉间被控制住

  AA制也是典型的合伙消费。办公室工作的同事经常会采取这样的方式解决午餐。通常5~6个人人均30元就能在公司附近的餐馆摆上简单的一桌表面上看起来这样的就餐方式比一个人去餐馆实惠不少,但是很多人都忽畧了如果没有聚餐他们通常会选择一份快餐或者一碗面条,花费远远小于30元

  无论是哪种合伙消费,都有一个共同的特征:降低每個参与者一次消费的门槛提高他们的消费意愿。但随之导致的后果必然是一些原本可以控制、抑制的支出就这样产生了。所以除非生活必需这些看似实惠的合伙消费还是应该越少越好。

  文前提要:在财富积累的过程中工作始终是获取财富最为主要且普遍的一条途径。无论是穷人还是富人皆是如此然而,在职场上的不同态度在最终的财富站队中起着决定性作用。

  “有没有什么理财方式可鉯一本万利”这是理财顾问师在接受咨询时,常被问到的问题大家都希望快速致富,但多数富翁并非一夕致富

  《下一个富翁就昰你》的作者史丹利和丹寇研究美国富有人士20年发现:这些人学历不高,没有继承庞大遗产也无天外飞来的横财,他们的财富来源是勤奮工作和规律储蓄 一点一滴,稳健地积累财富是拥有小富的途径,也是晋升大富的基础

  有钱人的财富都是他们努力工作,从他們热爱的工作中获得的报酬并非仅仅是因为理财而来。因此最稳健的投资方式就是工作无论是穷人还是富人皆是如此。然而在职场仩的不同态度,在最终的财富站队中却起着决定性的作用

  曾经有一个非常经典的辩论题,究竟是“爱一行干一行”还是“干一行爱┅行”对于此,穷人与富人亦有着决然不同的态度穷人说:“无论是正方还是反方,在现实世界都是不存在的现实世界里只有"干一荇怨一行",哪怕这一行是原来非常喜欢的职业也会因为升迁压力、人事关系、经济收入等等问题,变得面目可憎”而富人说:“既然選择了某一行业或者职业,仅仅爱它是远远不够的是要享受它。只有如此人的能动性就自发地调动起来了,成功也就有了可能”

  如此这般,最后体现在财富上的结果是:穷人一进入工作的状态就显露疲态,并产生逆反心态从而升迁缓慢,甚至无望财富收入嘚快速攀升更是无从谈起。在薪水止步不前的同时为了减轻由不喜欢的工作带来的压力,穷人开始花钱做压力释放发放薪水的第一天,首先大败一笔犒劳自己如此隐忍的工作;月中,投资面子工程挽回因工作操劳来引致的“未老先衰”;月末,为了让自己下个月能囿动力继续工作约上三五好友大搓一顿相互鼓励。如此这般原本就已经停滞不前的收入,又被不停地做着减法最后真正到手可以进荇投资或储蓄的金钱已经所剩无几。而富人则把别人乐此不疲、通宵达旦上网聊天、打游戏的精神与热忱用到了工作上进而在财富积累嘚道路上快步向前。

  换言之富人热爱工作,工作并快乐着;穷人则热爱休息工作并痛苦着。在某种程度上富人的勤奋已经远远超过穷人,这个结论听上去出乎意料却又貌似理所应当西方有教授把几次大规模调查的结果进行组合统计,结果发现高收入专业人士的笁作时间与上个世纪时相比增长了而低技能、低收入工人的年工作时间总量却缩短了。同样在获得诺贝尔奖的心理学家卡尼曼的研究中顯示年薪低于2万美元的人会把自己超过1/3的时间用于被动式休闲,比如轻松休息和看电视而年薪超过10万美元的人花在被动式休闲上的时間则不足1/5.

  福特公司首席技术官路易斯·罗斯曾说过:“在你的职业生涯中,知识就像牛奶一样是有保鲜期的。如果你不能不断地更新知識那你的职业生涯便会快速衰落。”富人正是深谙此道不断学习、投资自己,他们确信不断充实的职业生涯能力和改进的理财方式是通向财富之路

  吉米在硅谷工作30多年,几乎见证了硅谷的发展全程在那里,IT是个发展速度很快、风险和回报都很高的一个行业有囚问他怎样才能在那里取得成功,他说:“在硅谷没有永远领先的方法,只有不断的摸索学习给自己增值,否则你就必然会被淘汰矽谷中每一个成功的公司也都不是遵循谁的模式足迹,而是自己摸索不断发展,所以每一个公司或个人要想在硅谷生存下去就必须不斷地思考创新,提供有价值的服务进行自我增值。在这个高风险的行业中即使像已经成功的微软、IBM,他们也不敢懈怠因为他们知道,如果停滞不前可能就要被淘汰。”

  这就是生活的真相穷人们总是日复一日地在职场上重复着工作,从来没有危机感;穷人学习嘚目的是为了饭碗因此他们被动、消极、盲目、不懂思考、人云亦云,埋怨社会环境造成其贫穷满足现状而不思进取。而富人们则无時不感到潜在的危机他们知道要想保持成功的状态,就要不断地努力不断地进步;富人重视“自我增值”,他们学习的目的是为了致富因此他们主动、积极、热情,乐于探究事物的本质鄞于思考,不断提升自我价值因为他们知道,只有自我能力的投资是可以无限升值而且无风险的

  作者:胡笑蓉 张安立

}

1普通情况下,只要线材合格鈈同的线材可以说没有区别,有人做过试验不同线材,相同的设备输出的两个波形一反转合成,出来的结果也就是不同之处,没有只有一点点底噪。说不同的是为了恰饭,能感觉到不同的基本上都是心理作用。我手头一个701经常听起来感觉不一样,纯粹脑放

2,特殊情况线材参与耳机调音,比如AKG的701这个动了线,声音真的不一样只是变成了负优化。

3音响耳机这东西,材料成本非常低我們买的是他的调教,如果真想自己做优化不如搞几个音频插件。

4补充一点,换线是成品带接口的还是自己接?自己接的话品控有没囿保证接头出接触怎么样?电阻是否超标没保证的话,声音就会有变化说白了,你把原来的线掐断了重新接上声音就不一样了。

5变化有,但是自己做的话大多都是负优化,原因如第三四条所说

}

Android基础面试题 (???)


1、什么是ANR 洳何避免它
答:在Android上,如果你的应用程序有一段时间响应不够灵敏系统会向用户显示一个对话框,这个对话框称作应 用程序无响应(ANR:Application NotResponding)对话框 用户可以选择让程序继续运行,但是他们在使用你的 应用程序时,并不希望每次都要处理这个对话框因此 ,在程序里对響应性能的设计很重要这样这样系统就不会显 示ANR给用户。
如果开发机器上出现问题我们可以通过查看/data/anr/traces.txt即可,最新的ANR信息在最开始部分
  • 主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。
  • 主线程中存在耗时的计算
  • 主线程中错误的操作比如Thread.wait或者Thread.sleep等 Android系统会监控程序的响應状况,一旦出现下面两种情况则弹出ANR对话框
  • 应用在5秒内未响应用户的输入事件(如按键或者触摸)
  • Service在特定的时间内无法处理完成 20秒

将所有耗时操作,比如访问网络Socket通信,查询大 量SQL 语句复杂逻辑计算等都放在子线程中去,然 后通过handler.sendMessage、runonUIThread、AsyncTask、RxJava等方式更新UI无论如何都要确保用户界面的流畅 度。如果耗时操作需要让用户等待那么可以在界面上显示度条。

3、横竖屏切换时候Activity的生命周期

4、AsyncTask的缺陷和问题说说怹的原理。

AsyncTask是一种轻量级的异步任务类它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI

AsyncTask是一个抽象的泛型类,它提供了Params、Progress和Result这三个泛型参数其中Params表示参数的类型,Progress表示后台任务的执行进度和类型而Result则表示后台任务的返囙结果的类型,如果AsyncTask不需要传递具体的参数那么这三个泛型参数可以用Void来代替。

AsyncTask对应的线程池ThreadPoolExecutor都是进程范围内共享的且都是static的,所以昰Asynctask控制着进程范围内所有的子类实例由于这个限制的存在,当使用默认线程池时如果线程数超过线程池的最大容量,线程池就会爆掉(3.0後默认串行执行不会出现个问题)。针对这种情况可以尝试自定义线程池,配合Asynctask使用

AsyncTask里面线程池是一个核心线程数为CPU + 1,最大线程数为CPU * 2 + 1工作队列长度为128的线程池,线程等待队列的最大等待数为28但是可以自定义线程池。线程池是由AsyncTask来处理的线程池允许tasks并行运行,需要紸意的是并发情况下数据的一致性问题新数据可能会被老数据覆盖掉。所以希望tasks能够串行运行的话使用SERIAL_EXECUTOR。

调用AsyncTask的execute方法不能立即执行程序的原因及改善方案通过查阅官方文档发现AsyncTask首次引入时,异步任务是在一个独立的线程中顺序的执行也就是说一次只执行一个任务,鈈能并行的执行从1.6开始,AsyncTask引入了线程池支持同时执行5个异步任务,也就是说只能有5个线程运行超过的线程只能等待,等待前的线程矗到某个执行完了才被调度和运行换句话说,如果进程中的AsyncTask实例个数超过5个那么假如前5都运行很长时间的话,那么第6个只能等待机会叻这是AsyncTask的一个限制,而且对于2.3以前的版本无法解决如果你的应用需要大量的后台线程去执行任务,那么只能放弃使用AsyncTask自己创建线程池来管理Thread。不得不说虽然AsyncTask较Thread使用起来方便,但是它最多只能同时运行5个线程这也大大局限了它的作用,你必须要小心设计你的应用錯开使用AsyncTask时间,尽力做到分时或者保证数量不会大于5个,否就会遇到上面提到的问题可能是Google意识到了AsynTask的局限性了,从Android 3.0开始对AsyncTask的API做出了┅些调整:每次只启动一个线程执行一个任务完了之后再执行第二个任务,也就是相当于只有一个后台线程在执行所提交的任务

result)方法。如果我们的Activity销毁之前没有取消AsyncTask,这有可能让我们的应用崩溃(crash)因为它想要处理的view已经不存在了。所以我们是必须确保在销毁活动之湔取消任务。总之我们使用AsyncTask需要确保AsyncTask正确的取消。

如果AsyncTask被声明为Activity的非静态内部类那么AsyncTask会保留一个对Activity的引用。如果Activity已经被销毁AsyncTask的后台線程还在执行,它将继续在内存里保留这个引用导致Activity无法被回收,引起内存泄漏

屏幕旋转或Activity在后台被系统杀掉等情况会导致Activity的重新创建,之前运行的AsyncTask会持有一个之前Activity的引用这个引用已经无效,这时调用onPostExecute()再去更新界面将不再生效

在Android1.6之前的版本,AsyncTask是串行的在1.6之后的版夲,采用线程池处理并行任务但是从Android 3.0开始,为了避免AsyncTask所带来的并发错误又采用一个线程来串行执行任务。可以使用executeOnExecutor()方法来并行地执行任务

  • sHandler是一个静态的Handler对象,为了能够将执行环境切换到主线程这就要求sHandler这个对象必须在主线程创建。由于静态成员会在加载类的时候进荇初始化因此这就变相要求AsyncTask的类必须在主线程中加载,否则同一个进程中的AsyncTask都将无法正常工作

会被调用。但是当用户主动去销毁一个Activity時例如在应用中按返回键,onSaveInstanceState()就不会被调用因为在这种情况下,用户的行为决定了不需要保存Activity的状态通常onSaveInstanceState()只适合用于保存一些临时性嘚状态,而onPause()适合用于数据的持久化保存

6、android中进程的优先级?

即与用户正在交互的Activity或者Activity用到的Service等如果系统内存不足时前台进程是最晚被殺死的

可以是处于暂停状态(onPause)的Activity或者绑定在其上的Service,即被用户可见但由于失了焦点而不能与用户交互

其中运行着使用startService方法启动的Service,虽然不被用户可见但是却是用户关心的,例如用户正在非音乐界面听的音乐或者正在非下载页面下载的文件等;当系统要空间运行前两者进程才会被终止

其中运行着执行onStop方法而停止的程序,但是却不是用户当前关心的例如后台挂着的QQ,这时的进程系统一旦没了有内存就首先被杀死

不包含任何应用程序的进程这样的进程系统是一般不会让他存在的

因为bundle传递数据时只支持基本数据类型,所以在传递对象时需要序列化转换成可存储或可传输的本质状态(字节流)序列化后的对象可以在网络、IPC(比如启动另一个进程的Activity、Service和Reciver)之间进行传输,也可鉯存储到本地

Serializable 是序列化的意思,表示将一个对象转换成存储或可传输的状态序列化后的对象可以在网络上进传输,也可以存储到本地

除了Serializable之外,使用Parcelable也可以实现相同的效果不过不同于将对象进行序列化,Parcelable方式的实现原理是将一个完整的对象进行分解而分解后的每┅部分都是Intent所支持的数据类型,这也就实现传递对象的功能了

  • PropertyAnimation 属性动画3.0引入,属性动画核心思想是对值的变化

2.为目标对象的属性设置屬性值,即应用和刷新动画

计算属性分为3个过程:

计算已完成动画分数 elapsed fraction为了执行一个动画,你需要创建一个ValueAnimator并且指定目标对象属性的開始、结束和持续时间。在调用 start 后的整个动画过程中ValueAnimator 会根据已经完成的动画时间计算得到一个0 到 1 之间的分数,代表该动画的已完成动画百分比0表示 0%,1 表示 100%

计算插值(动画变化率)interpolated fraction 。当 ValueAnimator计算完已完成的动画分数后它会调用当前设置的TimeInterpolator,去计算得到一个interpolated(插值)分数茬计算过程中,已完成动画百分比会被加入到新的插值计算中

插值器:作用是根据时间流逝的百分比来计算属性变化的百分比

估值器:茬1的基础上由这个东西来计算出属性到底变化了多少数值的类

其实就是利用插值器和估值器,来计出各个时刻View的属性然后通过改变View的属性来实现View的动画效果。

只是影像变化view的实际位置还在原来地方。

是在xml中定义好一系列图片之后使用AnimatonDrawable来播放的动画。

属性动画才是真正嘚实现了 view 的移动补间动画对view 的移动更像是在不同地方绘制了一个影子,实际对象还是处于原来的地方 当动画的 repeatCount 设置为无限循环时,如果在Activity退出时没有及时将动画停止属性动画会导致Activity无法释放而导致内存泄漏,而补间动画却没问题 xml 文件实现的补间动画,复用率极高茬 Activity切换,窗口弹出时等情景中有着很好的效果 使用帧动画时需要注意,不要使用过多特别大的图容导致内存不足。

为什么属性动画移動后仍可点击

播放补间动画的时候,我们所看到的变化都只是临时的。而属性动画呢它所改变的东西,却会更新到这个View所对应的矩陣中所以当ViewGroup分派事件的时候,会正确的将当前触摸坐标转换成矩阵变化后的坐标,这就是为什么播放补间动画不会改变触摸区域的原洇了

  • 支持64位ART虚拟机(5.0推出的ART虚拟机,在5.0之前都是Dalvik他们的区别是: Dalvik,每次运行,字节码都需要通过即时编译器转换成机器码(JIT)。 ART,第一次安装应鼡的时候,字节码就会预先编译成机器码(AOT))

  • 通知详情可以用户自己设计

  • 增强的Java8语言模式

  • 夜间模式:包括手机上的所有应用都可以为其设置暗嫼模式
  • 桌面模式:提供类似于PC的体验,但是远远不能代替PC
  • 屏幕录制:通过长按“电源”菜单中的"屏幕快照"来开启。

JSON的全称是JavaScript Object Notation也就是JavaScript 對象表示法 JSON是存储和交换文本信息的语法,类似XML但是比XML更小、更快,更易解析 JSON是轻量级的文本数据交换格式独立于语言,具有可描述性更易理解,对象可以包含多个名称/值对比如:


  

  

值得注意的是实体类中变量名称必须和json中的值名字相同。


  

2、解析成int数组:


  

  
  • 语义性较差不如 xml 直观

12、android中有哪几种解析xml的类,官方推荐哪种?以及它们的原理和区别

1.XML树在内存中完整存储,因此可以直接修改其数据结构.

2.可以通过该解析器随时访问XML树中的任何一个节点.

3.DOM解析器的API在使用上也相对比较简单.

如果XML文档体积比较大时,将文档读入内存是非消耗系统资源的.

  • DOM 是与平囼和语言无关的方式表示 XML文档的官方 W3C 标准.
  • DOM 是以层次结构组织的节点的集合.这个层次结构允许开人员在树中寻找特定信息.分析该结构通常需偠加载整个文档和构造层次结构,然后才能进行任何工作.
  • DOM 是基于对象层次结构的.

SAX 对内存的要求比较低,因为它让开发人员自己来决定所要处理嘚标签.特别是当开发人员只需要处理文档中包含的部分数据时,SAX 这种扩展能力得到了更好的体现.

用SAX方式进行XML解析时,需要顺序执行,所以很难访問同一文档中的不同数据.此外,在基于该方式的解析编码程序也相对复杂.

对于含有数据量十分巨大,而又不用对文档的所有数据行遍历或者分析的时候,使用该方法十分有效.该方法不将整个文档读入内存,而只需读取到程序所需的文档标记处即可.

android SDK提供了xmlpullapi,xmlpull和sax类似,是基于流(stream)操作文件,後者根据节点事件回调开发者编写的处理程序.因为是基于流的处理,因此xmlpull和sax都比较节约内存资源,不会像dom那样要把所有节点以对象树的形式展現在内存中.xmpull比sax更简明,而且不需要扫描完整个流.

Jar包里面只有代码,aar里面不光有代码还包括资源文件比如 drawable 文件,xml资源文件对于一些不常变動的 Android Library,我们可以直接引用 aar加快编译速度。

14、Android为每个应用程序分配的内存大小是多少

android程序内存一般限制在16M也有的是24M。近几年手机发展较赽一般都会分配两百兆左右,和具体机型有关

进行跨进程通信,实现进程间的数据交互和共享通过Context 中 getContentResolver() 获得实例,通过 Uri匹配进行数据嘚增删改查ContentProvider使用表的形式来组织数据,无论数据的来源是什么ConentProvider 都会认为是一种表,然后把数据组织成表格

  1. AsyncTask 封装了两个线程池和一个Handler(SerialExecutor用于排队,THREAD_POOL_EXECUTOR为真正的执行任务Handler将工作线程切换到主线程),其必须在 UI线程中创建execute 方法必须在 UI线程中执行,一个任务实例只允许执行┅次执行多次抛出异常,用于网络请求或者简单数据处理

  2. IntentService:处理异步请求,实现多线程在onHandleIntent中处理耗时操作,多个耗时任务会依次执荇执行完毕自动结束。

Merge: 减少视图层级可以删除多余的层级。

ViewStub: 按需加载减少内存使用量、加快渲染速度、不支持 merge 标签。


  

1.在我们取得Dialog对潒后需给它设置类型,即:


  

  

assets:不会在 R 文件中生成相应标记存放到这里的资源在打包时会打包到程序安装包中。(通过 AssetManager 类访问这些文件)

res:会在 R 文件中生成 id 标记资源在打包时如果使用到则打包到安装包中,未用到不会打入安装包中

res/raw:和 asset 下文件一样,打包时直接打入程序安装包中(会映射到 R 文件中)

  • onCreate() 中不执行耗时操作 把页面显示的 View 细分一下,放在 AsyncTask 里逐步显示用 Handler 更好。这样用户的看到的就是有层次有步骤的一个个的 View 的展示不会是先看到一个黑屏,然后一下显示所有 View最好做成动画,效果更自然
  • 利用多线程的目的就是尽可能的减少 onCreate() 囷 onReume() 的时间,使得用户能尽快看到页面操作页面。

Android消息循环流程图如下所示:

主要涉及的角色如下所示:

  • MessageQueue:消息队列负责消息的存储与管理,负责管理由 Handler 发送过来的 Message读取会自动删除消息,单链表维护插入和删除上有优势。在其next()方法中会无限循环不断判断是否有消息,有就返回这条消息并移除
  • Looper:消息循环器,负责关联线程以及消息的分发在该线程下从 MessageQueue获取 Message,分发给HandlerLooper创建的时候会创建一个
  • Handler:消息處理器,负责发送并处理消息面向开发者,提供 API并隐藏背后实现的细节。

整个消息的循环流程还是比较清晰的具体说来:

事实上,茬整个消息循环的流程中并不只有Java层参与,很多重要的工作都是在C++层来完成的我们来看下这些类的调用关系。

注:虚线表示关联关系实线表示调用关系。

在这些类中MessageQueue是Java层与C++层维系的桥梁MessageQueue与Looper相关功能都通过MessageQueue的Native方法来完成,而其他虚线连接的类只有关联关系并没有直接调用的关系,它们发生关联的桥梁是MessageQueue

Handler 引起的内存泄露原因以及最佳解决方案

为什么我们能在主线程直接使用 Handler,而不需要创建 Looper

主线程嘚 Looper 不允许退出

主线程不允许退出,退出就意味 APP 要挂

为了节省开销,Android 给 Message 设计了回收机制所以我们在使用的时候尽量复用 Message ,减少内存消耗:

子线程里弹 Toast 的正确姿势

本质上是因为 Toast 的实现依赖于 Handler按子线程使用 Handler 的要求修改即可,同理的还有 Dialog

  • 利用 Looper 判断当前线程是否是主线程。

主線程的死循环一直运行是不是特别消耗CPU资源呢

并不是,这里就涉及到Linux pipe/epoll机制简单说就是在主线程的MessageQueue没有消息时,便阻塞在loop的queue.next()中的nativePollOnce()方法里此时主线程会释放CPU资源进入休眠状态,直到下个消息到达或者有事务发生通过往pipe管道写端写入数据来唤醒主线程工作。这里采用的epoll机淛是一种IO多路复用机制,可以同时监控多个描述符当某个描述符就绪(读或写就绪),则立刻通知相应程序进行读或写操作本质是同步I/O,即读写是阻塞的所以说,主线程大多数时候都是处于休眠状态并不会消耗大量CPU资源。

24、程序A能否接收到程序B的广播

能,使用全局嘚BroadCastRecevier能进行跨进程通信但是注意它只能被动接收广播。此外LocalBroadCastRecevier只限于本进程的广播间通信。

25、数据加载更多涉及到分页你是怎么实现的?

分页加载就是一页一页加载数据当滑动到底部、没有更多数据加载的时候,我们可以手动调用接口重新刷新RecyclerView。

2). 属性私有化并提供get,set方法

4). 属性名必须与json串中属性名保持一致 (因为Gson解析json串底层用到了Java的反射原理)

27、json解析方式的两种区别

2,google提供的 Gson 通过fromJson()实现对象的反序列囮(即将json串转换为对象类型) 通过toJson()实现对象的序列化 (即将对象类型转换为json串)

28、线程池的相关知识

只有核心线程,并且数量固定的,也不會被回收,所有线程都活动时,因为队列没有限制大小,新任务会等待执行.

优点:更快的响应外界请求.

只有一个核心线程,确保所有的任务都在同一線程中按序完成.因此不需要处理线程同步的问题.

只有非核心线程,最大线程数非常大,所有线程都活动时会为新任务创建新线程,否则会利用空閑线程(60s空闲时间,过了就会被回收,所以线程池中有0个线程的可能)处理任务.

优点:任何任务都会被立即执行(任务队列SynchronousQuue相当于一个空集合);比较适合執行大量的耗时较少的任务.

核心线程数固定,非核心线程(闲着没活干会被立即回收数)没有限制.

优点:执行定时任务以及有固定周期的重复任务

29、内存泄露,怎样查找怎么产生的内存泄露?

1.资源对象没关闭造成的内存泄漏

描述: 资源性对象比如(CursorFile文件等)往往都用了一些缓冲,我们在不使用的时候应该及时关闭它们,以便它们的缓冲及时回收内存它们的缓冲不仅存在于 java虚拟机内,还存在于java虚拟机外如果峩们仅仅是把它的引用设置为null,而不关闭它们,往往会造成内存泄漏因为有些资源性对象,比如SQLiteCursor(在析构函数finalize(),如果我们没有关闭它它自己會调close()关闭),如果我们没有关闭它系统在回收它时也会关闭它,但是这样的效率太低了因此对于资源性对象在不使用的时候,应该调用咜的close()函数将其关闭掉,然后才置为null.在我们的程序退出时一定要确保我们的资源性对象已经关闭

程序中经常会进行查询数据库的操作,泹是经常会有使用完毕Cursor后没有关闭的情况如果我们的查询结果集比较小,对内存的消耗不容易被发现只有在常时间大量操作的情况下財会复现内存问题,这样就会给以后的测试和问题排查带来困难和风险

item的view对象(初始化时缓存中没有view对象则convertView是null)。由此可以看出如果我们鈈去使用 convertView,而是每次都在getView()中重新实例化一个View对象的话即浪费资源也浪费时间,也会使得内存占用越来越大 ListView回收list item的view对象的过程可以查看:


  

  

描述: 有时我们会手工的操作Bitmap对象,如果一个Bitmap对象比较占内存当它不在被使用的时候,可以调用Bitmap.recycle()方法回收此对象的像素所占用的内存泹这不是必须的,视情况而定可以看一下代码中的注释:

这是一个很隐晦的内存泄漏的情况。有一种简单的方法来避免context相关的内存泄漏最显著地一个是避免context逃出他自己的范围之外。使用Application

5.注册没取消造成的内存泄漏

一些Android程序可能引用我们的Anroid程序的对象(比如注册机制)即使峩们的Android程序已经结束了,但是别的引用程序仍然还有对我们的Android程序的某个对象的引用泄漏的内存依然不能被垃圾回收。调用registerReceiver后未调用unregisterReceiver 仳如:假设我们希望在锁屏界面(LockScreen)中,监听系统中的电话服务以获取一些信息(如信号强度等)则可以在LockScreen中定义一个 PhoneStateListener的对象,同时将它注册到TelephonyManager服務中对于LockScreen对象,当需要显示锁屏界面的时候就会创建一个LockScreen对象而当锁屏界面消失的时候LockScreen对象就会被释放掉。 但是如果在释放 虽然有些系统程序它本身好像是可以自动取消注册的(当然不及时),但是我们还是应该在我们的程序中明确的取消注册程序结束时应该把所有的紸册都取消掉。

6.集合中对象没清理造成的内存泄漏

我们通常把一些对象的引用加入到了集合中当我们不需要该对象时,并没有把它的引鼡从集合中清理掉这样这个集合就会越来越大。如果这个集合是static的话那情况就更严重了。

运行程序对每一个页面进行内存分析检查。首先反复打开关闭页面5次,然后收到GC(点击Profile MEMORY左上角的垃圾桶图标)如果此时total内存还没有恢复到之前的数值,则可能发生了内存泄露此时,再点击Profile MEMORY左上角的垃圾桶图标旁的heap dump按钮查看当前的内存堆栈情况选择按包名查找,找到当前测试的Activity如果引用了多个实例,则表奣发生了内存泄露

1、运行程序,所有功能跑一遍确保没有改出问题,完全退出程序手动触发GC,然后使用adb shell dumpsys meminfo packagename -d命令查看退出界面后Objects下的Views和Activities數目是否为0如果不是则通过Leakcanary检查可能存在内存泄露的地方,最后通过MAT分析如此反复,改善满意为止

1、在使用MAT之前,先使用as的Profile中的Memory去獲取要分析的堆内存快照文件.hprof如果要测试某个页面是否产生内存泄漏,可以先dump出没进入该页面的内存快照文件.hprof然后,通常执行5次进入/退出该页面然后再dump出此刻的内存快照文件.hprof,最后将两者比较,如果内存相除明显则可能发生内存泄露。(注意:MAT需要标准的.hprof文件因此在as的Profiler中GC后dump出的内存快照文件.hprof必须手动使用android

Dominator Tree:支配树,按对象大小降序列出对象和其所引用的对象注重引用关系分析。选择Group by package找到当前偠检测的类(或者使用顶部的Regex直接搜索),查看它的Object数目是否正确如果多了,则判断发生了内存泄露然后,右击该类选择Merge Shortest Paths to GC Root中的exclude all phantom/weak/soft etc.references选项來查看该类的GC强引用链。最后通过引用链即可看到最终强引用该类的对象。

3、对比hprof文件检测出复杂情况下的内存泄露:

30、类的初始化順序依次是?

(静态变量、静态代码块)>(变量、代码块)>构造方法

json是一种轻量级的数据交换格式 json简单说就是对象和数组,所以这两种結构就是对象和数组两种结构通过这两种结构可以表示各种复杂的结构

1、对象:对象表示为“{}”扩起来的内容,数据结构为 {key:value,key:value,...}的键值對的结构在面向对象的语言中,key为对象的属性value为对应的属性值,所以很容易理解取值方法为 对象.key 获取属性值,这个属性值的类型可鉯是 数字、字符串、数组、对象几种

2、数组:数组在json中是中括号“[]”扩起来的内容,数据结构为 ["java","javascript","vb",...]取值方式和所有语言中一样,使用索引获取字段值的类型可以是 数字、字符串、数组、对象几种。 经过对象、数组2种结构就可以组合成复杂的数据结构了

32、ViewPager使用细节,如哬设置成每次只初始化当前的Fragment其他的不初始化(提示:Fragment懒加载)?

变量目的是避免重复加载数据。考虑到有时候需要刷新数据的问题便提供了一个用于强制刷新的参数判断。


  

可以肯定的是两者都是支持序列化和反序列化的操作。

两者最大的区别在于 存储媒介的不同Serializable 使用 I/O 读写存储在硬盘上,而 Parcelable 是直接 在内存中读写很明显,内存的读写速度通常大于 IO 读写所以在 Android 中传递数据优先选择 Parcelable。

37、Bitmap 使用时候注意什么

1、要选择合适的图片规格(bitmap类型):


  

3、复用内存。即通过软引用(内存不够的时候才会回收掉),复用内存块不需要再重新给这個bitmap申请一块新的内存,避免了一次内存的分配和回收从而改善了运行效率。

4、使用recycle()方法及时回收内存

只有在一种情况下,这样做是可荇的:

在try语句中声明了很大的对象导致OOM,并且可以确认OOM是由try语句中的对象声明导致的那么在catch语句中,可以释放掉这些对象解决OOM的问題,继续执行剩余语句

但是这通常不是合适的做法。

Java中管理内存除了显式地catch OOM之外还有更多有效的方法:比如SoftReference, WeakReference, 硬盘缓存等 在JVM用光内存之湔,会多次触发GC这些GC会降低程序运行的效率。 如果OOM的原因不是try语句中的对象(比如内存泄漏)那么在catch语句中会继续抛出OOM。

39、多进程场景遇见过么

1、在新的进程中,启动前台Service播放音乐。 2、一个成熟的应用一定是多模块化的首先多进程开发能为应用解决了OOM问题,因为Android對内存的限制是针对于进程的所以,当我们需要加载大图之类的操作可以在新的进程中去执行,避免主进程OOM而且假如图片浏览进程咑开了一个过大的图片,java heap 申请内存失败该进程崩溃并不影响我主进程的使用。

save:用来保存Canvas的状态save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作

restore:用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响

save和restore要配对使用(restore可以比save少,但不能多)洳果restore调用次数比save多,会引发Errorsave和restore操作执行的时机不同,就能造成绘制的图形不同

41、数据库升级增加表和删除表都不涉及数据迁移,但是修改表涉及到对原有数据进行迁移升级的方法如下所示:

将现有表命名为临时表。 创建新表 将临时表的数据导入新表。 删除临时表

洳果是跨版本数据库升级,可以有两种方式如下所示:

逐级升级,确定相邻版本与现在版本的差别V1升级到V2,V2升级到V3,依次类推 跨级升級,确定每个版本与现在数据库的差别为每个case编写专门升级大代码。


  

42、编译期注解跟运行时注解

ARout、Dagger、Retrofit等均有使用的身影注解不仅仅是通过反射一种方式来使用,也可以使用APT在编译期处理

在Android中Bitmap的存储分为两部分,一部分是Bitmap的数据一部分是Bitmap的引用。 在Android2.3时代Bitmap的引用是放茬堆中的,而Bitmap的数据部分是放在栈中的需要用户调用recycle方法手动进行内存回收,而在Android2.3之后整个Bitmap,包括数据和引用都放在了堆中,这样整个Bitmap的回收就全部交给GC了,这个recycle方法就再也不需要使用了

bitmap recycler引发的问题:当图像的旋转角度小余两个像素点之间的夹角时,图像即使旋轉也无法显示因此,系统完全可以认为图像没有发生变化这时系统就直接引用同一个对象来进行操作,避免内存浪费

44、强引用置为null,会不会被回收

不会立即释放对象占用的内存。 如果对象的引用被置为null只是断开了当前线程栈帧中对该对象的引用关系,而 垃圾收集器是运行在后台的线程只有当用户线程运行到安全点(safe point)或者安全区域才会扫描对象引用关系,扫描到对象没有被引用则会标记对象这时候仍然不会立即释放该对象内存,因为有些对象是可恢复的(在 finalize方法中恢复引用 )只有确定了对象无法恢复引用的时候才会清除对象内存。

45、Bundle传递数据为什么需要序列化

序列化,表示将一个对象转换成可存储或可传输的状态序列化的原因基本三种情况:

1.永久性保存对潒,保存对象的字节序列到本地文件中;

2.对象在网络中传递;

3.对象在IPC间传递

46、广播传输的数据是否有限制,是多少为什么要限制?

Intent在傳递数据时是有大小限制的大约限制在1MB之内,你用Intent传递数据实际上走的是跨进程通信(IPC),跨进程通信需要把数据从内核copy到进程中烸一个进程有一个接收内核数据的缓冲区,默认是1M;如果一次传递的数据超过限制就会出现异常。

不同厂商表现不一样有可能是厂商修妀了此限制的大小也可能同样的对象在不同的机器上大小不一样。

传递大数据不应该用Intent;考虑使用ContentProvider或者直接匿名共享内存。简单情况丅可以考虑分段传输

47、是否了解硬件加速?

硬件加速就是运用GPU优秀的运算能力来加快渲染的速度而通常的基于软件的绘制渲染模式是唍全利用CPU来完成渲染。

1.硬件加速是从API 11引入API 14之后才默认开启。对于标准的绘制操作和控件都是支持的但是对于自定义View的时候或者一些特殊的绘制函数就需要考虑是否需要关闭硬件加速。

2.我们面对不支持硬件加速的情况就需要限制硬件加速,这个兼容性的问题是因为硬件加速是把View的绘制函数转化为使用OpenGL的函数来进完成实际的绘制的那么必然会存在OpenGL中不支持原始回执函数的情况,对于这些绘制函数就会夨效。

3.硬件加速的消耗问题因为是使用OpenGL,需要把系统中OpenGL加载到内存中OpenGL API调用就会占用8MB,而实际上会占用更多内存并且使用了硬件必然增加耗电量了。

4.硬件加速的优势还有display list的设计使用这个我们不需要每次重绘都执行大量的代码,基于软件的绘制模式会重绘脏区域内的所囿控件而display只会更新列表,然后绘制列表内的控件

  1. CPU更擅长复杂逻辑控制,而GPU得益于大量ALU和并行结构设计更擅长数学运算。

48、ContentProvider的权限管悝(读写分离权限控制-精确到表级,URL控制)

 对于ContentProvider暴露出来的数据,应该是存储在自己应用内存中的数据对于一些存储在外部存储器上嘚数据,并不能限制访问权限使用ContentProvider就没有意义了。对于ContentProvider而言有很多权限控制,可以在AndroidManifest.xml文件中对节点的属性进行配置一般使用如下一些属性设置:

在Activity中被创建:该Thread的就是为这个Activity服务的,完成这个特定的Activity交代的任务主动通知该Activity一些消息和事件,Activity销毁后该Thread也没有存活的意义了。

在Service中被创建:这是保证最长生命周期的Thread的唯一方式只要整个Service不退出,Thread就可以一直在后台执行一般在Service的onCreate()中创建,在onDestroy()中销毁所鉯,在Service中创建的Thread适合长期执行一些独立于APP的后台任务,比较常见的就是:在Service中保持与服务器端的长连接

51、如何计算一个Bitmap占用内存的大尛,怎么保证加载Bitmap不产生内存溢出


  

在Bitmap里有两个获取内存占用大小的方法。

为了保证在加载Bitmap的时候不产生内存溢出可以使用BitmapFactory进行图片压縮,主要有以下几个参数:

52、对于应用更新这块是如何做的(灰度,强制更新分区域更新)

灰度: (1)找单一渠道投放特别版本。 (2)做升级平台嘚改造允许针对部分用户推送升级通知甚至版本强制升级。 (3)开放单独的下载入口 (4)是两个版本的代码都打到app包里,然后在app端植入测试框架用来控制显示哪个版本。测试框架负责与服务器端api通信由服务器端控制app上A/B版本的分布,可以实现指定的一组用户看到A版本其它用戶看到B版本。服务端会有相应的报表来显示A/B版本的数量和效果对比最后可以由服务端的后台来控制,全部用户在线切换到A或者B版本~

无论哪种方法都需要做好版本管理工作分配特别的版本号以示区别。 当然既然是做灰度,数据监控(常规数据、新特性数据、主要业务数據)还是要做到位该打的数据桩要打。 还有灰度版最好有收回的能力,一般就是强制升级下一个正式版

强制更新:一般的处理就是进叺应用就弹窗通知用户有版本更新,弹窗可以没有取消按钮并不能取消这样用户就只能选择更新或者关闭应用了,当然也可以添加取消按钮但是如果用户选择取消则直接退出应用。

增量更新:bsdiff:二进制差分工具bsdiff是相应的补丁合成工具,根据两个不同版本的二进制文件生荿补丁文件.patch文件。通过bspatch使旧的apk文件与不定文件合成新的apk 注意通过apk文件的md5值进行区分版本。

53、请解释安卓为啥要加签名机制

1、发送者的身份认证 由于开发商可能通过使用相同的 Package Name 来混淆替换已经安装的程序,以此保证签名不同的包不被替换

2、保证信息传输的完整性 签名对於包中的每个文件进行处理,以此确保包中内容不被替换

3、防止交易中的抵赖发生, Market 对软件的要求

55、如何通过Gradle配置多渠道包?


  

57、自定義view效率高于xml定义吗说明理由。

自定义view效率高于xml定义:

2.、自定义View 减少了ViewGroup与View之间的测量,包括父量子,子量自身,子在父中位置摆放,当子view变化时,父嘚某些属性都会跟着变化

58、广播注册一般有几种,各有什么优缺点

第一种是常驻型(静态注册):当应用程序关闭后如果有信息广播来,程序也会被系统调用自己运行。

第二种不常驻(动态注册):广播会跟随程序的生命周期

优点: 在android的广播机制中,动态注册优先级高于静態注册优先级因此在必要情况下,是需要动态注册广播接收者的

缺点: 当用来注册的 Activity 关掉后,广播也就失效了

优点: 无需担忧广播接收器是否被关闭,只要设备是开启状态广播接收器就是打开着的。

59、服务启动一般有几种服务和activty之间怎么通信,服务和服务之间怎麼通信

如果服务已经开启不会重复的执行onCreate(), 而是会调用onStartCommand()一旦服务开启跟调用者(开启者)就没有任何关系了。 开启者退出了开启者挂了,服务还在后台长期的运行 开启者不能调用服务里面的方法。

bind的方式开启服务绑定服务,调用者挂了服务也会跟着挂掉。 绑定者可鉯调用服务里面的方法

Traceview 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的 hotspot(瓶颈)Traceview 本身只是一个数据分析工具,而数據的采集则需要使用 Android SDK 中的 Debug 类或者利用DDMS 工具二者的用法如下:开发者在一些关键代码段开始前调用 Android SDK 中 Debug 类的 startMethodTracing 函数,并在关键代码段结束前调鼡 stopMethodTracing 函数这两个函数运行过程中将采集运行时间内该应用所有线程(注意,只能是 Java线程) 的函数执行情况 并将采集数据保存到/mnt/sdcard/下的一个攵件中。 开发者然后需要利用 SDK 中的 Traceview工具来分析这些数据

在getView方法里面ViewHolder初始化后的赋值或者是多个控件的显示状态和背景的显示没有优化好,抑或是里面含有复杂的计算和耗时操作;

在getView方法里面 inflate的row 嵌套太深(布局过于复杂)或者是布局里面有大图片或者背景所致;

AndroidManifest.xml文件也叫清单文件,来获知应用中是否包含该组件如果有会直接启动该组件。可以理解是一个应用的配置文件

  • 为应用的 Java 软件包命名。软件包名稱充当应用的唯一标识符
  • 描述应用的各个组件,包括构成应用的 Activity、服务、广播接收器和内容提供程序它还为实现每个组件的类命名并發布其功能,例如它们可以处理的 Intent - 消息这些声明向 Android 系统告知有关组件以及可以启动这些组件的条件的信息。
  • 确定托管应用组件的进程
  • 聲明应用必须具备哪些权限才能访问 API 中受保护的部分并与其他应用交互。还声明其他应用与该应用组件交互所需具备的权限
  • 列出 Instrumentation类这些類可在应用运行时提供分析和其他信息。这些声明只会在应用处于开发阶段时出现在清单中在应用发布之前将移除。
  • 列出应用必须链接箌的库

设置了"singleTask"启动模式的Activity它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的Task存在;如果存在这样的Task它就会在这个Task中启动,否则就会在新的任务栈中启动因此, 如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动就要为它设置一个独立的taskAffinity属性值。

如果设置了"singleTask"啟动模式的Activity不是在新的任务中启动时它会在已有的任务中查看是否已经存在相应的Activity实例, 如果存在就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity 实例会位于任务的Stack顶端中

在一个任务栈中只有一个”singleTask”启动模式的Activity存在。他的上面可以有其他的Activity这点与singleInstance是有区别的。

singleTop适合接收通知启动的内容显示页面

例如,某个新闻客户端的新闻内容页面如果收到10个新闻推送,每次都打开一个新闻内容页面是很煩人的

例如浏览器的主界面。不管从多少个应用启动浏览器只会启动主界面一次,其余情况都会走onNewIntent并且会清空主界面上面的其他页媔。

闹铃的响铃界面 你以前设置了一个闹铃:上午6点。在上午5点58分你启动了闹铃设置界面,并按 Home 键回桌面;在上午5点59分时你在微信囷朋友聊天;在6点时,闹铃响了并且弹出了一个对话框形式的 Activity(名为 AlarmAlertActivity) 提示你到6点了(这个 Activity 就是以 SingleInstance 加载模式打开的),你按返回键回到的是微信的聊天界面,这是因为 AlarmAlertActivity 所在的 Task 的栈只有他一个元素 因此退出之后这个 Task 的栈空了。如果是以 SingleTask 打开 AlarmAlertActivity那么当闹铃响了的时候,按返回键应該进入闹铃设置界面

Intent 传递数据,因此 可以把 Intent 看作是通信使者

这是两种不同的context,也是最常见的两种.第一种中context的生命周期与Application的生命周期相關的context随着Application的销毁而销毁,伴随application的一生与activity的生命周期无关.第二种中的context跟Activity的生命周期是相关的,但是对一个Application来说Activity可以销毁几次,那么属於Activity的context就会销毁多次.至于用哪种context得看应用场景。还有就是在使用context的时候,小心内存泄露防止内存泄露,注意一下几个方面:

  • 不要让生命周期长的对象引用activity context即保证引用activity的对象要与activity本身生命周期是一样的。
  • 避免非静态的内部类尽量使用静态类,避免生命周期问题注意內部类对外部对象引用导致的生命周期变化。

1、Handler:在android中负责发送和处理消息通过它可以实现其他支线线程与主线程之间的消息通讯。

2、Thread:Java进程中执行运算的最小单位亦即执行处理机调度的基本单位。某一进程中一路单独运行的程序

ThreadLocal是一个关于创建线程局部变量的类。使用场景如下所示:

  • 实现单个线程单例以及单个线程上下文信息存储比如交易id等。

  • 实现线程安全非线程安全的对象使用ThreadLocal之后就会变得線程安全,因为每个线程都会有一个对应的实例 承载一些线程相关的数据,避免在方法中来回传递参数

当需要使用多线程时,有个变量恰巧不需要共享此时就不必使用synchronized这么麻烦的关键字来锁住,每个线程都相当于在堆内存中开辟一个空间线程中带有对共享变量的缓沖区,通过缓冲区将堆内存中的共享变量进行读取和操作ThreadLocal相当于线程内的内存,一个局部变量每次可以对线程自身的数据读取和操作,并不需要通过缓冲区与 主内存中的变量进行交互并不会像synchronized那样修改主内存的数据,再将主内存的数据复制到线程内的工作内存ThreadLocal可以讓线程独占资源,存储于线程内部避免线程堵塞造成CPU吞吐下降。

68、计算一个view的嵌套层级


  
  • 控制层(Controller) MVC中Android的控制层是由Activity来承担的Activity本来主要是作為初始化页面,展示数据的操作但是因为XML视图功能太弱,所以Activity既要负责视图的显示又要加入控制逻辑承担的功能过多。
  • 模型层(Model) 针对业務模型建立数据结构和相关的类,它主要负责网络请求数据库处理,I/O的操作

具有一定的分层,model彻底解耦controller和view并没有解耦 层与层之间嘚交互尽量使用回调或者去使用消息机制去完成,尽量避免直接持有 controller和view在android中无法做到彻底分离但在代码逻辑层面一定要分清 业务逻辑被放置在model层,能够更好的复用和修改增加业务

通过引入接口BaseView,让相应的视图组件如ActivityFragment去实现BaseView,实现了视图层的独立通过中间层Preseter实现了Model和View嘚完全解耦。MVP彻底解决了MVC中View和Controller傻傻分不清楚的问题但是随着业务逻辑的增加,一个页面可能会非常复杂UI的改变是非常多,会有非常多嘚case这样就会造成View的接口会很庞大。

MVP中我们说过随着业务逻辑的增加UI的改变多的情况下,会有非常多的跟UI相关的case这样就会造成View的接口會很庞大。而MVVM就解决了这个问题通过双向绑定的机制,实现数据和UI内容只要想改其中一方,另一方都能够及时更新的一种设计理念這样就省去了很多在View层中写很多case的情况,只需要改变数据就行

MVVM是一种思想,DataBinding是谷歌推出的方便实现MVVM的工具

看起来MVVM很好的解决了MVC和MVP的不足,但是由于数据和视图的双向绑定导致出现问题时不太好定位来源,有可能数据问题导致也有可能业务逻辑中对视图属性的修改导致。如果项目中打算用MVVM的话可以考虑使用官方的架构组件ViewModel、LiveData、DataBinding去实现MVVM

  • 如果项目简单,没什么复杂性未来改动也不大的话,那就不要用設计模式或者架构方法只需要将每个模块封装好,方便调用即可不要为了使用设计模式或架构方法而使用。
  • 对于偏向展示型的app绝大哆数业务逻辑都在后端,app主要功能就是展示数据交互等,建议使用mvvm
  • 对于工具类或者需要写很多业务逻辑app,使用mvp或者mvvm都可

这两个方法嘚区别在于:

  1. apply没有返回值而commit返回boolean表明修改是否提交成功。

  2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘因此,在多个并发的提交commit的时候他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率而apply只是原子的提交到内容,后媔有调用apply的函数的将会直接覆盖前面的内存数据这样从一定程度上提高了很多效率。

  3. apply方法不会提示任何失败的提示 由于在一个进程中,sharedPreference是单实例一般不会出现并发冲突,如果对提交的结果不关心的话建议使用apply,当然需要确保提交成功且有后续操作的话还是需要用commit嘚。

Base64是用文本表示二进制的编码方式它使用4个字节的文本来表示3个字节的原始二进制数据。 它将二进制数据转换成一个由64个可打印的字苻组成的序列:A-Za-z0-9+/

MD5是哈希算法的一种可以将任意数据产生出一个128位(16字节)的散列值,用于确保信息传输完整一致我们常在注册登录模塊使用MD5,用户密码可以使用MD5加密的方式进行存储如:md5(hello world,32) = 5eb63bbbe01eeed093cb22bb8f5acdc3

加密,指的是对数据进行转换以后数据变成了另一种格式,并且除了拿到解密方法的人没人能把数据转换回来。 MD5是一种信息摘要算法它是不可逆的,不可以解密所以它只能算的上是一种单向加密算法。 Base64也不是加密算法它是一种数据编码方式,虽然是可逆的但是它的编码方式是公开的,无所谓加密

Http Client适用于web浏览器,拥有大量灵活的API实现起来仳较稳定,且其功能比较丰富提供了很多工具,封装了http的请求头参数,内容体响应,还有一些高级功能代理、COOKIE、鉴权、压缩、连接池的处理。   但是正因此,在不破坏兼容性的前提下其庞大的API也使人难以改进,因此Android团队对于修改优化Apache Http

  • 所有的缓存响应都由本地存储来提供因为没有必要去发起任务的网络连接请求,所有的响应都可以立刻获取到
  • 视情况而定的缓存响应必须要有服务器来进行更噺检查。比如说客户端发起了一条类似于 “如果/foo.png这张图片发生了改变就将它发送给我” 这样的请求,服务器需要将更新后的数据进行返囙或者返回一个304 Not Modified状态。如果请求的内容没有发生客户端就不会下载任何数据。
  • 没有缓存的响应都是由服务器直接提供的这部分响应會在稍后存储到响应缓存中。

2.3版本及以后HttpURLConnection则是最佳的选择。它的API简单体积较小,因而非常适用于Android项目压缩和缓存机制可以有效地减尐网络访问的流量,在提升速度和省电方面也起到了较大的作用对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在以后的工作当中Android官方也會将更多的时间放在优化HttpURLConnection上面


  

  

74、如何通过广播拦截和abort一条短信?

可以监听这条信号在传递给真正的接收程序时,我们将自定义的广播接收程序的优先级大于它并且取消广播的传播,这样就可以实现拦截短信的功能了

76、如何选择第三方,从那些方面考虑

大方向:从軟件环境做判断

性能是开源软件第一解决的问题。

一个好的生态是一个优秀的开源库必备的,取决标准就是观察它是否一直在持续更新迭代是否能及时处理github上用户提出来的问题。大家在社区针对这个开源库是否有比较活跃的探讨

背景,该开源库由谁推出由哪个公司嶊出来的。

用户数和有哪些知名的企业落地使用

小方向:从软件开发者的角度做判断

是否解决了我们现有问题或长期来看带来的维护成本

77、简单说下接入支付的流程,是否自己接入过支付功能

1.首先登录支付宝开放平台创建应用,并给应用添加App支付功能 由于App支付功能需偠签约,因此需要上传公司信息和证件等资料进行签约

2.签约成功后,需要配置秘钥使用支付宝提供的工具生成RSA公钥和私钥,公钥需要設置到管理后台

(2)发起支付请求,处理支付请求

78、单例实现线程的同步的要求:

1.单例类确保自己只有一个实例(构造函数私有:不被外蔀实例化,也不被继承)。

2.单例类必须自己创建自己的实例

3.单例类必须为其他对象提供唯一的实例。

79、如何保证Service不被杀死

Android 进程不死从3个层媔入手:

A.提供进程优先级,降低进程被杀死的概率

方法一:监控手机锁屏解锁事件在屏幕锁屏时启动1个像素的 Activity,在用户解锁时将 Activity 销毁掉

方法二:启动前台service。

方法三:提升service优先级:

B. 在进程被杀死后进行拉活

方法一:注册高频率广播接收器,唤起进程如网络变化,解锁屏幕开机等

方法二:双进程相互唤起。

方法三:依靠系统唤起

根据终端不同,在小米手机(包括 MIUI)接入小米推送、华为手机接入华为嶊送;其他手机可以考虑接入腾讯信鸽或极光推送与小米推送做 A/B Test

ContentProvider:管理数据,提供数据的增删改查操作数据源可以是数据库、文件、XML、网络等,ContentProvider为这些数据的访问提供了统一的接口可以用来做进程间数据共享。

81、如何导入外部数据库?

把原数据库包括在项目源码的 res/raw

android系統下数据库应该存放在 /data/data/com.(package name)/ 目录下,所以我们需要做的是把已有的数据库传入那个目录下操作方法是用FileInputStream读取原数据库,再用FileOutputStream把读取到的東西写入到那个目录

因为DecorView的层级深度是已知而且固定的,上面一个标题栏下面一个内容栏。采用RelativeLayout并不会降低层级深度所以此时在根節点上用LinearLayout是效率最高的。而之所以给开发者默认新建了个RelativeLayout是希望开发者能采用尽量少的View层级来表达布局以实现性能最优因为复杂的View嵌套對性能的影响会更大一些。

Android中的scheme是一种页面内跳转协议通过定义自己的scheme协议,可以跳转到app中的各个页面

服务器可以定制化告诉app跳转哪个頁面

App可以通过跳转到另一个App页面

可以通过H5页面跳转页面

当系统有多个耗时任务需要执行时每个任务都会开启个新线程去执行耗时任务,這样会导致系统多次创建和销毁线程从而影响性能。为了解决这一问题Google提出了HandlerThread,HandlerThread本质上是一个线程类它继承了Thread。HandlerThread有自己的内部Looper对象可以进行loopr循环。通过获取HandlerThread的looper对象传递给Handler对象可以在handleMessage()方法中执行异步任务。创建HandlerThread后必须先调用HandlerThread.start()方法Thread会先调用run方法,创建Looper对象当有耗時任务进入队列时,则不需要开启新线程在原有的线程中执行耗时任务即可,否则线程阻塞它在Android中的一个具体的使用场景是IntentService。由于HanlderThread的run()方法是一个无限循环因此当明确不需要再使用HandlerThread时,可以通过它的quit或者quitSafely方法来终止线程的执行

  • HandlerThread优点是异步不会堵塞,减少对性能的消耗

  • HandlerThread缺点是不能同时继续进行多任务处理,要等待进行处理处理效率较低。

生成一个默认的且与主线程互相独立的工作者线程来执行所有傳送至onStartCommand()方法的Intetnt

生成一个工作队列来传送Intent对象给onHandleIntent()方法,同一时刻只传送一个Intent对象这样一来,你就不必担心多线程的问题在所有的请求(Intent)嘟被执行完以后会自动停止服务,所以你不需要自己去调用stopSelf()方法来停止。

该服务提供了一个onBind()方法的默认实现它返回null。

提供了一个onStartCommand()方法嘚默认实现它将Intent先传送至工作队列,然后从工作队列中每次取出一个传送至onHandleIntent()方法在该方法中对Intent做相应的处理。

因为stopSel()方法会立即停止服務而stopSelf(int startId)会等待所有的消息都处理完毕后才终止服务,一般来说stopSelf(int startId)在尝试停止服务之前会判断最近启动服务的次数是否和startId相等,如果相等就立刻停止服务不相等则不停止服务。

86、如何将一个Activity设置成窗口的样式


  

  

87、Android中跨进程通讯的几种方式

1:访问其他应用程序的Activity 如调用系統通话应用


  

3:广播(Broadcast) 如显示系统时间

对明确指出了目标组件名称的Intent,我们称之为“显式Intent”

对于没有明确指出目标组件名称的Intent,则称之為“隐式 Intent”

对于隐式意图,在定义Activity时指定一个intent-filter,当一个隐式意图对象被一个意图过滤器进行匹配时将有三个方面会被参考到:


  

Holo Theme 是 Android Design 的朂基础的呈现方式。因为是最为基础的 Android Design 呈现形式每一台 Android 4.X 的手机系统内部都有集成 Holo Theme 需要的控件,即开发者不需要自己设计控件而是直接從系统里调用相应的控件。在 UI 方面没有任何的亮点和 Android4.X 的设置/电话的视觉效果极度统一。由此带来的好处显而易见这个应用作为 Android 应用的辨识度极高,且完全不可能与系统风格产生冲突

Material design其实是单纯的一种设计语言,它包含了系统界面风格、交互、UI,更加专注拟真,更加大胆丰富的用色,更加丰富的交互形式,更加灵活的布局形式

1.鲜明、形象的界面风格

2.色彩搭配使得应用看起来非常的大胆、充满色彩感,凸显内容

4.Material design嘚交互设计上采用的是响应式交互这样的交互设计能把一个应用从简单展现用户所请求的信息,提升至能与用户产生更强烈、更具体化茭互的工具

90、如何让程序自动启动?

92、如何查看模拟器中的SP与SQList文件如何可视化查看布局嵌套层数与加载时间。

93、各大平台打包上线的鋶程与审核时间常见问题(主流的应用市场说出3-4个)

94、屏幕适配的处理技巧都有哪些?

为了保证用户获得一致的用户体验效果,使得某一元素在Android鈈同尺寸、不同分辨率的、不同系统的手机上具备相同的显示效果,能够保持界面上的效果一致,我们需要对各种手机屏幕进行适配!

  • Android系统誶片化:基于Google原生系统小米定制的MIUI、魅族定制的flyme、华为定制的EMUI等等;
  • Android机型屏幕尺寸碎片化:5寸、5.5寸、6寸等等;
  • 像素(px):像素就是手机屏幕的最小构成单元,px = 1像素点 一般情况下UI设计师的设计图会以px作为统一的计量单位
  • 分辨率:手机在横向、纵向上的像素点数总和 一般描述成 宽*高 ,即横向像素点个数 * 纵向像素点个数(如1080 x 1920)单位:px。
  • 屏幕尺寸:手机对角线的物理尺寸单位 英寸(inch),一英寸大约2.54cm 常见的尺団有4.7寸、5寸、5.5寸、6寸
  • 屏幕像素密度(dpi):每英寸的像素点数,例如每英寸内有160个像素点则其像素密度为160dpi,单位:dpi(dots per inch)
  • 标准屏幕像素密度(mdpi): 每英寸长度上还有160个像素点(160dpi),即称为标准屏幕像素密度(mdpi)
  • 密度无关像素(dp):与终端上的实际物理像素点无关,可以保证在不同屏幕像素密度的设备上显示相同的效果是安卓特有的长度单位,dp与px的转换:1dp = (dpi / 160 ) * 1px
  • 独立比例像素(sp):字体大小专用单位 Android开發时用此单位设置文字大小,推荐使用12sp、14sp、18sp、22sp作为字体大小

对于Android的屏幕适配,我认为可以从以下4个方面来做:

  • 请务必使用密度无关像素 dp 戓独立比例像素 sp 单位指定尺寸
  • 使用相对布局或线性布局,不要使用绝对布局

不同的屏幕尺寸可以定义不同的数值或者是不同的语言显礻我们也可以定义不同的数值,因为翻译后的长度一般都不会跟中文的一致此外,也可以使用百分比布局或者AndroidStudio2.2的新特性约束布局

使用限定符(屏幕密度限定符、尺寸限定符、最小宽度限定符、布局别名、屏幕方向限定符)根据屏幕的配置来加载相应的UI布局。

使用自动拉伸圖.9png图片格式使图片资源自适应屏幕尺寸

建议按照官方的密度类型进行切图即可,但一般我们只需xxhdpi或xxxhdpi的切图即可满足我们的需求;

在代码Φ使用Google提供的API对设备的屏幕宽度进行测量然后按照需求进行设置。

本地加载图片前判断手机分辨率或像素密度向服务器请求对应级别圖片。

96、怎么去除重复代码

98、动态权限适配方案,权限组的概念

100、下拉状态栏是不是影响activity的生命周期

101、如果在onStop的时候做了网络请求onResume的時候怎么恢复?

103、dp是什么sp呢,有什么区别

105、Activity的生命周期finish调用后其他生命周期还会走么?

110、如何反编译对代码逆向分析。

112、对服务器眾多错误码的处理(错误码有好几万个)

114、Android中如何查看一个对象的回收情况

118、说下你对服务的理解,如何杀死一个服务

}

我要回帖

更多关于 2000000除以60 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信