自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(61)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于GLSurfaceView中,setDisplayOrientation、setRotation设置无效的问题。

当使用GLSurfaceView展示摄像头画面时,可能会出现设置旋转方向无效的问题,此时需要通过调整GLSurfaceView中设置的4个顶点顺序来实现画面旋转。

2024-04-10 17:29:37 345

原创 重温OKHTTP源码

RealCall是Call接口的具体实现类,是应用端与网络层的连接器,输入应用端原始的请求与连接数据,以及网络层返回的response及其他数据流。这里作为请求参数的配置类,本身也采用了建造者模式,但相比OKHttpClient,Request就比较简单了,只有四个参数,分别是url、method、headers、body。这是一个请求配置类,采用了建造者模式,方便用户配置一些请求参数,如配置callTimeout,cookie,interceptor等等。

2024-04-05 21:22:29 1147

原创 什么是可重入锁

可重入锁(Reentrant Lock),也称递归锁,是一种支持同一个线程多次获取同一个锁的机制。即同一个线程上,可以重复获取一个锁n次,同样的,在释放时也需要释放n次。注:synchronized和reentrantlock都是可重入锁。

2024-03-31 22:36:16 88

原创 assertThreadDoesntHoldLock

确保当前线程没有持有 this 锁,否则则直接抛异常,这里是为了让该锁不可重入,避免递归调用。

2024-03-31 22:26:05 108

原创 Java线程池工作原理浅析

newCachedThreadPool:它的特点是没有核心线程,非核心线程无线,可短时间内处理无限多的任务,但实际上创建线程十分消耗资源,过多的创建线程可能导致oom,同时该线程池还设置了超时时间,还涉及到线程资源的释放,大量任务并行时性能不稳定,少量任务并行且后续不再执行其他任务的场景可用。阻塞队列常用于生产者-消费者模型,任务的添加是生产者,任务的调度执行是消费者,他们通常在不同的线程中,如果使用非阻塞队列,那么就需要使用额外的处理同步策略和线程间唤醒策略。IO密集型:通常指文件IO、网络IO等。

2024-03-30 21:00:45 571

原创 Kotlin:@JvmOverloads注解

这里是一个非常巧的操作,以这个函数为例,有4个参数,也就是4个位置,每个位置分别有一个mask值,为2的n-1次方(n就是位置的顺序),所以这四个位置代表的mask值分别为1,2,4,8。在Kotlin中,@JvmOverloads注解的作用是:在有默认参数值的方法中使用@JvmOverloads注解,则kotlin会暴露多个重载方法。最后将该结果分别与对应的mask值进行与运算,就可以得知该位置有没有参数调用,如果没有,就对该参数赋予默认值,这就实现了参数默认值的效果。我们将其转为java代码看看。

2024-03-28 22:00:08 227

原创 Kotlin协程学习之-02

使用launch、async等方法创建的协程,在执行到某个suspend方法时会从正在执行它的线程上脱离,互相脱离后的线程和协程会分别执行不同的任务。主要流程是使用async开启协程,然后调用async返回的Defered对象的await方法获取协程运算的结果。该方法可以切换到指定线程,并在闭包内的逻辑执行结束后,自动把线程切换回去继续执行。通过Dispatchers.IO参数把任务切换到IO线程执行。使用suspend标记的方法,只能执行在协程代码块中。跟launch相比,async是带返回值的。

2024-01-21 21:48:05 463

原创 Kotlin协程学习之-01

不过,kotlin的协程可以在挂起函数范围内的任意调用层级挂起,换句话说,我们启动一个kotlin协程,可以在其中任意嵌套suspend函数。非对称协程:Asymmetric Coroutine:协程出让调度权的目标只能是它的调用者,即协程之间存在调用和被调用关系。线程属于操作系统概念,协程属于编程语言范畴,它属于应用程序的API层,可以运行在线程框架上,由线程框架在背后操作代码的调度。有栈协程的优点:可以在任意函数调用层级的任意位置进行挂起,并转移调度权,但会有一定的内存开销。

