1、养成良好的书写代码的习惯,该加注释的时候一定要加注释,该大写的地方一定要大写,变量命名不能模糊不清。这是基础,是为了让别人能看明白你所写的代码,不能你写的代码只有你自己才看的明白。
2、注意所写软件的版本控制。
3、勤奋学习最新的技术,计算机技术日新月异,这点我不说相信你也知道。
4、养成写开发文档的好习惯,再接到一个项目时,第一件事情是进行需求分析,然后写开发文档,把你每一步要做什么都先写清楚,再动手做。
5、不要怕技术难题,在计算机领域,只有不能解决难题的人,没有人解决不了的难题。
6、虚心象他人学习,即使技术实力比你差很多的人,也肯定会知道一些你所不知道的技术点。
第一种武器:开发工具至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是我重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而本人对SUN公司的“网络即计算机”的概念相当欣赏,并相信JAVA即其相关的技术集JAVA One会成为未来的主流开发工具之一。
其次,如果能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,C++ Builder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
第二种武器:数据库为什么数据库是如此重要?很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库操作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL, Postgres等。
第三种武器:操作系统当前主流的操作系统是Windows,Linux/Unix,熟练地使用这些操作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解操作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。Linux作为开发源码的操作系统,是一个很好的学习平台,Linux几乎具备了所有现代操作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。只有对操作系统有一定的了解后,你会发现自己上了一个新的台阶。
第四种武器:网络协议TCP/IP在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课,网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEB Services,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,所以,深入掌握TCP/IP协议是非常必要的。至少,你需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。 第五种武器:DCOM/CORBA/XML/WEB Services随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间件平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。程序员需要做的不仅仅是利用商业的开发平台来开发软件,而是要理解这些技术的初衷,即为什么需要这项技术,如果你能理解了这一点,再回头看这些技术的具体实现,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的“世界语”,是分布计算的基石之一。
第六种武器:软件工程与CMM现代大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合,编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。一句话可以概括我的看法:“创意无限,流程保证”。 第七种武器:强烈的好奇心什么才是一个程序员的终极武器呢,那就是强烈的好奇心和学习精神。没有比强烈的好奇心和学习精神更好的武器了,它是程序员们永攀高峰的源泉和动力所在。一.快乐的语言 这是一种你用来思考的语言。这是一种你希望无时无刻不在使用的语言。这是一种用来编写自己的项目的语言。对于我来说,它是OCaml (现在还有JavaScript,尽管我正在把CoffeeScript吸收进我的世界里)。对于很多人来说,它可能是LISP 或 Haskell。当一个人告诉我他的快乐的语言后,我能根据这个看出这个人的身上的很多特点。如果这种语言是一种很深奥的或新的语言,这说明他对编程有热情。如果这种语言是一种主流语言,这说明他很明智或实用主义。二.高产的 / 强大的语言 这种语言里应有经验,包罗万象。它很成熟,有大量的基础库。使用这种语言,它可以在紧要关头快速的帮助你开发出各种服务或命令行工具。你的指尖敲动几下,一切事情都搞定。如果一个程序员列出很多这样的语言,这也许能说明他可以使用所以的这些语言来开发RESTful服务。如果我没发现他有高产的语言,或者很少,那么我就会怀疑他要么缺乏经验,要么不够专业。三.黄油 + 面包 这种语言是当生活拮据的时候它能让你赖以生活的语言。这是一种只有当你自己或家人需要你去挣扎奋斗时才需要的语言。如果一个人没有掌握一种能够换取黄油面包的语言,那他很可能需要接受一些”如何在一个团队里有效率的工作“这方面的教育。
《网管员世界》杂志,作为赛迪集团旗下重要媒体,历经十二年的精心办刊,以面向广大网络管理人员和技术人员为主的主流传媒杂志,已在广大读者心目中深深扎根。杂志中介绍的设备维护、故障诊断、信息安全、升级改造等栏目,其主题思想就是围绕着网络运维与管理所展开的,如何构建高可用网络、如何管理网络稳定运行,充分发挥网络价值,维护好网络通信安全这都是杂志研究的对象。
曾记得,从2007年我第一次在这本杂志上投稿起,到如今已发表各类文章30多篇,出版专著一本,而且还在网管员论坛担任linux版主为大家答疑解惑。这些年来是《网管员世界》杂志伴随着我工作和学习,伴随我专业技术的积累和提高,也激励着我始终热忱的为杂志投稿。透过这本杂志的内容,我认为提高了技术、扩宽了知识面、更佳提高了我的写作技能,与此同时再不断的投稿中,也使我能结识不少得技术高手,最庆幸的是让我认识了像孙主编,张主编这样工作认真严谨的资深编辑,而且通过杂志社定期举办的读者联谊会、网络沙龙等各种形式的技术交流,使自己的经验可以通过杂志得以和大家分享,例如我在2012年7月,作为演讲嘉宾受邀参加2012年中国网络主管大会。
正是《网管员世界》杂志为我们提供了非常重要的技术交流平台,为每位读者营造了严谨的科研氛围,始终如一的吸引着每一位读者。2012年8月杂志更名为《网络运维与管理》杂志将进入一个崭新的阶段,相信新的《网络运维与管理》杂志在秉承以往风格和优点的基础上会不断创新,衷心祝愿我们的杂志能再创辉煌!
Android开发的ContentProvider这个东西会看两遍吧。第一遍是整体选系android的时候,因为这个东西是四大组件之一,不看面试的时候不好说啊。第二次应该是实际要用的时候吧,或者像我这样写Activity写烦了想看点别的东西的人。
入正题,ContentProvider是干嘛用的?它被用于跨进程做数据共享用。其实你把Android的四大金刚(组件)放到一起,仔细想想他们各自的用途就会发现都是必不可少。他们共同的特点是跨进程。做为java工程师,想写个跨进程的东西不是很好写吧。
- Activity用于展示数据内容,不同的activity可以通过intent跨进程进行调用。比如在Gallery中调用邮件分享照片
- Service用于实现进程间方法的调用。被举得最多的栗子就是UI调用音乐播放服务。Service不仅仅是在后台运行的一段代码而已。如果是这样的话,为什么不自己写个handle-looper在自己的app中默默运行呢?关键在于跨进程通信ipc。
- ContentProvider用于共享数据。多个进程间共享数据,可以通过共享文件的方法,而共享文件的话,权限自己怎么控制呢?linux的内存映射和管道什么的在android好像调用不了,好吧我没调用过 >_<|||。ContentProvider让开发者能够在拥有读写权限的情况下通过一条地址(比如content://com.fool/tab1)来访问共享数据。
- BroadcastReceiver,可以接收系统和任意app发出的信号intent,如果通过匹配则配触发。同样是跨进程的。