自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

petterp的博客

因为热爱,所以愿意深夜3点。

  • 博客(140)
  • 论坛 (1)
  • 收藏
  • 关注

原创 计算机网络 | 一文搞懂什么是TCP/IP协议

什么是TCP/IP协议?计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件,操作系统之间的通信,所有这一切都需要一种规则.而我们就将这种规则称为协议 (protocol).也就是说,TCP/IP 是互联网相关各类协议族的总称。TCP/IP 的分层管理TCP/IP协...

2019-10-28 12:49:53 64811 69

转载 数据结构和算法对于一个程序员的重要性

 数据结构算法有什么用?当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。只不过java已经帮你实现了经典语段: 如果说 Java 是自动档轿车,C 就是手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子...

2018-08-04 11:57:14 2159

原创 Flutter | 关于状态管理,别再被吓着了

导航本篇是带大家了解并明白 Flutter 中状态管理相关,着眼与实际应用与通俗(说人话)解释,杜绝概念连篇 ❎ 。对应示例代码地址:Flutter-example-状态管理概述响应式的编程框架中总会有一个永恒的主题–”状态管理“,无论是 React/Vue(前端开发同学肯定了解),还是 Flutter,为了便于共享组件之间的状态,便于在特定时候干特定操作,都会遵循一些特定的约束,而这个约束的过程我们称它为状态管理。没懂?生而为人,我很抱歉,我是真一下没看懂。说实话,我是一个Android.

2020-12-05 19:46:56 13

原创 Java | 关于synchronized相关理解

背景资源冲突Java本身是支持多线程的,而在多线程的情况下,为了防止 多个任务同时访问同一个资源而导致的冲突问题,所以出现了加锁机制。也就是说第一个访问某项资源的任务必须锁定这项资源,使其他任务在其被解锁之前,就无法访问它,而在其被解锁时候,另一个任务就可以锁定并使用它。所以Java提供了关键字 synchronized ,为防止资源冲突。当任务希望执行被synchronized 关键字保护的代码片段时,Java 编译器会生成代码已查看锁是否可用。如果可用,该任务获取锁,执行代码,然后释放锁。对象

2020-11-28 19:56:20 12

原创 源码分析 | AppCompatActivity-setContentView 之我大意了

HZWZ现在的年轻人一上来就粘源码,对我这样一个小菜瓜,这样合适吗,这样不合适。背景故事是这样开始的有一天,我发现自己写的布局没有按照我的想法打印带上了莫名其妙的开头有一天,两个年轻人,不讲武德非要告诉我这是 AppCompatActivity 的原因我不信他们偷袭,显然是有备而来我大意了我没有闪今天,我要自证事实混元门代码 第三代大弟子,打工牛子 参见熟悉的味为什么会这样,明明是一个普通的TextView,为什么变成了Ma.

2020-11-22 11:58:24 39

原创 源码分析 | Activity-setContentView 我都不带闪

