自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 资源 (3)
  • 收藏
  • 关注

原创 【Python】- 基础语法(一)

字面量注释变量数据类型数据类型转换标识符运算符字符串扩展数据输入。

2025-04-14 14:23:46 187

原创 【AI学习笔记】- MCP

模型上下文协议(MCP)是一个创新的开源协议,它重新定义了大语言模型(LLM)与外部世界的互动方式。MCP 提供了一种标准化方法,使任意大语音模型能够轻松连接各种数据源和工具,实现信息的无缝访问和处理。MCP 就像是 AI 应用程序的 USB-C 接口,为 AI 模型提供了一种标准化的方式来连接不同的数据源和工具。Resources 资源Prompts 提示词Tools 工具Sampling 采样Roots 根目录Transports 传输层。

2025-03-30 17:19:29 1000

原创 Kotlin深度面试题:协程、密封类和高阶函数

解答:协程和线程都是用于并发编程的工具,但它们有显著的区别:协程:轻量级:协程是轻量级的,它们在同一个线程中运行,可以在不阻塞线程的情况下挂起和恢复。更高效:由于协程不需要操作系统线程的上下文切换,因此它们比线程更高效。简化异步代码:协程使异步代码看起来像同步代码,易于理解和维护。线程:重量级:线程是操作系统级别的,创建和销毁线程的开销较大。阻塞:线程的阻塞会导致资源浪费,特别是在I/O操作时。在Android中,可以使用Kotlin协程来处理异步任务,例如网络请求、数据库操作等。

2024-11-16 19:44:31 2916

原创 【小程序】- 页面传值及生命周期

分包加载是优化小程序加载速度的一种手段。小程序中内置了许多的组件供开发者使用,不仅如此开发者还可根据需要自定义组件。

2024-10-20 21:08:21 985

原创 【小程序】-基础语法(二)

在页面中渲染数据时所用到的一系列语法叫做模板语法,对应到 Vue 中就是指令的概念。

2024-10-18 18:47:46 1003

原创 【小程序】- 基础语法(一)

