北京总部

JAVA入门:程序员Java面试中的30个问题陷阱

JAVA入门:程序员Java面试中的30个问题陷阱

2017-02-16

找工作要面试,有面试就有对付面试的办法。以下一些题目来自我和我朋友痛苦的面试经历,提这些问题的公司包括IBM, E*Trade, Siebel,Motorola, SUN,以及其它大小公司。 面试是没什么道理可讲的,它的题目有的不合情理、脱离实际。有在纸上写的,有当面考你的,也有在电话里问的,给你IDE的估计很少(否则你赶快去买彩票,说不定中)。所以如果你看完此文后,请不要抱怨说这些问题都能用IDE来解决。你必须在任何情况下准确回答这些问题,在面试中如果出现一两题回答不准确很有可能你就被拒之门外了。 当然这些都是Java的基本题,那些面试的人大多数不会问你Hibernate有多先进,Eclipse的三个组成部分,或command design pattern,他们都是老一辈了,最喜欢问的就是基础知识。别小看了这些基础,我朋友水平一流,结果就栽在一到基础知识的问题下,和高薪无缘。 好了废话少说,开始正题。   第一,谈谈final, finally, finalize的区别。 最常被问到。 第二,Anonymous Inner Class (匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class和Inner Class的不同,说得越多越好(面试题有的很笼统)。 第四,&和&&的区别。 这个问得很少。 第五,HashMap和Hashtable的区别。 常问。 第六,Collection和Collections的区别。 你千万别说一个是单数一个是复数。 第七,什么时候用assert。 API级的技术人员有可能会问这个。 第八,GC是什么?为什么要有GC? 基础。 第九,String s = new String(xyz);创建了几个String Object? 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 第十一,short s1 = 1; s1 = s1 1;有什么错? short s1 = 1; s1 = 1;有什么错? 面试题都是很变态的,要做好受虐的准备。 第十二,sleep()和wait()有什么区别? 搞线程的最爱。 第十三,Java有没有goto? 很十三的问题,如果哪个面试的问到这个问题,我劝你还是别进这家公司。 第十四,数组有没有length()这个方法? String有没有length()这个方法? 第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 常问。 第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?是用==还是equals()?它们有何区别? 第十七,给我一个你最常见到的runtime exception。 如果你这个答不出来,面试的人会认为你没有实际编程经验。 第十八,error和exception有什么区别? 第十九,List, Set, Map是否继承自Collection接口? 第二十,abstract class和interface有什么区别? 常问。 第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 第二十二,接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)? 第二十三,启动一个线程是用run()还是start()? 第二十四,构造器Constructor是否可被override? 第二十五,是否可以继承String类? 第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 世界计算机 第二十八,编程题:用最有效率的方法算出2乘以8等於几? Copyright 2007-2008 Jobhere.Net All Rights Reserved 有C背景的程序员特别喜欢问这种问题。 第二十九,两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 第三十,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 中软国际卓越培训中心祝愿您面试成功。  了解更多java程序员面试知识欢迎访问中软国际教育集团官网www.zretc.com!

更多>
JAVA行业趋势:JavaScript在移动端中胜出是有原因的

JAVA行业趋势:JavaScript在移动端中胜出是有原因的

2017-02-15

