自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

先知三日

富贵十年

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

原创 Android 系统 APK 分区与权限

Android 系统 APK 分区存放剖析-你的apk应该放在哪里?_安卓手机预装软件存在哪个分区-CSDN博客

2026-09-01 18:57:15 253

原创 adb常用命令

本文整理了Android调试桥(ADB)常用命令速查表,涵盖设备连接、文件传输、应用管理、日志调试等核心功能。重点包括:1)设备连接与root提权方法;2)APK安装卸载及数据清理;3)日志抓取技巧(c命令清缓存);4)屏幕操作模拟(点击/滑动/输入);5)系统诊断命令(内存/CPU/版本号查询)。特别标注了车载系统调试中的关键命令⭐,如批量安装应用时需先remount、通过getprop确认车机版本等。全文采用分类速记形式,便于开发者快速查阅高频操作。

2026-08-11 09:49:25 186

转载 Android跨进程通信:图文详解 Binder机制 原理

binder转载

2026-08-03 15:29:47 12

原创 RecyclerView点击事件之回调机制解析

本文通过RecyclerView点击事件阐述了回调机制的核心原理:接口引用+多态。关键步骤为:1.定义接口规定契约;2.Adapter持有接口引用但不实现;3.Activity实现接口并通过构造函数注入Adapter。这种设计实现了控制反转,使Adapter与具体业务解耦,通过多态特性(接口引用指向实现类对象)完成事件转发。回调模式广泛适用于Android事件通信场景,体现了单一职责原则,是事件驱动编程的基础。

2026-08-03 15:22:40 206

原创 基于cameraX补充全屏/缩放功能

这段代码实现了一个双摄像头预览功能,包含以下核心功能: 双屏显示切换逻辑:通过toggleFullScreen方法实现点击切换全屏/半屏模式,支持前后摄像头视图的权重动态调整 权限处理:使用最新的ActivityResultLauncher处理相机权限请求,包括权限被拒时跳转设置页面 摄像头绑定:异步绑定前后摄像头预览到对应的PreviewView,支持双摄并发预览 异常处理:捕获硬件不支持双摄等异常情况 关键特性包括权重动态调整(1f/100f)、视图可见性控制,以及通过currentFullScreen

2026-07-23 09:46:05 33

原创 使用 CameraX 框架实现双摄并发预览

本文详细解析了使用CameraX框架实现双摄并发预览(同时开启前后摄像头)的现代方案。代码通过addListener异步调用确保UI流畅,采用UseCaseGroup打包多个预览用例实现硬件协调,并利用bindToLifecycle实现生命周期自动管理。关键点包括:异步获取相机服务、清理旧状态防冲突、独立构建预览用例、用例组统一绑定生命周期,以及完善的异常处理机制。相比传统Camera2API,该方案结构更清晰,具有自动防卡顿、硬件限制优雅处理和内存泄漏防护等优势,特别适合需要多摄像头协同的现代Androi

2026-07-22 15:12:39 384

原创 Activity和Fragment 生命周期

