1、尚学堂Java笔记 Document serial number【KK89K-LLS98YT-SS8CB-SSUT-SST108】尚学堂Java笔记笔试和面试题目V1.0北京尚学堂科技JAVA基础笔试题目1.JDK和JRE的区别?JavaDevelopmentKit.包含了JRE、编译器等程序。JavaRuntimeEnvironment指的是java运行时环境。负责启动虚拟机,加载和运行class文件。2.JVM是什么工作原理JVM是sun公司定义的规范。javavitualmashine。3.GC是什么是如何回收对象的Gabbagecollection垃圾回收器。哪些对象需要回收对象没有被
2、引用。4.System.gc()的作用是程序员能直接调用垃圾回收器吗GC不能被程序员调用。System.gc()可以通知调用垃圾回收器。5.一个java源文件,可以定义多个class类吗可以定义多个public类吗可以。6.java中,包含几种数据类型基本数据类型byte1个字节short2个字节int4个字节整形常量默认类型long8个字节float4个字节double8个字节浮点常量的默认类型char2个字节Unicode码boolean1位引用数据类型(4个)7.&和&的区别3&4和3&4哪个写法是不对的&,按位与&逻辑与短路8.2x4=8.最快的算法怎么实现移位运算。左移一位表示乘以一
3、个2.9.堆区和栈区的区别10.包装类使用时,自动装箱和拆箱是怎么回事IntegerI=3;/装箱。实际上是一种编译器魔术。编译器帮助我们修改了代码:IntegerI=newInteger(3);inta=newInteger(3);11.equals方法和=的区别=判断对象是否相同。equals是Object类中的方法,他的默认实现也是比较引用地址。不过,很多类重写了这个方法,一般用来比较对象中某些的属性的值。12.说出你编程中,常见的异常。至少5个。自己去想。13.成员变量和静态变量的区别在内存中如何存放成员变量,实例变量:从属于对象。存放在堆。静态变量:从属于类。存放在方法区14.重载是
4、怎么回事重写是怎么回事重载overload:一个方法名定义多个方法。参数列表不同(个数、顺序、类型不同),返回值不能构成重载。重写override覆盖。将父类的方法覆盖。15.java中继承如何实现extends16.包含抽象方法的类一定是抽象类吗是。17.java中,聊聊的多态面向接口编程多态的实现:父类引用指向子类对象。在实际开发中,我们项目中使用了spring。一般都采用面向接口编程。我们将变量类型全部定义成接口的类型。然后,运行时再通过spring注入具体的实现。18.封装的实现中,说明private、protected、default、public的区别private私有。只有自己类
5、中可以调用。protected受保护。子类中能用。子类不在同一个包中能不能调用default:同一个包中可以用。public:公开的。任何地方都可以用。19.面向对象的三大特征有哪些封装、继承、多态20.浮点数是有误差的。如果要实现精确的计算BigDecimal21.char类型,能表示汉字吗?为什么?22.final修饰变量、方法、类,都有什么区别变量:常量方法:不能被子类重写类:不能被继承23.final,finally,finalize方法的区别final修饰变量、修饰方法、修饰类。finally在异常处理中使用。表示不管有没有异常都会执行这里。通常用来释放资源。finaliize,垃圾
6、回收这个对象前执行的方法。24.String是不可变字符从源代码分析,为什么内部有一个char数组。这个数组使用了final修饰。意味着只能初始化一次。25.StringBuffer和StringBuilder的区别StringBuffer可变字符序列,线程安全StringBuilder可变字符序列。线程不安全。一般用它。26.java中,类可以多继承吗接口可以多继承吗类不可以多继承。接口可以多继承。27.数组是对象吗是。28.数组中元素默认初始化的规则是什么跟成员变量的规则是一样的。引用类型为null。数值:0布尔:false29.数组的长度是固定的吗?是的。30.Collection、Li
7、st和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吗从规范
8、上讲,要。36.AWT、swing是什么关系swing有什么优势37.GUI编程中,有哪些常用的布局管理器Flow、Border、Card、Grid等38.如何实现序列化实现Serielizable。他是一个空接口。39.要把一个字节流对象转化成字符流对象,需要用到什么类InputStreamReader,OutputStreamWriter40.进程和线程的区别是进程是一个独立运行的程序,拥有独立的内存空间、代码。一个进程中可以包含多个线程。多个线程共享同一块空间和代码。41.写出定义线程类的两种常见方式继承Thread、实现Runnable接口42.说说,Runnable接口和Thread
9、的区别Thread也是实现了Runnalbe接口。43.synchronized如何使用如果直接修饰方法,意味着线程要调用这个方法必须要有这个方法所在的对象的锁。如果修饰了方法块,上面可以声明需要拥有的对象锁。这样的话,线程只有拥有指定对象的锁才能运行这个代码块。不然,就等待。44.说说:wait(),notify(),sleep()方法作用wait(),线程进入阻塞状态。释放持有的对象锁。sleep(),线程进入阻塞状态。但是,不是放持有的对象锁。notify(),唤醒等待池中的线程45.java中,反射机制的基本原理Class类得作用是反射机制是java动态性重要手段。当我们加载完毕一个类
10、的时候,会同时创建一个Class类型的对象,Class类型的对象它包含了这个类的完整的数据结构。就像一个镜子一样,通过这个镜子我们可以得到对应类的所有信息。而且,Class类还包含了如何操作属性、构造器、方法的接口。这样的话,我们就可以通过反射机制动态的创建对象、动态的调用对象的方法、动态的操作属性。46.通过Class类,可以访问和设置一个类得私有方法、私有成员变量吗如果能,怎么做可以直接操作私有方法。可以操作私有成员变量。通过setAccessible(true)。47.通讯方式中,TCP和UDP的区别是?TCP:transfercontrolprotocol传输控制协议。面向连接的、安全
11、的。效率不高的。我们一般用的Socket就是TCP连接。我们访问网站也是TCP/IP协议,建立连接。UDP:UserDatagramProtocol用户数据包协议。无连接、不安全、效率高。48.内部类java手写编程题目1.写出冒泡排序代码publicclassTest publicstaticvoidmain(Stringargs) intvalues=3,1,6,2,9,0,7,4,5,8; sort(values); System.out.println(Arrays.toString(values); publicstaticvoidsort(intvalues) inttemp; f
12、or(inti=0;ivalues.length;i+) for(intj=0;jvaluesj+1) temp=valuesj; valuesj=valuesj+1; valuesj+1=temp; 2.写出二分法查找代码staticintbinarySearch(intarr,intsearchWord) Arrays.sort(arr);/先对传进来的数组进行排序 /二分法查找 intiIndex=0;/相当于指针的东西 intiStart=0; intiEnd=arr.length-1; intsearchCount=0; for(inti=0;iarr.length/2;i+) se
13、archCount+; iIndex=(iStart+iEnd)/2; if(arriIndexsearchWord) iEnd=iIndex; else break; returnsearchCount; 3.写出一个双向链表类代码packagepublicclassNodeprivateEelement;/结点数据privateNodenext;/上结点privateNodeprevious;/下结点privatestaticintsize=0;/链表长/默认关结点nextprevious都是空,publicNode()this.element=null;this.next=null;th
14、is.previous=null;privateNode(Eelement,Nodenext,Nodeprevious)this.element=element;this.next=next;this.previous=previous;/*尾部添加元素e*parame*/publicvoidaddAfter(Ee)/定义新结点,next-头结点;previous-头结点.previous(尾结点)NodenewNode=newNode(e,this,this.previous=nullthis:this.previous);/头结点next为空则让它指向newNodeif(this.next
15、=null)this.next=newNode;/头结点previous为空则让它指向newNodeif(this.previous=null)this.previous=newNode;this.previous.next=newNode;this.previous=newNode;size+;/*头部添加元素e*parame*/publicvoidaddBefor(Ee)NodenewNode=newNode(e,this.next=nullthis:this.next,this);if(this.next=null)this.next=newNode;if(this.previous=n
16、ull)this.previous=newNode;this.next.previous=newNode;this.next=newNode;size+;/*在index处添加元素e*parame*paramindex*/publicvoidadd(Ee,intindex)/索引越界if(index=size|indexsize/2,反向遍历if(indexsize1)Nodetemp=this;for(inti=size;iindex;i-)temp=temp.previous;NodenewNode=newNode(e,temp,temp.previous);temp.previous.n
17、ext=newNode;temp.previous=newNode;elseNodetemp=this;for(inti=0;i=index;i+)temp=temp.next;NodenewNode=newNode(e,temp,temp.previous);temp.previous.next=newNode;temp.previous=newNode;size+;/*删除第index个元素*paramindex*/publicvoidremove(intindex)/索引越界if(index=size|indexsize/2,反向遍历if(indexsize1)Nodetemp=this
18、;for(inti=size;iindex;i-)temp=temp.previous;temp.previous.next=temp.next;temp.next.previous=temp.previous;elseNodetemp=this;for(inti=0;i=size|indexsize/2,反向遍历if(indexsize1)Nodetemp=this;for(inti=size;iindex;i-)temp=temp.previous;returntemp.element;elseNodetemp=this;for(inti=0;i=index;i+)temp=temp.ne
19、xt;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
20、);System.out.println(node.get(4);4.写出一个二叉树代码classTreeNodeprivateStringdata;privateTreeNodeleftNode;privateTreeNoderightNode;publicTreeNode(Stringdata,TreeNodeleftNode,TreeNoderightNode)this.data=data;this.leftNode=leftNode;this.rightNode=rightNode;publicStringgetData()returndata;publicvoidsetData(St
21、ringdata)this.data=data;publicTreeNodegetLeftNode()returnleftNode;publicvoidsetLeftNode(TreeNodeleftNode)this.leftNode=leftNode;publicTreeNodegetRightNode()returnrightNode;publicvoidsetRightNode(TreeNoderightNode)this.rightNode=rightNode;5.编写一个生产者和消费者的程序publicclassTestProduce publicstaticvoidmain(St
22、ringargs) SyncStacksStack=newSyncStack(); Shengchansc=newShengchan(sStack); Xiaofeixf=newXiaofei(sStack); sc.start(); xf.start(); classMantou intid; Mantou(intid) this.id=id; classSyncStack intindex=0; Mantoums=newMantou10; publicsynchronizedvoidpush(Mantoum) while(index=ms.length) try this.wait();
23、/wait后,线程会将持有的锁释放。sleep是即使睡着也持有互斥锁。 catch(InterruptedExceptione) e.printStackTrace(); this.notify();/唤醒在当前对象等待池中等待的一个线程(随意的)。notifyAll叫醒所有在当前对象等待池中等待的所有线程。 /如果不唤醒的话。以后这两个线程都会进入等待线程,没有人唤醒。 msindex=m; index+; publicsynchronizedMantoupop() while(index=0) try this.wait(); catch(InterruptedExceptione) e.
24、printStackTrace(); this.notify(); index-; returnmsindex; classShengchanextendsThread SyncStackss=null; publicShengchan(SyncStackss) /TODOAuto-generatedconstructorstub this.ss=ss; Override publicvoidrun() /TODOAuto-generatedmethodstub for(inti=0;i20;i+) 造馒头:+i); Mantoum=newMantou(i); ss.push(m); clas
25、sXiaofeiextendsThread SyncStackss=null; publicXiaofei(SyncStackss) /TODOAuto-generatedconstructorstub this.ss=ss; Override publicvoidrun() /TODOAuto-generatedmethodstub for(inti=0;i20;i+) Mantoum=ss.pop(); 吃馒头:+i); 6.定义一个多线程类,并写出如何终止线程的执行,并启动他。publicclassTestThreadCiycleimplementsRunnable Stringname
26、; booleanlive=true; publicTestThreadCiycle(Stringname) super(); this.name=name; publicvoidrun() inti=0; while(live) System.out.println(name+(i+); publicvoidterminate() live=false; publicstaticvoidmain(Stringargs) TestThreadCiyclettc=newTestThreadCiycle(线程A:); Threadt1=newThread(ttc);/新生状态 t1.start();/就绪状态 for(inti=0;i1000;i+) System.out.println(i); ttc.terminate(); System.out.println(ttcstop!); 7.写出一个文件复制的程序voidcopyFile(Stringsrc,Stringdec) FileInputStreamfis=null; FileOu
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1