java开发面试题100%公司笔试题你都能碰到几个(3)

126. 写一个程序,把一个文件的数组按对角线做对称变换,并输出!

一个正方形里面全数字,写一个程序,成对角线转变! 我做的这个是3行3列的对角互换,也许转换规则不一样

public class testMain {
    public static void main(String[] args) {
        int a[][]=new int[3][3];
        int c=1;
        //初始化数据
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                a[i][j]=c++;
}
        }
        System.out.println("转换之前:");
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                System.out.print("a["+i+"]["+j+"]="+a[i][j]+"   ");
            }
            System.out.println("\n");
        }
for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                if((i+1<3&&j+1<3)&&i==j&&i!=0&&i!=3-i){
                    int temp=a[i-1][j-1];
                    a[i-1][j-1]=a[i+1][j+1];
                    a[i+1][j+1]=temp;
                    temp=a[i-1][j+1];
                    a[i-1][j+1]=a[i+1][j-1];
                    a[i+1][j-1]=temp;
                }
            }
        }
        System.out.println("转换之后:");
        for(int i=0;i<3;i++){
            for(int j=0;j<3;j++){
                System.out
print("a["+i+"]["+j+"]="+a[i][j]+"   ");
            }
            System.out.println("\n");
        }
    }
}
127. 再SSH框架中,用流程表示处理过程。从Request, Response
java开发面试题100%公司笔试题你都能碰到几个(3)_第1张图片
image.png
128. 人民币小写转成大写,写个java程序和思路(写10100.00转成汉字壹万零壹百整)
public class Money {
    public static void main(String[] args) {
        // 金额大小写转换
        float money = 2038.0f;
        int m1, m2, m3, m4, m5, m6, temp;
        temp = (int) (money * 100);
        System.out.println(money);

        m1 = temp % 1000000 / 100000;
        m2 = temp % 100000 / 10000;
        m3 = temp % 10000 / 1000;
        m4 = temp % 1000 / 100;
        m5 = temp % 100 / 10;
        m6 = temp % 10;

        char c1, c2, c3, c4, c5, c6;
        c1 = transe(m1);
        c2 = transe(m2);
        c3 = transe(m3);
        c4 = transe(m4);
        c5 = transe(m5);
        c6 = transe(m6);
        String str = "";
        if (m1 != 0) {
            str += c1 + "千";
        }
        if (m2 != 0) {
            str += c2 + "百";
        }
        if (m1 != 0 && m2 == 0 && (m3 != 0 || m4 != 0)) {
            str += "零";
        }
        if (m3 != 0) {
            str += c3 + "十";
        }
        if (m2 != 0 && m3 == 0 && m4 != 0) {
            str += "零";
        }
        if (m4 != 0) {
            str += c4;
        }
        str += "元";
        if (m5 == 0 && m6 == 0) {
            str += "整";
        }
        if (m5 != 0) {
            str += c5 + "角";
        }
        if (m5 == 0 && m6 != 0) {
            str += "零";
        }
        if (m6 != 0) {
            str += c6 + "分";
        }

        System.out.print(str + "\n");
        System.out.println("..........................");

    }

    public static char transe(int m) {
        char r = ' ';
        switch (m) {
        case 0:
            r = '零';
            break;
        case 1:
            r = '壹';
            break;
        case 2:
            r = '贰';
            break;
        case 3:
            r = '叁';
            break;
        case 4:
            r = '肆';
            break;
        case 5:
            r = '伍';
            break;
        case 6:
            r = '陆';
            break;
        case 7:
            r = '柒';
            break;
        case 8:
            r = '捌';
            break;
        case 9:
            r = '玖';
            break;

        }
        return r;
    }
}
129. 针对一个分期付款,总期为1年,给定分期金额,期数和开始还款时间,计算出各期还款日期。
package demo;

import java.util.Calendar;
import java.util.Date;

public class TestDemo {
    
    // 分期付款,总期为1年,给定分期金额,期数和开始还款时间
    // 计算出各期还款日期
    public void huankuan(double amount,int  num,Date start){
        int period = 365/num; // 一年中分期间隔天数
        
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.YEAR, start.getYear()+1900);
        cal.set(Calendar.MONTH, start.getMonth());
        cal.set(Calendar.DATE, start.getDate());
        
