Java面试题

0.写一个函数,找出字符串中关键字'_'出现所有的位置(如"acd124_145po_c"中'_'出现的位置是6和12)

 1 package cn.union;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class Union4 {
 7 
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10 
11         String str = "acd124_145po_c";
12 
13         System.out.println(find_(str));
14     }
15 
16     private static List<Integer> find_(String str) {
17         // TODO Auto-generated method stub
18 
19         List<Integer> result = new ArrayList<Integer>();// list存放结果
20         char[] charArr = str.toCharArray();// 将字符串转为字符数组
21 
22         for (int i = 0; i < charArr.length; i++) {
23             if ('_' == charArr[i]) {
24                 result.add(i);// 如果有_,则添加到list
25             }
26         }
27 
28         return result;
29     }
30 }

1.写一个函数,找出整形数组a中,值第二大的元素(只用一层循环)

 1 package cn.union;
 2 
 3 public class Union5 {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7 
 8         int[] a = { 10, 1, 9, 2, 8, 3, 7, 4, 6, 5 };
 9 
10         System.out.println(findSecondMax(a));
11     }
12 
13     private static int findSecondMax(int[] a) {
14         // TODO Auto-generated method stub
15 
16         if (null == a || a.length <= 1) {
17             return -1;
18         }
19 
20         int max = a[0] > a[1] ? a[0] : a[1];
21         int secondMax = a[0] + a[1] - max;
22 
23         for (int i = 2; i < a.length; i++) {
24             if (a[i] > max) {
25                 secondMax = max;
26                 max = a[i];
27             } else if (a[i] > secondMax) {
28                 secondMax = a[i];
29             }
30         }
31 
32         return secondMax;
33     }
34 }

2.运行以上程序,输出结果是:

-128

因为byte最大值是127,最小值是-128

 1 package cn.union;
 2 
 3 public class Test {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7 
 8         byte i = Byte.MAX_VALUE;
 9         byte j = ++i;
10         System.out.println(j);
11     }
12 }

3.写一个方法,将一个字符串翻转(如将字符串"abcdef"转成"fedcba")

 1 package cn.union;
 2 
 3 public class Union7 {
 4 
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7 
 8         String str = "abcdef";
 9 
10         System.out.println(myReverse(str));
11     }
12 
13     private static String myReverse(String str) {
14         // TODO Auto-generated method stub
15 
16         char[] charStr = str.toCharArray();
17         char[] result = new char[charStr.length];
18         int flag = 0;
19 
20         for (int i = charStr.length - 1; i >= 0; i--) {
21             result[flag] = charStr[i];
22             flag++;
23         }
24 
25         return String.valueOf(result);
26     }
27 }

4.你对Spring的IoC和AOP了解吗?请介绍一下。

IoC是控制反转,把创建对象的权利交给框架,是框架的重要特征,并非面向对象编程的专用术语。

AOP是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

5.Hibernate到底该用注解,还是xml文件配置方式呢?他们各自有各自的优缺点:

XML配置方式:

优:容易编辑,配置比较集中,方便修改,在大业务量的系统里面,通过xml配置会方便后人理解整个系统的架构,修改之后直接重启应用即可

缺:比较繁琐,配置形态丑陋, 配置文件过多的时候难以管理

注解方式:

优:方便,简洁,配置信息和 Java 代码放在一起,有助于增强程序的内聚性。

缺:分散到各个class文件中,所以不宜维护, 修改之后你需要重新打包,发布,重启应用。

个人体会: 小项目,参与人数不多,不复杂的用注解,开发快速。 复杂项目,多人交互,配置量大,维护复杂度高的,用配置文件。

6.你对Spring MVC了解吗?请介绍一下。

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2等。

7.Struts 2默认是单例模式还是多例模式呢?

Struts 2的Action默认是多实例的并非单例,也就是每次请求产生一个Action的对象,即每次访问的参数都被封装在Action的成员变量中。

Struts 2中Action多实例的优势在于是线程安全的,每次请求都会创建单独的Action类来处理,而不用想servlet一样担心线程安全问题。

原文地址:https://www.cnblogs.com/denggelin/p/9038448.html