自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 MySQL 数据库详解

MySQL 数据库的操作分类根据数据库的对象层级,可以将SQL的基础操作分为四类:数据库(DB)操作。 数据表(Table)操作。 数据字段(Field)操作。 数据操作。一、数据库(DB)的基本操作在终端的任何位置,输入如下命令,即可进入 mysql 命令的执行窗口:mysql -u root -p1、创建数据库create database 数据库名称 [数据库选项];数据库名称的命名规范:由数字、字母和下划线组成。 不区分大小写。 不能以数字开头。 建议使

2021-02-20 16:41:58 285

原创 Flutter 常用控件使用详解

目录配置Flutter常用控件TextTextField组件ContainerImageGridViewRow水平组件Column垂直布局Stack层叠布局参考配置由于Flutter会同时构建Android和IOS两个平台的发布包,所以Flutter同时依赖Android SDK和iOS SDK,在安装Flutter时也需要安装相应平台的构建工具和SDK,在国内访问Flutter有时可能会受到限制,Flutter官方为中国开发者搭建了临时镜像,可以将如下环

2021-02-04 15:01:10 741 1

原创 Dart 使用分析

目录初识Dart变量方法异常处理类库异步支持与async/await初识DartDart中强制使用分号,javaScript 可以使用或者不适用分号,但是 Dart 必须使用分号和java 类似。 Dart 是强类型语言,但是支持类型推断, 所以实际开发中,可以不用写 void ;Dart 可以使用如下语法 [var|<Type>] variableId 声明一个变量,如果一个变量没有指定初始值,那么 它的初始值是 null,int 类型的变量初始值...

2021-02-04 10:23:23 527

原创 Flutter原理分析

Flutter 介绍Flutter的目标是使同一套代码同时运行在Android和iOS系统上,并且拥有媲美原生应用的性能,Flutter甚至提供了两套控件来适配Android和iOS(滚动效果、字体和控件图标等等)为了让App在细节处看起来更像原生应用。在Flutter诞生之前,已经有许多跨平台UI框架的方案,比如基于WebView的Cordova、AppCan等,还有使用HTML+JavaScript渲染成原生控件的React Native、Weex等。基于WebView的框架优点很明显,它们几.

2021-02-03 16:54:15 887

原创 Java 中 volatile 分析

一、volatile 轻量级锁 synchronized 是阻塞式同步锁,valotile 在激烈竞争的情况下,会升级为重量级锁,有两个核心 (工作内存和主内存),三大性质:可见性,原子性,安全性。二、 volatile 用途 多线程并发编程中,各个线程从共享变量的主内存拷贝到工作内存中,引擎会基于工作内存的数据进行处理。线程对volatile 变量的修改会立即被其他线程所感知 被volatile修饰的变量,能够使线程获得变量的最新值,从而避免出现脏...

2020-11-13 16:07:27 90

原创 Java 中死锁问题

一、死锁产生的原因 启动两个线程 监听两个对象, obj1 和 obj2 ,线程1 启动的时候先获得obj1 锁,暂停1s,再去获得obj2的锁,线程2启动的时候先获得obj2锁,在获取obj1的锁当线程2获取obj2锁再去获得obj1对象的时候,发现obj1被线程1所占用此时就等到, 线程 1 1秒后获得,obj2,被线程2 占用,由于互相持有对方的锁,就会陷入无限的等待。这就产生死锁。回到整个程序代码无法执行下去,占用大量的内存空间,甚至导致系统崩溃。 private ...

2020-11-13 15:54:21 108

原创 Java 多线程并发 ReentrantLock锁

一、synchronized 和 ReentrantLock 的区别 synchronized 和 ReentrantLock ,都是加锁方式同步,一个线程正在执行,另一个线程必须等待。 使用分析: ReentrantLock 是Lock 的实现类,在 多线程竞争的环境下,更有性能优势,使用更加的灵活, 但是需要手动的去开启锁和释放锁,尽量放在 try catch finally 中 是适用于修饰代码块 ...

2020-11-13 15:51:04 251

原创 Java多线程并发synchronized锁