你认为JavaScript将会掌控移动开发的未来吗?还是Java,Objective-C和Swift继续它们的领导地位? 那物联网,它的后端会通过Node.js吗?通过调查,让我们知道你用什么来建立你的APP吧。 JavaScript并不是世界上最优美的编程语言。正因如此,一个世界级的专家写了一本关于这个语言的“精粹 ”的 书。这本书的名字是“深度挖掘javascript的亮点”,因为优秀的东西被埋的相当深。即便如此,它还是迅速地称为世界上最受欢迎的语言之一。这种受 欢迎是应得的,因为尽管这种语言存有缺陷,但是javascript提供给开发者其它语言不能给予的重要的优势。有一些优势是在浏览器的开发商同意了 Javascript(好吧,技术上的ECMAScript)作为web语言的标准后产生的。其它的是固有的web应用编程模型以及更没有通过什么增强改 进。然而,尽管原生态的应用程序统治了web应用在移动设备上的地位,但是JavaScript的优势正在逐步转向移动设备。最终它会主宰吗? 流行然而并不优先 最近的TIOBE社区列表将JavaScript列为在所有编程语言中的第六位并且还在持续上升。TIOBE方法的排名倾向于支持老旧的,更加成熟 的语言,而不太擅长去追随潮流。相比之下,Redmonk排名方法将JavaScript放在第一的位置上。Redmonk方法某种程度上会偏向于有着强 大开源社区的语言,但是同时在实质上会反映现在的趋势和兴趣点。我们自己的开发者经济概览已经表明HTML5/Javascript的联合已经是移动端开 发者所采用的第二流行的语言,几乎55%的人使用。仅仅以微小的优势输给57%的人使用java。然而,尽管我们发现HTML5和Javascript的 组合在优先选择的人群上为(19%),在这个方阵上远远落后于Java(29%)。这看起来会在未来几年显著提高。[你怎么认为呢?我们已经有了一个新的 调查,所以看看这个调查然后让我们知道你的看法] JavaScript在浏览器上飞向自由 这并不是一个标准的“网赢”的说法。我并不认为浏览器或者是基于网络视图的应用程序最后会统治移动设备。即使使用而且增长但不会是常态。如 果将来真的开放web标准来统治移动设备那么他们需要从文档对象模型(DOM)开始。DOM不是构建应用程序,而是文档的基础。当然你可以最初围绕一个平 台设计一个用于文档的应用程序,但是你会举步维艰。看一眼现在的框架,允许你为移动浏览器或网络视图设计的相当高性能的应用程序:React.js 、 Famo.us 和lonic。这三者的共同点就是尽可能少用DOM。 是的,有太多的 WebGL(或者说 HTML5 Canvas 必备),但是这些都是低级别的 APIs。你所需的是大的、可能是多字节的、好的框架为开发大多数应用来创建一个优秀的平台。这不太适合 web 应用编程模型,其中最新的程序代码是放在一个远程的服务器上,尤其不适用在一个移动的环境中。能在一个大的好的存储在本地的WebGL上创建一个混合型的 应用是真的,而且只是从远程的服务器上获取程序特定的代码。但是为什么要使用浏览器呢?为什么不只是 javaScript 能优于其他的在硬件图形加速器(提示:Qt 提供不错的产品)的跨平台框架。一个高级别的 API 在语言之间的桥接上是不会有那么多的开销的。或许在涉及访问特定功能的时候也是欠缺限制。 现在有几个符合这一描述的非常有趣的新选择。 React Native 和 NativeScript.。它们以不同的方式运行,但是二者都是用 JavaScript 来构建一个原生态 UI 的应用程序。Appcelerator 的 TiNext 可能也是很有意思的,即使它们多年来被多次谈论却不曾公开一个版本,因此让我们耐心等待并一睹它的风采。 JavaScript异常 苹果已经恢复了JavaScript 在移动端的优势。阻止了大多数开发人员在移动端采用一个敏捷、web 样式持续交付模型的冠一个关键事情就是 Apple 在代码下载上的禁令。如果没有这种迭代模式的显著放缓,对比测试会更加困难。这 实际上就意味着开发者,尤其是初学者,会学的慢些。直到最近,唯一获取更快的迭代的方式就是首先从 Android 开始,开发一个混合的应用程序,因为 Apple 使得JavaScript 称为在 webview 代码下载规则中的一个异常。在第一种情况下,它意味着大多数早期的采纳者正在远离这个平台。不幸的是第二种情况下 UX 的取舍实在是太大了,大多数开发者因为用户用程序故障或者切换到本地去走那条路线。但是在 ios7 中为运行 JavaScript 增加了 JavaScriptCore 接口,而且最新的 ios 开发者程序许可证条款中,他们修改了代码下载异常的规则包括 JavaScriptCore。 这从安全的角度上讲是有道理的。Apple 能审计和更新他们的运行时间,然而如果他们允许地第三方运行时下载代码,他们就没有有效地监控安全问题。因为 JavaScript 是 Apple 的唯一脚本选项并且他们不允许下载代码到本地,JavaScript 在恢复特权地位–作为那些想快速迭代的唯一选择。JavaScript 的可用性引发了一些努力,像 React 和 NativeScript 和 Apple 对代码下载政策的放宽把握已经完美地对外公布。 开放会赢吗? Web 提倡者有时候表明基于 web 的开放标准最终会胜利,因为开放一直都会赢。然而,Linux 就是一个明显的例子,这是一个开放的迅速发展的却没有委员会统一标准的生态系统。React,Facebook 似乎成了开源项目中快速构建的一个开发者生态系统。已经有了一个围绕 React.js 快速成长的委员会,这明显给他们带来了领先的机会。但是在 Telerik 的 NativeScript 团队正与 Google 共同工作,因此Angualr2.0 需要被无缝集成。Google 打算支持非 DOM 的环境,不管 web 标准是否朝向它。微软和谷歌可能需要一段很长的时间来支持他们在未来浏览器将实施的的标准。但是他们在共同朝着 TypeScript 努力,使构建一个负复杂一点的带有 JavaScript (证明是编译器在发现类型不匹配上比人聪明)应用程序更加简单。 Apple 已经为他们的新 Swift 语言建立了许多相当令人印象深刻的工具,尤其是互动场景(interactive playground)。然而,Facebook 在 React Native 上依据即刻反馈和高频即时编码可能已经有了更好的编码体验。苹果将会继续迭代他们的工具,开发者社区现在已经增加了这些新的 JavaScript 环境工具。Android 可能技术上是开源的,但是它在社区建设上却不是开放的。谷歌正在独自增强 Android 的平台和工具。大概真的是开放的开发者社区才会胜利,而真正基于社区的开源能够比基于开源标准的开放迭代更快。为此,“本地的 UX 使用 JavaScript 去建立”环境并取得成功,这样的平台肯定不会失败。应用还是会依据平台的外观和感觉,并采用新的特定平台的 API 去建立。 这个时候,看起来好像非常开放的JavaScript开发者社区将要赢得胜利了,因为他们制作的APP具有本地平台的的外观,感觉和性能,除了需要有Web开发的经验。封闭平台以往一直取胜是因为那时候的APP需要为他们封闭的生态系统定制。目前,开放的web标准还是输的。如果手机浏览器厂商能同意新标准,让他们制作的应用能具有本地应用那样的体验,那么他们就一定会取得胜利。 你是用什么来制作的? 你认为JavaScript将会掌控移动开发的未来吗?还是Java,Objective-C和Swift继续它们的领导地位? 那物联网,它的后端会通过Node.js吗?通过调查,让我们知道你用什么来建立你的APP吧。 了解更多JAVA行业趋势请访问中软国际教育集团技术知识库!

