分享一个腾讯远程面试java后台研发岗位的面试经过,简单来说,自我介绍、经历分享、问题解答以及敲代码。
1. 上来先自我介绍。
2. 讲讲自己的项目经验。
3. ArrayList和LinkedList有什么区别?
主要区别:ArrayList是Array(动态数组)的数据结构,而LinkedList是Link(链表)的数据结构。随机访问(get和set)时,ArrayList优于LinkedList;新增和删除操作,LinedList比较占优势。
4. 多线程的内容,Java中有很多线程安全的数据结构,他们怎么样实现的?
所谓 线程安全 就是:一段操纵共享数据的代码能够保证在同一时间内被多个线程执行而仍然保持其正确性的,就被称为是线程安全的。
线程安全是保证执行业务逻辑正确的基本前提,为此在多线程开发中,我们尽量采用能保证线程安全的数据结构。
JDK已经为大家准备好了一批好用的线程安全容器类,可以大大减少开发工作量,例如HashTable,ConcurrentHashMap,CopyOnWriteArrayList,CopyOnWriteArraySet,ConcurrentLinkedQueue,Vector,StringBuffer等。
5.synchronized锁
synchronized是java中并发编程最重要的关键字之一。
synchronized常用的方式有以下四种
public class SyncTest{ public synchronized void methodA(){} public void methodB(){ synchronized(this){} } public void methodC(){ synchronized(xxx.class){} } public static synchronized methodD(){} }
前两种锁的是实例对象,即对象锁,后两种锁的是类对象,即类锁(类锁只是个概念,因为本质锁的本质还是对象)
6. 现场写代码,单链表反转。
链表翻转这个题目,最直接的方法是以3个指针为单位,变换指针的方向,是on,o1的算法。如果要求不能变换指针,有一个空间n/2,时间3/2 n的方法就是两个指针同时走,p2走2步时p1走一步,p1每走一步就把next压栈,p2走到底时p1应该走到1/2,然后p1开始一步一步走,每走一步就pop一个指针做swap value。更多java面试题。