尚学堂java笔试和面试技术题目总结_第1页
尚学堂java笔试和面试技术题目总结_第2页
尚学堂java笔试和面试技术题目总结_第3页
尚学堂java笔试和面试技术题目总结_第4页
尚学堂java笔试和面试技术题目总结_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、JAVA基础笔试题目1. JDK和JRE的区别?Java Development Kit. 包含了JRE、编译器等程序。Java Runtime Environment指的是java运行时环境。负责启动虚拟机,加载和运行class文件。2. JVM是什么?工作原理?JVM是sun公司定义的规范。java vitual mashine。3. GC是什么?是如何回收对象的?Gabbage collection 垃圾回收器。哪些对象需要回收?对象没有被引用。4. System.gc()的作用是?程序员能直接调用垃圾回收器吗?GC不能被程序员调用。System.gc()可以通知调用垃圾回收器。GC程序

2、员不能直接调用GC5. 一个java源文件,可以定义多个class类吗?可以定义多个public类吗?可以。6. java中,包含几种数据类型?基本数据类型byte 1个字节short 2个字节int 4个字节 整形常量默认类型long 8个字节float 4个字节double 8个字节 浮点常量的默认类型char 2个字节 Unicode码char所占的字节要看编码的 常用中文字符用utf-8编码占用3个字节(大约2万多字),但超大字符集中的更大多数汉字要占4个字节(在unicode编码体系中,U+20000开始有5万多汉字)。GBK、GB2312收编的汉字占2个字节,严格地用iso8859

3、-1无法表示汉字,只能转为问号。boolean 1位引用数据类型(4个)7. &和&的区别? 3&4和3&4哪个写法是不对的?&,按位与 /安慰与& 逻辑与 短路 /逻辑与 会产生短路的情况。8. 2x4=8. 最快的算法怎么实现?移位运算。左移一位表示乘以一个2.9. 堆区和栈区的区别?栈区存放局部变量连续空间存储先进后出,后进先出堆存放new出来的对象不连续的空间方法区存放类的信息代码静态变量字符串常量/还会存放字符串常量和静态变量10. 包装类使用时,自动装箱和拆箱是怎么回事?Integer I = 3; /装箱。 实际上是一种编译器魔术。编译器帮助我们修改了代码:Integer I =

4、 new Integer(3); int a = new Integer(3); int a =3 :int b=Value()11. equals方法和=的区别?= 判断对象是否相同。equals是Object类中的方法,他的默认实现也是比较引用地址。不过,很多类重写了这个方法,一般用来比较对象中某些的属性的值。Equals是object类中的方法 默认也是实现比较引用地址 重写此方法。12. 说出你编程中,常见的异常。至少5个。UnsupportedOperationException不支持的操作unsupportedoperationExeceptionIllegalArgum

5、entException非法参数IllggalArgumentExeceptionIndexOutOfBoundsException索引出界indexOutofBoundsException算术异常ClassNotFoundExeceptionSqlExeceptionclassCastExeceptionNumberFormatException自己去想。13. 成员变量和静态变量的区别?在内存中如何存放?成员变量,实例变量: 从属于对象。 存放在堆。静态变量:从属于类。 存放在方法区14. 重载是怎么回事?重写是怎么回事?重载overload:一个方法名定义多个方法。参数列表不同(个数、顺

6、序、类型不同),返回值不能构成重载。重写override 覆盖。 将父类的方法覆盖。15. java中继承如何实现?extends16. 包含抽象方法的类一定是抽象类吗?是。17. java中,聊聊的多态? 面向接口编程?多态的实现:父类引用指向子类对象。在实际开发中,我们项目中使用了spring。一般都采用面向接口编程。我们将变量类型全部定义成接口的类型。然后,运行时再通过spring注入具体的实现。18. 封装的实现中,说明private、protected、default、public的区别?private 私有。只有自己类中可以调用。protected 受保护。子类中能用。 子类不在同

