自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++ 判断基类指针指向的真实对象类型

当项目允许RTTI时,我们可以使用和typeid运算符来判断一个基类指针指向的具体对象类型;当禁用RTTI时,我们就利用多态本身,为基类新增一个方法,用来获取类类型信息。

2023-08-27 17:33:02 699 2

原创 AI Chat 设计模式:15. 桥接模式

桥接模式(Bridge Pattern)是一种结构性设计模式,用于将抽象部分与其实现部分分离,使它们可以独立地变化。在桥接模式中,抽象部分和实现部分分别由两个独立的类层次结构组成,并且这两个层次结构可以独立地进行扩展。抽象部分包含高层业务逻辑,而实现部分包含低层实现细节。通过桥接模式,抽象部分和实现部分可以自由地组合,而不会受到固定的绑定关系的限制。桥接模式的核心思想是通过将继承关系替换为组合关系,解耦抽象和实现。

2023-08-15 17:04:38 1073

原创 AI Chat 设计模式:14. 适配器模式

适配器模式是一种常见的设计模式,用于将一个类的接口转换成客户端所期望的另一个接口。适配器模式允许原本不兼容的类能够合作,通过适配器充当中间层的角色来实现。适配器模式的主要目的是使得原本由于接口不匹配而无法工作的类可以进行协同工作。它封装了不兼容的接口,将其转换为符合客户端需求的另一个接口。通过适配器模式,客户端可以通过统一的接口与不同的类进行交互,而无需修改已有的代码。将一个已有的类与其他客户端一起使用,但是接口不符合需求。与多个类协同工作,而这些类具有不兼容的接口。

2023-08-13 20:25:38 675 1

原创 AI Chat 设计模式:13. 代理模式

代理模式的核心思想是通过引入代理对象来间接访问目标对象,从而实现对目标对象的控制和管理。这种设计模式在软件行业广泛应用,可以帮助实现解耦、增加安全性、提升性能等目标。

2023-08-08 21:43:33 495

原创 AI Chat 设计模式:12. 享元模式

享元模式是一种软件设计模式,用于提高系统的性能和内存利用率。该模式通过共享对象来减少内存消耗,特别是在大量对象需要同时存在的情况下。内部状态和外部状态。内部状态是不随外部环境变化而变化的状态,可以被多个对象共享;而外部状态则是随外部环境变化而变化的状态,每个对象都有自己的外部状态。具体而言,享元模式将对象的创建和管理分为两部分:共享的部分和独立的部分。共享的部分被封装在享元对象中,可以被多个具体对象共享,而独立的部分则由客户端管理。

2023-08-04 22:03:25 692

原创 AI Chat 设计模式:11. 状态模式

状态模式是一种行为型设计模式,它允许对象在其内部状态发生改变时改变其行为。该模式将对象的状态封装成独立的状态类,使得状态的变化可以彼此替换而不影响使用状态的对象。通过使用状态模式,可以实现状态转换和行为的解耦,使得代码更加可维护、可扩展和可复用。上下文(Context):上下文是包含了状态对象的环境类。它定义了一个接口,用于客户端和具体状态类之间的交互。抽象状态(State):抽象状态是一个接口或抽象类,定义了具体状态类需要实现的方法,并且为上下文对象提供一个统一的接口。

2023-08-03 22:45:08 830

原创 AI Chat 设计模式:10. 组合模式

组合模式是一种结构型设计模式,它允许将对象组合成树形结构,以表示“部分-整体”的层次关系。通过组合模式,客户端可以统一对待单个对象和组合对象,而无需进行区分。抽象构件(Component):它是组合中的对象声明接口,可以包含一些默认实现,比如添加、移除子构件等。它可以是抽象类或者接口。叶子构件(Leaf):它表示叶子节点,即没有子节点的对象。叶子构件实现了抽象构件的接口。组合构件(Composite):它表示有子节点的节点对象,可以添加和移除子节点。组合构件也实现了抽象构件的接口,并。

2023-07-28 22:56:05 559

原创 AI Chat 设计模式:9. 命令模式

命令模式是一种行为型设计模式,它将请求封装为一个对象,从而使不同的请求能够在客户端和接收者之间解耦。命令对象(Command)、调用者(Invoker)和接收者(Receiver)。命令对象封装了一个特定的请求和对应的操作,并提供了一个执行该操作的方法。命令对象通常具有一个执行操作的execute()方法,以及可能还有撤销操作的undo()方法。调用者充当请求的发送者和命令对象的执行者,它持有命令对象并调用其execute()方法来执行请求。调用者无需知道请求的具体细节,只需通过命令对象来执行请求。

2023-07-23 09:54:31 787 5