        for(int i=1;i<=num;i++){            
            System.out.println(" 第" + i + "期还款日期: " + cal.getTime().toLocaleString());
            cal.add(Calendar.DATE, period);
        }            
    }
        public static void main(String[] args) {
        TestDemo demo = new TestDemo();
        demo.huankuan(20000.00, 1, new Date());

    }

}
130. 用java写从1加到100

sum = (1+i)*i/2 i=100 最简单的方法

public   class   Hello5050{   
   public   static   void   main(String[]   args){   
  for   (int   i=1;i<=100;i=i++)   
  {   
  System.out.println(++i);   
  }   
  }   
  }
131. SSH的优点和缺点

优点: ssh把数据库,实体,配置都整合,封装
层次的结构(偏于mvc模式)
而且框架的融合,代码的耦合都很不错
对于编程的持续化,扩展化,维护化都很棒 ,SSH已经把底层实现封装好了,开发人员可以更专注于业务处理,
缺点: 出现错误容易搞的复杂
如果某个框架不是很熟悉的话(特别是spring)那就很麻烦
运行速度比较慢

132. 用JDBC来实现访问数据库记录可以采用下面的几个步骤:

1、 通过驱动器管理器获取连接接口。
2、 获得Statement或它的子类。
3、 限制Statement中的参数。
4、 执行Statement。
5、 查看返回的行数是否超出范围。
6、 关闭Statement。
7、 处理其它的Statement
8、 关闭连接接

133. overload和override的区别

override是方法重载,用在同一个类中,是几个方法的名字相同,返回值相同,但是参数列表不同,举例来说就像构造函数,可以后多个构造函数,并且每个的参数列表都不同,这样可以用多种方式构造对象。
overload是方法覆盖,用在父子类中,是方法名字相同,参数列表也相同,声明形式都相同,但是子类方法的权限不允许小于父类,不允许抛出比父类更多的异常

134. 最常见的runtime exception运行时异常?

数字转换异常,类异常ClassCastException NumberFormatException ArrayIndexOutOfBoundsException:数组越界 ClassCastException:类型转换错误
ArithmeticException:算术错误,典型的就是0作为除数的时候。IllegalArgumentException:非法参数 IndexOutOfBoundsException NullPointerException
SystemException ArrayStoreException

135. 描述工厂模式和单例优缺点 举例在什么情况下用。

单例 保证一个类只有单一的实例,也就是说你无法通过New或CreateInstance来创建这个类的一个新实例 好处:当一个对象在程序内部只能有一个实例的时候,它可以保证我们不会重复创建,而是始终指向同一个对象。 缺点就是 它就是在内存上共享,都可以去访问它,而且多个用户访问的都是同一个实例,会造成线程不安全。

  /**
  * IOC模式简单实例
  */
 
  /**
  * 运行类
  */
  public class MainClass {
      /**
      * 主函数
      */
      public static void main(String[] args) {
          try {
             PrinterFactory.createPrinter().printByString("Hello World~!");
          } catch (Exception ex) {
             System.out.println(ex.toString());
         }
     }
 }
 
  /**
  * Printer接口
  */
  interface IF_Printer {
      /**
      * 接口printByString方法声明
      */
     public void printByString(String str);
 }
 
  /**
  * MyPrinter实现Printer接口
  */
  class MyPrinter implements IF_Printer {
      public void printByString(String str) {
         System.out.println(str);
     }
 }
 
  /**
  * IF_Printer对象工厂,用于创建实现接口的类对象
  */
  class PrinterFactory {
      /**
      * 工厂方法,返回IF_Printer接口实例
      */
     public static IF_Printer createPrinter() throws InstantiationException,
              ClassNotFoundException, IllegalAccessException {
         String str = "MyPrinter";//通过字符串寻找实现接口的类,字符串可从文件中读取获得,从而实现IOC模式
         return (IF_Printer) Class.forName(str).newInstance();//返回IF_Printer接口实例
     }
 }
136. 创建一个序列号,从1000开始,每次增加1,最大到999999

create sequence newstudno increment by 1
start with 10001 maxvalue 99999

