自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android Studio & Flutter 构建命令完全指南

本文介绍了 Android 原生 Gradle 命令和 Flutter 构建命令的使用指南。主要内容包括: Android Gradle 命令部分: 推荐使用 gradlew 而非全局 gradle 基础命令(clean/tasks/dependencies) APK/AAB 打包命令 安装/卸载命令 编译检查和测试命令 多渠道打包和常用参数 Gradle 同步与依赖刷新: 手动同步命令和适用场景 与 clean 命令的区别 Flutter 构建命令部分: 通用基础命令(clean/pub get/run)

2026-07-17 21:23:21 437

原创 [安卓] 深度掌握Jetpack Compose:现代Android声明式UI革命

/ 传统命令式UI(基于View)) {// 命令式:明确告诉UI如何更新count++count" // 手动更新UI// 声明式UI(基于Compose)// 声明式:描述UI应该是什么样子Column {count")// 当count变化时,Compose会自动重组UI。

2026-02-13 11:00:00 2379

原创 [安卓] 深度掌握Android传统View系统:View、布局与关键控件全解析

自定义View需要注意哪些问题?正确处理padding和margin支持wrap_content和match_parent在onDraw()中避免创建对象处理触摸事件冲突考虑性能优化如何优化自定义View的性能?使用Canvas.clipRect()减少绘制区域启用硬件加速避免在onDraw()中分配内存使用invalidate(Rect)只重绘脏区域。

2026-02-13 10:30:00 1826

原创 [安卓] 深度掌握Android BroadcastReceiver:全局事件监听与响应

BroadcastReceiver是一种用于接收广播消息的组件,它允许应用监听系统级或应用级的事件,并在事件发生时执行相应的操作。广播是一种广泛使用的应用间通信机制。轻量级,生命周期短暂可以跨应用通信支持有序广播和无序广播可以设置优先级和权限控制。

2026-02-12 10:45:00 1225

原创 [安卓] 深度掌握Android ContentProvider:数据共享与安全管理

ContentProvider是Android中用于在不同应用程序之间共享数据的组件,它提供了一套标准化的接口,允许应用安全地访问其他应用的数据,同时保护数据的隐私和安全。数据封装:隐藏底层数据存储细节统一接口:提供标准的CRUD操作接口权限控制:通过权限机制保护数据安全数据共享:实现跨应用数据访问观察者模式:支持数据变化通知1. 数据库帮助类context,null,) {// 表名// 列名// 创建联系人表。

2026-02-12 10:45:00 1331

原创 [安卓] 深度掌握Android Service:后台任务与音乐播放实战

Service是Android四大组件之一,用于在后台执行长时间运行的操作,无需用户界面。理解Service的工作原理对于开发音乐播放器、文件下载、位置跟踪等应用至关重要。本文将深入探讨StartedService和Bound Service的区别,并通过完整的音乐播放器示例展示实际应用。

2026-02-11 11:00:00 1181

原创 [安卓] 深度掌握Android开发基础:资源、清单、结构与调试全解析

1.2 不同类型资源的使用1.2.1 字符串资源values/strings.xmlKotlin中使用字符串资源1.2.2 颜色资源values/colors.xmlcolor/button_state.xmlKotlin中使用颜色1.2.3 尺寸资源values/dimens.xmlvalues-sw600dp/dimens.xml(平板适配)Kotlin中使用尺寸1.2.4 样式和主题values/styles.xmlKotlin中使用样式二、AndroidManifest

2026-02-11 10:45:00 938

原创 [安卓] 深度掌握Android Intent:组件间通讯的全能信使

在Android开发中,Intent(意图)是组件之间进行通讯的核心机制,它就像一个全能信使,承载着组件的"意图",在各个组件之间传递消息。无论是启动Activity、Service,还是发送广播,都离不开Intent。今天我们就用Kotlin代码来深入剖析Intent的方方面面!

2026-02-10 11:00:00 1435

原创 [安卓] 深度掌握Android Activity:生命周期与核心机制全解析

Activity作为Android四大组件之首,是Android应用开发中最核心的界面载体。理解Activity的生命周期和运行机制,是构建稳定、高效Android应用的基石。今天我们就用Kotlin代码来彻底搞懂Activity的方方面面!

2026-02-10 10:30:00 1116

原创 [IDA] ida的下载及详细安装过程(附有下载链接)

(可能和下图不一样,会在OK选项前面出现选择框,此时,点击勾选,再点击OK即可,剩下步骤一样)夸:https://pan.quark.cn/s/d4ab7981b662。找到ida.exe 并双击,出现如图,点击OK。链接失效(可能会被和谐)可评论或私信我重发。有两个压缩包,任选其一即可。点击new,即可开始使用。

2026-02-09 11:58:17 842

原创 [kotlin] Kotlin委托属性与类型别名

委托属性是Kotlin中一项强大的特性,允许将属性的访问器逻辑委托给另一个对象处理。// 基本语法:by 关键字// 将属性p的getter/setter委托给Delegate实例// 委托类必须提供getValue和setValue方法private var storedValue: String = "默认值"println("获取属性${propertyname// 基本语法:by 关键字 class Example {

2026-02-09 11:55:01 1001

原创 [kotlin] Kotlin协程深度解析

协程不是线程,而是更轻量级的并发设计。// 协程 vs 线程// 创建10000个线程 - 可能导致内存不足或性能下降// println("线程 $i")// }// 创建10000个协程 - 轻松胜任launch {delay(1000) // 挂起协程,不阻塞线程println("协程i// 协程 vs 线程 fun compareConcepts() {

2026-02-07 11:00:00 641

原创 [kotlin] Kotlin泛型深度解析:从Java的通配符到Kotlin的优雅型变

Kotlin的泛型系统不是对Java泛型的简单包装,而是一次深刻的重新设计。通过out/in关键字,它让型变变得直观易懂;通过reified,它突破了类型擦除的限制;通过更简洁的语法,它减少了泛型编程的心智负担。从通配符到关键字:用out/in替代?extends/?super从擦除到实化:用reified获取运行时类型信息从复杂到简洁:用更少的代码表达相同的类型约束更重要的是,Kotlin的泛型设计鼓励更安全的编程模式。

2026-02-07 10:30:00 1281

原创 [kotlin] Kotlin函数式编程:从Java的束缚到代码的艺术

/ 1. 重试机制): T {= nulltry {println("第${attempt1// 1. 重试机制 fun < T > retry(times : Int = 3 , delay : Long = 1000 , block :() -> T) : T {lastException = e println("第 ${ attempt + 1 } 次尝试失败: ${ e . message } ") if(attempt < times - 1) {

2026-02-06 11:00:00 1412

原创 [kotlin] Kotlin继承与接口:重新思考面向对象的设计原则

/ Java接口只能有常量,不能有属性// 实际上是抽象方法// 只能是public static final常量// Kotlin接口可以声明属性val name: String // 抽象属性val age: Int // 抽象属性val type: String // 可以有getter的实现val description: String // 可以基于其他属性计算get() = "name。

2026-02-06 10:30:00 936

原创 [kotlin] Kotlin三大特殊类:让Java开发者效率倍增的秘密武器

/ Java版本 - 一个简单的用户类需要大量代码// Getter方法// Setter方法(仅对可变属性)// equals()方法 - 通常由IDE生成,但仍然冗长@Override// hashCode()方法@Override// toString()方法@Override'}';// Kotlin数据类 - 一行代码完成所有功能= null)// 自动获得的功能:// 1. equals() 和 hashCode()

2026-02-05 11:15:00 955

原创 [kotlin] Kotlin类与成员:Java开发者的面向对象新体验

Kotlin的类设计体现了"简洁而不简单"的哲学。从减少样板代码的自动getter/setter,到精细控制的访问修饰符,再到灵活的初始化机制,每一处设计都旨在提升开发效率和代码质量。从冗长到简洁:告别重复的getter/setter代码从隐式到显式:明确指定可见性,特别是模块级控制从命令式到声明式:用属性和初始化块表达意图从立即到延迟:合理使用延迟初始化优化性能。

2026-02-05 10:30:00 677

原创 [安卓] Kotlin中的架构演进:从MVC到MVVM

从MVC到MVVM,不仅是架构模式的演进,更是开发思维从"界面驱动"到"数据驱动"的转变。Kotlin作为现代编程语言,其协程、扩展函数、密封类、Flow等特性,与MVVM架构完美契合,让Android开发变得更加高效、优雅。先理解MVC:掌握基础分层思想实践MVP:体会接口契约和测试优势深入MVVM:掌握数据驱动和响应式编程融合最佳实践:结合Clean Architecture、UseCase等在实际项目中,没有"最好"的架构,只有"最适合"的架构。

2026-02-04 18:06:24 1523

原创 [kotlin] Kotlin空安全深度解析:Java开发者的Null安全革命

Kotlin的空安全不是简单的语法糖,而是一种编程思维的转变。它将空值处理从运行时的异常捕获转变为编译时的类型检查,从根本上提高了代码的可靠性。对于Java开发者而言,适应这种新思维需要时间,但一旦掌握,你将编写出更加健壮、更少错误的代码。尽可能使用非空类型,显式标记可空类型,安全处理可空值。这三点看似简单,却是写出高质量Kotlin代码的关键。默认使用非空类型优先使用安全调用和Elvis操作符避免使用非空断言妥善处理与Java的互操作。

2026-02-04 11:30:00 2170

原创 [kotlin] Kotlin数据类型与集合:Java开发者的效率革命

Kotlin在数据类型和集合上的设计体现了其"实用、简洁、安全"的哲学。通过统一基本类型、区分可变与不可变集合、提供丰富的操作符API,Kotlin让日常编程任务变得更简单、更少出错。对于Java开发者来说,适应Kotlin的集合可能需要一些时间,但一旦掌握,你会发现处理数据变得前所未有的直观和高效。这种设计不仅减少了模板代码,更重要的是通过类型系统在编译期捕获更多潜在错误,提高了代码质量。Kotlin的核心优势在于它的表达力和安全性——用更少的代码做更多的事,同时让编译器帮助你避免常见错误。

2026-02-04 11:00:00 588

原创 [kotlin] 从Java到Kotlin:掌握基础语法差异的跃迁指南

本文系统梳理了Kotlin与Java在基础语法上的核心差异,帮助有Java基础的开发者快速掌握Kotlin。主要对比点包括:1)变量声明方面,Kotlin通过val/var关键字和空安全设计提升了代码安全性;2)函数定义上,Kotlin支持顶层函数、单表达式函数和默认参数等更灵活的表达方式;3)流程控制中,Kotlin的when表达式和范围循环提供了更强大的功能。文章通过大量代码示例展示了Kotlin如何用更简洁的语法实现Java同等功能,体现了其"更安全、更简洁"的设计哲学。

