自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java基础提升篇之深入理解Java三大特性

封装在java中封装是把一个对象的属性私有化,同时提供一些接口(方法)给外界调用,用于与外界进行交互。简单来说,就是类中的属性都把它的访问权限设置为private,然后根据业务需求提供访问权限为public的方法(get方法或set方法或其他方法)给外界调用。当然,这条原则并不是教条,在有的业务需求中将属性的访问权限设置为public会跟简单一些。但是,我本人还是比较拥护上面这条原则。话不多说,举个栗子//我们使用两种不同的方式来实现一个Person类//1.将类中的属性设置为private,

2020-11-06 10:36:21 26

原创 设计模式之备忘录模式

备忘录模式用于保存对象当前状态(即属性),并且在之后可以再次恢复到此状态,这有点像我们平时说的"后悔药"。备忘录模式实现的方式需要保证备保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。定义在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先保存的状态。使用场景(1)需要保存一个对象在某一个时刻的状态或部分状态。(2)如果用一个接口来让其他对象得到这些状态,将会暴露对象的实现细节并破坏对象

2020-07-06 00:11:04 29

原创 设计模式之装饰者模式

定义动态地给一个对象添加一些额外地职责使用场景需要透明且动态地扩展类的功能时代码展示//装饰者模式最主要的是要区分哪些类是装饰者,哪些类是被装饰者public abstract class Person {//装饰者类 public abstract void dressed();}public class Boy extends Person{ @Override public void dressed() { System.out.pri.

2020-06-30 09:23:34 29

原创 设计模式之原型模式

定义用原型实例指定创建对象的种类,通过复制这些原型创建新的对象。使用场景(1)类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等,通过原型避免这些消耗。(2)通过new产生一个对象需要非常繁琐的数据准备或访问权限,这时可以使用原型模式。(3)一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式复制多个对象供调用者使用,即保护性拷贝(修改拷贝对象的属性不会影响到被拷贝对象(原型对象)的属性)。需要注意的是,通过实现Cloneable接口的原型模式在调用.

2020-06-26 21:20:05 26

原创 设计模式之工厂方法模式