更多>
JAVA入门学习:Java中的静态数组与动态数组有什么不同

JAVA入门学习:Java中的静态数组与动态数组有什么不同

2017-02-14

我们学习的数组都是静态数组,其实在很多的时候,静态数组根本不能满足我们编程的实际需要,比方说我需要在程序运行过程中动态的向数组中添加数据,这时我们的静态数组大小是固定的,显然就不能添加数据,要动态添加数据必须要用到动态数组,动态数组中的各个元素类型也是一致的,不过这种类型已经是用一个非常大的类型来揽括—Object类型。 Object类是JAVA.LANG包中的顶层超类。所有的类型都可以与Object类型兼容,所以我们可以将任何Object类型添加至属于Object类型的数组中,能添加Object类型的的集合有ArrayList、Vector及LinkedList,它们对数据的存放形式仿造于数组,属于集合类,下面是他们的特点: 特点一、容量扩充性 从内部实现机制来讲ArrayList和Vector都是使用Objec的数组形式来存储的。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度它们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大。所以如果你要在集合中保存大量的数据那么使用Vector有一些优势,因为你可以通过设置集合的初始化大小来避免不必要的资源开销。 特点二、同步性 ArrayList,LinkedList是不同步的,而Vestor是的。所以如果要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低。 特点三、数据操作效率 ArrayList和Vector中,从指定的位置(用index)检索一个对象,或在集合的末尾插入、删除一个对象的时间是一样的,可表示为O(1)。但是,如果在集合的其他位置增加或移除元素那么花费的时间会呈线形增长:O(n-i),其中n代表集合中元素的个数,i代表元素增加或移除元素的索引位置。为什么会这样呢?以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行(n-i)个对象的位移操作。 LinkedList中,在插入、删除集合中任何位置的元素所花费的时间都是一样的—O(1),但它在索引一个元素的时候比较慢,为O(i),其中i是索引的位置。 所以,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList。 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据时只需要记录本项的前后项即可,所以插入数度较快。 中软国际教育集团技术知识库有更多JAVA入门学习知识,欢迎访问!

更多>
中软卓越IT培训:IT技术人员的职业发展方向

中软卓越IT培训:IT技术人员的职业发展方向