文件中不支持使用本地路径的资源,比如背景图片是不允许使用本地国片路径的,必须使用网络路径(https:// 或 http:// 开头)或者转换成 base64 编码。小程序的配置可以配置页面路径、窗口表现、tabBar等,分为全局配置和页面配置,全局配置针对所有页面生效,页面配置只针对当前页生效。在页面中指定一个可以滚动的区域,并且这个可滚动的区域能够实现一些高级的交互,比如下拉刷新等。小程序中字体图片的使用与网页中基本上是一致的,唯一的区别是小程序的。

2024-10-17 19:40:52 961

原创 【HarmonyOS】- 相对布局RelativeContainer和栅格布局组件应用

RelativeContainer与Android相对布局类似,使用相对布局可以减少布局层级嵌套,减少绘制渲染,提升性能。

2024-10-14 07:30:00 304

原创 【Flutter】- go_router路由

go_router是一个 Flutter 的第三方路由插件,相比 Flutter 自带的路由,go_router 更加灵活,而且简单易用。在 App 应用中,如果你想自己控制路由的定义和管理方式,那么它将十分有用。同时,对于 Web 应用来说,go_router 也提供了很好的支持。使用 go_router 后,你可以定义 URL 的格式,使用 URL 跳转,处理深度链接以及其他一系列的导航相关的应用场景。使用模板语法解析路由路径和路由查询(query)参数;支持单个目标路由展示多个页面(子路由);

2024-10-13 12:38:11 892

原创 【Flutter】- 核心语法

Flutter是以组件化的思想构建客户端页面的,类似于 vue 和 react,每个组件都有独立的结构、样式和交互。Flutter的组件分为两大类:无状态组件 和 有状态组件● StatelessWidget: 没有状态改变的Widget,通常这种Widget仅仅是做一些展示工作而已;● StatefulWidget: 需要保存状态,并且可能出现状态改变的Widget;

2024-10-07 18:47:05 1531

原创 【Flutter】- 基础语法

声明变量:var 变量名 = 表达式;修改变量:变量名 = 新值;类型推断:var关键字声明的变量支持类型推断,修改变量时会检查之前存储数据的类型需求:存储不可被修改的数据实现:常量关键字:const 和 final区别:final是运行时常量,值在运行时赋值;const是编译期常量,值在编译时赋值;注意: const 和 final的区别final:运行时常量,值在运行时赋值const:编译期常量,值在编译时赋值。

2024-09-29 10:51:00 1232

原创 【Vue】- 路由及传参

什么是单页面应用程序?● 所有功能在一个html页面上实现单页面应用优缺点?● 优点:按需更新性能高,开发效率高,用户体验好● 缺点:学习成本,首屏加载慢,不利于SEO应用场景?● 系统类网站 / 内部网站 / 文档类网站 /移动端站点什么是路由?○ 路由是一种映射关系Vue中的路由是什么?○ 路径和组件 的映射关系○ 根据路由就能知道不同路径的,应该匹配渲染哪个组件如何实现路径改变,对应组件切换,应该使用哪个插件?○ Vue 官方插件 VueRouter。

2024-09-18 17:34:39 1588

原创 【Vue】- Vue应用

组件化概念组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的结构、样式、行为。好处:便于维护,利于复用 → 提升开发效率。组件分类:普通组件、根组件。

2024-09-16 08:00:00 562

原创 【Vue】- ref获取DOM元素和购物车案例分析

元素上使用 ref属性关联响应式数据,获取DOM元素步骤● 创建 ref => const hRef = ref(null)● 模板中建立关联 => 我是标题

2024-09-15 11:14:06 1131

原创 【Vue】- 生命周期和数据请求案例分析

Vue生命周期● 就是一个Vue实例从创建 到 销毁 的整个过程。生命周期四个阶段:① 创建 ② 挂载 ③ 更新 ④ 销毁● 创建阶段:创建响应式数据● 挂载阶段:渲染模板● 更新阶段:修改数据,更新视图● 销毁阶段:销毁Vue实例使用步骤● 先从vue中导入以on打头的生命周期钩子函数● 在setup函数中调用生命周期函数并传入回调函数● 生命周期钩子函数可以调用多次生命周期创建阶段挂载阶段更新阶段销毁阶段生命周期vue2.0 和 vue3.0的区别。

2024-09-14 18:13:30 561 1

原创 【Vue】- Vue核心语法

VUE-DEMO│─node_modules 第三包文件夹├─public 放html文件的地方| └─favicon.ico 网站图标├─src 源代码目录 → 以后写代码的文件夹│ └─assets 静态资源目录 → 存放图片、字体等│ └─components 组件目录 → 存放通用组件│ └─App.vue App根组件 → 项目运行看到的内容就在这里编写│ └─main.ts 入口文件 → 打包或运行,第一个执行的文件。

2024-09-13 18:11:14 1309 3

原创 【HarmonyOS】- 首选项优化之MMKV

通过MMKV存储数据的效率有SP的10倍之多,而且这只有1000次连续存储,在数据量越来越大的时候,MMKV的优势就越明显,那么接下来我们先通过分析Preference的源码,有利于理解MMKV源码。为什么MMKV能够提升了几十倍的写入效率,还是得益于mmap的内存映射避免了内核态与用户态的切换,从而突破了传统IO瓶颈(二次拷贝)MMKV的原理和使用‌MMKV的原理和使用‌:MMKV基于mmap内存映射实现,提供了一种高性能的key-value存储解决方案。

2024-09-12 15:49:52 843

原创 【HarmonyOS】- 常见算法简单写法

冒泡排序简单写法。

2024-09-12 10:57:15 247

原创 【HarmonyOS】- 内存优化

当应用程序占用过多内存时,系统可能会频繁进行内存回收和重新分配,导致应用程序的性能下降,甚至出现崩溃和卡顿的情况。通过减少应用内存的占用,可以有效提高应用的性能和响应速度,节省系统资源,让设备的运行效率更高,延长设备的续航时间。开发者应该在应用开发过程中注重内存管理,积极采取措施来减少内存占用,以优化应用程序的性能和用户体验。HarmonyOS提供了一些内存管理的工具和接口,帮助开发者有效地管理内存资源。

2024-09-08 12:46:59 1342

原创 【HarmonyOS】- HAR与HSP区别及使用原则

HAR与HSP系统提供了两种共享包,HAR静态共享包和HSP动态共享包。HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C++库、资源和配置文件,最大的不同之处在于:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,在运行时进程中代码和资源也只会存在一份。

2024-09-08 11:13:12 1129

原创 【HarmonyOS】- 长列表优化

针对这类大量数据加载的长列表应用,如何对长列表的性能进行优化是非常重要的。一个正确、高性能的长列表应用能明显降低列表渲染时间、提升页面的滑动帧率、降低应用内存占用,大幅提升用户体验。ForEach 和 LazyForEach 对比:ForEach 是从列表数据源一次性加载全量数据并全部挂载在组件树上,适用于数据量少且不是性能瓶颈的场景;LazyForEach 按需加载部分数据,构建短小组件树,适用于数据量大易产生性能瓶颈的场景。

2024-09-08 11:07:54 1151

原创 【HarmonyOS】-TaskPool和Worker的对比实践

编码效率:TaskPool写法比Worker更简洁更好掌控,TaskPool还支持任务组、任务优先级、取消任务等能力。如果有这些场景的需要,可以采用TaskPool并发方案。线程创建:Worker比TaskPool创建线程的开销大,因此对于应用首帧要求快速响应的场景推荐使用TaskPool。数据传输:TaskPool支持将任务方法作为一个参数进行传输,任务方法的序列化与反序列化耗时很短,可以忽略其影响。

2024-09-08 08:54:42 786

原创 【HarmonyOS】- LazyForEach

LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。针对渲染数据量比较大时,优先选择性能更好的LazyForEach进行按需加载,需要搭配@Observed和@ObjectLink 进行子组件数据单独更新。

2024-07-29 10:47:29 831

原创 Android常见问题-科普一下面试中常问的音视频基础知识

一本静态的小人书,通过翻动以后,就会变成一个有趣的小动画,如果画面够多,翻动速度够快的话,这其实就是一个小视频。而视频的原理正是如此,由于人类眼睛的特殊结构,画面快速切换时,画面会有残留,感觉起来就是连贯的动作。所以,视频就是由一系列图片构成的。音频数据的承载方式最常用的是脉冲编码调制,即PCM。在自然界中,声音是连续不断的,是一种模拟信号,那怎样才能把声音保存下来呢?那就是把声音数字化,即转换为数字信号。我们知道声音是一种波,有自己的振幅和频率,那么要保存声音,就要保存声音在各个时间点上的振幅。

2024-05-24 15:47:33 824

原创 【Android常见问题(七)】- 自定义view特殊U型虚线样式

【代码】【自定义view】特殊虚线样式

2023-10-13 20:39:06 188

原创 【Android常见问题(六)】- UX标注色值带有百分比的使用方法

a,将透明度转换成不透明度。不透明度为:60% b,不透明度乘以255。我们得到结果:153 c,将计算结果转换成16进制。得到最终的不透明度:99 d,将不透明度和颜色值拼接成ARGB格式。得到最终的颜色值: #99FFFFFF 所以,UI要的颜色是:#99FFFFFF。如果UI给的视觉稿标注是:颜色#FFFFFF,透明度40%。需要不透明度值的,可以自己算:透明度值 + 不透明度值 = 100%

2023-09-13 09:27:35 672

原创 【Android Framework (十二) 】- 智能硬件设备开发

针对我过往工作经历,曾在一家智能科技任职Android开发工程师,简单介绍下关于任职期间接触和开发过的一些项目经历,智能多与物联网(LOT)进行联系,从对Android智能硬件一无所知到现在算是略有小成,期间踩了很多坑,也接触到了许多非Android方面的知识,现用文章的方式将之记录下来,与大家分享。提到智能硬件其实属于物联网(LOT)的范畴,关于智能硬件的定义,以我理解的角度来看,首先这是一个不同于移动手机的硬件,它本质还是一个可触碰的实质物体;

2023-08-15 18:48:42 1569 1

原创 【Android常见问题(五)】- Flutter项目性能优化

项目迭代开发一定程度后,性能优化是重中之重,其中包括了包体积,UI 渲染、交互等多个方面。通过 Flutter 应用的混淆为入口,我们主要探讨了UI 渲染的优化。其中就会涉及到一个非常关健的概念 ——「FPS,Frame Per Second」即「每秒展示帧数」,它代表了应用的流畅度。我们知道,动画和物体动态的运动都是由在一段时间内一系列连续变化的静态帧构成的。在考虑应用的渲染性能时,我们就是在试图分析应用每秒渲染的帧数。

2023-07-27 15:57:33 1004

原创 Mac使用手册 - WeChatTweak微信撤回拦截与多开工具

WeChatTweak是一款macOS 客户端微信撤回拦截与多开工具,支持阻止消息撤回、客户端多开等等功能,不过目前不支持最新版本的微信3.8.1,可以下载微信3.8.0版本替换即可实现查看微信撤回的消息等等功能了,撤回后的消息是高亮显示的,可以在设置自定义,还支持支持 Alfred workflow、Launchbar action等等,感兴趣的同学可以试试。阻止消息撤回消息列表通知系统通知正常撤回自己发出的消息客户端无限多开右键 Dock icon 登录新的微信账号。

2023-07-14 08:00:00 2654 1

原创 Mac使用手册 - brew 命令的安装

从Ubuntu系统切换到Mac os系统,常用的命令工具发生了变化,比如brew的命令安装如下。命令安装运行命令,输入序列号时 直接回车输入大写字母:Y输入mac密码,运行脚本等待安装完成即可安装成功 但还需要重启终端 或者 运行 source /Users/mac/.zprofile 否则国内地址无法生效brew -v 验证。

2023-07-13 16:05:21 1945

原创 【Android 碎屑日记(二)】- Jetpack Compose

Compose是一个用于替代Android View的全新声明式UI框架声明式编程(英语:Declarative programming)或译为声明式编程,是对与命令式编程不同的编程范型的一种合称。它们建造计算机程序的结构和元素,表达计算的逻辑而不用描述它的控制流程。指令式编程(英语:Imperative programming);是一种描述电脑所需作出的行为的编程范型。几乎所有电脑的硬件都是指令式工作;几乎所有电脑的硬件都是能执行机器语言,而机器代码是使用指令式的风格来写的。

2023-07-12 08:00:00 311

原创 【Android 碎屑日记(一)】- Android 14 重要的 8 个新特性

一年一度的 Android 升级永不缺席,今年的代号叫 Upside Down Cake,倒置蛋糕,简称 U,对外版本为 Android 14。升级任务分为 ROM 角度和 App 角度,前者比较关心系统内部实现的变化,后者则更加关心对外的 New Features 和 Behavior Changes。14 推出的新 API,大部分我都试过,并开源了 DEMO。ScreenShot Detection,截屏感知TextView Highlight,文本高亮。

2023-07-11 15:27:12 980

原创 【Android Framework (十一) 】- InputManagerService

InputManagerService是一个系统服务,主要处理Input事件的传递,包括键盘、鼠标、触摸屏等等,它和WMS密切相关。

2023-07-04 08:00:00 696

原创 【Android Framework (十) 】- ContentProvider

ContentProvider是Android的四大组件之一,虽然他没有Broadcast和Service用的频繁。ContentProvider的作用是不同应用之间数据共享,提供一个统一的接口。例如我们我想让其他应用使用自己的数据 就需要使用ContentProvider。1.获取ContentProvider。

2023-07-02 15:42:50 316

原创 【Android 常见问题(一)】- HashMap & ConcurrentHashMap

CAS 是一条CPU并发原语。这样当获取一个不存在的 key 时,计算出的 index 正好是环形链表的下标就会出现死循环:在 1.7 中 hash 冲突采用的头插法形成的链表,在并发条件下会形成循环链表,一旦有查询落到了这个链表上,当获取不到值时就会死循环。1.8 在 1.7 的数据结构上做了大的改动,采用红黑树之后可以保证查询效率(O(logn)),甚至取消了 ReentrantLock 改为了 synchronized,这样可以看出在新版的 JDK 中对 synchronized 优化是很到位的。

2023-07-02 15:18:20 396

原创 【Android 常见问题(四)】-kotlin

在上面的代码中,我们定义了一个 User 类,并使用 by lazy 关键字定义了一个 name 属性,该属性在第一次被使用时会进行初始化。其中,ClassName 表示要添加方法的类名,methodName 表示方法名称,parameters 表示方法参数列表,方法体中的代码可以使用该类中的属性和方法。需要注意的是,扩展函数是静态解析的,即在编译期间就决定了哪个函数会被调用,因此如果在同一个类中存在与扩展函数同名的成员函数,那么编译器会优先选择成员函数。主构造函数可以包含参数,访问修饰符和注解等元素。

2023-05-11 22:20:52 668 4

原创 【Android 常见问题(三)】- flutter及常见问题分析

当初始化一个 Channel,并向该 Channel注册处理消息的 Handler 时,实际上会生成一个与之对应的 BinaryMessageHandler,并 以 channel name 为 Key,注册到 BinaryMessenger 中。两个Isolate完全是两条独立的执行线,且每个Isolate都有自己的事件循环,它们之间只能通过发送消息通信,所以它的资源开销低于线程。在项目中,可能会有很多没有被使用到的资源文件,这些资源文件会占据 APK 的空间,并且在启动时也会增加资源解析的时间。

2023-05-11 22:10:09 1306

原创 【Android 常见问题(二)】- 常见算法题

a. 首先将查找表分成若干块,在每一块中数据元素的存放是任意的,但块与块之间必须是有序的(假设这种排序是按关键字值递增的,也就是说在第一块中任意一个数据元素的关键字都小于第二块中所有数据元素的关键字,第二块中任意一个数据元素的关键字都小于第三块中所有数据元素的关键字,依次类推);冒泡排序是一种简单的排序算法。1、基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;c. 查找时先用给定的关键字值在索引表中查找,确定满足条件的数据元素存放在哪个块中,查找方法既可以是折半方法,也可以是顺序查找。

2023-05-11 16:58:11 286

原创 【Android常见问题(二)】-进程和线程的区别

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。2、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

2023-05-10 00:24:09 204

原创 【Android Framework (九) 】- Broadcast

Broadcast是一个很简单的组件,它是我们应用程序之间传输信息的一种机制。BroadcastReceiver是用来接收来自系统和应用的广播 并对其做出相应的组件,我们发送广播是通过Intent,在Intent中我们可以带我们需要传递的数据。广播的注册:1.静态注册(AndroidManifest中使用receiver标签) 2.动态注册 registerReceiver方法。发送广播:sendBroadcast动态注册。

2023-05-07 01:01:03 999

原创 【Android Framework (八) 】- Service

1,挂载文件系统,创建文件目录 调用selinux_setup权限安全相关2,初始化内存空间 初始化属性服务 创建Epoll 注册监听子进程重启异常操作等,对子进程进行线程守护3,startPropertyServic 开启属性服务 进行监听4,LoadBootScripts 加载init.rc文件 进行解析 调用do_class_start 文件开启service5,Service::Start函数->fork子进程->并且执行app_process文件,开启了zygote1,startVm函数注

2023-04-26 08:00:00 627

zxing和zbar的综合版本很高效的二维码扫描

zxing和zbar的综合版本很高效的二维码扫描,在Toast的地方可根据自己的要求进行相应的修改,扫码效率很高

2015-11-03

universal-image-loader-1.9.2.jar

universal-image-loader-1.9.2.jar Android-Universal-Image-Loader 图片异步加载类库的使用

2015-09-24

contentprovider

ContentProvider 1 适用场景 1 ContentProvider为存储和读取数据提供了统一的接口 2 使用ContentProvider 应用程序可以实现数据共享 3 android内置的许多数据都是使用ContentProvider形式 供开发者调用的 如视频 音频 图片 通讯录等 2 相关概念介绍 1)ContentProvider简介 当应用继承ContentProvider类 并重写该类用于提供数据和存储数据的方法 就可以向其他应用共享其数据 虽然使用其他方法也可以对外共享数据 但数据访问方式会因数据存储的方式而不同 如:采用文件方式对外共享数据 需要进行文件操作读写数据;采用sharedpreferences共享数据 需要使用sharedpreferences API读写数据 而使用ContentProvider共享数据的好处是统一了数据访问方式 2)Uri类简介 Uri uri Uri parse "content: com changcheng provider contactprovider contact" 在Content Provider中使用的查询字符串有别于标准的SQL查询 很多诸如select add delete modify等操作我们都使用一种特殊的URI来进行 这种URI由3个部分组成 “content: ” 代表数据的路径 和一个可选的标识数据的ID 以下是一些示例URI: content: media internal images 这个URI将返回设备上存储的所有图片 content: contacts people 这个URI将返回设备上的所有联系人信息 content: contacts people 45 这个URI返回单个结果(联系人信息中ID为45的联系人记录)   尽管这种查询字符串格式很常见 但是它看起来还是有点令人迷惑 为此 Android提供一系列的帮助类(在android provider包下) 里面包含了很多以类变量形式给出的查询字符串 这种方式更容易让我们理解一点 因此 如上面content: contacts people 45这个URI就可以写成如下形式:   Uri person ContentUris withAppendedId People CONTENT URI 45 ; 然后执行数据查询: Cursor cur managedQuery person null null null ; 这个查询返回一个包含所有数据字段的游标 我们可以通过迭代这个游标来获取所有的数据:">ContentProvider 1 适用场景 1 ContentProvider为存储和读取数据提供了统一的接口 2 使用ContentProvider 应用程序可以实现数据共享 3 android内置的许多数据都是使用ContentProvider形式 供开发者调用的 如视频 音频 图片 通讯录等 [更多]

2014-12-18

空空如也

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

TA关注的人

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