- 博客(426)
- 资源 (53)
- 收藏
- 关注
原创 DesignPattern - 建造者模式【创建型】
欢迎关注微信公众号:FSA全栈行动 ????一、建造者模式介绍建造者模式(Builder Pattern)使用多个简单的步骤一步步构建成一个复杂的对象,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建出不同的实例;允许用户只通过指定复杂对象的类型和内容就可以构建它们,不需要知道内部的具体构建细节。核心组成Product:产品角色Builder:抽象建造者,定义多个通用方法和构建方法ConcreteBuilder:具体建造者,可以有多个Director:指挥者
2021-08-02 21:33:23 225
原创 DesignPattern - 原型模式【创建型】
欢迎关注微信公众号:FSA全栈行动 ????一、原型模式介绍原型模型(Prototype) 是一种对象创建型模式,使用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,主要用于创建重复的对象,同时又能保证性能。工作原理是将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过原型对象拷贝自己来实现创建过程。原型模型应该是最简单的设计模式了,实现一个接口,重写一个方法即可完成原型模式。核心组成Prototype:声明克隆方法的接口,是所有具体原型类的公共父类,也就是 Clone
2021-07-27 23:44:55 121
原创 DesignPattern - 工厂模式【创建型】
欢迎关注微信公众号:FSA全栈行动 ????一、工厂模式介绍工厂模式提供了一种创建对象的最佳方式,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。例子:需要购买一辆车,不用管车辆如何组装,且可以购买不同类型的汽车,比如轿车、SUV、跑车,直接去 4s 店购买就行(4s 店就是工厂)工厂生产电脑,除了 A 品牌、还可以生产 B、C、D 品牌电脑支付业务开发,会统一下单和支付接口,具体的支付实现可以是微信、支付、银行卡等分类:简单工厂模式:通
2021-07-27 00:12:18 146
原创 DesignPattern - 单例模式【创建型】
欢迎关注微信公众号:FSA全栈行动 ????一、单例模式介绍通过单例模式可以保证系统中,应用该模式的类只有一个对象实例。好处:节省内存(没必要存在 多个功能相同的对象)提高性能(有些对象的创建很耗系统资源)分类:饿汉:提前创建对象(class 一加载就创建)懒汉:延迟创建对象(调用 getInstance() 时再创建)实现步骤:私有化构造函数提供获取单例的方法二、单例模式代码实现1、饿汉式饿汉方式:提前创建好对象优点:实现简单,没有多线程同步问
2021-07-22 21:20:43 102 1
原创 DesignPattern - 设计原则与设计模式初探
欢迎关注微信公众号:FSA全栈行动 ????一、设计原则设计模式是站在设计原则的基础之上的,所以在学习设计模式之前,有必要了解一下设计原则软件设计开发原则为了让代码有更好的重用性,可读性,可靠性,可维护性有六大原则,英文首字母拼在一起就是 SOLID(稳定的),所以也称之为 SOLID 原则1、单一职责原则(Single Responsibility Principle)一个类只负责一个功能领域中的相应职责,就一个类而言,应该只有一个引起它变化的原因是实现 高内聚、低耦合 的指
2021-07-20 21:32:31 132
原创 Python - 爬虫之Scrapy
欢迎关注微信公众号:FSA全栈行动 ????一、scrapy 概念和流程1、概念Scrapy 是一个 python 编写的,被设计用于爬取网络数据、提取结构性数据的开源网络爬虫框架。作用:少量的代码,就能够快速的抓取官方文档:https://scrapy-chs.readthedocs.io/zh_CN/0.24/补充:Scrapy 使用了 Twisted 异步网络框架,可以加快下载速度2、工作流程其流程描述如下:爬虫中起始的 url 构造成 request 对象 -->
2021-07-13 19:23:20 1396 7
原创 Python - 爬虫之Selenium
欢迎关注微信公众号:FSA全栈行动 ????一、Selenium 的介绍Selenium 是一个 Web 自动化测试工具,最初是为网站自动化测试而开发,Selenium 可以直接调用浏览器,它支持所有主流的浏览器(包括 PhantomJS 这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏等。1、Selenium 启动 Chrome在下载好 chromedriver 以及安装好 selenium 模块后,执行下列代码:from selenium import
2021-07-12 00:12:01 431
原创 Python - 爬虫之数据提取
欢迎关注微信公众号:FSA全栈行动 ????一、概述1、响应内容的分类结构化的响应内容json 字符串:可以使用 re、json、jsonpath 等模块来提取特定数据xml 字符串:可以使用 re、lxml 等模块来提取特定数据非结构化的响应内容html 字符串:可以使用 re、lxml、Beautiful Soup、pyquery 等模块来提取特定数据注意:re 模块需要掌握正则语法,lxml 模块需要掌握 xpath 语法。2、xml 与 html 的区别
2021-07-05 20:45:25 309
原创 Python - 爬虫基础与requests模块
欢迎关注微信公众号:FSA全栈行动 ????一、爬虫基础概念模拟浏览器,发送请求,获取响应作用数据采集软件测试抢票网站上的投票网络安全虫师 博客:https://www.cnblogs.com/fnng/1、http 与 https 的概念和区别HTTP:超文本传输协议,默认端口号是 80。超文本:指超过文本,不仅限于文本;还包括图片、音频、视频等文件。传输协议:是指使用共同约定的固定格式来传递转换成字符串的超文本内容。HTTPS:HTTP + S
2021-07-05 08:02:59 274
原创 Android音视频——MediaCodec编码mp4踩坑记录
欢迎关注微信公众号:FSA全栈行动 ????项目需要在低端 Android 设备上驱动相机获取 YUV 图像,同时,还需要进行录像,YUV 图像的获取与处理之前已经趟过去了,总体感觉只要掌握了相机与 YUV 原理等知识点后,结合 libyuv 这个牛逼的库基本就没什么了,而录像这一块则是使用 MediaCodec + MediaMuxer 来处理,本篇就是我在使用原生 MediaCodec 编码 mp4 文件的踩杭记要,主要有两个问题:录像变色 (video wrong color)录像时长缩水(
2021-06-10 17:19:41 2276 4
原创 不一样的Gradle多渠道配置总结2
欢迎关注微信公众号:FSA全栈行动 ????文章中可能涉及的到一些 groovy 语法点,可在如下文章中找到&学习:《Gradle 入门系列(一)——groovy 基础语法》《不一样的 Gradle 多渠道配置总结》一、问题Android Gradle plugin 给 Android apk 打包扩展了更多的可能性,其中多渠道打包是日常开发中最为常用的配置,通过前篇文章《不一样的 Gradle 多渠道配置总结》可以了解到, Android Gradle plugin 能够让资源合并
2021-05-26 02:27:08 1366 2
原创 Flutter - ListView与GridView
欢迎关注微信公众号:FSA全栈行动 ????一、ListViewListView(): 当 children 比较明确, 数量较少的时候可以使用, 列表 item 一次性全部加载ListView.builder(): children 数量较多的时候使用, 在 item 即将展示出来的时候才会被创建ListView.separated(): 比 ListView.builder()多了分割线功能1、ListView()通过 ListView() 默认构造器创建出来的列表, 会一次性加载全部
2021-05-17 08:06:08 953
原创 Flutter - 基础布局
欢迎关注微信公众号:FSA全栈行动 ????一、单子布局 Widget单子布局, 顾名思义就是只能包含一个子控件的 widget1、Align(Center)Center 可以将子控件居中显示, 默认会尽可能拉伸填满父控件:class CenterDemo extends StatelessWidget { @override Widget build(BuildContext context) { return Center( child: Icon(Icons.p
2021-04-28 08:17:14 801
原创 Flutter - 基础Widget
欢迎关注微信公众号:FSA全栈行动 ????一、文本 Widget1、纯文本(Text)Text 控件常见属性:textAlign: 文本对齐,默认是左对齐,可以根据实际情况修改为居中(TextAlign.center)或右对齐(TextAlign.right)maxLines: 文字最多显示多少行,通常与 overflow 搭配使用overflow: 内容溢出显示效果,可以设置显示省略号(TextOverflow.ellipsis)textScaleFactor: 缩放因子,默认是 1
2021-04-24 23:08:22 899 4
原创 Android库发布至MavenCentral流程详解
欢迎关注微信公众号:FSA全栈行动 ????“jCenter 不久后将停止服务” 这个消息对所有 Android 开发者的影响是很大的,很多好用的第三方库都会上传到 jCenter,而且几乎所有的 Android 项目里都会依赖到 jCenter 仓库,这意味着 Android 开发者对其有很强的依赖性。作为第三方库使用者来说,一旦到了 jCenter 停服那时,只有 2 种选择:使用阿里等第三方代理仓库(上面可能会缓存着这些曾经托管在 jCenter 上的第三方库)祈祷第三方库作者能早日同步库到
2021-04-21 21:19:19 1400 8
原创 Flutter - StateWidget与生命周期
欢迎关注微信公众号:FSA全栈行动 ????一、程序入口一般情况下,Flutter 的主入口是 main.dart。1、界面的本质(Widget)在 main 函数中通过 runApp 函数启动一个 Flutter 界面,而 runApp(Widget app) 函数接收的参数 Widget app 就是界面了,即界面是一个 Widget:main() { runApp(Center( child: Text("Hello world", textDirection:
2021-04-20 23:04:35 569
原创 RePlugin集成ARouter
欢迎关注微信公众号:FSA全栈行动 ????一、功能需求1、组件解耦 (ARouter)阿里开源的 ARouter 在组件化开发中这个库相当有用,其核心功能就是组件解耦,比如以往要跳转另一个 Activity 时,会使用如下代码:val intent = Intent(this, OtherActivity::class.java)startActivity(intent)这样的代码意味着耦合性极强,当前的 Activity 代码层面上直接引用了 OtherActivity,当项目中应用了模
2021-04-13 14:14:44 520 1
原创 Flutter - Dart事件循环机制与异步
欢迎关注微信公众号:FSA全栈行动 ????一、Dart 异步与 JavaScript 一样, Dart 是基于 事件循环机制 的 单线程模型, 所以 Dart 中没有多线程, 也就没有主线程与子线程之分.1、同步与异步同步: 同一线程中, 按照代码的编写顺序, 自上而下依次执行 (直观感受: 需要等待)异步: 代码执行中, 某段代码的执行不会影响后面代码的执行 (直观感受: 无需等待)2、单线程模型单线程模型:一条执行线上, 同时且只能执行一个任务(事件), 其他任务都必须在后面排
2021-04-11 21:56:42 696
原创 解决WebView内存泄漏【最干货】
欢迎关注微信公众号:FSA全栈行动 ????解决 WebView 内存泄漏要解决 WebView 内存泄漏的要点如下:不要使用 xml 方式创建,而是使用代码把 WebView 给 new 出来不要让 WebView 持有对 Activity/Fragment 的 Context 引用(核心)销毁时,停止 WebView 的加载,并从父控件中将其移除1、初始化 WebViewWebView 内存泄露的主要原因是引用了 Activity/Fragment 的 Context,加之 WebV
2021-04-01 11:47:59 2674
原创 RePlugin集成AndroidAutoSize
一、屏幕适配你可能会问 “都 2021 年了还折腾屏幕适配?直接用 dp 单位适配不好吗?”, 确实,如果公司的 UI 设计师、产品经理以及老板,能明白为什么一套 UI 在不同设备上显现出来的一些差异并不是 bug 时,开发者直接用 dp 单位配合一些布局技巧来进行适配是可以的,但是,实现多数情况下并不是如此美好,他们更希望看到的是 UI 在不同屏幕上,仅仅只是缩放的区别,为了满足这种要求,应用第三方屏幕适配方案就非常有必要了。根据在网上查到的比较好的原生屏幕适配方案有两种:smallestWidth
2021-03-31 16:00:59 349
原创 Flutter - Dart特性语法
温馨提示:本文只罗列 Dart 中比较重要、奇特的语法,所以不合适没有其他语言基础的人学习!!一、Dart 的基本语法1、程序入口Dart 的入口也是 main 函数,且没有返回值。传递给 main 的命令行参数,会存放在 List<String> args 中。定义字符串可以使用单引号或双引号。每行语句必须使用分号结尾。main(List<String> args) { print("Hello World");}2、声明变量明确声明:变量类型 .
2021-03-21 23:15:18 959
原创 Kotlin - 函数式编程
函数式编程什么是函数式编程,以下是维基百科给出的答案:函数式编程(英语:functional programming)或称函数程序设计、泛函编程,是一种编程范式,它将电脑运算视为函数运算,并且避免使用程序状态以及易变对象。其中,λ 演算(lambda calculus)为该语言最重要的基础。而且,λ 演算的函数可以接受函数当作输入(引数)和输出(传出值)。比起指令式编程,函数式编程更加强调程序执行的结果而非执行的过程,倡导利用若干简单的执行单元让计算结果不断渐进,逐层推导复杂的运算,而不是设计一个复杂
2021-02-19 22:21:23 433
原创 Kotlin - 尾递归优化
尾递归尾递归就是函数在调用完自己之后没有其他操作的递归,是递归的一种特殊形式。举个例子,"计算斐波那契数列第 n 项"的递归算法有哪些?简单递归实现斐波那契数列第 0、1 位都是 1,从第二位开始,每项是前两位之和,因此用递归算法很容易就能实现出来了:fun fib1(n: Int): Int { if (n == 0 || n == 1) return 1 return fib1(n - 1) + fib1(n - 2);}这种写法虽然递归调用是在方法的最后一行,但其实这里还
2021-02-19 22:20:10 329
原创 Kotlin - 作用域函数
作用域函数Kotlin 提供了一系列的作用域函数,可以在函数形成的临时作用域中对象上下文执行代码块,这些作用域函数共有 5 个:let、with、run、apply、also,它们区别有 2 个:对象上下文在作用域名中的使用(this 还是 it)作用域函数的返回结果(上下文对象 还是 Lambda 表达式结果)letlet 经常用于非空值执行代码块,通过与安全操作符 ? 组合成 ?.let 进行安全的非空代码操作:对象上下文:it返回值:lambda 表达式结果fun main(a
2021-02-19 22:18:35 187
原创 Kotlin - 常见高阶函数
forEach高阶函数 forEach 是可迭代对象的扩展方法,接收函数类型是 (T) -> Unit 的参数 action,forEach 会将 action 这个函数作用于可迭代对象中的每个元素,这是源码:/** * Performs the given [action] on each element. */@kotlin.internal.HidesMemberspublic inline fun <T> Iterable<T>.forEach(action
2021-02-19 22:17:22 553
原创 Kotlin - 高阶函数与函数引用
高阶函数高阶函数是 参数或返回值是函数 的函数,我们之前已经接触过了几个高阶函数,如:// _Arrays.ktpublic inline fun <T> Array<out T>.forEach(action: (T) -> Unit): Unit { for (element in this) action(element)}public inline fun <T> Array<out T>.filter(predicate: (
2021-02-19 22:16:03 440
原创 Kotlin - 枚举与密封类
枚举Kotlin 支持枚举,需要使用 enum class 进行声明,如:enum class LogLevel { VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT}上面的代码可以理解为是 LogLevel 类的 companion object 语法糖:class LogLevel private constructor() { companion object { val VERBOSE = LogLevel()
2021-02-19 22:14:24 394
原创 Kotlin - 内部类
内部类内部类就是定义在类内部的类,Kotlin 中的内部类大致分为 2 种:静态内部类非静态内部类静态内部类在某个类中像普通类一样声明即可,可以认为静态内部类与外部类没有关系,只是定义在了外部类"体内"而已,在使用静态内部类时需要"带上"外部类:class Outer { val a: Int = 0 class Inner { val a: Int = 5 }}fun main() { val outer = Outer()
2021-02-19 22:12:28 4306
原创 Kotlin - 数据类
componentN 方法大前端 es6 中有一个解构的语法特性我很是喜欢,通过类似 let {name,isCheck} = option 的写法就可以从 option 对象中提取出 name 和 isCheck 属性,而不再是使用 let name = option.name 这种写法,解构的语法让代码得以更进一步的简化,那么作为后起之秀的 Kotlin 是否也有这种特性呢?没错,Kotlin 也有(注意:两者还是有区别的),它就是 componentN 方法 ,我们直接来看代码:class Use
2021-02-19 22:10:35 240
原创 Kotlin - 属性代理
自定义属性代理代理也叫委托,Kotlin 支持属性代理,把一个属性的获取与赋值交给一个“中介”(下称 Delegate)去管理,属性代理的语法是: val/var <属性名>: <类型> by <表达式> ,by 后面是 Delegate 对象,被代理属性的 get()和 set() 会给 Delegate 对象对应的 getValue() 和 setValue() 分别代理,因此 Delegete 可以这么写:注意:Delegate 并不需要实现任何接口,仅需提供
2021-02-19 22:08:41 552
原创 Kotlin - 扩展成员
扩展方法Kotlin 中支持在不修改类原本结构的前提下,对类功能进行扩展,比如对 String 类新增一个 multiply()方法,可返回重复 n 次的字符串:fun String.multiply(time: Int): String { val stringBuilder = StringBuilder() for (i in 0 until time) stringBuilder.append(this) return stringBuilder.toString()}
2021-01-30 22:24:42 296 2
原创 Kotlin - 方法重载与默认参数
方法重载(Overloads)当一个类中有两个或多个具有相同方法名和不同的参数类型的方法时,就是重载:class Person { fun say() { println("hahaha") } fun say(what: String) { println(what) } fun say(obj: Any) { println("this is ${obj.javaClass.simpleName}") }
2021-01-30 22:22:59 728
原创 Kotlin - 伴生对象与静态成员
object 关键字Kotlin 中有一种特殊的类,它本身也是一个实例(单例),这种既是类又是对象的类需要使用 object 关键字声明(普通类声明使用 class),它跟普通类一样,也可以实现接口和继承父类:object MusicPlayer : Player(), OnStatusChangeListener { var state: Int = 0 fun play(url: String) { ... } fun stop() {
2021-01-30 22:20:50 301
原创 Kotlin - 类及成员的可见性
类及成员可见性Kotlin 中可见性有 4 个级别:private -> protect -> internal -> public,从左至右可见范围逐渐放宽。KotlinJava可见性privateprivate自己可见protectedprotected子类可见-default(默认)包内可见(Java 特有)internal-模块内可见(Kotlin 特有)public(默认)public外部可见为了方便理解
2021-01-30 22:18:57 694
原创 Kotlin - 面向对象之继承与实现
继承是面向对象编程的三大特性之一,在开发过程中会经常使用,继承可以让子类拥有父类的功能,也可以对父类功能进行增强修改。面向对象编程的三大特性:封装、继承、多态继承普通类Kotlin 中默认 类、方法 都是 final 的,因此默认无法被子类继承或重写,但可通过 open 关键字来解除:父类需要 open 才可以被继承父类方法、属性需要 open 才可以被覆写覆写父类成员需要 override 关键字open class Person() { open fun walk() {
2021-01-30 22:17:18 723
原创 Kotlin - 面向对象之抽象类与接口
接口接口是一种约定或协议,需要使用 interface 定义:interface InputDevice { fun input(event: Any)}接口不能有状态,我们可以在接口中声明一个类似"属性"的变量 x,但它并不是一个属性,相当于只是声明 getX/setX 方法:interface InputDevice { //val version: String = "default" // IDE报错:Property initializers are not allow
2021-01-30 22:15:26 474
原创 Kotlin - 参数与异常
具名参数具名参数就是在调用函数时,给函数的实参附上形参:fun sum(arg1: Int, arg2: Int) = arg1 + arg2fun main(vararg args: String) { sum(arg1 = 2, arg2 = 3) sum(arg2 = 3, arg1 = 2)}使用具名参数可以把实参精确的传递给指定形参,因此具名参数可以不用按顺序传入。变长参数vararg 可以让某个参数接收多个值,vararg 修饰的参数称为变长参数:fun he
2021-01-30 22:13:45 307
原创 Kotlin - 分支与循环
分支语句Kotlin 中的分支语句有两种,分别是 if...else 和 when。if 表达式Kotlin 可以像 Java 那样,使用 if...else 语句,通过判断条件来修改变量的值:var name = ""if (local == "en") { name = "lqr"} else { name = "吴彦祖"}但这种写法还不够简洁,Kotlin 对 if...else 进行发加强,支持 if表达式 ,可以对上述代码进行简化:val name = if (
2021-01-30 22:12:00 498
原创 Kotlin - 运算符与中缀表达式
基本运算符常见的基本运算符有 +-*/%^? ,在 Kotlin 中,这些运算符都会有对应的具名函数:表达式翻译为a + ba.plus(b)a - ba.minus(b)a * ba.times(b)a / ba.div(b)a % ba.rem(b)、 a.mod(b) (已弃用)a…ba.rangeTo(b)除此之处,还有一些常用的操作符(统称运算符),例如 in、[]、() 等:表达式翻译为a in bb
2021-01-30 22:10:26 338
原创 Kotlin - 类成员
类成员类成员包括 成员方法 和 成员属性:class Artist(var name: String) { // 成员属性 name var age = 18 // 成员属性 age fun dance(danceName: String) { // 成员方法 dance println("$name 正在跳 $danceName") } fun sing(singName: String) { // 成员方法 sing printl
2021-01-30 22:08:31 213
三级缓存网络图片查看器
2016-05-22
默认使用DES加密聊天信息的SocketChat(内含DES与RSA加密工具)
2016-05-19
视频缩略图和显示的缓存异步机制
2016-05-15
ViewPagerIndicator
2016-05-09
SlidingMenu侧边栏的lib及实例
2016-05-08
获取缓存及清理缓存会用到的aidl文件
2016-04-18
安卓shell工具RootTools.jar
2016-04-16
安卓桌面小火箭发射
2016-04-16
安卓挂断电话用到的aidl
2016-04-15
利用Filter全局中文过滤(get和post请求中文乱码问题)
2016-10-23
使用ThreadLocal解决代码分层问题
2016-10-22
使用jar使用验证码功能(ValidateCode.jar )
2016-10-15
使用makefile编译多个.c文件例子
2016-08-13
commons-beanutils-1.8.3-connections.jar
2016-07-01
genymotion 5.0以上的 ARM_Translation
2016-06-29
android vitamio在线视频播放demo
2016-06-29
Genymotion-ARM-Translation_v1.1
2016-06-29
xstream-1.4.7
2016-06-18
xml的解析、生成工具
2016-06-18
java解析json的工具--json-lib
2016-06-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人