自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 大厂出来的就一定实力强嘛,android音视频开发

一个好的平台会放大一个人的能力,而一个坏的平台会压缩一个人的能力。但是,平台的力量是只属于平台的,在平台的加持下,再大的成就也不完全属于个人。所以,看清自己,不偏不倚,不骄傲,不自卑,保持清醒的头脑,努力提升自己是我们应该做到的事情。但很多人都看不清这一点,总觉得是自己的能力强才获得了什么。平心而论,你自己的能力是有一部分因素,但是更大的因素是在这个平台上你能展示出自己的这个能力。千里马常有而伯乐不常有。事情的真相就是:离开平台的你,可能什么也不是。生活中的蠢驴================

2021-09-08 21:09:01 191

原创 大众点评App的短视频耗电量优化实战,阿里架构师经验分享

3. 测试结果如下是Battery Historian测试结果部分截图:视频列表页视频详情页对测试结果数据进行汇总整理:消耗电量:系统总电量的占比从测试结果可以看到,短视频列表页耗电量特别高,是视频详情页的11倍。4. 问题定位视频列表页消耗电量过高,从测试数据可以很明显的看出来,视频列表页CPU占用时间高很多。从播放器布局来看,列表页和作者页比视频详情页只是多出了动画音符。如下图,红框中圈出的视频左下角的音符。电量消耗差异这么大,是否跟动画音符有关呢。为了排除这个问题,重新编译了

2021-09-08 21:07:15 250

原创 多年Android 开发经验程序员,最后被能,阿里中间件

中年危机来袭,我们这些大龄开发者该如何应对?这里我想分享陈睿对中年危机的看法陈睿(前金山毒霸研发经理、现bilibili董事长)从程序员到架构师到管理者,最后到创业者我一直相信这样一句话:真正的危机,来源于在正确的时间做不正确的事。没有在正确的时间,为下一步做出积累,这才是危机的根源。比如,当你迈过了30岁这个坎,你的能力还局限于程序的范围,也没有积累好自己的深度以及视野。如果真是这样,我想我一定会每天夜不能寐,每天唾骂自己,你特么究竟每天在干神马。我也一直相信这样一句话,当你把你的眼泪流

2021-09-08 21:05:29 191

原创 外国开发者都知道的Android-筑基导论,程序员必看

基础不稳,地动山摇!好比我们学习数学,大家都是先学:阿拉伯数字 -> 数学符号 -> 加减法 -> 乘除法 -> 九九乘法表 -> 方程式 -> 公式定理从小我们学习,在学校里就是从难到深,那为啥放到软件领域,编程行业,我们就忘了呢,大家总是着眼于最顶层的东西,总也看不到技术基础在哪里呼喊你赶紧关注它 ┻━┻︵╰(‵□′)╯︵┻━┻我们平时用的开源框架/库,这些都是软件领域最终的成品了,就好比是数学中的公式定理,小白学习这些源码就是一个剥开公式定理外皮一层.

2021-09-08 21:01:58 438

原创 复工之后是‘跳槽,走进Android架构

最后,把每个知识点串联起来,形成线,再将线变成面,讲给别人听,或者将其形成文章分享出来如果把每次遇到的问题都如此总结,周而复始技术/理解能力会有明显的提高特别是有几年工作经验以后,需要针对基础的计算机知识进行系统的学习。因为基本的编程技巧和工具都离不开这些基本原理的支持。例如:数据结构,原理,数据库设计,设计模式,算法。在这个过程中可以对知识进行重新梳理,分类,站在更高的位置审视所学知识多向身边人学习古人说三个臭皮匠赛过诸葛亮,三人行必有我师,天生我材必有用。每个人身上都有其对应的优点。从他们身上

2021-09-08 21:00:20 73

原创 NDK _ 带你点亮 JNI 开发基石符文 (一),真的太香了

答:extern "C"表示即使处于 C++ 环境,也要全部使用 C 的标准进行编译。我们可以在 jni.h 文件中找到答案:因为 JNI 方法中的 JavaVM 和 JNIEnv 最终都调用到了 C 中的 JNIInvokeInterface_ 和 JNINativeInterface_。(todo 论据不充分)jni.hstruct JNIEnv_;struct JavaVM_;#ifdef __cplusplustypedef JNIEnv_ JNIEnv;typedef JavaVM_

2021-09-06 21:57:45 86

