Kennem's Blog
  • 🏠主页
  • 🔍搜索
  • 📚文章
  • ⏱时间轴
  • 🔖标签
  • 🗂️分类
  • 🙋🏻‍♂️关于
主页 » 📚文章

💻技术

Android 配置文件常用配置项

Android 配置文件常用配置项 gradle.properties 常用配置 # 启用 AndroidX 支持 # 设置为 true,项目中将使用 AndroidX 库而不是旧版支持库(Support Libraries)。 # 如果你正在迁移到 AndroidX,确保设置此项为 true。 android.useAndroidX=true # 启用 Jetifier 工具 # 设置为 true,Jetifier 会自动将项目中使用的所有旧版 Android 支持库(Support Library)转换为 AndroidX 库。 # 如果你的项目或依赖项中包含旧版支持库,启用此项可以确保它们与 AndroidX 兼容。 android.enableJetifier=true # 启用数据绑定 V2 版本 # 设置为 true 时,启用数据绑定的 V2 版本,这会提供更高效的编译速度和更多的功能。 # 数据绑定 V2 相较于 V1 版本,在性能和功能上进行了优化。 android.databinding.enableV2=true # 禁用 Android 资源 ID 的动态修改 # 设置为 false 时,资源 ID 将会被标记为 final,不允许在运行时被修改。 # 默认值为 true,可以保证资源 ID 在编译时不可变。适用于大多数应用,除非有特殊需求。 android.nonFinalResIds=false # 启用 Gradle 守护进程 # 启用守护进程可以让 Gradle 在后台持续运行,从而加快构建速度。 # 这样 Gradle 在后续构建时不需要重新启动,减少启动时间。 org.gradle.daemon=true # 启用并行构建 # 设置为 true 时,Gradle 会并行执行多个模块的构建任务,从而提高构建效率。 # 对于多模块项目,开启此项能显著减少构建时间。 org.gradle.parallel=true # 启用构建缓存 # 启用构建缓存时,Gradle 会缓存之前构建的输出结果,避免重复构建相同的任务。 # 这有助于加快构建速度,尤其是在大项目中。 org.gradle.caching=true # 设置 Kotlin 代码风格为官方标准 # 默认情况下,Kotlin 会采用官方推荐的代码风格。设置此项为 official 以确保代码风格符合 Kotlin 官方的标准。 kotlin.code.style=official # 应用的版本代码 # 版本代码是一个整数,每次发布新版本时需要增加它,通常用来标识应用的版本。 # 版本代码用于区分应用的不同版本,Google Play 会根据版本代码进行版本更新的管理。 APP_VERSION_CODE=5663 # 应用的版本名称 # 版本名称是一个字符串,通常是用户可见的版本号,用于展示给用户。 # 版本名称通常采用类似 "1.0.0" 的格式,可以包含数字和字母。 APP_VERSION_NAME=11.7.0 # 应用的包名 # 包名是应用的唯一标识符,通常采用反向域名命名规范,如 com.example.app。 # 在发布到应用商店时,包名不能更改,因此需要为每个应用选择一个唯一的包名。 APP_PACKAGE=org.telegram.messenger # 是否为私有应用 # 设置为 true 时,表示这是一个私有应用,不会公开发布,通常用于企业内部应用或特殊用途的应用。 IS_PRIVATE=false # 发布密钥的密码 # 用于签名 APK 文件时使用的发布密钥的密码。为了保证应用的安全,发布密钥是非常重要的。 RELEASE_KEY_PASSWORD=android # 发布密钥别名 # 签名应用时需要指定密钥的别名。别名通常在创建密钥时设置,并且在后续的构建过程中使用。 RELEASE_KEY_ALIAS=androidkey # 发布密钥的存储库密码 # 这是存储签名密钥的文件(通常为 .keystore 文件)的密码。 RELEASE_STORE_PASSWORD=android # 设置 Gradle JVM 的最大堆内存 # 通过增加 JVM 堆内存的大小,可以提高 Gradle 构建的性能,特别是在大项目中。 # 这个配置项指定了 Gradle 为 JVM 分配的最大内存。这里设置为 4096MB。 org.gradle.jvmargs=-Xmx4096M # 启用 Gradle 守护进程 # 启用守护进程可以减少构建时的启动时间,因为 Gradle 在后台保持一个持久的进程。 # 守护进程有助于提高构建效率,特别是对大型项目。 org.gradle.daemon=true # 启用并行构建 # 启用并行构建时,Gradle 会并行执行多个模块的构建任务。 # 这有助于加快多模块项目的构建速度。 org.gradle.parallel=true # 启用按需配置 # 设置为 false 时,Gradle 会在构建时配置所有模块。设置为 true 时,Gradle 会只配置当前构建任务所需要的模块,减少配置时间。 # 如果你有多个模块且不需要配置全部模块时,可以考虑启用按需配置以加速构建过程。 org.gradle.configureondemand=false # 启用 AndroidX # 启用 AndroidX 后,所有的支持库都会被替换为 AndroidX 库。建议新项目始终使用 AndroidX。 android.useAndroidX=true # 启用 BuildConfig 生成 # 设置为 true 时,Gradle 会生成一个名为 BuildConfig 的类,它包含与构建相关的信息(如版本号、构建类型等)。 # 这在访问这些信息时非常方便,可以用于配置和调试。 android.defaults.buildfeatures.buildconfig=true # 禁用非传递 R 类 # 设置为 false 时,Android 编译系统会为每个模块生成一个 R 类,允许模块间访问资源。 # 如果设置为 true,则该模块的 R 类不会传递给其他模块。 android.nonTransitiveRClass=false # 禁用资源 ID 的动态修改 # 设置为 false 时,资源 ID 会被标记为 final,确保资源 ID 在编译时不可变。 # 如果你希望在运行时修改资源 ID,则可以将其设置为 true。 android.nonFinalResIds=false # 启用 R8 完整模式 # 设置为 true 时,启用 R8 的完整模式,R8 是 Android 构建工具链中的代码压缩器和混淆器。 # 完整模式会尝试更优化地压缩和混淆代码,通常能显著减少 APK 的大小。 android.enableR8.fullMode=true

