首页 尚学堂Java笔记

尚学堂Java笔记

举报
开通vip

尚学堂Java笔记笔试和面试题目V1.0北京尚学堂科技JAVA基础笔试题目1.JDK和JRE的区别?JavaDevelopmentKit.包含了JRE、编译器等程序。JavaRuntimeEnvironment指的是java运行时环境。负责启动虚拟机,加载和运行class文件。2.JVM是什么?工作原理?JVM是sun公司定义的规范。javavitualmashine。3.GC是什么?是如何回收对象的?Gabbagecollection垃圾回收器。哪些对象需要回收?对象没有被引用。4.System.gc()的作用是?程序员能直接调用...

尚学堂Java笔记
笔试和面试题目V1.0北京尚学堂科技JAVA基础笔试题目1.JDK和JRE的区别?JavaDevelopmentKit.包含了JRE、编译器等程序。JavaRuntimeEnvironment指的是java运行时环境。负责启动虚拟机,加载和运行class文件。2.JVM是什么?工作原理?JVM是sun公司定义的规范。javavitualmashine。3.GC是什么?是如何回收对象的?Gabbagecollection垃圾回收器。哪些对象需要回收?对象没有被引用。4.System.gc()的作用是?程序员能直接调用垃圾回收器吗?GC不能被程序员调用。System.gc()可以 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 调用垃圾回收器。5.一个java源文件,可以定义多个class类吗?可以定义多个public类吗?可以。6.java中,包含几种数据类型?基本数据类型byte1个字节short2个字节int4个字节整形常量默认类型long8个字节float4个字节double8个字节浮点常量的默认类型char2个字节Unicode码boolean1位引用数据类型(4个)7.&和&&的区别?3&4和3&&4哪个写法是不对的?&,按位与&&逻辑与短路8.2x4=8.最快的算法怎么实现?移位运算。左移一位 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示乘以一个2.9.堆区和栈区的区别?栈区存放局部变量连续空间存储先进后出,后进先出堆存放new出来的对象不连续的空间方法区存放类的信息代码静态变量字符串常量10.包装类使用时,自动装箱和拆箱是怎么回事?IntegerI=3;//装箱。实际上是一种编译器魔术。编译器帮助我们修改了代码:IntegerI=newInteger(3);inta=newInteger(3);11.equals方法和==的区别?==判断对象是否相同。equals是Object类中的方法,他的默认实现也是比较引用地址。不过,很多类重写了这个方法,一般用来比较对象中某些的属性的值。12.说出你编程中,常见的异常。至少5个。自己去想。13.成员变量和静态变量的区别?在内存中如何存放?成员变量,实例变量:从属于对象。存放在堆。静态变量:从属于类。存放在方法区14.重载是怎么回事?重写是怎么回事?重载overload:一个方法名定义多个方法。参数列表不同(个数、顺序、类型不同),返回值不能构成重载。重写override覆盖。将父类的方法覆盖。15.java中继承如何实现?extends16.包含抽象方法的类一定是抽象类吗?是。17.java中,聊聊的多态?面向接口编程?多态的实现:父类引用指向子类对象。在实际开发中,我们项目中使用了spring。一般都采用面向接口编程。我们将变量类型全部定义成接口的类型。然后,运行时再通过spring注入具体的实现。18.封装的实现中,说明private、protected、default、public的区别?private私有。只有自己类中可以调用。protected受保护。子类中能用。子类不在同一个包中能不能调用???default:同一个包中可以用。public:公开的。任何地方都可以用。19.面向对象的三大特征有哪些?封装、继承、多态20.浮点数是有误差的。如果要实现精确的计算?BigDecimal21.char类型,能表示汉字吗?为什么?22.final修饰变量、方法、类,都有什么区别?变量:常量方法:不能被子类重写类:不能被继承23.final,finally,finalize方法的区别?final修饰变量、修饰方法、修饰类。。。finally在异常处理中使用。表示不管有没有异常都会执行这里。通常用来释放资源。finaliize,垃圾回收这个对象前执行的方法。24.String是不可变字符?从源代码 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 ,为什么?内部有一个char数组。这个数组使用了final修饰。意味着只能初始化一次。25.StringBuffer和StringBuilder的区别?StringBuffer可变字符序列,线程安全StringBuilder可变字符序列。线程不安全。一般用它。26.java中,类可以多继承吗?接口可以多继承吗?类不可以多继承。接口可以多继承。27.数组是对象吗?是。28.数组中元素默认初始化的规则是什么?跟成员变量的规则是一样的。引用类型为null。数值:0布尔:false29.数组的长度是固定的吗?是的。30.Collection、List和Set接口有什么联系?Collection是List和Set的父接口。31.list和set接口的区别是?List:有序、可重复。Set:无序、不可重复。32.Collection和Collections的区别?Collection接口。Collections是一个针对Collection提供的工具类。33.Vector、ArrayList的区别是?Vector线程安全。ArrayList线程不安全。34.HashMap和HashTable的区别是?HashTable线程安全,HashMap线程不安全。35.两个对象hashcode()方法返回值相同,那么调用equals方法一定为true吗?从规范上讲,要。36.AWT、swing是什么关系?swing有什么优势?37.GUI编程中,有哪些常用的布局管理器?Flow、Border、Card、Grid等38.如何实现序列化?实现Serielizable。他是一个空接口。39.要把一个字节流对象转化成字符流对象,需要用到什么类?InputStreamReader,OutputStreamWriter40.进程和线程的区别是?进程是一个独立运行的程序,拥有独立的内存空间、代码。一个进程中可以包含多个线程。多个线程共享同一块空间和代码。41.写出定义线程类的两种常见方式?继承Thread、实现Runnable接口42.说说,Runnable接口和Thread的区别?Thread也是实现了Runnalbe接口。43.synchronized如何使用?如果直接修饰方法,意味着线程要调用这个方法必须要有这个方法所在的对象的锁。如果修饰了方法块,上面可以声明需要拥有的对象锁。这样的话,线程只有拥有指定对象的锁才能运行这个代码块。不然,就等待。44.说说:wait(),notify(),sleep()方法作用?wait(),线程进入阻塞状态。释放持有的对象锁。sleep(),线程进入阻塞状态。但是,不是放持有的对象锁。notify(),唤醒等待池中的线程45.java中,反射机制的基本原理?Class类得作用是?反射机制是java动态性重要手段。当我们加载完毕一个类的时候,会同时创建一个Class类型的对象,Class类型的对象它包含了这个类的完整的数据结构。就像一个镜子一样,通过这个镜子我们可以得到对应类的所有信息。而且,Class类还包含了如何操作属性、构造器、方法的接口。这样的话,我们就可以通过反射机制动态的创建对象、动态的调用对象的方法、动态的操作属性。46.通过Class类,可以访问和设置一个类得私有方法、私有成员变量吗?如果能,怎么做?可以直接操作私有方法。可以操作私有成员变量。通过setAccessible(true)。47.通讯方式中,TCP和UDP的区别是?TCP:transfercontrolprotocol传输控制 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 。面向连接的、安全的。效率不高的。我们一般用的Socket就是TCP连接。我们访问网站也是TCP/IP协议,建立连接。UDP:UserDatagramProtocol用户数据包协议。无连接、不安全、效率高。48.内部类??java手写编程题目1.写出冒泡排序代码 publicclassTest{ publicstaticvoidmain(String[]args){ int[]values={3,1,6,2,9,0,7,4,5,8}; sort(values); System.out.println(Arrays.toString(values)); } publicstaticvoidsort(int[]values){ inttemp; for(inti=0;i<values.length;i++){ for(intj=0;j<values.length-1-i;j++){ if(values[j]>values[j+1]){ temp=values[j]; values[j]=values[j+1]; values[j+1]=temp; } } } }}2.写出二分法查找代码 staticintbinarySearch(int[]arr,intsearchWord){ Arrays.sort(arr);//先对传进来的数组进行排序 //二分法查找 intiIndex=0;//相当于指针的东西 intiStart=0; intiEnd=arr.length-1; intsearchCount=0; for(inti=0;i<arr.length/2;i++){ searchCount++; iIndex=(iStart+iEnd)/2; if(arr[iIndex]<searchWord){ iStart=iIndex; }elseif(arr[iIndex]>searchWord){ iEnd=iIndex; }else{ break; } } returnsearchCount; }3.写出一个双向链表类代码 packagepublicclassNode<E>{privateEelement;//结点数据privateNode<E>next;//上结点privateNode<E>previous;//下结点privatestaticintsize=0;//链表长//默认关结点nextprevious都是空,publicNode(){this.element=null;this.next=null;this.previous=null;}privateNode(Eelement,Node<E>next,Node<E>previous){this.element=element;this.next=next;this.previous=previous;}/***尾部添加元素e*@parame*/publicvoidaddAfter(Ee){//定义新结点,next-->头结点;previous-->头结点.previous(尾结点)Node<E>newNode=newNode<E>(e,this,this.previous==null?this:this.previous);//头结点next为空则让它指向newNodeif(this.next==null){this.next=newNode;}//头结点previous为空则让它指向newNodeif(this.previous==null){this.previous=newNode;}this.previous.next=newNode;this.previous=newNode;size++;}/***头部添加元素e*@parame*/publicvoidaddBefor(Ee){Node<E>newNode=newNode<E>(e,this.next==null?this:this.next,this);if(this.next==null){this.next=newNode;}if(this.previous==null){this.previous=newNode;}this.next.previous=newNode;this.next=newNode;size++;}/***在index处添加元素e*@parame*@paramindex*/publicvoidadd(Ee,intindex){//索引越界if(index>=size||index<0){thrownewIndexOutOfBoundsException("Node.get():"+index);}else{//index>size/2,反向遍历if(index>size>>1){Node<E>temp=this;for(inti=size;i>index;i--){temp=temp.previous;}Node<E>newNode=newNode<E>(e,temp,temp.previous);temp.previous.next=newNode;temp.previous=newNode;}else{Node<E>temp=this;for(inti=0;i<=index;i++){temp=temp.next;}Node<E>newNode=newNode<E>(e,temp,temp.previous);temp.previous.next=newNode;temp.previous=newNode;}size++;}}/***删除第index个元素*@paramindex*/publicvoidremove(intindex){//索引越界if(index>=size||index<0){thrownewIndexOutOfBoundsException("Node.get():"+index);}else{//index>size/2,反向遍历if(index>size>>1){Node<E>temp=this;for(inti=size;i>index;i--){temp=temp.previous;}temp.previous.next=temp.next;temp.next.previous=temp.previous;}else{Node<E>temp=this;for(inti=0;i<=index;i++){temp=temp.next;}temp.previous.next=temp.next;temp.next.previous=temp.previous;}size--;}}/***取得第index个元素*@paramindex*@return*/publicEget(intindex){//索引越界if(index>=size||index<0){thrownewIndexOutOfBoundsException("Node.get():"+index);}else{//index>size/2,反向遍历if(index>size>>1){Node<E>temp=this;for(inti=size;i>index;i--){temp=temp.previous;}returntemp.element;}else{Node<E>temp=this;for(inti=0;i<=index;i++){temp=temp.next;}returntemp.element;}}}publicintsize(){returnsize;}publicstaticvoidmain(Stringa[]){Nodenode=newNode();node.addAfter("1");node.addAfter("2");node.addAfter("3");node.addBefor("0");node.add("7",0);System.out.println(node.get(0));System.out.println(node.get(1));System.out.println(node.get(2));System.out.println(node.get(3));System.out.println(node.get(4));}}4.写出一个二叉树代码 classTreeNode{privateStringdata;privateTreeNodeleftNode;privateTreeNoderightNode;publicTreeNode(Stringdata,TreeNodeleftNode,TreeNoderightNode){this.data=data;this.leftNode=leftNode;this.rightNode=rightNode;}publicStringgetData(){returndata;}publicvoidsetData(Stringdata){this.data=data;}publicTreeNodegetLeftNode(){returnleftNode;}publicvoidsetLeftNode(TreeNodeleftNode){this.leftNode=leftNode;}publicTreeNodegetRightNode(){returnrightNode;}publicvoidsetRightNode(TreeNoderightNode){this.rightNode=rightNode;}}5.编写一个生产者和消费者的程序 publicclassTestProduce{ publicstaticvoidmain(String[]args){ SyncStacksStack=newSyncStack(); Shengchansc=newShengchan(sStack); Xiaofeixf=newXiaofei(sStack); sc.start(); xf.start(); }}classMantou{ intid; Mantou(intid){ this.id=id; }}classSyncStack{ intindex=0; Mantou[]ms=newMantou[10]; publicsynchronizedvoidpush(Mantoum){ while(index==ms.length){ try{ this.wait(); //wait后,线程会将持有的锁释放。sleep是即使睡着也持有互斥锁。 }catch(InterruptedExceptione){ e.printStackTrace(); } } this.notify();//唤醒在当前对象等待池中等待的一个线程(随意的)。notifyAll叫醒所有在当前对象等待池中等待的所有线程。 //如果不唤醒的话。以后这两个线程都会进入等待线程,没有人唤醒。 ms[index]=m; index++; } publicsynchronizedMantoupop(){ while(index==0){ try{ this.wait(); }catch(InterruptedExceptione){ e.printStackTrace(); } } this.notify(); index--; returnms[index]; }}classShengchanextendsThread{ SyncStackss=null; publicShengchan(SyncStackss){ //TODOAuto-generatedconstructorstub this.ss=ss; } @Override publicvoidrun(){ //TODOAuto-generatedmethodstub for(inti=0;i<20;i++){ 造馒头:"+i); Mantoum=newMantou(i); ss.push(m); } }}classXiaofeiextendsThread{ SyncStackss=null; publicXiaofei(SyncStackss){ //TODOAuto-generatedconstructorstub this.ss=ss; } @Override publicvoidrun(){ //TODOAuto-generatedmethodstub for(inti=0;i<20;i++){ Mantoum=ss.pop(); 吃馒头:"+i); } }}6.定义一个多线程类,并写出如何终止线程的执行,并启动他。 publicclassTestThreadCiycleimplementsRunnable{ Stringname; booleanlive=true; publicTestThreadCiycle(Stringname){ super(); this.name=name; } publicvoidrun(){ inti=0; while(live){ System.out.println(name+(i++)); } } publicvoidterminate(){ live=false; } publicstaticvoidmain(String[]args){ TestThreadCiyclettc=newTestThreadCiycle("线程A:"); Threadt1=newThread(ttc);//新生状态 t1.start();//就绪状态 for(inti=0;i<1000;i++){ System.out.println(i); } ttc.terminate(); System.out.println("ttcstop!"); }}7.写出一个文件复制的程序 voidcopyFile(Stringsrc,Stringdec){ FileInputStreamfis=null; FileOutputStreamfos=null; byte[]buffer=newbyte[1024];//为了提高效率,设置缓存数组 inttemp=0; try{ fis=newFileInputStream(src); fos=newFileOutputStream(dec); while((temp=fis.read(buffer))!=-1){ fos.write(buffer,0,temp); } }catch(FileNotFoundExceptione){ e.printStackTrace(); }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ fos.close(); }catch(IOExceptione){ e.printStackTrace(); } try{ fis.close(); }catch(IOExceptione){ e.printStackTrace(); } } }8.“abcdefg”这个字符串,如何将它反转过来?两种方式: publicStringreverse(Stringstr){ StringBuildersb=newStringBuilder(str); returnsb.reverse().toString();} publicStringreverse2(Stringstr){ char[]c=newchar[str.length()]; for(inti=0;i<str.length();i++){ c[i]=str.charAt(str.length()-1-i); } returnnewString(c); }XML问题1.xml解析的两种基本方式:DOM和SAX的区别是?DOM:documentobjectmodel。一次加载,随机操作文档。SAX:simpleapiforxml。按照流的方式加载。2.平时工作中,xml解析你是使用什么?JDOMDOM4J3.dtd、schema干嘛的?dtd:documenttypedefinition文档类型定义。定义xml文档的结构。schema的作用和dtd是一样的。只不过,它本身就是xml文档。更有优势。servlet和jsp问题1.说说b/s和c/s架构.c/s:像qq。b/s:实际上是特殊的c/s.客户端是标准的浏览器。2.http请求中,get和post的区别是?get:通过请求行传参。信息量小、不安全。post:通过请求实体传参。信息量大、安全。3.你如何理解servlet?如何定义servlet类?servlet运行于服务器端,为客户端提供相关的服务。servlet运行于servlet容器中。servlet调用不能直接调用,需要通过请求服务器,服务器调用servlet。servlet本质还是一个java类。servlet是给客户端提供运算服务。当有一个客户端连接到服务器上时,服务器会创建一个新的线程提供服务,这个线程调用相关的servlet。servlet是单例模式,相关线程共享一个servlet对象。extendsHttpServlet即可。重写service方法。4.servlet的生命周期是什么?加载初始化(调用init())执行(service())销毁(destroy())当有一个客户端连接到服务器上时,服务器会创建一个新的线程提供服务,这个线程调用相关的servlet。servlet是单例模式,相关线程共享一个servlet对象。5.请求转发forward和重定向sendredirect的区别?他们两个内部实现机制?a.请求转发。客户端发出一个请求A,服务器调用了ServletA,servletA直接调转到ServletB。然后,服务器直接将serlvetB的执行返回。客户端并不知道服务器内部跳转。所以,地址栏不发生改变。b.重定向。客户端发出一个请求A,服务器调用了命令:response.sendRedirect(“b”)。这个命令的本质是:写了一个响应头Location,这个Location中包含了重定向的url。客户端收到Location响应头后,会根据这个Location指定的url重新发送请求。也就是说,我们整个过程请求了两次。6.HttpservletRequest对象、HttpServietResponse对象的作用是什么?这两个对象都是服务器创建,创建好后传给了servlet。request对象包含了客户端的信息。response包含了servlet要写给客户端的信息。7.浏览器发送给服务器的是http请求,是谁将这些请求内容封装成HttpServletRequest对象?我们自己能创建HttpServletRequest对象吗?不能。8.过滤器的作用是什么?过滤一类请求。实现统一的行为控制。比如:中文过滤器、struts2过滤器。9.监听器的作用是什么?监听request、session、application对象的状态的变化。比如:统计一个登陆的人数。10.说说,session是如何保存请求状态的?以及session的跟踪机制?保存会话的状态有两种方式:session和cookie。session是服务器端保存信息。cookie是在客户端保存信息。本身,session的跟踪机制就要依赖于cookie。跟踪机制就是用来确定一个问题:哪个会话对应哪个session对象。在服务器端我们给每个session对象一个独一无二的ID。然后呢,把这个ID通过cookie写给了客户端。这个cookie没有设定有效期,只在客户端内存中存放。客户端只要浏览器不关闭,这个cookie就一直有效。客户端访问我们服务器时就会携带这个有效的cookie。服务器通过cookie中包含的session对象的id,从而找到对应的session对象。session的销毁两种方式:1.调用invalidate方法2.设置最大空闲时间。11.jsp和servlet的优缺点?serlvet优缺点:业务逻辑方便。但是,数据展现很麻烦。jsp优缺点:写业务逻辑麻烦。但是,数据展现方便。我们开发中,一般jsp做显示,servlet做逻辑。12.jsp也是java类吗?jsp也是servlet吗?jsp就是sevlet。servlet就是java类。13.jsp的内置对象有哪些?page,PageContext、request、response、session、application、exception、out、config14.作用域:pageContext、request、session、application的区别是什么?pageContext:仅本页面有效request:同一个请求session:同一个会话application:同一个项目15.jsp中,动态导入和静态导入的区别是?静态导入:jsp引擎生成java代码时,就整合到一起。就是:源码级的导入。动态导入:jsp引擎还是生成两个java类。相当于类的调用。16.编程中,如果出现汉字乱码?你处理问题的思路是什么?确定一下问题出在什么?客户端、服务器、数据库。汉字的编码和解码是同一个字符集。17.什么是MVC模式?Model数据javabeanView视图:展现数据jspfreemarkerControl控制器:视图之间的跳转、以及跟Model的交互servlet.struts中的action、springmvc的控制器18.说说常见的服务器都有哪些?(tomcat,weblogic等)apachetomcat网站的话:apache+若干台tomcatweblogicwebspherejbossstruts面试问题1.什么是MVC模式?Model数据javabeanView视图:展现数据jspfreemarkerControl控制器:视图之间的跳转、以及跟Model的交互servlet.struts中的action、springmvc的控制器2.常见的MVC框架有哪些?如下这些MVC框架,运行效率哪个最慢:a)jsp+servlet实现(不能算框架)b)struts1c)struts2d)springmvce)jsfstruts2运行效率最慢。jsp+servlet>struts1,springmvc>JSF>>struts23.struts2开发效率较高。但是,struts2运行效率相对较低。是由什么造成的?如何解决?主要问题:OGNL和值栈。标签。把展现层替换成:Freemarker4.struts1和struts2的区别有哪些?1.action的区别:a)struts1的action是单例。所以呢,我们要设计成无状态的类。b)struts2的action不是单例,每个线程都有创建独立的action对象。因此,我们可以随意增加属性。2.表单数据的处理:a)struts1中我们要单独定义ActionForm类。通过ActionForm来自动封装表单的数据。b)struts2中,我们通过参数拦截器,可以将表单数据自动的映射到action中的名字相同的属性或者对应的javabean。属性驱动和模型驱动。5.你认为,struts2最核心的地方是什么?拦截器!struts2大部分的功能都是通过拦截器实现的。struts2的拦截器也是AOP的一种实现。AOP中内部是使用了动态代理。hibernate、spring使用的是cglib动态生成代理类。struts2使用的jdk提供的类。6.struts2中一个action类的实现方式有哪些?一个普通的java类能作为action吗?三种。一个普通类就可以作为action。或者实现Action接口。或者继承ActionSupport类。7.使用struts2,如何防止表单的重复提交?第一种方式:token拦截器。第二种方式:跳转提示页面的方式,直接使用重定向。8.说说struts2的内部实现机制?9.struts2中OGNL表达式比传统的EL表达式有哪些优点?可以调用对象的普通方法、类的静态方法、可以对集合做一些复杂的操作、还可以赋值。10.struts2中,拦截器和servlet中我们学习的过滤器有什么区别?内部实现机制有什么区别?拦截器:是struts2范围之内。只能拦截action。内部机制是动态代理(模式)过滤器:是服务器范围之内。什么都可以拦。内部机制是函数的回调。hibernate面试题1.什么是ORM?ORM:Objectrelationshipmapping对象关系映射。是因为java编程是面向对象,但是我们存储数据时,使用的数据库都是面向关系。这就存在一个不匹配的情况。ORM框架就是帮我们将面向对象的数据和面向关系的数据实现自动的互相转化。2.hibernate的基本实现思想是?同上题。3.hibernate中,session是怎么实现数据库操作的?实际上,hibernate使用了ORM得基本思想,对JDBC做了封装。我们通过session对象去查询数据库。实际上,session对象内部持有了Connection对象的引用,最终还是通过Connection对象来实现对数据库的操作。 但是,hibernate对Connection的管理做了优化。使用了连接池。这样的话,就避免了频繁的创建Connection对象,提高了效率。 session除了持有Connection对象的引用。还在内部维护了一个Map,只有在Map中存放的对象,session才会进行管理。这个map实际上也就是我们说的一级缓存。4.hibernate中,实体对象的状态有哪些?瞬时态:跟session无关,跟数据库无关。持久态:跟session有关,跟数据库有关。处于持久态的对象,状态做了更新,hibernate会自动的同步到数据库。游离态/托管态:跟session无关,跟数据库有关。5.hibernate中,我们能使用普通的SQL查询吗?怎么做?能。创建SQLQuery即可。6.如何使用hibernate进行分页查询?setMaxResult,setFirstResult7.你认为,hibernate有哪些优势?有哪些劣势?优势:1.是一个优秀的ORM框架。让我们可以以更加面向对象的方式编程。写一写逻辑的时候更加方便。2.效率也较高。内部有缓存。一级缓存、二级缓存、查询缓存。3.屏蔽了底层数据库的差异。劣势:1.多表查询效率较低。可以自己写原生查询。2.数据量大的时候,效率较低。8.实际工作中,如何选用:Hibernate、Ibatis框架?管理系统:逻辑较复杂、可以采用hibernate。网站系统:ibatis。9.get和load方法的区别是什么?get:直接加载对象。如果不存在,则返回nullload:懒加载。返回一个假的代理对象。如果真的不存在,则抛出异常。他们两个方法都会访问:一级缓存、二级缓存(如果开得话)10.说出几种常见的主键生成方式?a)native,identify,sequence,uuid,hilo11.手写出一段典型的hibernate插入数据代码 Sessionsession=null; try{ session=HibUtil.getSession(); Transactiontx=session.beginTransaction(); Useru=newUser(); u.setBirthday(newDate()); u.setName("tttt"); session.save(u); u.setName("bb"); u.setName("ccc"); u.setBirthday(newDate());// session.clear(); tx.commit(); }finally{ if(session!=null){ session.close(); } }12.cascade属性,指的是什么意思?级联。对对象做的操作,同样对这个对象属性也做一样的操作。13.reverse属性在一对多配置中,有什么作用?false:一方和多方都可以维护外键的值。true:只有多方维护外键的值。14.说说,hibernate中,一级缓存、二级缓存、查询缓存。一级缓存:session级别的。命中率不高。主要是管理持久态的对象。二级缓存:sessionfactory级别。可以被所有的session共享。默认不开。要开需要增加配置。查询缓存:依赖于二级缓存。一级缓存、二级缓存:都是采用map结构。key是通过类名+记录的ID来表示。查询缓存:也是一个map。key就是对应查询语句。15.哪些数据适合缓存?频繁访问的。修改不频繁的。16.hibernate中,对象的继承关系有哪些实现方式?三种。单表、union-class,joined-class。17.乐观锁和悲观锁的区别?乐观锁:认为冲突不多见。即使有冲突,抛异常重来。通过增加version字段来实现。这个原理就跟我们CVS版本控制软件一样。悲观锁:认为冲突很多。通过给记录增加锁。spring面试问题1.说说spring的核心是什么?IOC和AOP.2.IOC和DI是一回事吗?IOC:InverseOfControl控制反转DI:Dependencyinjection依赖注入是一回事。只不过说的不同的方面。IOC讲的控制关系的转换。以前属性的赋值是由对象自己完成。现在是交给了外部的spring来通过反射机制来赋值。通过set方法注入、或者通过构造器注入、也可以通过普通方法注入(这时候就需要定义接口)3.依赖注入的三种方式都是什么?一般常用哪个方式?setter注入:通过反射调用setter方法。(我们一般用它)构造器注入:通过反射调用构造器接口注入:通过反射调用接口中定义的普通方法4.spring的aop是否使用了aspectJ框架?是。5.说说,AOP是什么?AOP有什么好处?动态代理怎么理解?aop:aspectorientedprogramming。面向切面编程。aop的核心实现是动态代理。平时常见的是使用JDK提供的InnvocationHandle实现,还可以使用cglib来实现。struts2使用了JDK提供的动态代理实现,hibernate和spring使用了cglib提供的实现。动态代理实际上的意思是:动态生成代理类。这样,我们就可以控制代理类的代码,代理类的方法都会去调用InnvocationHandle接口中的invoke方法。这样的话,我只要一调用代理对象的方法,就会统一跑到invoke方法。然后,我们就可以在invoke方法对所有的方法做统一的预处理、后期处理。6.请写出SSH框架整合的步骤整合hibernatea)增加相关jar包b)增加spring配置文件:applicationContext.xml,文件内容如下:i.配置组件扫描。让spring管理basePackage和他的子包下所有的类。ii.配置dataSource数据源iii.配置sessionFactoryiv.配置事务管理(事务增加在service层!)v.配置HibernateTemplate整合strutsc)导入jar包d)配置web.xmli.配置<context-param>指定spring配置文件的路径和名字!ii.配置opensessionInview过滤器(一定要配置在struts过滤器之前)iii.配置struts过滤器iv.增加spring上下文加载的监听器e)增加struts.xml:增加<constantname="struts.objectFactory"value="spring"/>7.如何使用spring的声明式事务管理?在xml中配置一个事务管理器、然后配置切面。8.如果我们要实现定时调度某个任务?怎么实现,请说出两种实现方式?第一种:timer、timertask第二种:通过spring整合使用quatz框架9.说说,opensessionInview模式的实现原理?UML问题1.uml中常用的图有哪些?a)用例图b)类图c)时序图d)活动图e)状态图数据库问题1.事务是什么?一组要么同时执行,要么同时不执行的SQL语句。2.事务的基本特点有哪些?ACID:原子性、一致性、持久性、隔离性。3.oracle中分页通过什么字段实现?rownum4.什么是存储过程?在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。5.存储过程有什么优势?1.一般的sql每次使用都要编译一次。存储过程只要在创建时编译一次即可,以后都是直接执行。因此,效率较高。2.当对数据库进行复杂操作时,可以将这个复杂过程封装的存储过程中。方便维护和调用。3.安全性较高。可以指定用户来使用我们的存储过程。6.存储过程的创建和调用?创建存储过程  createproceduresp_name()  begin  .........  end  调用存储过程  1.基本语法:callsp_name()7.JDBC中如何调用存储过程?Callablestatementcstmt=conn.preparecall("{callgettestdata(?,?)}");?8.将课堂上,练习过的sql语句复习一遍。考试时经常考察sql语句。不过,能够完成我们课堂上的sql语句,应付笔试没问题。9.JDBC的使用过程?加载驱动、创建Connection对象、创建预编译sql对象,查询、处理结果集、关闭预编译sql对象关闭Connection对象。10.手写出jdbc链接mysql/oracle数据库,并进行查询的典型代码。 publicstaticvoidtestJDBC(){ Connectionconn=null; PreparedStatementps=null; ResultSetrs=null; try{ Class.forName(); conn=DriverManager.getConnection(,"root","123456"); ps=conn.prepareStatement("selectid,unamefromtb_userwhereid=?"); ps.setInt(1,20); rs=ps.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+"---"+rs.getString(2)); } }catch(Exceptione){ e.printStackTrace(); }finally{ try{ if(rs!=null){ rs.close(); } }catch(Exceptione){ e.printStackTrace(); } try{ if(ps!=null){ ps.close(); } }catch(Exceptione){ e.printStackTrace(); } try{ if(conn!=null){ conn.close(); } }catch(Exceptione){ e.printStackTrace(); } } }11.常见的数据库产品有哪些?oracle、mysql、db2、sqlserver。12.jdbc中,事务会自动提交吗?hibernate中,事务会自动提交吗?会。不会。13.PreparedStatement和statement的区别?PreparedStatement可以提高效率,防止sql注入攻击。PreparedStatement是statement的子类。14.说说,为什么需要数据库连接池?说说数据库连接池的实现原理?每次查询数据库都创建Connection对象的话,太消耗资源了。没有必要。我们可以先创建一堆Connection对象,放到一个容器中。然后,用的时候,取出来即可。用完后,放回到容器中。这个容器就是所谓的连接池。15.说出,你见过的几种数据库连接池产品。DBCPproxoolc3po16.如果数据量较大,如何优化数据库提高查询效率?可以在查询较频繁的字段上,建立索引。避免复杂的子查询。如果子查询不可避免,那就要在每次查询是过滤掉尽可能多的行。避免使用like查询。更要避免使用复杂的表达式17.如果更大,是电信级别的话务数据,你有什么建议?那可以考虑分布式数据库。比如:oracle、mysql都提供了分布式的实现;或者可以考虑使用分布式文件存储系统。比如:hadoop。设计模式问题1.列出你常见的设计模式工厂模式、单例模式、抽象工厂模式、原型模式、责任链模式、享元模式、策略模式、模板方法模式、代理模式、装饰器模式、观察者模式等2.手写出单利模式的两种实现方式 packagepublicclassSingltonDemo{//饿汉式 privatestaticSingltonDemos=newSingltonDemo(); privateSingltonDemo(){}//私有化构造器 publicstaticSingltonDemogetInstance(){ returns; }} packagepublicclassSingltonDemo2{//懒汉式 privatestaticSingltonDemo2s; privateSingltonDemo2(){}//私有化构造器 publicstaticsynchronizedSingltonDemo2getInstance(){ if(s==null){ s=newSingltonDemo2(); } returns; }}3.手写出一个简单的工厂模式 publicclassTest{ publicstaticvoidmain(String[]args){ CarFactoryfactory=CarFactory.getInstance(); Carc1=factory.createCar("奔驰"); }}classCarFactory{ privatestaticCarFactoryfactory; privateCarFactory(){}//私有化构造器 publicstaticsynchronizedCarFactorygetInstance(){ if(factory==null){ factory=newCarFactory(); } returnfactory; } publicCarcreateCar(Stringtype){
本文档为【尚学堂Java笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
大鹏展翅
资深中学教师
格式:doc
大小:46KB
软件:Word
页数:0
分类:工学
上传时间:2020-05-19
浏览量:3