已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
笔试和面试题目V1.0北京尚学堂科技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()可以通知调用垃圾回收器。5. 一个java源文件,可以定义多个class类吗?可以定义多个public类吗?可以。6. java中,包含几种数据类型?基本数据类型byte 1个字节short 2个字节int 4个字节 整形常量默认类型long 8个字节float 4个字节double 8个字节 浮点常量的默认类型char 2个字节 Unicode码boolean 1位引用数据类型(4个)7. &和&的区别? 3&4和3&4哪个写法是不对的?&,按位与& 逻辑与 短路8. 2x4=8. 最快的算法怎么实现?移位运算。左移一位表示乘以一个2.9. 堆区和栈区的区别?栈区存放局部变量连续空间存储先进后出,后进先出堆存放new出来的对象不连续的空间方法区存放类的信息代码静态变量字符串常量10. 包装类使用时,自动装箱和拆箱是怎么回事?Integer I = 3; /装箱。 实际上是一种编译器魔术。编译器帮助我们修改了代码:Integer I = new Integer(3); int a = new Integer(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是不可变字符? 从源代码分析,为什么?内部有一个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:transfer control protocol 传输控制协议。面向连接的、安全的。效率不高的。我们一般用的Socket就是TCP连接。我们访问网站也是TCP/IP协议,建立连接。UDP: User Datagram Protocol 用户数据包协议。 无连接、不安全、效率高。48. 内部类?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 (int j = 0; 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);/二分法查找 int iIndex=0; /相当于指针的东西 int iStart=0; int 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; /上结点 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 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.previous=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 * param 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=index;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.previous; 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 temp.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.println(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; public 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) this.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=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叫醒所有在当前对象等待池中等待的所有线程。/如果不唤醒的话。以后这两个线程都会进入等待线程,没有人唤醒。msindex=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;Overridepublic 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 Auto-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;while(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!);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 (FileNotFoundException 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 StringBuilder(str);return sb.reverse().toString(); public 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是单例。所以呢,我们要设计成无状态的类。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类的实现方式有哪些? 一个普通的java类能作为action吗?三种。一个普通类就可以作为action。或者实现Action接口。或者继承ActionSupport类。8. 使用struts2,如何防止表单的重复提交?第一种方式:token拦截器。第二种方式:跳转提示页面的方式,直接使用重定向。9. 说说struts2的内部实现机制? 10. struts2中OGNL表达式比传统的EL表达式有哪些优点?可以调用对象的普通方法、类的静态方法、可以对集合做一些复杂的操作、还可以赋值。11. struts2中,拦截器和servlet中我们学习的过滤器有什么区别? 内部实现机制有什么区别?拦截器:是struts2范围之内。只能拦截action。 内部机制是动态代理(模式)过滤器:是服务器范围之内。什么都可以拦。 内部机制是函数的回调。hibernate面试题1. 什么是ORM?ORM: Object relationship mapping 对象关系映射。是因为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中,我们能使
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消化内科胰腺癌术后疼痛管理指南
- 急诊科外伤腹膜后出血护理要点
- 2020-2025年监理工程师之监理概论基础试题库和答案要点
- 2020-2025年施工员之土建施工专业管理实务能力测试试卷A卷附答案
- 2025版房地产购房合同范本
- 2025商品房预售合同案
- 2025年合同款XPS挤塑聚苯板保温板外墙外保温施工项目合同文件
- 2025专业版房屋抵押贷款合同范本
- 2025专利许可合同范本
- 眼科护理管理及护理实践
- 东明石化电脱盐技术改造方案
- 污水处理建设项目施工方案
- 贷款业务的核算1课件
- GB/T 14079-1993软件维护指南
- 9-马工程《艺术学概论》课件-第九章(20190403)【已改格式】.课件电子教案
- 2023年上海英雄(集团)有限公司招聘笔试题库及答案解析
- 2023年重庆三峡融资担保集团股份有限公司校园招聘笔试题库及答案解析
- 无糖食品课件
- 2022年公安基础知识考试试题及答案
- 2021新苏教版六年级上册科学14探索宇宙-课件
- 会展业的法律法规
评论
0/150
提交评论