7、一个包中能不能调用? 不能3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。default :同一个包中可以用。public:公开的。任何地方都可以用。19. 面向对象的三大特征有哪些?封装、继承、多态20. 浮点数是有误差的。如果要实现精确的计算?BigDecimal bigdecimal21. char类型,能表示汉字吗?为什么?22. final修饰变量、方法、类,都有什么区别?变量:常量方法:不能被子类重写类:不能被继承23. final,finally,fi

8、nalize方法的区别?final修饰变量、修饰方法、修饰类。finally在异常处理中使用。表示不管有没有异常都会执行这里。通常用来释放资源。finaliize,垃圾回收这个对象前执行的方法。24. String是不可变字符? 从源代码分析,为什么?内部有一个char数组。这个数组使用了final修饰。意味着只能初始化一次。25. StringBuffer和StringBuilder的区别?StringBuffer可变字符序列,线程安全StringBuilder可变字符序列。线程不安全。一般用它。最重要的区别是,当需要数据增长时StringBuffer只有一个实例,占用内存空间小。而Stri

9、ng每new一次增加一个实例,耗费资源多。26. java中,类可以多继承吗?接口可以多继承吗?类不可以多继承。接口可以多继承。多实现27. 数组是对象吗?是。28. 数组中元素默认初始化的规则是什么?跟成员变量的规则是一样的。引用类型为null。数值:0 布尔:false29. 数组的长度是固定的吗?是的。30. Collection、List和Set接口有什么联系?Collection是List和Set的父接口。 31. list和set接口的区别是?List:有序、可重复。Set:无序、不可重复。32. Collection和Collections的区别?Collection接口。Col

10、lections是一个针对Collection提供的工具类。Colections是一个对collection提供的工具类33. Vector、ArrayList的区别是?Vector线程安全。ArrayList线程不安全。多线程 多例34. HashMap和HashTable的区别是?HashTable线程安全,HashMap线程不安全。35. 两个对象hashcode()方法返回值相同,那么调用equals方法一定为true吗?从规范上讲,要。36. AWT、swing是什么关系? swing有什么优势?AWT 是抽象窗口组件工具包,是 java 最早的用于编写图形节目应用程序的开发包。 S

11、wing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。37. GUI编程中,有哪些常用的布局管理器?Flow、Border、Card、Grid等38. 如何实现序列化?实现Serielizable。他是一个序列化接口接口。39. 要把一个字节流对象转化成字符流对象,需要用到什么类?InputStreamReader,OutputStreamWriter /处理流40. 进程和线程的区别是?进程是一个独立运行的程序,拥有独立的内存空间、代码。一个进程中可以包含多个线程。多个线程共享同一块空间和代码。41. 写出定义线程类的两种常见方式?继承Thread、 实现Runnab

12、le接口 /实现ruanable接口 继承Thread类42. 说说,Runnable接口和Thread的区别?Thread也是实现了Runnalbe接口。Runnable只有一个run方法 很适合继承Thread new一个实例启动start方法43. synchronized如何使用?44. 如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法如果直接修饰方法,意味着线程要调用这个方法必须要有这个方法所在的对象的锁。如果修饰了方法块,上面可以声明需要拥有的对象锁。这样的话

13、,线程只有拥有指定对象的锁才能运行这个代码块。不然,就等待。45. 说说:wait(), notify(), sleep()方法作用?wait(),线程进入阻塞状态。释放持有的对象锁。sleep(),线程进入阻塞状态。但是,不是放持有的对象锁。notify(), 唤醒等待池中的线程46. java中,反射机制的基本原理?Class类得作用是?反射机制是java动态性重要手段。当我们加载完毕一个类的时候,会同时创建一个Class类型的对象,Class类型的对象它包含了这个类的完整的数据结构。就像一个镜子一样,通过这个镜子我们可以得到对应类的所有信息。而且,Class类还包含了如何操作属性、构造器

14、、方法的接口。这样的话,我们就可以通过反射机制动态的创建对象、动态的调用对象的方法、动态的操作属性。47. 通过Class类,可以访问和设置一个类得私有方法、私有成员变量吗?如果能,怎么做?可以直接操作私有方法。可以操作私有成员变量。通过setAccessible(true)。SetAcessible(true)48. 通讯方式中,TCP和UDP的区别是?TCP:transfer control protocol 传输控制协议。面向连接的、安全的。效率不高的。我们一般用的Socket就是TCP连接。我们访问网站也是TCP/IP协议,建立连接。Tcp/ipUDP: User Datagram P

