android程序员,Android程序员面试笔试宝典 pdf
北大青鸟java培训:Android开发程序员需要知道几件事情?
在成为Android开发程序员的这几年时间内,从一个什么都不懂的菜鸟,成长成为一名资深的Android开发程序员。
成都创新互联公司自成立以来,一直致力于为企业提供从网站策划、网站设计、成都网站设计、网站建设、电子商务、网站推广、网站优化到为企业提供个性化软件开发等基于互联网的全面整合营销服务。公司拥有丰富的网站建设和互联网应用系统开发管理经验、成熟的应用系统解决方案、优秀的网站开发工程师团队及专业的网站设计师团队。
虽然这一路感触很多很辛苦,但是我依然热爱这个行业。
第一就是技术要扎实在从事这个行业之前我参加过Android软件开发培训,在北大青鸟学习了一段时间,虽然之前没有接触过,但是在这一段时间内学会了很多的知识。
每天学习到很晚,教室里依然有老师的陪伴,这一段时间的学习为我之后的工作,打下了很好的基础。
所以无论是在哪个行业,扎实的技术首先是排在第一位的。
如果之前在学校里面已经接触过这一块的知识,那么在今后的工作中你也会受到这段时间学习的帮助。
第二你要有计算机思维在it行业工作肯定是要有计算机思维的,这也是亘古不变的道理。
很多时候当事情非常的乱,这时候你需要有计算机思维。
它会帮助你快速的解决当前的问题,恢复正常的工作。
这个思维要在你的头脑里固化,以后遇到事情就可以快速解决。
第三思维的跳跃性当你每天都在面对枯燥的代码时,难免会产生负面的情绪。
这时你需要思维的跳跃性,缓解当时的情绪,以便更好的工作。
在遇到问题时依旧是如此,跳跃的思维会给你带来意想不到的收获。
IT培训认为当你一直在坚持这几件事情的时候,你会发现自己已经成为了一名专业的Android开发程序员。
北大青鸟java培训:android程序员必须要面对的几个问题?
IDC最近一份关于移动应用开发的调查报告显示,Androdid开发者对谷歌的移动操作系统平台的兴趣正在下降。
尽管依然有79%的开发者表示对Android“非常感兴趣”,但IDC的调查报告显示,一些迹象表明在2012到2013年间,Android将随着遇到的问题,市场份额会出现大的变化。
解决这些问题,对于谷歌如何维持Android生态系统的活力来说意义重大。
同样,独立开发者也要意识到这些问题将给自己的商业计划带来困难。
1、Android的碎裂化问题现如今,用户手中的Android系统版本各异。
相信你已经看到过有很多关于开发者如何为最低通用版本编码的文章(现在可能是2.3版本了)。
但是,不止在操作系统方面存在Android版本碎裂化这个问题。
在SDK开发工具上,也没有统一的标准。
你可能要为六种尺寸的屏幕编码,不同的按钮、键盘,有的可能根本就没有按钮??好吧,你可以在一个代码分支上为所有的这些设备编码(这种方案即笨拙又不容易实现),或者开发多个版本(听起来就很糟糕)。
当然,如果回报还不错的话,这么做也未尝不可,可事实上并非如此。
2、投资的回报这似乎是既定的法则:Android应用的利润一般都比iOS应用的利润少。
这可能是因为人们在买手机时更关注它的功能而不是应用的质量,但是这意味着开发者将获得较少的利润。
如果开发者拥有的时间和资源有限,在需要选择平台时,平台已经建立的基础将变得不再重要,他们更关心的将会只是:“我能否赚到钱?”3、克隆应用的数量让我们先假设你有一款优秀的应用,它能做一些与众不同的工作,可能是能够联机到社交网络上、处理PIM数据,或者能提供一种新的游戏玩法。
然后你有办法让你的应用从成千上万个应用里脱颖而出。
但是,接下来就会有数不清的开发者开发出克隆版本,从而拉低你的应用的价格,和你展开竞争。
Android商店几乎是一个无法无天的社会。
如果不解决这一问题,让开发者面对不公平的竞争,还有多少开发者愿意在里面做应用推广呢?4、选择哪家商店销售你的应用?GooglePlay商店、亚马逊的Android商店、BarnesandNoble’sNookApps??有很多地方你可以选择用来销售你的应用。
这是市场方面的碎裂化问题,而且,有时候它也会让设备型号变得纷乱繁杂。
这就意味着要建立更多的版本、协议等等,这些都会是令你头痛的工作。
与此相反的是,iOS和Windows手机就没有这么多繁杂的工作要做。
像EA和Ubisoft这样的公司或许可以应付这些问题,但是那些个人开发者是不可能把他们所有的时间都花在应用商店的管理上的。
有时候,电脑培训认为当平台已经不再处于快速发展阶段时,开放和免费并不是做好的选择。
android开发需要注意什么
1、不要排斥新技术和新工具。
Android Studio 1.0 之后的版本,基本已经稳定到可以支持正常的工作开发的程度了。单纯就书写效率而言,Android Studio 带来的好处绝对大于它和Gradle的学习成本。JetBrains的IDE,用过都说好。
还有就是适当的提升targetSdkVersion到新版本。
2、代码设计方面的问题,大部分都能在Android系统源码里找到解决方案。
当你想设计一个新模块,或者实现一个新ui组件的时候,应该采用哪些设计模式、应该以哪种形式给外界提供接口之类的问题,大部分都可以参考Android系统的源码,找到实现方式。Google为安卓程序员提供了一座现成的宝库。
3、理解Android和Java内存管理方式,至少要理解垃圾回收和Java的引用。
就好比学OC就要先理解黄金法则一样,而java的内存管理,其实比OC要好理解多了。
这可能会帮助你大大减少程序异步操作产生的空指针崩溃。也会帮助你理解为什么滥用单例模式会导致内存的臃肿。还会帮助你养成不用“+”去连接超大字符串的好习惯。
4、ContentProvider并不是只有在跨进程共享数据的才有用,把数据库表映射到一个独立的uri是Google鼓励的实现方式。
从设计上讲,用uri(统一资源标识符)去描述数据,肯定比sql语句要理想。
从效果上讲,用CursorLoader读取数据是让iOS程序员都羡慕不已的事情,作为android程序员,何苦不用呢。
5、理解Activity任务栈。
非Activity的Context对象如果直接启动Activity会报错,这只是一个表面现象,真正起作用的其实是Activity任务栈机制。
理解Activity任务栈机制以及Activity的各种启动方式,会帮助解决大部分页面关系错乱问题,以及应用互相掉起、任务栏进入应用、后台弹窗引起的各种问题。
6、对于一些奇葩的第三方ROM,调用其非主流api的时候,可以使用反射。
在适配一些第三方ROM的的时候,调用一些在开发环境中没有,但在运行环境中有的方法时,可以使用反射。比方说,华为双卡手机可能会提供获取第二块SIM卡信息的api,如果直接调用,在开发环境可能无法通过正常编译,用反射就没问题。这属于不得已而用反射的一种情况。
7、SQLite的锁,是数据库级别的锁,也就是说同一个数据库的写操作无法并发执行。
所以,在数据库设计的时候,如果表太多,尽量将没有关联的表拆到多个数据库文件中。
8、Bitmap的内存占用问题。
这是一个困扰2.X时代android程序员的问题。
2.X时代Bitmap对象虽然存储在堆内存中,但是用了一个byte数组存储其像素信息。通过计数器来记录该像素信息被引用的个数。有人认为这个byte数组在native堆中,但事实上它也在堆中。
只有在使用者调用recycle()后,Bitmap对象才会释放像素信息,才会在失去引用后,被垃圾回收机制销毁。再加上DVM的heap size有严格的阀值,所以在使用大量图片资源的时候,及其容易发生OOM。
解决办法一般都是,用一个哈希表存储Bitmap对象的软引用,作为内存缓存,并在适当时机掉用其recycle()。
3.0以上版本Bitmap对象可以通过垃圾回收机制完全销毁,理论上不用再调用recycle()。
Android程序员的较好的职业规划应该是怎样?
Android程序员的职业规划,怎么说呢?一句话叫做:早知如此,又何必当初。命运有些是自己可以掌握的,有些可能需要运气和机会。
一、路径可达
先说说路径可达这个词吧?有些人会觉得他的路看不到未来,有些人就可以清晰的看到他的方向。如果你现在所做的工作过两年会不会有所成长,达到你的目标。如果答案是否定的,那么说明现在的工作是没有上升通道的,就需要改变。当然安于现状不思进取是另外一回事。时刻反思自己所走的路,然后迅速调整,可能会少走很多弯路,毕竟时间不可逆。
二、时间规划
我有时候会想我五年后在哪里?做什么?大部分人对于这个都会比较模糊。因为时间跨度太大。五年时间相当于整个生命长河其实比较短,但在职业规划中确是很长的段,特别是刚毕业的那五年。从时间规划来讲肯定会用到时间的切分。宏观的东西只有落地到一件件事上才是有效的,才算得上完整的规划。但是话又说回来人是有惰性的,人对于这种有限制的东西有天然的排斥感,执行起来非常痛苦,即使开始执行起来很有激情,过不了几个月,所有的计划都缩水了,这同时也导致了很多时间的浪费和做事情的盲目性。所以计划的时效性和执行很重要,这里又会涉及一个词:“执行力”。
没有计划也导致学习变成一个一个孤立的点,完全没有串连性。因为你是想到学什么学什么,而不是计划着学,一段时间后可能会有一些积累,但是永远深度不够。这可以做一个简单的实验,把自己脑子里的东西理一理,如果时间需要很长说明整体知识体系已经有些混乱,可以对比一下操作系统的磁盘整理。如果一个人能很好的管理时间那么必成大牛。好学生好在哪里,排除智商的因素外,就是时间管理和善于思考。我觉得我自己最大的问题:时间管理,自律性,沟通能力。这三块是我觉得自己最缺乏一定程度上是致命的,很大程度上会决定我未来的所发展的高度。
三、项目经理还是架构师
在程序员中一直有个讨论就是将来要做项目经理还是做架构师。这两条路的侧重点不一样,所以积累的东西也可能不同。项目经理更强调综合能力,比如说协调能力,沟通能力等一系列偏管理的能力。而架构师可能更专注于技术本身,技术上的宏观方向。两条路有重叠,但是更多的是区别。有些项目经理可能就不会写代码。但是同样可以带好一个项目,一个团队。
我曾经也问自己要是以后这两条路走哪条,其实都可以尝试一下。比如说给一个项目让我带带,我能否把它带好,其实需要机会,同时也需要自己去争取这样的机会。所以我的答案就是如果有机会的话两条路都可以尝试走走,就是两个方向的一些能力都可以进行积累。很多人认为项目经理是一个职位,我倒觉得是动态的,这个项目中你做项目经理,另外一个项目中可能又是开发工程师。所以不永远是项目经理,也不永远是开发工程师。
就程序员而言,专注技术是没有任何问题的,先技术后管理。管理这个东西总的说有点虚无飘渺,各都有各的一套理论,比较难以评估。但是技术是可测量的,通过一定的努力技术水平都会有定的跃升。记得在《肖申克的救赎》里面说到地质的形成只需要两个条件:压力和时间。其实对于学技术也是一样的。只要肯学一定会达到某个水平。到大牛级别的确实需要一些悟性和天分。
四、我的选择
我为什么觉得自己应该走架构师这条路,这和我职业终极目标是契合的。这里先说一下架构师做什么?架构师负责整个项目甚至整个系统的构架(这一句话等于废话)。一般型的项目可能这个设计项目就做掉甚至可能就不需要架构。但是系统复杂度上升的时候,会涉及到系统之间的交互,还有技术的可行性和整个设计的方案。这个时候架构师就出场了。另外的工作就是承担一定的培养新人的工作。所以架构师都需要具备比较好的口才,很多人都说程序员不会说话,错了,那是低端的,到了高端的程序员口才都很好,看一下那些程序员大会中侃侃而谈的架构师们,是不是有种“高端大气上档次”的感觉。这后面会发现有一个发展方向就是“培训师”,还可以写书,其实这些都可能是一些“副产品”。技术到一定的境界很多事情到都是水到渠成。
架构师写代码吗?当然写。他们肯定不会写那些简单的代码,他们一般写什么代码?框架,一般来讲优秀的框架都是一个人或者极少人写出来的。比如说Linux的核心就是一个人写出来的。好的代码绝不是人堆出来的。你给100个初级程序员也整不出一个Struts来。这里会衍生出另外一条路,就是开源框架,很多牛人都是开源社区的爱好者。都或多或少的参与了一些开源项目。甚至把自己写的一些东西开源出来。一般来讲能做到这个级别那是相当厉害的了。
五、领域方向
我记得以前总有人问我你最擅长的领域是什么?这个问题一问我就懵了,因为我从来就没想过这个问题。可能本身还没到分领域的级别,还处于一种“原始积累”阶段。技术学到一定阶段的时候是分领域的。领域之间会有一些交叉。
我所知道的大方向是“高性能,大数据量,移到平台“。这是我给Java这所分的三个方向。其实我上面所说的三个方向不一定是同一个维度。但是我认为写Java的如果没有沾上这三个方向中的一个,一定没有前途。高性能和大数据量的处理需要比较多的技术储备。很多人说写个Java就是CRUD(严格来讲,对于计算机本身所有的操作都是CRUD)。可是在高性能情况下所涉及的问题一下成指数级增长。各种“水平扩展”,“服务化”,“容灾”,”缓存”等各种牛B的词汇就来了,你写一般的CRUD最多也就知道个SSH,这是不一样的。比如说做大数据量的处理一定会知道Hadoop,然后就是云计算,云存储。反正什么牛B什么来。移动平台和上面我所说的维度不一样,因为移动平台相对应的是PC平台。但是由于移动平台的发展时间很短。所以能搭上这趟快车也有不错的发展。要是早些年(2012年以前)进入移动平台的开发,现在同水平的程序员工资肯定更高。这是平台发展所带来的红利。虽然三年前我预见到了移动平台的无可限量,但是那时候就像一个一无所有的人,还管它什么移动平台还是PC平台,能写代码做项目就OK。以至于我学了一个月的Android就偃旗息鼓。
不管怎么样技术的底层都是一样的,所以扎实的基础是必要的,这就是为什么算法和数据结构是永恒不衰的。很多人说算法和数据结构无用那就是无知的表现。这个无知就像在讨论读大学有没有用一样。
六、总结
上面所说的一些东西可能都会比较虚,很多人都可能明白其中的道道,比如说到时间管理,这个估计从学生时代就在讲。但是真正的执行还是千差万别。所以又回归到哪里?回归到人本身。后来我想明白一件事情,即使道理再明白,没有好的执行仍然等于空谈。这里我回想起刘未鹏的《暗时间》。里面非常细致的讲了对于时间的管理。这个我读大学的时候同样在一本书《读大学,究竟读什么》里面也有所论述。当然两个方向是不一样的,一个是程序员的思维,另外一个是文科生的思维。但是道理只有一个,时间利用率的本质是什么。
另外就是实践,强烈的实践。我记得大学的时候读《人性的弱点》真是心潮澎湃,可是过不了多久我就忘了书中的内容。所以没有把书中的一些东西深刻的印记在脑海里并转化成你自己的东西,它永远只是知识。
怎样的android程序员才是合格的程序员呢?
作一个真正合格的程序员,或者说就是可以真正合格完成一些代码工作的程序员,应该具有的素质。
1:团队精神和协作能力把它作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本。把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的,即便如linus这样的天才,也需要通过组成强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的。独行侠可以作一些赚钱的小软件发点小财,但是一旦进入一些大系统的研发团队,进入商业化和产品化的开发任务,缺乏这种素质的人就完全不合格了。
2:文档习惯说高水平程序员从来不写文档的肯定是乳臭未干的毛孩子,良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,而作为高级程序员和系统分析员,这个比例还要高很多。缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。
3:规范化,标准化的代码编写习惯作为一些外国知名软件公司的规矩,代码的变量命名,代码内注释格式,甚至嵌套中行缩进的长度和函数间的空行数字都有明确规定,良好的编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。
有些coding fans叫嚣高水平程序员写的代码旁人从来看不懂,这种叫嚣只能证明他们自己压根不配自称程序员。代码具有良好的可读性,是程序员基本的素质需求。
再看看整个linux的搭建,没有规范化和标准化的代码习惯,全球的研发协作是绝对不可想象的。
4:需求理解能力程序员需要理解一个模块的需求,很多小朋友写程序往往只关注一个功能需求,他们把性能指标全部归结到硬件,操作系统和开发环境上,而忽视了本身代码的性能考虑,有人曾经放言说写一个广告交换程序很简单,这种人从来不知道在百万甚至千万数量级的访问情况下的性能指标是如何实现的,对于这样的程序员,给他深蓝那套系统,也做不出太极链的并访能力。性能需求指标中,稳定性,并访支撑能力以及安全性都很重要,作为程序员需要评估该模块在系统运营中所处的环境,将要受到的负荷压力以及各种潜在的危险和恶意攻击的可能性。就这一点,一个成熟的程序员至少需要2到3年的项目研发和跟踪经验才有可能有心得。
5:复用性,模块化思维能力经常可以听到一些程序员有这样的抱怨,写了几年程序,变成了熟练工,每天都是重复写一些没有任何新意的代码,这其实是中国软件人才最大浪费的地方,一些重复性工作变成了熟练程序员的主要工作,而这些,其实是完全可以避免的。
复用性设计,模块化思维就是要程序员在完成任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作,如果一个软件研发单位和工作组能够在每一次研发过程中都考虑到这些问题,那么程序员就不会在重复性的工作中耽误太多时间,就会有更多时间和精力投入到创新的代码工作中去。
一些好的程序模块代码,即便是70年代写成的,拿到现在放到一些系统里面作为功能模块都能适合的很好,而现在我看到的是,很多小公司软件一升级或改进就动辄全部代码重写,大部分重复性工作无谓的浪费了时间和精力。
6:测试习惯作为一些商业化正规化的开发而言,专职的测试工程师是不可少的,但是并不是说有了专职的测试工程师程序员就可以不进行自测.
android工程师是什么意思
Android工程师是指从事Android移动应用操作系统、游戏和各种Android平台功能的应用、开发和测试的技术人员。以手机开发为主要对象,包括但不限于手机操作系统、手机游戏、手机其他多种功能的开发和优化人员。
本文名称:android程序员,Android程序员面试笔试宝典 pdf
当前地址:http://ybzwz.com/article/phijep.html