2025-02-15 · 4 分钟 · 1715 字 · updated: 2025-02-15 · ShowGuan

LeetCode每日一题(202502)

每日一题(202502) 0201 81. 搜索旋转排序数组 II 题目大意 给定一个旋转排序数组 nums 和一个目标值 target,判断目标值是否存在于数组中。需要尽可能减少操作步骤。 解题思路 旋转数组特点:旋转后数组分为两部分,其中一部分是有序的。 使用二分查找: 判断左半部分是否有序,如果有序,判断目标值是否在这部分。 否则,判断右半部分是否有序,并进行类似操作。 处理重复元素:如果 nums[left] == nums[mid] == nums[right],无法确定哪部分有序,直接移动指针。 代码实现 class Solution: def search(self, nums: List[int], target: int) -> bool: if not nums: return False n = len(nums) if n == 1: return nums[0] == target l, r = 0, n - 1 while l <= r: mid = l + r >> 1 if nums[mid] == target: return True if nums[l] == nums[mid] and nums[mid] == nums[r]: l += 1 r -= 1 elif nums[l] <= nums[mid]: if nums[l] <= target < nums[mid]: r = mid - 1 else: l = mid + 1 else: if nums[mid] < target <= nums[n - 1]: l = mid + 1 else: r = mid - 1 return False 0202 MarsCode 每日一题 红色格子染色方案数计算 1. 题目大意 有一个长度为 n 的格子,一部分已染红,剩余格子未染色。通过特定的规则(红色格子可以染色左右邻居),我们需要计算将所有格子染红的不同染色顺序。最终返回结果对 10^9 + 7 取模。 ...

2025-02-02 · 2 分钟 · 730 字 · updated: 2025-02-02 · ShowGuan

黑马头条(6)

黑马头条(6) Kafka概述 消息中间件 建议 Kafka 追求高吞吐量,适合产生大量数据的互联网服务的数据收集业务 RocketMQ 可可靠性要求很高的金融互联网领域,稳定性高,经历了多次阿里双11考验 RabbitMQ 性能较好,社区活跃度高,数据量没有那么大,优先选择功能比较完备的RabbitMQ Kafka是一个分布式流媒体平台,类似于消息队列或企业消息传递系统 ...

2025-01-31 · 6 分钟 · 2888 字 · updated: 2025-01-31 · ShowGuan

Go 开发框架三件套