2017-02-14

        对于大多数IT工作者来说,自身所学知识的将来的发展方向都比较迷茫。除了自身技术之外,许多IT技术人员也都面临这很多其他的问题。而这些隐藏而又存在的问题却往往是造成我们IT技术人员的职业发展的瓶颈。而作为正在学习或者培训IT知识的在校大学生,更加是影响我们的选择和发展。         作为一个有这相同培训经历的我来说,我觉得如果要往    IT行业发展,首先我们要明确自己的学习方向和未来职业的房展方向。         首先,在准备去参加IT培训的时候,第一,我们要明确自己的学习的方向并且明确自己想要达到什么目标,达到目标对我有什么好处,比方我要通过注会的考试,通过了考试就可以涨工资,第二,就是我要怎么样达到我的目标,看书,做习题,听别人的讲课,   第三,要给自己计划好任务并努力的完成,教你一个好方法,在你的桌子的正前方贴上自己的目标并为之奋斗。第四,当我们真正学友所成的时候我们要看到自己工作的前景,不单纯追求工资的多少。         然后在我们准备去工作的时候,我们首先要明确自己未来的发展方向。比如说:我们现在去一个IT公司,一般来说未来的职业发展方向会分为3个方向(管理方向、技术方向、业务方向)。         对于管理方向来说,一般都是从两个方向上转变过来的,第一,工程师—项目组长—项目经理—项目经理—中层管理者—高层管理者—自己创业(企业家)。而作为一个管理者来说,首先必须要有一定的把控能力,关键时候的决断能力等等。         对于技术方向来说,我们基本上都要经历理工程师—普通工程师—中级工程师—高级工程师—技术专家—架构师的过程。在这样一个过程中,对于我们来说会有很多要求,比如:对于技术的专研精神、非常强的学习能力、解决问题的能力、自身技术能力。综上所述,要真正做到资深工程师、架构师,我们必须有良好的沟通能力、解决问题的能力,简化问题的能力。         对于业务方向来说,一般是从初级业务人员开始的,比如:业务分析员。而对于我们IT行业的人来说,一般是从工作中途转化过来的,即在技术工作的过程中慢慢的熟悉了业务,慢慢的对业务工作产生热情,而后逐步向业务相关的工作转化。与技术方向相比,业务方向要求比较高的情商和交流沟通能力,我们必须要在同客户沟通的过程中,了解到客户的需求和让客户了解到自己分析的结果,还要让自己的团队达到预期的目标,从层次上理解做的是一个什么东西,未来会怎么发展。         职业程是一个不断总结的过程,我们在职业发展的时候必须做好自身职业发展的规划,在职业过程中要不断总结,不断调整我们的职业发展的目标。向我们选择的职业发展方向更进一步。这样我们才会获得成长,也会有一个比较清晰的职业发展。 了解更多IT程序员的职业发展规划欢迎访问中软国际教育集团技术知识库!

更多>
JAVA入门学习:JAVA几个常见错误简析

JAVA入门学习:JAVA几个常见错误简析

