自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

浩浩的代码花园

如果事与愿违,那么请你相信,上天一定另有安排

  • 博客(102)
  • 收藏
  • 关注

原创 写给新人的话——谈谈应届生入职后应该怎样快速成长

Hello,All,我是来自58同城的一名Android开发工程师,在58集团从事APP的开发工作。欢迎为本篇文章点赞,评论PS:关注,私信我,帮你内推58,常年招聘前端,移动端,后端,算法。也欢迎关注我的公众号,在这里可以找到我,同时,这里会不定期地推送一些时下最热门的技术文章和互联网行业工作心路历程又到了一年一度的招聘季,不同于往日火爆的春招场面,今年的招聘活动受疫情影响严...

2020-04-18 23:01:40 2683

原创 Android自问自答系列——持续更新ING

Hello,All,我是来自58同城的一名Android开发工程师,在58集团从事APP的开发工作。在日常的工作和学习过程中我经常会碰到一些好玩的和有意思的Android小知识点,有些知识可能都从未注意到过。通过一个多月的收集和整理,我发现通过不断地记录这些问题达到了非常好的复习效果,从而帮助了工作上的持续进步,今天我也是把平时收集到的这些东西发出来供大家一起学习,共同成长,如果感觉好,欢迎点击右...

2020-01-22 21:06:56 3108

原创 Flutter的布局顺序

Flutter布局的碎碎念

2023-01-10 15:17:02 912

转载 如何将kotlin数组转为java的可变参数...

kotlin中*的妙用

2022-09-24 16:13:34 649

原创 android Measurespec测量模式

测量模式

2022-07-19 13:40:19 660

原创 谷歌开发者社区分享——Flutter动画的分享已发布

一起聊聊flutter动画

2022-07-16 20:32:59 432

原创 面试有感——技术的本质

姑且把这篇面试有感的主题叫做技术的本质,今天面试的收获远远超出了面试这件事情本身。2022年5月31日 下午 天气:晴今天面试了一家公司,面试官是一位国内非常资深的C++程序员大佬,91年(那时我还没出生)大学毕业之后就开始做软件开发工作,至今已经20年有余,曾经开发过汉卡(不知道汉卡的同学可以自己去百度一下),面试流程中和他做了一些交流,受益匪浅。他91年开始写代码,在大学时期就把英特尔80系列处理器的架构和电路、Dos系统进行了彻底研究,对计算机系统底层知识有着非常透彻的理解,他最早做过..

2022-05-31 00:24:11 250

原创 如何准备一场技术面试?——心态建设和简历准备

到底是什么样的神仙简历,帮助我拿下了年薪百万offer?

2021-12-29 00:08:38 535

原创 如何接手别人写的项目?——进入新公司的一点感悟

1.问老人经常维护此项目的人对项目是比较熟悉的,通过老人的指引能够加速我们对项目的理解程度。但是老人有时候琐事缠身,不一定能够及时回答我们的问题。2.看文档一种不麻烦别人的办法,通过查阅技术文档和项目说明文档,可以实现按图索骥,快速理清项目的主线。这种方式页告诉了我们,在项目立项之初起,就要建立一套文档落地机制,不但可以记录整个项目的前生今世,也方便了后来的同学快速上手。3.项目结构清晰一点,再清晰一点优秀的项目结构可以帮助我们快速理清项目结构,及时是由点及面地去看项目,也能够快速的

2021-12-22 16:13:58 967

原创 2021 Android面经及求职总结

