自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android和Java的发布/订阅事件总线EventBus

EventBus是一种适用于Android和Java的发布/订阅事件总线。EventBus内部实现了高效的事件传递机制,能够快速将事件从发布者传递到订阅者。同时,EventBus还提供了错误处理机制,可以捕获和处理事件处理过程中的异常,确保应用的稳定性。EventBus通过简化组件间的通信,实现了Activity、Fragment、线程以及服务之间的解耦。它使用发布/订阅模式,使得组件之间不需要直接依赖对方即可进行通信。

2024-11-23 18:30:23 967

原创 android Spinner组件从预定义的选项列表中选择一个项目

Spinner 是 Android 平台中一个非常实用的用户界面组件,它允许用户从预定义的选项列表中选择一个项目。Spinner 类似于网页开发中的下拉列表框(Dropdown List),可以有效地节省屏幕空间,并提供一个直观的用户交互界面。接下来,我们将详细介绍 Spinner 的基本使用方法、自定义样式技巧、以及一些高级应用,帮助开发者更好地掌握这一组

2024-11-17 10:44:04 1040

原创 Dart 高级语法

Dart 是一种由 Google 开发的开源编程语言,旨在为构建高性能、可移植的应用程序提供支持。它被设计用于多种平台,包括Web、移动设备(通过 Flutter 框架)、服务器端应用以及桌面应用。以下是一些 Dart 中比较高级的语言特性和模式。通过掌握这些概念,你可以更加灵活地利用 Dart 来构建复杂的程序。

2024-10-06 12:48:49 1594

原创 Dart基础入门

Dart 是一种由 Google 开发的开源编程语言,它可以用来构建服务器、Web 应用和移动应用。Dart 语言设计得既现代化又易于学习,它支持面向对象编程(OOP)、函数式编程风格,并且具有类似于 Java 或 C# 的语法。Dart 语言和 Flutter 框架紧密相关,Flutter 是一个由 Google 开发的开源 UI 软件开发工具包(SDK),用于构建跨平台的应用程序。

2024-10-06 12:23:20 792

原创 微服务架构为什么能够取代SOA架构

面向服务的架构(Service-Oriented Architecture, SOA)是一种设计模式,它定义了应用程序之间如何通过网络进行通信和交互。SOA 的核心思想是将业务功能封装成独立的服务,这些服务可以通过标准的协议被其他应用调用。虽然SOA为解决复杂的集成问题提供了有效的框架,但它也带来了一系列技术和管理上的挑战。随着技术的发展,比如微服务架构的兴起,人们开始探索更加轻量级和灵活的方式来实现类似的目标。尽管微服务架构具有上述优点,但它并不是万能药,对于某些场景下SOA仍然是一个很好的解决方案。

2024-10-05 15:59:47 1426

原创 Java Supplier和Consumer接口

Consumer 接口为函数式编程提供了重要的支持。通过使用 Consumer 接口,我们可以轻松地定义并执行一个接受一个参数并且不返回结果的操作。Consumer 接口特别适用于遍历集合或执行消费型操作。Supplier接口提供了一种灵活而强大的机制来获取或生成数据,使用Supplier接口可以使代码更加灵活和易于维护,特别是在需要生成值或进行惰性计算的情况里。

2024-10-05 14:55:37 966

原创 Kotlin基本知识

Kotlin的基础语法提供了一种简洁而强大的方式来进行编程。通过掌握这些基础知识,开发者可以更有效地编写出既安全又高效的代码。对于初学者来说,理解并实践这些基础概念是进入Kotlin世界的第一步。

2024-10-04 18:18:25 1487 1

原创 kotlin协程

Kotlin的协程提供了一种更现代、更高效的异步编程方式,它解决了传统Java线程模型中的多个问题,如高资源消耗、复杂的异常处理以及低效的资源利用等,使开发者能够编写出更简洁、更安全、更高效的代码。

2024-10-03 14:40:08 266

原创 android Activity生命周期

Activity生命周期涵盖了从创建到销毁的全过程,每个阶段都有其特定的任务和职责,确保应用在不同状态下都能表现出色。必须理解并合理利用这些生命周期方法。

2024-10-03 13:49:55 1392

原创 解决Gson将长数字( json字符串)转换为科学记数法格式

Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串成Java对象。

