java基础2

 

1  基本语法

l  基本类型

n  字面值规则(5条)

n  运算规则(5条)

u  3/2, 1

u  byte,short,char

byte a = 3;

a << 24

u  Integer.MAX_VALUE+1

u  2-1.9, 0.10000000000009

u  Infinity

NaN

 

l  运算符

n  +-*/

n  %

n  == != > >= < <=

n  && || !

n  & | ^ ~

n  >> >>> <<

n  ++ --

n  ? :

n  =

n  += >>= ^= ...

n  ()

n  instanceof

 

l  流程控制

n  swtich 只能判断byte,short,char,int

n  enum

n  jdk1.7,String

l  数组

n  int[] a = new int[5];

n  int[] a = {3,7,3,1};

n  a = new int[]{2,6,8,23,67};

 

f(a);

print(a[0]);//0

g(a);

print(a[0]);//0

 

...

void f(int[] a) {

   a[0] = 0

}

 

void g(int[] a) {

   a = new int[]{99,88,77};

}

 

n  Arrays

u  Arrays.sort()

l  基本类型,优化的快速排序

l  引用类型,优化的合并排序

u  Arrays.binarySearch()

u  Arrays.toString()

u  Arrays.copyOf()

 

2   面向对象

l  什么是面向对象

n  封装、继承、多态

l  封装

n  类

n  对象

n  引用

n  构造方法

n  this

n  重载

n  隐藏 private

l  继承

n  作用:代码重用、代码复用

n  单继承

n  子类对象

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

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

n  重写

n  父类构造方法

u  默认值 super()

u  手动调用 super(参数)

n  super

u  super.xxxx()

l  一般重写时,调用父类同一个方法代码

u  super()

l  多态

n  作用:一致的类型

所有子类型对象,都可被当做一致的父类型进行处理

n  向上转型,向下转型

n  instanceof

运行期类型识别

l  抽象类,半成品

l  final

n  常量

n  方法,不能重写

n  类,不能继承

l  static

n  属于类,不属于对象

n  保存在方法区

n  static {

 

}

l  访问控制

n  public,protected,[default],private

l  对象创建过程(10步)

 

l  接口

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

l  内部类

n  匿名内部类

 

3   基础API

l  Object

n  toString()

n  equals()

n  hashCode()

n  wait()

n  notify()

n  notifyAll()

n  getClass()

 

l  String

n  常量池

 

//编译器优化成:"aaabbbccc"

String s1 = "aaa"+"bbb"+"ccc";

String s2 = "aaabbbccc";

s1 == s2 //true

 

s1 + s2 + s3 + s4

 

u  字符串连接的运算过程:

s1 + s2

 

sb = new StringBuffer(s1);

sb.append(s2);

sb.toString()

 

l  StringBuilder/StringBuffer

n  StringBuilder 线程不安全,效率高

n  StringBuffer 线程安全

l  正则表达式

n  百度“正则表达式大全”

l  基本类型包装类

n  Integer.valueOf()

256个缓存对象,-128到127

l  BigDecimal,BigInteger

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

n  BigDecimal.valueOf(2)

l  Date

l  SimpleDateFormat

 

4   集合

l  ArrayList

n  访问任意位置效率高

n  增删数据效率可能低

n  默认容量10, 1.5倍增长

 

l  LinkedList

n  两端效率高

n  数据量小时,频繁增删数据效率高

l  HashMap

n  key.hashCode()

n  哈希值计算下标 i

n  新建Entry对象,放入i位置

u  空位置,直接放入

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

l  有相等的,覆盖值

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

u  负载率,加载因子 0.75

l  新建翻倍长度新数组

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

u  jdk1.8

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

l  红黑树减少到6,转回链表

l  HashSet

n  内部用HashMap的键存放数据

l  HashTable

n  旧版本的哈希表

n  线程安全

l  TreeMap

n  红黑树

n  键:不重复,有序

n  键比较大小,使用Comparable或Comparator

l  TreeSet

l  ConcurrentHashMap

l  ConsurrentHashSet

n  添加线程同步锁,保证多线程并发访问安全

n  对内部数据,进行分段,每一段单独加锁

l  LinedHashMap

n  有序的HashMap

n  哈希表

n  存放的数据,形成双向链表结构

n  从第一个数据,依次向后访问每个数据

n  可以用键迅速定位查找数据

 

 

5   异常

 

6   io

l  序列化

n  ObjectInputStream/ObjectOutputStream

n  被序列化对象必须实现 Serializable

n  readObject()

n  writeObject()

 

l  NIO

n  new IO

n  非阻塞的io操作模型

n  频道,区分不同客户端的数据

7   线程

l  线程创建

n  继承 Thread

n  实现 Runnable

l  方法

n  Thread.sleep() 不释放锁

n  join() 不释放锁

l  wait() 释放锁

 

l  同步synchronized

n  synchronized(对象) {

}

 

n  synchronized void f() {

}

 

n  static synchronized void f() {

}

 

l  生产者、消费者

n  线程之间、进程之间的通信模型

l  等待通知

n  wait()

n  notify()

n  notifyAll()

n  必须在synchronied 代码内调用

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

l  线程池

n  ExecutorService/Executors

n  Executors.createCachedThreadPool()

n  Executors.createFixedThreadPool(5)

l  Callable/Future

n  在线程执行结束后,自动运行一段代码

 

8   网络

9   反射

l  类对象

n  A.class

n  Class.forName("类名")

n  对象.getClass()

l  创建实例

n  c.newInstance()

10     注解

 

11     JVM优化

l  垃圾对象

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

n  其他对象,都是垃圾

n  根对象:

u  栈中的引用变量,所引用的对象

u  方法区经静态变量所引用的对象

 

l  标记-清除

n  标记存活对象,清理其他垃圾对象

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  对象在from,to之间复制15次,晋升到老年代

 

 

 

 

l  老年代

n  标记-清除、标记-整理

n  间隔一段时间,会执行一次小范围垃圾回收

n  当老年代空间占用到一定比例 0.85,会执行full-gc

l  垃圾回收器

n  CMS

n  G1

l  CMS - 并发的标记-清除

n  STW(Stop The World)时间非常短暂

n  初始标记(stw)

u  只标记根对象

n  并发标记

u  垃圾回收器,与其他java程序并行执行

n  重新标记(stw)

n  并发清除

u  与其他java程序并行执行

n  配置参数过多,使用过于复杂

l  G1 - Garbage First

n  内存被划分成几千个内存块

n  有伊甸园、生存区、老年代

n  用复制算法

n  G1会找到垃圾最多的内存块,优先回收

n  配置参数非常简单,只需要配置目标停顿时间(stw),G1自动调整其他参数,来达到预期的停顿时间

 

转载于:https://www.cnblogs.com/robinAndLaurel/p/10022897.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值