首页 尚学堂java笔试和面试技术题目总结

尚学堂java笔试和面试技术题目总结

举报
开通vip

尚学堂java笔试和面试技术题目总结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()的作用...

尚学堂java笔试和面试技术题目总结
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()可以 通知 关于发布提成方案的通知关于xx通知关于成立公司筹建组的通知关于红头文件的使用公开通知关于计发全勤奖的通知 调用垃圾回收器。 GC程序员不能直接调用GC 5. 一个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-1无法表示汉字,只能转为问号。 boolean  1位 引用数据类型(4个) 7. &和&&的区别?  3&4和3&&4哪个写法是不对的? &,按位与 //安慰与 && 逻辑与  短路 //逻辑与 会产生短路的情况。 8. 2x4=8. 最快的算法怎么实现? 移位运算。左移一位表示乘以一个2. 9. 堆区和栈区的区别? 10. 包装类使用时,自动装箱和拆箱是怎么回事? Integer  I  = 3;  //装箱。 实际上是一种编译器魔术。编译器帮助我们修改了代码: Integer   I =  new Integer(3); int  a  = new Integer(3); int a =3 :int b=a.intValue() 11. equals方法和==的区别? == 判断对象是否相同。 equals是Object类中的方法,他的默认实现也是比较引用地址。不过,很多类重写了这个方法,一般用来比较对象中某些的属性的值。 Equals是object类中的方法  默认也是实现比较引用地址  重写此方法。 12. 说出你编程中,常见的异常。至少5个。 UnsupportedOperationException不支持的操作  unsupportedoperationExeception IllegalArgumentException非法参数  IllggalArgumentExeception IndexOutOfBoundsException索引出界  indexOutofBoundsException 算术异常 ClassNotFoundExeception SqlExeception classCastExeception NumberFormatException 自己去想。 13. 成员变量和静态变量的区别?在内存中如何存放? 成员变量,实例变量: 从属于对象。 存放在堆。 静态变量:从属于类。  存放在方法区 14. 重载是怎么回事?重写是怎么回事? 重载overload:一个方法名定义多个方法。参数列表不同(个数、顺序、类型不同),返回值不能构成重载。 重写override 覆盖。 将父类的方法覆盖。 15. java中继承如何实现? extends 16. 包含抽象方法的类一定是抽象类吗? 是。 17. java中,聊聊的多态? 面向接口编程? 多态的实现:父类引用指向子类对象。 在实际开发中,我们项目中使用了spring。一般都采用面向接口编程。我们将变量类型全部定义成接口的类型。然后,运行时再通过spring注入具体的实现。 18. 封装的实现中,说明private、protected、default、public的区别? private 私有。只有自己类中可以调用。 protected 受保护。子类中能用。  子类不在同一个包中能不能调用??? 不能 3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。 default :同一个包中可以用。 public:公开的。任何地方都可以用。 19. 面向对象的三大特征有哪些? 封装、继承、多态 20. 浮点数是有误差的。如果要实现精确的计算? BigDecimal bigdecimal 21. char类型,能表示汉字吗?为什么? 22. final修饰变量、方法、类,都有什么区别? 变量:常量 方法:不能被子类重写 类:不能被继承 23. final,finally,finalize方法的区别? final修饰变量、修饰方法、修饰类。。。 finally在异常处理中使用。表示不管有没有异常都会执行这里。通常用来释放资源。 finaliize,垃圾回收这个对象前执行的方法。 24. String是不可变字符? 从源代码分析,为什么? 内部有一个char数组。这个数组使用了final修饰。意味着只能初始化一次。 25. StringBuffer和StringBuilder的区别? StringBuffer可变字符序列,线程安全 StringBuilder可变字符序列。线程不安全。一般用它。 最重要的区别是,当需要数据增长时StringBuffer只有一个实例,占用内存空间小。而String每new一次增加一个实例,耗费资源多。 26. java中,类可以多继承吗?接口可以多继承吗? 类不可以多继承。 接口可以多继承。多实现 27. 数组是对象吗? 是。 28. 数组中元素默认初始化的规则是什么? 跟成员变量的规则是一样的。引用类型为null。数值:0 布尔:false 29. 数组的长度是固定的吗? 是的。 30. Collection、List和Set接口有什么联系? Collection是List和Set的父接口。 31. list和set接口的区别是? List:有序、可重复。 Set:无序、不可重复。 32. Collection和Collections的区别? Collection接口。 Collections是一个针对Collection提供的工具类。 Colections是一个对collection提供的工具类 33. Vector、ArrayList的区别是? Vector线程安全。ArrayList线程不安全。多线程  多例 34. HashMap和HashTable的区别是? HashTable线程安全,HashMap线程不安全。 35. 两个对象hashcode()方法返回值相同,那么调用equals方法一定为true吗? 从规范上讲,要。 36. AWT、swing是什么关系?  swing有什么优势? AWT 是抽象窗口组件工具包,是 java 最早的用于编写图形节目应用程序的开发包。 Swing 是为了解决 AWT 存在的问题而新开发的包,它以 AWT 为基础的。 37. GUI编程中,有哪些常用的布局管理器? Flow、Border、Card、Grid等 38. 如何实现序列化? 实现Serielizable。他是一个序列化接口接口。 39. 要把一个字节流对象转化成字符流对象,需要用到什么类? InputStreamReader,OutputStreamWriter //处理流 40. 进程和线程的区别是? 进程是一个独立运行的程序,拥有独立的内存空间、代码。一个进程中可以包含多个线程。多个线程共享同一块空间和代码。 41. 写出定义线程类的两种常见方式? 继承Thread、 实现Runnable接口 //实现ruanable接口  继承Thread类 42. 说说,Runnable接口和Thread的区别? Thread也是实现了Runnalbe接口。 Runnable只有一个run方法  很适合继承 Thread new一个实例启动start方法 43. synchronized如何使用? 44.  如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法 如果直接修饰方法,意味着线程要调用这个方法必须要有这个方法所在的对象的锁。 如果修饰了方法块,上面可以声明需要拥有的对象锁。这样的话,线程只有拥有指定对象的锁才能运行这个代码块。不然,就等待。 45. 说说:wait(), notify(), sleep()方法作用? wait(),线程进入阻塞状态。释放持有的对象锁。 sleep(),线程进入阻塞状态。但是,不是放持有的对象锁。 notify(), 唤醒等待池中的线程 46. java中,反射机制的基本原理?Class类得作用是? 反射机制是java动态性重要手段。当我们加载完毕一个类的时候,会同时创建一个Class类型的对象,Class类型的对象它包含了这个类的完整的数据结构。就像一个镜子一样,通过这个镜子我们可以得到对应类的所有信息。而且,Class类还包含了如何操作属性、构造器、方法的接口。 这样的话,我们就可以通过反射机制动态的创建对象、动态的调用对象的方法、动态的操作属性。 47. 通过Class类,可以访问和设置一个类得私有方法、私有成员变量吗?如果能,怎么做? 可以直接操作私有方法。 可以操作私有成员变量。通过setAccessible(true)。 SetAcessible(true) 48. 通讯方式中,TCP和UDP的区别是? TCP:transfer  control  protocol 传输控制 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 。面向连接的、安全的。效率不高的。我们一般用的Socket就是TCP连接。我们访问网站也是TCP/IP协议,建立连接。 Tcp/ip UDP: User Datagram Protocol 用户数据包协议。 无连接、不安全、效率高。 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 (int j = 0; j < values.length - 1- i ; j++) { //j values[j + 1]) { temp = values[j]; values[j] = values[j + 1]; values[j + 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 iEnd=arr.length-1; int searchCount = 0; for(int i=0;isearchWord){ 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 || index<0) { throw new IndexOutOfBoundsException("Node.get():"+index); } else { //index>size/2,反向遍历 if(index>size>>1) { Node temp=this; for(int i=size;i>index;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 || index<0) { throw new IndexOutOfBoundsException("Node.get():"+index); } else { //index>size/2,反向遍历 if(index>size>>1) { Node temp=this; for(int i=size;i>index;i--) { temp=temp.previous; } temp.previous.next=temp.next; temp.next.previous=temp.previous; } else { Node temp=this; for(int i=0;i<=index;i++) { temp=temp.next; } temp.previous.next=temp.next; temp.next.previous=temp.previous; } size--; } } /** * 取得第index个元素 * @param index * @return */ public E get(int index) { //索引越界 if(index>=size || index<0) { throw new IndexOutOfBoundsException("Node.get():"+index); } else { //index>size/2,反向遍历 if(index>size>>1) { Node temp=this; for(int i=size;i>index;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 SyncStack{ int index=0; Mantou[] ms = new Mantou[10]; public synchronized void push(Mantou m){ while(index==ms.length){ try { this.wait(); //wait后,线程会将持有的锁释放。sleep是即使睡着也持有互斥锁。 } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); //唤醒在当前对象等待池中等待的一个线程(随意的)。notifyAll叫醒所有在当前对象等待池中等待的所有线程。 //如果不唤醒的话。以后这两个线程都会进入等待线程,没有人唤醒。 ms[index]=m; index++; } public synchronized Mantou pop(){ while(index==0){ try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } this.notify(); index--; return ms[index]; } } class Shengchan extends Thread{ SyncStack ss = null; public Shengchan(SyncStack ss) { // TODO Auto-generated constructor stub this.ss=ss; } @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 20; i++) { System.out.println("造馒头:"+i); Mantou m = new Mantou(i); ss.push(m); } } } class Xiaofei extends Thread{ SyncStack ss = null; public Xiaofei(SyncStack ss) { // TODO Auto-generated constructor stub this.ss=ss; } @Override public void run() { // TODO Auto-generated method stub for (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(); this.name = 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;i<1000;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 byte[1024]; //为了提高效率,设置缓存数组 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(); }finally{ try { 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(); //reverse } public String reverse2(String str){ char[] c = new char[str.length()]; for(int i=0;istruts1,  spring mvc>JSF >>struts2 4. struts2开发效率较高。但是,struts2运行效率相对较低。是由什么造成的?如何解决? 主要问题:OGNL和值栈。标签。 把展现层替换成:Freemarker 5. 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中,我们能使用普通的SQL查询吗? 怎么做? 能。创建SQLQuery即可。 6. 如何使用hibernate进行分页查询? setMaxResult, setFirstResult 7. 你认为,hibernate有哪些优势? 有哪些劣势? 优势: 1. 是一个优秀的ORM框架。让我们可以以更加面向对象的方式编程。写一写逻辑的时候更加方便。 2. 效率也较高。内部有缓存。一级缓存、二级缓存、查询缓存。 3. 屏蔽了底层数据库的差异。 劣势: 1. 多表查询效率较低。 可以自己写原生查询。 2. 数据量大的时候,效率较低。 8. 实际工作中,如何选用:Hibernate、Ibatis框架? 管理系统:逻辑较复杂、可以采用hibernate。 网站系统:ibatis。 9. get和load方法的区别是什么? get:直接加载对象。如果不存在,则返回null load:懒加载。返回一个假的代理对象。如果真的不存在,则抛出异常。 他们两个方法都会访问:一级缓存、二级缓存(如果开得话) 10. 说出几种常见的主键生成方式? a) native,  identify,  sequence,  uuid,  hilo 11. 手写出一段典型的hibernate插入数据代码 Session session = null; try{ session = HibUtil.getSession(); Transaction tx = session.beginTransaction(); User u = new User(); u.setBirthday(new Date()); u.setName("tttt"); session.save(u); u.setName("bb"); u.setName("ccc"); u.setBirthday(new Date()); // session.clear(); tx.commit(); }finally{ if(session!=null){ session.close(); } }   12. cascade属性,指的是什么意思? 级联。对对象做的操作,同样对这个对象属性也做一样的操作。 13. reverse属性在一对多配置中,有什么作用? false:一方和多方都可以维护外键的值。 true:只有多方维护外键的值。// inverse="false" 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:  Inverse  Of Control 控制反转 DI: Dependency  injection  依赖注入 是一回事。只不过说的不同的方面。IOC讲的控制关系的转换。以前属性的赋值是由对象自己完成。现在是交给了外部的spring来通过反射机制来赋值。 通过set方法注入、或者通过构造器注入、也可以通过普通方法注入(这时候就需要定义接口) 3. 依赖注入的三种方式都是什么? 一般常用哪个方式? setter注入:通过反射调用setter方法。  (我们一般用它) 构造器注入:通过反射调用构造器 接口注入:通过反射调用接口中定义的普通方法 4. spring的aop是否使用了aspectJ框架? 是。 5. 说说,AOP是什么? AOP有什么好处? 动态代理怎么理解? aop:aspect oriented programming。面向切面编程。 aop的核心实现是动态代理。平时常见的是使用JDK提供的InnvocationHandle实现,还可以使用cglib来实现。 struts2使用了JDK提供的动态代理实现,hibernate和spring使用了cglib提供的实现。 动态代理实际上的意思是:动态生成代理类。这样,我们就可以控制代理类的代码,代理类的方法都会去调用InnvocationHandle接口中的invoke方法。 这样的话,我只要一调用代理对象的方法,就会统一跑到invoke方法。然后,我们就可以在invoke方法对所有的方法做统一的预处理、后期处理。 6. 请写出SSH框架整合的步骤 整合hibernate a) 增加相关jar包 b) 增加spring配置文件:applicationContext.xml,文件内容如下: i. 配置组件扫描。让spring管理basePackage和他的子包下所有的类。 ii. 配置dataSource数据源 iii. 配置sessionFactory iv. 配置事务管理(事务增加在service层!) v. 配置HibernateTemplate 整合struts c) 导入jar包 d) 配置web.xml i. 配置指定spring配置文件的路径和名字! ii. 配置opensessionInview过滤器(一定要配置在struts过滤器之前) iii. //opensessioninview iv. 配置struts过滤器 v. 增加spring上下文加载的监听器 e) 增加struts.xml: 增加 7. 如何使用spring的声明式事务管理? 在xml中配置一个事务管理器、然后配置切面。 8. 如果我们要实现定时调度某个任务? 怎么实现,请说出两种实现方式? 第一种:timer、timertask 第二种:通过spring整合使用quatz框架 9. 说说,opensessionInview模式的实现原理? UML问题 1. uml中常用的图有哪些? a) 用例图 b) 类图 c) 时序图 d) 活动图 e) 状态图 数据库问题 1. 事务是什么? 一组要么同时执行,要么同时不执行的SQL语句。 2. 事务的基本特点有哪些? ACID:原子性、一致性、持久性、隔离性。 //原子性  一致性  持久性  隔离性 3. oracle中分页通过什么字段实现? rownum 4. 什么是存储过程? 5. 存储过程是一个概念  和触发器一样重要 在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。 6. 存储过程有什么优势? 1. 一般的sql每次使用都要编译一次。存储过程只要在创建时编译一次即可,以后都是直接执行。因此,效率较高。 2. 当对数据库进行复杂操作时,可以将这个复杂过程封装的存储过程中。方便维护和调用。 3. 安全性较高。可以指定用户来使用我们的存储过程。 7. 存储过程的创建和调用? 创建存储过程 create procedure sp_name() begin ......... end 调用存储过程 1.基本语法:call sp_name() 8. JDBC中如何调用存储过程? Callablestatement  cstmt=  conn.preparecall("{callgettestdata(?,?)}");  //Callablestatement  preparecall 9. 将课堂上,练习过的sql语句复习一遍。考试时经常考察sql语句。不过,能够完成我们课堂上的sql语句,应付笔试没问题。 10. JDBC的使用过程? 加载驱动、创建Connection对象、创建预编译sql对象, 查询、处理结果集、关闭预编译sql对象关闭Connection对象。 11. 手写出jdbc链接mysql/ oracle数据库,并进行查询的典型代码。 public static void testJDBC(){ Connection conn =null; PreparedStatement ps = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); Com.mysql.jdbc.Driver Jdbc://mysql:localhost:3306/ku Jdbc://mysql:localhost:3306/ku conn = DriverManager.getConnection("jdbc://mysql:localhost:3306/myhib","root","123456"); ps = conn.prepareStatement("select id,uname from tb_user where id=?"); ps.setInt(1, 20); rs = ps.executeQuery(); while(rs.next()){ System.out.println(rs.getInt(1)+"---"+rs.getString(2)); } } catch(Exception e) { e.printStackTrace(); }finally{ try { if(rs!=null){ rs.close(); } } catch (Exception e) { e.printStackTrace(); } try { if(ps!=null){ ps.close(); } } catch (Exception e) { e.printStackTrace(); } try { if(conn!=null){ conn.close(); } } catch (Exception e) { e.printStackTrace(); } } }   12. 常见的数据库产品有哪些? oracle、mysql、db2、 sqlserver。 13. jdbc中,事务会自动提交吗? hibernate中,事务会自动提交吗? 会。                          不会。 14. PreparedStatement和statement的区别? PreparedStatement可以提高效率,防止sql注入攻击。 PreparedStatement是statement的子类。 15. 说说,为什么需要数据库连接池? 说说数据库连接池的实现原理? 每次查询数据库都创建Connection对象的话,太消耗资源了。没有必要。 我们可以先创建一堆Connection对象,放到一个容器中。然后,用的时候,取出来即可。用完后,放回到容器中。  这个容器就是所谓的连接池。 16. 说出,你见过的几种数据库连接池产品。 DBCP      proxool      c3po proxool 17. 如果数据量较大,如何优化数据库提高查询效率? 可以在查询较频繁的字段上,建立索引。 起别名? 避免复杂的子查询。如果子查询不可避免,那就要在每次查询是过滤掉尽可能多的行。 //避免子查询 避免使用like查询。更要避免使用复杂的表达式 18. 如果更大,是电信级别的话务数据,你有什么建议? 那可以考虑分布式数据库。比如:oracle、mysql都提供了分布式的实现;或者可以考虑 //、分布式数据库  分布式文件储存系统 使用分布式文件存储系统。比如:hadoop。 设计模式问题 1. 列出你常见的设计模式 工厂模式、单例模式、抽象工厂模式、原型模式、责任链模式、享元模式、策略模式、模板方法模式、 代理模式、装饰器模式、观察者模式等 2. 手写出单利模式的两种实现方式 package com.sxt.test; public class SingltonDemo { //饿汉式 private static SingltonDemo s = new SingltonDemo(); private SingltonDemo(){} //私有化构造器 public static SingltonDemo getInstance(){ return s; } } package com.sxt.test; public class SingltonDemo2 { //懒汉式 private static SingltonDemo2 s; private SingltonDemo2(){} //私有化构造器 public static synchronized SingltonDemo2 getInstance(){ if(s==null){ s = new SingltonDemo2(); } return s; } }   3. 手写出一个简单的工厂模式 package com.sxt.util; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.sxt.test.SingltonDemo2; public class Test { public static void main(String[] args) { CarFactory factory = CarFactory.getInstance(); Car c1 = factory.createCar("奔驰"); } } class CarFactory { private static CarFactory factory; private CarFactory(){} //私有化构造器 public static synchronized CarFactory getInstance(){ if(factory==null){ factory = new CarFactory(); } return factory; } public Car createCar(String type){ if("奔驰".equals(type)){ return new Benz(); }else{ return new BMW(); } } } interface Car { void run(); } class Benz implements Car { public void run() { System.out.println("奔驰再跑!"); } } class BMW implements Car { public void run() { System.out.println("宝马再跑!"); } }   4. 说出spring框架中,你知道使用了哪些设计模式? 工厂模式、单例模式、代理模式(动态代理) 5. 说出hibernate框架中,使用了哪些设计模式? 工厂模式(通过SessionFactory创建session)、单例模式(创建SessionFactory类就是单例)、代理模式(动态代理,懒加载) 6. javase中,IO流一章使用了哪个典型的设计模式? 装饰器模式。 struts2里面request、session对象的处理也是用的装饰器模式。 web service问题 1. 简单说说web service 是由企业发布的可以完成特定需求的在线服务支持。数据描述采用xml,信息交换协议是SOAP。 由于数据描述采用了xml,因此为我们提供了跨平台、跨语言的服务支持。 //由企业发布可以完成特定需求的在线服务支持  xml  信息交互协议 xml Linux问题 1. linux下,查看进程的命令是什么?  终止进程是什么命令? top                            top  -k  -k 2. 写出几个常用的linux命令? ls    cd  mkdir  rm  rmdir  man  cp  mv  cat  whereis    ln    grep 3. 连接linux服务器,你一般用什么软件? a) Ssh 4. putty,vnc,ssh等软件连接服务器.  Putty  vnc ssh vnc 杂七杂八问题 1. 想操作office中的word文档、excel文档、 ppt 关于艾滋病ppt课件精益管理ppt下载地图下载ppt可编辑假如ppt教学课件下载triz基础知识ppt 文档。可以用什么开源软件? POI 2. 报表开发中,想画出柱形图、折线图、饼图等,可以使用哪些开源软件? Jfreechart 3. 开发一个网站,想使用缓存提高访问。可以使用哪个开源软件? oscache做页面缓存。 4. 说说搜索引擎开发的流程。都用到哪些开源软件? 第一步:抓取数据。 (wget是c语言写的。网络爬虫) 第二步:解析和分析html数据(HtmlParser) htmlParser Lucene 第三步:建立索引文件(Lucene) 第四步:查询(Lucene) 第1題    Given: 35.    String #name = "Jane Doe"; 36.    int $age = 24; 37.    Double _height = 123.5; 38.    double ~temp = 37.5; Which two statements are true? (Choose two.) A.  Line 35 will not compile. B.  Line 36 will not compile. C.  Line 37 will not compile. D.  Line 38 will not compile. 答案:AD 解析:本题考查的时标识符的命名规则。35行和38行命名不能以#号、~号特殊字符开头。 答题者:尚学堂1108 张小三 1 1-15 2 16-30 3 15*(n-1)+1-----15*n
本文档为【尚学堂java笔试和面试技术题目总结】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_314871
暂无简介~
格式:doc
大小:114KB
软件:Word
页数:0
分类:
上传时间:2019-04-21
浏览量:0