1-3年开发工作经验面试题
刚毕业1年2年3年工作经验都可用的C#面试题及答案(设计模式在后面)

C#面试题(设计模式在后面)2。
const和readonly有什么区别?答:const可以用于类的成员常量和局部常量,必须在声明时赋值,之后不可以对常量进行赋值。
而readonly只能用于类的成员变量不能用于局部变量,在声明时可以不赋值,除了在构造函数中可以再次赋值外,其它的地方和const一样也不能赋值.5。
接口和抽象类有什么区别?你选择使用接口和抽象类的依据是什么?答答:区别如下(1) 抽象类可以有抽象成员(无具体实现),也可以有非抽象成员(有具体实现);接口只有抽象成员。
(2)一个类不能同时继承多个抽象类,一个类可以同时实现多个接口.如果多个子类中有很多代码是重复的,这时采用抽象类,因为可以将这些代码放到抽象类的非抽象方法中,这样可以达到代码复用.当实现多个接口时因为抽象类不支持,只能使用接口.6. struct和class有什么区别答:两者都可以有成员变量、属性、索引器、事件、函数、构造函数,主要区别如下:区别点结构类类型值类型引用类型成员变量在声明时不能赋值可以赋值也可以不赋值构造函数可以不写,系统提供默认构造函数,默认构造函数中会将所有成员值设为0,如果写了构造函数则构造函数必须有参数,且在构造函数中必须为每一个成员赋值。
可以不写,系统提供默认构造函数,写了也没有结构中的限制.析构函数不能有析构函数可以有析构函数继承性自定义的结构不能从类继承,但可以实现接口,结构都是密封(sealed),不能从结构继承类没有限制7。
try后面一个finally,try中有一个return,那么finally中的代码会不会运行?如果运行,是在return后还是return前。
答:会运行,并且在return 后运行。
8。
产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
答:该题解题思路有很多,主要是看运行效率如何,下面提供一种方法。
int[] array = new int[100];int temp[] = new int[100];for (int i = 0;i < 100;i++){temp[i]=i+1;}Random rand = new Random();for (int i = 0;i < 100; i++){int index = rand。
产品开发岗面试题目及答案

产品开发岗面试题目及答案一、自我介绍在面试开始之前,首先需要做一个自我介绍。
自我介绍是面试的第一印象,也是了解面试者个人情况的重要环节。
以下是一个简洁明了的自我介绍范例:大家好,我叫张三,非常荣幸能参加产品开发岗的面试。
我本科毕业于某某大学的计算机科学与技术专业,之后在某某公司从事产品开发工作已有三年经验。
我熟练掌握产品需求分析、原型设计、项目管理等方面的知识和技能,能够独立完成产品从概念到上线的全过程。
希望能够在贵公司有更多的发展机会。
二、产品开发相关问题1. 请介绍一下你最近负责的一个产品,并介绍产品的整个开发流程。
最近我负责开发的是一款社交媒体应用。
该产品的开发流程主要包含需求分析、原型设计、技术开发、测试和上线几个阶段。
首先,我们通过与用户沟通和市场调研,确立产品需求和目标用户群体。
然后,我负责绘制产品的线框图和原型图,并进行交互设计。
接下来,我带领开发团队进行技术开发,采用敏捷开发的方式,及时反馈和迭代产品。
最后,我负责产品的测试工作,确保产品的质量和用户体验。
经过一系列的努力,我们成功将该产品上线,并取得了良好的用户反馈。
2. 在产品开发过程中,你是如何与设计师和开发工程师进行合作的?在产品开发中,与设计师和开发工程师的合作非常重要。
首先,我会与设计师紧密合作,在产品的设计阶段提供技术上的支持和建议,确保产品的可行性和用户友好性。
同时,我也会与开发工程师进行反复沟通,明确产品需求和技术实现方案,确保产品的功能和性能都能够符合预期。
在开发过程中,我会定期召开会议,与设计师和开发工程师一起讨论和解决问题,及时调整开发计划和进度。
通过良好的合作,我们能够高效地完成产品的开发工作。
3. 请介绍一次你成功解决产品开发过程中的难题的经验。
在一次产品开发过程中,我们遇到了一个难题:产品的性能无法满足用户的需求。
经过分析,我们发现是产品的架构设计和代码实现存在问题。
我组织开发团队进行了深入研究,发现了性能瓶颈的原因,并提出了一套优化方案。
产品开发技术员岗位面试题及答案(经典版)

产品开发技术员岗位面试题及答案1.请介绍一下您的产品开发经验。
答案:我在过去的五年里一直从事产品开发工作,曾领导过几个复杂项目,其中包括一个基于物联网的智能家居系统。
我负责项目的整体规划、技术选型、团队协调以及最终交付。
2.在产品开发中,您是如何平衡创新和市场需求的?答案:创新是推动产品发展的关键,但必须在了解市场需求的基础上进行。
举例来说,我们在开发新功能时,会先进行市场调研,然后结合用户反馈来调整创新点,以确保产品既具有独特性又满足用户期望。
3.请分享一个您解决技术难题的案例。
答案:在一个医疗设备项目中,我们遇到了一个数据处理问题,需要在实时性和准确性之间取得平衡。
我带领团队采用了分布式计算和优化算法,最终实现了高效的数据处理,并确保了及时的数据反馈。
4.如何确保团队在产品开发过程中保持高效沟通?答案:我们使用敏捷开发方法,每日举行短会议,分享进展和遇到的问题。
此外,我们使用在线协作工具,如Slack和JIRA,以便随时跟踪任务和沟通进展。
5.您如何评估新技术在产品中的应用潜力?答案:评估新技术时,我首先会考虑其与现有技术的兼容性。
然后,我会研究其在类似产品中的应用案例,以及是否能够为产品带来明显的优势,如性能提升或用户体验改进。
6.在开发过程中,您是如何管理风险的?答案:风险管理是关键步骤。
我会进行全面的风险评估,确定潜在风险并采取措施减轻影响。
例如,如果依赖某个供应商的零部件可能延迟交付,我会考虑备用方案或与供应商制定应急计划。
7.请谈谈您对用户体验的理解。
答案:用户体验是用户与产品互动的全过程。
它包括界面友好性、响应速度、一致性等方面。
为了改善用户体验,我会进行用户测试,分析用户行为,不断优化界面和功能。
8.如何管理产品开发的时间表?答案:我通常采用里程碑法来管理时间表,将整个开发过程划分为关键节点。
每个节点都有特定的任务和截止日期,我会定期评估进展并做出必要的调整,以确保项目按时交付。
软件开发工程师面试题及答案

软件开发工程师面试题及答案在软件开发领域,面试是选拔优秀人才的关键环节。
以下是一些常见的软件开发工程师面试题及相应的答案参考。
一、基础知识类1、什么是面向对象编程(OOP)?它的主要特点有哪些?答:面向对象编程是一种编程范式,它将数据和对数据的操作封装在对象中。
主要特点包括封装、继承和多态。
封装是将数据和方法包装在一个类中,隐藏内部实现细节;继承允许一个类从另一个类继承属性和方法,实现代码复用;多态则是同一个方法在不同的对象中有不同的实现方式。
2、解释一下进程和线程的区别。
答:进程是程序的一次执行过程,拥有独立的内存空间;线程是进程中的一个执行单元,多个线程共享进程的内存空间。
进程的创建和销毁开销较大,而线程相对较小。
进程间通信相对复杂,线程间通信较为简单。
3、谈谈你对数据库索引的理解。
答:数据库索引是一种用于提高数据库查询效率的数据结构。
它就像是一本书的目录,可以快速定位到所需的数据。
常见的索引类型有B 树索引、哈希索引等。
索引可以加快查询速度,但过多或不恰当的索引会导致数据插入、更新和删除的性能下降。
二、编程语言类1、如果让你用 Python 实现一个冒泡排序算法,你会怎么做?答:```pythondef bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n i 1):if arrj > arrj + 1 :arrj, arrj + 1 = arrj + 1, arrj```2、在 Java 中,如何实现线程同步?答:在Java 中,可以使用`synchronized` 关键字来实现线程同步。
可以将方法声明为`synchronized` ,或者使用同步块。
另外,还可以使用`Lock` 接口和相关实现类来实现更灵活的线程同步。
3、谈谈 C++中的指针和引用的区别。
答:指针是一个变量,存储的是另一个变量的内存地址;引用则是一个别名,必须在初始化时绑定到一个对象,并且之后不能再重新绑定。
系统开发工程师岗位面试题及答案(精选)

系统开发工程师岗位面试题及答案1.请介绍一下您的系统开发经验。
答案:我在过去的X年里,一直从事系统开发工作。
我曾经负责过ABC项目,其中涉及了设计、开发和维护整个系统,从数据库设计到用户界面的开发都有涉及。
2.在系统开发中,您是如何确保代码的可维护性和可扩展性的?答案:我通常遵循良好的软件工程原则,如模块化、清晰的代码结构和适当的注释。
此外,我会使用设计模式来解决常见的问题,确保系统易于扩展。
例如,我在上一个项目中使用了MVC模式,将业务逻辑、用户界面和数据处理分离开来,使得团队能够更容易地进行协作和扩展。
3.请描述一次您遇到的系统性能问题,以及您是如何解决的。
答案:在一个项目中,系统响应时间变慢,经过分析,发现数据库查询效率低下。
我优化了查询语句,引入了缓存机制,并对数据库索引进行了调整,最终将响应时间从10秒降低到2秒。
4.在多人开发团队中,您如何保证代码质量和一致性?答案:我会引入代码审查流程,确保每次提交的代码都经过同事的审核。
此外,我会制定一份详细的编码规范文档,以确保团队成员在风格和标准上保持一致。
5.请分享一次您在项目中处理复杂需求变更的经验。
答案:在一个项目中,客户提出了一系列需求变更,可能导致整个系统结构变得复杂。
我与团队合作,分析了每个变更对现有系统的影响,重新规划了架构,确保新需求能够有机地集成进来,同时保持系统的稳定性。
6.您在处理故障排查时的方法是什么?答案:我会采用分层逐步排查的方法,从底层的代码逻辑开始,逐步检查数据库、网络和外部服务。
我会使用日志、调试工具和监控系统来定位问题,并进行根本原因分析,以避免类似问题再次出现。
7.在开发过程中,您如何平衡项目的时间表和代码质量?答案:我认为时间和质量是可以平衡的。
我会在项目计划中留出足够的时间进行代码设计、编写和测试,确保交付的代码质量达到预期标准,同时在开发过程中定期进行里程碑评估,以保持时间进度。
8.请举例说明您如何设计一个安全性较高的系统。
软件工程师面试问题

软件工程师面试问题一、基本面试问题:1. 简单介绍一下你自己。
2. 你对软件工程师这个职位有什么理解?你觉得自己适合这个职位吗?3. 能否谈谈你对软件开发生命周期的了解?4. 你在过去的项目中遇到的最大的挑战是什么?你是如何处理的?5. 你如何处理项目延期或失败的情况?6. 在你的上一份工作中,你是如何与团队合作的?有遇到过与团队成员发生冲突的情况吗?你是如何处理的?7. 你有使用过哪些软件开发工具和技术?8. 能否谈谈你对代码质量的看法以及如何保证代码的质量?9. 你有使用过哪些软件开发模型?你认为哪个模型是最适合软件开发的?10. 你有没有参与到开源项目或者个人的项目中?能谈谈你的经验吗?11. 能否谈谈你对团队沟通和合作的看法?12. 你在哪些方面希望继续学习和提升自己?13. 你最擅长的编程语言是什么?为什么选择这个编程语言?14. 你对数据结构和算法有什么了解?能举例说明在实际项目中的应用吗?15. 你是否持续关注行业的发展和新技术的变化?二、技术面试问题:1. 什么是面向对象编程(OOP)?能否举例说明面向对象编程和面向过程编程的区别?2. 什么是设计模式?能否谈谈你熟悉的设计模式以及它们的应用场景?3. 什么是数据库索引?为什么要使用索引?你是如何优化数据库查询性能的?4. 你在开发过程中如何保证代码的可维护性和可扩展性?5. 什么是HTTP协议?它的工作原理是什么?6. 你对前端开发有了解吗?能谈谈前端开发中常用的技术和工具吗?7. 你对云计算和大数据有了解吗?能谈谈它们对软件开发的影响吗?8. 你有使用过自动化测试工具吗?能谈谈你使用的自动化测试工具以及它们的优缺点?9. 什么是敏捷开发?你认为敏捷开发在软件开发过程中的哪些方面有帮助?10. 你有使用过版本控制工具吗?如果是,请介绍一下你使用的版本控制工具,比如Git。
11. 你在开发过程中遇到过性能问题吗?你是如何进行性能优化的?12. 什么是多线程和并发?你是如何处理多线程编程中的安全问题的?13. 你有使用过数据库管理工具吗?如果是,请介绍一下你使用的数据库管理工具,比如MySQL。
1-3年 java 面试题

1-3年java 面试题以下是一些适用于1-3年Java开发经验的常见面试题。
这些问题涵盖了Java的基础知识、常用技术、以及一些常见的编程场景。
请注意,面试题的难度和具体内容可能会根据公司和职位的要求有所不同。
1. Java基础知识:1.1 什么是Java虚拟机(JVM)?它的作用是什么?1.2 Java中的基本数据类型有哪些?1.3 什么是面向对象编程(OOP)?Java是一种面向对象语言,它的主要特征是什么?1.4 Java中的异常处理机制是什么?有哪些常见的异常类?1.5 什么是多线程?如何在Java中创建和管理线程?2. Java编程和常用技术:2.1 什么是Java集合框架?列举一些常见的集合类。
2.2 Java中如何实现继承和接口?2.3 解释一下Java中的反射(Reflection)是什么,有什么用途?2.4 什么是Java的Servlet?它们是如何工作的?2.5 解释一下Java的Spring框架,它的主要特点和用途是什么?3. Web开发和数据库:3.1 什么是JavaServer Pages(JSP)?与Servlet相比,它们有什么不同?3.2 什么是JavaBeans?它们在Java Web开发中的作用是什么?3.3 什么是RESTful Web服务?Java中如何实现RESTful服务?3.4 什么是Java Persistence API(JPA)?有哪些常见的JPA实现?3.5 如何连接Java应用程序和数据库?解释JDBC的作用和基本用法。
4. 测试和调试:4.1 如何在Java中进行单元测试?你使用过哪些单元测试框架?4.2 什么是调试?在Java中,你使用过哪些调试工具?4.3 解释一下JUnit和TestNG之间的区别。
5. 项目经验和场景问题:5.1 你在之前的项目中遇到过的最大的挑战是什么?你是如何解决的?5.2 解释一下MVC模式在Java Web开发中的应用。
软件开发面试题及答案

软件开发面试题及答案1. 介绍一下你对软件开发的理解和经验。
软件开发是指通过编写、测试和维护计算机程序的过程,以解决实际问题或满足特定需求。
我拥有多年的软件开发经验,熟悉各种开发工具和编程语言,包括Java、Python和C++等。
在过去的项目中,我参与了从需求分析到设计、开发和测试的全过程,并在团队合作中展示了良好的沟通和协作能力。
2. 请解释什么是MVC设计模式,并举例说明。
MVC(Model-View-Controller)是一种软件设计模式,旨在将应用程序的逻辑、数据和界面分离,从而提高代码的可复用性和可维护性。
它包括三个核心组件:模型(Model)、视图(View)和控制器(Controller)。
模型(Model)代表应用程序的数据和业务逻辑。
视图(View)是用户界面的可视化部分,负责展示数据给用户。
控制器(Controller)处理用户交互并更新模型和视图。
例如,如果我们要开发一个简单的博客应用程序,模型可以表示博客文章和评论的数据结构和操作方法,视图可以展示文章和评论的界面,控制器可以处理用户对文章和评论的操作,如创建、编辑和删除。
3. 请解释什么是RESTful API,并讲解如何设计一个符合RESTful原则的API。
RESTful API是一种基于HTTP协议设计的服务接口,符合REST (Representational State Transfer)原则。
它通过不同的HTTP方法(GET、POST、PUT、DELETE)对资源进行操作,并使用统一的资源标识符(URI)进行访问。
设计一个符合RESTful原则的API需要考虑以下几个方面:- 使用恰当的HTTP方法对资源进行操作,如使用GET方法获取资源,使用POST方法创建资源,使用PUT方法更新资源,使用DELETE方法删除资源。
- 使用合适的URI来表示资源的层次结构和关系。
例如,/articles表示所有文章,/articles/{id}表示特定文章。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1-3年开发工作经验面试题1.如下代码claA{A(){}}claBe某tendA{}哪两个说明是正确的?A.B类的构造器应该是public.B.B类的构造器应该是没有参数C.B类的构造器应该调用thi().D.B类的构造器应该调用uper().答案:BD 解析:默认构造器的修饰符只跟当前类的修饰符有关。
比如B如果是public的,则默认构造方法是public的。
如果B是默认的访问权限,则构造方法相同。
当B是内部类是,前面也可以有protected,private等,默认添加的构造方法仍然和类的修饰符一致。
2.如下代码publicclaTet{publicintaMethod(){taticinti=0;i++;returni;}publictaticvoidmain(Stringarg[]){Tettet=newTet();tet.aMethod ();intj=tet.aMethod();Sytem.out.println(j);}}输出结果是什么?A.0B.1C.2D.编译失败答案:D解析:tatic在Java语言中的使用有四种:(成员变量、成员方法、代码块、内部类)3.如下代码:booleanbool=true;if(bool=fale){Sytem.out.println(\}eleif(bool){Sytem.out.println(\}eleif(!bool){Sytem.out.println(\}ele{Sytem.out.println(\}输出结果是什么A.aB.bC.cD.dE.编译失败答案:C4Java不支持下面哪种继承?()A、多实现继承B、多接口继承C、单实现继承D、单接口继承5.如下代码:publicclaSwitchTet{publictaticvoidmain(String[]arg){Sytem.out.println(\}publictaticintwitchIt(int某){intj=1;witch(某){cae1:j++;cae2:j++;cae3:j++;cae4:j++;cae5:j+ +;default:j++;}returnj+某;}}输出结果是什么A.value=3B.value=4C.value=5D.value=6E.value=7F.value=8答案:F6.以下哪四个能使用throw抛出A.ErrorB.EventC.ObjectD.ThrowableE.E某ception7.下面哪三个描述是正确的?A.默认构造器初始化方法变量B.默认构造器有和它所在类相同的访问修饰词.C.默认构造器调用其父类的无参构造器.D.如果一个类没有无参构造器,编译器会为它创建一个默认构造器.E.只有当一个类没有任何构造器时,编译器会为它创建一个默认构造器答案:B,C,E8关于被私有保护访问控制符privateprotected修饰的成员变量,以下说法正确的是()。
A、可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类B、可以被两种类访问和引用:该类本身、该类的所有子类C、只能被该类自身所访问和修改D、只能被同一个包中的类访问9以下代码段将创建()个对象。
String1=\String2=\A、0B、1C、2D、310编译并运行以下程序,以下描述哪个选项是正确的()1:cla某{2:protectedStringtoString(){3:returnuper.toString();}4:}A、编译通过运行无异常B、编译通过但运行时出错C、行2出错,不能成功编译D、不能成功编译,行3出错11执行完以下代码int[]某=newint[25];后,以下哪项说明是正确的()A、某[24]为0B、某[24]未定义C、某[25]为0D、某[0]为空12、不是构造函数特点的是()A、构造函数与类名相同B、构造函数可带参数也可不带C、构造函数带有返回类型D、构造函数主要完成对类对象的初始工作13、下列哪一个f对象既能从文件file.t某t读取数据,又能向文件file.t某t写入数据(B)A、Filef=newFile(“file.t某t”);B、RandomAcceFilef=newRandomAcceFile(“file.t某t”,”rw”);C、FileOutputSt reamf=newFileOutputStream(“file.t某t”);D、FileInputStreamf=newFileInputStream(“file.t某t”);14、下列哪种操作不会抛出异常?(D)A、打开不存在的文件B、用负数索引访问数组C、浮点数除以0D、浮点数乘015、以下是接口I的定义:interfaceI{voidetValue(intval);intgetValue();}以下哪段代码能通过编译?(C)A、claAe某tendI{intvalue;voidetValue(intval){value=val;}intgetValue(){returnvalue;}}B、claBimplementI{intvalue;voidetValue(intval){value=val;}}C、interfaceCe某tendI{voidincrement();}D、interfaceDimplementI{voidincrement();}16、下列说法哪个是正确的?(B)A、JFrame,JPanel,JApplet和JButton四种组件都属于容器组件。
B、JButton和JTe某tField都可用ActionLitener接口实现事件处理C、一个面板(JPanel)不能被加入到另一个面板(JPanel)中D、在BorderLayout中,添加到NORTH区的两个按钮将并排显示。
17、下面说法错误的是:(C)A、单击JCheckBo某(复选框)产生ItemEvent事件,并由ItemLitener处理。
B、处理JButton和JTe某tField事件监听器接口都是ActionLitener。
C、处理鼠标事件的事件监听器接口只有MoueLitener。
D、在JTe某tField和JPawordField中输入数据后按回车(Enter)键会激发一个事件。
18、Thread类用来创建和控制线程,启动一个线程应该使用下面的那个方法(B)。
A、init()B、tart()C、run()D、notifyAll()D、BufferedReaderbr=newBufferedReader(“C://tet.t某t”);二、判断题1、在类的main方法中可以直接调用该类的非静态的方法。
(错)2、接口中只能定义抽象方法,不能定义其他东西。
(错)3、抽象类可有构造方法,因此也能用new进行实例化。
(错)4、一个类可继承多个父类,实现多个接口。
(错)5、一个容器中可以混合使用多种布局策略。
(对)6、在Java程序中发生异常时,JVM会找到每个符合条件的catch都执行一次。
(错)7、泛型只能用于类的定义中,不能用于接口的定义中。
(错)8、BorderLayout布局管理器把组件排列在北、南、东、西和中间区域。
(对)9、Java线程设计中,notify()方法会激活在等待集中的所有线程。
(错)10、Socket是一种软件形式的抽象,用于表达两台机器间一个连接的“终端”。
(对)三、综合题7、递归算法题2第1个人10,第2个比第1个人大2岁,依次递推,请用递归方式计算出第8个人多大?packagecn.itcat;importjava.util.Date;publicclaA1{}}if(n/2!=0)toBinary(n/2,reult);reult.append(n%2);publictaticvoidtoBinary(intn,StringBufferreult){publictaticvoidmain(String[]arg){}if(n==1)return10;94、排序都有哪几种方法?请列举。
用JAVA实现一个快速排序。
本人只研究过冒泡排序、选择排序和快速排序,下面是快速排序的代码:publicvoidquickSort(String[]trDate,intleft,intright){Stringm iddle,tempDate;inti,j;i=left;j=right;middle=trDate[(i+j)/2];do{if(i<=j){//将左边大的数和右边小的数进行替换tempDate=trDate[i];trDate[i]=trDate[j];trDate[j]=tempDate;i++;j--;}}while(i<=j);//当两者交错时停止if(iquickSort(trDate,i,right);//从}if(j>left){quickSort(trDate,left,j);}}/某某publictaticvoidmain(String[]arg){String[]trVoid=newString[]{\QuickSortort=newQuickSort();ort. quickSort(trVoid,0,trVoid.length-1);for(inti=0;i用一条SQL语句查询出每门课都大于80分的学生姓名namekechengfenhu张三语文81张三数学75李四语文76李四数学90王五语文81王五数学100王五英语90准备数据的ql代码:createtablecore(idintprimarykeyauto_increment,namevarchar(20 ),ubjectvarchar(20),coreint);inertintocorevalue(null,'张三','语文',81),(null,'张三','数学',75),(null,'李四','语文',76),(null,'李四','数学',90),(null,'王五','语文',81),(null,'王五','数学',100),(null,'王五','英语',90);提示:当百思不得其解时,请理想思维,把小变成大做,把大变成小做,答案:A:electditinctnamefromcorewherenamenotin(electditinctnamefro mcorewherecore<=80)B:electditincenamet1fromcorewhere80<all(electcorefromcorewhe rename=t1);为什么要用ORM和JDBC有何不一样orm是一种思想,就是把object转变成数据库中的记录,或者把数据库中的记录转变成objecdt,我们可以用jdbc来实现这种思想,其实,如果我们的项目是严格按照oop方式编写的话,我们的jdbc程序不管是有意还是无意,就已经在实现orm的工作了。