原创 AI Chat 设计模式:8. 门面(外观)模式

门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,用于统一封装子系统中的一组接口,并将其展示给客户端。门面模式的目的是通过隐藏子系统的复杂性,简化客户端与子系统之间的交互。在门面模式中,门面类(Facade Class)充当了一个中介者的角色,它知道如何处理客户端的请求,并将其委派给相应的子系统进行处理。门面类对外暴露的接口是简单的、易于理解的,客户端只需通过门面类与子系统进行交互,无需直接和子系统的各个组件打交道。简化客户端与子系统之间的交互。

2023-07-18 22:28:19 862 1

原创 AI Chat 设计模式:7. 单例模式

单例模式是一种设计模式,旨在**确保类只能有一个实例**,并提供全局访问点来获取该实例。这意味着无论在系统中的哪个位置,调用者获取到的都是同一个实例对象。

2023-07-15 13:26:02 1018 4

原创 AI Chat 设计模式:6. 装饰模式

装饰模式的核心思想是通过组合而非继承来扩展对象的功能,使得系统具有更好的灵活性和可扩展性。通过不同的装饰器的组合,可以实现不同的功能组合,而且**每个装饰器可以独立地进行扩展或修改**,不会影响到其他装饰器和原始对象。

2023-07-12 20:22:46 343 2

原创 AI Chat 设计模式:5. 策略模式

本文是该系列的第五篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的旁白。

2023-07-08 18:23:42 589

原创 AI Chat 设计模式:4. 建造者模式

建造者模式是一种创建型设计模式,它**将一个复杂对象的构建过程和其表示分离**,使得同样的构建过程可以创建不同的表示。这个模式的核心思想是将一个复杂的对象构建过程拆分成多个步骤,在这些步骤之间建立一定的依赖关系,最终生成一个完整的对象。

2023-07-04 22:37:34 688

原创 AI Chat 设计模式:3. 原型模式

原型模式是一种创建型设计模式,它通过**克隆现有的对象来创建新对象**。这种模式的关键在于提供一个原型对象,客户端通过克隆原型对象创建出新的对象。这样可以避免手工创建对象的复杂性,并**减少了重复的创建**过程,提高了系统的效率。

2023-06-19 21:12:46 1812 5

原创 AI Chat 设计模式:2. 工厂设计模式

工厂设计模式是一种创建型设计模式,旨在解决对象的创建和实例化过程中的一些问题。通常情况下,我们可以通过直接在代码中使用 new 关键字创建对象实例,但是在某些场景下,我们可能需要更加灵活、可扩展的创建方式,以简化代码并提高可维护性。工厂模式通过引入一个专门的“工厂”对象来创建和生成对象实例,从而将对象的创建和实例化过程完全隔离开来。这个“工厂”对象承担了所有的创建和实例化逻辑,客户端代码只需要向它提供所需的参数以及需要的对象类型,就能够得到一个完整的可用对象实例。工厂模式通常会包括一个工厂接口和。

2023-06-16 23:35:06 1261 2

原创 AI Chat 设计模式:1. 模板方法

模板方法设计模式(Template Method Design Pattern)是一种行为型设计模式。它的主要思想是定义一个算法的骨架,将某些步骤推迟到子类实现。它允许子类重写算法的某些步骤,同时保持算法的整体结构不变。模板方法设计模式由两个角色组成,分别是抽象类和具体子类。抽象类定义算法的骨架,包括一些抽象方法和模板方法。具体子类实现抽象方法,以便定制算法在特定情况下的行为。使用模板方法设计模式可以避免代码的重复,同时使得程序更加灵活,易于扩展。

2023-06-13 22:17:18 1032

原创 UML 简易使用教程

用例图、类图、时序图、状态机图这四种图形是最为常用的,需要熟练绘制理解。至于其他几种图形,在我的见识中,几乎没有使用过,能读懂即可,所以我写的也不很详细。

2023-04-16 23:29:42 2802 1

原创 c++ error:crosses initialization of 问题解决

`crosses initialization of` 翻译过来就是 `跳过了初始化`,根本原因是变量在其作用范围内,存在不被初始化的风险,解决思路有两个:一是明确限定变量的作用域;而是将初始化提前,避免不被初始化的发生。

2023-03-20 22:21:09 1684

原创 c++利用宏定义实现反射

反射是 java 的一个强大功能,我们往往有“”,也就是说通过字符串就可以获得类实例。这种需求在 c++ 中也是存在的,下面分享一下在 c++ 中通过宏定义来实现类似功能的思路。

2023-02-07 23:45:05 621

原创 想让 c++ 的 static 成员具有多态性

