目录

Java串讲. 1

1       基础语法. 1

2       面向对象. 1

3       基础API 1

4       集合. 1

5    io 1

6       线程. 1

7       网络. 1

8       反射. 1

9    JVM调优. 1

          Java串讲

 

1   基础语法

l  八大基本类型 

  int long short byte boolean float char double

l  流程控制

 Java有两种分支结构:

  • if语句
  • switch语句

  Java中有三种主要的循环结构:

  • while循环
  • do…while循环
  • for循环

l  数组

list  

hashMap、hashset、hashtable

Hashtable是同步的,而HashMap不是

 

l  变量、方法

 

2   面向对象

l  什么是面向对象

n  封装、继承、多态

l  封装

n  类

n  对象

n  引用

n  构造方法

n  this

n  方法重载

n  隐藏

l  继承

n  作用

u  代码重用、复用

n  子类对象

u  由父类对象和子类对象绑定,整体作为一个对象

u  调用成员,先找子类,再找父类

n  方法重写

n  super

u  super.xxx()

u  super()

l  默认 super()

l  手动 super(...)

l  多态

n  作用:一致的类型

n  向上转型、向下转型

n  instanceof

u  对真实类型和父类型,都返回true

n  s.getClass() == Soldier.class

l  抽象类,半成品

l  static

n  静态属于类

n  static {

静态初始化块

}

l  final

n  常量、方法、类

l  访问控制符

n  public,protected,[default],private

l  对象的创建过程(10步)

l  接口

n  作用:结构设计工具,解耦合、隔离实现

n  interface

n  implements

l  内部类

n  匿名内部类

3   基础API

l  Object

n  toString()

n  equals()

n  hashCode()

n  wait()

n  notify()

n  notifyAll()

l  String

n  常量池

n  不可变,连接销率低

 

s1 = "aaa"

s2 = "bbb"

s3 = "ccc"

 

s4 = s1+s2+s3

 

u  加号连接运算过程:

l  StringBuffer sb = new StrinBuffer(s1);

sb.append(s2);

sb.toString();

 

      s5 = "aaa"+"bbb"+"ccc"

      编译优化:

      s5 = "aaabbbccc"

 

 

l  StringBuilder/StringBuffer

n  append() 代替字符串做高效率连接

n  StringBuilder 线程不安全,效率高

n  StringBuffer 线程安全

l  正则表达式

l  基本类型的包装类

n  Integer.valueOf(5)

有256个缓存对象,范围 -128到127,

范围内的值,访问缓存对象,范围外的值,新建

 

l  BigDecimal/BigInteger

n  精确浮点数运算、超大整数运算

n  BigDecimal.valueOf(2)

n  setScale() 舍入运算

l  Date

l  SimpleDateFormat

4   集合

l  ArrayList

n  内部是数组

n  访问效率高

n  增删数据,效率可能降低

n  数组 1.5 倍增长

l  LinkedList

n  双向链表

n  两端效率高

n  如果只在两端操作数据,用LinkedList

n  数据量小时,频繁增删数据用 LinkedList

l  HashMap

n  哈希表

n  键:

u  不重复

u  无序

u  必须重写hashCode()和equals()

n  哈希运算过程

u  用键的哈希值计算下标 i

u  新建Entry对象放入 i 位置

l  空位置,直接放入

l  有数据,依次用equals()比较是否相等

n  有相等的,覆盖值

n  没有相等的,链表连接在一起

l  负载率、加载因子到 0.75

n  新建翻倍长度的新数组

n  所有数据,重新执行哈希运算,放入新数组

l  jdk1.8

n  链表长度到8,转成红黑树

n  红黑树数据减少到6,转回成链表

l  HashSet、TreeSet

n  不重复

n  内部封装HashMap、TreeMap,数据保存在“键”这一列

 

l  LinkedHashMap

n  哈希表

n  存放数据,以链表来连接

n  有序的HashMap

 

l  ConcurrentHashSet

l  ConcurrentHashMap

n  把数据分段加锁

 

 

5   io

l  File

l  InputStream/OutputStream

l  FileIn...

l  BufferedIn...

l  ObjectIn...

l  Reader/Writer

l  InputStreamReader/OutputStreamWriter

l  BufferedReader, readLine()

l  PrintWriter,PrintStream

 

6   线程

l  创建

n  继承Thread

n  实现Runnable

n  线程池

n  Callable/Future

l  方法

n  Thread.sleep()

n  join()

n  interrupt()

n  ...

l  生产者、消费者

n  线程、进程间通信模型

l  等待、通知

n  必须在synchronized 代码内执行

n  等待通知的对象,必须是加锁的对象

 

l  线程池

n  ExecutorService/Executors

l  ThreadLocal

n  线程数据绑定

n  set()

n  get()

n  remove()

7   网络

l  ServerSocket

l  Socket

8   反射

l  获取类对象

n  A.class

n  a.getClass()

n  Class.forName("xxxx.A")

l  创建实例

n  c.newInstance()

 

 

9   JVM调优

l  垃圾回收器调优

l  垃圾

n  从根对象出发,所有被引用的对象,都是存活对象

n  其他对象,都是垃圾

n  根对象:

u  栈中的引用变量、方法区的静态变量所引用的对象

 

l  复制

n  有点:效率高

n  缺点:浪费内存

 

 

 

l  标记清除

n  有点:效率高、节省内存

n  缺点:产生碎片

 

 

 

 

l  标记整理

n  优点:没有碎片

n  缺点:效率低

 

 

 

l  内存的分代

n  新生代

n  老年代

n  永久代(方法区)

l  新生代

n  伊甸园

n  生存区

u  from

u  to

 

 

n  新建的对象,在伊甸园分配内存

n  伊甸园存满,向from复制

n  from存满,向to复制,并交换角色

n  年龄增长到 15,晋升到老年代

 

l  老年代垃圾回收

n  标记清除、标记整理

 

l  垃圾回收器 CMS 和 G1

 

l  CMS 垃圾回收器

n  并发的标记整理

n  引起的 STW 时间更短

u  STW - Stop The World

u  执行垃圾回收时,暂停所有Java程序的执行

n  CMS执行过程

u  初始标记(STW)

只标记根对象

u  并发标记

u  重新标记(STW)

u  并发清理

n  CMS优化参数非常多

u  每个内存区的大小,都可以详细配置

n  百度 “CMS调优参数”

 

l  G1 垃圾回收器

n  Garbage First

n  颠覆了传统的分代内存划分

 

 

 

n  优先回收垃圾最多的内存区域

n  G1 目标使用来替代 CMS 垃圾回收器

n  优化简单

u  只需要设置一个STW的目标时长,G1自动调整其他参数,来实现这个目标

 

posted on 2018-11-26 20:34  studyAnddaydayup  阅读(117)  评论(0编辑  收藏  举报