首页 | 归档 | 分类 | 标签 | 关于 |
|
工作和学习今年接触了原生鸿蒙开发,整个开发体系还是存在较大的提升空间。官方提供的AI助手跟Cursor比起来差距非常大。他这个盘子太大了,Flutter、Rea
flutter pub get实际上调用的是dart pub get,pub是Dart的包管理工具,用于管理Dart项目的依赖关系。pub get命令会根据项目
打包体积大如何配置优化包体积问题
不支持在运行时更改对象布局 对象字面量需要标志类型 不支持structural typing
https://gitee.com/openharmony-sig/ohos_react_native 如何适配鸿蒙? 在现行的 React Native 中,
Push Kit 使用流程1. 开通推送服务,开通推送服务2. 获取对应Profile,获取Push Token123const pushToken: stri
UIAbilityContext:UIAbility对应的context,继承自Context,提供UIAbility的相关方法 AbilityStageCon
线性容器 ArrayList:频繁读取集合中的元素时 List:单向链表,需要频繁的插入删除时 LinkedList:双向链表,需要频繁的插入删除时 Deque
以下是根据预期目的选择作用域函数的简短指南: 对一个非空(non-null)对象执行 lambda 表达式:let 将表达式作为变量引入为局部作用域中:let
https://developer.android.com/develop/ui/compose
协程Coroutine可以理解成轻量的线程,运行在线程中的非阻塞的Task;协程不会与特定的线程绑定,它可以在不同的线程之间灵活切换。 相关API: Corou
open关键字Kotlin 的类,默认是不允许继承的,除非这个类明确被 open 关键字修饰了。另外,对于被 open 修饰的普通类,它内部的方法和属性,默认也
Kotlin 常见的元注解有四个: @Target,这个注解是指定了被修饰的注解都可以用在什么地方,也就是目标; @Retention,这个注解是指定了被修饰的
项目结构介绍 AppScope:存放全局所需要的资源文件 resources: base: element:存放公共的字符串、布局文件等资源 media:多媒体
hvigorconfig.ts:根目录下存在一份,可用于hvigor生命周期刚开始时操作某些数据 hvigorfile.ts:每个node都有一份,构建的必须文
Android KTX 是包含在 Android Jetpack 及其他 Android 库中的一组 Kotlin 扩展程序。它依托 Kotlin 的扩展能力,
@ohos.app.ability.Ability (Ability基类) 生命周期https://developer.huawei.com/consumer/
Harmony Device Connector 1234567891011121314151617181920212223242526# 查看连接设备hdc
build-profile.json5文件分为工程级与模块级,其中buildOption在工程级文件和模块级文件均可配置,其中相同字段以模块级的字段为准,不同字
ohpm作为OpenHarmony三方库的包管理工具,支持OpenHarmony共享包的发布、安装和依赖管理。 oh-package.json512345678
hvigor-config.json5用于指定hvigor的版本、构建依赖以及构建行为的配置参数 https://developer.huawei.com/co
HarmonyOS第一课 开发者指南 ArkTS语言 应用框架 项目结构 build-profile.json5 oh-package.json5 DevEco
概念Widget是UI元素的配置数据,Element代表屏幕显示元素。主要作用: 维护这棵Element Tree,根据Widget Tree的变化来更新Ele
一些问题 路由存在的意义? 如果是你,会如何设计? dialog、bottomsheet、snackbar、dropmenubutton的底层实现是怎样的? p
Flutter的基本控件是如何绘制的?比如Text、Image、Button Flutter是如何实现弹窗的? Flutter是如何实现动画的? Flutter
https://flutter.cn/docs/development/ui/animations 动画的基本组成Animation作用:保存动画的差值和状态。
概述ContentProvider是一种数据共享型组件,可以在应用之间共享数据。所以与BroadcastReceiver一样,其可以脱离Activity实现。在
Activity转场动画ConstraintLayout动画插值动画Android动画之Interpolator(插值器) 参考 https://github.
需要的前置知识: Mixin用法 核心类和函数PlatformDispatcher平台事件转发器,单例对象。比如每一帧的渲染回调、系统语言切换等。 123456
概要Dalvik 是 Google 公司自己设计用于 Android 平台的虚拟机。它可以支持已转换为**.dex 格式**的 Java 应用程序的运行,.de
基本概念屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米 屏幕分辨率屏幕分辨率是指在横纵向上的像素点数,单位是px,1px&#x
Android项目架构发展史在说组件化之前,有必要讲讲Android项目的设计发展过程,也有必要讲讲在移动端兴起之前,其他语言是如何做项目架构设计的。 写代码最
参考 https://developer.android.com/develop/ui/views/notifications?hl=zh-cn
字节出品的开发调试工具,具备以下功能: 查看具体Widget的信息(WidgetInfo) 查看Widget树形结构,点击查询RenderObject树(Wid
Binder是一个工作在Linux层面的驱动,这一段驱动运行在内核态。Binder本身又是一种架构,这种架构提供了服务端、Binder驱动和客户端三个模块。 服
APK文件的结构 xxx.apk res:未编译的资源文件 anim color drawable layout menu lib assets META-IN
一个进程空间分为: 用户空间:数据不可共享,所以用户空间 = 不可共享空间 内核空间:数据可共享,所以内核空间 = 可共享空间 Binder
为什么要做测试?很多公司为了节省成本,基本上是不会要求开发写单元测试的。自己做完的功能,动手点点看看基本流程是否通畅就丢给测试了。项目小的时候这样也不会有啥问题
获取错误报告 通过开启开发者选项,生成错误报告 通过adb命令获取:adb bugreport D:\Reports 分析错误报告默认情况下,错误报告是 ZIP
我们在电脑上看到的 png 格式或者 jpg 格式的图片,png(jpg) 只是这张图片的容器,它们是经过相对应的压缩算法将原图每个像素点信息转换用另一种数据格
概述有时候,线上会出现一些”莫名其妙”的bug,比如用户用的好好的,突然就爆出一个空指针异常,这个异常的提示信息如下: 12java.lang.RuntimeE
分发过程事件分发过程由三个方法共同完成: dispatchTouchEvent方法返回值为true表示事件被当前视图消费掉;返回为super.dispatchT
概述Window是一个抽象的概念,每一个Window都对应着一个View和一个ViewRootImpl,Window和View通过ViewRootImpl来建立
DecorView是视图的顶级View,我们添加的布局文件是它的一个子布局,而ViewRootImpl则负责渲染视图,它调用了一个performTraveals
此篇文章只是用于记录使用Glide时要注意的点和一些使用技巧,如需查看基本使用,请查阅官方文档。也可以看看Glide原理分析。 注意点占位符1234567Gli
广播接收器可以接收系统级的通知。比如监听闹钟
参考 https://developer.android.com/training/dependency-injection?hl=zh-cn
参考 由浅入深,详解 Lifecycle 生命周期组件的那些事 https://developer.android.com/reference/androidx
参考 https://developer.android.com/topic/libraries/architecture/livedata?hl=zh-cn
参考 https://developer.android.com/topic/libraries/architecture/viewmodel?hl=zh-cn
参考 https://github.com/android/databinding-samples https://developer.android.com/
Android的应用资源存放在res目录 animator:定义属性动画的xml文件 anim:补间动画的xml文件 color:颜色定义的xml文件 draw
sdk add-ons:第三方公司为Android平台开发的附加功能系统 build-tools:构建工具 28.0.3: aapt.exe:打包res资源文件
12345678910111213141516171819202122232425262728293031323334353637383940414243444
介绍Intent是一个消息传递对象,他的作用: 启动Activity。不同的业务场景启动Activity又分为显示调用和隐式调用。 启动Service 传递广播
目录 RecyclerView之概述 RecyclerView之绘制流程 RecyclerView之Adapter RecyclerView之ItemDecor
目录自定义View自定义View之Canvas自定义View之Paint 概述自定义属性声明属性使用declare-styleable声明属性 12345678
目录自定义View自定义View之Canvas自定义View之Paint API颜色设置123456789101112setColor(int color)pa
由来我们在做带UI的软件时,一般的做法是先创建一个窗口,然后在窗口上添加各种Button、Text、List等其他UI控件。Android、iOS也是类似,但代
概述Activity是一种展示型组件,具有两种启动方式,一种是显示的,通过intent实现;另一种是隐式的,也需要intent,但还需要在AndroidMani
系统架构Linux内核层Linux Kernel:Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性
概述约束布局,可以降低布局的层次,对性能提升有帮助。 可以把约束理解成一根绳子,比如,如果设置了左侧与父级依赖,则相当于左边有一根绳子拉着自己,就会贴着左边。当
content provider管理一组共享的数据,比如通讯录,其他App都可以按照某种方式获取其内容
服务是一种通用的入口点,服务不提供界面,是在后台运行的组件。比如播放音乐 参考 https://developer.android.com/develop/ba
参考 https://developer.android.com/develop/ui/compose/documentation?hl=zh-cn
activity是用户交互的入口点。它表示具有界面的单个屏幕。
相关类 Canvas:封装了Flutter Skia各种绘制指令,比如画线、画圆、画矩形等指令。 Layer:分为容器类和绘制类两种;暂时可以理解为是绘制产物的
在Flutter中,列表的每个Item被称为Sliver。 Flutter常见的列表类最终都有Scrollable类实现,而该类内部包含RawGestureDe
Widget1234567891011121314151617181920212223242526272829303132333435363738394041@
概念RenderObject表示渲染树的一个对象,其职责包括:Layout、Paint、Hit Testing。 作用: 布局,从RenderBox开始,对Re
UI系统会进行界面的图层划分,可以进行图层复用,减少绘制量,提升绘制性能。而RepaintBoundary是开放给开发者使用的独立图层。 RenderObjec
经过Build流程,Render Tree中绘制相关的基础信息已经完成更新;经过Layout流程,Render Tree中每个节点的大小和位置完成计算与存储,接
12345678910111213class RenderBinding { void drawFrame() { pipelineOwne
概括 runApp,初始化构建Widget树,Widget通过createElement创建对应Element树,Element通过createRenderOb
官方出品路由管理库go_router 路由管理需要的基本功能: 命名路由,方便通过系统消息栏等地方打开具体的路由页面,且能带上参数 路由嵌套,一个路由页面嵌套多
_ImageState是Image所对应的State,也是图片加载的驱动者,它将通过ImageProvider的resolve方法获取一个ImageStream
Layer是Flutter中针对SceneBuilder的一些方法做的一个封装,每种Layer都对应了一个或多个SceneBuilder的方法。 Layer分类
TextPainter12345678910111213141516171819class MyPainter extends CustomPainter &#
MediaQueryMediaQuery 用于查询解析给定数据的媒体信息(例如,window宽高/横竖屏/像素密度比等信息)官方提供这个组件
相关类 ClipOval ClipRRect ClipRect ClipPath
CustomSingleChildLayout解决以下几个问题: 设置child的大小 设置child的位置 1234567891011121314151617
用于光标管理 相关类FocusNode用于Widget获取键盘焦点和处理键盘事件的对象 12345678910class FucusNode { //
WidgetFlutter中的一切都是Widget。关于Flutter的UI绘制原理可以参考纷争再起:Flutter-UI绘制解析。 简要概括就是,我们写各种w
基本概念我们的手机屏幕可以当成一块画板(Canvas),使用我们自定义的Painter,就能绘制出各种图形。而Flutter中提供了CustomPaint组件来
开发者工具介绍 Flutter Inspector:检查 Flutter 应用程序的 UI 组件布局和状态 Performance View:在 Flutter
AndroidView、PlatformViewLink、UiKitView是表示Platform View的Widget接口,它们底层分别对应的RenderO
[基本使用] [源码分析] Widget Element RenderObject BuildOwner PipelineOwner RepaintBounda
Lyaout的本质是父节点向子节点传递自己的布局约束Constraints,子节点计算自身的大小(Size),父节点再根据大小信息计算偏移(Offset)。在二
经过Build、Layout、Paint后,Render Tree变成Layer Tree,那么Layer Tree是如何合成,以变成最终的渲染数据呢?这就是C
时间过的真快啊,一年又要过完了。还是要记录一下这一年的成长和收获,以及对未来的展望。 今年的行情很不好,不管是就业还是A股市场。虽说疫情已经放开管控,可不见经济
关键类Widget关键类 Widget是对Element的配置或描述。Widget的子类主要有3类: RenderObjectWidget的子类,可以进行Lay
Embedder启动流程 FlutterEngine初始化 FlutterView初始化 Framework启动 Engine入口 Engine启动流程 Eng
在runApp时,RenderBinding创建PipelineOwner。PipelineOwner的作用: 不断收集Dirty Render Objects
相关API InheritedWidget ProxyWidget InheritedElement 基本用法提供一种在widget树中从上到下共享数据的方式。
概要 继承自ClipContext,提供裁剪相关辅助方法 PictureLayer _currentLayer、_recorder、_canvas用于具体的绘制
概述Key的分类 ValueKey:以一个值为key。 ObjectKey:以一个对象为key。 UniqueKey:生成唯一的随机数作为key。 PageSt
setState流程 标脏,将对应element添加到dirtyElement队列中 触发vsync 下一帧drawFrame 1234567891011121
在JavaScript的基础上添加了类型系统,可以在编译时检查类型,提高代码的可读性和可维护性。 约定使用 TypeScript 编写的文件以 .ts 为后缀,
不同版本的RN可能配置不一样,这里使用0.62版本 1. 创建一个空目录用于存放React Native项目,然后在其中创建一个/android子目录
SSL握手过程客户端发出加密通信请求提供: 协议版本(如 TSL1.0) 随机数 1(用于生成对话密钥) 支持的加密方法(如 RSA 公钥加密) 支持的压缩方法
如果一个目录下存在 tsconfig.json 文件,那么它意味着这个目录是 TypeScript 项目的根目录。 1234567891011121314151
https://reactnativeelements.com/docs是一套UI组件库 Icon基本用法12345678<Icon type="
antd-mobile-rn https://rn.mobile.ant.design/ antd-mobile-rn是一个基于React Native的UI组
本地项目依赖是一个很常见的功能,在开发过程中,本地主项目依赖本地的其他文件夹的子模块,方便调试,开发完后再发布到仓库。而在React Native中却不支持np
Touchable 系列组件PanResponderhttps://reactnative.cn/docs/handling-touches
useFormuseControlleruseFormContextuseWatchuseFormStateuseFieldArray参考 https://ww
https://reactnavigation.org/docs/ @react-navigation/native、@react-navigatio
Facebook 提供的 react-redux 这样一个工具库,工具库的作用就是建立一个桥梁,让 React 和 Redux 实现互通。 https://cn
RN中可以直接使用原生自定义UI组件 ,提供原生视图的流程: 创建一个ViewManager子类 实现createViewInstance 导出视图的属性设置器
模块的定义要实现通信,需要先定义ReactContexBaseJavaModule,并将ReactPackage注册到ReactInstanceManager中
facebook先开源了React,然后基于React,开源了可以在App上用的React Native。先了解一下ReactReact 入门实例教程 Reac
react-devtools 独立的开发者工具,可以查看UI的层次结构。
先了解一下JS的历史:Javascript诞生记。基本的语法,从官方文档开始:https://developer.mozilla.org/zh-CN/docs/
React Hooks产生的原因由于类组件存在一些缺点: 大型组件很难拆分和重构,也很难测试。 业务逻辑分散在组件的各个方法之中,导致重复逻辑或关联逻辑。 组件
了解历史 Flux:https://www.ruanyifeng.com/blog/2016/01/flux.html 基本概念和APIRedux 引入的概念其
基本的声明声明文件12345678910111213141516171819202122232425262728var x = 1;module.exports
配置package.json发布到Nexus将npm本地包上传到nexus私服的实践 发布Nexus服务器,需要注意不同仓库地址的使用 123456789# 添
下载证书,本地安装到钥匙链中 配置Xcode 打包命令修改项目的版本号和构建次数若要使pubspec.yaml文件中的version生效,需要修改Android
分类 CustomScrollView DraggableScrollableSheet GridView ListView NestedScrollView
基本概念Widget的大小通过constraints来约束,它有minWidth、maxWidth、minHeight、maxHeight几个属性。 Tight
Flutter默认提供了许多的Lint规则,但有时候我们可能有特殊的需求。如果按照官方的方式,你需要了解: Introduction:https://githu
代码检测是规范写法,提高质量的一种重要方案,几乎所有的主流语言都有相关方案。在Flutter开发过程中,我们可以使用IDE自带的Inspect Code功能,也
create在指定的目录中,创建新的flutter项目,如果没有指定目录,则在当前目录下创建项目 12345flutter create ~/flutter #
使用Text的注意事项如果字符串中有特殊字符,在有多行的情况下,可能会出现异常截断的情况,建议封装一个扩展函数处理这种情况123456import '
Flutter的刷新组件以前比较流行的是pull_to_refresh,现在已经不再维护了,新的刷新组件是easy_refresh,支持Flutter SDK
syncfusion公司提供了一整套强大的图表UI库,其中图表、日历、PDF等功能非常强大。 图表库图表的分类和名词解释: 数据可视化 - 图表 对于产品如何选
参考
Hanlder系列目录: Handler基本用法 Handler原理 概要Handler是Android子线程和主线程之间通信的一种机制。像Qt等技术使用的也是
状态栏(Status Bar):显示系统icon、时间、电量等信息 标题栏(ActionBar):显示应用页面标题、返回键、菜单等信息 导航栏(Navigati
android:#Android 项目 ios: node_modules: 项目依赖 app.json: 描述app信息 index.js: 入口文件 pac
基本概念 Working Space/Working Directory:工作区/工作目录,平时存放项目代码的地方 Index/S
12345678910111213141516171819202122232425262728293031323334353637383940{ &q
Mac 环境搭建12345678910111213141516171819# 安装nodebrew install node# 安装文件监控,方便开发brew
Android编译源码流程 settings.gradle配置 123456789101112131415161718// 当前 app moduleinclu
Sentry是一款多平台支持的异常信息收集解决方案。sentry_flutter可以在Flutter项目中收集异常信息。 https://docs.sentry
单元测试的作用? 保证代码质量,当一个方法在某个版本进行了调整,如果对应的单元测试无法通过,说明这个方法的改动有问题。单元测试中也能包含很多边界条件,甚至可以把
Flutter项目结构 代码规范 良好的编码tips 首先,代码编写需要满足一定的规范,统一团队内的代码风格。参考Flutter代码规范。除此之外,为了提升质量
form_bloc是结合bloc的表单库,运用bloc的特性实现UI和逻辑的分离,使得表单的逻辑更加清晰,代码更加简洁。 基本用法123456789101112
Observables概述ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik M
基本用法核心概念:将UI和数据分离,数据使用Event、Bloc(Cubit)、State来进行单项流转。 通过BlocProvider提供Bloc供不同地方使
https://github.com/openkraken/kraken:阿里出品,已经不维护 https://github.com/ymm-tech/thre
Flutter中,Android设备上的事件分发流程: Android的事件响应,通过Engine发送到framework层,Flutter侧的GestureB
好的代码有一个非常重要的特点就是拥有好的风格。一致的命名、一致的顺序、以及一致的格式让代码看起来是一样的。 Dart代码规范标识符在 Dart 中标识符有三种类
PlatformChannelFlutter可以通过PlatformChannel与原生侧互发消息,有三种类型: MethodChannel:用于传递方法调用
Runtime System Object Model Garbage Collection Snapshots Core libraries native m
Crash类型: Framework/App Crash:Java层崩溃 Native Crash:C/C++层崩溃 Kernel Cras
ReactX的dart实现,React X的原理可参考 Stream相关APICombineLatestStream(combine2,combine3…com
原生侧有许多库可以实现与JS直接通讯,而不需要使用webview容器。 V8、JSCore、Hermes、QuickJS,hybrid开发JS引擎怎么选
https://github.com/bladeofgod/memory_detector_of_kit https://github.com/dart-lan
使用 Redux 的好处是: 共享状态 单一数据 Redux 主要由三个部分组成: Action 用于定义数据变化的行为 Reducer 用于根据Action来
阿里出品 使用前端技术开发,Flutter渲染。 因为种种原因,Kraken不在维护,openwebf是其继任者。如何看待阿里北海Kraken项目即将弃坑? 深
dart_eval 是一种基于 Dart AOT 动态执行 Dart 代码的技术,能够实现动态化(CodePush),支持 Flutter。它包含编译器和解释器
Kraken的替代品 Web端开发指导开发流程 使用Vue、React等进行开发 安装openwebf cli,https://github.com/openw
58同城的开源动态化方案,目前市面上比较完善的开源方案。 将build方法内的代码使用dart2dsl转化成json,将非build方法里的代码使用dart2j
包的构成 主要组成部分: so库,包含第三方依赖,flutter打包后的libapp.so等 assets文件夹中的资源文件 dex文件 字体文件 resour
https://github.com/shorebirdtech/shorebird Flutter创始人之一打造,只支持Flutter侧的热更,patch包存
什么是Hook?Hooks 是来自 React 的一个概念,flutter_hooks 只是 React 实现到 Flutter 的一个端口。 https://
Dart运行环境(VM)和Android Art一样,Flutter也对Dart源码做了AOT编译,直接将Dart源码编译成了本地字节码,没有了解释执行的过程,
Dart Programming Language Specification 5th edition draftdart pragma注解 vm:entry-
很小的时候就希望能去北京看看,看看古时候皇帝生活的地方,看看为了抵御外敌而修建的万里长城,看看皇帝的陵墓。那就做一份北京游玩攻略吧。以下从游住吃三个方面来介绍。
Flutter中音频的处理库,可以用来播放、录制。播放支持主流的格式,支持网络地址。 播放音频123456789101112131415161718192021
使用in_app_purchase这个库 流程1. 修改XCode配置文件,支持内购 2. 项目中添加in_app_purchase配置1234567depen
概述为什么需要空安全? 当你选择使用空安全时,代码中的类型将默认是非空的,意味着除非你声明它们可空,它们的值都不能为空。有了空安全,原本处于你的 运行时 的空值
定义isolate是Dart对actor并发模式的实现。运行中的Dart程序由一个或多个actor组成,这些actor也就是Dart概念里面的isolate。i
dart analyze 命令代码分析工具 1234567# 设置分析等级 --no-fatal-warningsdart analyze --fatal-in
历史背景路线 西郊宾馆坐地铁到北宫门站 北宫门走几百米到北如意门 宿云檐城关 石舫、清晏舫画中游长廊排云门乘船去南湖岛十七孔桥八方亭铜牛文昌阁玉澜堂乐寿堂仁寿殿
历史背景景点介绍博雅塔未名湖图书馆路线游客只能从东侧门进入(地铁站北京大学A口向北),要求19:00前由东侧门离开。 就餐家园四层、农园三层、艺园二层、勺园西餐
景点介绍八达岭长城 介绍:是明長城的一個隘口,岔道城、古炮、关城、敌楼、烽火台、战台 營業時間: 07:30-16:00營業 地址:北京市延慶區G6京藏高速58
历史背景故宫是中国明清两朝二十四位皇帝的皇宫。故宫始建于明成祖永乐四年(1406年),永乐十八年(1420年)落成。 故宫南北长961米,东西宽753米,四面围
恭王府 介绍:和珅住处,恭亲王住处,银安殿、嘉乐堂、锡晋斋、王府花园。戏楼内可欣赏北京传统节目演出、喝茶、品小吃 地址:北京市西城區前海西街17號 路线: ti
历史背景 介绍:明、清兩朝皇帝祭天、求雨和祈禱豐收的專用祭壇,整個天壇分為內壇、外壇兩部分,祈年殿、回音壁等知名的建築都位於內壇。遊玩天壇,除了觀感受古代帝王祭
历史背景十三陵是明朝皇帝的墓葬建筑群。自永乐七年五月(1409年)起用,直到安葬崇祯帝后结束,历时230多年,共葬有13位皇帝,23位皇后、2位太子、30余名妃
Nexus作为私有仓库,可以用来存储jar、aar、js库,一般公司内可以搭建一个用来存储共用的库,一来可以提升同步时间,一来统一管理基础库,提升开发效率。 搭
BuildContextBuildContext就是Widget对应的Element。 WidgetsFlutterBinding,其在创建的时候绑定了 如果W
在NodeJS之前,由于没有过于复杂的开发场景,前端是不存在模块化的,后端才有模块化。NodeJS诞生之后,它使用CommonJS的模块化规范。从此,js模块化
先看Flex 布局教程:语法篇,了解Flex布局的历史和基本概念。 Flexbox布局 flex flexDirection justifyContent al
动画组件 Animated.View 12345Animated.timing(this.state.xPosition, { toValue: 10
UI = Component(props, state) React 的核心思想是组件化的思想,所有的页面会被切分成一些独立的、可复用的组件。那么数据
dart的build系统 build_config: build_modules: build_resolvers: build_runner: build_t
12345678910111213141516171819202122232425262728293031323334353637383940414243444
Babel 转码器Babel 是一个广泛使用的 ES6 转码器,可以将 ES6 代码转为 ES5 代码,从而在老版本的浏览器执行。这意味着,你可以用 ES6 的
12345678910111213141516171819202122232425262728293031323334353637383940414243444
创建Mock1234import 'package:bloc_test/bloc_test.dart';class MockCounterB
integration_test集成测试框架,可分析测试用例的性能指标 官方文档:https://flutter.cn/docs/cookbook/testin
描述基于dart的test库,用于Flutter项目的测试库。 可用于测试: 方法、函数 UI 基本用法1. 添加配置123dev_dependencies:
描述用于模拟数据的Flutter测试库。为了使用模拟类,需要在pubspec.yaml中添加build_runner依赖。 基本用法1. pubspec.yam
数据埋点是一种数据采集方法,主要用于收集用户在使用产品或服务过程中的行为、操作、事件等数据。这些数据可以帮助分析用户行为、优化产品设计、提升用户体验等方面。 数
AdGuard去广告神器 https://github.com/AdGuardTeam/AdGuardBrowserExtension In My Pocket
使用流程 启动Metro服务 npm start,可以设置不同端口号npm run start –verbose – –port 8082 启动项目npm ru
npmnpm配置文件为$Home/.npmrc 123456789101112131415161718192021222324252627282930
React时一个用于构建用户界面的库,使用JSX(JavaScript和XML)的HTML-in-JavaScript语法。该语法能提升编码效率,浏览器是无法直
Crash文件 符号化iOS crashsdk文档是什么意思 转载Symbolicating stack traces for engine crashesFl
https://pub.dev/packages/rfw rfw(Remote Flutter Widgets)库是一个用于在 Flutter 应用程序中渲染远
当执行rebase操作时,git会从两个分支的共同祖先开始提取待变基分支上的修改,然后将待变基分支指向基分支的最新提交,最后将刚才提取的修改应用到基分支的最新提
amend将本地提交和最后一次提交合并成一个新的提交 1git commit --amend rebase 交互式变基9使用场景 调整提交记录的顺序(通过鼠标拖
cherry-pick像摘桃子一样,可以选择具体某个commit记录到当前分支 12# 选择两个提交记录到本分支git cherry-pick commit_1
merge用于分支的合并 123git merge branch_name 参数-ff:快速合并 –ff-only:只有能快速合并的时候才合并–no-ff:不使
安装必备软件安装Alfred基本配置 配置常用文本 安装Sublime Text安装安装必备workflow安装TinyCal安装Commander One安装
用到的API Viewport:视窗,滑动可以看见的区域 Scrollable:对手势的处理,实现滑动效果 Sliver:用于在Viewport里面布局和渲染内
在开发项目中,我们直接点击Hot Reload或Hot Restart按钮可以方便的进行更新,那Flutter是如何实现的呢? 首次编译:第一次启动会生成全量a
Mac下编译EngineEngine实现了Flutter的核心库,包括动画、图形、文件、网络、访问支持、插件架构、Dart的运行时、编译工具链等 准备工作123
AOP的作用 减少代码入侵的埋点 性能监控 参考 咸鱼aspectd 贝壳Beike_AspectD Flutter aspectd (二)源码解析
https://github.com/LianjiaTech/keframe https://github.com/fzyzcjy/flutter_smooth
https://pub.dev/packages/extended_image https://github.com/fluttercandies/extend
图片也是一种二进制文件,图片的原始数据中每个像素在内存中一般占用2-4个字节 type bits memory ARGB_8888 32 4wh ARBG_44
https://github.com/Moosphan/Android-Daily-Interview https://github.com/lizhangqu
问题重现编写以下代码 123456789101112131415161718public class OOMHandlerActivity extends Ac
HTTP 协议的请求报文和响应报文的结构基本相同,主要由三大部分组成: 状态行(status line):描述响应的基本信息,也就是服务器响应的状态; 头部字段
计算机网络的带宽网络可通用的最高数据率,即每秒多少比特bit。 计算机网络性能指标 速率 带宽 吞吐量 时延(delay或latency): 传输时延:从发送数
工作流程 Client发起一个HTTPS(比如 https://juejin.im/user )的请求,根据RFC2818的规定,Client知道需要连接Ser
时间复杂度一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),进而分析f(n)随n的变 化情况并确定T(n)的数量级。这里用”O”来表示数量
顺序查找顺序查找(Sequential Search)又称线性查找。从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给
插入排序直接插入排序具体算法: 从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素序列中从后向前扫描; 如果该元素(已排序)大于新元
定义线性表(Linear List)是具有相同特性的数据元素的一个有限序列。该序列中所含元素的个数叫做线性表的长度,用n表示,n>=0。当n&#
回溯法(Back Tracking Method)(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选
定义红黑树是一种自平衡二叉查找树,它可以在 O(log(n) ) 时间内完成查找、插入和删除,这里的n是树中元素的数目。 红黑树是每个节点都带有颜色属性的
定义矩阵矩阵是一个具有m行 x n列的数表,共包含m x n个数(元素),每个元素处在确定行和列的交点位置上,都与一对行号和列号唯一对应。当一个矩阵中的行数和列
定义平衡二叉树也叫自平衡二叉搜索树(Self-Balancing Binary Search Tree),所以其本质也是一颗二叉搜索树。在AVL树中,任一节点对
栈栈(Stack),也叫后进先出表(Last In First Out),是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。这一端称为栈顶,栈
定义 树是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具
B树B树也称B-树,它是一颗多路平衡查找树。描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常
定义图(Graph)是图形结构的简称。 G = (V, E) V称为顶点集(Vertices set),E称为边集(Edges set)。E的元素是一
目前大多数互联网公司的开发流程如下图: 需求收集一个新功能的出现,可能来自多个地方。运营觉得有了XX功能,用户量就能增加XX倍;产品觉得XX竟品做了XX功能,我
brew命令1234567brew services list 查看服务状态brew services run mysql # 启动mysql 服务brew s
基本使用 安装CodePush CLI 注册账号 注册App 原生端配置 RN代码集成 发布 123456789101112131415161718192021
参考 reactjs源码分析-下篇(更新机制实现原理)
Flutter中图片内存优化策略: 使用ResizeImage 使用cacheWidth、cacheHeight Android中图片占用内存计算方法 Flut
https://pub.dev/packages/flutter_image_compress https://github.com/fluttercandie
https://pub.dev/packages/image_cropper https://github.com/hnvn/flutter_image_cro
代理神器Shadowsocks安装 wget --no-check-certificate -O shadowsocks.sh https://raw.gith
类似Java、Python、Flutter,Ruby也进行版本管理,主流有rvm、rbenv两种方案,这里因为Java选择jenv,看名字选的rbenv。其实大
12345678# 查看端口使用sudo lsof -i :8088# 杀掉进程kill -9 pid
Effective use of XXX系列 Effective use of Mac Effective use of iPhone Effective us
Python命令使用不同CPU架构 mach-o file, but is an incompatible architecture (have ‘x86_64
一些技巧让QListWidget的高度跟着内容的高度变化12345678910111213141516from PySide import QtGui, QtC
在QLabel上显示emoji表情,win10和win7显示的效果不一样,win10能显示出彩色的,但win7只能显示黑白色,且有些表情甚至不能显示。 不同系统
业务需求中经常需要头像是圆形的,一些数字底部有圆形背景,于是将其整理出来,以便以后方便的使用。 12345678910111213141516171819202
屏蔽alt+F4等快捷键12345678910111213141516171819202122232425262728class GlobalEventFilt
目录: 官方文档翻译 编译MinGW版本 编译VS版本 下载SIPSIP必现在编译和使用PyQt5之前安装。你可以从https://www.riverbankc
由于QtWebEngine本身并不支持H.264编码的音视频,现自行编译,整个过程如下: 依赖准备VS2015 Update3 下载地址 安装Qt 5.10.1
数据(Data):是实际的数据,如数据库的一个数据表或SQL查询结果,内存中的一个 StringList,或磁盘文件结构等。 视图或视图组件(View):是屏幕
其实大部分的客户端开发都有共通性。一套GUI API,Button、Text、Dialog等等,绘制机制,事件传递机制,都是根据不同平台的特性做了封装。但开发的
isolate机制Dart是单线程模型,它的并发机制叫isolate。APP的启动入口main函数就是一个类似Android主线程的一个主isolate。和Ja
概述Dart在执行完main函数后,就会由Loop开始执行两个任务队列中的Event。首先Loop检查微服务队列,依次执行Event,当微服务队列执行完后,就检
async用于声明方法是异步的 await用于调用异步方法使用,表示等待异步方法执行完成后再执行后续的代码 async 和 await 关键字用于实现异步编程,
描述 运算符 一元后缀 表达式++ 表达式– () [] . ?. 一元前缀 -表达式 !表达式 ~表达式 ++表达式 –表达式 乘除法 * / %
Future 是在未来某个时间获得想要对象的一种手段。Future 表示一个不会立即完成的计算过程。与普通函数直接返回结果不同的是异步函数返回一个将会包含结果的
Stream 是一系列异步事件的序列。其类似于一个异步的 Iterable,不同的是当你向 Iterable 获取下一个事件时它会立即给你,但是 Stream
泛型的好处 适当地指定泛型可以更好地帮助代码生成。 使用泛型可以减少代码重复。 使用集合字面量List、Set 以及 Map 字面量也可以是参数化的。定义参数化
隐式接口每一个类都隐式地定义了一个接口并实现了该接口,这个接口包含所有这个类的实例成员以及这个类所实现的其它接口。如果想要创建一个 A 类支持调用 B 类的 A
内置类型: 数据类型:num 字符串类型:String 布尔类型:bool 列表类型:list 集合类型:Set 映射类型:Map Unicode:Runes
Dart 是一种真正面向对象的语言,所以即便函数也是对象并且类型为 Function,这意味着函数可以被赋值给变量或者作为其它函数的参数。你也可以像调用函数一样
语言特性 一切皆对象。 Dart没有 public、protected、private 等关键字,如果一个标识符以 _开头则表示私有。 标识符以小写字母或下划线
定义使用implements关键字来使用接口,实现类必须实现接口中所有的方法。Dart中没有interface关键字,implements后可以接任意类。imp
定义字面意思理解成混合,它可以混合多个类,达到多继承的效果。 当继承多个mixin,mixin内重写覆盖了同一个方法,则调用方法时会命中最后with的mixin
遍历1234567891011121314151617181920212223242526// 使用 forEach 进行遍历president.forEach
CustomMultiChildLayout从字面意思就说的很清楚了,自定义多个孩子的布局控件 基本用法1234567891011121314151617181
基本使用(全局生效)Flutter侧设置123456789101112131415// 黑色沉浸式状态栏颜色 黑色文字SystemUiOverlayStyle
Flutter 应用程序包含代码和 assets(也为资源)。资源是被打包到应用程序安装包中,可以在运行时访问的一种文件。常见的资源类型包括静态数据(例如 JS
client对相关数据进行上报,服务端对数据进行处理,后台提供一个网站进行数据展示,展示可以使用各种图表。Grafana就提供了如此一套开源解决方案。 Graf
最近读了《权力结构、政治激励和经济增大》这本书。书中通过分析开国到至今浙江地区的经济发展与政治的联系,很受启发。 政治人物的首要目的在于确保其政治生存 地方政治
摘要共产主义革命没有在大多数社会取得成功?一种解释是,革命的威胁推动工业化国家采纳相应政策,缓和了阶级矛盾与不平等,主要是投票权的普及、财富再分配权力的扩大以及
Flutter定义了三种不同类型的Channel: BasicMessageChannel:用于传递字符串和半结构化的信息 MethodChannel:用于传递
basename example.tar.a.b.c.gz .c.gz => example.tar.a.bFILE=”example
Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的和服务器端的。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如
汽车的组成动力传动 发动机中有气缸和活塞,汽油在气缸中的燃烧室内进行然后,发热后膨胀,膨胀下压活塞,从而带动活塞下的轴转动,从而使轮胎转动。 转向系统 制动系统
Gitlab、Github的Pull Request功能可以进行Code Review,但Gerrit更强大,可以搭配Jenkins、LDAP等在企业内部搭建完
概念RenderObject有一个parentData插槽(slot)用于存储父节点的一些信息,这个插槽,就是预留一个接口或位置,由其他对象来接入或占据。 Bo
参考 说说Flutter中的RepaintBoundary
计算机三个根本性基础: 计算机是执行输入、运算、输出的机器; 程序是指令和数据的集合; 计算机的处理方式有时与人们的思维习惯不同。 计算机的硬件由大量集成电路组
朝野都知道,我是严阁老提携的人。千秋万代以后,史书上我胡宗宪还会是严阁老的人。可你谭纶,还有朝里那些清流为什么还会看重我?就是我胡某在大事上从来上不误国,下不误
原文地址:https://limboy.me/2021/06/29/eng-growth/ 这是libboy博客上的一篇文章,看了之后深有同感。也会反思自己在平
今天“长见识”了。 开始以为回广州的高铁票应该很容易买到,所以,并没有提前买票。然而,在家用某行火车票刷票到7点也没买到票。明天可还要上班呢。想着要不去人工售票
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
目录 计算机系统漫游 信息的表示和处理 程序的机器级表示 处理器体系结构 优化程序性能 存储器层次结构 链接 异常流控制 虚拟内存 系统级I/O 网络
如何阅读一本书 ActionScript、Flex Actionscript 3 image effects ActionScript 3 ActionScri
概要《深入理解Android卷1》这本书在刚出来的时候就已经买了,当时应该也是看过的,但忘得很快,里面很多的源码分析,且多数是native层的,虽然作者也会在分
OSI参考模型 名字 描述 网卡 使计算机联网的设备 中继器(Repeater) 从物理层上延长网络的设备 2 网桥(Bridge) 从数据链路层上延长网络的设
基本规则 不需要分号 函数 fun声明函数 函数可以定义在文件的最外层 123fun max(a: Int, b: Int): Int { retur
单一职责原则【SINGLE RESPONSIBILITY PRINCIPLE】: 一个类负责一项职责。 里氏替换原则【LISKOV SUBSTITUTION P
final finally finalize finalize()主要是给其他调用而创建的空间在对象回 收时页同步回收而设置的。 比如,你调用了C语言,使用了m
一般的类和方法,只能使用具体的类型,要么是基本类型,要么是自定义的类,如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。 泛型实现了参数化
参考
定义Iterator Pattern:提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。 类图 角色 Iterator(抽象迭代器):接口声明
定义封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 类图 角色 Visitor:接口或者抽象类,定义了对
定义免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 类图 角色 抽象处理者(
定义State Pattern:允许一个对象在其内部状态改变的时候改变其行为。 状态模式的状态是不可替换的而且是兄弟关系,但是策略模式是可以替换的彼此独立的。他
定义Strategy Pattern:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Po
定义Observer Pattern:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,
定义Interpreter Patttern:给定一个语言,定义它的文法的一种表示,并定义一个解释器。 类图 角色 AbstractExpression(抽象表
定义Memento Pattern:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 类图
定义Template Method Pattern:定义一个操作中算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定
定义Command Pattern:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式
定义用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。 类图 角色 抽象中介者(Med
单例模式应该是最常见的设计模式了 定义定义:单例对象的类必须保证只有一个实例存在。 为了实现一个健壮的单例,我们应该思考需要做哪些事情? 不能随意的让用户new
继承关系使用带空心箭头带实线 实现关系使用带空心箭头带虚线 聚合关系使用带空心菱形箭头的直线 聚合关系表示实体对象之间的关系,表示整体有部分构成。与组合关系有所
由于种种原因,有机会全面接触iOS、Mac、OS X了。这里记录下自己的学习过程。 首先是了解下苹果操作系统的历史,推荐看深入解析Mac OS X &
Symfony中请求的流程如何在新接口部署的时候平稳的切换缓存使用php console cache:warmup命令,进行缓存预热,当缓存文件全部生成好后,即
首先理解一下基本的概念 https://help.apple.com/developer-account 一些常用的名词App ID:Product ID,用于
参考 推荐使用 Kotlin 关键字 Reified
PHP代码的生命周期不启用OPcache的流程 启用OPcache的流程 Scanning:将PHP代码转换为语言片段(Tokens) Parsingg:将To
函数重载(Function Overloading)定义:函数名相同,函数的参数列表包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。
Hello World1234567891011121314//文件名hello.c//预处理指令#include <stdio.h>//入口函数i
官网:https://github.com/chromiumembedded/cef下载地址:http://opensource.spotify.com/cef
API介绍123456789101112131415161718192021222324252627282930313233343536373839404142
线程的概念引入进程的目的,是为了使多道程序并发执行,以提高资源利用率和系统吞吐量;而引入线程,则是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性
协程:是一种比线程更加轻量级的存在,协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态执行)。这样带来的好处就是性能得到了很大的提升,不会像线程
ASCII 码计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有 0 和 1 两种 状态,因此八个二进制位就可以组合出256种状态,这被称为一
最近因为工作需要,研究了下按键精灵和相关生态。按键精灵的主要功能是模拟用户行为,可以导出Android、iOS的包。直接在手机上运行。大致猜测下实现原理: 电脑
12345678910111213141516171819202122232425262728293031323334353637383940414243444
发展史开始的时候,为了实现一个服务器可以支持多个客户端连接,人们想出了fork/thread等办法,当一个连接来到的时候,就fork/thr
添加用户并赋予权限#添加用户 adduser -m xxx vim /etc/sudoers 添加:%sudo ALL=(ALL:ALL) ALL 将用户添加到
不同PC客户端技术方案的比较Qt官网:https://www.qt.io/ Qt具有跨平台的特性,可选择QWidget、QQuick。整个包比较大。虽然可以根据
问题:Connection reset by peer) while reading response header from upstream描述:某些请求一
grep常用命令12345678910111213141516171819202122232425# 查找进程中所有跟nginx匹配的ps -ef | grep
explain 使用 列名 说明 id 执行编号,标识select所属的行。如果在语句中没子查询或关联查询,只有唯一的select,每行都将显示1。否则,内层的
安装安装PHP扩展amqp12345678910111213141516PHP < 7.3#install some base extensionsRUN
最近一段时间,开始了解并完成了一些后端需求。大致的过程如下: 熟悉PHP,看了《PHP核心技术与最佳实践》、《PHP内核剖析》、《深入理解PHP内核》; 熟悉M
容器生态系统: 容器核心技术: 容器规范: OCI(Open Container Initiative): runtime spec image format
一个好的技术领导者真的可以为公司省很多钱,可以保障产品的质量。自己在这条路上还有很多路要走,现将自己的一些感悟记录下来。 一个优秀的团队,首先要有靠谱的成员,至
Proxifier的作用:让电脑上的软件的网络请求先经过代理,可用于翻墙、接口抓取等。 设置Proxies设置Server设置为代理对应的IP地址,本地使用lo
平时工作中有很多场景需要使用屏幕截图,原来一直使用QQ自带的截图功能。虽然功能不是很全,但也够了。但由于其是QQ的一个子功能,每次一定要启动QQ才能使用。于是想
Markdown环境搭建安装扩展MarkdownEditing下载地址: https://github.com/SublimeText-Markdown/Mar
文件解锁工具 魔方解锁独立版 内存、CPU监控工具TrafficMonitor 介绍:https://www.appinn.com/trafficmonitor
Proxy SwitchyOmegaVPN代理 Clear Cache清理缓存 DJSON ViewerJSON格式化显示 Gitlab TreeViewGit
股票数据抓取框架使用TuShare。 http://tushare.org/
基本操作 使用Alt+空格启动,在输入框中输入相应命令进行操作。以下根据其设置界面的布局,按照相应的目录进行介绍。 General General界面主要是以下
类似Java中的jenv、Flutter的fvm工具,Python也有多版本管理工具,这里推荐使用pyenv。 先记录下Mac m1的默认python环境 Ma
基本概念参考这里,Python的版本也是根据这些概念,通过使用自己的特性实现。但由于种种原因,Python的不同版本间变化很大。可以参考这里。 基本的用法可以参
ctypes 是 Python 的外部函数库。它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数。可使用该模块以纯 Python 形式对这些库
比较 simplejson:django的内置模块,如果没有C扩展加速,效率极其低下。 rapidjson: ujson:使用C语言实现 orjson:使用Ru
Python提供了调用系统级别API的功能,ctype、sip等都可以用来调用C++代码,以此来和系统交互。win32模块提供了调用本地win32 GUI AP
数据分析清洗使用pandas,numpy。 http://pandas.pydata.org/ https://www.pypandas.cn/ Series
为什么要使用ORM框架? 为了方便,降低出错概率,可读性更好。 基本操作12345678910111213141516171819202122232425262
对pandas进行了封装 https://github.com/jealous/stockstats
struct模块主要二进制和结构体之间的互相转化。在业务场景中,socket数据的处理会使用到。纯文本是无法进行传输到,因为不同系统硬件的存储方式是不一样的。这
基本API使用Application RequestHandler 参考https://tornado-zh.readthedocs.io/zh/latest/
Pillow是用于图像处理的库,可用于图像存储、图像显示、图像处理(改变大小、旋转等)。 基本使用123456789from PIL import Imagei
str和bytes基本概念 字节(Byte ):是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最
Python代码的执行由虚拟机来控制。Python再主循环中,同时只有一个线程再执行,就像单CPU的系统中运行多个进程那样,内存中可以存放多个程序,但任意时刻,
官方文档:https://docs.python.org/zh-cn/3/extending/extending.html ** 什么时候要用扩展 性能瓶颈:比
底层原理区别 底层实现上来说,synchronized 是JVM层面的锁,是Java关键字,通过monitor对象来完成(monitorenter与monito
TCP、UDP区别 TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 TCP提供可靠的服务。也就是说,通过TCP连接传
概述 LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。 LinkedLis
类加载过程加载,验证,准备,解析,初始化,使用,卸载 加载 使用 new 关键字实例化对象,读取或者设置一个类的静态变量(被 final修饰的除外,已经在编译器
Java从1.5引入了注解(Annotation),使得Java具有动态语言的特性。 Java中常用的注解有: @Override @Deprecated @S
ArrayDeque不是线程安全的。 ArrayDeque不可以存取null元素 当作为栈使用时,性能比Stack好;当作为队列使用时,性能比LinkedLis
容器类图 Java 中常用的存储容器就是数组和容器,二者有以下区别: 存储大小是否固定 数组的长度固定; 容器的长度可变。 数据类型 数组可以存储基本数据类型,
概要在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的键值对会被放在同一个位桶里,当桶中元素较多时,通过ke
ConcurrentHashMap 是一个并发散列映射表的实现,它允许完全并发的读取,并且支持给定数量的并发更新。相比于 HashTable 和用同步包装器包装
反射(Reflection)的作用: 反射让开发人员可以通过外部类的全路径名创建对象,并使用这些类,实现一些扩展的功能。 反射让开发人员可以枚举出类的全部成员,
概述范型的设计参考了C++中的模版,目的是写出更加通用的代码。泛型将代码安全性检查提前到编译期。添加了范型特性后,解决了Java中容器的类型安全问题。 泛型的本
概要介绍Java中的几种引用类型: 强引用: 强引用指的是在程序代码之中普遍存在的,类似于”Object obj = new Object()”这类的
12345678910111213141516171819202122232425262728293031323334353637383940414243444
Bootstrap ClassLoader:使用 C++实现,是虚拟机的一部分。它主要负责 加载存放在%JAVAHOME%/lib 目录中的,或者被-
Java语言的类型可以分为两大类:基本类型(primitive types)和引用类型(reference types)。 基本类型是由Java虚拟机预先定义好
概述Java 内存模型 (Java Memory Model) 定义了 JVM 如何正确访问计算机主内存。JMM 指定了不同线程如何以及何时可以看到其他线程写入
概要JVM Tool Interface:JVMTI 本质上是在JVM内部的许多事件进行了埋点。通过这些埋点可以给外部提供当前上下文的一些信息。甚至可以接受外部
插桩 参考 https://asm.ow2.io/index.html https://github.com/Leifzhang/AndroidAutoTrac
概要使用观察者模式、装饰器模式,类似Java的IO流。将不同的操作符一层层的封装,然后再进行一层层的解封。 基本概念 Observable(可观察者,即被观察者
概述Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在 Class文件之中,中间没有添加任何分隔符。根据Java虚拟机规范
概述有时候,我们可能需要在电脑中安装多个Java环境,在不同的场景切换版本,我们需要修改JAVA_HOME、PATH等环境变量。每次改起来就很繁琐。我们也可以自
什么是线程安全?线程的工作原理,jvm有一个main memory,而每个线程有自己的working memory,一个线程对一个variable进行操作时,都
ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其他线程来说则无法获
参数1234public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keep
线程池状态1234567private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0
volatile作用在Java并发编程中,volatile 是经常用到的一个关键字,它可以用于保证不同的线程共享一个变量时每次都能获取最新的值。volatile
Java中的Thread的用法 同步队列与等待队列 同步队列:所有尝试获取该对象Monitor失败的线程,都加入同步队列排队获取锁。调用了start、notif
前言在学习synchronized之前,应该先了解多线程的机制和锁的概念,请先阅读以下文章: Java锁 Java多线程 使用方式 同步普通方法,锁的是当前对象
Java语言是编译型语言,Java代码编译成字节码,然后由JVM解释成目标代码由CPU执行;这里包含我们常说的两个过程,即编译时和运行时;Java语言把编译时可
CAS原理在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况
锁的基本概念从广义上来定义: 悲观锁: 比如线程A对某个变量进行修改,在这个修改期间,它持悲观心理,认为其他线程在这个期间,也有可能去修改这个变量,所以它就给变
官方方案https://flutter.cn/docs/development/add-to-app/android/project-setup flutter
概述什么是状态管理? 这里的状态指的是UI的状态,不同的场景下展示不同的UI,所以需要一种方式来管理UI不同的状态。flutter的很多设计都借鉴来React,
Flutter | 如何优雅的解决依赖版本冲突
Java中的版本管理可以使用jenv,Flutter中可以使用fvm。 官网:https://fvm.app 官方使用文档:https://fvm.app/do
概述为什么要使用flutterboost? 在原生页面和Flutter页面共存的情况下,进行管理路由。 以下问题如何处理? Native如何传递参数给Flutt
概述高性能的状态管理、智能的依赖注入和便捷的路由管理。 状态管理Get有两个不同的状态管理器:简单的状态管理器(GetBuilder)和响应式状态管理器(Get
1234567SliverPersistentHeader({ });
TextPainter12
ListView123ListView{itemExtent //强制限制高度} CustomScrollViewslivers 如果不是S
概述State表示对应的StatefulElement需要保存的信息。 生命周期 常用属性widget它表示与该State实例关联的widget实例,由Flut
常用属性GlobalKey navigatorKey类型,导航键 final RouteFactory? onGenerateRoute生成路由的回调函数,当导
Scaffold是Material Design布局结构的基本实现。
12345678910111213141516171819202122232425262728293031323334353637383940414243App
概述TabBar:Tab页的选项组件,默认为水平排列。 TabBarView:Tab页的内容容器,Tab页内容一般处理为随选项卡的改变而改变。 TabContr
12345678910111213141516171819202122232425const ToggleButtons({ Key key, @re
常用属性MainAxisSize主轴的可用空间大小 min:主轴上可以分配的最小空间,由子元素的布局约束决定 max:主轴上可以分配的最大空间 mainAxis
概述Overlay使用Stack的方式添加悬浮层,可以实现类似toast的效果。 参考 Flutter:使用Overlay展示浮动的widget Flutter
FutureBuilder1234567891011FutureBuilder({ this.future, //通常是一个异步耗时任务 this.i
Flutter只是一个UI框架,运行在宿主平台上,Flutter本身无法提供一些系统能力,比如蓝牙、相机、GPS等。插件是一种特殊的包,和纯dart包的主要区别
文件夹目录最基础的helloworld项目结构如下: .dart_tool:记录了一些dart工具库所在的位置和信息 .idea:android studio
概述AppBar(应用栏)由一个工具栏和其他小部件组成,应用栏通常使用IconButton公开一个或多个操作,使用PopMenuButton作为点击后展开的菜单
12345678910111213#反编译apk文件apktool d app-release.apk如果出现编译assets文件夹中的dex文件失败,则使用-
https://www.pnfsoftware.com/jeb/manual/ 在使用Jeb的时候,关闭Android Studio。 如何debug 对于一个
权限设置 尽量使用更少的权限,动态获取权限。 release版本中设置日志输出等级 危险代码检测确认代码中是否使用插件化技术,hook技术 源文件安全 Java
Xposed的作用非常强大,以前虽然也大致了解,但没有自己实践过。最近在做其他App分析的时候,发现其限制了模拟器的使用,于是想着逆向破解一下,于是开启了Xpo
有些App为了安全,会使用相关加壳工具来提高破解难度。但其实意义不大,通过hook,应该是很容易获取内存dump出dex文件的。还记得以前进行flash游戏破解
一个像素的Activity 前台service 进程间唤醒 JobSheduler 1559
参考 https://www.mtyun.com/library/hardware-accelerate https://rengwuxian.com/ui-1
概述启动时init进程加载init.rc文件,启动zegote进程,zegote就是app_process进程,app_process进程装在Android的系
概述 BootClassLoader:主要用于加载系统的类,包括 java 和 android 系统的 类库,和 JVM 中不同,BootClassLoader
问题描述12345678!SESSION 2017-08-29 15:27:40.107 -----------------------------------
删除无用资源底层库优化有时候,可能只使用了开源库中对某部分功能,可以对其源码进行删减重新打包。 图片压缩放入项目之前,对图片进行压缩,比如使用tinypng 图
SparseArraySparseArray由两个数组mKeys和mValues存放数据;其中key的类型为int型,这就显得SparseArray比HashM
一些技巧 异步线程应该在Activity、Fragment的生命周期结束时停止掉 减少不必要的线程切换 主线程中throw的异常要catch 不要在主线程做耗时
参考 https://github.com/tianshaojie/android-library-web https://github.com/xudjx/w
概述OOM(Out of Memory)即内存溢出,是因为应用所需要分配的内存超过系统对应用内存的阈值,而抛出java.lang.OutOfMemoryErro
解决办法在视图销毁的时候,要cancel掉动画 参考
Bitmap总结Android中的图片是以Bitmap方式存在的,绘制的时候也是Bitmap,对内存的影响还是很大的。 Bitmap所占用内存的计算公式:图片长
Schedulers参考
插件化框架 https://github.com/wequick/Small
概述WMRouter主要提供URI分发、ServiceLoader两大功能。基于注解的方式来实现解耦。 提供了以下标注: RouterPage:指定一个内部页面
概述有些业务场景,比如IM聊天、直播房间的消息面板。可能会出现有好几十个ViewHolder的场景。这个时候,如果按照Adapter的标准写法,所有的类型都堆叠
概述测试是无法测出所有bug的,线上出问题在所难免,如果没有热更新方案。那么每次都需要重新更新!tinker是经过腾讯实践后公布的开源解决方案。由于patch包
流程图参考
KOOM :OOM分析工具 流程初始化后,10秒后启动一个线程,每5秒轮询检测。当满足条件(比如内存不够用),启动一个新的进程,进行内存泄漏分析、裁剪、保存分析
参考 https://square.github.io/leakcanary
概述MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强。 MMKV
流程图 同步请求 异步请求 判断当前 call 是否只执行了一次,否则抛出异常 创建一个 AsyncCall 对象,它其实是一个 Runable 对象 通过 c
概述样式是一个属性集合,用于指定单个 View 的外观。样式可以指定字体颜色、字号、背景颜色等属性。 主题背景是应用于整个应用、Activity 或视图层次结构
事件总线匡救啊,降低了代码的耦合性。
Hanlder系列目录: Handler基本用法 Handler原理 概要A Handler allows you to send and process Me
概述Service是一种计算型组件,其生命是嵌套在主线程中的。Service有两种状态:启动状态和绑定状态,并且只能显示启动,因此在AndroidManifes
常见类的介绍 ActivityThread : 入口类 Instrumentation : ActivityThread 的得力助手,帮助 ActivityTh
概要ContentProvider主要用来给不同应用提供数据,当其所在进程启动时,ContentProvider会同时启动并发布到AMS中。 当android:
概述BroadcastReceiver是一种消息型组件。由于BroadcastReceiver可以在不同的组件甚至不同的应用之间传递消息,所以其可以脱离Acti
使用support-vX包的原因 向后兼容 提供不适合打包进framework的功能 支持不同形态的设备 support-v4implemention: &qu
目录自定义View自定义View之Canvas自定义View之Paint API颜色填充1234canvas.drawColor(Color.BLACK);ca
目录 RecyclerView之概述 RecyclerView之绘制流程 RecyclerView之Adapter RecyclerView之ItemDecor
目录 RecyclerView之概述 RecyclerView之绘制流程 RecyclerView之Adapter RecyclerView之ItemDecor
目录 RecyclerView之概述 RecyclerView之绘制流程 RecyclerView之Adapter RecyclerView之ItemDecor
目录 RecyclerView之概述 RecyclerView之绘制流程 RecyclerView之Adapter RecyclerView之ItemDecor
JNI开发流程 编写声明了native方法的Java类 将Java源代码编译成class字节码文件 用javah -jni 命令生成.h头文件(javah 是
概述
目录 RecyclerView之概述 RecyclerView之绘制流程 RecyclerView之Adapter RecyclerView之ItemDecor
目录 RecyclerView之概述 RecyclerView之绘制流程 RecyclerView之Adapter RecyclerView之ItemDecor
目录 RecyclerView之概述 RecyclerView之绘制流程 RecyclerView之Adapter RecyclerView之ItemDecor
参考资料
ANR类型按键或触摸事件在特定时间内无响应1234//ActivityTaskManagerService.java// How long we wait un
启动流程应用的启动流程如下: SystemServer 负责应用的启动流程调度、进程的创建和管理、 窗口的创建和管理(StartingWindow 和 AppW
查询设备 12345adb devicesList of devices attachedemulator-5554 deviceemulator-5556 d
BIO:BlockIO,同步阻塞IO。发起请求 –>一直阻塞–>处理完成 NIO:New IO Non-Block IO,同步非阻塞IO。 Sele
StringBuilder和StringBuffer 和String类不同的是,StringBuffer和StringBuilder类的对象能够被多次的修改,并
对象存活 GC算法 运行时数据区 可达性分析与引用计数引用计数法给对象增加一个引用计数器,每当有一个地方引用它时,计数器就+1;当引用失效时,计数器就-1;任何
JVM栈帧及方法调用详解 JMM、Java Memory Model 对象优先在Edenf分配大对象直接进入老年代长期存活的对象将进入老年代动态对象年龄判定空间
说明CountDownLatch是在java1.5被引入,使一个线程等待其他线程各自执行完毕后再执行。 CountDownLatch是通过共享锁实现的。在创建C
概述ReentrantLock是重入锁。它实现了Lock接口,是基于AQS(一种用于构建同步器的框架)构造出来的一种同步器。 与synchronized相比增加
通过迭代器fail-fast属性,你明白了什么? 每次我们尝试获取下一个元素的时候,Iterator fail- fast属性检查当前集合结构里的任何改动。如果
来源Fragment的概念来源于Android3.0,主要目的是为大屏幕(如平板电脑)上更加动态和灵活的界面设计提供支持。他可添加到Activity中,所以多个
定义原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 有时候当你想复制一个对象时,先会想到用n
定义定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。 结构图 角色 抽象工厂:实现了所有操纵产品的方法,但不实现工厂
定义提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 它是工厂方法模式的扩展。工厂方法模式只能生产一种产品,而抽象工厂模式则扩展为多个。 结
定义建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 类图 角色 Builder:抽象建
定义享元模式(Flyweight Pattern):减少创建对象的数量,以减少内存占用和提高性能。 类图 角色 Flyweight: 抽象享元类 Concret
定义代理模式(Proxy Pattern) :给某一个对象提供一个代理,并由代理对象控制对原对象的引用。它是一种对象结构型模式。 类图 角色 Subject:
定义组合模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。 类图 角
定义提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 结构图 外观模式中的角色: 门面角色(Facade):这是外
定义装饰器模式(Decorator Pattern):在不改变现有对象结构的情况下,动态地给该对象增加一些职责(即增加其额外功能)。 类图 角色 抽象构件(Co
定义桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。 类图 角色 Abstraction:抽象类,保存一个对实现
定义适配器模式(Adapter Pattern):将一个类的接口转换成客户期望的另一个接口,适配器让原本接口不兼容的类可以相互合作。适配器模式有类的适配器模式和
摘要1 宁愿要三流的战略加上一流的组织,也不要一流的战略、三流的组织。 感悟: 好的团队很重要,一群优秀的人,目的明确,团结一致,想不成功都难。在团队建设过程中
这是我的个人博客,用于记录自己的点点滴滴!
介绍一个一直以来比较菜的程序员!什么都懂一点,但貌似没一样精通的!o(╯□╰)o 关注IT技术,分享学到的知识,分享生活的乐趣。 此博客内容因博主见识、表达措辞
Error 404 Not Found 您所访问的地址无法找到或者已经被删除了, 如果您是从搜索结果点击进来看到的 404,可以先尝试使用页面 右上方的搜索文章