我知道大家都很讨厌读别人写的源码分析,因为动不动就长篇大论,不讲武德,这样合适吗,这样不合适。于是,这是一篇不一样的源码分析,如果看完你还说不懂。年轻人,我劝你:引言普通的一个 Activity-setContentView(),你知道它内部做了什么吗?概要源码分析我们先来看一下Activity-setContentView方法:public void setContentView(@LayoutRes int layoutResID) { getWindow().setConten

2020-11-21 14:12:24 14

原创 面试经验 | 一个 Android 小老弟的面试记录 (1-3年)

一个 Android 菜瓜的面试之旅,希望对大家有所帮助。一些叨叨老是听说Android端凉了,寒冬如何如何,老弟觉得并不是,只是饱和了,市场对一个Android开发工程师的要求更加严格,不再是普通的螺丝钉。凭借大多数人的努力程度,那用得着拼其他东西。面试造?????对也不对,有人曾目睹火箭全貌并加以口述,有人却未曾到达这片领域。面向深度开发工程师与面向Api调用师,差距很小也很大。因为热爱,所以才有了一系列开始。背景普通专科,毕业 3 个月,自考本科湘潭大学,预计2021年结束。在上家公司

2020-11-20 12:51:17 76

原创 Junit | 不会写单元测试,就如同不穿秋裤的熊孩子在冬天瞎跑

在我以往的Android开发生涯中,几乎没有使用过单元测试,也没有见过有人去介绍过,好像这个东西在国内开发者眼里并不是很重要,或者说大多数开发同学没有专门的时间去使用单元测试框架,也许更重要的原因应该是我个人的孤陋寡闻。背景什么是单元测试?单元测试是针对最小的单元编写测试代码。在 Java 中,最小的功能单位是方法,因此,对Java 程序进行单元测试就是针对单个 Java 方法的测试。为什么要做单元测试在国外,实际开发流程往往是,先编写测试,测试写完后,再开始真正编写实现代码。在具体实现过程中.

2020-11-15 12:55:07 31

原创 代码人生 | 一个技术同学的人生第一次裸辞

2019年9月20日 入职,2020年11月11日正式离职。讲一下背景吧在某月的绩效结束后,上级提出了转端的提示(说这个的时候,app端业务已经空闲两周,这两周我依然在做app端的组件优化或者别的自己找活),所以当提起的时候,我已经意识到,是该换个环境了,有些话,说破也许并不好。我司是一个项目型公司,团队之间协作都很好。唯一对于我个人来说不好的一点是,app这块只有一个人,当然如果我更愿意学一些后端或者前端,那么我们公司或许极为合适。很多人都在追求全栈开发,这貌似成为了一个趋势所向,但全栈真的好吗,

2020-11-10 20:05:39 86 1

原创 Flutter | 子widget调用父widget方法报 Tried calling: call()

在学Flutter状态管理时,需要子Widget调用父Widget,报如下错误:找了好一会,最后删除 () 后发现正常了,经过查询后得出以下结论,如下图所示:当然上面的 final Function onChanged ,Function 也可以不用加。希望对刚开始学Flutter的同学能有所帮助。...

2020-11-05 22:55:20 56

原创 Flutter | 和小老弟一起玩转Widget

目录概述什么是Widget?在Flutter的世界中,一切都是Widget,即一切都是组件why? 为什么一切都是组件,怎么理解呢?你可以理解为在Flutter中一切都可以通过组合的方式实现,对于我们开发者,只需声明,或者说告诉框架这个组件是什么,它要怎么显示,携带了哪些参数,而Widget 就是用来帮你承载配置的东西。按照传统的 Android 开发思想,在Android中,ui组件就是普通的一个组件,我声明什么显示什么,所见即所得, 而在Flutter中,widget 不仅可以表示ui .

2020-10-29 17:07:46 41 3

原创 Flutter | 和小老弟一起学资源管理

本文示例代码地址Flutter安装包中会包含代码和assets (资源)两部分,其中 assets 是会打包到程序安装包中,可以运行时访问,常见的 assets 类型包括静态数据(json文件),配置文件,图标和图片等。如何指定assetsFlutter使用 pusbspec.yaml 来管理程序所需资源,对于每一个资源文件,都需要在 pushspec 中声明,否则调用时就会出现找不到资源文件的报错。assets 指定应包含在应用程序中的文件,每个asset 都通过相对于 pushspec.ya.

2020-10-26 13:36:56 22

原创 Flutter入门-路由导航

Flutter入门系列连载:Flutter入门-路由导航-本文对应代码链接什么是路由?首先什么是路由,路由对于移动开发者来说就是页面,比如对于我们Android开发者来说就是 Activity A-> ActivityB,类似ios中的 ViewController。而人们常常说起的路由管理,就是管理页面之间如何跳转,通常也可被称为导航管理。例如:MaterialPageRouteMaterialPageRoute 继承自 PageRoute类,是 Material 组件

2020-10-24 23:11:51 42

原创 Kotlin | 一份10万字的随查笔记,妈妈再也不担心我不会Ctrl+F了

标题党?看起来可能有点标题党的意思,但我知道,不这样,你们可能看不到这篇。关于Kotlin相关记录,如果有意查看我的github,其超10w字(其中8w是代码吗,哈哈)。。背景学习Kotlin已经有两年了,从今年1月开始实际投入项目使用,自认为对于Kt使用的还算熟练。个人认为Kotlin真的是一门越用越爽的语言,但在实际开发中,刚开始经常会出现突然忘记了某个特性或者某个高阶函数的使用方式,又得去google,这个时候 如果有一份笔记,可以让你直接搜索到想要的,那么该有多好呢,这就是这份笔记的作用。

2020-10-18 10:44:41 290

原创 Kotlin | 与Java互调的那些事

Kt调用-Java参数非null的处理@NotNullJavaclass TestJava { public void toNotNull(@NotNull String title) {} public void toNull(String title){}}Kotlin中调用Kt调用- Java中使用kt关键字声明的变量和方法kotlin中调用java方法,参数时,如果含有Kotlin关键字,必须增加 反引号 ``Javapublic Object objec.

2020-10-15 16:17:29 50

原创 数据结构 | 二分搜索树及它的各种操作(kotlin实现)

在开始之前,应该先讲一下什么是二叉树。什么是二叉树?和链表一样,同样也是动态数据结构二叉树具有唯一的根节点class Node<E> { var e: E? = null var left: Node<E>? = null var right: Node<E>? = null}每个节点最多有两个节点二叉树具有天然递归结构每个节点的左子树和右字数也是二叉树二叉树不一定是满的二叉树一个nul..

2020-10-14 21:55:41 31

原创 技术人生 | 一个开发同学22岁生日的一些思考与小总结。

反思人总是愿意去反思,反思过往是否做得足够好,是否在某些事情上做得欠缺考虑。这一年,从开始的新奇与怀揣不安到最后的习惯与坚持想法,于我个人来说,是成长。我能为公司带来什么,或者说公司为什么要雇用你,这是我有时候会去考虑的问题。这是个幸运的时代,身为开发,技术的能力与业务的相辅相成必定会使你展露头角,但更多的,是学会如何去看待一些非技术的问题,如何去做事?如何去统筹你的工作?如何去提高你的能力,提高你的核心竞争力?这些是更困难的问题。我司有个技术前辈很有特点,个性鲜明。经常分享时会看见他的电脑壁纸是,去做

2020-09-20 22:43:45 104

原创 Cannot access ‘androidx.lifecycle.HasDefaultViewModelProviderFactory‘ which is a supertype of ‘com.e

Cannot access ‘androidx.lifecycle.HasDefaultViewModelProviderFactory’ which is a supertype of ‘com.example.a19.MainActivity’. Check your module classpath for missing or conflicting dependencies今天创建了个项目,突然出现了这样的问题,怎么处理都没用,网上找了一堆没发现答案,故此记录。增加这个依赖到你的build即

2020-09-11 17:41:16 457

原创 开源组件 | ☁️CloudAAC,一个基于JetPack-AAC的Android通用化框架

基于AAC的模块化组件库,采用组合的方式提高现代化Android开发体验。什么样的框架适合你?什么样的框架也许都不适合你。什么要推荐CloudAAC ?与大千你我一样,皆是从 无架构到MVC->模块化->MVP-> MVVM->AAC->组件化AAC。很多时候,我有在考虑,我们真的需要过度去设计吗?可能有人喜欢 BaseVMFragnment,但有些时候,我们真的需要ViewModel吗,我们真的只有一个ViewModel吗,我可能真的不想去写,对于2020的今

2020-09-09 18:30:50 645

原创 重学数据结构-使用Kotlin实现链表及其他扩展

What is a linked list?????不同于栈与队列及动态数组,它是真正意义上最简单的动态数据结构优点:真正的动态,不需要处理固定容量的问题缺点:丧失了随机访问的能力数据存储在 “节点”(Node)中class Node(val e: E, val next: Node)学习链表我们可以获得哪些?加深引用的理解。(类似C语言的指针)链表内部也有递归结构的性质便于对其他数据结构的辅助实现单向链表如何实现一个单向链表呢?很简单,链表不像数组那

2020-08-30 09:37:38 62

原创 数据结构 | 使用Kotlin实现栈与队列

栈(Stack)Last In First Out(LIFO) 后进先出栈也是一种线性数据结构代码实现栈考虑到需要扩容,所以我们使用ArrayList最为底层的动态数组支持。interface Stack<E> { //获取栈的大小 fun getSize(): Int //栈是否为null fun isEmpty(): Boolean //出栈 fun pop(): E //获取栈尾元素 fun peek(): E}.

2020-08-27 15:46:20 75

原创 抬头看天 | 谈谈移动端抓包方式和原理及如何防犯中间人攻击

抓包对每一个开发者来说,应该说是最基本的技能之一,最近因公司需求接触了一些抓包相关,也遇到了一些奇怪的问题,于是做一个简单的记录,希望对大家有所帮助哈。移动端常用抓包工具工于利其事,必先利其器 ,要抓包,怎么可能没有好的工具,对于普通抓包来说,我们有下面几个工具Fiddler在 windows 环境非常好,提供了一系列抓包方式及后续的脚本,划重点,脚本,这也是众多人喜欢的原因。注意:在mac支持很差,新版软件缺少核心功能脚本,体验很差。Charles体验nice,在Mac,windows.

2020-08-04 17:54:38 208

原创 View工作原理分析1 - 初识ViewRoot和 DecorView

注: 以下相关资料均来自 Android艺术探索,部分内容加入了一些我个人的理解。ViewRoot和DecorView相关分析ViewRoot对应于 ViewRootImpl 类,它是连接 WindowManager和 DecorView 的纽带,View 的三大流程均是通过ViewRoot来完成的。在ActivityThread 中,当Activity 对象被创建完毕后,会将DecorView添加到Window中,同时会创建 ViewRootImpl 对象,并将ViewRootImpl对象和 De.

2020-07-26 21:26:09 74

原创 Hilt-依赖注入框架上手指南

Hilt 是Google 最新的依赖注入框架,其是基于Dagger。对于Android开发者来说,Hilt可以说专门为Android 打造,提供了一种将Dagger依赖项注入到Android应用程序的标准方法,而且创建了一组标准的组件和作用域,这些组件会自动集成到Android应用程序的各个生命周期中,以简化开发者的上手难度。在学习本文之前,假定大家已经了解依赖注入是什么,如果没有了解过,可以先了解概念。Hilt 的目的是降低Android 开发者使用依赖注入框架的上手成本,但是基本的理念大家还是要明.

2020-06-15 21:00:54 3250 5

原创 Android基础 | 关于Activity你应该明白的一切
原力计划

Activity 作为一个老生常谈的话题,它是我们刚接触Android开发就遇到,虽然已有一段时间开发经验,但谈起完全搞懂Activity相关,不敢妄言,故结合个人理解及书籍参考,简单总结一下 Activity基础相关知识,其中也留出了一些有意思的问题。大体的脑图如下(启动流程涉及的过多,暂时放在后期):Activity生命周期基础的生命周期方法这里就不做解释了,大家刚开始接触时就...

2020-04-29 20:24:21 270 1

原创 解决Android WebVIew中视频播放前出现的灰色三角形播放图标

最近在开发中,发现WebView中播放视频时,会出现灰色的播放图标,如图:解决办法如下:重写 WebChromeClient 类中的 getDefaultVideoPoster 方法,返回一个透明的bitmap.getDefaultVideoPoster不播放时,视频元素由“海报”图像表示。可以通过* HTML中视频标签的poster属性指定要使用的图片。如果该属性不存在,则将使用默认...

2020-03-17 22:54:11 459 3

原创 RecyclerView.notifyItemRemoved导致的数组下标越界问题

我们一般在RecyclerView列表中移除某条Item时会调用 notifyItemRemoved 方法,其还附带了相应的移除特效。使用虽然简单,却埋了一个大坑;当你调用 notifyItemRemoved 之后,如果你移除的刚好是倒数第二个数据,此时点击最后一条数据,就会惊讶的发现当前点击的下标居然没变,然后抛出数组越界的错误。为什么呢,原因如下:众所周知,RecyclerView更新数...

2020-03-17 22:34:47 254

原创 Android实现同时安装测试环境与生产环境包,及区分app名和图标

众所周知,相同包名的APP,是不能同时安装的,但是我们实际开发中,测试同学往往在测试环境没问题,上了生产环境,却发现了bug,这时候就只能卸载生产环境的包,再去安装测试环境。如果没有开发流程中缺少自动化打包或者测试同学不保存蒲公英二维码,这时候就会产生多余时间成本。那么有没有一种可能,同时安装测试与生产环境的包呢?这个当然是可以的,我们更换包名就行了,Android Studio早已为我们准备了...

2020-03-09 00:14:54 1647

原创 Kotlin | 协程使用手册(不间断更新)

Kotlin协程作为Kotlin核心的一个组件,上手成本并不高,下面的demo都是我参照官网的例子过了一遍。Kotlin中文网。其中的Flow大家可以多花点时间,还是挺有意思的。启动一个协程fun main() { GlobalScope.launch { println(123) } Thread.sleep(10)}阻塞方式等待...

2020-01-15 21:42:21 505

原创 Kotlin | 协程是什么?

Hi你好,新同学。很高兴,你终于追寻这个问题了,也许你正感到迷茫,各路大神对协程的理解不一,有人说它是线程框架,有人说它比线程更轻,希望我这篇博文可以帮你从另一个角度简单理解协程。请相信一句话,任何解释从第二个人口中说出时,可能已经存在了变化。而官网是我们接触任何技术最必要的门槛。所以请打开Kotlin中文网。很多人说kotlin官网教程很不详细,其实不然,kotlin中文网教程很详细。回...

2020-01-15 20:57:12 548

原创 Kotlin | 实现数据类(data)深拷贝

在Kotlin中,data数据类默认的copy方法实现的是浅拷贝,但我们有时候需要实现深拷贝。 在kotlin中,实现就比较容易了。那么什么是深拷贝与浅拷贝呢?简单理解,拷贝指的是将A对象赋值给另外一个B对象,我们称之为对象拷贝。深拷贝指的是:拷贝后,如果B对象中存在引用对象,此时更改这个引用对象不会影响到原有A对象中的引用对象,因为它两所操作的内存并不是同一块内存。而浅拷贝则相反,当你操...

2020-01-06 16:16:40 3598 2

原创 Kotlin | 使用Kotlin改造Android Gradle

目前Gradle官方已经将这个计划加入进展中,但不建议开发使用,尝鲜即可。github为什么要改造?Gradle采用groovy采用开发语言,是一种动态的dsl语言,缺点就是写脚本时如果出现问题,我们无法实时的得知,只能通过print进行得知,而且无法跳转,并且不支持自动补全。我们先建一个普通的Android项目,然后改造如下,那怎么改造呢?改造很简单,在你的gradle后面加上kts...

2019-12-31 14:45:11 297 2

原创 Kotlin学习-对Android开发初学者的建议

当你看到这篇帖子的时候,如果你刚开始学习Android,或者说你Java并不太熟练的情况下,我个人并不推荐你学习Kotlin.并不是我打击你。你可能是从某些学长,订阅号中得知Kotlin的现在以及未来,但请相信,如果你从事Android开发,先搞好Java,再来学习Kotlin。因为在实际开发中,很多次都会看见kotlin写的教程,相信我,看的时间长了,就算你没系统学过kotlin,你也会觉得它...

2019-12-29 21:16:38 207

原创 日常开发 | Android设置属性动画无限旋转

两种方式实现:方式1:ImageView img = findViewById(R.id.img_src);ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(img, "rotation", 0, 359);objectAnimator.setRepeatCount(ValueAnimator.INFINITE);objectA...

2019-12-16 11:52:53 872

原创 Java动态代理其实很简单

在使用Java 动态代理时,一直很迷惑,什么是动态代理,动态在了那里?它和静态代理的区别是什么?但是很遗憾,没有找到一个能真正简单明了的告诉我原因的博客,于是决定自己动手,分析一下。首先,本篇的主要围绕点如下:当然,对于其中的具体实现,并不会太去关注,本篇博客主旨是简单通俗的告诉你,什么是动态代理,它的流程是什么。首先,什么是动态代理?我复制一个大佬的解释如下:利用Java的反射技术(...

2019-12-10 17:58:52 101

原创 依赖倒置,控制反转,依赖注入 其实很简单

先用一句最简单(粗暴)解释 开篇:上层模块不应该依赖于底层模块,它们都应该依赖于抽象抽象不应该依赖于细节,细节应该依赖于抽象首先,让我们持有以下几个问题:什么是依赖倒置?什么是控制反转?什么是依赖注入?说实话,刚看到这几个词的时候,有点懵逼,不知道到底是啥意思,翻了几篇博客,看的我更是懵逼。直到多翻了几篇之后,才恍然大悟,哦,原来我经常在用啊。于是记录一下我的理解。本篇可以帮...

2019-12-06 17:47:29 137

原创 Android Fragment懒加载新思路

在Android x以前,我们实现懒加载通常是通过 setUserVisibleHint 方法来控制Fragment是否可见。在Android x之后,Google 提供了新的方案给我们。今天我们就来学习一下。如果在Android x中直接使用以前的方案,会提示如下,方法已过时:点进去查看注释:大概就是这个方法可以告诉当前Fragment的是否对用户可见,但是可以在生命周期外调用,...

2019-12-04 00:55:59 155

原创 浅谈Android热修复的前因后果与实现原理。

最近一个月本该来说时间应该最多,但却没有写几篇博客,真是惭愧啊。最近在集成热修复,正好周一要进行技术分享,所以就来好好梳理一下 热修复的前因后果。首先,我们需要持有以下几个问题:什么是热修复?它可以帮我解决什么问题?热修复的产生背景?热修复的基本原理是什么?如何选择热修复框架?热修复的注意事项热修复与多渠道?自动化构建与热修复?上面一共有7个问题,如果是新同学的话,后面...

2019-11-25 16:39:11 354 3

原创 手把手教你封装一个健壮的MVP框架,面向接口开发。

在我们的日常开发中,我们都知道 Android 端的开发框架有 MVC,MVP,MVVM,说起这几个框架,大家也肯定都有自己的看法,甚至很多同学也都封装过。问题来了:现在不都是 MVVM 了吗,你还写MVP干吗,有用吗,网上那么多轮子,找个 star 高的不就行了。使用和自己动手封装完全是两个过程,需要考虑多方面,这其中需要踩很多坑。目前这个框架已经应用在我写的公司项目上。趁最近有时间,对框...

2019-11-08 20:47:06 461 1

原创 一文搞懂什么是HTTP与HTTPS

Http与Https的区别。在最近的开发中,深感网络相关基础知识薄弱,于是趁周末好好总结一下。我们通常使用的网络是在TCP/IP协议族的基础上运作。而HTTP 属于它内部的一个子集。Http是什么?简单来说,它是计算机通过网络进行通信的一个规则,是一个基于请求与响应,无状态,应用层的协议,长基于 TCP/IP协议传输数据。目前我们常见的终端之间都必须按照 Http 协议进行,否则无法连...

2019-10-28 13:04:08 1310

空空如也

新注册的账号原创和访问量等数据一直为0

发表于 2018-05-15 最后回复 2018-05-15

空空如也

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

TA关注的人 TA的粉丝

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