Java常见面试

匿名内部类能不能继承接口/类

匿名内部类只能实现一个类或接口,在创建的时候直接继承或实现某个接口


Math.round()
  • Round(11.5) = 12
  • Round(-11.5) = -11

面向对象特征

继承、封装、多态


多态的特质

概念 : 一个行为具有多个不同表现形式或形态的能力,既同一个接口,使用不同实例而执行不同操作
继承,重写,向上转型


SubString()

substring (x,y) 包含x,不包含y 从索引0开始


StirngBuffer 和StringBui
  • 运行速度 : StringBuilder > StringBuffer > String
  • 安全: StringBuffert是线程安全,有synchronized关键字,共享缓冲区的时候
  • 适用: Stringbuffer适合多线程 StringBuilder 适合单线程

Redis存储类型

字符串,哈希(键值对),列表(头尾),集合(Set无序),有序集合(sorted set,通过分数来从小到大排序,分数可以重复)


String str = new String(“xyz”);创建了几个对象 ?

2个,New的话会在内存(不是字符串常量池)上创建新的String 对象
原因:先在常量池查找或创建一个字符串常量,然后再内存new一个新的


HashMap 和 HashTable 区别
  • Map可以有null,table不行
  • Map非线程安全,table线程安全有synchronize 同步
  • 继承的类不一样 AbstractMap(HashMap) Dictionary(table)
  • Map没有contains()方法
  • Map是通数组+链表+红黑树,采用哈希表存储的

Vector 和 ArrayList区别
  • Vector方法都是同步,安全
  • ArrayList性能比Vecotr好
  • 当元素超过大小,Vector翻倍,ArrayList增加一半,所以ArrayList更节省空间

ArrayList 和 LinkedList
  • 从后面添加数据,而不是前后或中间,并且随机访问元素时选Arraylist
  • 前面或中间添加,按照顺序访问选LinkedList

遍历Map
  • 第一种
    Set set = map.keySet();
    Iterator it = set.iterator();
    while(it.hasNext()){
       String str = it.next().toString();
    }
  • 第二种
 for(Entry<String,String> entry : map.entrySet()){

           String strkey = entry.getKey();

           String strval = entry.getValue();
       }

String
  • 不能被继承,因为被final修饰,创建之后不能被更改

父子类加载顺序

父类静态代变量、
父类静态代码块、
子类静态变量、
子类静态代码块、
父类非静态变量(父类实例成员变量)、
父类构造函数、
子类非静态变量(子类实例成员变量)、
子类构造函数

总结: 静态变量、代码块、非静态变量、构造函数


抽象类和接口
  • 抽象类可以没有抽象方法,有抽象方法的类必须是抽象类
  • 抽象方法要被实现,不能是静态的,也不能私有
  • 如果子类没有实现抽象父类的所有抽象方法,那么他也是个抽象类

栈内存溢出

如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常。 如果虚拟机在动态扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常


tomcat配置信息

Xms128 JVM初始分配的堆内存 一般为物理内存的1/64
Xmx512m JVM最大允许分配的内存 一般为物理内存你的1/4
XX:PermSize=64M JVM初始分配的非堆内存
XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配
堆内存程序员可以利用,非堆的就是jvm使用的

修改catalina文件


冒泡算法
int[] arr={6,3,8,2,9,1};
for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数
    for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
        if(arr[j]>arr[j+1]){
            int temp=arr[j];
            arr[j]=arr[j+1];
            arr[j+1]=temp;
        }
    }
}

多线程实现方式
  • 实现Runable接口
  • 继承Thread类

线程的生命周期

新建,可运行,运行中,睡眠,阻塞,等待,死亡


Sleep 和 wait

Sleep依旧持有锁,并在指定时间自动唤醒,wait的话释放锁


Java读取文件输出到浏览器下载的过程

io流的,待补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值