zoukankan      html  css  js  c++  java
  • java面试题

    面试了一家,两家,三家。。。什么时候能拿到offer!!技术,技术!在求职中总结,加油!

    1.什么是java,为什么开源,跨平台
    答:

         Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言
         Java 技术具有卓越的通用性、高效性、平台移植性和安全性
         因为JAVA有个属于自己的运行环境,既:JAVA虚拟机,虚拟机与平台无关,JAVA代码经过编译后,直接运行于虚拟机上,实现了跨平台。

    2.j2ee 结构

    答:

    j2ee就是java企业版,是基于java的jsp servlet javabean 等等一系列技术体系的统称
    j2ee的三层架构
    表现层:主要功能在于数据的显示,数据如何表现。
    应用层:主要是对于业务的处理以及数据的处理。
    数据层: 主要是实现与数据库的交互。

    3.oracle 简单操作
    答:

    删除满足条件的行:
    delete from table_name where your_conditions;
    commit;
    删除表中的全部数据:
    trancate table table_name;
    删除表:
    drop table table_name;

    4.Linux 创建文件,文件夹

    答:

    打开root
    进入到了home的文件夹
    1如果你要在那里建一个叫test的文件夹
    输入 cd /home 回车 就到了home目录
    输入 mkdir test 就可以了
    2如果在文件夹里添加(就是创建) 一个文件 例如a.txt
    输入 touch test/a.txt 回车
    3删除 rm -rf test/ 回车

    5.spring 核心接口

    答:

    1.BeanFactory最基础最核心的接口
    重要的实现类有:
    XmlBeanFactory,以及ApplicationContext接口下的类

    2.Resource接口,可以通用地访问文件资源
    1)ClassPathResource:读取得形式为"classpath:ApplicationContext.xml"
    2)FileStstemResource:读取得形式为"file:c:\spring\src\ApplicationContext.xml"
    3)ServletContextResource:读取得形式为"WEB-INF\ApplicationContext.xml"
    //ResourceLoader类用于载入Resource

    3.FactoryBean工厂bean
    它本身在bean factory中定义,同时又是用于创建目标bean的工厂
    spring有以下实现:
    1)JndiObjectFactoryBean:通过JNDI查找获取对象
    2)LocalSessionFactoryBean:用于在本地装配Hibernate SessionFactory
    3)LocalSessionFactoryBean:用于在本地装配JDO PersistenceManagerFactory
    4)ProxyFactoryBean:用于获取AOP的代理
    5)TransactionProxyFactoryBean:用于为对象创建事务代理,用于实现简捷易用的声明性事务代理
    6)RmiProxyFactoryBean:为通过RMI访问的远程对象创建一个代理

    4.ApplicationContext加强了BeanFactory的功能,支持以下功能
    1)国际化支持
    2)资源访问
    3)事件监听机制
    它的重要的实现类有:
    FileSystemXmlApplicationContext,ClassPathXmlApplication,XmlWebApplicationContext

    5.Bean生命周期的回调接口
    BeanFactoryPostProcessor,InitializingBean,DisposableBean,BeanFactoryAware,ApplicationContextAware,ResourceLoader,BeanPostProcessor

    6.MessageSource接口
    它的实现类有ResourceBundleMessageSource,ReloadableResourceBundleMessageSource.后者在属性文件修改后会重新载入

    6.什么是索引,主键,外键

    答:

    索引是对数据库表中一列或多列的值进行排序的一种结构,
    使用索引可快速访问数据库表中的特定信息。
    主键:
    能够唯一表示数据表中的每个记录的【字段】或者【字段】的组合就称为主码(主键)。 一个主键是唯一识别一个表的每一记录,但这只是其作用的一部分,主键的主要作用是将记录和存放在其他表中的数据进行关联。在这一点上,主键是不同表中各记录之间的简单指针。所以,主键的值对用户而言是没有什么意义,并且和它要赋予的值也没有什么特别的联系。

    外键:
    若有两个表A,B,key是A的主键,而B中也有key字段,则key就是表B的外键。

    索引:

    索引只是加快查询,排序速度,主键和外键定义后可保证数据完整性,省去编写某些触发器。主键最好每张表上都定义,小数据库用唯一索引也可以。

    每个表最好有主键,用来保证数据完整性。表的外键是另一表的主键,外键将两表联系起来。 索引只是提高查询排序的速度。

    7.hibernate中的核心接口

    答:

    Hibernate的核心接口一共有5个,分别为:Session、SessionFactory、Transaction、Query和Configuration。
    这5个核心接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。
    下面对这五的核心接口分别加以介绍。
    ·Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。
    但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。
    这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSesion对象称为用户session。
    ·SessionFactory接口:SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。
    这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,
    当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
    ·Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,
    Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。
    ·Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。
    ·Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
    Criteria接口与Query接口非常类似,它允许你创建并执行面向对象的标准化查询。值得注意的是Query接口也是轻量级的,它不能在Session之外使用。
    Callback接口 当一些有用的事件发生时――例如持久对象的载入、存储、删除时,Callback接口会通知Hibernate去接收一个通知消息。一般而言,Callback接口在用户程序中并不是必须的,但你要在你的项目中创建审计日志时,你可能会用到它。

    7.二叉树。遍历

    答:

    前序遍历 根 左子树 右子树
    中序遍历 左子树 根 右子树
    后序遍历 左子树 右子树 根

    8.链表,队列,堆栈的区别

    答:

    1、栈是个有底的口袋,像袜子。
    队列是没底的口袋,像通心粉。
    所以:栈的特点是先进后出,队列的特点是先进先出。
    2、主要区别是适用的地方不一样,
    链表实际上可以认为是一种数据的物理组织形式,是用指针或对象的引用组织起的一种数据的存储方式.
    队列和堆栈是一个更高层次的概念,其底层可以是用链表也可以是用数组来实现.
    队列和堆栈的主要区别是进出的顺序不一样,
    队列是先进先出,堆栈是后进先出.
    3 、队列和堆栈是一种特殊的数据组织形式。
    可以把他们看成是一系列的集合。
    队列可以看成是有2个口的集合一个口叫队头一个叫队尾,只能在对头进行删除操作,在队尾做插入。根据这样的操作。队列特点是先进先出
    堆栈可以看成是有1个口的集合,这个口叫栈顶。插入和删除操作只能在栈顶操作。根据这样的操作。堆栈的特点是是后进先出.
    链表是一种存储方式,它可以在非连续的内存空间里面存储一个集合的元素。和它对应的是数组,数组要在连续的空间里存储集合的元素

    理解:堆栈----应用的场景: 如系统的中断处理。最先中断的程序在堆栈的最下面,最后中断的程序在最上面。先处理最后发生的中断。
    队列----队列很容易理解,它主要应用在网络通信、系统等。windows的所有事件都是放在队列里面的。

    最典型的,就是系统的任务分配了,每个进程或线程都分配在某些队列里,方便cpu时间片的分配调度,任务的运行不可能是你最后打开的程序先运行吧,当然它有优先级,这个排除在外。

    9.jsp,servlet区别

    答:

    1、Servlet中没有内置对象,原来Jsp中的内置对象都是必须通过HttpServletRequest对象,或由 HttpServletResponse对象生成。
    2、对于静态的HTML标签,Servlet都必须使用页面输出流诼行输出。
    3、Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,至于Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service 方法用于生成对客户端的响应。
    4、在MVC结构中,Servlet是C(control)层,JSP是V(View)层。
    5、编程方式不同
    JSP是为了解决Servlet中相对困难的编程技术而开发的技术,因此,JSP在程序的编写方面比Servlet要容易的多,Servlet严格遵循Java语言的编程标准,而JSP则遵循脚本语言的编制标准。
    6、Servlet必须在编译以后才能执行
    JSP并不需要另外进行编译,JSP Container会自动完成这一工作,而Servlet在每次修改代码之后都需要编译完才能执行。
    7、运行速度不同
    由于JSP Container将JSP程序编译成Servlet的时候需要一些时间,所以JSP的运行速度比Servlet要慢一些,不过,如果JSP文件能毫无变化的重复使用,它在第一次以后的调用中运行速度就会和Servlet一样了,这是因为JSP Container接到请求以后会确认传递过来的JSP是否有改动,如果没有改动的话,将直接调用JSP编译过的Servlet类,并提供给客户端解释执行,如果JSP文件有所改变,JSP Container将重新将它编译成Servlet,然后再提交给客户端
    JSP的职责:从数据库取出数据,显示所有的留言信息(当中要用少量的,简单的逻辑处理:循环)、显示签写留言的页面(几乎全部都是html)。
    Servlet的职责:接受签写留言页面提交过来的标单数据,进行数据检验,如果正确,则存入数据库并返回留言的显示页面;如果数据有误,给出错误提示后返回签写留言的页面。可以看到,这个就叫做逻辑处理。这些你也完全可以放在JSP中实现,但是用Servlet,其效率和安全性高多了,也让JSP页面变得很简洁明了。

    10.string stringbuff stringbuffer区别
    答:

    STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,
    特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法

    11.session,cookie 区别

    答:

    Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。
    Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。

    12.&和&&的区别

    答:

    &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and).

    13.wait()sleep的区别

    答:

    sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,把执行机会给其他线程,
    但是监控状态依然保持,到时候会自动恢复。调用sleep不会释放对象锁。
    wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的
    等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

    14.hashMap和hashtable区别

    答:

    HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),
    由于非线程安全,效率上可能高于Hashtable.

    15.forword,redirect区别
    答:

    前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,
    并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用
    forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

    16.JSP的四种范围

    答:

    JSP 有四种范围,分别为Page、Request、Session、Application。
    http://hi.baidu.com/bruce203/blog/item/1bc5f82a5cff71f3e7cd4084.html

    17.ArrayList类与Vector区别

    答:

    一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的
    二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

    18.java中有几种类型的流?JDK为每种类型的流提供了一些抽象方法以供继承,请说出他们分别是哪些类?
    答:

    字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于Reader Writer。
    在java.io包中还有许多其他的流,低层流与调层流,高层流主要是为了提高性能和使用方便。

    19.常见的接口,包,类
    答:

    常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer
    常用的包:java.lang java.awt java.io java.util java.sql
    常用的接口:Remote List Map Document NodeList

    20.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
    答:

    会执行,在return前执行。
    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
    是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
    swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
    switch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

    编程题:

    写一个Singleton出来
    Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
    一般Singleton模式通常有几种种形式:
    第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
    public class Singleton {
      private Singleton(){}
      //在自己内部定义自己一个实例,是不是很奇怪?
      //注意这是private 只供内部调用
      private static Singleton instance = new Singleton();
      //这里提供了一个供外部访问本class的静态方法,可以直接访问  
      public static Singleton getInstance() {
        return instance;   
       }

    }
    第二种形式:
    public class Singleton {
      private static Singleton instance = null;
      public static synchronized Singleton getInstance() {
      //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
      //使用时生成实例,提高了效率!
      if (instance==null)
        instance=new Singleton();
    return instance;   }
    }
    其他形式:
    定义一个类,它的构造函数为private的,所有方法为static的。
    一般认为第一种形式要更加安全些

     最大数和最小数之间的和。
    public class TestSum {
    public static void main(String[] args) {
    int a[] ={12,3,2,4,5,49};
    Arrays.sort(a);
    int sum=0;
    for (int i = 1; i < a.length-1; i++) {
    sum += a[i];
    }
    System.out.println(sum);
    }
    }

    验证用户名条件:1.长度必须在3-15之间2.必须以字母开头,等

    答:好像是用到正则表达式

    写一个方法,验证一个字符串。正序和倒序是否相等。例如(1234567654321)

    冒泡排序

    ajax的核心

    sock通信技术

    JDBC配置
    输出一个文件下的所有文件
    servlet运行机制

    什么是事务

    get.post的区别 

    数据库:

    创建表(主建索引)分页查询;id为5的内容更新成id为8的内容;最新发表的五条信息;

    mvc的理解,好处

    struts2好处,运行原理。

    反射机制。

    如何创建拦截器

    数据库的优化

    由于时间有限,以上答案仅供参考,下面还有好多问题未总结答案,如果您有时间,希望您能把我总结下!谢谢 

  • 相关阅读:
    Codeforces_462_B
    Codeforces_460_B
    Codeforces_456_A
    2016.11.27
    Buy the Ticket{HDU1133}
    高精度模板
    盐水的故事[HDU1408]
    测试你是否和LTC水平一样高[HDU1407]
    完数[HDU1406]
    Air Raid[HDU1151]
  • 原文地址:https://www.cnblogs.com/liuxiuhao/p/2515033.html
Copyright © 2011-2022 走看看