投递情况主要投递了国内和国外的互联网公司,同时也投递了一些币圈企业,最终斩获battmd offer和一个币圈的百万年薪offeroffer斩获情况大大小小共12家公司offere考点算法:单例的写法(我采用了双检查的写法,写完要能解释清楚为什么写volatile或者双检查)两个线程轮流打印奇数和偶数(腾讯新闻)生产者消费者模式,用wait和notify写出来(美团)二分法查找(很多公司都会考)合并两个二叉树(头条)猴子吃桃(一次吃2个或3个桃子,总共有多少种吃法

2021-12-11 11:59:10 2416 3

原创 refield

reified关键字由于 Java 中的泛型存在类型擦除的情况,任何在运行时需要知道泛型确切类型信息的操作都没法用了。比如你不能检查一个对象是否为泛型类型T的实例:☕️<T> void printIfTypeMatch(Object item) { if (item instanceof T) { // ???? IDE 会提示错误,illegal generic type for instanceof System.out.println(item);

2021-11-09 10:35:32 1884

原创 Kotlin inline noinline crossline

inline 关键字的用处:高阶函数(Higher-order Functions)有它们天然的性能缺陷,我们通过 inline 关键字让函数用内联的方式进行编译,来减少参数对象的创建,从而避免出现性能问题。所以,inline 是用来优化的吗?是,但你不能无脑使用它,你需要确定它可以带来优化再去用它,否则可能会变成负优化。其实换个角度想想:既然 inline 是优化,为什么 Kotlin 没有直接开启它,而要把它做成选项,而且还是个默认关闭的选项?就是因为它还真不一定是优化,加不加它需要我们自己去.

2021-11-07 19:47:56 2040

原创 Java 判断两个对象是否相等

一、使用 == 与 equals==: 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象。(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)equals(): 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:情况1:类没有覆盖equals()方法。则通过equals()比较该类的两个对象时,等价于通过“==”比较这两个对象。 情况2:类覆盖了equals()方法。一般,我们都覆盖equals()方法来两个对象的内容相等;若它们的内容相等,则返..

2021-11-07 15:37:55 9979 1

原创 使用hashmap为什么要同时重写hashcode和equals

当equals方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规约定:值相同的对象必须有相同的hashCode。HashMap是由数组和链表组成的高效存储数据的结构。那么是如何确定一个数据存储在数组中的哪个位置呢?就是通过hashCode方法进行计算出存储在哪个位置,还记得我们上面讲hashCode方法说了有可能两个不同对象的hashCode方法返回的值相同,那么此时就会产生冲突,产生冲突的话就会调用equals方法进行比对,如果不同,那么就将其加入链表尾部,...

2021-11-07 15:35:07 460

原创 OKHttp之OkIO

OKIO的核心:Sink和Souceokio的本质是对InputStream和OutputStream做了进一步封装内部通过Segment组成的双向链表来持有数据

2021-11-07 14:56:57 377

原创 OKHttp 的缓存策略

OKHttpClient:相当于是okhttp的控制器,可以添加拦截器,发起网络请求Request:构造网络请求参数,添加缓存控制(cachecontrol)缓存策略添加:cachecontrol

2021-11-07 14:54:19 228

原创 kotlin函数对象和高阶函数

创建方式::: + 函数名 匿名函数 lambda表达式在kotlin都是函数类型的对象

2021-11-07 00:05:10 1642

原创 Recycleview notifyItemChanged的执行过程

创建Recycleview时会设置一个adapter,在此处会调用adapter.registerAdapterDataObserver设置一个数据变动监听。调用notifyItemChanged --->> 调用到观察者的onItemRangeChanged的回调,最终会通知到RecyclerviewDataObserver的onItemRangeChanged将更新事件封装成一个UpdateOp之后装载到pendingUpdates里面然后会调用triggerUpdateProc

2021-11-06 21:44:41 633

原创 AsyncTask原理

原理简述:AsyncTask内部持有一个2~4线程大小的线程池,当执行asynctask的execute(Runnable)方法时会将任务提交到内部的ArrayDeque的任务容器内,并执行SerialExecutor的execute方法,从arraydeque里取出任务并执行当执行execute(params...)方法时会执行executeonexecutor,此时的执行是并行的,任务会被封装成一个WorkerRunnable,WorkerRunnable内部持有一个params数组,并被最终封

2021-10-20 00:33:10 133

原创 Flutter动画——从踩坑到上线

前言最近公司在做Flutter改版,在为期3个月左右的改造过程中,将双端整体从native迁移到了flutter平台并上线。从改版后的视觉效果来看,在本次改造中关键节点多次使用到了动画场景,其中,就包括本次的分享所分享的内容——奖励二级页入口动画。奖励二级页入口承载了2.0版本中骑手收入的动态展示触达,新奖励触达,并在业务过程中通过一系列复杂的动效来提升了该部分的用户体验。且兼具了奖励二级页入口的工作。鉴于网上大多讲解flutter的基础动画,对复杂动画和动画实现原理的分享和实现案例较少..

2021-10-04 23:23:34 734

原创 如何判断一个类的职责是否足够单一

类中的代码行数、函数或属性过多,会影响代码的可读性和可维护性,我们就需要考虑对类进行拆分; 类依赖的其他类过多,或者依赖类的其他类过多,不符合高内聚、低耦合的设计思想, 我们就需要考虑对类进行拆分; 私有方法过多,我们就要考虑能否将私有方法独立到新的类中,设置为 public 方法,供更多的类使用,从而提高代码的复用性; 比较难给类起一个合适名字,很难用一个业务名词概括,或者只能用一些笼统的; Manager、Context 之类的词语来命名,这就说明类的职责定义得可能不够清晰; 类中大量的方

2021-08-13 00:11:45 361

原创 Flutter key

Flutter key分为Global key和LocalKeyLocalKey包涵Valuekey Objectkey UniquekeyGlobalkey全局唯一ValueKey局部唯一,例如:在同一个widget中的children中valuekey需要唯一 ,根据内部的==做对比ObjectKey对比是否是同一个object,也就是内存中的地址Uniquekey只和自己相等stateless不需要key...

2021-08-09 09:28:13 191

原创 Flutter Container的本质

Flutter Container的本质是一个多种widget的组合,像我们常用的padding、SizedBox、Align等等组件,都可以在Contaienr中找到替代他的对应标签。Container存在的意义就是能够让我们避免代码地狱。写过Flutter的人都知道,在一个布局层级比较深的widget中,如果采用多层嵌套的方式,往往会让代码看起来很臃肿,呈现一个金字塔形。但是如果把这些如padding、SizedBox的组件换成container属性标签的话,则会让代码看起来工整许多。这一点

2021-08-04 00:06:09 137

原创 Flutter中的弹性组件与非弹性组件

Flutter中的组件可分为两类:弹性组件与非弹性组件Flutter中的布局步骤分两步:1.为非弹性组件分配空间2.为弹性组件分配空间弹性组件:Flexible、Expanded,非弹性组件:尺寸固定组件,如:SizedBox在使用Column或者Row时,他会给子组件施加一个主轴方向的松约束,并计算非弹性组件所占用的空间,之后将剩余空间分配给弹性组件...

2021-08-03 00:02:12 241

原创 Flutter布局中的松约束、紧约束

BoxConstraint.loosen:松约束

2021-08-02 09:29:39 1905

原创 如何理解Flutter的“向下传递约束,向上传递尺寸”

首先要说的是,flutter对组件的遍历规则是深度优先的。以此app为例,runapp向下传递的约束是宽大于等于414,小于等于414,高大于等于896,小于等于896,所以他下级的container拿到的约束就是这个值,但是container的尺寸约束并不在这个范围内,所以他向下传递的约束还是414,896,当container的下级center拿到约束时,由于center的特性,可以将子组件放置在其内部的中心位置,所以它向下传递的尺寸是0~414和0~896,当其内部的container设置尺...

2021-08-01 23:04:40 476

原创 Flutter中一些不常用但非常好用的组件

FittedBox:控制子组件完美的占满父控件空间SafeArea:异形屏适配利器,可以完美的避开异形屏的边角和iphone的下巴。由于flutter的特性:向上传递尺寸,向下传递约束。如果将safeArea放置过高,会将iphone头部的圆角避开,反而不美观LayoutBuilder:能够传递父布局传递的尺寸约束Orintationbuilder:传递横竖屏信息DefaultTextStyle:规定统一文本样式并向下传递IconTheme:defaultTextStyle的icon版.

2021-08-01 21:57:53 216

原创 设计模式之美学习笔记

面向对象编程的几大特性:封装、抽象、继承、多态封装:信息隐藏或者数据访问保护。类通过暴露优先的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据封装能对类中的属性做访问限制,提高类的易用性抽象:隐藏信息、保护数据面向对象封装的定义是:通过访问权限控制,隐藏内部数据,外部仅能通过类提供的有限 的接口访问、修改内部数据。所以,暴露不应该暴露的 setter 方法,明显违反了面向对象 的封装特性。数据没有访问权限控制,任何代码都可以随意修改它,代码就退化成了面向过 程编程

2021-07-28 14:03:23 100

原创 如何在Flutter中准确地获取widget的宽高信息

使用WidgetsBinding.instance.addPostFramaCallback,他会在build完成后的第一帧进行回调,此时widget已经绘制完成

2021-07-04 20:37:32 994 2

原创 删除完flutter依赖记得跑一遍pub get或者pub update方法

删除完flutter依赖记得跑一遍pub get或者pub update方法

2021-06-21 23:28:35 1628 2

原创 Kotlin版本升级引起的编译失败

报错:The binary version of its metadata is 1.5.1, expected version is 1.1.13.解决办法:不要按系统提示升级kotlin,升级后如果kotlin版本不是写死在gradle文件中的,升级后会自动更改版本号配置,需要手动改回...

2021-06-21 19:32:27 8134 2

原创 ‘package:flutter/src/widgets/framework.dart‘: Failed assertion: line 1973 pos 12: ‘_elements.contain

flutter在开发动画的过程中经常会上报此错误,而且全屏爆红。解决方法:在widget的dispose方法中将controller释放

2021-06-14 14:58:47 2344 2

转载 线程切换的开销

从单线程应用到多线程应用带来的不仅仅是好处。也会带来开销。不要仅仅在一个应用中使用多线程仅仅是因为你能够(会)使用多线程。你应该能确定使用多线程带来的好处要远远多于它带来的花销。如果不能够确定,那么请尝试测量应用的性能和响应性,不仅仅是猜测。更复杂的设计尽管多线程应用的某些部分要比单线程应用更加简单,但是应用的另一些部分会变得更加复杂。当一个多线程应用访问共享数据时要特别注意。线程的交互一点也不简单。错误总是在不正确的线程同步中产生,而且很难发现、重现、修复。线程切换开销当一个cpu从一个线

2020-09-15 23:04:57 3535

原创 String和new String()

越是简单的东西越容易被忽略String a = "abc";String b = new String("abc");syso(a == b);这段代码的执行结果是什么?是false!String a = "abc";abc字符串是被分配进了方法区里的常量池,这个我们都知道但是new String(“abc”);l在内部则是对他的values和hash分别进行了赋值,相当于是重新创建了对象,所以使用==来比较就是返回false;...

2020-09-11 17:30:02 321

原创 Java装拆箱引发的血案

Integer a = 100;Integer b = new Integer(100);syso(a == b);这段代码的结果是什么?首先,Integer a = 100;会先进行装箱,调用Integer.valueOf()方法来获取他的Integer值,在valueOf中会看当前值是否在-127~128之间,如果是,则直接从cache中取出Integer对应的引用,如果不是,则创建一个对象。但是Integer(100)却不会走这个过程,传递进去的值直接就赋值给了内部的value;.

2020-09-11 17:26:11 139

转载 深入剖析Java中的装箱和拆箱

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。  以下是本文的目录大纲:  一.什么是装箱?什么是拆箱?  二.装箱和拆箱是如何实现的  三.面试中相关的问题  若有不正之处,请谅解和批评指正,不胜感激。一.什么是装箱?什么是拆箱?  在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包

2020-09-10 15:57:59 144

转载 androidP 对反射的限制之黑名单机制

前言1 . 信息:Android P(禁用非官方API)目前类似的消息此起彼伏,关于国外移动开发者社区 XDA 的活跃者们在 AOSP(Android 开放源代码项目)的代码提交记录中的发现。从 AOSP 最新的 commits 中可以看到,那些使用 Android SDK 里面没有被文档提及的非公开 APIs(也就是使用 @hide 注解标记的 APIs)的 apps 将受到系统限制。image2. 验证:Android P预览版已经开发下载,大家可以下载刷机,测试下使用到的api

2020-08-23 18:17:48 2216

原创 AQS原理

AQS的全称是AbstractQueuedSynchrizeder(抽象队列同步器)。它是为实现依赖于先进先出等待队列的阻塞锁和各种同步器(Semaphore,CountdownLatch,CyclicBarrier,Exchanger等等)而提供的一种基础框架。 它内部有一个int类型的state变量,被volatile关键字修饰,保证线程之间的可见。还会维护一个Node内部类(用于生成同步对列和等待队列),并继承过来一个加锁线程。state变量的访问方式有三种:getState(),setSta..

2020-08-16 15:23:50 147

原创 sleep,wait的区别,尤其是在使用场景上的区别

sleep,wait方法的对比 wait sleep 同步 只能在同步上下文中调用wait方法,否则或抛出IllegalMonitorStateException异常 不需要在同步方法或同步块中调用 作用对象 wait方法定义在Object类中,作用于对象本身 sleep方法定义在java.lang.Thread中,作用于当前线程 释放锁资源 是 否 唤醒条件 其他线程调用对象的notify()或者notif...

2020-08-15 17:47:08 1473

原创 HashMap与LinkedHashMap

HashMap读取数据时是无序的,而LinkedHashMap是有序的LinkedHashMap的底层数据结构是维护一个双向链表,数据的排列顺序就是由这个双向链表来确定的LinkedHashMap允许插入空值

2020-08-14 17:43:32 159

空空如也

空空如也

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

TA关注的人

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