SUN公司JAVA工程师十年经验总结(也适合笔试面试用)
- 格式:doc
- 大小:58.50 KB
- 文档页数:10
java工程师工作总结一、工作回顾在过去的一年中,我作为一名Java工程师,在一家知名互联网公司工作。
我的主要职责是开发后端应用程序,并与前端工程师协作,确保前后端的交互顺畅。
在此期间,我参与了多个项目的开发,积累了丰富的经验。
二、技能提升1. 熟练掌握Java编程语言在过去的一年中,我深入学习了Java编程语言,掌握了Java SE、Java EE 相关技术。
通过阅读官方文档、参加培训课程、与团队成员交流,我对Java语言有了更深入的了解。
2. 提升数据库操作能力在开发过程中,我熟练掌握了MySQL、Oracle等数据库的操作,能够根据需求选择合适的数据库,并优化数据库设计。
同时,我也掌握了SQL语句的编写和优化,能够处理常见的数据库问题。
3. 掌握常用框架为了提高开发效率,我熟悉了Spring、Hibernate等常用框架,能够根据项目需求选择合适的框架进行开发。
同时,我也学习了框架的原理和机制,提高了自己的技术水平。
4. 提升性能优化能力在开发过程中,我注重性能优化,通过优化算法、减少IO操作、使用缓存等技术,提高了应用程序的性能。
同时,我也学习了常见的性能测试工具和手段,能够进行性能测试和调优。
5. 团队协作与沟通我与团队成员建立了良好的合作关系,能够与其他工程师协作完成项目。
同时,我也注重与上级和客户的沟通,能够及时解决问题,提高开发效率。
三、项目经验1. 大型电商系统:负责后端开发,采用Spring Boot+MyBatis框架。
该系统实现了商品展示、下单支付等功能,优化了数据库设计,提高了系统性能。
2. 直播平台:负责后端开发及部分前端的开发,采用Spring MVC+jQuery 框架。
该系统实现了直播房间管理、主播管理、观众互动等功能,优化了用户登录安全性及前后端数据传输效率。
3. 社交媒体系统:负责部分后端开发及部分数据存储工作,采用Redis+MongoDB+Spring框架。
Java高级工程师面试总结随着java技术在各行各业的广泛应用,企业对于java人才招聘的要求越来越高。
下面是关于Java高级工程师面试总结,希望大家认真阅读!之前也面试别人,现在轮到自己找工作,怎么说呢,每个面试官的看法不一样,面试的方式就不一样,比方我面试别人我喜欢问工程中他用到了那些,然后针对用到的技术去问一些问题,或者说对于某些场景的一些技术实现方案是我特别喜欢问的,比方当你的接口效劳数据被人截包了,你如何防止数据恶意提交? 相对来说,Java的底层和根底会问的少一点,当然问的少不是代表不问,而是说侧重点在于你的所做过的工程和你的设计思路如何。
当然,懂根底和底层更好,这样能让你知其然,更知其所以然,写出来的代码和程序更具有强健性和可维护性。
所以说,根底还是很重要的。
现在轮到自己出去面试,怎么说呢,其实还是挺紧张的,原以为自己不会因此紧张或者焦虑,实际上,还是有的,在没找到适宜的工作的时候,甚至晚上有点睡不着觉,总觉着有什么事压在心头,睡觉都不安心。
既然睡不着,那还是看看资料吧,我有个习惯,睡前看点问题,第二天早上就能想到答案,睡前记点资料,第二天早上就能记得特别深刻,不说废话了,直接进入正题吧。
1、背熟你的简历原因:面试的第一个问题,一般都是让你简单介绍下你自己,或者介绍一下你最近的工程,而一个面试者,如果连自己的简历都无法熟知,对里面提到的工程、技术都无法描述清楚的话,我想没有哪家公司会承受这样的,哪怕你是超级人才,你自我表述不行,估计也会为此头疼,所以,切记:一定要背好自己的简历,不要求你能全部记下,至少要熟记你最近所待过的两家公司,这两家公司里面你做过的工程,你负责的模块,工程里面用到的技术以及相对应的技术实现方案(这个尤为重要)。
2、深入了解并熟记部分Java根底知识原因:大部分公司无论面试初级还是高级,无论是笔试还是面试,都会问到一系列根底题,这些根底题大概涵括 jvm、字符串、集合、线程等等,如果说每一个让你死记硬背你肯定记不住,那么就是理解中记忆了,拿jvm来说,如果让你谈谈你对jvm的理解,那么你首先得知道JVM有哪些构造组成,每个构造用来做什么的,然后考虑一个Java对象从创立到回收,如何途径JVM这些构造的。
java面试之后的自我总结Java面试之后的自我总结近日,我参加了一场关于Java的面试,通过这次面试我不仅收获了宝贵的经验,也发现了自己在某些方面仍需提升。
在此,我将对这次面试进行总结,以期能够更好地准备下一次的面试。
在面试过程中,我发现自己在基础知识上还存在一些欠缺。
比如,在问到多态的概念时,我在表述上有些含糊不清,没有完全准确地解释清楚。
这提示我需要更加深入地学习和理解Java的基础知识,包括面向对象、继承、封装等概念。
只有对基础知识有扎实的掌握,才能在面试中更加自信地回答问题。
在面试过程中,我还发现自己对一些常用框架和工具的了解还不够深入。
比如,当被问到Spring框架时,我虽然能够简单地介绍其作用,但对其原理和常用的注解使用还不够熟悉。
这让我意识到我需要更加深入地学习和实践这些框架和工具,以便在面试中能够充分展示自己的能力和经验。
在面试过程中,我还发现自己在解决问题的能力上还有待提高。
有时,面试官会提出一些具体的问题场景,需要我根据自己的经验和知识进行分析和解答。
但在回答这些问题时,我有时会陷入思维定势,没有能够给出全面和深入的解答。
因此,我认识到需要培养自己的问题分析和解决能力,通过多做一些项目实践和积累经验,以便在面试中能够更好地回答这些问题。
在面试结束后,我还反思了自己的表现,发现在面试中有时候表达不够清晰和流畅。
这可能与我在平时的练习和准备上有所欠缺有关,因此我决定加强自己的口头表达能力,通过多和他人进行交流和讨论,以提高自己在面试中的表达能力。
通过这次面试,我深刻认识到自己的不足之处,并明确了自己在学习和准备方面的不足。
为了能够在下一次的面试中取得更好的成绩,我决心加强自己的学习和实践,提高自己的专业能力和解决问题的能力。
同时,我也会积极参加一些技术交流和分享活动,与更多的人进行交流和学习,以便能够更好地提升自己。
这次面试给了我很好的机会来审视自己,发现自己的不足之处,并明确了自己在学习和准备方面的不足。
Java的心得体会报告(优秀10篇)Java的心得体会报告篇1此次只实训了短短的三周。
虽说时间很短,但其中的每一天都使我收获很大、受益匪浅,它不但极大地加深了我对一些理论知识的理解,不仅使我在理论上对Java有了全新的认识,在实践能力上也得到了提高,真正地做到了学以致用,更学到了很多做人的道理,对我来说受益非浅。
除此以外,我知道了什么叫团队,怎样和团队分工合作;同时我还学会了如何更好地与别人沟通,如何更好地去陈述自己的观点,如何说服别人认同自己的观点。
这也是第一次让我亲身感受到理论与实际的相结合,让我大开眼界。
也是对以前所学知识的一个初审吧!这次实训对于我以后学习、找工作也是受益菲浅的,在短短的三周中相信这些宝贵的经验会成为我今后成功的重要的基石;这对于我的学业,乃至我以后人生的影响无疑是极其深远的。
这次实训虽然是我们的第一次,不过同学们表现不错,由此看来,我们在进入大学的这几个月里学到了不少的专业知识,只是自己感觉不到而已。
对于所学专业,我们不能过于自卑和担忧,否则会妨碍自己学习。
实训是学习Java的重要环节,有利于我们巩固专业知识、掌握工作技能,提高就业筹码。
我把本次为期三周的实训看作是“理论与实践相结合的桥梁”。
通过这周的实训和学习,我知道了此次实训的目的,也清楚目前自己的不足,那就是缺乏相应的知识与经验,对所学的专业知识不能够很好地运用于实践操作。
正所谓“百闻不如一见”,经过这次自身的切身实践,我才深切地理会到了“走出课堂,投身实践”的必要性。
平时,我们只能在课堂上与老师一起纸上谈兵,思维的认识基本上只是局限于课本的范围之内,也许就是这个原因就导致我们对专业知识认识的片面性,使得我们只知所以然,而不知其之所以然!限制了我们网络知识水平的提高。
但是课本上所学到的理论知识是为我们的实际操作指明了方向、提供相应的方法,真正的职业技巧是要我们从以后的实际工作中慢慢汲取的。
而针对实际操作中遇到的一些特殊的问题,我们不能拘泥于课本,不可纯粹地“以本为本”。
Java程序员面试题与经验工与总结一、面试到底在问些什么东西?首先你要知道,面试官的提问和你简历上写的内容是紧密联系的,所以你简历上写的技能一定要会。
一般面试包括下面几方面知识类型:Java基础、多线程、10与NIO、虚拟机、设计模式数据结构与算法(要有手写算法的能力)计算机网络(TCP三次握手和四次挥手)数据通信(RESTful、RPC、消息队列)操作系统(Linux的基本命令以及使用)主流框架(Spring底层原理与源码问的很多)数据存储(最常见的是MySQL、Redis )分布式其他问题:实际场景题生活方面的问题性格/其他方面的问题二、面试常问的知识点1 )集合相关问题(必问)HashMap x LinkedHashMap、ConcurrentHashMap. ArrayList、LinkedList 的底层实现HashMap 和Hashtable 的区另!)ArrayList. LinkedList、Vector 的区别HashMap 和ConcurrentHashMap 的区别HashMap 和LinkedHashMap 的区别HashMap是线程安全的吗ConcurrentHashMap是怎么实现线程安全的HashMap的长度为什么是2的鬲次方2)多线程并发相关问题(必问)创建线程的3种方式什么是线程安全Runnable接口和Callable接口的区别wait方法和sleep方法的区别synchronized. Lock、ReentrantLock x ReadWriteLock介绍下CAS(无锁技术),什么是悲观锁和乐观锁volatile关键字的作用和原理什么是ThreadLocal创建线程池的4种方式ThreadPoolExecutor的内部工作原理分布式环境下,怎么保证线程安全synchronized 和lock 区别以及volatile 和synchronized 的区别3 ) JVM相关问题介绍下垃圾收集机制(在什么时候,对什么,做了什么)。
java工作总结范文5篇java语言具有功能强大和简单易用两个特征,具有简单性、面向对象、分布式等特点,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
这次小编给大家整理了java工作总结,供大家阅读参考。
java工作总结1伴随着充实紧凑的工作生活,两个月的时间已经过去了。
这一段时间里有工作上的收获,知识的丰富,经验的增长,同时也暴露出很多问题和不足。
总结经验,吸取教训,本文将主要从几个方面来对工作进行总结:工作的主要内容;其中的失败和教训以及成功和经验;展望下一阶段的工作,确定自己的目标。
以此作为惩前毖后的记录。
来到一个新的工作环境,最能发现自身的不足,这几个月,抱着虚心学习的态度,学习公司的开发流程,熟悉公司的企业文化,了解公司产品框架,主要技术,主动和同事沟通、学习经验,希望能更快的融入公司、融入开发团队,能够全心的投入工作。
试用期期间完成的工作还十分有限,简单列了一些:掌握java开发语言和环境,由于在校学习时主要是以.net作为开发语言,所以在刚入职时通过一段时间学习并基本掌握了java开发技术。
熟悉公司开发流程,熟悉cbp产品框架。
了解了核三框架的总体结构和开发流程,并能在核三的基础上进行项目开发。
参与了社保电子支付项目的开发。
主要负责web端的模块开发,通过开发的过程,学习和掌握了fle_界面开发,hibernate和oracle数据库。
因为自己在经验上的不足,所以,在项目的开发过程中碰到开发进度慢的问题。
综合起来看原因在于:1、没有项目经验,没有经历过系统和完整的系统开发。
2、对于技术的学习和掌握还不够深入。
3、发现问题的能力不够,在自己以往的学习方式中,欠缺一种主动发现问题的能力。
今后,我会多注意在这些方面的学习和积累。
这两个月的工作生活是充实且富有乐趣的,结识了很多同事和朋友,公司的氛围是非常轻松愉快的。
感谢两个月来李鹏经理的关心,感谢部门同事的悉心指导,感谢公司各位同事的热心帮助,希望能在接下来的工作中能惩前毖后,总结经验,吸取教训,做到个人与公司共荣辱同进退,共同实现中地的辉煌。
10年工作经验java面试题
在面试中,可能会问到关于Java的各种问题,根据10年工作
经验,可能会涉及到更深入的问题。
以下是一些可能会被问到的
Java面试题:
1. 请介绍一下Java的特点和优点。
2. 什么是Java的多线程,如何实现多线程?
3. 请解释一下Java中的异常处理机制。
4. 什么是Java的反射(Reflection)?它有什么作用?
5. 请解释一下Java中的集合框架,以及它们的区别和用途。
6. 什么是Java的IO流?它们有哪些种类,各自的作用是什么?
7. 请解释一下Java中的继承、多态和封装的概念。
8. 什么是Java的JVM(Java虚拟机)?它的作用是什么?
9. 请介绍一下Java中常用的设计模式,以及它们的应用场景。
10. 请谈谈您在项目中遇到的Java性能优化经验。
以上问题涉及了Java的基础知识、高级特性以及实际应用经验,希望这些问题能够帮助您在面试中更好地展现您的技能和经验。
java程序员工作心得总结
作为一名Java程序员,我在工作中获得了很多宝贵的经验。
以下是我对过
去一段时间工作的心得总结:
1. 持续学习:Java及其相关技术不断发展,我需要不断学习新的技术和工具,以保持竞争力。
我参加了在线课程,阅读了大量技术文章和书籍,这使我在工作中能够更好地应对各种挑战。
2. 代码质量:我明白了代码质量的重要性。
编写清晰、易于理解的代码不仅有助于我未来的维护,也有助于团队的协作。
我学习了各种代码审查工具和技术,并试图在每一段代码中实现最高的质量标准。
3. 测试:我深深理解了测试在软件开发中的重要性。
我学习了单元测试和集成测试,并试图在每个项目中都实现全面的测试覆盖率。
这不仅提高了软件的质量,也帮助我在开发过程中更早地发现问题。
4. 团队合作:我明白了团队合作的重要性。
我学会了有效地与团队成员沟通,分享我的想法和知识,同时也从他们的反馈中学习和成长。
5. 解决问题:在工作中,我遇到了许多挑战和问题。
我学会了如何有效地解决问题,从错误日志中找出问题的根源,并找出解决方案。
6. 使用合适的工具和技术:我明白了使用合适的工具和技术的的重要性。
例如,使用版本控制系统(如Git)可以更好地跟踪代码的更改,使用敏捷开
发方法可以帮助团队更有效地协作。
总的来说,作为一名Java程序员,我在工作中获得了丰富的经验,并学到了很多新的知识和技能。
我期待在未来的工作中继续学习和成长。
java工程师工作总结Java 工程师工作总结作为一名 Java 工程师,在过去的一段时间里,我参与了多个项目的开发和维护工作。
在这个过程中,我积累了丰富的经验,也遇到了不少挑战。
在此,我想对这段时间的工作进行一个总结。
一、项目经历在过去的工作中,我参与了多个项目的开发,其中包括项目名称1、项目名称 2和项目名称 3等。
在项目名称 1中,我主要负责了后端服务的开发。
这个项目的需求是构建一个高并发、高可用的电商平台。
为了实现这个目标,我们采用了 Spring Boot 框架来搭建项目的基础架构,并使用 MyBatis 作为数据持久化框架。
在数据库方面,我们选择了 MySQL 来存储数据,并通过优化数据库表结构和索引来提高数据查询的性能。
同时,为了应对高并发的访问,我们引入了 Redis 作为缓存,并使用了消息队列来异步处理一些耗时的操作,如订单处理和邮件发送。
在项目名称 2中,我参与了一个企业内部管理系统的开发。
这个系统需要实现员工信息管理、考勤管理、请假管理等功能。
在这个项目中,我主要负责了部分模块的设计和开发工作。
我们使用了 Spring MVC 框架来构建项目,并结合 Hibernate 来进行数据的持久化操作。
在前端方面,我们采用了 jQuery 和 Bootstrap 来构建页面,为用户提供了一个简洁、美观的操作界面。
在项目名称 3中,我参与了一个移动应用的后端开发工作。
这个应用需要为移动端提供数据支持和服务接口。
我们使用了 Spring Cloud来构建微服务架构,并通过 Eureka 来实现服务的注册和发现。
在数据存储方面,我们采用了 MongoDB 来存储一些非结构化的数据,并结合MySQL 来存储结构化的数据。
二、技术应用与创新在工作中,我不断探索和应用新的技术,以提高项目的质量和效率。
1、对于框架的选择和应用,我深入研究了 Spring 家族的框架,如Spring Boot、Spring MVC、Spring Cloud 等。
程序员十年工作总结十年前,我毕业于一所知名的计算机科学学士学位,开始了我的职业生涯。
十年后,我从一个初级程序员成长为高级软件工程师,并且在这个过程中学到了许多有关程序员职业生涯的经验。
这篇文章是我对这十年的总结,也是我想分享给所有程序员的一些经验。
1. 不断学习2. 重视编码规范编码规范是指程序员应当遵循的一组编程标准。
它们包括命名约定、缩进风格、代码文档等。
遵循编码规范的好处包括代码风格的一致性、代码可读性、减少错误和提高代码维护性。
3. 不要过于依赖 IDE虽然IDE可以提高代码编写的效率,但过度依赖IDE可能会让你忘记一些基本的代码编写规则。
因此,建议程序员应该熟悉常见的文本编辑器,以及使用一些常用的代码编写工具。
4. 解决问题的能力程序员解决问题的能力是非常重要的。
在开发过程中,程序员必须面对各种各样的问题,而且这些问题通常都是非常棘手的。
因此,程序员需要有很强的问题解决能力,以便快速找到解决问题的有效方法。
5. 不要瞎写代码写代码前,程序员应该先思考并确认自己的代码逻辑是否正确,代码的执行顺序是否合理,以及是否存在致命的漏洞。
不要只是为了写代码而写代码,要有清晰的编码目标。
6. 代码重构随着项目的发展,代码的重构也会时不时出现。
代码重构是指采取一些技术手段来修改现有代码,以便加强代码的整体结构和可读性。
如果你遇到了在重构代码中出现的问题,那么可以尝试使用一些重构工具,比如IDE自带的重构功能或其他各种独立的代码重构工具。
7. 单元测试单元测试是指开发人员针对整个软件系统中的一个单独功能或单独模块开展的测试。
通过单元测试,你能够排除代码中的一些错误,有助于发现潜在的功能性问题并预防未来的bug。
8. 团队合作在一个团队中工作的经验是非常宝贵的。
在团队内部,你需要注意自己的工作风格和职业道德,以便保持团队的和谐。
在管理上,你需要尊重团队其他成员的意见,善于与他们合作,发掘团队内成员最大的潜力。
1.关于动态加载机制??学习Java比C++更容易理解OOP的思想,毕竟C++还混合了不少面向过程的成分。
很多人都能背出来Java语言的特点,所谓的动态加载机制等等。
当然概念往往是先记住而后消化的,可有多少人真正去体会过动态加载的机制,试图去寻找过其中的细节呢? 提供大家一个方法:在命令行窗口运行Java程序的时候,加上这个很有用的参数:java -verbose *.class这样会清晰的打印出被加载的类文件,大部分是jdk自身运行需要的,最后几行会明显的看到自己用到的那几个类文件被加载进来的顺序。
即使你声明了一个类对象,不实例化也不会加载,说明只有真正用到那个类的实例即对象的时候,才会执行加载。
这样是不是大家稍微能明白一点动态加载了呢?^_^2.关于寻找class文件原理??建议大家在入门的时候在命令行窗口编译和运行,不要借助JCreator或者Eclipse等IDE去帮助做那些事情。
尝试自己这样做:javac -classpath yourpath *.javajava -classpath yourpath *.class也许很多人都能看懂,设置classpath的目的就是告诉编译器去哪里寻找你的class文件. 不过至少笔者今日才弄懂JVM去查询类的原理,编译器加载类要依靠classloader,而classloader有3个级别,从高到低分别是BootClassLoader(名字可能不准确) , ExtClassLoader, AppClassLoader.这3个加载器分别对应着编译器去寻找类文件的优先级别和不同的路径:BootClassLoader 对应jre/classes路径,是编译器最优先寻找class的地方ExtClassLoader对应jre/lib/ext路径,是编译器次优先寻找class的地方AppClassLoader对应当前路径,所以也是编译器默认找class的地方其实大家可以自己写个程序简单的测试,对任何class,例如A,调用new A().getClass().getClassLoader().toString() 打印出来就可以看到,把class文件放在不同的路径下再次执行,就会看到区别。
特别注意的是如果打印出来是null就表示到了最高级BootClassLoader, 因为它是C++编写的,不存在Java对应的类加载器的名字。
寻找的顺序是一种向上迂回的思想,即如果本级别找不到,就只能去本级别之上的找,不会向下寻找。
不过似乎从Jdk1.4到Jdk1.6这一特点又有改变,没有找到详细资料。
所以就不举例子了。
告诉大家设计这种体系的是Sun公司曾经的技术核心宫力先生,一个纯种华人哦!^_^这样希望大家不至于迷惑为什么总报错找不到类文件,不管是自己写的还是导入的第三方的jar文件(J2ee中经常需要导入的)。
3.关于jdk和jre??大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做。
因为这样更能帮助大家弄清楚它们的区别:Jre 是java runtime environment, 是java程序的运行环境。
既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦,还有所有java类库的class文件,都在lib目录下打包成了jar。
大家可以自己验证。
至于在windows上的虚拟机是哪个文件呢?学过MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。
Jdk 是java development kit,是java的开发工具包,里面包含了各种类库和工具。
当然也包括了另外一个Jre. 那么为什么要包括另外一个Jre呢?而且jdk/jre/bin同时有client和server 两个文件夹下都包含一个jvm.dll。
说明是有两个虚拟机的。
这一点不知道大家是否注意到了呢?相信大家都知道jdk的bin下有各种java程序需要用到的命令,与jre的bin目录最明显的区别就是jdk下才有javac,这一点很好理解,因为jre只是一个运行环境而已。
与开发无关,正因为如此,具备开发功能的jdk自己的jre下才会同时有client性质的jvm和server性质的jvm,而仅仅作为运行环境的jre下只需要client性质的jvm.dll就够了。
记得在环境变量path中设置jdk/bin路径麽?这应该是大家学习Java的第一步吧,老师会告诉大家不设置的话javac和java是用不了的。
确实jdk/bin目录下包含了所有的命令。
可是有没有人想过我们用的java命令并不是jdk/bin目录下的而是jre/bin目录下的呢?不信可以做一个实验,大家可以把jdk/bin目录下的java.exe剪切到别的地方再运行java程序,发现了什么?一切OK!那么有人会问了?我明明没有设置jre/bin目录到环境变量中啊?试想一下如果java为了提供给大多数人使用,他们是不需要jdk做开发的,只需要jre能让java程序跑起来就可以了,那么每个客户还需要手动去设置环境变量多麻烦啊?所以安装jre 的时候安装程序自动帮你把jre的java.exe添加到了系统变量中,验证的方法很简单,大家看到了系统环境变量的path最前面有“%SystemRoot%\system32;%SystemRo ot%;”这样的配置,那么再去Windows/system32下面去看看吧,发现了什么?有一个java.exe。
如果强行能够把jdk/bin挪到system32变量前面,当然也可以迫使使用jdk/jre里面的java,不过除非有必要,我不建议大家这么做。
使用单独的jre跑java程序也算是客户环境下的一种测试。
这下大家应该更清楚jdk和jre内部的一些联系和区别了吧?1.关于集合框架类相信学过Java的各位对这个名词并不陌生,对java.util.*这个package肯定也不陌生。
不知道大家查询API的时候怎么去审视或者分析其中的一个package,每个包最重要的两个部分就是interfaces和classes,接口代表了它能做什么,实现类则代表了它如何去做。
关注实现类之前,我们应该先理解清楚它的来源接口,不管在j2se还是j2ee中,都应该是这样。
那么我们先看这三个接口:List、Set、Map。
也许有些人不太熟悉这三个名字,但相信大部分人都熟悉ArrayList,LinkedList,TreeSet,HashSet,HashMap,Hashtable等实现类的名字。
它们的区别也是满容易理解的,List放可以重复的对象集合,Set放不可重复的对象组合,而Map则放<Key,Value > 这样的名值对,Key不可重复,Value可以。
这里有几个容易混淆的问题:到底Vector和ArrayList,Hashtable和HashMap有什么区别?很多面试官喜欢问这个问题,其实更专业一点应该这样问:新集合框架和旧集合框架有哪些区别?新集合框架大家可以在这些包中找since jdk1.2的,之前的如vector和Hashtable都是旧的集合框架包括的类。
那么区别是?a. 新集合框架的命名更加科学合理。
例如List下的ArrayList和LinkedListb. 新集合框架下全部都是非线程安全的。
建议去jdk里面包含的源代码里面自己去亲自看看vector和ArrayList的区别吧。
当然如果是jdk5.0之后的会比较难看一点,因为又加入了泛型的语法,类似c++的template语法。
那么大家是否想过为什么要从旧集合框架默认全部加锁防止多线程访问更新到新集合框架全部取消锁,默认方式支持多线程?(当然需要的时候可以使用collections的静态方法加锁达到线程安全)笔者的观点是任何技术的发展都未必是遵循它们的初衷的,很多重大改变是受到客观环境的影响的。
大家知道Java的初衷是为什么而开发的麽?是为嵌入式程序开发的。
记得上一篇讲到classLoader机制麽?那正是为了节约嵌入式开发环境下内存而设计的。
而走到今天,Java成了人们心中为互联网诞生的语言。
互联网意味着什么?多线程是必然的趋势。
客观环境在变,Java技术也随着飞速发展,导致越来越脱离它的初衷。
据说Sun公司其实主打的是J2se,结果又是由于客观环境影响,J2se几乎遗忘,留在大家谈论焦点的一直是j2ee。
技术的细节这里就不多说了,只有用了才能真正理解。
解释这些正是为了帮助大家理解正在学的和将要学的任何技术。
之后讲j2ee的时候还会再讨论。
多扯句题外话:几十年前的IT巨人是IBM,Mainframe市场无人可比。
微软如何打败IBM?正是由于硬件飞速发展,对个人PC的需求这个客观环境,让微软通过OS称为了第二个巨人。
下一个打败微软的呢?Google。
如何做到的?如果微软并不和IBM争大型机,Google 借着互联网飞速发展这个客观环境作为决定性因素,避开跟微软争OS,而是走搜索引擎这条路,称为第3个巨人。
那么第4个巨人是谁呢?很多专家预言将在亚洲或者中国出现,Whatever,客观环境变化趋势才是决定大方向的关键。
当然笔者也希望会出现在中国,^_^~~2.关于Java设计模式身边的很多在看GOF的23种设计模式,似乎学习它无论在学校还是在职场,都成了一种流行风气。
我不想列举解释这23种Design Pattern,我写这些的初衷一直都是谈自己的经历和看法,希望能帮助大家理解。
首先我觉得设计模式只是对一类问题的一种通用解决办法,只要是面向对象的编程预言都可以用得上这23种。
理解它们最好的方法就是亲自去写每一种,哪怕是一个简单的应用就足够了。
如果代码实现也记不住的话,记忆它们对应的UML图会是一个比较好的办法,当然前提是必须了解UML。
同时最好能利用Java自身的类库帮助记忆,例如比较常用的观察者模式,在java.util.*有现成的Observer接口和Observable这个实现类,看看源代码相信就足够理解观察者模式了。
再比如装饰器模式,大家只要写几个关于java.io.*的程序就可以完全理解什么是装饰器模式了。
有很多人觉得刚入门的时候不该接触设计模式,比如图灵设计丛书系列很出名的那本《Java设计模式》,作者: Steven John Metsker,大部分例子老实说令现在的我也很迷惑。
但我仍然不同意入门跟学习设计模式有任何冲突,只是我们需要知道每种模式的概念的和典型的应用,这样我们在第一次编写FileOutputStream、BufferedReader、PrintWriter的时候就能感觉到原来设计模式离我们如此之近,而且并不是多么神秘的东西。