2017-02-14

 1、空指针错误 java.lang.NullPointerException 使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long)一般不会引起空指针异常。由此可见,空指针异常主要跟与对象的操作相关。 下面先列出了可能发生空指针异常的几种情况及相应解决方案: 不管对象是否为空就直接开始使用。 (JSP)代码段1: out.println(request.getParameter("username")); 描述: 代码段1的功能十分简单,就是输出用户输入的表域"username"的值。 说明: 看上去,上面的语句找不出什么语法错误,而且在大多数情况下也遇不到什么问题。但是,如果某个用户在输入数据时并没有提供表单域"username"的值,或通过某种途径绕过表单直接输入时,此时request.getParameter("username")的值为空(不是空字符串,是空对象null。),out对象的println方法是无法直接对空对象操作,因此代码段1所在的JSP页面将会抛出"java.lang.NullPointerException"异常。 即使对象可能为空时,也调用java.lang.Object或Object对象本身的一些方法如toString(), equals(Object obj)等操作。 (JSP)代码段2: String userName = request.getParameter("username");  If (userName.equals("root"))  {....} 描述: 代码段2的功能是检测用户提供的用户名,如果是用户名称为"root"的用户时,就执行一些特别的操作。 说明: 在代码段2中,如果有用户没有提供表单域"username"的值时,字符串对象userName为null值,不能够将一个null的对象与另一个对象直接比较,同样,代码段2所在的JSP页面就会抛出(java.lang.NullPointerException)空指针错误。 (JSP)代码段3: String userName = session.getAttribute("session.username").toString(); 描述: 代码段3的功能是将session中session.username的值取出,并将该值赋给字符串对象 userName。 说明: 在一般情况下,如果在用户已经进行某个会话,则不会出现什么问题;但是,如果此时应用服务器重新启动,而用户还没有重新登录,(也可能是用户关闭浏览器,但是仍打开原来的页面。)那么,此时该session的值就会失效,同时导致session中的session.username的值为空。对一个为null的对象的直接执行toString()操作,就会导致系统抛出(java.lang.NullPointerException)空指针异常。 解决方案: 为了确保进行操作或引用的对象非空,假若我们要对某对象进行操作或引用,我们首先去检查该对象是否已经实例化且不为空;并且在系统中加入针对对象为空时情况的处理。 如:采用String对象保存用户提交的结果;在如果涉及对象的操作时,先检测其是否为空后,检查到对象为空后,可再选择进行以下任一种处理方式: 处理方式 1) 检查到对象为空时,设置对象值为空字符串或一个默认值; 处理方式 2) 检测到对象为空时,根本不执行某操作,直接跳转到其他处理中。 处理方式 3) 检查到对象为空时,提示用户操作有错误。 将代码段2按以上方式进行改写,得到: 方式1: String userName = request.getParameter("username"); // 该变量值为空时,转化为默认空字符串 If (userName == null) userName = ""; If (userName.equals("root")) {..........} 方式2: String userName = request.getParameter("username"); // 该变量值为空时,转化为默认空字符串,不执行有关操作。 If (usreName != null) { If (userName.equals("root")) {..........} } 方式3: String userName = request.getParameter("username"); // 该变量值为空时,转化为默认空字符串,不执行有关操作。 If (usreName == null) { // 提示用户输入信息为空 } 实际中,上面提供到三种处理方式也同样适用于其他异常的处理: 异常处理方式 1) 检查到异常出现,设置对象值为空字符串或一个默认值。 异常处理方式 2) 检测到异常出现,根本不执行某操作,直接跳转到其他处理中。 异常处理方式 3) 检查到异常出现,提示用户操作有错误。  2、格式化数字错误 java.lang.NumberFormatException分析 (JSP)代码段3: String s_memberid = request.getParameter("memberid"); int i_memberid = Integer.parseInt(s_memberid); 描述: 以上代码段的作用是将用户提交的表单域memberid的值转化为整数。 说明: 如果用户输入正确的数字如:1082,不会有什么问题。然而,如果用户输入T1082时,由于T1082不是合法的数字格式,JAVA无法将其转化为合适的数字,导致抛出java.lang.NumberFormatException数字格式化异常。 解决方案: 在任何用到字符串转化为数字时,捕捉异常,对异常情况进行处理按异常处理方式1:检查到异常发生,即赋给某变量一个默认值;(可能在某些情况下导致一其他程序错误[比方说其他模块中并未处理您所赋予的默认值情况,可能导致一些异常或错误出现。])按异常处理方式3:检查到异常发生,提示用户使用正确的数字格式输入。(实现稍微麻烦一点,但是将错误阻挡在您的模块前[即您提供给其他模块的值均是安全的]。)按这种方法对程序进行改写,在编程时稍微麻烦一点,但这的确会您的模块更加健壮。将代码段3按以上要求进行改写,得到: String s_memberid = request.getParameter("memberid"); int i_memberid; try { i_memberid = Integer.parseInt(s_memberid); ... } catch(NumberFormatException nfe) { //方式1:(简单,直接给该编号为一个默认值0;) i_memberid = 0; //方式2:(很简陋的做法,建议使用更友好的提示方式) out.println(""); }  3、字符串越界错误 java.lang.StringIndexOutOfBoundsException等字符串类相关错误 代码段4: String s_all_power = "1010011"; String s_access_power = s_all_power.substring(3,4); 描述: 以上代码段功能的功能是获取字符串s_all_power中的第4个字符。 说明: 一般情况下,程序不会有问题,如果由于某种原因,s_all_power长度变短,程序就会抛出字符串错误。 解决方案: 对字符串进行截取(substring, charAt)、转换为字节数组(getBytes),字符数组转换为字符串(valueOf)操作时,先对操作字符串对象的存在性(是否为空)及长度进行检查后,再进行操作。 改写得到: String s_all_power = "1010011"; if (s_all_power.length>4)  String s_access_power = s_all_power.substring(3,4);  4、类定义未找到错误 java.lang.NoClassDefFoundError 原因: 由于该程序调用到的JAVA类文件没有正确上传; 解决方案: 将JAVA类文件重新上传。 JAVA类文件已经上传,但应用服务器并未检测到,建议将JSP页面重新更新。 解决方案: 将JSP页面更新并上传;或将应用程序服务器进行重新启动。  5、JAVA错误 java.lang.Error 原因: 1.对系统所访问外部资源,未执行关闭操作,导致外部资源大量浪费,最终可能导致系统无法正常运行; 2.对系统所访问的外部资源关闭次数太多,外部系统无法正常处理; 3.系统访问的外部资源出现异常情况。 解决方案: 1.访问外部资源前,首先检查该资源(如数据库)是否可正常连接或操作。 2.访问外部资源时,如果进行了连接,一定进行关闭操作,并仅进行一次关闭操作。 3.尽量在同一操作中共享外部资源,以减少该操作对资源的消费,提高程序的执行效率。 学习更多JAVA入门知识欢迎访问中软国际教育集团技术知识库!

更多>
软件开发培训:软件开发工程师你不得不知的七大秘密

软件开发培训:软件开发工程师你不得不知的七大秘密

2017-02-14

