Java面试总结(二)

11、值传递和引用传递的区别
     值传递:只要是基本类型都是值传递
      引用传递:针对于基本类型进行封装,对封装进行传递
12、单例模式的详细介绍
      (1) 单例模式,创建一个全局对象,每次调用使用同一个实例
      (2) 原型模式,每次调用都新建一个对象
      (3) session,一个session会话,使用一个对象实例
      (4) request, 一个request请求,使用一个对象实例
    单例模式优势:
         单例模式在全局服务只需要创建一个对象,减少重复创建,提高性能。
        每个新创建的对象都放在jvm的新生代里,而新生代的容量是一定的,如果对象不断创建,会频繁触发垃圾回收,有时还会导致fullGC,严重影响性能。
     3、单例陷阱
        单例陷阱是在多线程的问题
        一个线程创建一个独立栈帧,栈帧存储方法的局部变量,而全局变量存储在堆中。这时全局变量就是不安全的,获取到的值可能是另一个线程的临时值。
    4、单例陷阱解决方法
        (1) 减少使用全局便令
        (2) 不变变量加入final
        (3) 使用static全局变量
13、冒泡排序和递归调用
    冒泡排序:
// 对 bubbleSort 的优化算法
public void bubbleSort_2(int[] list) {
    int temp = 0; // 用来交换的临时数
    boolean bChange = false; // 交换标志
    // 要遍历的次数
    for (int i = 0; i < list.length - 1; i++) {
        bChange = false;
        // 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位上
        for (int j = list.length - 1; j > i; j--) {
            // 比较相邻的元素,如果前面的数大于后面的数,则交换
            if (list[j - 1] > list[j]) {
                temp = list[j - 1];
                list[j - 1] = list[j];
                list[j] = temp;
                bChange = true;
            }
        }
        // 如果标志为false,说明本轮遍历没有交换,已经是有序数列,可以结束排序
        if (false == bChange)
            break;
        System.out.format("第 %d 趟:\t", i);
        printAll(list);
    }
}
递归调用:(函数调用自身的方法)
    # include <stdio.h>
    void Func(int n);  //函数声明
    int main(void)
    {
        int n;
        printf("想输出几个我爱你:");
        scanf("%d", &n);
        Func(n);
        return 0;
    }
    void Func(int n)
    {
        if (n > 0)
        {
            printf("i love you\n");
            Func(n-1);
        }
        else
        {
            return ;
        }
    }
14、操作字符串的方法,
       1)、字符串查找:
                indexOf(Sting s)用于字符串s首次出现的索引位置,如果没有搜索到s,返回值为-1
                 lastIndex(Sting s)用于字符串s最后一次出现的索引位置,如果没有搜索到s,返回值为-1
       2)、获取指定位置的字符
          charAt(int i)
    public static void main(String args[]){
     String st="hello word";
      System.out.print(st.charAt(2));
      }
     输出为 e
       3)、获取截取后的子字符串
               subString(int i)从指定的索引位置截取到结尾
               subString(int i,int j)截取从索引位置i到j的字符串
        4)、去除空格
               trim( ):返回字符串的副本,忽略前空格和尾部空格
              String tr="head";
               System.out.print(tr.trim());
       5)、字符串的替换
             replace(char a,char b):实现指定的字符a换成字符b
       6)、判断字符串的开始与结尾
    startsWith( )和endsWith( ):判定字符串是否以指定内容开始或结尾
         String st=hello word ;
           boolean b=st.startsWith("h");
         boolean b=st.endsWith("d");
       7)、比较字符串是否相等
             equals( ):比较时必须区分大小写
             equalsIgnoreCase( ):比较时不区分大小写
            ("ass").equals("Ass")     false
            ("ass").equalsIgnoreCase( )("Ass")   true
       8)、字母大小写转换
              toLowerCase( ):将字符串转换为小写
              toUpCase( ):将字符串转换为大写
       9)、字符串拆分
     split(String sign,int limit):对给定的分割符sign进行有限次limit分割
      10)、格式化字符串
    format()用于创建格式化的字符串
      11)、字符串生成器
               StringBuilder对象初始容量是16字符,可以自行指定初始长度,利用StringBuilder类中方法可以动态执行添加、删除、插入等操作
  15、 string和int的转换:
         有两个方法:
    1). int i = Integer.parseInt([String]); 或
    i = Integer.parseInt([String],[int radix]);
    2). int i = Integer.valueOf(my_str).intValue();
    注: 字串转成 Double, Float, Long 的方法大同小异.
16、string和date相互转换
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
 
    public class StringToDate {
 
        public static void main(String[] args) {
            //获得一个时间格式的字符串
            String dateStr = "2016-12-31";
            //获得SimpleDateFormat类,我们转换为yyyy-MM-dd的时间格式
            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
            try {
                //使用SimpleDateFormat的parse()方法生成Date
                Date date = sf.parse(dateStr);
                //打印Date
                System.out.println(date);
            } catch (ParseException e) {
                e.printStackTrace();
            }
         }
     }
17、div+css和table布局的区别
    a>       div+css布局的好处:
            1.符合W3C标准,代码结构清晰明了,结构、样式和行为分离,带来足够好的可维护性。
            2.布局精准,网站版面布局修改简单。
           3.加快了页面的加载速度(最重要的)。
           4.节约站点所占的空间和站点的流量。
           5.用只包含结构化内容的HTML代替嵌套的标签,提高另外搜索引擎对网页的搜索效率。
    b>    table布局的好处(table布局也不是一点用的没有,这点是毋庸置疑的)
          1.容易上手。
          2.可以形成复杂的变化,简单快速。
          3.表现上更加“严谨”,在不同浏览器中都能得到很好的兼容。
18、数组实例化的方法
     1. 直接给每个元素赋值
     int array[4] = {1,2,3,4};
     2. 给一部分赋值,后面的全部为0
     int array[4] = {1,2};
    3. 由赋值参数个数决定数组的个数
    int array[] = {1,2};
    4. 数组元素的值是随机分配的
    int array[4] = {};
    当初始化参数时,推荐使用 int array[4] = {0};
19、数组和list的区别
      list可以封装对象,不限制大小,顺序排序,可以不用类型
      数组必须是相同的类型
20、项目中图片和文件储存在什么位置
         1)、项目中
         2)、本地磁盘中
         3)、第三方工具中

转载于:https://www.cnblogs.com/caiwx/p/11188708.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值