Go 开发框架三件套 1. Gorm - 强大的 ORM 框架深度扩展 1.1 基本使用增强版 1.1.1 完整 CRUD 操作示例 // 创建记录(批量插入) users := []User{ {Name: "Alice", Age: 25}, {Name: "Bob", Age: 30}, {Name: "Charlie", Age: 35}, } db.Create(&users) // 一次性插入所有记录 // 查询记录(带条件) var activeUsers []User db.Where("status = ? AND age > ?", "active", 25). Order("created_at desc"). Limit(10). Offset(0). Find(&activeUsers) // 更新多个字段 db.Model(&User{}).Where("role = ?", "admin"). Updates(map[string]interface{}{ "age": 40, "status": "inactive", }) // 删除记录(带条件) db.Where("email LIKE ?", "%@test.com").Delete(&User{}) 1.1.2 高级查询技巧 // 子查询 subQuery := db.Select("AVG(age)").Where("department = ?", "IT").Table("users") db.Where("age > (?)", subQuery).Find(&users) // 原生 SQL 执行 db.Exec("UPDATE users SET balance = balance * ? WHERE level > ?", 1.1, 3) // 查询结果映射到自定义结构体 type UserProfile struct { Name string Email string } db.Model(&User{}).Select("name, email").Scan(&UserProfile{}) 1.2 软删除进阶实践 1.2.1 自定义删除字段 type CustomModel struct { ID uint `gorm:"primarykey"` CreatedAt time.Time UpdatedAt time.Time Deleted gorm.DeletedAt `gorm:"index;column:deleted_at"` } type Product struct { CustomModel Name string Price float64 } // 使用自定义删除字段 db.Where("price < ?", 100).Delete(&Product{}) 1.2.2 软删除与关联关系 type Company struct { gorm.Model Name string Products []Product `gorm:"foreignKey:CompanyID"` } // 级联软删除 db.Select("Products").Delete(&company) 1.3 事务管理增强 1.3.1 分布式事务示例(Saga模式) // 创建订单事务 err := db.Transaction(func(tx *gorm.DB) error { // 扣减库存 if err := tx.Model(&Inventory{}). Where("product_id = ?", order.ProductID). Update("quantity", gorm.Expr("quantity - ?", order.Quantity)). Error; err != nil { return err } // 创建订单 if err := tx.Create(&order).Error; err != nil { return err } // 调用支付服务(外部系统) if err := paymentClient.Charge(order.Total); err != nil { return err // 自动回滚 } return nil }) 1.3.2 事务隔离级别配置 // 设置事务隔离级别为可重复读 tx := db.Set("gorm:query_options", "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ").Begin() // 在事务中执行操作 tx.Model(&User{}).Where("id = ?", 1).Update("balance", gorm.Expr("balance - ?", 100)) tx.Commit() 1.4 Hook 全生命周期管理 1.4.1 完整 Hook 列表及执行顺序 type Order struct { gorm.Model Status string TotalPrice float64 } // 创建流程 func (o *Order) BeforeCreate(tx *gorm.DB) error { o.Status = "pending" return nil } func (o *Order) AfterCreate(tx *gorm.DB) error { tx.Model(o).Update("order_no", generateOrderNo()) return nil } // 更新流程 func (o *Order) BeforeUpdate(tx *gorm.DB) error { if o.Status == "shipped" { o.TotalPrice *= 1.1 // 增加运费 } return nil } 1.4.2 审计日志实现 func (u *User) BeforeUpdate(tx *gorm.DB) error { if tx.Statement.Changed("Email") { oldEmail := tx.Statement.Old("Email").(string) newEmail := tx.Statement.New("Email").(string) audit := AuditLog{ UserID: u.ID, Action: "UPDATE_EMAIL", OldValue: oldEmail, NewValue: newEmail, } tx.Create(&audit) } return nil } 1.5 性能优化深度指南 1.5.1 连接池最佳配置 sqlDB, err := db.DB() if err != nil { panic("failed to get database handle") } // 连接池配置 sqlDB.SetMaxIdleConns(20) // 空闲连接数 sqlDB.SetMaxOpenConns(100) // 最大打开连接数 sqlDB.SetConnMaxLifetime(time.Hour) // 连接最大生命周期 sqlDB.SetConnMaxIdleTime(30*time.Minute) // 空闲连接最大存活时间 1.5.2 索引优化策略 type Product struct { gorm.Model SKU string `gorm:"index:idx_sku,unique"` Category string `gorm:"index:idx_category"` Price float64 } // 复合索引 db.Model(&Order{}).AddIndex("idx_status_created", "status", "created_at") // 表达式索引(PostgreSQL) db.Exec("CREATE INDEX idx_lower_name ON users ((lower(name)))") 1.6 生态扩展实践 1.6.1 常用插件示例 // 分页插件 import "gorm.io/plugin/pagination" db.Use(pagination.Register) var users []User result := db.Scopes(pagination.Paginate(page, pageSize)).Find(&users) // 数据加密插件 import "github.com/go-gorm/gorm/v2/plugin/crypto" db.Use(crypto.NewCryptoPlugin(crypto.Config{ Keys: [][]byte{[]byte("32-byte-long-secret-key-here")}, })) 1.6.2 多数据库支持 // MySQL 配置 mysqlDB, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) // PostgreSQL 配置 postgresDB, err := gorm.Open(postgres.Open(dsn), &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: "tbl_", }, }) // SQLite 配置 sqliteDB, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{ DisableForeignKeyConstraintWhenMigrating: true, }) 1.7 高级特性 1.7.1 多租户架构实现 // 基于 schema 的多租户 db.Use(multitenancy.New(multitenancy.Config{ TenantKey: "X-Tenant-ID", Resolver: func(c *multitenancy.Context) string { return c.Request.Header.Get("X-Tenant-ID") }, })) // 自动路由到对应 schema db.Scopes(func(d *gorm.DB) *gorm.DB { return d.Table("tenant_" + tenantID + ".users") }) 1.7.2 版本化迁移 // 使用 Atlas 迁移工具 // 创建迁移文件 migrate create --dir migrations --format golang add_users_table // 执行迁移 migrate apply --dir migrations --dialect mysql 1.8 最佳实践总结 查询优化: ...

