test

####工作内容
1. 自学__markdown__语法。
2. 参加培训课程,听老师__讲解考试题目__。
3. 组织__小组会议__,讨论题目中出现的问题,总结老师所讲内容。

___
###心得体会
下午听朱仕智老师讲解了昨天的考试题目,下面对重点内容进行总结:
* 不管是小作业还是之后的项目,拿到问题后,首先应该对问题进行__分解__,而不是盲目的开始编码。需要对问题进行__抽象__,找到解决问题需要的步骤,按照步骤设置处理函数,使程序层次分明,提高可读性和可维护性。
* 常量名大写,以下划线分割。例如`CONTEXT_PATH`。
* 变量名称需要包含一定的信息,增强可读性,即使脱离上下文环境,也能读懂其含义,避免诸如`BufferedReader br`类写法。
* __处理错误__方式:
> 1. 直接失败
> 2. 重试
> 3. ...
* 在函数中,尽量使用返回值来获取所需值,不要使用__全局变量__,因为当有多个方法同时操作该全局变量时,容易产生错误。也不要过多的使用引用参数,在程序中对引用参数进行修改,这种方法降低了程序的可读性。
* 老师简单介绍了__log4j__的使用,由于昨天自学了这部分知识,今天能够较好的理解老师所讲内容,体现了预习的重要性。需要注意的是,将日志输出时 的字符串拼接改为__占位符__,因为如果日志输出级别较高,如   `INFO`,那么`DEBUG`级别的logger都不会输出,但是字符串拼接过程仍然会执行,带来额外的计算。
* __面向接口编程__:如果接口能够满足要求,尽量对接口进行操作,如
```java
List<String> list = new LinkedList<String>();
```
这样如果改变具体实现方式,只需要改变后面`LinkedList`,提高代码的可维护行。
* 关闭流__代码重用__,提取出来作为公共方法。而且,关闭流时要单独关闭,单独try...catch。
* 对于日期等内容,在类中最好使用对应的`Date`类型进行存储,不要使用String类,因为String不仅包含了时间含义,还包含了具体的格式。
* 慎用Map,因为Map是键值对,可以表示任何东西,可能降低了代码可读性。
* 公司要求,__单行代码也要加括号__。
* `toString()`方法不要写死,除非输出格式一定不变。可以考虑将输出方法留给外部定义。
* 写文件时考虑系统差异,即代码的__可移植性__,多使用系统变量。
* `System.out.println();`底层是__synchronized__,也就是说同步方法,会造成堵塞,尽量避免使用。
* 时刻注意__代码重用__,单个函数完成简单的功能,同时注意代码__可读性__,没有性能瓶颈时不要盲目优化。
* 预见可变性,设置变量和配置文件,方便__代码重构__。
* 大多数情况下一行一行的读文件,所以将其抽取出来作为__公共方法__,例如`IOUtil`类。
```java
  public static List<String> readLines(File file, Charset charset)
      throws IOException {
    // don't use asCharSource(file, charset).readLines() because that returns
    // an immutable list, which would change the behavior of this method
    return readLines(file, charset, new LineProcessor<List<String>>() {
      final List<String> result = Lists.newArrayList();

      @Override
      public boolean processLine(String line) {
        result.add(line);
        return true;
      }

      @Override
      public List<String> getResult() {
        return result;
      }
    });
  }
```

* 每个函数最开始,应该设置必要的__参数检查__,如`checkNotNull()`等方法。
* 建议不要用类去实现Comparable接口,而是使用外部的__比较器__,除非确定比较方法不便,提高可维护性。
* 了解__函数式编程__、__延迟加载__等知识点。

对markdown的基本用法进行了总结,并使用markdown写日报和知识总结,以后也要如此,日积月累。
___
###问题
1. 对面向对象编程理解不够深入,方法提取,问题抽象能力不够深入。
2. 从学校到企业的思想转变仍需努力,很多情况下不能只是考虑时间复杂度和空间复杂度,还要考虑代码的可读性,可维护性和可复用性等。
3. 对很多新的技术不是很了解,包括Guava、函数式编程、延迟加载等,对已有知识的理解也不够,包括异常处理,日志管理等,在接下来的学习中需要加强。

___
###明日计划
1. 原定的JUnit学习并未完成,明日继续努力。
2. 上午提交入职材料。
3. 了解Guava源码,修改自己的代码。
4. 完成练习作业。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • ## 可重入函数 ### 可重入性的理解 若一个程序或子程序可以安全的被并行执行,则称其为可重入的;即当该子程序正...
    夏至亦韵阅读 726评论 0 0
  • 引子 公元2016年末,2017年初,某做旅行产品的互联网公司内,产品经理疯狂的提 A/BTest 需求,以至于该...
    李剑飞的简书阅读 8,753评论 7 51
  • 文/宝木笑 一门学科的冷遇或热炒都是一面残酷的镜子,映射着人类自身生活的某种极端和困惑。当阿瑟·格蒂斯、朱迪丝·格...
    宝木笑阅读 778评论 1 8
  • 四合院的故事 09 第九集 《火花》 上 一 “完蛋,我今儿又给人量错尺寸了!” “那我说你的眼镜儿是摆设啊!...
    言司so阅读 789评论 0 0