2024-09-18 14:10:38 804

原创 android设置实现广告倒计时功能

要使用 CountDownTimer,你需要创建一个继承自 CountDownTimer 的匿名内部类或单独的类,并重写其两个方法:onTick() 和 onFinish()。onFinish() 方法会在计时结束时被调用,用于执行倒计时结束后的操作。在onResume()方法中启动广告计时器,在onDestroy()方法中取消广告计时器。在Android中,CountDownTimer 是一个用于计时的类,它允许你在指定的时间段内执行某些操作。重写 onFinish 方法,该方法将在倒计时结束时触发。

2024-09-17 10:14:35 1082

原创 Jetpack 各种框架简介

是Google推出的一套为Android开发提供极大便利的组件、工具和指导集,旨在帮助开发者快速构建高质量的应用,并遵循最佳实践。不仅是一个提高开发效率的工具集,还是。它通过整合各种组件和工具,显著提高了开发效率,解耦了代码逻辑与UI界面,实现了数据驱动的UI。对于开发者而言,掌握Jetpack意味着能够编写更加稳定、易维护且高效的代码。

2024-08-17 18:36:06 976

原创 Java虚拟机(JVM)的自带工具

在HTML页面上,jhat提供了多种功能,如显示所有类包括平台类、从根集能引用到的对象、显示每个类的实例数量、堆实例的分布表以及执行对象查询语句等。其中, 是目标Java进程的进程ID,[interval] 是采样间隔(以毫秒为单位),[count] 是要显示的样本数量。例如,使用jstat -class可以查看类加载统计信息,包括加载类的数量、所占用的空间大小以及未加载类的数量和所占用的空间。该命令将会显示进程ID为23173的Java进程的堆内存中各个对象的数量和占用的内存大小。

2024-08-09 13:48:45 1145

原创 Vue快速入门

Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。它易于上手,同时也便于与第三方库或已有项目整合。Vue.js是一个流行的前端JavaScript框架,它致力于视图层并适用于构建用户界面和单页应用程序(SPAs)。Vue.js采用自底向上增量开发的设计策略,核心库仅关注视图层,这使得它很容易学习并且能轻松与现有项目或库集成。Vue.js的目标是通过简洁的API提供响应式数据绑定和组合视图组件的能力。

2024-08-03 18:20:27 916

原创 MinIO:高性能轻量云存储轻松搭建与springboot应用整合实践

Minio是一款用Golang编写的开源对象存储套件,遵循Apache License v2.0开源协议。它虽然体积小巧,但性能出色。Minio支持亚马逊S3云存储服务接口,可以方便地与其他应用如NodeJS、Redis、MySQL等集成使用。

2024-08-03 17:41:49 667

原创 Java 内存模型

Java内存模型通过以下几种方式解决CPU和内存一致性问题:同步块(Synchronized Block):当一个线程进入同步块时,它会获取锁,其他线程需要等待锁释放才能进入。这样可以确保在同一时刻只有一个线程能够访问共享变量,避免了竞争条件。volatile关键字:使用volatile修饰的变量,每次读取都会从主内存中重新加载,而不是从CPU缓存中读取。这样可以确保线程间对共享变量的可见性。

2024-08-02 17:19:48 632

原创 如何成为java编程大神

理解面向对象编程:深入学习面向对象的概念,包括封装、继承、多态等。通过编写一些小的程序来练习这些概念的应用,例如构建简单的类和对象模型。

2024-08-02 08:48:34 986

原创 全球性“微软蓝屏”事件:科技韧性与安全性的警钟

微软蓝屏”事件是一次警醒,提醒我们数字时代下网络安全与IT韧性建设的紧迫性。它不仅是对现有技术体系的一次考验,更是对未来发展方向的一种指引。随着全球社会日益数字化,构建一个更加安全、韧性和多元的网络空间已成为不可回避的挑战和机遇。各方需共同努力,强化合作,确保信息技术的发展能够惠及所有人,同时有效抵御潜在的风险与威胁。

2024-07-23 13:59:40 853

原创 JVM垃圾收集器

垃圾是指那些在程序运行过程中没有任何指针指向的对象。这些对象不再被使用,因此占用的内存可以被释放和重新利用。

2024-07-23 13:59:19 744

原创 Netty:基于NIO的 Java 网络应用编程框架