优势一:就业竞争小 据前程无忧数据显示,目前国内120万软件从业人员中,真正能担当软件测试职位的不超过5万人,人才缺口达到20万并有逐年扩大的趋势。 人才的极度匮乏令许多IT企业不得不延缓甚至停止项目,为企业发展带来消极影响,但对人才就业却有积极意义。人才供不应求让软件测试人员的就业竞争压力明显小于同类其它职业,有利于从业者的身心健康。另外,由于软件测试在我国起步较晚,独立设置测试部门、对测试人员有强烈需求的多为独具慧眼的大中型IT企业。软件测试人才不需要在小企业积累经验就能获得知名企业的入门通行证,工作起点高于同类其它职业。 优势二:高薪没商量 “我是今年7月毕业的,6月份就找到了工作,现在全年收入在五六万左右。”就职于某公司的金星对自己当前的待遇很满意。像他这样刚入行的软件测试人员,起步月薪就在3000-5000元左右,远高于同龄人1000-2000元的薪资水平,另外还可享受带薪年假、内部培训、住房公积金等福利待遇,工作2-3年月薪大约在8000-13000元之间,甚至超出很多相同服务年限的软件开发人员的薪资水平。  优势三:就业质量高 “与其他IT职位相比,软件测试人员最大的优势就是发展方向太多了。”在海辉软件公司担任软件测试工程师的曹永辉说,“像我比较喜欢钻研技术,对编程也有一定兴趣,朝技术方向努力就错不了。” 由于工作的特殊性,测试人员不但需要对软件的质量进行检测,而且对于软件项目的立项、管理、售前、售后的等领域都要涉及。在这过程中,测试人员不仅提升了专业的软件测试技能,还能接触到各行各业,项目管理、沟通协调、市场需求分析等能力都能得到很好的锻炼,从而为自己的多元化发展奠定了基础。“我的一个员工,进公司是先从测试员做起的,后来升到了项目主管,现在负责我们公司新产品的市场推广工作。是不是很有戏剧性啊。”康普塞特信息技术有限公司总经理王亚智略有感慨地说,“软件测试工作确实能给年轻人提供更广阔的发展平台。”因此,经过软件测试岗位洗礼的人才往往是行业中的多面手,比其它IT人才具有更强的可塑性,在技术、管理、市场甚至其它非IT领域都能得到良好的发展。          优势四:无性别歧视 如果把软件开发领域比作男子单打,那么软件测试领域就是混合双打。由于工作的特殊,软件测试人员往往更偏好认真、耐心、细致、敏感、等个性元素,而这在一定程度上与女性的个性气质相吻合。“在我们部门,软件测试岗位的男女比例基本差不多。”北京康赛普特信息技术有限公司总经理王亚智这样告诉记者。据了解,目前很多IT企业中软件测试人员的比例更趋向平衡,甚至出现女性员工成主流的情况。对此,北京青鸟信息技术教育发展有限公司CEO杨明认为,无性别歧视是职业设置合理的一种表现,有利于软件测试工作的稳定发展,对人才的大量培养也起到积极的促进作用。   优势五:职业人才紧缺   软件开发工程师基本处于“双高”地位,但目前很少有高校设置软件测试专业,导致需求量大却没人才的尴尬局面。     必杀技:参加以实战项目为主要教学方法的中软国际ETC研发的专门针对大学生的准员工“5R”实训课程体系,有效地缩短同企业具体用人需求之间的差距。     缺口一:软件开发工程师     现状:软件开发工程师基本处于“双高”地位(地位高、待遇高),但目前很少有高校设置软件测试专业,导致需求量大却没人才的尴尬局面。     必杀技:从软件测试基础着手,学会软件测试的基本方法和技术、实用测试工具,并通过项目实训使自己获得真实的测试经验。     缺口二:JAVA工程师     现状:企业很难招聘到合格的JAVA人员。最根本的原因就是许多计算机专业的毕业生在读期间没有掌握实用的技能与经验,距离企业的实际用人需求有较大的差距。     必杀技:参加以实战项目为主要教学方法的JAVA职业技能培训,有效地缩短同企业具体用人需求之间的差距。     缺口三:.NET工程师     现状:.NET工程师需求一直处于上升趋势。     必杀技:要从职业素质、实操技能和项目经验三个方面着手,学习.NET体系的新技术新技能。 优势六——职业满意度     近日,智联招聘推出《职场人对于职业的满意度》调查显示,在近千参与调查的职场人士中,对于目前工作持满意态度的人并不多。数据显示,仅有3%的职场人对自己职业的满意度打了85分的“优秀”分数,可见大部分职场人士对于目前从事的职业并不满意。     然而在众多行业中,一直被认为工作压力大的IT行业,仅有21.9%的调查者表示不满意。其中,尤以软件开发行业从业者,在职业满意度上惊人的一致。他们有超过9成以上选择了70-80分档的良好选项,尤其在薪酬水平、发展空间与工作压力三大方面满意度较高,远远超过IT行业其他职位。    对于软件开发从业者如此高的职业满意度, 四川新华电脑学校培训负责人介绍,“一个初级软件开发人才的起步薪水在3000元左右,如果有一到两年工作经验的话,达到5000-8000元也是非常轻松的”。可见一个软件开发工程师在薪酬待遇上不仅起步高,加薪幅度也相对较大。我国资深软件开发专家肖睿分析指出,这全是由软件开发职业特殊性所造成的。据了解,目前软件开发专业人才供需出现严重的不平衡,而企业为了招到更多专业的开发人才,不得不在各方面提高软件开发从业者的待遇,致使软件开发从业者在就业、薪酬、晋升等方面处于一个有利的地位,遥遥领先于其他技术岗位。 优势七——职业优势对比     来自中华英才网的调查数据显示,软件开发工程师、高级软件工程师、项目经理几大职位成为今年IT企业的重点招聘对象,其中企业对软件开发工程师的招聘数量增加最快。越来越多的国内IT企业正逐渐加大对软件开发人员的重视。    “软件开发工程师是一个越老越吃香的职业。”着名软件测试专家、清华大学郑人杰教授说。他告诉记者,软件开发工作是对客户需求的进行开发,其中包含技术及管理等方面的工作,工作相对稳定,对年龄没有限制。而且随着项目经验的不断增长和对行业背景的深入了解,会越老越吃香。    软测工程师越老越吃香     对于郑人杰教授对测试员的职业寿命的看好,资深开发专家、知名培训品牌重庆中软国际卓越培训开发项目负责人也是非常赞同。他认为软件开发员的一生如同一名医生的一生,随着职业阅历和临床经验的丰富累积,到一定的年龄他们通过“望闻问切”就能知道毛病出在什么地方。因此,有人说软件开发员和医生是最不需要用“青春”来保证和延续自己职业寿命的职业。     20多年来,郑人杰教授一直从事软件开发领域的工作,如今70多岁的郑教授还在为软件企业“坐诊”。一些出版社为了出版他的《计算机软件开发技术》几乎成了他家的常客。作为我国软件开发行业的“泰斗”,他见证了中国软件开发业20年来的发展历程。    “软件开发工程师地位‘翻天覆地’的变化,源自信息产业的发展以及软件企业自身、用户成熟度的不断加深。”郑人杰教授表示。一方面,计算机使用越来越普及,越来越多的领域使用了计算机,特别是一些重要领域如国防、银行、金融、通、航天等,他们对软件质量要求很高。同时一些重大事故的发生,也引发了人们对软件质量的关注。如2002年欧洲载重10吨的阿丽亚娜5型火箭发射失败,最后证实是软件质量问题;还有国内的一些银行金融系统,因软件质量问题而出现的一些问题。毋庸置疑,在经历了长期的不为人知和可有可无后,软件测试工程师目前已变得非常抢手。