137. 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
public class ThreadTest1{    
private int j;    
public static void main(String args[]){    
ThreadTest1 tt=new ThreadTest1();  
Inc inc=tt.new Inc();   Dec dec=tt.new Dec();    
for(int i=0;i <2;i++){    
Thread t=new Thread(inc);    
t.start();    
t=new Thread(dec);  //???这个前面不要加Thread吗 
t.start();    
}    
}    
private synchronized void inc(){  //???为什么要加锁呢 不加可以吗  
j++;    
System.out.println(Thread.currentThread().getName()+"-inc:"+j);    
}                      //???currentThread()有什么作用呢是什么方法 
                            //???getname呢 
private synchronized void dec(){    
j--;    
System.out.println(Thread.currentThread().getName()+"-dec:"+j);    
}    
class Inc implements Runnable{    
public void run(){    
for(int i=0;i <100;i++){    
inc();    
}    
}    
}    
class Dec implements Runnable{    
public void run(){    
for(int i=0;i <100;i++){    
dec();    }    }    }    }
138. 十六进制的216转换十进制是多少:

216是16进制,转10进制:
=216^2+1161+6*160
=512+16+6
=536

139. Java中的XML解析方式: dom和jdom解析

Java中处理XML文档的标准API有两种,即XML的简单API(SAX,Simple API for XML)和文档对象模型(DOM, Document Object Model),其他的API,如JDOM,dom4j等。
基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。通过DOM接口,应用程序可以在任何时候访问XML文档中的任何一部分数据。
 基于树的处理的优点和缺点
 优点
 树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改
 可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理
 DOM API是读写的,而不象SAX那样是只读的。
 缺点
 在内存中构建一个DOM树开销比较大
 创建一棵 DOM 树可能是一个缓慢的过程
 DOM不象SAX那样可以提供很多XML文档中的信息。比如非分析实体、标记、属性类型和DTD中的声明。
SAX是一个基于事件的 API。解析器向一个事件处理程序发送事件,比如元素开始和元素结束,而事件处理器则处理该信息。应用程序本身就能够处理该数据。原始的文档仍然保留完好无损
 优点:
 可以解析任意大小的文件;
 适合创建自己的数据结构;
 适合小信息子集;
 简单;
 快速
 缺点:
 不能对文档做随机存取;
 难以实现复杂的查询;
 不能使用文档类型定义(DTD);
 不可获取词法信息;
 SAX是只读的;
 当前的浏览器不支持SAX;
JDOM是java document object model的简称,JDOM兼顾了DOM和SAX的优点,它会提供适配器用来选择具体的XML解析器。JDOM是一个源代码开发的项目,它基于树型结构,利用纯Java的技术对XML文件实现解析、生成、序列化以及多种操作。在 JDOM 中,XML 元素就是 Element 的实例,XML 属性就是 Attribute 的实例,XML 文档本身就是 Document 的实例。因此创建一个新 JDOM 对象就如在 Java 语言中使用 new 操作符一样容易。JDOM 使用标准的 Java 编码模式。只要有可能,它使用 Java new 操作符而不故弄玄虚使用复杂的工厂化模式,使对象操作即便对于初学用户也很方便。

140. UML几种图及用途?

单一的图形不可能包含系统所学的所有信息,更不可能描述系统的整体结构,所以系统通常是从多个不同的方面来描述的,分别对应UML的几种视图:
 用例视图--从使用者角度描述系统功能
 逻辑视图—描述系统内部如何实现
 组件视图—描述系统有哪些组件/模块构成
 并发视图—描述系统内部的通信与并发问题
配置视图—描述系统软硬件的配置与位置关系


java开发面试题100%公司笔试题你都能碰到几个(3)_第2张图片
image.png

 用例图—描述系统的参与者与用例之间的关系
 类图—描述系统中的概念及它们之间的关系
 对象图—描述系统中实例及它们之间关系
 状态图—描述系统中对象所具备的状态,及触发状态改变的事件
 时序图—描述对象之间发送消息的时间顺序
 协作图—描述对象之间协作关系
 活动图—描述执行过程中涉及的活动及状态变化
 组件图—描述系统组件之间的关系
配置图—描述系统的硬件及软件的物理结构

141. 列举你接触过的框架,说明特点和原理

