年终学习工作总结篇

今天是丁酉年的最后一个工作日,马上就要进入崭新的农历狗年——戊戌年(维新变法120周年),工作一年多的时间也是要总结一下的,也是为下一年的发展做准备。

工作中的知识积累

   在工作中直接搬轮子使用还是比较常见的事情,造的轮子不多也不精,从只会写上层代码的同时也在朝着深入研究源码原理的方向上过度。常用的第三方库主要是网络通信方面的,如Retrofit和OkHttp,在线程调度方面首选当然是RxJava,也曾尝试将三者封装一层可以拿来即用的工具。
   工作中的一个小成就就是搭建自动化测试的环境,Android的自动化单元测试其实是一个有难度的挑战,利用Android Studio自带的目录架构实现单元测试其实很方便,但是真正的自动化还是需要持续集成。万幸的一点就是项目中早就引入了Jenkins这个平台,最后打造了Jenkins+Gradle的自动化测试流程。
   设计模式也在实际项目中大量使用,只是为了写出更优雅的代码从简单的单例和工厂,到设计sdk的时候需要用到外观和观察者模式。对于一些线程和并发的理解也有一定的增长,Thread和Runnable的区别,volatile和synchronized的区别等等。

对Kotlin的认知

   Kotlin是在去年的Google I/O大会上突然成为了网红,对Kotlin的学习也加入了日程范围,不过对于它100%的兼容java的说法,只有实际去使用了才能发现坑还是很多。对于一些常见的Java程序的编写风格,Kotlin也不是全都适应。稍微举两个例子。
   例子一,Kotlin中函数定义的形参是可以赋一个初始值的,这样可以解决像Java中出现多个方法,但是Kotlin的这种写法的使用范围只能先于Kotlin本身的体系中。

    fun add(a: Int, b: Int = 2): Int{
        return a + b
    }

   上面的函数add,第二个形参有默认值,这样在使用的时候可以不用传递该惨,那在kotlin语法中可以有如下两种使用方式:

    var a  = Overload()
    var b = a.add(1)
    var c = a.add(4, 5)

   但是在Java的语法中正确的使用方式只有一种,那就是两个参数都需要传值,下方代码注释1处会出现编译错误提示:

    Overload o = new Overload();
    int a = o.add(1, 2);
    int b = o.add(1);   // 1

   例子二, Kotlin在对Java中InputStream等流的操作上,也与我们常用的Java区别很大,先举一个Java读取文件的例子:

...
     File file = new File(filePath);
     InputStream is = new FileInputStream(file);
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     int i;
     while ((i = is.read()) != -1) {
        baos.write(i);
     }
...

   这种写法基本上很固定了,特别是其中的while循环,通过循环去不断读取文件中的流,如果想用Kotlin实现这个功能,while循环就提供了一个障碍,因为在Kotlin中等式不是一个表达式,不能像Java中那样直接在判断语句中使用,这就要使用Kotlin的扩展函数。

fun main(vararg arg: String) {
    ...
    var file : File = File(path)
    var inputStream = FileInputStream(file)
    var baos = ByteOutputStream()
    var i: Int = -1
    // 优雅的例子
    inputStream.use { input ->
        baos.use {
            while (inputStream.read().also { i = it  } != -1) run {
                it.write(i)
            }
        }
    }
    // 普通的例子
    while(inputStream.read().also { i = it } != -1) {
       baos.write(i)
    }
}

fun <T> T.also(block: (T)->Unit):T {
    block(this)
    return this
}

   上面给出了两个使用扩展函数also的例子,一句话说明also函数的作用,就是返回调用它的对象,在代码中返回的就是inputStream.read(),并将其赋值给了i。这种写法在优雅和普通的例子中一样,不同的是优雅的例子中使用了use函数。use函数可以实现自动关闭资源的作用,将流或者数据库关闭,简单安全。

对未来的预期

   时下的技术风口真的是一个接一个,从移动互联网到人工智能再到今年的区块链,可谓是让一波接着一波的人前赴后继;而市场上同样每年都在变化,直播——共享经济——在线答题。对于新兴起的技术肯定是要关注的,工作之余也在学习Python以便能够及时转行到人工智能(手动滑稽),但是仍旧要保持一颗稳定的心态,不能过于浮躁趋之若鹜的去拥抱新技术。未来的学习重点还是以围绕移动端为主,逐渐扩展相关领域,博客内容也努力做到细致和全面吧。

总结

这里写图片描述
   狗年快乐,放假!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值