一、基本概念 synchronized 是由 monitorenter / monitorexit 的指令实现的。Java 6之前完全是依赖操作系统的互斥锁。现在的JDK中,JVM对此进行了改进,提供了三种monitor 的实现,偏斜锁(Biased Lock),轻量级锁,重量级锁很大程度上的提高了性能。 升级降级:是JVM 对synchronized的优化,检测到不同的竞争状况,JVM会自动的切换到适合的锁,没有竞争出现的时候,默认出现的是 偏斜锁,JVM会采用CA...

2020-11-13 15:44:12 107

原创 Java中String深入分析

一、概述 字符串的缓存 intern 方法,从永生代移到了堆中,由char[] 变为了 byte[] 减少了内存的使用空间。为了避免在系统中创建大量的对象,由此引入了字符串常量池。二、运行机制 创建一个字符串时,会先从字符串常量池中寻找相同的字符串,如果有不需要创建对象,直接返回对象引用;如果没有需要创建字符串对象,放入常量池中,返回对象引用, new String 的字符串时 存放在 堆中的,不检查字符串常量池。String str1 = "123"; //通...

2020-11-13 15:37:06 66

原创 Java中static内存分析

一、static的作用和特点static 可以 作用与 成员变量, 成员方法, 内部类 , 静态代码块 a. 作用于 成员变量和成员方法上:1. 是属于 这个类的,对内部所有的对象共享,推荐使用 类名.方法。 2.static修饰的成员变量,存放在内存的方法区 b. 作用于 内部类 :内部类是不持有外部引用。不能使用外围所有 非static方法。 c. 作用于静态代码块:静态代码块优先于非静态代码块执行,(静态代码块 -> 非静态代码块 -&g...

2020-11-13 15:24:41 1707

原创 android 手机应用时长

项目中要求写一个统计桌面各个应用的使用情况的卡片,包括使用时间, 点击次数,使用流量。android 提供了一个UsageStatsManager 的类可以使用。记录 应用的信息。使用之前要加上<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/><!--使用时长-->UsageStatsManager manager = (UsageStatsManager)con...

2020-09-18 12:16:29 1002

原创 LinkedList 源码分析和使用

1.概述 底层实现是 双向链表,插入的效率比ArrayList高,但是随机访问的效率并没有 ArrayList 高。同时实现了 List 和 Deque,可以称为有序的容器, 也可以是队列,或者可以称为 栈(Stack)。2.使用 //创建存放int类型的linkedList LinkedList<Integer> linkedList = new LinkedList<>(); /******...

2020-09-16 12:47:50 193

原创 ArrayList 使用和源码分析

1.概述 底层数组实现的,节约空间,但是数组是有容量限制的,超出限制时,使用 System.arrayCopyXXX复制到新的数组中,因此最好能够预估出数组的大小,默认第一次的创建的是 大小为 10 的数组。按照数组的下标访问元素性能是很高的,这特使数据的基本优势,直接在数组的尾部加入元素的性能也很高,但是 按下标,插入,删除元素的话,则需要 System。arrayCopyXXX 来移动元素,这时性能就差了,这是劣势。arrayList 可以自动的扩容,也就是 动态数组。 存放引用...

2020-09-16 12:18:13 74

原创 Kotlin 类的扩展

### companion Object 外部类可以直接访问对象,不需要通过对象指针class AndroidDetailActivity : WebViewActivity() , AndroidCollectContract.View{ //companion object的好处是,外部类可以直接访问对象,不需要通过对象指针 companion object { const val INTENT_TAG...

2020-09-07 23:01:24 375

原创 Kotlin 函数、扩展函数

### with函数 with函数用于对同一个对象执行多次操作而不需要反复把对象的名称写出来 fun main(args: Array<String>) { val result = StringBuilder() result.append("yyy") result.append("\n") for (letter in 'A'..'Z') { result....

2020-09-07 22:55:09 465

原创 Kotlin 协程使用和原理分析

### 什么是协程 子程序或者称为函数,在所有的语言中都是层级调用,如:A调用B,B在执行过程中又调用了C,C执行完毕返回,B执行完毕返回,最后是A执行完毕。所以子程序是 通过栈来实现的,一个线程就是执行一个子程序。子程序调用总是一个入口,一次返回,调用顺序是明确的。 而协程看上去是子程序,执行的过程中,在 子程序中可中断,去执行其他的子程序,在适当的时候可以回来接着执行。 官方的定义:协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于...

2020-09-07 22:38:57 444

原创 Kotlin lamdba表达式

### lambda 有什么作用 Lambda 表达式是一种很简单的方法定义一个 匿名函数,避免写一些函数的抽象类或接口,然后在类中实现他们,Kotlin中函数可以作为另一个函数的参数。### 都有那些使用场景 View.setOnClickListener() 方法。使用Java 的方式增加点击事件。 public interface OnClickListener { void onClick(View v); }...

2020-09-07 21:58:12 112

原创 Kotlin 高阶操作符

一、总数操作符### any操作符 val list = listOf(1, 3, 5, 7, 9) println(list.any { it > 13 }) //false println(list.any { it > 7 }) //true### all操作符 val list = listOf(1, 3, 5, 7, 9) println(list.all { it > 13 }) //fal..

2020-09-07 16:35:39 517

原创 Glide源码分析和低内存优化

### Glide加载图片的应用场景App在使用的过程中,会经常需要加载图片。1.从网络中加载图片,一般都是从服务器端获取图片的文件流,在通过 BitmapFactory.decodeStream(inputStream)来加载 bitmap。2.压缩网络图片,网络加载少量的图片不会出现问题,但是若短时间内加载大量的图片,短时间内占用大量的内存,造成内存抖动,甚至稻城 OOM(内存溢出)3.变换图片,剪切切割圆角,旋转,高斯模糊等。...

2020-08-27 13:06:27 995

原创 Retrofit源码分析

### Retrofit介绍Retrofit是Square 公司开发的一款正对Android 网络请求的框架。底层基于OkHttp 实现,OkHttp 已经得到了google 官方的认可。Retrofit是由Square公司出品的针对于Android和Java的类型安全的Http客户端,如果看源码会发现其实本质上是OkHttp的封装,使用面向接口的方式进行网络请求,利用动态生成的代理类封装了网络接口请求的底层,其将请求返回JavaBean,对网络认证REST API进行了很友好的支持。...

2020-08-26 12:44:35 217

原创 kotlin 语法分析(四)-- with ,let ,apply

Lambda表达式可以很好的去定义一个 匿名函数,避免我们去写一些某些函数的抽象类和接口,然后去实现它们,在kotlin中我们 可以将一个函数作为另一个函数的参数 简化setOnclickListener ()Android中的常用额点击事件 View.setOnclickListenr(),如果使用java中的代码去编写 ,需要下去书写一个接口,public interface OnClickL

2017-11-17 13:25:59 247

原创 kotlin语法分析(三)

操作符的重载kotlin 有一些固定数量象征性的操作符,可以在任何类中去引用它们, 就是创建一个方法, 方法名为保留的操作符的关键字,这样就可以将这个操作符的行为映射到这个方法,重载这些代码可以增加代码的可读性和简介性. 一元操作符表 操作符 函数 +a a.unaryPlus() -a a.unaryMinus() !a a.not() a++ a.inc(

2017-11-17 13:25:20 189

原创 kotlin语法分析(二)

AnkoAnko是JetBrains开发的一个强大的库。主要是用来替代以前的xml方式生成代码的ui布局,它可以让我们来简化一些代码就像咱们使用的Anko库中的某些东西,它们就会以属性名,方法等饭方式导入. 在 MainActivity:onCreate ,一个Anko扩展函数可以被用来简化获取一个 RecyclerView:val forecastList: RecyclerView = fi

2017-11-17 13:23:35 178

原创 kotlin语法分析(一)

AS环境的配置项目下的 build 文件 buildscript { ext.anko_version = '0.10.0-beta-2'//定义当前版本,方便后来引用 ext.kotlin_version = '1.1.2'//定义当前版本,方便后来引用 ext.support_version='25.0.3' repositories { jcen

2017-11-17 13:22:42 595

原创 android 的混淆的那些事(模版)

代码的混淆: 在app目录下的build.gradle文件中添加如下代码: buildTypes { release { minifyEnabled true //打开混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.

2017-11-17 13:17:30 195

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除