Netty的核心优势在于其基于事件驱动的设计,以及对于NIO的高效利用。Netty的关键组件包括Channel、EventLoop、ChannelPipeline和ChannelHandler等,这些组件协同工作,确保了数据流的高效处理。Channel负责实际的网络I/O操作,EventLoop则负责处理I/O事件和任务调度,而ChannelPipeline和ChannelHandler则合作处理各种网络事件和业务逻辑。

2024-07-20 17:08:15 930

原创 深入BIO与NIO

在 JDK1.4 之前,我们建立网络连接的时候只能采用 BIO,需要先在服务端启动一个ServerSocket,然后在客户端启动 Socket 来对服务端进行通信,默认情况下服务端需要对每个请求建立一个线程等待请求,而客户端发送请求后,先咨询服务端是否有线程响应,如果没有则会一直等待或者遭到拒绝,如果有的话,客户端线程会等待请求结束后才继续执行,这就是阻塞式IO。以下示例了一个服务端程序:绑定端口号 9999,accept 方法用来监听客户端连接, 如果没有客户端连接,就一直等待,程序会阻塞到这里。

2024-07-20 11:18:46 615

原创 android自定义键盘弹窗

要在Android中自定义键盘弹窗,先要创建一个新的XML布局文件,用于定义键盘弹窗的外观和布局。例如,创建一个名为key_alert_dialog.xml的文件,并在其中添加所需的按钮和其他UI元素。其中,数字键盘和背景的样式举例如下:shape_alert_dialog.xml:密码输入框灰色:建立一个LinearLayout类为自定义键盘上的每个按钮设置点击事件监听器,以便在用户点击时执行相应的操作。你可以在布局文件中为每个按钮设置android:onClick属性,或者在代码中动态地为它们设

2024-07-09 17:34:23 522

原创 android CameraX构建相机拍照

Android CameraX 是一个 Jetpack 支持库,旨在简化相机应用的开发工作。它提供了一致且易用的API接口,适用于大多数Android设备,并可向后兼容至Android 5.0(API级别21)。CameraX解决了在多种设备上实现相机功能时所遇到的兼容性问题,大大减少了需要编写的设备专属代码量。同时,它还通过提供一种基于用例的、具有生命周期感知能力的方式,简化了相机功能的开发。

2024-07-09 17:34:09 1315

原创 android 播放视频

代码很简单,通过Uri.parse方法解析视频资源的URI,并将其赋值给变量uri。我们看到,按钮使用线性布局(LinearLayout)进行排列,每个按钮的宽度为0dp,高度为wrap_content,权重(layout_weight)为1,这样它们会平均分配可用空间。新建一个activity_main.xml文件,文件中放置了3个按钮,分别用于控制视频的播放、暂停和重新播放。接下来的问题就是存放视频资源了,很可惜的是,VideoView不支持直接播放assets目录下的。

2024-06-14 21:54:23 705

原创 android用Retrofit进行网络请求和解析

另外,Retrofit还会将服务器返回的JSON数据自动解析成对象,因此下面的第二条依赖就是一个Retrofit的转换库,它是借助GSON来解析JSON数据的,所以会自动将GSON库一起下载下来,这样我们也不用手动引入GSON库了。除了GSON之外,Retrofit还支持各种其他主流的JSON解析库,包括Jackson、Moshi等,不过毫无疑问GSON是最常用的。它是一个类型安全的HTTP客户端,用于Android和Java平台,通过将HTTP API转化为Java接口的方式,简化了网络请求的编写工作。

2024-06-14 21:53:49 626

原创 MyBatis插件机制

MyBatis拦截器的接口定义,plugin方法用于某些处理器(Handler)的构建过程。interceptor方法用于处理代理类的执行。MyBatis默认没有一个拦截器接口的实现类。

2024-06-09 09:59:03 1466

原创 平衡二叉树AVL

严格定义:在平衡二叉树中,任一节点的两个子树的高度最大差别为一,这使得树保持一定程度的平衡,进而保证操作的效率。查找效率:平衡二叉树的查找、插入和删除操作的时间复杂度均为O(log n),其中n为树中节点的数量。这是因为树保持了相对平衡,避免了最坏情况下的链式存储结构。

2024-06-08 15:29:39 1000

原创 JMS VS AMQP

