阿里面试题

面试题

1、String和StringBuffer的区别

答:从运行速度方面来说 StringBuffer>String。String为字符串常量,不可变。当你给String字符串重新赋值时看上去是改变了这个字符串,但实际上在jvm中是重新创建了一个对象,而之前的被垃圾回收了。如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的

String适用与少量字符串操作,StringBuffer适用于多线程下在字符串缓冲区进行大量操作。

2、gc的概念,如果A和B对象循环引用,是否可以被GC?

3、Java中的内存溢出是如何造成的

答:引起内存溢出的原因有很多种,常见的有以下几种:

1、内存中加载的数据量过于庞大,如一次从数据库取出过多数据;
2、集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
3、代码中存在死循环或循环产生过多重复的对象实体;
4、使用的第三方软件中的BUG;
5、启动参数内存值设定的过小;

4、String s = “123”;这个语句有几个对象产生

答:一个对象,String str=new String("123“)是两个对象。

原因:

在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此我们不用担心String对象共享而带来程序的混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。
我们再回头看看String a="123";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"123"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回

5、Error、Exception和RuntimeException的区别,作用又是什么?

Error(错误):表示系统级的错误和程序不必处理的异常,是java运行环境中的内部错误或者硬件问题,

比如,内存资源不足等,对于这种错误,程序基本无能为力,除了退出运行外别无选择

Exception:在程序中必须使用try...catch进行处理。
RuntimeException:可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。

6、列举3个以上的RuntimeException

NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
SecurityException - 安全异常
UnsupportedOperationException - 不支持的操作异常

7、reader和inputstream区别

java.io下面有两个抽象类:InputStream和Reader
InputStream是表示字节输入流的所有类的超类
Reader是用于读取字符流的抽象类
InputStream提供的是字节流的读取,而非文本读取,这是和Reader类的根本区别。
即用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。

8、hashCode的作用

Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的 字段等)映射成一个数值,这个数值称作为散列值。

hashMap中 put方法是用来向HashMap中添加新的元素,从put方法的具体实现可知,会先调用hashCode方法得到该元素的hashCode 值,然后查看table中是否存在该hashCode值,如果存在则调用equals方法重新确定是否存在该元素,如果存在,则更新value值,否则将 新的元素添加到HashMap中。从这里可以看出,hashCode方法的存在是为了减少equals方法的调用次数9、Object类中有哪些方法,列举3个以上(可以引导)

10、char型变量中能不能存贮一个中文汉字?为什么?

在Java中,char类型占2个字节,而且Java默认采用Unicode编码,以个Unicode码是16位,所以一个Unicode码占两个字节,Java中无论汉子还是英文字母都是用Unicode编码来表示的。所以,在Java中,char类型变量可以存储一个中文汉字

11、列举几个Java Collection类库中的常用类

arrayList,set

12、List、Set、Map是否都继承自Collection接口?
13、HashMap和Hashtable的区别
14、HashMap中是否任何对象都可以做为key,用户自定义对象做为key有没有什么要求?
15、interface 和 abstrat class的区别 是否可以继承多个接口,是否可以继承多个抽象类
16、 启动一个线程是用run()还是start()? 多线程有几种实现 同步和并发是如何解决的 什么叫守护线程,用什么方法实现守护线程(Thread.setDeamon()的含义) 如何停止一个线程? 解释是一下什么是线程安全?举例说明一个线程不安全的例子。解释Synchronized关键字的作用。 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
17、了解过哪些JDK8的新特性,举例描述下相应的特性?
18、对sql进行优化的原则有哪些?
19、servlet生命周期是生命与cgi的区别?
20、StringBuffer有什么优势?为什么快?

other
谈谈你对HashMap的理解,底层原理的基本实现,HashMap怎么解决碰撞问题的?
开发中用了那些数据库?回答mysql,储存引擎有哪些?然后问了我悲观锁和乐观锁问题使用场景、分布式集群实现的原理。
springmvc和mybatis的工作原理,有没有看过底层源码?
熟悉IO么?与NIO的区别,阻塞与非阻塞的区别
微信红包怎么实现。
海量数据分析。
线程安全和非线程安全。
HTTP2.0、thrift。
java反射应用
分布式事务一致性。
nio的底层实现。
jvm基础是必问的,jvm GC原理,JVM怎么回收内存。
API接口与SDI接口的区别
dubbo如何一条链接并发多个调用。Dubbo的原理,序列化相关问题。
用过哪些中间件。
做过工作流引擎没有。
以前的工作经历,自己觉得出彩的地方
线程池的一些原理,锁的机制升降级
从系统层面考虑,分布式从哪些纬度考虑
Hadoop底层怎么实现
threadLocal,线程池,hashMap/hashTable/coccurentHashMap等
秒杀系统的设计
虚拟机,IO相关知识点
Linux的命令
一个整形数组,给定一个数,在数组中找出两个数的和等于这个数,并打印出来,我写的时间复杂度高,要求O(n)。
n个整数,找出连续的m个数加和是最大。
更重视开源技术
数据库锁隐原理
1000个线程同时运行,怎么防止不卡
并列的并发消费问题)
高并发量大的话怎么处理热点,数据等
如何获取一个本地服务器上可用的端口
流量控制相关问题
数据库TPS是多少,是否进行测试过
缓存击穿有哪些方案解决
Java怎么挖取回收器相关原理
Java的集合都有哪些,都有什么特点
分布式锁,redis缓存,spring aop,系统架构图,MySQL的特性
场景,同时给10万个人发工资,怎么样设计并发方案,能确保在1分钟内全部发完 打个比方会提出类似的场景


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值