15、rotocol 用户数据包协议。 无连接、不安全、效率高。49. 内部类?java手写编程题目1. 写出冒泡排序代码public class Test public static void main(String args) int values = 3, 1, 6, 2, 9, 0, 7, 4, 5,8 ;sort(values);System.out.println(Arrays.toString(values); public static void sort(int values) int temp;for (int i = 0; i values.length; i+) for (i

16、nt j = 0; j values.length - 1- i ; j+) /j valuesj + 1) temp = valuesj;valuesj = valuesj + 1;valuesj + 1 = temp;2. 写出二分法查找代码static int binarySearch(int arr,int searchWord)Arrays.sort(arr); /先对传进来的数组进行排序System.out.println(n+Arrays.toString(arr);/tostring/二分法查找 int iIndex=0; /相当于指针的东西 int iStart=0; int

17、 iEnd=arr.length-1; int searchCount = 0;for(int i=0;iarr.length/2;i+) searchCount+; iIndex = (iStart+iEnd)/2; if(arriIndexsearchWord)System.out.println(bb);iEnd = iIndex; else break; return searchCount; 3. 写出一个双向链表类代码package com.sxt.web;public class Node private E element; /结点数据 private Node next; /

18、上结点 private Node previous; /下结点 private static int size=0; /链表长 /默认关结点next previous都是空, public Node() this.element=null; this.next=null; this.previous=null; private Node(E element,Node next,Node previous) this.element=element; this.next=next; this.previous=previous; /* * 尾部添加元素 e * param e */ public

19、 void addAfter(E e) /定义新结点,next-头结点;previous-头结点.previous(尾结点) Node newNode=new Node(e,this,this.previous=null?this:this.previous); /头结点next为空则让它指向newNode if(this.next=null) this.next=newNode; /头结点previous为空则让它指向newNode if(this.previous=null) this.previous=newNode; this.previous.next=newNode; this.p

20、revious=newNode; size+; /* * 头部添加元素 e * param e */ public void addBefor(E e) Node newNode=new Node(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 * para

21、m e * param index */ public void add(E e,int index) /索引越界 if(index=size | indexsize/2,反向遍历 if(indexsize1) Node temp=this; for(int i=size;iindex;i-) temp=temp.previous; Node newNode=new Node(e,temp,temp.previous); temp.previous.next=newNode; temp.previous=newNode; else Node temp=this; for(int i=0;i=i

22、ndex;i+) temp=temp.next; Node newNode=new Node(e,temp,temp.previous); temp.previous.next=newNode; temp.previous=newNode; size+; /* * 删除第index个元素 * param index */ public void remove(int index) /索引越界 if(index=size | indexsize/2,反向遍历 if(indexsize1) Node temp=this; for(int i=size;iindex;i-) temp=temp.pr

23、evious; temp.previous.next=temp.next; temp.next.previous=temp.previous; else Node temp=this; for(int i=0;i=size | indexsize/2,反向遍历 if(indexsize1) Node temp=this; for(int i=size;iindex;i-) temp=temp.previous; return temp.element; else Node temp=this; for(int i=0;i=index;i+) temp=temp.next; return tem

24、p.element; public int size() return size; public static void main(String a) Node node=new Node(); 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.p

25、rintln(node.get(3) ); System.out.println(node.get(4) ); 4. 写出一个二叉树代码class TreeNode private String data; private TreeNode leftNode; private TreeNode rightNode; public TreeNode(String data, TreeNode leftNode, TreeNode rightNode) this.data = data; this.leftNode = leftNode; this.rightNode = rightNode; p

26、ublic String getData() return data; public void setData(String data) this.data = data; public TreeNode getLeftNode() return leftNode; public void setLeftNode(TreeNode leftNode) this.leftNode = leftNode; public TreeNode getRightNode() return rightNode; public void setRightNode(TreeNode rightNode) thi

27、s.rightNode = rightNode; 5. 编写一个生产者和消费者的程序public class TestProduce public static void main(String args) SyncStack sStack = new SyncStack();Shengchan sc = new Shengchan(sStack);Xiaofei xf = new Xiaofei(sStack);sc.start();xf.start();class Mantou int id;Mantou(int id)this.id=id;class SyncStackint index

28、=0;Mantou ms = new Mantou10;public synchronized void push(Mantou m)while(index=ms.length)try this.wait(); /wait后,线程会将持有的锁释放。sleep是即使睡着也持有互斥锁。 catch (InterruptedException e) e.printStackTrace();this.notify(); /唤醒在当前对象等待池中等待的一个线程(随意的)。notifyAll叫醒所有在当前对象等待池中等待的所有线程。/如果不唤醒的话。以后这两个线程都会进入等待线程,没有人唤醒。msinde

29、x=m;index+;public synchronized Mantou pop()while(index=0)try this.wait(); catch (InterruptedException e) e.printStackTrace();this.notify();index-;return msindex;class Shengchan extends ThreadSyncStack ss = null;public Shengchan(SyncStack ss) / TODO Auto-generated constructor stubthis.ss=ss;Overridep

30、ublic void run() / TODO Auto-generated method stubfor (int i = 0; i 20; i+) System.out.println(造馒头:+i);Mantou m = new Mantou(i);ss.push(m);class Xiaofei extends ThreadSyncStack ss = null;public Xiaofei(SyncStack ss) / TODO Auto-generated constructor stubthis.ss=ss;Overridepublic void run() / TODO Au

31、to-generated method stubfor (int i = 0; i 20; i+) Mantou m = ss.pop();System.out.println(吃馒头:+i);6. 定义一个多线程类,并写出如何终止线程的执行,并启动他。public class TestThreadCiycle implements Runnable String name;boolean live = true;public TestThreadCiycle(String name) super(); = name;public void run() int i=0;whi

32、le(live)System.out.println(name+(i+);public void terminate()live = false;public static void main(String args) TestThreadCiycle ttc = new TestThreadCiycle(线程A:);Thread t1 = new Thread(ttc); /新生状态t1.start(); /就绪状态for(int i=0;i1000;i+)System.out.println(i);ttc.terminate();System.out.println(ttc stop!);

33、7. 写出一个文件复制的程序void copyFile(String src,String dec)FileInputStream fis = null;FileOutputStream fos = null;byte buffer = new byte1024; /为了提高效率,设置缓存数组int temp = 0;try fis = new FileInputStream(src);fos = new FileOutputStream(dec);while(temp=fis.read(buffer)!=-1)fos.write(buffer, 0, temp); catch (FileNo

34、tFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace();finallytry fos.close(); catch (IOException e) e.printStackTrace();try fis.close(); catch (IOException e) e.printStackTrace();8. “abcdefg”这个字符串,如何将它反转过来?两种方式:public String reverse(String str)StringBuilder sb = new Strin

35、gBuilder(str);return sb.reverse().toString(); /reversepublic String reverse2(String str)char c = new charstr.length();for(int i=0;istruts1, spring mvcJSF struts24. struts2开发效率较高。但是,struts2运行效率相对较低。是由什么造成的?如何解决?主要问题:OGNL和值栈。标签。把展现层替换成:Freemarker5. struts1和struts2的区别有哪些?1. action的区别:a) struts1的action是

36、单例。所以呢,我们要设计成无状态的类。b) struts2的action不是单例,每个线程都有创建独立的action对象。因此,我们可以随意增加属性。2. 表单数据的处理:a) struts1中我们要单独定义ActionForm类。通过ActionForm来自动封装表单的数据。b) struts2中,我们通过参数拦截器,可以将表单数据自动的映射到action中的名字相同的属性或者对应的javabean。 属性驱动和模型驱动。6. 你认为,struts2最核心的地方是什么?拦截器!struts2大部分的功能都是通过拦截器实现的。struts2的拦截器也是AOP的一种实现。AOP中内部是使用了动态代理。hibernate、spring使用的是cglib动态生成代理类。 struts2使用的jdk提供的类。7. struts2中一个action类的实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论