2026-02-03 17:50:51 1144

原创 Gradle 与 Maven 全方位对比:从基础到选型,一文读懂构建工具

Maven是 “标准化的基石”,以稳定、简单的特性守护了无数 Java 项目的构建流程;Gradle是 “灵活的进化者”,在 Maven 的基础上解决了性能和灵活性痛点,成为复杂项目的优选。作为开发者,无需纠结 “必须选哪一个”,而是根据项目需求灵活选择 —— 小型项目用 Maven 提效,大型项目用 Gradle 降本,这才是构建工具的核心价值。最后,无论选择哪种工具,建议深入理解其 “依赖解析机制” 和 “构建生命周期”,这才是掌握构建工具的关键,而非停留在 “复制粘贴配置” 的层面。

2026-02-03 17:37:37 847

原创 [IDA] ida的下载及详细安装过程(附有下载链接)

本文提供IDA Pro等逆向分析工具的下载链接及安装教程。注意:下载链接可能失效,可联系补发。

2025-09-04 18:52:57 26143 2

原创 [java] 反射、动态代理

​​ 是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;​ 对于任意一个对象,都能够调用它的任意属性和方法;​ 这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。​利用创建的对象调用类里面的内容可以跟,把要创建的对象信息和方法写在配置文件中。读取到什么类,就创建什么类的对象读取到什么方法,就调用什么方法此时当需求变更的时候不需要修改代码,只要修改配置文件即可。