更多>
软件开发培训:五大渠道可获招聘信息 专家支招如何写简历

软件开发培训:五大渠道可获招聘信息 专家支招如何写简历

2017-02-14

对于应届毕业生而言,获得招聘信息的渠道主要有以下几种: 北大、清华、人大等名校都有自己的就业信息发布平台。许多名企启动校园招聘的第一步,就是与这些学校的就业中心联系,发布企业的简单介绍以及宣讲会日期。在宣讲现场,这些企业会对自己的企业文化、用人计划、招聘流程等做详细介绍,并现场收取简历。一般来说,参与企业的宣讲非常有帮助。一方面可以体现自己对招聘单位的重视,也可以借招聘会的机会了解这个企业需要什么样的人,并且可以比对自己的专业和特长是否适合这个企业。所谓“知己知彼百战百胜”,许多offer牛人都是从名企宣讲会起步的。 1.学校就业信息网 许多高校的BBS上都有专门的Job版。版块负责人会组织整理近期企业招聘信息的链接,方便求职者查询;求职者也可以在上面分享找工作过程中的笔经、面经、心得体会和经验教训。也有一些小规模招聘的企业会在名校的BBS上发布帖子进行宣讲,或者说明自己的招聘职位和要求,进行招聘。 2.学校BBS 企业招聘截止日期等招聘信息,并同时提供职业测评、应聘指导等求职就业资讯及辅导。 而中华英才网、智联招聘网、前程无忧等网站则是专业的人力资源供应商,除校园招聘外,社会招聘、各种专业人才招聘也都会在上面发布信息。 3.专业招聘网站 如厦门人才网网、中华英才网、智联招聘、前程无忧等网站。 4.招聘会 目前,应届生求职主要依靠招聘会获取信息的已经越来越少。由于招聘会全年都有,面向社会招聘的居多,因此许多应届大学毕业生对于招聘会并不看好, “感觉不大靠谱”。即使北大、清华、人大等名校举办的专场招聘会,也是“收效甚微”。据了解,由于网络获取招聘信息的便捷,人才市场的招聘会,应届毕业生已经鲜有参加。招聘会上不乏有打着招聘旗号进行宣传甚至欺诈的小企业存在,因此,应届毕业生参与时需十分谨慎。 5.校园内张贴的海报和横幅 有些高校不仅没有专门的就业信息发布平台,BBS也不十分活跃,并没有完整的就业信息供应系统。这些高校的应届毕业生除了上网查询相关招聘网站,去其他高校网站获取招聘信息外,还可以通过学校布告栏、教学楼、宿舍等处的海报和横幅获取信息。 专家支招书写简历应像写议论文 简历是用人单位对求职者的第一印象,简历好不好与求职成功有着直接关系。据统计:每年约96%的应届毕业生在简历方面花费了大量时间和精力,但效果并不理想。主要原因是应届毕业生书写的简历没有迎合企业招聘人员的阅读习惯。如何才能让简历脱颖而出,获得更多面试机会?大学生就业指导专家居阳建议,大致可通过以下顺序书写简历: 个人信息→求职目标→个人优势或特长→工作或实践经验→教育背景→兴趣爱好。 在填写完个人信息后,简历的核心部分就像是议论文的思路一样,采用三段论的模式: 1.求职目标相当于是议论文的中心思想,主要描述你希望申请的职位类别。 注意:职位类别的跨度不要太大,不要试图书写适用于所有职位的简历,否则就不易突出个人申请某类职位的优势。 2.个人优势或特长相当于是分论点,简要描述和突出你具备哪些优势或资格去申请以上的职位。如:具备哪些个人素质,掌握或熟悉哪些技能,具备哪些经验,了解哪些相关知识等等。 注意:慎用精通等词,否则面试难度会明显提高。 3.工作或实践经验相当于论据,用事实证明你以上所描述的个人优势,如:工作经验、实践经验、实习经历等等。 注意:要稍微展开描写,如:时间、实践或项目的名称、任务的描述、工作职责等等。任务描述和工作职责一定要与个人优势有必然的联系。

