# 第二周
## 周一
### java&guava
* java特性
* 内存管理
* 反射
* 面向对象
* 常用工具
* git
* maven
* shell
* vi/emacs
* 文本管理工具
* 学习重点
* web开发
* servlet规范
* HTTP协议
* 第三方库
* guava
* apache commons
* 框架和库
* spring
* mysql/
* mybatis
* dubbo
* slf4j+logback
* 基础知识
* 八大基础类型
* int
* short
* byte
* long
* boolean
* char
* float
* double
* 装箱和拆箱
* 装箱
* 自动将基本数据类型转换为包装器类型
* 通过调用包装器的valueOf方法实现
* 去掉后面的0
* 拆箱
* 自动将包装器类型转换为基本数据类型
* 调用包装器的xxxvalue方法
* bigdecimal
* 在java.math中提供的API类bigdecimal,用来对超过16位有效位的数进行精确的计算。
* double可以处理16位有效数
* 初始化有两种方式
* BigDecimal num1 = new BigDecimal(0.005)
* BigDecimal num2 = new BigDecimal("0.005")
* 调用方法
* add()
* subtract()
* multipy()
* divide()
* ROUND_UP
* 丢弃非零数字之前始终+1
* ROUND_DOWN
* 丢弃某部分之前始终不+1
* ROUND_CEILING
* 接近正无穷大的舍入方式
* 结果为正则与up相同
* 结果为负则与down相同
* ROUND_FLOOR
* 接近负无穷大的舍入模式
* 为正和down相同
* 为负和up相同
* ROUND_HALF_UP
* 最接近的”数字舍入,
* 局限
* 无法处理无限循环小数
* 指定精度
* 公司内部封装的money方法
* Money moneya = Money.of(a);
* System.out.println(moneya.divide(b));
* equals和compare
* equals
* 比较数值和精度
* compare
* 纯数值比较
* stringbuilder
* 概念
* 和stringbuffer没有区别就是去掉了线程安全部分,减少开销
* stringbuffer
* 是为了解决大量拼接字符串时产生很多中间对象问题而提供的一个类
* 提供append和add方法,可以将字符串添加到已有序列的末尾或指定位置
* 本质是线程安全的可修改字符序列,把所有修改数据的方法加上synchronized,保证了线程安全
* 二者都继承了abstractstringbuffer,底层都是利用可修改的char数组。
* 字符串常量池
* 创建字符串时,首先检查池中是否有值相同的字符串对象,如果有,返回引用,如果没有,创建新的字符串对象返回新的引用
* 使用
* 在字符串不经常发生变化时优先使用string
* 在单线程情况下,如有大量的字符串操作情况,应该使用stringbuilder
* 在多线程情况下,如有大量字符创操作情况,应该使用stringbuffer
* stringbuilder的append方法
* stringbuilder的扩容方式
* stringbuilder和stringbuffer 的 区别
* strings
* isNullorEmpty()
* nullToEmpty
* commonPrefix()
* 得到两个字符串的公共前缀
* commonSuffix()
* 得到两个字符串的公共后缀
* padStart(string str,minLength n,padchar c)
* 在字符串前面追加
* padEnd(string str,minLength n,padChar c
* 在字符串后面追加
* repeat(String str,count n)
* 重复字符串n次
* Ints
* 用于补充Integer和Arrays中对于int类型的操作
* 常用方法
* compare
* asList
* jdk的aslist
* 把数组转化为list
* 不适用于基本数据类型
* 将数组与列表联系起来,当更新其中一个时,另一个自动更新
* 不支持add和remove方法
* contains
* 数组中是否包含某个元素
* max/min
* 求最大值和最小值
* joiner
* 简化用分隔符连接字符串的操作
* 跳过null
* result = Joiner.on(";").skipNulls().join("Harry",null,"Ron","Hermione");
* Assert.assertEquals(result,"Harry;Ron;Hermione");
* 替换null
* result = Joiner.on(";").useForNull().join("Harry",null,"Ron","Hermione");
* splitter
* 主要作用
* 用于将字符串按照某个separator分割成list或者map
* 主要内容
* splitter和mapsplitter的基本用法
* immutable/threadsafe
* trimresults和omitemptystrings
* 底层使用的substring方法
* Objects
* equal
* 提供空元素的比较
* hashCode
* 计算参数的哈希值
* 接收的是可变参数
* toStringHelper
* 用的不多
* 拼接字符串
* firstNonNull
* 返回第一个不为null的参数
* CharMatcher
* 决定一个字符是否是char
* and/or/anyOf/is/isnot
* CharMatcher.anyOf("abcd")
* removeFrom/retainFrom
* removeFrom
* 移走匹配到的字符
* retainFrom
* 留下匹配到的字符
* 配合Splitter使用
* optional
* 两种用法
* 作为方法的返回值,显式告诉调用方返回值可能为不存在
* String process()
* Optional<String>process();
* 设置默认值
* integer a = Optional.fromNUllable(b).or(0);
* 如果b为null就将a设置为默认值
* 函数式编程
* function
* 一般用于转换对象
* predicate
* 一般用于过滤对象
* joda-time
* 功能
* 子主题 1
* 异常处理
* 简介
* 返回值
* 返回值表示异常处理的结果
* RPC/HTTP接口的场景
* 异常机制
* 如何处理
* 处理类
* 日志
* 为什么要记录日志
* 方便追溯问题
* 记录重要信息
* 调试程序
* 日志库
* slf4j
* logback
* logger
* 产生日志事件
* appender
* 将日志事件代理到具体的日志记录组件
* layout
* 把日志事件格式化成具体的日志记录
* 代码规范
* 命名
* 类名
* 名词或形容词
* 首字母大写驼峰体
* 方法名
* 动词
* 首字母小写驼峰体
* 包名
* 使用无下划线小写
* 常量
* 下划线分隔全大写
* 接口
* 注释
* 类说明性的注释
* 接口功能注释
* 逻辑
* 避免复杂的逻辑判断
* 循环嵌套不要超过两层
* 关于旧代码
* 有版本管理的时候,删除不用的代码
* 禁止使用注释删除大片代码
* JDK Collection
* List
* ArrayList
* LinkList
* Set
* HashSet
* LinkedHashSet
* TreeSet
* Map
* HashMap
* LinkedHashMap
* TreeMap
* 方法
* shuffle
* 打乱顺序
* sort
* 排序
* 默认从小到大
* ordering.nature().reverse()
* ordering.nature().reverse().sortedCopy()
* 新生成一个list
* 子主题 3
* guava容器
* 比较
* jdk容器
* 存放独立元素
* collection
* 存放key-value元素
* map
* guava容器
* 迭代器
* 迭代器通常提供给容器使用者,用于遍历容器
* 使用方法
* while(iterator。hasNext()){E element = interator.next;...}
* remove用于删除容器中的元素,调用前必须调用一次next()方法
* 通过使用next,hasnext,remove方法可以实现迭代器,通过包装迭代器可以改变迭代器的行为。
* 缓存
* 缓存设计
* 问题
* 存储的数据结构
* 全局的hash表
* key-value键值对
* 提供get/put方法来操作缓存
* 容量大小
* 规定最大容量
* 有效期
* 设置有效期
* 记录访问时间
* 决定是否有效
* 清理策略
* 置换算法
* 缓存统计相关指标
* 命中率
* 命中次数
* miss率
* 每个get方法做结果统计
* guava cache
* newBuilder
* cache构造器,builder模式
* maximumsize
* 缓存最大容量
* expireAfterAccess
* 缓存有效期
* refreshAfterWrite
* 自动刷新缓存时间间隔
* removaListener
* 元素移除时的监听器
* recordStats
* 记录缓存使用情况
* CacheLoader
* 定义刷新缓存的方法
* guava io
* java io
* io流
* input
* inputstream
* 字节流
* inputReader
* 字符流
* output
* guava io
* ByteStreams
* 字节流
* toByteArray(inputstream
* CharStreams
* 字符流
* toString(Readable)
* Files&Resources
* 源与汇
* 所有的数据源提供一个统一的接口
*XMind: ZEN - Trial Version*