2025-05-26 10:58:51 1131

原创 [spring] spring 框架、IOC和AOP思想

3) Bean创建的主要逻辑和功能都被封装在BeanFactory中,ApplicationContext不仅继承了BeanFactory,而且ApplicationContext内部还维护着BeanFactory的引用,所以,ApplicationContext与BeanFactory既有继承关系,又有融合关系。不同语言,不同领域都有属于自己的框架,使用框架开发是作为程序员的最基础的底线。框架是一个半成品,使用框架规定的语法开发可以提高开发效率,可以用简单的代码就能完成复杂的基础业务;

2025-05-26 10:46:48 938

原创 [VSCode] vscode下载安装及安装中文插件详解(附下载文件)

该软件支持语法高亮、代码自动补全、代码重构、查看定义功能,并且内置了命令行工具和Git版本控制系统。

2025-05-19 12:55:17 490

原创 [VMware] VM 17.5.0 中文版安装教程(附链接)

VMWare Workstation Pro是一款虚拟机软件,在其中可以安装各种虚拟操作系统。运行注册机(VMware-workstation-序-号生成器.exe)

2025-05-19 12:54:20 3507

原创 [kali] kali下载及在虚拟机中详细安装过程(附有下载链接)

链接:https://pan.quark.cn/s/7b394681d7c6。可以参考图中做法:在D盘或者E盘下创建一个专门放虚拟机文件的文件夹,比如。注意:虚拟机不要放到有中文的目录中,有可能会导致vmware无法访问。打开虚拟机,这里使用的是VMware Workstation Pro。下载完以后是一个7z压缩包,需要用解压工具解压成文件夹。链接失效(可能被官方和谐)可评论或私信我重发。到此kali的虚拟机就已经安装完成了。找到解压出来的kali目录,打开。点击左上角的文件,打开。