2024-01-06 12:34:14 419

原创 Kotlin学习之05

/如果不定义SelfType类型,则子类在调用ConfirmNotificationBuilder().title("hello")之后,就不能再调用子类的onCancel方法,因为返回的是父类型,但实际运行时这个类型是子类型。object修饰的类内部方法相当于静态方法,该静态方法是伪静态的,也就是内部会生成一个静态的成员对象,对象的方法调用实际上是调用内部静态成员对象的方法,只有在方法上添加@JvmStatic才会真正的生成静态方法。内联特化在调用的地方会替换到调用处,因此这时类型是确定的了。

2024-01-06 12:04:59 1088

原创 JQ学习之-02

statusTxt:success、error用于判定是否成功。load:该方法从服务器加载数据,并把数据放入被选元素中。$.post():通过post方法从服务器获取数据。$.get():通过get方法从服务器获取数据。

2023-12-30 22:20:33 367

原创 JQ学习之-01

(document).ready():该方法允许我们在文档完全加载完成后执行函数。html:设置或返回所选元素的内容,包括html标签。append:在被选元素内部的结尾添加新元素。prepend:在被选元素内部的开头插入内容。remove:删除元素及子元素或删除指定元素。mouseenter:鼠标在元素之上时触发。mouseup:鼠标在元素上松开时触发。text:设置或返回所选元素的文本内容。before:在被选元素之前插入内容。$("#id").通过id获取对象。after:在被选元素之后插入内容。

2023-12-30 22:12:46 406

原创 JS学习之-05

事件传递有两种方式:冒泡与捕获,当使用冒泡方式时,内部元素的时间会先被触发,然后再触发外部元素,而捕获则相反。该方法添加的事件句柄不会覆盖已存在的事件句柄,可以添加多个相同类型的事件,比如两个click事件。onload事件可以用于检测访问者的浏览器类型或浏览器版本,本基于这些信息来加载网页的正常版本。该事件可用于在用户的鼠标移至HTML元素上方或移出元素时触发函数。三个事件构成了鼠标点击事件的所有部分。onload、onunload事件。事件会在用户进入或离开页面时被触发。document对象。

2023-12-30 21:36:23 334

原创 JS学习之-04

该函数可以调用父函数的作用域属性,而父函数作为匿名函数,其私有变量由自身的域所控制,外部修改该属性只能通过向外暴露的函数进行操作。而父函数本身被该函数持有,则不会引起回收。href="#"与href="javascript:void(0)"的区别。#包含了一个位置信息,默认的锚是#top,也就是网页的上端。而javascript:void(0)仅表示一个死链接。该函数可以在指定time时间后使用子线程执行一个函数。该操作符指定要计算一个表达式但是不返回值。Promise与async、await。

2023-12-30 21:10:36 416

原创 JS学习之-03

JSON.stringify():将一个js值转换为json字符串。JSON.parse():将一个json字符串转换为js对象。const声明一个只读的常量,一旦声明,常量的值就不能改变。let声明的变量只在let命令所在的代码块内有效。let声明的关键字无法使用window对象调用。required:规定输入元素字段是必须的。disabled:规定输入的元素不可用。pattern:规定输入元素值的模式。max:规定输入元素的最大值。min:规定输入元素的最小值。type:规定输入元素的类型。

2023-12-30 17:59:07 329

原创 JS学习之-02

该方法是一个正则表达式方法,用于检索字符串中的正则表达式的匹配,改方法返回一个数组,其中存放匹配的结果,如果未找到匹配,则返回null。该方法是一个正则表达式方法,用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回true,否则返回false。g:执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)n*:匹配任何包含零个或多个n的字符串。:匹配任何包含另个或一个n的字符串。n+:匹配任何包含至少一个n的字符串。[0-9]:查找任何从0-9的数字。(x|y):查找任何以|分隔的选项。