1. 我需要在页面上产生一系列的控件,就叫 widget 吧。这些控件除了`在点击时具有不同的表现之外`,其他行为都是相同,因此我考虑建立一个基类,用来控制这些相同的属性或行为。 2. 使用的这套 API,提供了对点击事件的监听,需要我自己设置静态回调方法,但是`没有办法向这个回调方法传参`。 3. 我需要控件在点击时具有不同表现,只能在回调方法里做文章,简单说,就是`根据控件名称做出不同响应`。

2022-11-13 15:26:28 442

原创 AMS:ActivityRecord 理解

将 ActivityRecord 比作人的出行记录,从源码中分析 ActivityRecord 记录的信息类型,对其进行了理解性探究。

2022-10-26 21:15:33 1290

原创 android.bp 使用

快速上手编写模块的 bp 文件,分析模块引用、变量的使用

2022-09-17 20:31:54 4680

原创 Git 使用记录

git 使用相关命令记录,持续更新。

2022-09-02 21:20:53 260

原创 samba 安装及配置

ubuntu环境下配置samba

2022-08-28 21:51:52 3037 2

原创 回顾总结之数据结构:5 哈希表

哈希表是根据 key value 来直接进行访问的数据结构(数组+链表),它通过把关键码值映射到表中一个位置来访问记录,加快查找速度。这个进行映射的函数叫做散列函数。

2022-07-06 21:16:03 406

原创 回顾总结之数据结构:4 栈

栈是一种先进后出的有序列表。限制元素的插入和删除只能在同一端,也即栈顶,另一端为固定的一端,被称为栈底。本文主要是介绍栈的数组实现和链表实现。

2022-06-29 17:34:16 180

原创 回顾总结之数据结构:3 链表

这篇主要回顾下,单链表和双链表增删查改的实现,链表操作一个基本点就是**先连结再拆除**。

2022-06-25 11:00:31 203

原创 回顾总结之数据结构:2 队列