摘要: Activity与Fragment的生命周期核心区别在于: Fragment多出视图管理步骤:onAttach()绑定Activity,onCreateView()加载UI(区别于Activity的onCreate()直接setContentView),销毁时先执行onDestroyView()移除UI,最后onDetach()解绑。 关键同步节点:onStart()/onResume()等可见与交互状态与Activity同步,但Fragment需确保宿主Activity就绪(onActivityC

2026-07-21 15:40:38 561

原创 IDEA 和 Android studio通用快捷键(好久不见)

这篇摘要整理了MacOSX和Windows/Linux系统下常用的代码编辑快捷键对比,包括智能提示、代码注释、格式化、查找替换、代码移动等常用操作。Mac使用Cmd键为主,Windows/Linux使用Ctrl键为主,部分功能配合Option/Alt键实现。还包含特定功能如清除无效引用、重写方法、代码封装等操作的快捷键。这些快捷键能显著提升代码编辑效率,适合开发者快速查阅不同系统环境下的对应操作方式。

2026-07-21 15:21:17 233

原创 @RequestPart和@RequestParam 区别和联系

RequestParam 和 @RequestPart 都是 Spring 框架中用于将 HTTP 请求中的数据绑定到控制器方法参数上的注解,但它们适用于不同的请求数据类型和场景。

2024-07-17 11:00:52 1512

原创 拦截器配置及原理

自定义拦截器要实现HandlerInterceptor,如果用户通过输入url直接访问某个页面这样就跳过了登录步骤,因此可以使用自定义拦截器,在请求到达controller之前,执行preHandle方法,在里边自定义逻辑来校验用户是否登录,进而达到登录检查的目的。/*** 登录检查* 1、配置好拦截器要拦截哪些请求* 2、把这些配置放在容器中*/@Slf4j/*** 目标方法执行之前* @return*/@Override。

2024-07-15 11:43:13 525

原创 内容协商源码解析与自定义 MessageConverter

实现多协议数据兼容。如何新增一个自定义的xx-media格式?使用spring boot可以基于配置文件快速修改媒体类型。spring:mvc:# 开启请求参数内容协商模式# 修改parameterName,默认为format# 自定义媒体类型或者如果不修改xml文件,还可以通过重写configureContentNegotiation方法来实现。

2024-07-10 15:57:27 1400

原创 @MatrixVariable注解

MatrixVariable 是 Spring MVC 提供的一个注解,用于处理 URI 路径中的矩阵变量。矩阵变量可以在URL路径段中使用分号(;)分隔键值对(例如 /path;name=value),这种方式可以用来传递额外的数据而不影响URL的层次结构。

2024-07-04 09:30:50 641

原创 DBeaver导入sql脚本报错java.io.IOException: Process failed (exit code = 1). See error log.

编码不一致,sql脚本文件是utf8编码,而mysql默认以gbk编码连接数据库。

2024-07-02 09:21:56 4311 3

原创 v-for中key的原理以及用法

key 的使用是 Vue 中管理动态列表非常重要的一个方面,它确保了列表渲染的性能和正确性。在使用 v-for 时,总是推荐为每个项指定一个唯一的 key 值,通常是每个项的唯一标识符,如 ID 或者其他唯一字段。这样可以帮助 Vue 更有效地更新和管理 DOM。

2024-06-27 14:44:32 1110

原创 Springboot中的静态资源配置

spring:resources:静态资源目录不仅可以是classpath下的目录,也可以是本地磁盘目录,使用前缀进行配置,如:还可以配合${}语法,从环境变量、系统属性中读取目录信息,例如,设置应用启动目录下的public目录为静态资源目录:# ${user.dir} 的值也就是 System.getProperty("user.dir")Faviconfavicon.ico 放在静态资源目录下即可。

2024-06-26 17:10:06 1964

原创 一文搞定yaml文件

YAML 是 "YAML Ain't Markup Language"(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言)。非常适合用来做以数据为中心的配置文件。

2024-06-26 10:45:59 488

原创 Springboot2自动配置原理

虽然我们127个场景的所有自动配置启动的时候默认全部加载。SpringBoot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先。使用@import将AutoConfigurationPackages包下的。作为组件导入到容器中,然后使用Registrar中的方法批量完成组件的注册。按照条件装配规则(@Conditional),最终会按需配置。代表当前是一个配置类。指定扫描哪些,Spring注解;

2024-06-25 11:01:54 553

原创 Springboot2容器功能

我们习惯将经常爱变化的东西写在.properties配置文件中,比如与数据库相关的信息(连接池、URL等)配置到配置文件中,为了方便我们会将配置文件中的内容解析到JavaBean中。如何使用Java读取到properties文件中的内容,并且把它封装到JavaBean中,以供随时使用;下面代码是比较复杂的使用,用ConfigurationProperties可以简化该过程。下面的代码展示的是原来Spring用xml文件的方式配置bean的方式。配置的prefix,是配置文件中前缀对应的属性。

2024-06-24 15:41:47 424

原创 Springboot2依赖管理与自动配置

主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来。

2024-06-24 15:21:05 268

原创 SpringBoot2入门

需求:浏览发送/hello请求,响应 Hello,Spring Boot 2。把项目打成jar包,直接在目标服务器执行即可。直接运行main方法。

2024-06-24 14:58:03 335

原创 聊聊CSS中的Position

这时,浏览器会按照源码的顺序,决定每个元素的位置,这称为"正常的页面流"(normal flow)。每个块级元素占据自己的区块(block),元素与元素之间不产生重叠,这个位置就是元素的默认位置。定位的元素会被"正常页面流"忽略,即在"正常页面流"中,该元素所占空间为零,周边元素不受影响。这四个属性一起使用,表示元素的初始位置是基于视口计算的,否则初始位置就是元素的默认位置。表示,相对于上级元素(一般是父元素)进行偏移,即定位基点是父元素。定位,所以子元素的定位基点是父元素,相对于父元素的顶部向下偏移。

2024-06-21 11:42:24 759

原创 JavaScript保留两位小数

2. 舍入规则:toFixed 方法会按照四舍五入的规则进行舍入,这可能会导致一些意外的结果。4. 处理特殊值:在处理特殊值如 NaN 或 Infinity 时,toFixed 方法可能会返回 "NaN" 或 "Infinity" 字符串,需要额外处理。因此,在需要保留小数位的情况下,需要额外的除法操作来得到保留小数位的结果。1. 舍入规则:Math.round 方法会按照标准的四舍五入规则进行舍入,这意味着小数部分大于等于 0.5 时会向上舍入,小于 0.5 时会向下舍入。

2024-06-19 16:31:30 820

原创 浅谈JavaScript中的对象赋值

3. Object.assign() 方法(浅拷贝):this.info = Object.assign({}, this.deviceInfo),使用 Object.assign() 方法将一个或多个源对象的属性复制到目标对象,也是实现浅拷贝的一种方式。2. 对象扩展(浅拷贝):this.info = {...this.deviceInfo},使用对象扩展语法创建一个新对象,包含原对象的所有属性和值,但是它们引用不同的对象。这些是常见的对象赋值方式,每种方式都有不同的特点和适用场景。

2024-06-04 14:40:22 1065

原创 实现公网数据传输给内网(使用frp)

如果你想在内网设备2上运行 FRP 服务器端(frps),在内网设备3上运行 FRP 客户端(frpc),并使用公网设备1来完成数据传输,你需要通过公网设备1来访问设备2,然后设备2再转发请求到设备3。这种情况下,公网设备1实际上充当了一个转发或接入点的角色。

2024-03-29 16:50:12 1120

原创 shell脚本执行需要sudo权限的命令,如何避免人工输入密码

然而,需要强调的是,这种做法在安全性方面存在明显的风险,特别是在生产环境中。密码以明文形式出现在命令行或脚本中,可能会被恶意用户利用。因此,虽然这种方法在某些场景下看起来方便快捷,但在实际应用中应当尽量避免,特别是在涉及敏感或安全性要求高的环境中。更推荐的做法是使用无密码sudo配置(通过编辑/etc/sudoers文件),或者使用密钥认证等更安全的认证方式。该命令在Unix或Linux系统中用于以超级用户(root)权限执行命令,而不需要通过标准的sudo密码提示手动输入密码。

2024-03-29 14:30:56 2028

原创 Linux chown命令详解

命令用于设置文件所有者和文件关联组的命令。Linux/Unix 是多人多工操作系统,所有的文件皆有拥有者。利用 chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户 ID,组可以是组名或者组 ID,文件是以空格分开的要改变权限的文件列表,支持通配符。。chown 需要超级用户 root 的权限才能执行此命令。只有超级用户和属于组的文件所有者才能变更文件关联组。非超级用户如需要设置关联组可能需要使用命令。: root。

2024-03-29 14:11:07 1048

原创 ssh远程如何使用密钥免密码登录(配置过程)

配置完后,就可以在客户端使用密钥ssh服务器了,使用如下方法,还可以使用外部程序,控制服务端的重启、关机功能。但是存放在什么位置呢?我这边是放到了服务端用户目录下的xx目录/.ssh目录下,并将id_rsa.pub(公钥)文件改名为authorized_keys。本博客主要阐述客户端和服务端都是用管理员(不是超级管理员)账号如何配置客户端文件、目录等,以及如何解决一些由于权限问题导致配置失败的问题。生成公钥和私钥,在.ssh/目录下,会新生成两个文件:id_rsa.pub(公钥)和 id_rsa(私钥)。

2024-03-27 22:02:24 523

原创 如何查看zip文件的MD5码

要查看zip文件的MD5码,你可以使用不同的方法,具体取决于你使用的操作系统。

2024-03-20 16:45:55 5180 1

原创 InnoDB存储引擎中的锁(整理)

在数据库中锁是为了解决资源争抢的问题,锁是数据库系统区别于文件系统的一个关键特性。锁机制用于管理对共享资源的并发访问。数据库系统使用锁是为了支持对共享资源进行并发访问,提供数据的完整性和一致性。InnoDB存储引擎区别于MyISAM的两个重要特征就是:InnoDB存储引擎支持事务和行级别的锁,MyISAM只支持表级别的锁。

2024-03-20 15:02:54 1076

转载 MySQL中如何实现事务提交和回滚

事务是由数据库中一系列的访问和更新组成的逻辑执行单元事务的逻辑单元中可以是一条SQL语句,也可以是一段SQL逻辑,这段逻辑要么全部执行成功,要么全部执行失败举个最常见的例子,你早上出去买早餐,支付宝扫码付款给早餐老板,这就是一个简单的转账过程,会包含两步从你的支付宝账户扣款10元早餐老板的账户增加10元这两步其中任何一部出现问题,都会导致整个账务出现问题假如你的支付宝账户扣款10元失败,早餐老板的账户增加成功,那你就Happy了,相当于马云请你吃早餐了,O(∩_∩)O哈哈~

2024-03-19 16:25:42 138 1

原创 数据库中DQL、DML、DDL、DCL的概念与区别

数据库语言可以根据其功能被分为几个不同的类别:DQL(数据查询语言)、DML(数据操纵语言)、DDL(数据定义语言)和DCL(数据控制语言)。这些类别反映了数据库管理系统中执行的不同类型的操作。

2024-03-18 15:36:50 1080

原创 索引相关知识总结

当查询的数据,在索引树中找不到的时候,需要通过非主键索引获取主键,再到主键索引树中去获取所要查询的记录,这个过程叫回表。如:select * from Table where age = 22;通过执行计划(explain)的Extra字段值,可以看到当前sql是否进行了回表,如果Extra字段值为Using index则表示当前查询通过覆盖索引可以获取到,无需通过回表查询记录。select的数据列只用从索引中就能够取得,不必回表,换句话说:查询列要被所建的索引覆盖。最左前缀匹配原则。

2024-03-11 15:24:15 732

转载 聊聊cpu个数、核数、线程数

是只把多个核心直接封装在一起,比如Intel早期的PD双核系列,就是把两个单核直接封装在一起,但两核心只能共同拥有一条前端总线,在两个核心满载时,两个核心会争抢前端总线,导致性能大幅度下降,所以早期的PD被扣上了“高频低能”的帽子,要提高封装多核的性能,在多任务的高压下尽量减少性能损失,只能不断的扩大前端总线的总体大小,来弥补多核心争抢资源带来的性能损失,但这样做只能在一定程度上弥补性能的不足,和原生的比起来还是差了很多,而且后者成本比较高,优点在于多核心的发展要比原生快的多。,是CPU最重要的组成部分。

2024-03-05 14:08:26 4678

原创 drop、delete与truncate

truncate, drop是ddl(数据定义语言),操作立即生效,原数据不放到rollback segment中,不能回滚,操作不触发trigger。则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。(5)当表被truncate后,这个表和索引所占用的空间会恢复到初始大小,delete操作不会减少表或索引所占用的空间。执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。delete可以是table和view。

2024-02-27 17:05:04 914

原创 MySQL表分区技术介绍

分区功能并不是在存储引擎层完成的,因此不是只有 InnoDB 存储引擎支持分区,常见的存储引擎 MyISAM、NDB 等都支持。但也并不是所有的存储引擎都支持,如CSV, FEDORATED, MERGE等就不支持。在使用分区功能前,应该对选择的存储引擎对分区的支持有所了解。MySQL数据库在5.1版本时添加了对分区的支持。分区的过程是将一个表或索引分解为多个更小、更可管理的部分。就访问数据库的应用而言,从逻辑上讲,只有一个表或一个索引,但是在物理上这个表或索引可能由数十个物理分区组成。

2024-02-27 14:50:09 2744

原创 InnoDB的逻辑存储结构(表、段、区、页、行)

InnoDB存储引擎是面向列(row-oriented)的,也就是说数据是按行来进行存放的(数据表中的一行),而每个页的存放的行记录也是有硬性定义的,最多允许存放7992数量的行记录(计算公式为16 * 1024 /2 - 200,16是指页的大小为16KB)。其实这是因为,在每个段开始时,会先用32个页大小的碎片页来存放数据,在使用完这些碎片页才会进行区的申请(直接申请4~5个区),这样做的目的在于,对于一些小表,可以在开始时就占用比较少的空间,节省磁盘容量的开销。

2024-02-26 15:04:21 1229

原创 InnoDB特性之两次写(Double Write)

在对缓冲池的脏页进行刷新时,并不直接写磁盘,而是会通过memcpy函数将脏页先复制到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次,每次1MB顺序地写入共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘,避免缓冲写带来的问题。这样就可以解决上文提到的部分写失效的问题,因为在磁盘共享表空间中已有数据页副本拷贝,如果数据库在页写入数据文件的过程中宕机,在实例恢复时,可以从共享表空间中找到该页副本,将其拷贝覆盖原有的数据页,再应用重做日志即可。

2024-02-22 11:44:53 794

原创 网络编程知识整理

器的T C P端口号都是 2 1,每个Te l n e t服务器的 T C P端口号都是 2 3,每个T F T P (简单文件传送协议)服务器的 U D P端口号都是 6 9。在T C P / I P协议族中,网络层协议包括 I P协议(网际协议),I C M P协议(I n t e r n e t互联网控制报文议),以及IGMP协议(Internet组管理协议)。在 T C P / I P领域中,域名系统( D N S)是一个分布的数据库,由它来提供 I P地址和主机名之间的映射信息。

2024-02-21 10:55:08 1049

原创 日期与时间知识分享(时区、本地时间、时刻、夏令时等)

时间、时区、时刻、夏令时等知识分享。

2024-02-20 09:59:17 317

原创 字符串由数字和字母组合如何自定义排序

这段代码首先定义了一个字符串列表,然后使用Collections.sort()方法对其进行排序。在这个比较器中,我们首先使用正则表达式\\D(匹配任何非数字字符)来提取字符串中的数字部分,并将其转换为整数。然后,我们比较这两个数字。如果数字相同,我们就使用字符串的自然顺序(即字典顺序)来比较字母部分。要实现这个功能,你可以使用Java中的Collections.sort()方法,结合自定义的比较器(Comparator)。这个比较器首先会比较字符串中的数字部分,如果数字相同,则会比较字母部分。

2024-02-20 09:39:45 462

Android14座舱系统分区映射表与构建配置指南

Android14座舱系统分区映射表与构建配置指南

2026-09-01

空空如也

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

TA关注的人

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