java知识点总结

一、java

1、容器

  1)List

    Java中ArrayList和LinkedList区别

  2)Set

    理解HashSet及使用

         HashMap和HashSet的区别

  3Map

    HashMap的容量与扩容

         HashMap扩容机制、线程安全

         hashMap、hashTable、treeMap的区别

2、字符串

  1)String

    java中String类为什么要设计成不可变的

         为什么String对象不可变,而StringBuffer可变?

  2)Stringbuffer

  3)StringBuilder(线程安全的)

3、数组

  1)数组复制(Arrays.copyOf、System.arraycopy、for)

    Java中数组复制的几种方法

  2)数组扩容(Arrays.copyOf、System.arraycopy)

    Java数组扩容算法及Java对它的应用

  3)数组合并(Arrays.copyOf、System.arraycopy)

  4)数组排序(冒泡排序、插入排序、选择排序、快速排序、Arrays.sort)

  5)数组查找(二分法、Arrays.binarySearch)

4、多线程(生命周期、线程池)

  1)线程的创建(Thread、Runnable)

  2)线程声明周期

    创建、就绪、运行、阻塞、结束

    阻塞原因:线程阻塞的原因

  3)线程池

    Java四种线程池的使用

  4)ThreadLocal

    彻底理解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生命周期

   Spring Bean的生命周期(非常详细)

  5)bean的自动装配(no、byName、byType、construct、autodetect)——开发中通过注解@Autowired实现

   Spring的自动装配Bean的三种方式

  6)BeanFactory和FactoryBean区别

   Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法

   Spring中FactoryBean与BeanFactory的区别

2、AOP

  1)自定义类如何用spring实现AOP

    使用Spring的注解方式实现AOP

              Spring AOP详解

  2)代理(jdk、cglib)

    在需要代理类而不是代理接口的时候,spring会自动切换为使用cglib代理。但spring推荐使用面向接口编程,因此业务对象通常都会实现一个或多个接口,此时默认将使用JDK动态代理,但也可以强制使用cglib代理。

      Spring AOP中强制使用CGLIB代理

              Spring强制使用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三次握手和四次握手

    TCP的三次握手(建立连接)和四次挥手(关闭连接)

2、http头信息

  http请求方式、host(服务器域名)、User-agent(客户端系统及浏览器信息)、Accept(浏览器接收内容类型)、Accept-language(浏览器语言)、Accept-Encoding(压缩编码类型)、Accept-Charset(字符编码集)、Content-Type(内容类型)、cookie

  HTTP消息中header头部信息的讲解

 

 

 

1、手写ArrayList

2、手写进制转换算法、求一个数的二进制的1的个数

3、spring类加载方式、反射、热部署

  Tomcat热部署的三种方式

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+树原理

  MySql存储引擎特性对比    四种mysql存储引擎

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比较详解

  有哪些lockJava中的锁  Java中的锁分类

  不同的锁如何实现

  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总结

posted @ 2017-09-14 10:36  code.world  Views(273)  Comments(0Edit  收藏  举报