2025-01-26 · 3 分钟 · 1427 字 · updated: 2025-01-26 · ShowGuan

Go 并发与依赖管理

Go 并发与依赖管理 01 并发与并行 Go 语言以简洁、轻量级的方式支持并发编程,通过 Goroutine 和 Channel 可以充分利用多核 CPU,提高程序执行效率。理解 Go 的并发模型对于写出高效、稳定的程序至关重要。 ...

2025-01-25 · 11 分钟 · 5139 字 · updated: 2025-01-25 · ShowGuan

Go 高质量编程与性能调优

Go 高质量编程与性能调优 本文深入探讨 Go 语言的高质量编程和性能调优,结合具体示例,帮助你编写正确可靠、简洁清晰的代码,并掌握性能优化的核心方法。 01 高质量编程 高质量代码的目标是正确可靠、简洁清晰。以下是实现高质量编程的关键点。 ...

2025-01-25 · 7 分钟 · 3462 字 · updated: 2025-01-25 · ShowGuan

Go 内存管理与编译器优化

Go 内存管理与编译器优化 本文深入探讨 Go 语言的自动内存管理、垃圾回收机制以及编译器优化技术,结合具体示例和流程图,帮助你理解 Go 内存管理的核心原理和性能优化方法。 ...

2025-01-25 · 7 分钟 · 3196 字 · updated: 2025-01-25 · ShowGuan

LeetCode每日一题(202501)

每日一题(202501) 0124 2944. 购买水果需要的最少金币数 1. 题目大意 给定一个整数数组 prices,其中 prices[i] 表示购买第 i 个水果所需的金币数。每购买一个水果后,可以根据一定的规则免费获得后续水果。规则是:购买第 i 个水果后,可以免费获得下标在 [i+1, i+i] 范围内的水果。你的目标是通过选择购买一些水果,最小化总花费,同时确保获得所有水果。 ...

2025-01-25 · 3 分钟 · 1298 字 · updated: 2025-01-25 · ShowGuan

Go语言基础

Go语言基础 1. Go语言概述 高性能:适合并发编程,支持高并发、高性能场景。 简洁语法:Go的语法简洁,快速上手,去除了复杂的面向对象特性,保留了函数式编程的一些优势。 丰富标准库:内建强大的标准库,支持网络、文件操作、并发等。 静态链接:生成独立的可执行文件,无需依赖外部库,简化部署。 跨平台:支持Linux、Windows、macOS等多个平台。 垃圾回收:自动管理内存,减少开发人员的负担。 2. 环境搭建 Go安装:官方安装指南 推荐IDE:VSCode、GoLand,或者Gitpod等云开发环境。 Go Module go.mod:用于管理 Go 项目的依赖,记录模块路径、Go 版本和所依赖的包及其版本。 ...

2025-01-25 · 20 分钟 · 9558 字 · updated: 2025-11-02 · ShowGuan

黑马头条(5)