JMS(JAVA Message Service,java消息服务)是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS(JAVA Message Service,Java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性,ActiveMQ 就是基于 JMS 规范实现的。

2024-06-08 14:59:06 675

原创 亿级数据过滤和布隆过滤器

但是布隆过滤器也不是特别不精确,只要参数设置的合理,它的精确度可以控制的相对足够精确,只会有小小的误判概率。问题是当 用户量很大,每个用户看过的短视频又很多的情况下,这种方式,推荐系统的去重工作 在性能上跟的上么?布隆过滤器有两个基本指令, bf.add 添加元素, bf.exists 查询元素是否存在,它的用法和 set 集合的 sadd 和 sismember 差不多。这么多的推荐内容要推荐给这么多的用户,它是怎么保证每个用户在看推荐内容时,保证不会出现之前已经看过的推荐视频呢?

2024-06-04 10:22:38 1035

原创 GeoHash查找附近的人

在进行地理位置计算时,不同的方法可能会有不同的性能表现。ST_Distance适用于需要精确计算距离的场景,而Geohash更适合于需要进行快速邻近点查询的应用。在选择使用哪种技术时,应考虑具体的业务需求、数据量大小以及预期的系统性能。在使用这些技术时,还需要注意坐标系的选择。不同的坐标系(如WGS84、GCJ02等)有其特定的用途和精度,选择正确的坐标系对于确保数据的准确性非常重要。

2024-06-04 10:21:20 817

原创 esp32 mqtt通信

我们学习了如何使用ESP32连接WiFi,并利用MQTT技术将消息发送到EMQX网站上。具体包括:WiFi模块实现网络连接;接着学习MQTT协议的基本原理和应用,最后通过编写代码将数据发送到EMQX网站。这些技能有助于物联网开发和远程通信。

2024-05-30 16:04:21 1127

原创 Semaphore信号量限制访问

Semaphore是一个计数信号量,用于控制同时访问特定资源的线程数量,以维护资源的访问控制和确保系统的线程安全。Semaphore可以被视为一个包含若干许可(permit)的集合,线程需要先获取许可才能执行受控操作,执行完毕后归还许可,从而允许其他等待的线程继续执行。主要方法包括:acquire():尝试获取一个许可,如果没有可用许可,则阻塞直到有其他线程释放许可。release():释放一个许可,增加信号量的计数,如果其他线程正在等待许可,则唤醒其中一个线程。

2024-05-30 16:03:43 554

原创 esp32红外遥控

红外遥控是一种无线控制技术,利用红外信号进行非接触式通信。红外遥控系统通常由两部分组成:发射器和接收器。发射器将用户的指令编码成特定的红外信号,然后通过红外发射二极管发送出去。接收器则包含一个红外接收二极管,用于检测来自发射器的红外信号,并将其转换回电信号,最终解析为用户的原始指令。这种技术的优点包括结构简单、功耗低等。红外遥控在日常生活中的应用非常广泛,例如家用电器(如电视、空调)、个人娱乐设备(如玩具控制车)、工业控制和智能仪器等领域。它的主要优势在于成本较低,且能够满足大多数基本的遥控需求。

2024-05-22 16:01:36 1136

原创 gRPC和ProtoBuf

gRPC是一个高性能、开源且通用的RPC框架,它基于HTTP/2标准协议和Protocol Buffers进行数据序列化,支持多种编程语言。Protocol Buffers(简称ProtoBuf)是Google开发的一种数据序列化协议,它能够将结构化数据序列化为二进制格式,用于数据存储或网络传输。消息定义:在proto文件中,使用message关键字定义一个数据结构,这类似于C++中的class、Java中的Class或Go中的struct。消息中承载的数据对应于每个字段,每个字段都有一个名字和类型。

2024-05-22 16:01:14 939

原创 JavaSPI机制详解

在遍历的时候,首先调用driversIterator.hasNext()方法,这里会搜索classpath下以及jar包中所有的META-INF/services目录下的java.sql.Driver文件,并找到文件中的实现类的名字,此时并没有实例化具体的实现类(ServiceLoader具体的源码实现在下面)。现在驱动就被找到并实例化了。Spring的SPI机制提供了一种灵活、可扩展的方式来管理和使用服务实现,它简化了服务的注册和发现过程,使得在不修改代码的情况下能够很容易地切换或添加新的服务实现。

2024-05-17 16:11:38 1021

原创 esp32开发板的RGB彩灯实验

ESP32 RGB彩灯是一个多功能且可编程的智能照明解决方案,它不仅能够提供美观的照明效果,还可以作为物联网项目的一个组成部分,拓展更多智能控制的可能性。

2024-05-17 11:12:10 1021

原创 我的创作纪念日

保持健康的生活习惯:保证充足的睡眠、健康的饮食和规律的锻炼,确定一个适合你的健身计划,并把它纳入你的日常生活。Java作为一种强大、灵活且广泛使用的编程语言,提供了一个充满无限可能性的平台,让他们能够实现自己的想法,解决现实世界中的问题,并创造出有价值的软件产品。加深对Java内部工作原理的理解:研究JUC的源码要求对Java的并发机制有深刻的理解,这有助于增强对Java虚拟机如何管理线程、锁、同步器等内部工作的知识。同时,看到自己的作品在现实生活中发挥作用,为用户带来便利,也是一种极大的满足。

2024-05-08 09:32:59 831 1

原创 ReentrantReadWriteLock类

同时其还实现了Serializable接口,表示可以进行序列化,在源代码中可以看到ReentrantReadWriteLock实现了自己的序列化逻辑。在某些情况下,使用ReentrantReadWriteLock可能更高效,因为它允许多个线程同时读取共享资源,从而减少了锁竞争的可能性。ReentrantReadWriteLock是一个读写锁,它允许多个读操作同时进行,但在写操作时会阻止其他所有读和写操作。ReadThread和WriteThread是自定义的线程类,它们分别代表读线程和写线程。

2024-05-04 16:35:13 846

原创 redis哨兵模式

尽管哨兵模式提供了一些优势,但它也有一些局限性,例如内存容量和写入性能都受限于单个节点。为了克服这些限制,Redis在3.x版本后推出了Cluster模式,这一模式通过数据分片和多节点水平扩展,有效提高了内存利用率和写入性能,适用于更大规模和更高要求的数据处理场景。

2024-05-04 12:36:03 750

原创 MVC和DDD的贫血和充血模型对比

这种设计问题被称为“贫血模型,膨胀控制器”(Anemic Model, Bloated Controller),其中“贫血模型”指的是缺乏业务逻辑的模型,而“膨胀控制器”则指代承担了过多职责的控制器。BankAccount 类不仅包含了账户的属性(如 accountId 和 balance),还直接实现了业务操作(如存款和取款),并包含了相关的业务规则检查(比如不能存取负数金额,取款不能超过余额)。如果模型的实现过于简单,仅仅作为数据的容器,而没有包含足够的业务逻辑,就可能导致所谓的“贫血模型”。

2024-05-02 16:57:12 1587 2

Thonny IDE mac安装包,最新的Thonny 4.1.4版本,适用于mac各芯片

Thonny是由爱沙尼亚的Tartu大学开发的一款Python,这是最新的Thonny IDE 4.1.4版本,从github上下载。Thonny是一个基于Python的编程环境,用于编写和运行Python代码,支持MicroPython的编程和调试,本安装包自带了Python3,使得初学者也能轻松学习编程。特别地,Thonny对MicroPython的支持始于BBC micro:bit插件,由Kauri Raba开发。在Thonny 3中,MicroPython得到了一般支持,但最初需要通过专用的插件来使用。用户需要把脚本当作本地文件进行编辑,并使用设备菜单中的特定命令将它们保存到设备上。对于ESP32的开发,我们主要使用MicroPython,这是一种特殊的Python解释器,针对硬件做了特殊处理。与PyCharm、Jupyter、VSCode等专业的Python IDE相比,Thonny在功能上可能不够强大。例如,它可能不支持某些高级编程特性或者第三方库。最后,Thonny是免费的,但是某些高级功能可能需要付费才能使用。您还可以从Thonny官方网站下载更多适合你操作系统的版本。

2024-01-05

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来 遍历数列的工作是重

冒泡法排序c语言程序

2023-11-22

java 程序员简历模版

java 程序员简历模版

2023-10-01

复杂网页设计模版html-科技类公司介绍

复杂网页设计模版html-科技类公司介绍

2023-09-30

空空如也

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

TA关注的人

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