- 博客(78)
- 收藏
- 关注
原创 【无标题】
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:撤销:Ctrl/Command + Z重做:Ctrl/Command + Y加粗:Ctrl/Command + B斜体:Ctrl/Command + I标题:Ctrl/Command + S
2022-10-26 18:35:12
258
1
原创 观察者模式
一、前言:二、代码实现:1、客户端调用: MangoAttention attentions = new MangoAttention();//目标 attentions.add(new CustomerObserver("deer")); attentions.add(new CustomerObserver("james")); attentions.add(new CustomerObserver("lison")); a
2021-08-23 16:53:46
188
原创 Java外观模式
一、前言:二、代码实现:1、客户端调用: PickService pickService = new PickService(); PackService packService = new PackService(); SendService sendService = new SendService(); //采摘 Log.d("LUO","--------------"); pickService.doPi
2021-08-23 15:40:40
112
原创 Java组合模式
一、前言:二、代码实现:1、客户端调用: //根目录 DistrictNode root = new DistrictNode("根"); //一线目录 root.addChild(new DistrictNode("上海")); root.addChild(new DistrictNode("天津")); DistrictNode districtNode = new DistrictNode("北京
2021-08-23 15:06:58
95
原创 Java代理模式
一、前言:二、代码实现:1、客户端调用 //本地代理类 OrderService orderService = new ProxyOrder(); orderService.saveOrder();2、OrderService/** * 订单接口 */public interface OrderService { int saveOrder();}3、ProxyOrderpublic class ProxyOrder implement
2021-08-23 14:27:12
82
原创 装饰器模式
一、前言:二、代码实现:1、客户端调用 private void initEvent8() { AbstractFactory factory = new AppleFactory(); //得到水果 Fruit fruit = factory.getFruit(); fruit.draw(); //得到包装 Bag bag = factory.getBag(); //现需要增加防伪
2021-08-23 14:10:40
77
原创 桥接模式学习
一、前言:二、代码实现:1、客户端调用 //桥接模式 btn_7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //袋子型号 BagAbstraction bag = new BigBag(); //袋子材质
2021-08-20 17:34:08
83
转载 java排序算法汇总
一、排序算法概述排序就是将一组对象按照某种逻辑顺序重新排列的过程。比如,订单按照日期排序的——这种排序很可能使用了某种排序算法。在计算时代早期,大家普遍认为30% 的计算周期都用在了排序上。如果今天这个比例降低了,可能的原因之一是如今的排序算法更加高效,而并非排序的重要性降低了。现在计算机的广泛使用使得数据无处不在,而整理数据的第一步通常就是进行排序。几乎所有的计算机系统都实现了各种排序算法以供系统和用户使用。即使你只是使用标准库中的排序函数,学习排序算法仍然有三大实际意义:IT从业人员必备技能,也
2021-07-25 20:21:23
188
原创 java红黑二叉树
一、前言:package com.enjoy.tree;import java.util.ArrayList;import java.util.List;/** * @author 【享学课堂】 King老师 * 哈夫曼树 */public class HuffmanTree { //节点 public static class Node<E> { E data; //数据 int weight; //权重
2021-07-11 22:53:28
85
原创 适配器模式
一、前言:二、代码实现:1、客户端调用 //准备用途苹果盒代替 Orange orange = new Orange("peter",100); OrangeBag bag = getBag2(); orange.draw(); orange.pack(bag);客户端调用方法 private static OrangeBag getBag2(){ //准备用途苹果盒代替 AppleBag appleBag = new
2021-06-28 16:46:28
91
原创 建造者模式
一、前言:二、代码实现:1、客户端调用: //收银台 Builder builder = new HolidayBuilder(); //以下是模板代码,不轻易更改 builder.buildApple(120); builder.buildBanana(80); builder.buildOrange(50);
2021-06-28 16:14:50
79
原创 抽象工厂模式
一、前言:二、使用:1、客户端调用: //初始化工厂AbstractFactory factory = new com.dotc.patterndemo.create.factory.abstractFacttory.AppleFactory(); //得到水果 Fruit fruit = factory.getFruit(); fruit.draw(); //得到包装 Bag bag = factory.getBag();
2021-06-28 15:37:46
73
原创 工厂方法模式
一、前言:二、代码实现1、调用: AppleFactory fruitFactory = new AppleFactory(); Fruit fruit = fruitFactory.getFruit(); fruit.draw();2、工厂方法接口:/** * 工厂方法接口 */public interface FruitFactory { public Fruit getFruit();//摘水果指令}3、实现:/** * 工厂方
2021-06-28 14:46:29
48
原创 简单工厂模式
一、前言:二、代码实现:1、调用实现//简单工厂模式Fruit fruit = StaticFactory.getFruit(StaticFactory.TYPE_APPLE); fruit.draw();//多工厂模式调用// Fruit fruitOrange = StaticFactory.getFruitOrange();// fruitOrange.draw();2、StaticFactory实现/** * 简单工厂模式 --- 静态工厂模式 */publ
2021-06-28 13:53:44
90
原创 设计模式三大分类-创建型、结构型、行为型
一、创建型:创建型模式,就是创建对象的模式,抽象了实例化的过程。它帮助一个系统独立于如何创建、组合和表示它的那些对象。关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑。创建型简单工厂模式严格意义来说,不属于GOF23种设计模式工厂方法模式只对结果负责,封装创建过程抽象工厂模式-原型模式拔一根猴毛,吹出千万个。单例模式单例和原型是互斥的 保证
2021-06-28 10:30:23
2155
原创 卡顿分析与布局优化
1、App层面监控卡顿systrace可以让我们了解应用所处的状态,了解应用因为什么原因导致的。若需要准确分析卡顿发生在什么函数,资源占用情况如何,目前业界两种主流有效的app监控方式如下:1、 利用UI线程的Looper打印的日志匹配;2、 使用Choreographer.FrameCallback;Looper日志检测卡顿Android主线程更新UI。如果界面1秒钟刷新少于60次,即FPS小于60,用户就会产生卡顿感觉。简单来说,Android使用消息机制进行UI更新,UI线程有个L
2021-03-21 16:09:44
265
原创 APP 启动优化
一、前言:用户希望应用能够及时响应并快速加载。启动时间过长的应用可能会导致用户在对应用给出很低的评分,甚至完全弃用。1、启动流程①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;②system_server进程接收到请求后,向zygote进程发送创建进程的请求;③Zygote进程fork出新的子进程,即App进程;④App进程,通过Binder IPC向sytem_server进程发起attachApplica
2021-03-21 15:25:03
408
原创 Retrofit面试
1、设计模式外观模式,构建者模式,工厂模式,代理模式,适配器模式,策略模式,观察者模式2、Retrofit概括Retrofit就是一个网络请求框架的封装,底层的网络请求默认使用的Okhttp,本身只是简化了用户网络请求的参数配置等,还能与Rxjava相结合,使用起来更加简洁方便。App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数,之后由OkHttp完成后续的请求操作。在服务端返回数据之后,OkHttp将原始的结果交给Retrofit,R
2021-03-17 15:21:33
646
1
原创 RxJava面试
1、使用步骤2、RxJava 如何实现线程切换?subscribeOn 是通过新建 Observable 的方式,使用 OnSubscribe 类的方式去做到线程切换的。observeOn 是通过 operator 操作符的形式去完成线程切换的,所以他的作用域和其他操作符一样,是调用 observeOn 之后的链路。Schedulers.io() 代表 io 操作的线程, 通常用于网络,读写文件等 io 密集型的操作Schedulers.computation() 代表 CPU 计算密
2021-03-17 14:47:40
1623
原创 Glide 面试
1、看过Glide源码吗,你印象最深的是什么?Glide的缓存设计可以说是非常先进的,考虑的场景也很周全。在缓存这一功能上,Glide又将它分成了两个模块,一个是内存缓存,一个是硬盘缓存。这两个缓存模块的作用各不相同,使用内存缓存的原因是:防止应用重复将图片读入到内存,造成内存资源浪费。使用硬盘缓存的原因是:防止应用重复从网络或其它地方下载和读取数据。2、简单说一下Glide的三级缓存?简单描述:读取的顺序是:Lru算法缓存、弱引用缓存、磁盘缓存写入的顺序是:弱引用缓存、Lru算法
2021-03-15 18:07:40
1035
2
原创 单例模式中的懒汉模式和饿汉模式是什么?区别又是什么?
1.懒汉模式:顾名思义,他是一个懒汉,他不愿意动弹。什么时候需要吃饭了,他就什么时候开始想办法搞点食物。即懒汉式一开始不会实例化,什么时候用就什么时候new,才进行实例化。2.饿汉模式:顾名思义,他是一个饿汉,他很勤快就怕自己饿着。他总是先把食物准备好,什么时候需要吃了,他随时拿来吃,不需要临时去搞食物。即饿汉式在一开始类加载的时候就已经实例化,并且创建单例对象,以后只管用即可。3.懒汉式代码实现:public class Singleton { //默认不会实例化,什么时候用就什么
2021-03-12 14:03:33
19428
4
转载 Java 虚拟机(JVM)
1、简述 JVM 垃圾回收机制在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫描那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。2、JVM 的内存结构Java 堆(Heap) java内存最大的一块,所有对象实例、数组都存放在java堆,GC回收的地方,线程共享。方法区(Method Area) 存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据等。(即永久带),回收目标主要是常
2021-03-12 11:14:28
112
转载 OkHttp 面试题汇总
一、前言如今面试中高级开发工程师岗位,OKhttp 原理是必问环节,只会使用已经无法满足 Android 开发市场的需求,优秀的第三方框架源码剖析不仅能深度理解框架,也能对自己学习带来很大的帮助。本篇文章根据朋友反馈和亲身经历简单整理的一些关于 Okhttp 常见面试题目。1.Okhttp 基本实现原理OkHttp 主要是通过 5 个拦截器和 3 个双端队列(2 个异步队列,1 个同步队列)工作。内部实现通过一个责任链模式完成,将网络请求的各个阶段封装到各个链条中,实现了各层的解耦。OkHt
2021-03-12 10:21:27
8239
原创 JAVA排序
一、前言:1、稳定性的定义能保证两个相等的数,经过排序之后,其在序列的前后位置顺序不变。(A1=A2,排序前A1在A2前面,排序后A1还在A2前面)2、排序算法不稳定的含义在排序之前,有两个数相等,但是在排序结束之后,它们两个有可能改变顺序,这就是说明该排序算法具有不稳定性。3、分类① 稳定性排序:冒泡排序,插入排序、归并排序、基数排序② 不稳定性排序:选择排序、快速排序、希尔排序、堆排序4、排序算法可以分为内部排序和外部排序。定义:内部排序是数据记录在内存中进行排序。1
2021-03-02 17:05:37
119
原创 JAVA中的栈和堆的区别
一、前言:1、简介:1、堆栈是两种数据结构,只能在一端对数据项进行插入和删除。2、在单片机应用中,堆栈是个特殊的存储区,主要是暂时存放数据和地址。3、堆,队列优先,先进先出4、栈,先进后出2、java中堆栈的概念1、栈(stack)与堆(heap)都是java用来在内存中存放数据的地方。2、java自动管理栈堆,程序员不需要理会(与C++不同)。3、栈,存储速度比堆快,仅次于CPU中的寄存器。缺点是,大小和生命周期是确定的缺少灵活性。4、栈数据在多线程或者多个栈之间是不可以共享的5、栈
2021-02-23 15:39:39
3488
原创 一个汉字占多少字节?
一、前言:1、GBK编码,一个汉字占2个字节。2、UTF-16编码,通常汉字占2个字节,CJKV扩展B区、扩展C区、扩展D区中的汉字占4个字节(一般字符的Unicode范围是U+0000至U+FFFF,而这些扩展部分的范围大于U+20000,因而要用两个UTF-16)。3、UTF-8编码是变长编码,通常汉字占3个字节,扩展B区以后的汉字占4个字节。二、代码演示:String a = "名";Timber.d("UTF-8编码长度:"+a.getBytes("UTF-8").length);Ti
2021-02-23 13:14:54
21869
1
转载 BRVAH学习使用
一、前言:GitHub 地址:官方网站:BRVAH是一个强大的RecyclerAdapter框架(什么是RecyclerView?),它能节约开发者大量的开发时间,集成了大部分列表常用需求解决方案。为什么会有它?请查看「Android开源框架BRVAH由来篇」该框架于2016年4月10号发布的第1个版本到现在已经一年多了,经历了800多次代码提交,140多次版本打包,修复了1000多个问题,...
2020-06-15 11:05:16
3345
2
原创 JiaoZiVideoPlayer视频学习
一、前言:主要特点可以完全自定义UI和任何功能一行代码切换播放引擎,支持的视频格式和协议取决于播放引擎,android.media.MediaPlayer ijkplayer可实现全屏播放,小窗播放能在ListView、ViewPager和ListView、ViewPager和Fragment等多重嵌套模式下全屏工作可以在加载、暂停、播放等各种状态中正常进入全屏和退出全屏多种视频适...
2019-09-14 16:44:42
1856
原创 android studio项目上传到github或码云
一、前言:首先我们的电脑先安装 git,并且配置用户名和密码。二、本地上传项目1. 选择vcs-enable2. 弹出框选择git3. 选中项目后进行如下操作三、本地下拉项目1. 选择如图所示2.选择地址,上面网上地址,下面本地地址四、项目无法上传码云?从以上操作,我们可以看出,我们的项目可以上传到 gitHub,却没有上传到码云的地方,因为 Android Stud...
2019-09-14 10:56:12
245
原创 Rxjava和Retrofit返回数据解析问题
一、前言:在我们数据请求过程中,采用的接口请求,Observable返回数据。我们定义的返回数据都是Json数据。通过Dagger2配置:@Modulepublic class RetrofitModule { private int CONNECT_TIMEOUT = 3; private int READ_TIMEOUT = 3; private int WRI...
2019-09-12 15:34:31
1030
原创 Access denied finding property "ro.sf.lcd_density" 问题解决
一、前言:我用的Android Studio是 3.5版本,今天做WebViewActivity页面跳转的时候,突然爆出以下错误,当时猜测是WebView的错误,后来打脸刷刷的。E/libc: Access denied finding property “ro.sf.lcd_density”E/InputTransport: ro.sf.lcd_density must be defin...
2019-09-11 15:30:02
23753
8
原创 Cannot lock Java compile cache as it has already been locked by this process.
一、前言:今天在项目中突然遇到这个Bug,很是奇怪啊。错误: Cannot lock Java compile cache (D:\develop\work\teagoandroid.gradle\5.4.1\javaCompile) as it has already been locked by this process.## 二、解决:1. 方式1:2. 方式二:以上操作还是没有...
2019-09-10 17:54:16
17194
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人