Flutter实战之Gank Demo实践

初学Flutter,看了两天文档,花了两天时间利用gank.io提供的api接口实践了下Flutter,写了个Demo.

主要实践了Flutter的如下几个知识点:

Flutter入门之Could not find lint-gradle-api.jar

这两天在学习Flutter,学习过程中尝试着写了个Demo,然后在Android平台运行想看下效果,结果直接gradle都没过,错误提示如下:

1
2
3
Where: Build file 'PROJECTPATH/android/app/build.gradle' line: 25
What went wrong: A problem occurred evaluating project ':app'.
Could not resolve all files for configuration 'classpath'. Could not find lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2). Searched in the following locations: https://jcenter.bintray.com/com/android/tools/lint/lint-gradle-api/26.1.2/lint-gradle-api-26.1.2.jar

多线程之:Synchronized与ReentrantLock

什么是线程安全

  1. 保证多线程环境下共享的、可修改的状态的正确性。(这里的状态在程序中可以看作为数据)
  2. 反着来说则是如果状态非共享、不可修改,也就不存在线程安全的问题

React Native学习问题记录

最近做了一个RN的项目,RN小白,自然遇到了不少问题,这里记录一下。

整洁代码的理解

前段时间看了《代码整洁之道》这本书,书中的一些观点讲的很不错,这些观点很容易让人对号入座,也很容易让人知道自己写的代码是否漂亮、是否整洁。通过这篇文章记录下读后感和书中的一些观点。

Hashtable、HashMap、TreeMap

Hashtable、HashMap、TreeMap都是比较常见的一些Map实现,它们都是key-value键值对的形式存储和操作数据的容器类,同时他们的元素中不能有重复的key,一个key也只能映射一个value值。

下面我从不同的维度来分别说说这三个集合,文章中涉及到的源码版本是JDK8

Hash冲突解决方法

何为Hash冲突

假设Hash表大小为5(即5个槽位),现在要把2,5,6,7,8这几个数存储到Hash表中,假设hash函数为hash(num)=num % size

简单计算下,第一个数2的hash值为2所以放到第三个槽中,第二个数5的hash值为0放到第一个槽中,第三个数6的hash值为1放到第二个槽中,如下图所示:

1号槽 2号槽 3号槽 4号槽 5号槽
5 6 2

final、finally、finalize

final

  1. final可以用来修饰类、方法、变量,修饰对象不同所代表的意义也不同
    • 修饰类则代表该类不可继承扩展
    • 修饰方法则代表该方法不可重写
    • 修饰变量则代表该变量某种程度不可更改。为什么说是某种程度呢,因为这需要根据变量的类型来区分
      • 如果修饰的变量是基本类型,则该变量赋值一次之后就无法修改,这是final就是不可变的标志
      • 如果修饰的变量是引用类型,那么该变量赋值一次之后,就无法修改该变量的引用,但是该引用对象的属性还是可以更改的,比较常见的就是变量引用了一个List,虽说用了final修饰,但是依然可以对该List的元素进行各种操作
  2. 将变量或参数使用final修饰可以清楚的避免意外赋值导致的编码错误
  3. 因为final修饰变量产生了某种程度的不可变的特性,所以它可以保护只读数据,因此在并发编程中使用final修饰变量有利于减少额外的同步开销,也可以省去一些防御性拷贝必要,从而提升性能

Exception与Error

这里写图片描述

相同点

ExceptionError都是继承自Throwable,在Java中只有Throwable的实例才可以被抛(throw)出或捕获(catch),它是java异常处理机制的基本组成类型。

ExceptionError体现了Java平台设计者对不同异常情况的分类

强引用、软引用、弱引用、虚引用

在Java语言中,除了基本数据类型外,其他的都是指向各类对象的对象引用;Java中根据其生命周期的长短,将引用分为4类。

强引用

特点:我们平常典型编码Object obj = new Object()中的obj就是强引用。

通过关键字new创建的对象所关联的引用就是强引用。 当JVM内存空间不足,JVM宁愿抛出OutOfMemoryError运行时错误(OOM),使程序异常终止,也不会靠随意回收具有强引用的“存活”对象来解决内存不足的问题。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了,具体回收时机还是要看垃圾收集策略。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×