2025-05-19 12:53:04 603

原创 [java] 集合-Set、TreeSet、HashSet、二叉树篇

底层数据结构是哈希表存取无序不可以存储重复元素没有索引,不能使用普通for循环遍历HashSet底层原理HashSet集合底层采取哈希表存储数据哈希表是一种对于增删改查数据性能都较好的结构哈希表组成JDK8之前:数组+链表JDK8开始:数组+链表+红黑树不可以存储重复元素没有索引可以将元素按照规则进行排序TreeSet():根据其元素的自然排序进行排序TreeSet(Comparator comparator) :根据指定的比较器进行排序两种比较方式小结。

2025-04-25 22:33:49 1094 1

原创 [java] 集合-Map、HashMap、TreeMap篇

Map集合概述interface Map<K,V> K:键的类型;V:值的类型Map集合的特点双列集合,一个键对应一个值键不可以重复,值可以重复Map集合的基本使用//创建集合对象//V put(K key, V value) 将指定的值与该映射中的指定键相关联map.put("itheima001","林青霞");map.put("itheima002","张曼玉");map.put("itheima003","王祖贤");map.put("itheima003","柳岩");

2025-04-25 22:33:29 715

原创 前端处理pdf文件流,展示pdf

前端接收后端的pdf文件流后在页面中展示pdf

2025-04-01 13:22:45 740

原创 [java] IO流

Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。也叫做数据,也叫做作数据。

2025-03-10 10:45:00 1480

原创 [java] 异常、file篇

要求:我们模拟登陆操作,如果用户名已存在,则抛出异常并提示:亲,该用户名已经被注册。// 业务逻辑异常/*** 空参构造*//*** @param message 表示异常提示*/模拟登陆操作,使用数组模拟数据库中存储的数据,并提供当前注册账号是否存在方法用于判断。// 模拟数据库中已存在账号//调用方法try{// 可能出现异常的代码System.out.println("注册成功");//如果没有异常就是注册成功//处理异常//判断当前注册账号是否存在。

2025-03-09 15:15:19 812

原创 [java] Arrays、Lambda表达式篇

Arrays操作数组的工具类没有构造方法,不用创建对象,方法都是静态,直接调用

2025-02-16 10:45:00 892

原创 [java] 集合-Collection、ArrayList、LinkedList源码篇

扩容机制:当存满时候,会创建一个新的数组,新数组的长度,是原来的1.5倍,也就是长度为15.再把所有的元素,全拷贝到新数组中。举个例子: 在一开始,如果默认的长度为10的数组已经装满了,在装满的情况下,我一次性要添加100个数据很显然,10扩容1.5倍,变成15,还是不够,有序集合,这里的有序指的是存取顺序,用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素。添加第二个元素时,底层创建一个结点对象,第一个结点会记录第二个结点的地址值,last会记录新结点的地址值。

2025-02-16 09:45:00 1301

原创 [java] 常见的十大排序算法

插入排序是一种最简单直观的排序算法,它的工作原理是通过创建有序序列和无序序列,然后再遍历无序序列得到里面每一个数字,把每一个数字插入到有序序列中正确的位置。它重复的遍历过要排序的数列,一次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。将0索引的元素到N索引的元素看做是有序的,把N+1索引的元素到最后一个当成是无序的。第一轮结束之后,基准数左边的数字都是比基准数小的,基准数右边的数字都是比基准数大的。遍历无序的数据,将遍历到的元素插入有序序列中适当的位置,如遇到相同数据,插在后面。

2025-02-15 13:32:56 484

原创 [java] 常见的七大查找算法

基本思想:二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。更多的是先计算出当前数据的哈希值,用哈希值跟数组的长度进行计算,计算出应存入的位置,再挂在数组的后面形成链表,如果挂的元素太多而且数组长度过长,也会把链表转化为红黑树,进一步提高效率。汲取了顺序查找和折半查找各自的优点,既有动态结构,又适于快速查找,分块查找适用于数据较多,但是数据不会发生变化的情况,如果需要一边添加一边查找,建议使用哈希查找。

2025-02-15 12:36:53 1181

原创 [java] 包装类篇

基本数据类型对应的引用类型

2025-02-12 10:45:00 972

原创 [java] 常用API-Date、SimpleDateFormat、Calendar、工具类篇

JDK8新增的时间类

2025-02-11 15:14:04 520

原创 [java] 常用API-Date、SimpleDateFormat、Calendar篇

JDK7及以前的时间类。

2025-02-11 12:30:18 1163

空空如也

空空如也

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

TA关注的人

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