2023-12-30 17:39:20 331

原创 JS学习之-01

非严格模式下,给未声明变量赋值创建的全局变量,是全局对象的可配置属性,可以删除。lastIndexOf():返回字符串中检索指定字符最后一次出现的位置。在函数外部声明的变量是全局变量,网页上的所有脚本和函数都能访问它。slice():提取字符串片段,并在新的字符串中返回被提取的部分。indexOf():返回字符串中检索指定字符第一次出现的位置。concat():连接两个或多个字符串,返回连接后的字符串。substr():从起始索引号提取字符串中指定数目的字符。search():检索与正则表达式匹配的值。

2023-12-30 10:45:06 313

原创 CSS3学习之01

nowrap:默认,弹性容器为单行,该情况下弹性子项可能会溢出容器。content-box:width是内容区大小。border-box:width是整体的大小。flex-direction:布局内子元素的排列方式。内容对齐:把弹性元素沿着弹性容器的主轴线对齐。column-reverse:从下到上。fiex-start-默认值-左对齐。space-between:左右对齐。row-reverse:从右到左。space-around:均分。wrap-reverse:反转。flex-end-右对齐。

2023-12-29 23:01:36 833

原创 CSS学习之-06

:first-letter选择每个<p>元素的首字母。::first-line选择每个<p>元素的首行。}:把包含title=runoob的元素变为蓝色。}:把title存在runoob的元素变为蓝色。}:把title包含runoob的元素变为蓝色。::before在每个<x>元素之前插入内容。::selection选择用户选择的元素部分。}匹配同一层级的第一个p元素下的所有i元素。}:把包含title的所有元素变为蓝色。}匹配同一层级的第一个p元素。}匹配p下的第一个i元素。

2023-12-29 22:07:21 392

原创 CSS学习之-05

本实例表示可选择紧接在<p>元素后的<p>元素,且二者有相同父元素。}本实例表示可选择在<div>元素后的所有相邻<p>兄弟元素。} 本实例表示选取<div>元素的内的所有<p>元素设置。}本实例表示选取<div>元素下的直接子元素<p>设置。后代选择器用于选取某元素的后代元素。子元素选择器:以大于号>分隔。相邻兄弟选择器:以加号+分隔。后代选择器:以空格分隔。

2023-12-29 21:09:44 369

原创 CSS学习之-06

float:left、right 左右对齐,当使用float时,子元素的高度大于父元素,且子元素设置了浮动,那么子元素将溢出,这时候你可以使用clearfix(清除浮动)来解决问题。position:absolute-left、right 左右对齐。text-align:文本对齐方式,使用center实现居中。使用position+transform实现垂直居中。margin:元素对齐方式,使用auto实现居中。

2023-12-29 18:01:58 356

原创 CSS学习之-04

float:元素的水平方向浮动,意味着元素只能左右移动而不能上下移动。一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含边框或另一个浮动框的边框为止。浮动元素之后的元素将围绕它。浮动元素之前的元素将不会收到影响。使用了clear的元素,其左右不会出现浮动元素,会新开一行进行显示。如果不用clear,则该元素会跟在上一个浮动元素之后,下一个浮动元素则会靠近上一个浮动元素,但不跟这个元素在同一行。元素浮动后,周围的元素和会重新排列,为了避免这种情况,使用clear属性。清除浮动-clear。

2023-12-29 17:39:56 354

原创 CSS学习之-03

scroll:内容会被裁剪,但是浏览器会显示滚动条以便查看其余内容。auto:如果内容被裁剪,则浏览器会显示滚动条以便查看其余内容。Overflow:该属性用于控制内容溢出元素框时显示的方式。inherit:规定应该从父元素集成overflow属性的值。visible:默认值,内容不会被裁剪,会呈现在元素框之外。hidden:内容会被裁剪,并且其内容是不可见的。

