一、Java容器:List,Set,Map
(1)List:分为arrayList和LinkedList和Vector,Queue(基于linkedList实现),Stack(基于Vector实现),相比数组都可以动态伸缩,arrayList有很好的随机存取效率,因为使用的数组实现(内存中的连续区域,直接计算地址),默认容量10;LinkedList有较小的插入删除代价,因为用的是双向
链表实现的;Vector也是使用数组实现的,应用了synchronized方法,所以性能上比ArrayList差,但是线程安全。
(2)Set:主要是HashSet,TreeSet,LinkedHashSet。hashSet基于hashMap实现的,自定义类使用set的话需要实现comparable接口或者传给set一个comparator比较器,需要重写equals函数。treeSet是实现
红黑树数据结构后得到的顺序set。
红黑树每个节点的值都大于等于他的左子树小于等于右子树,这能确保
红黑树运行时能快速在树种找到所需节点,这样一来,就可以从一个set里提到一个顺序集合。因此与hashSet相比,treeSet的优势在于:treeSet中的所有元素总是根据指定
排序规则保持有序状态。hashSet初始是16个元素的数组,达到75%时扩容。LinkedHashSet是HashSet的子类,该类在HashSet的基础上将每一个元素根据插入顺序用
链表连接起来,可以按插入顺序遍历。
(3)Map:主要是hashMap和hashTable,treeMao,linkedHashMap。HashTable不允许键/值为空,支持多线程,即同一时刻只有一个线程可以写。hashMap除了Iterator遍历之外还可以用for-each遍历,for(T key:map.ketSet()){key.getValue;};
二、Map的遍历方式
1、map.entrySet()获得Entry集合,然后用foreach遍历或者获得entry集合的iterator遍历
2、map.keySet()获得键集合,然后调用map.get(key)方法访问值,使用forench遍历或者获得key集合的iterator遍历。
3、map.values()获得值集合,然后forench遍历或者获得值集合的iterator遍历
三、HashMap扩容为什么是扩为两倍?
散列函数
四、Java线程同步机制(信号量,闭锁,栅栏)
五、对volatile的理解:常用于状态标记
(1)对所有线程可见性:线程改变值后立即写回内存,读取时必须从主存中读取
(2)禁止指令重
排序: 插入许多内存屏障:
六、八种基本数据类型的大小以及他们的封装类(顺带了解自动拆箱与装箱)
七、线程阻塞几种情况?如何自己实现阻塞队列?
八、Java垃圾回收
可达性分析->引用级别->二次标记(finalize方法)->垃圾收集
算法(4个)->回收策略(3个)->垃圾收集器(GMS、G1)。
可达性分析的根结点:
1、虚拟机栈中引用变量指向的对象。
2、方法区中的静态引用的对象
3、方法区中的常量引用的对象
4、本地方法栈中引用的对象
九、java内存模型
十、TCP/IP的理解
十一、进程和线程的区别
十二、http状态码含义
最后,帮实习时认识的技术大佬打个广告,团队技术氛围非常好,绝对是走技术路线同学的天堂(本人去年在此实习),无门槛哈,任何学校的同学都可以投