更多>
软件开发培训:接口隔离原则丨买电视机的例子

软件开发培训:接口隔离原则丨买电视机的例子

2017-02-14

现在我们讲下“接口隔离原则”,看看下面这张海报 接口隔离原则海报 同学:这是什么意思?   小卓:它的意思是这样的:“用户不应该被迫依赖他们不使用的接口。” 同学:解释一下~ 小卓:好,解释如下: 假设你想去买一台电视机并且有两种类型可以选择,其中一种有很多开关和按钮,但是多数对你来说用不到,另一种只有几个开关和按钮,并且看来你很熟悉怎么用。如果这两种电视机提供同样的功能,你会选择哪一种? 同学:当然是第二种了! 小卓:嗯,但是为什么呢? 同学:对因为我不需要看起来很麻烦而且对我也不必要的开关和按钮 小卓:正确。同样的,假如你有一些类,你通过接口暴露了类的功能,这样外部就能够知道类中可用的功能,客户端也可以根据接口来设计。当然那,如果接口太大,或是暴露的方法太多,从外部看也会很混乱。接口包含的方法太多也会降低可复用性, 这种包含无用方法的“胖接口”无疑会增加类的耦合。 这还会引起其他的问题。如果一个类视图实现接口,它需要实现接口中所有的方法,哪怕一点都用不到。所以,这样会增加系统复杂度,降低系统可维护性和稳定性。 接口隔离原则确保接口实现自己的职责,且清晰明确,易于理解,具有可复用性。 同学:我明白了,你的意思是接口只应该包括必要的方法而不是所有的。 小卓:是的,让我们看一个例子。 下面的接口是一个“胖接口”,这违反接口隔离原则: 违反接口隔离原则的接口示例 注意,IBird接口定义 Fly()的行为有许多鸟类的行为。现在,如果一只鸟类(比方说,鸵鸟)实现了这个接口,它将会实现不必要的 Fly()的行为(鸵鸟不会飞)。 同学:是啊!因此,这个接口必须被分割? 小卓:是的,“胖接口”应该分隔成两个不同的接口,IBird 和IFlyingBird,而IFlyingBird继承于IBird。 接口隔离原则的例子中正确版本的接口 如果有一只不会飞的鸟(比如,驼鸟),只要用IBird接口即可,如果有一保会飞的鸟(比如,翠鸟),只要用IFlyingBird接口即可。 同学:所以,回过头来看有很多按钮开关的电视的例子,制造商应该有电视机的图纸,开关和按钮也在这个方案里。若他们想造一台新款电视机时想要复用这张图纸,他们必须添加更多的按钮和开关,否则没法复用,对么? 小卓:对。 同学:若是他们真的想要复用这个方案,他们应该将电视机的图纸分为更小的部分,才能在以后制造新款电视机的时候复用这些设计方案。   小卓:你理解了。 出处:开源中国 译者:K6F, 凡程子, 叫我蝴蝶吧, 王薇, 人头马没面, 铂金小龟, 风子, nikeff1108, sigai 链接:http://www.oschina.net/translate/how-i-explained-ood-to-my-wife?lang=chs&page=4# 了解更多软件开发常见问题欢迎登陆中软国际教育技术知识库!

更多>

推荐阅读

更多

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2