黑马头条(5) 文章定时发布 延迟任务 DelayQueue JDK自带 DelayQueue 是一个支持延时获取元素的阻塞队列,内部采用优先队列 PriorityQueue 存储元素,同时元素必须实现Delayed接口;在创建元素时可以指定多久才可以从队列中获取当前元素,只有在延迟期满时才能从队列中提取元素。 ...

2025-01-19 · 5 分钟 · 2048 字 · updated: 2025-01-19 · ShowGuan

Linux扩展磁盘空间大小

Linux扩展磁盘空间大小 sda 在 Linux 中,sda 是系统中常见的块设备名称,用于表示磁盘设备。 sda 是系统中第一个 SCSI (Small Computer System Interface) 或 SATA (Serial ATA(Advanced Technology Attachment)) 磁盘的标识符,通常代表硬盘或固态硬盘。 在 Linux 系统中,所有的存储设备(如硬盘、SSD、U盘)都会被标记为块设备,使用类似 sdX 的命名规则,其中: sd 表示 SCSI/SATA 设备(尽管现在也适用于大多数现代磁盘,包括 NVMe 磁盘)。 a 表示第一个磁盘,b 是第二个磁盘,c 是第三个磁盘,依此类推。 sda 的分区** 磁盘(如 sda)可以被分成多个分区,每个分区也有自己的标识符。例如: ...

2025-01-04 · 4 分钟 · 1839 字 · updated: 2025-02-04 · ShowGuan

信息论基础项目 && Matlab实现

信息论基础项目 && Matlab实现 本项目是《信息论基础》课程的大作业,涵盖了常用无失真信源编码(如香农编码、费诺编码和哈夫曼编码)、简单加密解密算法,以及文本压缩解压功能的设计与实现。 项目展示了信息论在高效数据处理和安全传输中的实际应用。 ...

2025-01-01 · 2 分钟 · 973 字 · updated: 2025-01-01 · ShowGuan

黑马头条(4)

黑马头条(4) 自媒体文章审核 文章数据流 审核方式 自动审核 文章发布之后,系统自动审核,主要是通过第三方接口对文章的内容进行审核(成功、失败、不确定) 人工审核 待自动审核返回不确定信息时,转到人工审核,由平台管理员进行审核 ...

2024-12-28 · 4 分钟 · 1963 字 · updated: 2024-12-28 · ShowGuan

Firebase使用

Firebase Firebase 教程:https://firebase.google.com/codelabs/firebase-android?hl=zh-cn#1 依赖项 build.gradle.kts plugins { id("com.android.application") version "8.7.3" apply false id("com.android.library") version "8.7.3" apply false id("org.jetbrains.kotlin.android") version "2.1.0" apply false id("com.google.gms.google-services") version "4.4.2" apply false } app/build.gradle.kts dependencies{ // Google implementation("com.google.android.gms:play-services-auth:20.7.0") // Firebase implementation(platform("com.google.firebase:firebase-bom:33.6.0")) implementation("com.google.firebase:firebase-database") implementation("com.google.firebase:firebase-storage") implementation("com.google.firebase:firebase-auth") // Firebase UI implementation("com.firebaseui:firebase-ui-auth:8.0.2") implementation("com.firebaseui:firebase-ui-database:8.0.2") } 安装Firebase CLI npm install -g firebase-tools firebase login 本地启动Firebase模拟器 firebase emulators:start --project=demo-friendlychat-android Firebase本地调试 Firebase.database.useEmulator("10.0.2.2",gg 9000) Firebase.auth.useEmulator("10.0.2.2", 9099) Firebase.storage.useEmulator("10.0.2.2", 9199) 在app模块下放置 services.json ...

2024-12-17 · 1 分钟 · 176 字 · updated: 2024-12-17 · ShowGuan

LeetCode 1215 周赛

LeetCode 1215 周赛 当你思路对了,等最终调出来最多差两三分钟,但是代码有错误错一次就是五分钟。 T2 3387. 两天自由外汇交易后的最大货币数 1. 题目大意 你初始拥有 1 单位的指定货币 initialCurrency。在两天内,可以按照分别提供的汇率 rates1 和 rates2 进行任意次数的货币兑换。每种货币对的汇率可以反向兑换(汇率为 1/rate1/\text{rate}1/rate)。目标是经过两天后,使得最终持有的 initialCurrency 数量最大化。 ...

2024-12-15 · 6 分钟 · 2600 字 · updated: 2024-12-15 · ShowGuan
« 上一页  下一页  »
© 2026 Kennem's Blog · Powered by Hugo & PaperMod
👤 Visitors: 👀 Views: