一、java
1、容器
1)List
2)Set
3Map
2、字符串
1)String
为什么String对象不可变,而StringBuffer可变?
2)Stringbuffer
3)StringBuilder(线程安全的)
3、数组
1)数组复制(Arrays.copyOf、System.arraycopy、for)
2)数组扩容(Arrays.copyOf、System.arraycopy)
3)数组合并(Arrays.copyOf、System.arraycopy)
4)数组排序(冒泡排序、插入排序、选择排序、快速排序、Arrays.sort)
5)数组查找(二分法、Arrays.binarySearch)
4、多线程(生命周期、线程池)
1)线程的创建(Thread、Runnable)
2)线程声明周期
创建、就绪、运行、阻塞、结束
阻塞原因:线程阻塞的原因
3)线程池
4)ThreadLocal
5)线程同步方式
synchronized、Lock(重入锁)、ThreadLocal
6)volatile
5、设计模式
1)代理模式
jdk
cglib:CGLIB介绍与原理
6、jvm及gc
jvm:计数器、栈、堆(新生代(Eden-E、From Survivor-S0、To Survivor-S1)、老年代-O、永久代-P)、方法去(老年代)
gc算法:标记-清理、复制、标记-整理、分代
gc方式:Minor GC(新生代)、Full GC(老年代、永久代)
[转]JVM运行时内存结构 jvm中的新生代Eden和survivor区
Java虚拟机(JVM)参数配置说明 JVM系列三:JVM参数设置、分析
二、spring
1、IOC
1)bean加载(BeanFactory和ApplicationContext区别)
2)bean注入(设值、构造)
3)scope(singleton、prototype、request、session、global session)
4)bean生命周期
5)bean的自动装配(no、byName、byType、construct、autodetect)——开发中通过注解@Autowired实现
6)BeanFactory和FactoryBean区别
Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
Spring中FactoryBean与BeanFactory的区别
2、AOP
1)自定义类如何用spring实现AOP
2)代理(jdk、cglib)
在需要代理类而不是代理接口的时候,spring会自动切换为使用cglib代理。但spring推荐使用面向接口编程,因此业务对象通常都会实现一个或多个接口,此时默认将使用JDK动态代理,但也可以强制使用cglib代理。
3、事务
1)隔离性(Serializable、Repeatable read、Read committed、Read uncommitted)
解决脏读、不可重读、泛读问题
2)传播性
解决事务创建时机问题
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
注:事务的隔离级别及传播方式可通过下面方式配置(propagation配置传播方式默认为REQUIRED;isolation配置隔离级别,默认为DEFAULT,用的为数据库的默认隔离级别,大部分数据库默认隔离级别为READ_COMMITTED,mysql为REPEATABLE_READ)
3)事务的实现原理
4、资源访问(Resource)
5、spring配置线程池
三、mysql
1、索引(唯一索引与其它索引的区别、索引原理、左优先)
四、网络
1、tcp/ip
1)tcp三次握手和四次握手
2、http头信息
http请求方式、host(服务器域名)、User-agent(客户端系统及浏览器信息)、Accept(浏览器接收内容类型)、Accept-language(浏览器语言)、Accept-Encoding(压缩编码类型)、Accept-Charset(字符编码集)、Content-Type(内容类型)、cookie
1、手写ArrayList
2、手写进制转换算法、求一个数的二进制的1的个数
3、spring类加载方式、反射、热部署
4、tcp/ip五层模型(应用层(表示层、会话层)、传输层、网络层、数据链路层、物理层)、restful接口规范(get、post、put、delete)OSI七层模型与TCP/IP五层模型
5、get、post区别,长度,安全
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp
6、两个同一网络的主机,如何获取对方的mac地址
7、mysql引擎区别、索引原理(底层实现)、b+树原理
8、海量数据中找一个单词,分布式计算mapreduce
9、写一个设计模式
10、写一个生产者消费者
11、子网掩码将某个ip划分成网络地址和主机地址两部分。
12、数据库连接池作用(减少建立和关闭连接的开销)
13、tomcat配置,堆的初始化大小
14、缓存与内存的区别
15、长字符串中出现两次的字符
16、spring aop怎么实现的
17、排序算法最快的是那种,说出原理
18、synchronized和lock的区别(主要相同点:Lock能完成synchronized所实现的所有功能。主要不同点:synchronized是java的关键字,Lock是一个接口。Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放)Lock和synchronized比较详解,
不同的锁如何实现
volatile 内存可见性和原子性:Synchronized和Volatile的比较
19、mysql存储引擎(myisam、innodb、memory、bdb、archive )MySql存储引擎特性对比、
锁(表锁、行锁innodb、页锁dbd)MySQL锁详解、
聚集索引(适用范围搜索)和非聚集索引 聚集索引和非聚集索引(整理)、
索引长度 【MySQL】索引长度的一些限制 mysql 二级索引、
索引原理
20、jdk的并发包(java.util.concurrent) Java 并发工具包 java.util.concurrent 用户指南
21、线程池的使用流程(客户端封装task提交ExecutorService,执行execute和submit,execute没有返回值,submit会返回future,客户端可通过future的get获取执行结果)、
达到线程池线程数怎么处理(在没达到线程池数时,即使有空闲线程也会新创建,没有空闲线程,新提交的任务将会暂存缓存队列 ) Java多线程总结(6)— 线程池的基本使用和执行流程分析
22、什么情况下会被复制到老年代(from中年龄达到阈值的对象移动到老年代、to满全部移动到老年代、对象大小大于阈值直接存放老年代),
gc流程(minor gc会将eden中存活的对象复制到to中,from中对象年龄大于阈值的转移到old中,其余的复制到to中,此时to和from角色互换,如果to满,将to中所有对象转移到old中,old会不定时执行full gc,full gc是面向整个堆的,包括年轻代和老年代。年轻代使用复制算法,老年代使用标记-整理算法。minor gc触发条件为eden空间不足,full gc触发条件为执行System.gc()或old空间不足)GC详解及Minor GC和Full GC触发条件总结 ,jvm8结构 JVM8(4)java虚拟机内部结构
23、jdk7和jdk8(永久内存从堆内存中移到了本地内存)的内存结构 JDK8中JVM堆内存划分
24、用那种设计模式对hashmap实现线程安全(代理模式,给每个方法加sychronized)
25、String的hashCode方法(new String("abc")和new String("abc")的hash值相等,因为是通过值计算的,与引用无关)
26、String值如何手动放入常量池 String.intern()方法与常量池存入时的疑惑!
27、为什么hashmap的初始大小为2的整数次幂?(之所以hashmap的初始值取得是2的整数次幂,是为了减少h & (length-1)的碰撞,length-1确保每一位都是1,这样h的每一位都参与&运算,如果length-1有一位为0,那么h相同的那一位无论是0或1都没有参与的必要,因为都是0。所以length-1是为了确保h所有的为都参与运算,减少碰撞值)
28、spring面试题
29、equals和hashcode(区别联系、重写一个不重写另一个出现的情况) hashCode与equals的区别与联系
30、乐观锁和悲观锁(通过增加类似版本号的字段实现,更新时将版本号作为条件,如果之前查到的版本号和数据库中的不一致,则更新失败,一致就更新这条记录并更改版本号) Java 中的悲观锁和乐观锁的实现
31、公平锁和非公平锁(所谓公平锁指的是哪个线程先运行,那就可以先得到锁。非公平锁是不管线程是否是先运行,都是随机获得锁的) ReentrantLock之公平锁与非公平锁浅析 第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()
32、读写锁(读锁可以多个线程同时持有,写锁只能一个线程持有,有读锁需要等待释放才能获得写锁) 轻松掌握java读写锁(ReentrantReadWriteLock)的实现原理
33、b、b-、b+树 B树、B-树、B+树、B*树
34、FanctoryBean FactoryBean的使用
35、ConcurrentHashMap(每个位置相当于一个hashTable,锁的粒度只为当前位置,而不会像HashTable锁住整张表,当前位置用的ReentrantLock) ConcurrentHashMap实现原理 操作介绍
36、ThreadPoolExecutor JAVA进阶----ThreadPoolExecutor机制
37、servlet JSP/Servlet 工作原理(转载)
38、show profiles;查看做了哪些查询 show profile for query index;查看指定index的查询所用时间时间
39、hibernate先关问题?Hibernate的10个常见面试问题及答案 java面试常见问题之Hibernate总结