原创 Native开发工具之静态库和动态库(二,小码农也有大梦想

#ifdef __cplusplus}#endif#endif //NDKLIB_NANNAN_Hnannan/nannan.cpp#include “nannan.h”std::string get_nannan_response(){LOG_E(“Nannan get response”);return “Hello, My name is Nannan!”;}std::int32_t get_nannan_age(){LOG_E(“Nannan get age”);ret

2021-09-06 21:56:00 2699

原创 Native开发工具之CPU-和架构(三,含小米、腾讯、阿里

x86此 ABI 适用于支持通常称为“x86”或“IA-32”的指令集的 CPU。此 ABI 的特性包括:指令一般由具有编译器标记的 GCC 生成,如下所示: -march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32这些标记指向 Pentium Pro 指令集,以及 MMX、SSE、SSE2、SSE3 及 SSSE3 扩展指令集。生成的代码在顶层 Intel 32 位 CPU 之间进行了均衡优化。如需了解有

2021-09-06 21:54:13 2996

原创 Native开发工具之CPU-和架构(三,中高级Android开发应该要了解

NDK 工具链假设在函数调用之前进行 16 字节堆栈对齐。默认工具和选项会强制实施此规则。如果编写的是汇编代码,必须确保堆栈对齐,而且其他编译器也遵守此规则。请参阅以下文档了解更多详情:GCC 在线文档:Intel 386 和 AMD x86-64 选项不同 C++ 编译器和操作系统的调用规范Intel IA-32 Intel 架构软件开发者手册第 2 卷:指令集参考Intel IA-32 Intel 架构软件开发者手册第 3 卷:系统编程指南System V 应用二进制接口:Intel386

2021-09-06 21:52:25 2847

原创 Native开发工具之AS构建NDK项目(六,爆火的Android面试题

…\build\intermediates\classes\debug 这个路径如图所示:example.user.ndkdemo2.NDK就是NDKclass的路径名。执行完这个命令后,会在main文件夹下自动生成jni目录和.h头文件。可以打头文件看看:/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class example_user_ndkdemo2_N

2021-09-06 21:50:42 2918

原创 MultiType显示多种数据类型,后台开发Android岗

Gradle配置// MultiTypeapi 'com.sunfusheng:MultiType:<latest-version>'// MultiStateapi 'com.sunfusheng:MultiState:<latest-version>'// RecyclerViewWrappercompile 'com.sunfusheng:RecyclerViewWrapper:<latest-version>'// 如果.

2021-09-06 21:49:05 163

原创 MPAndroidChart绘制曲线图、柱状图总结,真香系列

YAxis yAxis = mChart.getAxisLeft();//设置x轴的最大值yAxis.setAxisMaximum(yMax);// 设置y轴的最大值yAxis.setAxisMinimum(yMin);// 不显示y轴yAxis.setDrawAxisLine(false);// 设置y轴数据的位置yAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);// 不从y轴发出横向直线yAxis.setDrawGri

2021-09-06 21:47:15 1066

原创 Flutter异步编程详解,oppoAndroid面试

onPressed: calculator,tooltip: 'Increment',child: Icon(Icons.add),)* 修改代码1. 新建一个`calculatorByComputeFunction`方法,用`compute`调用`bigCompute`方法:void calculatorByComputeFunction() async {// 使用`compute`调用`bigCompute`方法,传参0int result = aw.

2021-09-05 20:34:07 307

原创 Flutter开发环境搭建和调试,字节跳动面试真题

模拟器的安装运行Flutter项目到模拟器和真机Flutter常用命令开发环境的搭建1. 下载Flutter SDKFlutter SDK由两部分构成,一个是Dart SDK,另一个就是Flutter SDK,因为Flutter是基于Dart的。可以通过两种方式下载:一种是Git下载;另一种是直接下载SDK压缩包即可。Git方式我们可以通过拉取官方Github上的flutter分支来下载。分支分类如下图:可以看到主要有dev、beta和stable三个官方分支使,这里正式开发的话可以下载.

2021-09-05 20:32:27 170

原创 Flutter嵌套深?扩展函数了解一下,Android基础入门教程

class Test extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold( appBar: AppBar(title: Text('Demo'),), body: Container( child: Offstage( offstage: false, child: ListView( children: <W

2021-09-05 20:30:40 120

原创 Flutter实现微信支付和iOS IAP支付,老师讲的真棒

// ① 弹出支付框后使用系统返回键关闭;// ② 进入微信支付密码框后不输入使用系统导航切回app或者系统返回键返回;// ③ 进入微信后直接返回桌面再回到应用;// ④ 弹出支付框后锁屏再开屏;// ⑤ 弹出支付款后下拉任务栏;// ⑥ 输入密码成功后,直接返回桌面或者使用系统导航或者使用返回键返回app// ⑦ 退出微信登录,进行支付后直接登录微信,在登录过程中回到app// ⑧ 在系统应用管理中双开微信后,调起支付后不点击任一个微信端,而是点击取消现在主流的做法是再支付页面监听ap

2021-09-05 20:29:09 927

原创 Flutter实战(二,安卓开发面试题目

新增一个城市选择的页面在城市选择页面,点击城市,跳转到对应城市天气的页面1. 创建城市选择页面在Android中新建一个页面,需要用Activity,在iOS中需要用ViewController,但在Flutter中,新建一个页面只需要用Widge就行,所以我们新建一个CityWidget.dart,CityWidget是一个ListView,从服务器拉取城市的列表并显示,我们用CityData.dart来存储城市的数据。代码如下:CityData.dartclass CityData{.

2021-09-05 20:27:25 125

原创 Flutter完整开发实战详解(七、 深入布局原理),Android面试送分题

是的,RenderConstrainedBox 就是继承自 RenderBox,从而实现RenderObject 的布局,这里我们得到了它们的关系如下 :WidgetRenderObjectConstrainedBoxRenderConstrainedBox[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZT11R5NU-1630844737183)(https://user-gold-cdn.xitu.io/2019/11/18/16e7da31

2021-09-05 20:25:48 153

原创 Kotlin下的5种单例模式,实现原理分析

Kotlin的对象声明学习了Kotlin的小伙伴肯定知道,在Kotlin中类没有静态方法。如果你需要写一个可以无需用一个类的实例来调用,但需要访问类内部的函数(例如,工厂方法,单例等),你可以把该类声明为一个对象。该对象与其他语言的静态成员是类似的。如果你想了解Kotlin对象声明的更多内容。请点击- - - 传送门到这里,如果还是有很多小伙伴不是很相信一行代码就能解决这个功能,我们可以通过一下方式查看Kotlin的字节码。查看Kotlin对应字节码[外链图片转存失败,源站可能有防盗链机制,建议将图

2021-09-03 20:09:06 147

原创 Kotlin-性能优化利器-,字节跳动Android面试

本文将介绍 Kotlin 中 序列(Sequence)的概念及使用,并介绍该惰性集合操作对集合链式调用性能优化背后的原理。阅读本文大概需要 5 分钟,写作本文大概消耗 7 个小时目录序列(Sequence)概念在使用 Kotlin 集合操作符进行链式调用时,例如 map 和 filter 时,都会在函数内部创建中间集合,比如下面的例子,使用 map 和 filter 在 User 集合中筛选出性别为男的成员,返回结果是一个集合。users.map(User :: sex) .fi

2021-09-03 20:05:50 120

原创 Kotlin(4) java转kotlin潜规则,Android开发6年了

fun main(){Test001.sTest001.t1()}注:每一个kotlin类中,只能有一个共生体对象. 但是在java调用kt的"静态"成员方法时,必须带上共生体,但是,访问"静态"成员变量,则不能带:```Javapublic static void main(String[] args) { Test001.Companion.t1();//Java访问kt的t1()共生体方法,必须带上Companion String s2 = Test

2021-09-03 20:04:08 177

原创 Kotlin(2) 泛型与集合,事件分发流程图

}void set(Object t){ this.t = t;}}那么既然运行的时候,泛型限制全都没有了。那么怎么保证 泛型的作用呢?答案:编码的时候,编译器帮我们进行校验。```javastrList.add(123);//报错PECS 法则 和 上下边界的问题public class Panzi<T> { T mT; public Panzi(T t) { mT = t;} public T get() { return mT.

2021-09-03 20:02:27 86

原创 kotlin 实战之委托总结,学海无涯

Code: 0: aload_1 1: ldc #12 // String base 3: invokestatic #18 // Method kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull:(Ljava/lang/Object;Ljava/lang/String;)V 6: aload_0 7: invokespeci

2021-09-03 20:00:53 318

原创 ProGuard 在 Android 上的使用姿势,开发这么久这些问题都不会

ProGuard 是一个压缩、优化、混淆代码的工具。尽管有很多其他工具供开发者们使用,但是 ProGuard 作为 Android Gradle 构建过程的一部分,已经打包在 SDK 中。当我们构建应用时,使用 ProGuard 有很多好处。有的开发者更关心混淆这块功能,对我而言最大的用处是打包时移除 dex 中的无用代码。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8PSbPYKs-1630583794712)(https://user-gold-cdn.xitu.i

2021-09-02 19:56:46 390

原创 OpenGL 3D渲染技术:渲染glTF模型,Android面试题目

}, { "bufferView": 1, "byteOffset": 288, "componentType": 5126, "count": 24, "max": [ 0.5, 0.5, 0.5 ], "min": [ -0.5, -0.5, ...

2021-09-02 19:55:05 790

原创 OOM问题原理解析(二),透彻解析

安全点其实就是gc垃圾回收的入口点,也就是gc垃圾回收器是在什么时候进行垃圾回收的!在程序中,我们可以想到,无非就是一些:常见的异常(Exception)Object = null…等等一些操作的时候。比如一个用户线程进来之后,在jvm的堆内存空间中首先会分配内存,也就是在Edan区(下面会为大家介绍)内会为新生的对象开辟内存区域,此后用户要进行一些逻辑业务操作,但是当中有些操作的时候不小心发生了Exception的时候,jvm可以在此时的用户线程中标记一个安全点。当用户线程的在栈中最后的一个栈帧彻底执行完

2021-09-02 19:53:31 147

原创 OkHttp,还在等机会

在这里先来个重要的说明:网络权限一定要加,一定要加!!!其实关于OkHttp的使用只要记住一个顺序就可以创建OkHttpClient对象创建请求Request内容发送请求创建请求的回调基本上记住上面的步骤就可以实现简单的请求了!1.1 简单的GET请求既然上面都提到了相应的步骤,我们就按照上面的步骤写一下就可以了!!!1.1.1 创建OkHttpClient对象OkHttpClient httpClient = new OkHttpClient(); 创建一个对象而已,没

2021-09-02 19:51:53 78

原创 OkHttp踩坑记:为何 response,IBM大面积辞退40岁+的员工

});在 `onResponse()` 中,为便于调试,我打印了返回体,然后通过 `parseResponseStr()` 方法解析返回体(注意:这儿两次调用了 `response.body().string()`)。这段看起来没有任何问题的代码,实际运行后却出了问题:通过控制台看到成功打印了返回体数据(json),但紧接着抛出了异常:java.lang.IllegalStateException: closed2.解决问题------检查代码后,发现问题出在调用 `parseRes

2021-09-02 19:50:23 87

原创 OkHttp3源码详解之Okhttp任务队列工作原理(三),阿里架构师经验分享

executorService = , Integer.MAX_VALUE, , TimeUnit.SECONDS,new SynchronousQueue(), Util.threadFactory(“OkHttp Dispatcher”, false));}return executorService;}1.2 Call对象了解源码或使用过`okhttp`的都知道。 `okttp`的操作元是Call对象。异步的实现是`RealCall.AsyncCall`。而.

2021-09-02 19:48:36 166

原创 Activity-Hook填坑过程中温故而知新(2),看完这篇彻底明白了

这个系列的文章:1、用通俗易懂的讲解方式,讲解一门技术的实用价值2、详细书写源码的追踪,源码截图,绘制类的结构图,尽量详细地解释原理的探索过程3、提供Github 的 可运行的Demo工程,但是我所提供代码,更多是提供思路,抛砖引玉,请酌情cv4、集合整理原理探索过程中的一些坑,或者demo的运行过程中的注意事项5、用gif图,最直观地展示demo运行效果**如果觉得细节太细,直接跳过看结论即可。本人能力有限,如若发现描述不当之处,欢迎留言批评指正。学到老活到老,路漫漫其修远兮。与众君共

2021-09-01 11:33:06 64

原创 @所有程序员,阿里一线架构师技术图谱

那么这个任务就在你身上了,你要来说服对方以上三点。那我在面试同学过程中经常发现的问题是什么?1).不了解自己,说不出什么具体的事例来show给面试官看为什么自己具备某一项能力。很多同学的做法就是tell,也就是说当问到为什么要录取你的时候,回答的方式是,因为我具有很强的学习能力、沟通能力和领导力。再深挖让给具体例子,还是泛泛而谈,无法触及本质。所以你说了,面试官就信了?那这是不是来的太容易了。2).不清楚公司需求。每个公司关注的人的素质是不同的,对于四大来说,关注的人跟对于快消市场或者互联网运营是不

2021-09-01 11:31:40 95

空空如也

空空如也

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

TA关注的人

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