struts框架具有组件的模块化,灵活性和重用性的优点,同时简化了基于MVC的web应用程序的开发,缺点:Taglib是Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯 Struts将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度,工作原理 :用一个servlet拦截用户的请求,并分发到具体的action中去处理,再将返回的response进行封装,这是处理页面流程的机制,另外还有一些标签,非常容易在页面进行显示。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
Spring 也表示是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

142. Struts Hibernate Spring 在程序中用到哪些

典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。

表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。

中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。

Web层,就是MVC模式里面的“C”(controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts。

Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。

DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。

PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。

Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。

一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。框架通常能很好的解决一个问题。然而,你的应用是分层的,可能每一个层都需要各自的框架。仅仅解决UI问题并不意味着你能够很好的将业务逻辑和持久性逻辑和UI 组件很好的耦合。

143. 你对面向对象思想的理解?

面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
面向对象的特征

(1)对象唯一性。
每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

(2)分类性。
分类性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

(3)继承性。
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。
在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。
采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。

(4)多态性(多形性)
多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方式去响应共同的消息。
多态性增强了软件的灵活性和重用性。

数组和链表的理解,及优缺点?

144. 链表是一种常见的数据组织形式,它采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费。

A 从逻辑结构来看
  
  A-1. 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。
  
  A-2. 链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)
  
  
  B 从内存存储来看
  
  B-1. (静态)数组从栈中分配空间, 对于程序员方便快速,但是自由度小
  
  B-2. 链表从堆中分配空间, 自由度大但是申请管理比较麻烦.
  ======================================
  
  数组中的数据在内存中的按顺序存储的,而链表是随机存储的!
  要访问数组中的元素可以按下标索引来访问,速度比较快,如果对他进行插入操作的话,就得移动很多元素,所以对数组进行插入操作效率很低!
  
  由于连表是随机存储的,链表在插入,删除操作上有很高的效率(相对数组),如果要访问链表中的某个元素的话,那就得从链表的头逐个遍历,直到找到所需要的元素为止,所以链表的随机访问的效率就比数组要低
  
  
  数组在内存中开辟连续的一块区域,如果一个数据要两个内存单元,一组5个数据10个单元就够了,无需标记其地址,因为数组定义时候标顶了第一个原许的地址,其他四个都知道了。
  链表可可以是连续的,也可以是不连续的,但一般都是不连续的,尽管在内存中是连续的,我们也不把他当作是连续的,而是把他当作是不连续的,因为如果把他当作是连续的,不如当作是数组了,在某些情况下。一链5个数据,如果每个数据本身用2个内存单元,那么10个单元是不够的,因为每个数据都要表示出下个数据在哪里,所以一个数据本身用2个单元,再用1个单元表示此链下一个数据在什么地址。

145. 写几个java.lang.Object类中的方法名称

equals(); toString(); getClass(); hashCode(); clone() finalize() notify() wait() notify()

146. js中加VAR与不加VAR的区别?

在全局作用域中可以不使用var声明变量,但在声明局部变量时,一定要使用var语句.
加了var:在局部函数中加了var说明是局部变量,只对该函数起作用.
不加var:在局部函数中不加的话,说明是给这个全局变量重新赋值.其结果为重新赋值后的.

147. Struts 1的Action类与Struts 2的Action类区别?

Struts 1要求Action类要扩展自一个抽象基类。Struts 1的一个共有的问题是面向抽象类编程而不是面向接口编程。
Struts 2的Action类实现了一个Action接口,连同其他接口一起实现可选择和自定义的服务。
Struts 1 Action类是单例类,因只有一个示例控制所有的请求。
Struts 2 Action对象每一个请求都实例化对象,所以没有程安全的问题。

148. jsp有哪些的动作?分别有什么作用?

答: jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。

149. 用oracle写向mine表中差入miname字段?

ALTER TABLE MINE ADD MINNAME VARCHAR2(10);

150. oracle有哪几个对象?

Oracle数据库对象有表、索引、视图、同义词、序列、存储过程、触发器、PL/SQL块等

151. 在oracle中,有4个大对象(lobs)类型可用

分别是blob,clob,bfile,nclob。

你可能感兴趣的:(java开发面试题100%公司笔试题你都能碰到几个(3))