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

    第一部分

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

    会执行

    在return 执行之前执行

    2.写出通过主函数在控制台打印出“helloworld”的程序。

    package cn.ssdf.test;

    public class Test01{

    public static void main(String [] args) {

                System.out.println(“hello,world”);

    }

    }

    3.JQuery选取页面元素iddeptid的写法

    $(“#deptid”);

    4.编程实现:将字符串“hello worldhello java”输出为“hello worldworld hello.

    String str = “hello world,hello java”;

    str.replace(“hello java”,” world hello”);

    5.简述strut2hibernatespring三个框框架各自的功能

    hibernate是一个持久层框架,对JDBC进行了封装,负责对数据库的CRUD操作;

    strut2是三层开发中的表现层的框架,MVC模式中的model层;很好的实现页面的跳转和用户输入信息的验证,处理用户请求信息并返回显示页面给用户;

    spring是一个轻量级框架,两大特性:IOC和AOP;通过IOC-控制反转将对象的创建交给spring容器,解决各层业务层和dao层之间的过度依赖;AOP面向切面,对事物进行很好的管理,支持多个框架例如:hibernate、struts2、mybatis等。

    6.简述Spring框架中如何控制事务

    Spring支持两种类型的事务管理:这意味着你的业务代码分开事务管理。你只用注释或基于XML 配置来管理事务。

    编程式事务管理:

    编程式事务管理办法允许您管理与编程的源代码的帮助下事务。这就给了极大的灵活性,但它难以维护。

    声明式事务管理:

    声明式事务管理的方法可帮助您管理配置,而不是在源代码中硬编码的事务。这意味着,可以单独从业务代码事务管理。只用注释或基于XML配置来管理事务。bean的配置将指定的方法是事务性。以下是声明性与事务相关的步骤:

    我们使用<tx:advice/>标签,这将创建我们定义了一个切入点匹配所有我们想做成事务,并引用其中的事务通知方法的事务并同时处理建议。

    7.写出sql语法中左外连接的关键字,并且叙述左外连接的含义

    关键字:left join ……on……

    含义:查询结果左表为准,左表内容全部显示,右表对应的内容不管有没有内容都显示出来。

    8.oracle数据库表A中有类型为varchart2deptcode的字段,通过sql实现deptcode字段中第二位到第四位等于03的所有记录。

    select * from A where substr(“deptcode”,2,4) = “03”;

    9.如何看软件产品的易用性、可扩展性

    可维护性是说,对于前期开发的代码,后期在进行机能改善和扩充时,修改方便。不会出现推倒重新编写。

    易用性是说,代码简洁明了,不冗余。

    10.说说你个人的优点与缺点

    第二部分

    1.short S1=1;S1=S1+1;有什么错?short S1=1;S1+= 1;有什么错?

    前面一句中,s1 = s1 + 1需要进行强转,写成s1 = (short)(s1 + 1),后面一句没错。

    2.用最有效率的方法算出2乘以8等于几?

    2<<3

    3.请说出作用域public,private,protected,以及不写时的区别

    public 所有地方都可以使用

    protected 同一类、同包和子类中可以使用

    private 仅限本包内使用

    不写时  在同一类和本包中可以使用

    4.构造器Constructor是否可被override

    不可以被重写,但是可以重载。

    5.是否可以继承String

    不可以,因为String类有final修饰符,而final修饰的类是不能被继承的

    6.描述一下JVM加载class文件的原理机制

    类装载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件,在java中类装载器把一个类装入JVM,经过以下步骤:

    (1)装载:查找和导入Class文件

    (2)链接:其中解析步骤是可以选择的

    (a)检查:检查载入的class文件数据的正确性

    (b)准备:给类的静态变量分配存储空间

    (c)解析:将符号引用转成直接引用

    (3)初始化:对静态变量,静态代码块执行初始化工作

    类装载工作由ClassLoder和其子类负责。JVM在运行时会产生三个ClassLoader:根装载器,ExtClassLoader(扩展类装载器)和AppClassLoader,其中根装载器不是ClassLoader的子类,由C++编写,因此在java中看不到他,负责装载JRE的核心类库,如JRE目录下的rt.jar,charsets.jar等。ExtClassLoader是ClassLoder的子类,负责装载JRE扩展目录ext下的jar类包;AppClassLoader负责装载classpath路径下的类包,这三个类装载器存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。默认情况下使用AppClassLoader装载应用程序的类

    Java装载类使用“全盘负责委托机制”。“全盘负责”是指当一个ClassLoder装载一个类时,除非显示的使用另外一个ClassLoder,该类所依赖及引用的类也由这个ClassLoder载入;“委托机制”是指先委托父类装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。这一点是从安全方面考虑的,试想如果一个人写了一个恶意的基础类(如java.lang.String)并加载到JVM将会引起严重的后果,但有了全盘负责制,java.lang.String永远是由根装载器来装载,避免以上情况发生

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

    Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。

    8.STRUTS的应用(如STRUTS架构)

    Struts 是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能:一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。

    9.hibernateinverse属性的作用

    hibernate的属性inverse:它是用来指定关联的控制方的,inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联由对方控制。

    10.介绍一下hibernate的二级缓存

    二级缓存是独立于Hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例如,EHCache和OSCache等等。在Hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己的配置文件,最后要配置Hibernate中的哪些实体对象要纳入到二级缓存的管理中。一个SessionFactory可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数据,当使用Hibernate 的二级缓存后,注意不要有其他的应用或SessionFactory来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。

    11.table显示n条记录,每三行换一次颜色,即123用红色字体,456用绿色字体,789用红色字体

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

    <html> 

      <head> 

          <script type="text/javascript"> 

            window.onload=function() { 

                   var tbl = document.getElementById("tbl"); 

                   var rows = tbl.getElementsByTagName("tr"); 

                   for(i=0;i<rows.length;i++) { 

                          var j = parseInt(i/3); // 此语句的效果是,以3个为单位,000 111 222 333 444 ... 

                          if(j%2==0) rows[i].style.backgroundColor="#f00"; 

                          else  rows[i].style.backgroundColor="#0f0"; 

                   } 

            }; 

          </script> 

      </head> 

      <body> 

        <table id="tbl" border="1"> 

           <tr><td>1</td></tr> 

           <tr><td>2</td></tr> 

           <tr><td>3</td></tr> 

           <tr><td>4</td></tr> 

           <tr><td>5</td></tr> 

           <tr><td>6</td></tr> 

           <tr><td>7</td></tr> 

           <tr><td>8</td></tr> 

           <tr><td>9</td></tr> 

           <tr><td>10</td></tr> 

           <tr><td>11</td></tr> 

           <tr><td>12</td></tr> 

           <tr><td>13</td></tr>

        </table> 

      </body> 

    </html> 

    12.第一个人10,第二个比第一个大2岁,一次递推,请用递归方式计算出第八个人多大?

    package com.test; 

    public class ComputeAge { 

        /**

         * 递归函数的执行过程具有三个特点: 

         * 1、函数名相同 2、不断地自调用 3、最后被调用的函数要最先被返回

         * @param n

         * @return

         */ 

        public static int getComputeAge(int n) { 

            int age = 0; 

            if (n == 1) { 

                age = 10; 

            } else { 

                age = getComputeAge(n - 1) + 2; 

            } 

            return age; 

        } 

        public static void main(String[] args) { 

            System.out.println(getComputeAge(8)); 

        } 

    13。请写出用于校验HTML文本框中输入的内容全部为数字的javascript代码

    <input type="text" id="d1" onblur=" chkNumber(this)"/>

    <script type=”text/javascript” />  

    function chkNumber(eleText) {

                  var value =eleText.value;

                  var len =value.length;

                  for(vari=0;i<len;i++) {

                         if(value.charAt(i)>"9"||value.charAt(i)<"0") {

                                alert("含有非数字字符");

                                eleText.focus();

                                break;

                         }

                  }

           }

    </script>

    14.查出比经理薪水还高的员工信息

    wzg大于flx,lhm大于zxx

    select e.*

    from employees e,employees m

    where e.managerid=m.id 

    and e.salary>m.salary;

    15.一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决?

    alter table drop column score;

    alter table add colunm score int;

    可能会很快,但是需要试验,试验不能拿真实的环境来操作,并且要注意,这样的操作时无法回滚的,只有inert update delete等DML语句才能回滚,对于create table,drop table ,alter table等DDL语句是不能回滚。

      解决方案一,update user set score=0;

      解决方案二,假设上面的代码要执行好长时间,超出我们的容忍范围,那我就alter table user drop column score;alter table user add column score int。

       下面代码实现每年的那个凌晨时刻进行清零。

    Runnable runnable = new Runnable(){

       public void run(){

           clearDb();

           schedule(this,new Date(new Date().getYear()+1,0,0));

        }

     };

         schedule(runnable,

         new Date(new Date().getYear()+1,0,1));

  • 相关阅读:
    [转] 公共DNS,114.114.114.114和8.8.8.8
    [转] linux nc命令
    [转] Gitlab 8.x runner安装与配置
    HDFS 删除大量文件
    [转] java获取hostIp和hostName
    [转] scala中:: , +:, :+, :::, +++的区别
    Linux shell 中提取zip或jar文件中的某个文件
    [转] watch 命令使用(linux监控状态)
    [转] Citrix XenDesktop桌面登录VM提示Citrix Web插件错误
    Git sparse-checkout 检出指定目录或文件
  • 原文地址:https://www.cnblogs.com/kuoAT/p/6681842.html
Copyright © 2011-2022 走看看