- 博客(25)
- 收藏
- 关注
转载 (转)【数据结构】理解二叉树的三种遍历--前序、中序、后序 +层序(简明易懂)
一、易懂的形象理解其实从名字就可以很好的理解这三种遍历,我在第二点时候说,但是估计能翻到我的文的同学们之前肯定看过好多类似的了,那咱们换个思路~ 先用我想的一种简单易懂的形象思维理解一下前序、中序、后序 +层序!1、先序遍历先序遍历可以想象成,小人从树根开始绕着整棵树的外围转一圈,经过结点的顺序就是先序遍历的顺序先序遍历结果:ABDHIEJCFKG在这里插入图片描述让我们来看下动画,和小人儿一起跑两遍就记住啦,记住是绕着外围跑哦2、中序遍历中序遍历可以想象成,按树画好的左右位置投影下来就
2021-04-01 11:12:58 302
转载 2021-03-19
“吹Kotlin协程的,可能吹错了!”带你真正理解一波目录目录前言Kotlin协程,现在已经成为了面试甚至是工作中一个非常火的东西。本人在刚开始了解Kotlin协程的时候,断断续续看了网上不少文章,用长篇大论把Kotlin协程描述的非常玄乎,但是看完后还是依然云里雾里,所以决定来写一篇关于协程的文章,希望能够帮助大家能够更快的上手Kotlin协程.注意:如果没有特殊提及,文中所有“协程”均代表“Kotlin协程”2为什么要学习Kotlin协程?(官方版)现在Andr...
2021-03-19 13:56:29 165
转载 Android Fragment生命周期
要了解Fragment,首先需要了解它的生命周期,同时与Activity的生命周期的关联也是非常重要的。Fragment的生命周期imageFragment和Activity的生命周期关联以上内容出处链接:https://www.jianshu.com/p/0a4b3825ff9f以下内容出处链接:https://www.cnblogs.com/zhinengfeiyu/p/5384312.html刚打开Activity:Fragment onAttach > F
2020-11-26 15:26:49 142
转载 Fragment是如何进行事务管理的
Fragment是依附于Activity,所以Fragment的生命周期和Activity的生命周期息息相关,在每个Activity的生命周期中最终都会调用FragmentManagerImpl.dispatchXXX()通知,然后调用到FragmentManagerImpl.dispatchStateChange(int nextState),Fragment有多个状态值来展示什么周期所处的状态static final int INITIALIZING = 0; // Not yet .
2020-11-26 15:20:04 385
转载 FragmentTransaction的提交方法
FragmentTransaction的提交方法support library的FragmentTransaction现在提供了四种不同的方法来commit一个transaction:commit()commitAllowingStateLoss()commitNow()commitNowAllowingStateLoss()这篇文章分析了这四个方法的不同.commit() vs commitAllowingStateLoss()用commit()提交有时候会遇到Il...
2020-11-26 15:18:00 617
转载 Android系统启动过程分析
Android系统架构一、APPLACTIONS(应用程序层)该层提供一些核心应用程序包,例如主界面,浏览器,电子邮件、联系人,短信、日历、地图等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序。二、APPLANCTION FRAMEWORK(应用程序框架层)该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括 Activity Manager活动管理器、Window Manager窗口管理器、Content Providers内容提供者
2020-11-26 10:13:34 214
转载 【Android性能优化】归纳总结
Android性能我分了几个部份来总结:APP部份我们的手机中会安装有各种各样的APP,有些APP在研发的时候由于开发者的经验,习惯等各种因素,运行久了就会变得越来越慢,甚至极大的增加你手机的耗电所以,作为一个开发者有必要对性能这块深入了解,研发出来的APP更加安全,体验更流畅,耗电低,流量低。APP部分是个人开发者研发APP时,需要注意以下几个方面 一. UI绘制U界面布局是我们大多都会忽略的问题,在开发中往往是怎么方便怎么来,其实复杂的布局会大大降低APP的效率,反应速度,...
2020-11-25 10:57:53 140
转载 Android里的Dalvik、ART、JIT、AOT
Android里的Dalvik、ART、JIT、AOT有什么关系? JIT,Just-in-time,即时编译,边运行边编译;AOT,Ahead Of Time,提前编译,指运行前编译。区别:这两种编译方式的主要区别在于是否在“运行时”进行编译优劣JIT优点: 可以根据当前硬件情况实时编译生成最优机器指令(ps. AOT也可以做到,在用户使用时使用字节码根据机器情况在做一次编译) 可以根据当前程序的运行情况生成最优的机器指令序列 当程序需要支持动态链接时,只能使用JIT.
2020-11-25 10:44:09 294
转载 Java类加载机制
Java类加载机制 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} class Father extends Grandpa{ static { System.out.println("爸爸在静态代码块"); } public static in
2020-11-25 10:32:37 80
转载 EventBus 原理解析
EventBus 原理解析EventBus是一款在 Android 开发中使用的发布/订阅事件总线框架,基于观察者模式,将事件的接收者和发送者分开,简化了组件之间的通信,使用简单、效率高、体积小!下边是官方的 EventBus 原理图:EventBus 的用法可以参考官网,这里不做过多的说明。本文主要是从 EventBus 使用的方式入手,来分析 EventBus 背后的实现原理,以下内容基于eventbus:3.1.1版本,主要包括如下几个方面的内容:Subscribe注解 注册..
2020-10-30 15:09:28 229
转载 apk打包流程
apk打包流程 打包资源文件,生成R.java文件 输入:res文件,Assets文件,AndroidManifest.xml文件,Android基础类库(Android.jar文件) 输出:R.java,resources.arsc 工具:aapt 工具位置:SDK\build-tools\29.0.0\aapt.exe 处理aidl文件,生成相应java文件 输入:源码文件,aidl文件,framework.aidl文件 输出:对应的.java文件 工具:aidl工具 工具位置:SDK\
2020-10-30 11:44:58 226
转载 Http和Https的区别
HTTP:超文本传输协议(HyperText Transfer Protocol),是目前互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。现在主要是一个客户端和服务器端请求和应答的标准(TCP),但是正在被HTTPS取代。HTTPS:安全套接字层超文本传输协议(Hyper Text Transfer Protocol over Secure Socket Layer)或超文本传输安全协议(Hypertext T
2020-10-30 11:39:26 145
转载 一文搞懂TCP与UDP的区别
引言网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别。一、TCP/IP网络模型计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。TCP/IP 是互联网相关的各类协议族的总称,比
2020-10-30 09:49:19 485 2
翻译 retrofit2.adapter.rxjava2.HttpException: HTTP 403 Forbidden
某些API应该是服务器设置了限制,使得手机端okhttp作为 http客户端时,获取数据,服务器返回HTTP 403禁止访问。服务器禁止访问了,因为okhttp并不是真正的原生的http请求,它在header中并没有真正的User-Agent,而是“okhttp/版本号”。如果是单纯的okHttp请求,不加Retrofit的Request request = new Request.Builder().url(url) .removeHe...
2020-10-29 14:33:11 2016
原创 Handler相关的原理机制形象的描述
Handler相关的原理机制形象的描述为以下情景:Handler:快递员(属于某个快递公司的职员) Message:包裹(可以放置很多东西的箱子) MessageQueue:快递分拣中心(分拣快递的传送带) Looper:快递公司(具有处理包裹去向的管理中心)情景分析:在子线程中更新主线程的UI其中的原理机制可以形象的理解为:某天,你想给朋友寄一件礼物,首先你拿个箱子装好礼物并包裹好,下单叫了某家的快递员上门取件,快递员揽收你的包裹后,会将包裹送往快递分拣中心,等待配送车送出你的包裹。等
2020-10-28 13:40:23 140
原创 View和SurfaceView的区别
View和SurfaceView的区别:View适用主动更新,SurfaceView 适用被动更新,如频繁的刷新View在UI线程更新,在非UI线程更新会报错,当在主线程更新view时如果耗时过长也会出错, SurfaceView在子线程刷新不会阻塞主线程,适用于界面频繁更新、对帧率要求较高的情况。SurfaceView可以控制刷新频率。SurfaceView底层利用双缓存机制,绘图时不会出现闪烁问题。双缓冲技术是游戏开发中的一个重要的技术,主要是为了解决 反复局部刷屏带来的闪烁。游戏,视频等画
2020-10-28 11:57:01 638
转载 TCP的三次握手与四次挥手理解
TCP的三次握手与四次挥手理解转载自https://blog.csdn.net/qq_38950316/article/details/81087809 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文段携带数据的...
2020-10-28 10:47:26 140
转载 详解 TCP 三次握手、四次挥手
详解 TCP 三次握手、四次挥手,附带精美图解和超高频面试题转载自https://segmentfault.com/a/1190000022410446一、TCP 报文段简介在介绍三次握手和四次挥手之前,先来简单认识一下 TCP 报文段的结构TCP 首部包含以下内容,请留意其中的控制位,在三次握手和四次挥手过程中会频繁出现:端口号 (Source Port and Destination Port):每个 TCP 报文段都包含源端和目的端的端口号,用于寻找发送端和接收端应用进程。这两个值加
2020-10-28 10:37:43 215
原创 Kotlin 单例模式
class MyManager private constructor() { companion object { val instance: MyManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { MyManager () } }}
2020-10-26 16:02:31 83
原创 Android图文混排,以及居中处理
//图文混排String text = "商家折扣(-10%)" + " ";SpannableStringBuilder spannable = new SpannableStringBuilder(text);CenterImageSpan imageSpan = new CenterImageSpan(MyApplication.getInstance().getApplicatio...
2019-07-05 11:42:53 484
转载 为什么Flutter会选择 Dart ?
许多语言学家认为,一个人说的自然语言会影响他们的思维方式。这个理论适用于计算机语言吗?使用不同编程语言编程的程序员针对问题想出的解决方案经常完全不同。举一个极端的例子,为了程序结构更加清晰,计算机科学家取消了goto语句(这与小说《1984》中的极权主义领导者从自然语言中删除异端词语以消除思维犯罪不太一样,但道理就是这样)。这与Flutter和Dart有什么关系?确实有关系。早期的Flutte...
2019-07-04 10:32:09 304
原创 drawRect - (绘制弹出菜单menu的三角形尖尖)
//An opaque type that represents a Quartz 2D drawing environment. 一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画 CGContextRef context = UIGraphicsGetCurrentContext(); //画三角形->坐标点 CGP...
2018-03-07 10:43:49 509
原创 CABasicAnimation - 核心动画里与CAShapeLayer相关的几个动画
CAShapeLayer有strokeEndstrokeStartlineWidth三个属性。先添加shapeLayer- (CAShapeLayer *)shapeLayer { if (_shapeLayer == nil) { CGPoint startPoint = CGPointMake(5...
2018-03-06 11:41:14 219
原创 给tabBar添加点击时候的缩放动画(CABasicAnimation - 核心动画之缩放)
比如说想给tabBar添加点击时候的缩放动画,可以这样实现:在代理方法- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;里面给UITabBarButton的layerCABasicAnimation*pulse = [CABasicAnimationanimationWithKeyP...
2018-03-05 17:11:32 282
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人