定义定义一个用于创建对象的接口,让子类决定实例化哪个类。使用场景在任何需要生成复杂对象的地方,都可以使用工厂方法模式。复杂对象适合使用工厂模式。public interface Car { public void make(); public void buy();}public class BMW implements Car{ @Override public void make() { System.out.println("生产宝马.

2020-06-26 03:09:12 43

原创 TypeScript基础入门2

函数与js一样,ts可以创建有名字的函数和匿名函数。定义函数function add(x: number, y: number): number { return x + y;}//有名字的函数let myAdd = function(x: number, y: number): number { return x + y; };//匿名函数函数类型包含了两个部分:参数类型和返回值类型.所以我们可以给一个变量赋值一个函数类型:let add2:{x:number,y:numb

2020-06-21 20:30:09 27

原创 TypeScript基础入门1

安装TypeScript使用命令 npm i typescript --save即可为当前目录安装typescript,但是typescript的tsc命令并不能直接运行typescript代码,它只是将ts代码编译成js代码,生成一个js文件,所以通常我们还会安装typescript的运行时ts-node:npm i -g ts-node.注意:ts-node并不等于typescript的node.js,仅仅封装了typescript的编译过程,提供直接运行typescript的能力。类型与函数

2020-06-21 17:23:49 35

原创 Android开源框架之Retrofit

Retrofit是一个类型安全的HTTP的客户端,在Android和Java中都可使用。Retrofit通过注解实现RESTful网络接口,底层使用Okhttp完成网络请求的实现。另外,Retrofit封装了主线程和子线程的切换以及网络数据的解析,在使用上要比OkHttp便利不少。Retrofit的使用步骤添加依赖dependencies { //Retrofit依赖 c...

2020-05-09 20:36:39 21

原创 Android Studio中的Git实践

Git是一个开源、分布式的版本控制系统,与集中式版本控制系统(如SVN)最大的区别在于每个开发者都会有一个本地仓库,代码可以提交到本地,不需要依赖远程代码仓库。创建远程仓库通常一个项目需要创建一个远程代码仓库。我们可以使用GitHub、GitLab等代码托管平台,或者也可以使用GitLab、Gitblit等部署一个代码服务器。创建一个远程空仓库的时候,不要添加README、.gitigno...

2020-05-06 21:47:32 52

原创 Android开发之ProGuard技术

ProGuard简介ProGuard一共包括以下4个功能,其中每个功能都是可选的,我们可以通过配置脚本来决定执行其中的哪几个功能,ProGuard的执行流程如下图。压缩(Shrink):侦测并移除代码中无用的类、字段、方法和属性。优化(Optimize):对字节码进行优化,移除无用的指令。混淆(Obfuscate):使用a、b、c、d这样简短而无意义的名称,对类、字段和方法进行重命名。...

2020-05-03 00:42:56 37

原创 软件架构形式

C/S(客户端/服务器)一般我们使用的软件都是C/S架构,例如:QQ、微信、淘宝C代表客户端,用户通过客户端来使用软件S表示服务器,服务器负责处理软件的业务逻辑特点软件使用前必须得安装,像手机或电脑使用QQ、微信都要安装客户端软件更新时,服务器和客户端同时更新C/S架构的软件不能跨平台使用,像手机版的QQ不能再windows上运行C/S架构的软件客户端和服务器通信采用的是自己...

2020-05-02 21:10:20 54

原创 NodeJS基础知识之2

包(Package)CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。CommonJS的包规范由包结构和包描述文件两个部分组成。包结构:用于组织包中的各种文件包描述文件:描述包的相关信息,以供外部读取分析包结构注意:除了package,json文件是必需的之外,其他文件都是非必需的。包描述文件NPM(Node Package Manager)...

2020-05-01 19:51:51 51

原创 NodeJS基础知识之1

简介Node.js是一个能够在服务器端运行JavaScript代码的跨平台JavaScript运行环境。Node大部分模块都是用JavaScript编写。在Node出现之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常在用户的浏览器上运行。Node.js可以理解成一个已经实现好功能的服务器,它通过命令行的形式将程序员实现好功能的js代码导入服务器中运行进而得到结果。程序员也可以...

2020-05-01 18:35:04 61

原创 Android运行时权限

在Android6.0之前,,如果我们需要某一个权限会在AndroidManifest.xml添加标签,app尚未启动时就要求用户授予或者拒绝某些系统权限在Android6.0及以后的版本,引入了运行时权限的设计规范。运行时权限会在APP运行时请求用户对权限进行授予或拒绝,严格把控app安全风险。下面介绍Android运行时权限常规开发步骤在AndroidManifest.xml文件中...

2020-04-21 16:57:50 35

原创 Android开源框架之OpenDanmaku

简介OpenDanmaku是Android中第三方的弹幕控件,在播放视频和直播软件中过程中弹出用户的评论,并且以滚动的方式显示。使用下载地址:https://github.com/linsea/OpenDanmaku项目关联库Gradle dependencies { compile 'com.linsea:opendanmaku:1.0.0@a...

2020-02-05 19:49:22 94

原创 Android开源框架之TabLayout

简介我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合。达到很漂亮的效果。但是TabPageIndicator是第三方的,而且比较老了,当然了现在很多大神都已经开始自己写TabPageIndicator来满足自己的需求,在2015年的google大会上,google发布了新的Android Support Design库,里面包含了几个新的控件,其中就有一个...

2020-02-04 21:15:42 214

原创 Android开源框架之Banner

简介Banner能实现循环播放多个广告图片和手动滑动循环等功能。因为原生ViewPager并不支持循环翻页, 要实现循环还得需要自己去动手。Banner框架可以进行不同样式、不同动画设置, 以及完善的api方法能满足大部分软件首页轮播图效果的需求。使用下载地址:https://github.com/youth5201314/banner项目关联库dependencies{ ...

2020-02-03 20:36:08 227

原创 Android开源框架之UniversalVideoView

简介在Android上播放视频最简单的方法是使用SDK中内置的VideoView,然后加上MediaController来控制视频播放暂停等,但是这样有一个缺点是无法定制自己的控制UI,所以这里提供一个自定义播放控件,它可以设置多种自定义属性(如loading样式,错误视频等),并且很容易在全屏与非全屏之间切换,另外支持Android V2.3及以上系统.使用下载地址:https://gi...

2020-02-03 11:13:46 202

原创 Android开源框架之Android-PullToRefresh

简介PullToRefresh是一套实现非常好的下拉刷新库,它支持:ListView、ExpandableListView、GridView、WebView、ScrollView、HorizontalScrollView、ViewPager等多种常用的需要刷新的View类型,而且使用起来也十分方便。使用下载及官方案例地址:https://github.com/chrisbanes/Andr...

2020-02-02 21:08:41 20

原创 二叉树基础(上)

首先来看,什么是“树”?再完备的定义,都没有图直观。所以我在图中画了几棵“树”。你来看看,这些“树”都有什么特征?树里面每个元素我们叫作“节点”;用来连线相邻节点之间的关系,我们叫作“父子关系”。比如下面这幅图,A节点就是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。我们把没有 父节点的节点叫作根节点,也就是图中的节点E。我们...

2020-02-01 22:26:55 25

原创 Android开源框架之Fresco

简介Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。相对于ImageLoader,拥有更快的图片下载速度以及可以加载和显示gif图等诸多优势,是个很好的图片框架。特点内存管理:在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅...

2020-01-31 13:59:20 73

原创 Android开源框架之ImageLoader

特点多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置支持图片的内存缓存,文件系统缓存或者SD卡缓存支持图片下载过程的监听根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存较好的控制...

2020-01-31 12:00:21 22 1

原创 搜索结构(静态)

搜索,就是在数据集合中寻找满足某种条件的数据元素。最常见的一种方式是事先给定一个值,在集合中找出其关键码等于给定值的元素。搜索的结果通常有两种可能:一种可能是搜索成功,即找到满足条件的数据元素。这时,作为结果,可报告该元素在结构中的位置,还可以进一步给出该元素中的具体信息。后者在数据库中叫做检索。另一种可能是搜索不成功,或搜索失败。作为结果,也应该报告一些信息,如失败标志、失败位置等。通常称用...

2020-01-29 21:32:41 40

原创 排序算法之希尔排序

希尔排序的基本思想是:设待排序元素序列有n个元素,首先取一个整数gap<n作为间隔,将全部元素分为gap个子序列,所有距离为gap的元素放在同一个子序列中,在每一个子序列中分别施行直接插入排序。然后缩小间隔gap,例如取gap=[gap/2],重复上述的子序列划分和排序工作。直到最后取gap==1,将所有元素放在同一个序列中排序为止。开始时gap的取值较大,每个子序列中的元素较少,排序速...

2020-01-22 19:11:15 25

原创 排序算法之线性排序(时间复杂度为线性)

桶排序桶排序的核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独用快排或者冒泡等排序算法进行排序。桶内排完序之后,再把桶里的数据按照顺序依次取出,组成的序列就是有序的了。桶排序的时间复杂度是O(n)。我们分析一下,如果要排序的数据有n个,我们把它们均匀地划分到m个桶内,每个桶里就有k=n/m个元素。每个桶内部使用快速排序,时间复杂度为O(k * logk)。m个桶排序的时 间复...

2020-01-22 18:49:02 217

原创 排序算法之快速排序

快速排序算法在大多数计算机上运行都比其他排序算法快,而且快速排序算法在空间上只使用一个小的辅助栈,消耗的资源比其他的排序算法小,其内部的循环也很小。快速排序的时间复杂度是O(nlogn),但是在极端情况下快速排序的时间复杂度会退化成O(n^2)。例如,如果数组中的数据原来已经是有序的了,比如1,3,5,6,8。如果我们每次选择最后一个元素作为pivot,那每次分区得到的两个区间 都是不均等的。...

2020-01-20 12:03:23 22

原创 排序算法之分治排序

归并排序是基于分治法实现的。归并排序将待排序的元素序列分为两个长度相等的子序列,为每一个子序列排序,然后再将它们合并成一个序列。合并两个子序列的过程称为两路归并。在执行两路归并算法时,先把待归并元素序列L1复制到辅助数组L2中,再从L2归并到L1中。归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)归并排序时稳定的排序算法,但是由于空间复杂度为O(n)因此不是原地排序算法。算...

2020-01-18 22:40:57 100

原创 深入理解Activity的生命周期和启动模式

Activity的生命周期全面分析异常情况下的生命周期分析总结:1.系统只有在Activity异常终止的时候才会调用onSaveInstanceState和onRestoreInstanceState来存储和恢复数据,其他情况不会触发这个过程。2.当我们在onSaveInstanceState中存储一个字符串,然后当Activity被销毁并重新创建后,接收位置可以选择在onR...

2020-01-12 06:59:39 54

原创 Android线程之间的通信架构(Handler消息机制)

当主线程诞生时,就会去执行一个代码循环(Looper),以便持续监视它的信息队列(Message Queue简称MQ)。当UI事件发生了,通常会立即丢一个信息 (Message)到MQ,此时主线程就立即从MQ里面取出该信息,并且处理。例如,用户在UI画面上按下一个Button按 钮时,UI事件发生了,就会把onClick信息丢到 MQ里,于是,主线程会及时从MQ里取出onClick信息,然后调...

2020-01-11 14:23:11 41

原创 设计模式之适配器模式

介绍适配器是将两个不兼容的类融合在一起。例如,经常碰到要在两个没有关系的类型之间进行交互,第一个解决方案是修改各自类的接口,但是如果没有源代码或者我们不愿意为了一个应用而修改各自的接口,此时我们往往会使用一个Adapter,在这两种接口之间创建一个“混血儿”接口,这个Adapter会将这两个接口进行兼容,在不修改原代码的情况下满足需求。定义适配器模式把一个类的接口变成客户端所期待的另一种接...

2020-01-08 21:22:18 60

原创 Android开源框架之Glide

简介(1)使用简单(2)可配置度高,自适应程度高(3)支持常见图片格式 Jpg png gif webp(4)支持多种数据源 网络、本地、资源、Assets 等(5)高效缓存策略:支持Memory和Disk图片缓存 默认Bitmap格式采用RGB_565内存使用至少减少一半(6)生命周期集成 根据Activity/Fragment生命周期自动管理请求(7)高效处理Bitmap...

2020-01-08 11:43:46 38

原创 Android开源框架之Picasso(图片加载框架)

简介Picasso是Square公司出品的一个强大的图片下载和缓存图片库。在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。使用复杂的图片压缩转换来减少内存消耗。自带内存和硬盘二级缓存功能。下载地址https://github.com/square/picasso使用步骤在gradle文件...

2020-01-07 09:12:51 64

原创 Android开源框架之XUtils

简介xUtils3 是 xUtils 的升级版,功能和性能都在提高,xUtils3 主要有四大模块:注解模块,联 网模块,图片加载模块,数据库模块;注解模块: 用于在 Activity 或者 Fragment 中初始化布局文件,便于代码更加简洁;联网模块: xUtils3 支持超大文件(超过2G)上传,更全面的http请求协议支持(11种谓词), 拥有更加灵活的 ORM,更多的事件注解支...

2020-01-06 17:10:54 52

原创 JSON解析(使用框架解析)

使用Gson框架解析Demo展示: // (4)将Java对象的List转换为json字符串[] private void javaToJsonArrayByGson() { // 1 获取或创建Java对象 List<ShopInfo> shops = new ArrayList<>(); ShopIn...

2020-01-06 14:34:38 123

原创 Android开发之屏幕适配

基本概念:屏幕大小 :物理屏幕的大小,指屏幕的对角线长度,经常以英寸为单位。分辨率 :实际上是像素的总和。例如:1280*720dpi :密度。(每英寸所展示的像素)hdpi :480*800 每英寸展示的像素约为240dpildpi :320*240 每英寸展示的像素约为120dpimdpi : 320*480 每英寸展示的像素约为160dpi...

2020-01-05 21:41:11 67

原创 Android开源框架之ButterKnife

简介ButterKnife是注解中相对简单易懂的很不错的开源框架强大的View绑定和Click事件处理功能,简化代码,提升开发效率方便的处理Adapter里的ViewHolder绑定问题运行时不会影响APP效率,使用配置方便代码清晰,可读性强使用步骤在Setting->Plugins中输入butterknife添加插件“Android ButterKnife Aelezn...

2020-01-05 13:59:09 67

原创 JSON解析(Android原生技术)

Android的API提供了将json格式的字符串{}转换成Java对象JSONObject(String json) : 将json字符串解析为json对象Xxx getXxx(String name) : 根据name, 在json对象中得到对应的ValueXxx optXxx(String name) : 根据name, 在json对象中得到对应的Value注意:optXxx方...

2020-01-05 12:45:23 31

原创 Android开源框架之Volley

Demo展示:package com.example.dell.myapplication;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.view.View;import android.widget.Button;import ...

2020-01-04 11:01:51 37

原创 Android开源框架之Afinal

Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite...

2020-01-04 10:15:00 29

原创 Android开源框架之okhttp

OKHttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,通过连接池来减小响应延迟,还有透明的GZIP压缩,请求缓存等优势,其核心主要有路由、连接协议、拦截器、代理、安全性认证、连接池以及网络适配,拦截器主要是指添加,移除或者转换请求或者回应的头部信息这个库也是square开源的一个网络请求库(okhttp内部依赖okio)因此,使用okhttp框架时除了下载okht...

2020-01-02 23:25:50 26

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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