2023-12-29 17:22:34 330

原创 CSS学习之-02

相对定位元素的定位是相对其正常位置,通过使用top、left、right、bottom来改变元素位置。(注意:Internet Explorer,Edge15及更早版本的IE不支持Sticky定位,Safari需要使用-webkit-prefix(prefix等于需要使用的定位名称):绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于<html>。:默认值,即没有定位,准寻正常的文档流对象,该定位不会受到top、bottom、left、right影响。

2023-12-29 17:18:03 532

原创 CSS学习之01-选择器

id#_id {class选择器._class {分组选择器p {嵌套选择器。

2023-12-29 16:26:11 307

原创 Kotlin学习之04

flatMap:集合中所有元素映射到新集合并合并这些集合得到新集合(将一个输入的元素转换成一个集合,再将所有集合合并)map:集合中所有元素映射到其他元素构成新集合(就是转换每个元素,然后再组成一个新的结果)val strList = listOf("测试", "2", "3")fold:给定初始化值,将元素按规则聚合,结果与初始化值类型一致。reduce:将所有元素依次按规则聚合,结果与元素类型一致。zip:将集合与另一个集合进行合并,长度按最短的集合长度算。groupBy:将集合内数据按条件分类。

2023-12-04 22:13:40 122

原创 Kotlin学习之03

also将T对象(即引用also的对象)作为函数的参数,那么在扩展函数内部,就可以用it替代T对象进行方法调用,而且let函数本身会对对象进行非空判断,返回值是对象本身。let将T对象(即引用let的对象)作为函数的参数,那么在扩展函数内部,就可以用it替代T对象进行方法调用,而且let函数本身会对对象进行非空判断,返回值是函数返回值。将函数作为T对象(即引用run的对象)的扩展函数,则在函数内部可用this引用T对象,并使用T对象的方法,返回值是函数本身。将函数作为对象的扩展函数,返回函数本身。

2023-12-02 21:36:37 393

原创 Kotlin学习之02

添加inline关键字的函数标记为内联函数,内联函数的特点是,代码会被直接插入到调用处,编译的代码反编译的结果就是代码直接插入到调用处的结果。内联函数效率高一些。kotlin支持运算符重载,类似C++,kotlin中的==、+、>、[]、包括函数调用符号()都是kotlin中内置好的重载运算符。中缀函数,如果函数:是成员函数/扩展函数、只有一个参数、标有infix关键字,就可以认为是一个中缀函数。kotlin里的lambda表达式是一个匿名函数的语法糖,因此它的类型其实就是对应的函数类型。

2023-11-13 20:22:56 555

原创 Kotlin学习笔记-Kotlin基础-01

Kotlin变量不能持有Null值,如果要使变量持有Null,它必须是可为Null类型,可以在变量类型后面加上?let不是关键字,而是一个函数,提供了函数式API的编程接口,会将调用者作为参数传递到lambda表达式,调用之后会立马执行lambda表达式的逻辑。数据类只处理数据相关,与java bean类似,通常需要实现其get、set、hashCode、equals、toString等方法。var:用于值不改变的变量,使用val声明的变量无法重新赋值。val:用于值可以改变的变量。

2023-11-07 00:06:04 385

原创 数据结构与算法(系列文章一)

本系列是关于数据结构与算法内容,系列内容出自“数据结构与算法分析-Java语言描述”,主要是对于书中内容的归纳总结,,并将自己的一些理解记录下来,供以后翻阅。如果文章内容有误,欢迎各位批评指正。一、定理1、指数 X^a*X^b=X^a+b X^a/X^b=X^a-b (X^a)^b=X^a*b X^n+X^n=2*X^n 2^n+2^n=2^n+12、对数 在计算机科学中,除非特殊说明,否则所有的...

2020-05-24 18:28:22 475

原创 androidx版本查询

androidx库版本查询https://developer.android.google.cn/jetpack/androidx/versions/

2020-04-21 11:17:23 795

原创 Java的成员变量能否被override?

public class Super { String name = "Super";}public class Child extends Super { String name = "Child"; public String getName() { return super.name; }}public cla...

2020-04-11 23:59:01 471

原创 Java中的反射与注解

//Java中的反射 //Java反射机制是指在运行状态中 // //对于任意一个类,都能知道这个类的所有属性和方法; //对于任何一个对象,都能够调用它的任何一个方法和属性; //这样动态获取新的以及动态调用对象方法的功能就叫做反射。 //反射机制的相关类 // ...

2020-04-11 23:56:58 116

原创 ARouter踩坑之'ARouter::: ARouter::There is no route match the path [/MyRouter2/ARouter3Activity] '

组件化开发中,使用了ARouter作为路由组件,使用过程中出现了'ARouter::: ARouter::There is no route match the path [/MyRouter2/ARouter3Activity] '原因使用了@Route注解的module@Route(path = "/MyRouter2/ARouter3Activity")都必须引用'an...

2020-04-09 19:07:56 448

原创 ARouter踩坑之'Program type already present: com.alibaba.android.arouter.routes.ARouter$$Group$$My'

Program type already present: com.alibaba.android.arouter.routes.ARouter$$Group$$MyRouter2Learn how to resolve the issue at https://developer.android.com/studio/build/dependencies#duplicate_classes....

2020-04-09 18:52:40 2271

原创 企业各职位英文缩写

经常看到一些职位的缩写,今天记录下来,留作以后参考:企业各职位英文缩写:GM(General Manager)总经理VP(Vice President)副总裁FVP(First Vice President)第一副总裁AVP(Assistant Vice President)副总裁助理CEO(Chief Executive Officer)首席执行官,类似总经理、...

2020-04-09 15:51:11 2720

原创 安卓Application生命周期

class MyApplication : Application(){ //应用创建时调用 override fun onCreate() { super.onCreate() } //在低内存时被调用 override fun onLowMemory() { super.onLowMemory() } ...

2020-04-08 23:58:05 999

原创 黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试

黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试黑盒测试、白盒测试、单元测试基本由从开发人员在不同阶段要做的事。单元测试:是指对软件中的最小可测试单元进行检查和验证。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分想隔离的情况下进行测试。黑盒测试:在不考虑程序内部结构和逻辑结构的情况下,来测试系统的功能是否满足规格说明书。一般会有一个输...

2020-04-07 08:27:46 2373

原创 CI/CD、TDD、BDD

CI/CD的概念CI全名Continuous Intergration,意为持续集成CD全名Continuous Deployment,意为持续部署也可以叫做Continuous delivery,意为持续交付。其意义在于,重复的工作可以使用自动化代替,减少时间成本、降低版本发布时间。一般使用Jenkins进行CI、CD操作。TDD:测试驱动开发,以测试为主,开发跟着测试走...

2020-04-07 08:26:05 658

原创 关于使用MigrationHelper为GreenDao数据库进行升级操作,数据迁移的方法。

MigrationHelper采用的是网上的源码,地址https://github.com/yuweiguocn/GreenDaoUpgradeHelper该方法主要是通过创建临时表,将旧表的数据迁移到新表中。使用步骤:1、新建一个类继承DaoMaster.DevOpenHelper,重写onUpgrade(Database db, int oldVersion, int newVe...

2020-04-06 18:38:49 719

原创 Android Studio升级3.6之后AndroidManifest.xml设置activity方向screenOrientation报错

Expecting 'android:screenOrientation="unspecified"' or '"fullSensor"' for this activity so the user can use the application in any orientation and provide a great experience on Chrome OS devices这...

2020-04-06 18:35:20 1143 1

JNIDemo.zip

JNIDome

2017-05-10

空空如也

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

TA关注的人

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