from 公众号:程序员乔戈里 一份刚出炉的蚂蚁金服面经 附答案
ArrayList和LinkedList区别?
什么情况会造成内存泄漏?
在Java中,内存泄漏值得就是一些被分配的对象,这些对象具有下面的特点:
首先,这些对象是可达的,即在有向图中存在通路可以与其相连
其次,这些对象是无用的,即程序以后不会再使用这些对象。
如果满足这两个条件,即可判断此为Java程序中的内存泄漏,这些对象不会被GC回收,但却占用内存。什么是线程死锁,如何解决?
线程死锁是因为多线程访问共享资源,由于访问顺序不当所造成的,通常是一个线程锁定了资源A,又想去锁定资源B;另一个线程锁定了资源B,又想去锁定线程A以完成自身的操作,两个线程都想得到对方的资源,造成两个线程都在等待,而无法执行的情况。
造成死锁有四个必要条件:
1.互斥条件:所谓互斥就是线程在某一时间内独得资源。
2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
3.不剥夺条件:进程已获得资源,在未使用完之前,不能强行剥夺。
4.循环等待条件:若干进程之间形成了一种头尾相接的循环等待资源关系。
要解决死锁问题需要从这四个必要条件出发,只要破坏一个必要条件,死锁就不复存在。红黑树是什么?怎么实现?时间复杂度?
TCP的三次握手?
说一下HashMap以及它是否线程安全
十亿条淘宝购买记录,怎么获取出现最多的前十个 ?
平时有没有用过Linux系统,怎么查看某个进程?
ps aux|grep java 查看java进程
ps aux 查看所有进程
ps –ef|grep tomcat 查看所有有关tomcat的进程
ps -ef|grep --color java 高亮要查询的关键字
kill -9 19979 终止线程号位19979的进程
- 说一下Innodb和MySIAM的区别?
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。
InnoDB不支持FULLTEXT类型的索引。
InnoDB 中不保存表的具体行数,也就是说,执行select count() from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含 where条件时,两种表的操作是一样的。
对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。 - 说一下Java内存模型、jvm内存结构,介绍一下你了解的垃圾收集器
JVM内存结构 VS Java内存模型 VS Java对象模型