队列是一个有序列表,遵循先入先出的原则。可以用链表或数组来实现。本文全部实现以及测试源码可在如下链接获取。[https://gitee.com/flying-morning/data-structure/tree/master/src/com/datastructure/queue]

2022-06-19 20:18:29 232

原创 回顾总结之数据结构:1 稀疏数组

稀疏数组能将一个二维数组进行压缩,节省存储空间。稀疏数组的列数固定为 3,对于原始数组中的某个有效元素,会对应稀疏数组中的一行,依次记录其在原始数组中的三个信息。其本质还是一个二维数组,因此也是非线性结构。.........

2022-06-19 14:39:19 104

原创 字符串指定字符反转

1 题目牛客网上的一道题目。给定两个字符串s1、s2,将 s1 中的包含在 s2 中的字符翻转。示例1输入"abcde","bcd"输出"adcbe"说明将'b','c','d'翻转 示例2输入"acbde","dc"输出"adbce"说明将'c','d'翻转 备注:s1,s2只包含小写字母s1,s2只包含小写字母1<=|s1|<=1e51<=∣s1∣<=1e51<=|s2|<=261<=∣s2∣<=26链接:h

2022-05-03 12:59:10 442

原创 AIDL 服务的发布 publishBinderService 和 获取 getService

在Frameworks 中使用 AIDL 服务,其发布和获取是两个重要方法,本文尝试探究其源码的实现。1 服务的发布方法publishBinderService该方法定义在 SystemService.java 中,有多个重载方法,最后都调到了下面这个方法。/frameworks/base/services/core/java/com/android/server/SystemService.java429 /**430 * Publish the service so

2022-05-02 18:52:33 2272

原创 在 Frameworks 中使用 AIDL

通过 Android 源码,举例说明了如何在 Frameworks 创建 AIDL 服务。

2022-05-01 23:06:43 1143

原创 ANR 学习笔记

接触 ANR 分析一段时间了,但在碰到相关问题的时候,总还是有一种生涩感,专门开篇博客,做一些文章阅读后的笔记吧,不断积累。一 ANR问题该如何分析?这篇文章极力推荐,虽然是 17 年的,但都是干货啊,想精简一下都难。主要总结了 ANR 日志的分析思路,给的例子也很是经典。1 ANR 分类广播ANRService ANRContentProvider ANRInput ANR面向系统:WatchDog产生ANR原因,如下几种:耗时操作自身服务阻塞系统阻塞内存紧张CPU资源抢占2

2022-04-23 22:06:42 2772 3

原创 android kswapd0 白话理解

Android 内存管理的一套机制很复杂,这里只是简单梳理一下kswapd0、swapniss、swap 是什么以及它们之间的关系。1 什么是 kswapd0简单来说,kswapd0 是一个进程,负责在 Android 系统内存紧张时进行内存回收。2 kswapd0 回收什么内存首先我们知道,Android 的内存分为匿名页和文件页。文件页:也即 File-backed Page,从名字理解,就是在磁盘上有文件对应的页,包括缓存、缓冲以及通过内存映射获得的页。脏页:当文件页被修改过后,并且暂时还

2022-04-21 23:16:30 3641

原创 systrace 基本使用

Systrace 是谷歌提供的一款工具,用于记录短期内的设备活动,是性能分析的利器。本文主要介绍 systrace 文件的抓取和简单的解析 systrace 图。首先我们要下载 platform-tools 工具包,这个是可以单独下载的。下载好后,在其中会有一个 systrace 目录,就是我们需要用到的。此外,python2.7 也是需要下载并配置的好的。工具准备好后,我们就正式进入 systrace 的使用介绍。systrace 基本使用1. 生成 systrace 文件2. 解析 systrace

2022-04-05 00:15:01 7267 1

原创 Android Handler 消息机制

每一个搞 Android 的对 Handler 应该都不陌生,网上大神的文章也是数不尽的。这篇文章是个人在学习 Handler 过程中的一些疑问的记录。1. 什么是 Handler,有什么作用Handler 首先是一个 java 类,定义在/frameworks/base/core/java/android/os/Handler.java。但一般提到 Handler 并不专指它自身,常用来代指 Android 中的消息处理机制,或者说线程间通信的工具,典型应用就是在子线程中更新 UI 线程。那么,很显然

2022-04-04 18:07:05 3199

原创 ADB 常用命令记录

adb 命令学习、记录,内存、cpu信息查看,日志获取

2022-03-30 23:22:42 1273

原创 Activity 启动流程和 UML 时序图

本文以启动的目标 Activity 所属进程不存在的情形为例,结合 Android12 源码,给出了整个过程的流程图,以及局部过程的时序图。

2022-03-29 22:36:45 4422

原创 Android系统启动流程及其路径浅析

Android 系统启动流程相关的文章很多,但初次学习查阅的过程中,总是找不到相关文件的路径以及调用的过程。因此本文旨在梳理出 Android 系统启动过程中的主干节点,理清整个过程中的方法调用和相关文件路径。正文基本按照系统的启动过程来排布,在此分享一个Android 源码在线查看工具,本文的代码都来源于此。http://aospxref.com/1 BootLoader1.1 加载 BootLoader在关机状态下,Android 系统是存放在 ROM 中,而系统的运行是在 RAM中,因此有将 系

2021-12-27 21:23:11 1920

原创 使用用 bat 脚本启动手机桌面 app

最近有将手机桌面上的app依次启动、退回到桌面的需求,学习了一波,下面和大家一起分享下。示例手机是小米10青春版。1. 设计思路开始想着用app的包名来启动,尝试了后发现太复杂,难以实现按桌面排布顺序依次启动。后来想到了玩游戏时用得自动点击脚本,我们启动app也可以按照桌面坐标来输出点击事件即可。所以需要做几件事:(1)获得桌面所有app的坐标;(2)循环进行点击事件;(3)一屏点击完后,滑动到下一屏。2. 实现2.1 获得桌面app所有坐标在屏幕上放满应用,启动 cmd,输入 adb shell

2021-10-22 22:57:31 3688

mysql8.0安装包

MySQL 8.0是一款流行的开源关系型数据库管理系统,具有广泛的应用和支持。该安装包资源为MySQL 8.0的最新版本,提供了稳定和高效的功能。 MySQL 8.0的安装包资源包含了MySQL数据库服务器、客户端工具和相关驱动,为用户提供了创建、管理和操作数据库的工具。安装包资源中还包含了各种附加组件和插件,可以扩展MySQL的功能和性能。 MySQL 8.0的安装包资源具有以下特点和优势: 1. 安全性强大:MySQL 8.0引入了许多安全性增强功能,如密码策略、安全连接等,保护用户的数据和隐私。 2. 性能优化:MySQL 8.0对查询执行进行了优化,引入了新的索引算法和查询执行引擎,提高了数据库的性能和响应速度。 3. 强大的功能扩展:MySQL 8.0支持多种数据类型、存储引擎和插件,可以满足不同应用场景的需求。 4. 高可用性和可扩展性:MySQL 8.0支持主从复制、故障转移和分布式架构,保证了数据库的高可用性和可扩展性。 5. 用户友好的管理工具:MySQL 8.0提供了一系列易于使用的管理工具,用户可以通过图

2023-08-09

空空如也

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

TA关注的人

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