自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MacBook安装使用VLC Media Player多媒体播放器

VLC media player 是一款自由、开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,以及 DVD、音频 CD、VCD 及各类流媒体协议。VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影音光盘及各类流式协议。它也能作为unicast或multicast的流式服务器在IPv4或IPv6的高速网络连接下使用。

2024-01-15 15:57:39 1385

原创 JDK8的新特性

它只包含一个自定义的抽象方法的接口, 还可以是Object类的equals抽象方法,还可以default、static修饰的自带方法体,如果实现多个相同default方法的接口,则default方法必须重写。ElementType 枚举增加了TYPE_PARAMETER、TYPE_USE两个枚举值,从而可以使用 @Target(ElementType_TYPE_USE) 修饰注解定义,这种注解被称为类型注解,可以用在任何使用到类型的地方。允许在同一申明类型(类,属性,或方法)前多次使用同一个类型注解。

2024-01-09 17:17:27 581

原创 MySQL启动失败

根据日志信息,MySQL启动失败的原因可能是权限问题。错误代码13表示“Permission denied”,意味着在设置数据目录时没有足够的权限。这将以管理员权限初始化MySQL并创建数据目录。这将把数据目录的所有权更改为当前用户和组(通常是。希望这些建议能帮助你解决问题。

2023-12-04 22:56:51 717

原创 CSV 文件是什么

CSV(Comma Separated Values 逗号分隔值) 是一种文件格式(如.txt、.doc等),也可理解 .csv 文件就是一种特殊格式的纯文本文件。即是一组字符序列,字符之间已英文字符的逗号或制表符(Tab)分隔。在 windows 系统环境上 .csv 文件打开方式有多种,如记事本、excel、Notepad++ 等,只要是文本编辑器都能正确打开。

2023-11-15 09:22:08 5172

原创 Java游戏项目编码注意事项

尽量减少不必要的运算, 例如:发送协议给多人的时候, 就应该是Message Build一次,都发这一份build出来的数据(以现有代码举例, 那么gate和其它进程之间应该存在一个广播协议, 包头带上玩家id, 包体是给每个玩家爱的消息)服务器负责主导整个系统的流程,必须对整个系统有清晰的认知,而不是策划主导.(包括表的设计),一切设计应以减少整体的工作量为目标,如果相同的工作量做取舍,优先级应是。//和role.getMiniGame().getMiniGameId()作为参数获取相应的配置信息。

2023-11-13 20:23:36 89

原创 高并发优化方案

合并写请求方案其实是参考高并发读的优化思路:当读数据库并发较高时,我们可以把数据缓存到Redis,这样就无需访问数据库,大大减少数据库压力,减少响应时间。既然读数据可以建立缓存,那么写数据可以不可以也缓存到Redis呢?

2023-10-06 14:43:43 79

原创 Tomcat安装及配置教程

Tomcat安装及配置教程

2023-10-05 14:37:50 116

原创 最新MySql详细安装教学

Mysql官网下载地址https://downloads.mysql.com/archives/installer/1. 选择想要安装的版本,点击Download下载本篇文章选择的是8.0.27.1版本

2023-10-05 14:31:53 120

原创 G1--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

G1收集器的目标是取代CMS收集器,与CMS相比,以下方面更出色: G1是一个有整理内存过程的垃圾收集器,不会产生很多内存碎片 G1的STW更可控,G1在停顿时间上添加了预测机制,用户可以指定期望停顿时间,主要应用在多CPU和大内存服务器环境下,极大的减少垃圾收集的停顿时间,全面提升服务器的性能,逐步替换Java8以前的CMS收集器。在这种情况下,用户会体验到应用程序响应非常缓慢,通常只需要几毫秒就能完成的某些操作,此时则需要更长的时间来完成,这是因为所有的CPU正在进行垃圾收集,因此无法执行其他任务。

2023-09-24 17:44:54 476

原创 MyBatis-Plus 为简化开发而生

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配

2023-09-23 14:57:17 108

原创 微服务架构--分布式架构与微服务介绍相关概念以及典型解决方案

RPC (Remote Procedure Call)远程过程调用是一个计算机通信协议。我们一般的程序调用是本地程序内部的调用,RPC允许你像调用本地函数一样去调用另一个程序的函数,这中间会涉及网络通信和进程间通信,但你无需知道实现细节,RPC框架为你屏蔽了底层实现。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

2023-09-23 14:49:48 516

原创 面向服务架构--分布式架构与微服务介绍相关概念以及典型解决方案

传统的Web(HTML/HTTP)技术有效的解决了人与信息系统的交互和沟通问题,极大的促进了B2C模式的发展。WEB服务(XML/SOAP/WSDL)技术则是要有效的解决信息系统之间的交互和沟通问题,促进B2B/EAI/CB2C的发展。SOA(面向服务的体系)则是采用面向服务的商业建模技术和WEB服务技术,实现系统之间的松耦合,实现系统之间的整合与协同。 WEB服务和SOA的本质思路在于使得信息系统个体在能够沟通的基础上形成协同工作。

2023-09-23 14:47:01 968

原创 服务架构演变--分布式架构与微服务介绍相关概念以及典型解决方案

面向服务(SOA)架构:将整个项目中共同的业务逻辑抽取成一个公共的服务,提供给其他的服务实现调用,调用的过程会涉及到RPC远程调用技术。微服务架构:比SOA架构对服务拆分的粒度更加精细,让业务界限更加清晰,每个服务独立部署、互不影响。三者身处于软件开发的不同层面,不论是哪个领域的软件开发,都可能要同时面对OOP、SOA和CBD。传统单体架构 ==> 分布式架构 ==> 面向服务(SOA)架构 ==> 微服务架构。分布式架构:基于传统单体架构演变过来的,会根据不同的业务实现拆分n多个不同子系统。

2023-09-23 14:43:14 89

原创 JVM参数-Xms和-Xmx等

设置合适的堆内存大小可以避免程序因内存不足而出现 OOM 错误,也可以提高程序的性能和效率。如果堆内存不足,JVM 会不断触发垃圾回收,导致程序性能下降。如果堆内存过大,会导致系统资源的浪费。

2023-09-19 11:27:44 17992

原创 7个垃圾收集器--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

1. Serial串行单线程标记复制: 是一种单线程垃圾回收器,使用标记复制算法进行新生代垃圾回收。它适用于简单的应用程序。2. ParNew多核多线程标记复制: 是Serial的多线程版本,也使用标记复制算法进行新生代垃圾回收。它适用于多核CPU的系统。并行标记复制: 是一种使用标记复制算法的并行垃圾回收器适用于大内存应用程序。它的特点是在垃圾回收时尽可能地利用CPU资源,以达到更高的吞吐量(并行)。是一种使用标记-清除算法的并发垃圾回收器(时间效率高),适用于需要短暂停顿时间的应用程序。它的特点是。

2023-09-18 22:19:26 54

原创 垃圾收集器的种类--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

标记复制算法是一种垃圾收集算法主要用于新生代的垃圾收集.它将堆内存分为两个相等的大小的区域,一个是活动区域(From区域) 一个是空闲区域(To区域一直是'空'的),将堆内存划分为多个区域。适用于大内存应用和对响应时间有较高要求的应用,通过优化内存分配和垃圾回收来减少停顿时间。指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替进行),不需要停顿用户线程,在进行垃圾收集时候,必须暂停其他所有的工作线程直到它收集结束。适用于大型应用,通过利用多核处理器来加速垃圾收集过程。

2023-09-18 21:55:01 50

原创 垃圾收集器与内存分配策略

这个算法的思路就是通过一系列的称为"GC Roots"的对象(规定好的)作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连 (用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。如图3-l所示,对象object5、。o5ject6、-o5ject7虽然互相有关联,但是它们到GC-Roots是不可达的,所以它们将会被判定为是可回收的对象。

2023-09-16 22:32:05 83 1

原创 队列(Queue)

思路 2:利用一个双端队列来保存当前窗口中最大那个数在数组里的下标,双端队列新的头就是当前窗口中最大的那个数。双端队列和普通队列最大的不同在于,它允许我们在队列的头尾两端都能在 O(1) 的时间内进行数据的查看、添加和删除。因为双端队列能让上面的这两种操作都能在 O(1) 的时间里完成,所以整个算法的复杂度能控制在 O(n)。对于队列的数据来说,我们只允许在队尾查看和添加数据,在队头查看和删除数据。当需要按照一定的顺序来处理数据,而该数据的数据量在不断地变化的时候,则需要队列来处理。

2023-09-16 21:39:45 47

原创 栈(Stack)

利用一个栈,不断地往里压左括号,一旦遇上了一个右括号,我们就把栈顶的左括号弹出来,表示这是一个合法的组合,以此类推,直到最后判断栈里还有没有左括号剩余。思路 1:最直观的做法就是针对每个温度值向后进行依次搜索,找到比当前温度更高的值,这样的计算复杂度就是 O(n2)。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。在解决某个问题的时候,只要求关心最近一次的操作,并且在操作完成了之后,需要向前查找到更前一次的操作。:返回对象在堆栈中的位置,以 1 为基数。

2023-09-16 21:36:33 55

原创 单向链表--双向链表--循环链表--双循环链表Data Structure

用于存储数据:用于指向下一个节点(最后一个节点则指向一个空值):单链表的遍历方向单一,只能从链头一直遍历到链尾。它的缺点是当要查询某一个节点的前一个节点时,只能再次从头进行遍历查询,因此效率比较低,而双向链表的出现恰好解决了这个问题。

2023-09-16 21:31:52 78

原创 Data Structure--链表(Linked List)--链表翻转算法递归翻转三指针翻转利用栈翻转

链表(Linked List)--链表翻转算法递归翻转三指针翻转利用栈翻转

2023-09-16 21:29:11 70

原创 Data Structure--数组(Array)

用两个指针,一个指向字符串的第一个字符 a,一个指向它的最后一个字符 m,然后互相交换。可以只利用一个长度为 26 的字符数组,将出现在字符串 s 里的字符个数加 1,而出现在字符串 t 里的字符个数减 1,最后判断每个小写字母的个数是否都为 0。可以利用两个长度都为 26 的字符数组来统计每个字符串中小写字母出现的次数,然后再对比是否相等。查询某个元素是否存在时需要遍历整个数组,耗费 O(n) 的时间(其中,n 是元素的个数):字母异位词,也就是两个字符串中的相同字符的数量要对应相等。

2023-09-16 21:21:46 50

原创 位运算--Data Structure

操作数的非0位左移n位,低位补0:操作数的非0位右移n位,高位补0:正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行补位:操作数为1则为0,否则为1:第一个数和第二个数,都为1则为1,否则为0:第一个数和第二个数,有一个为1则为1,否则为0:第一个数和第二个数,有一个不相同则为1,否则为0a^a=0;// 自己和自己异或等于0a^0=a;// 任何数字和0异或还等于他自己// 异或运算具有交换律。

2023-09-15 09:07:23 48

原创 GC算法--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

一般情况下,新创建的对象都会被分配到Eden区,这些对象经过一次MinorGC,如果仍然存活,将会被移到Survivor区,对象在Survivor区中每熬过一次MinorGC,年龄就会增加1岁,当它能年龄增加到一定程度时,就会被移动到老年代中。因为年轻代中的对象基本都是期生夕死的(80%以上),所以在年轻代的垃圾回收算法使用的是复制整理算法,复制整理算法的基本思想就是将内存分为两块,每次只用其中一块,当这一块内存用完,就将还活着的对象复制到另外一块上面。此算法没啥新鲜的,就是将上述三种算法整合了一下。

2023-09-14 22:12:09 99

原创 mq(模块化)

enableRetry`属性是全局配置,而`@EnableRetry`注解是局部配置。1. `enableRetry`属性是在配置文件中指定是否启用重试机制的全局配置,可以设置为`true`或`false`来开启或关闭重试机制。这意味着,你可以将`@EnableRetry`注解添加到特定的模块的启动类上,只对该模块内的方法启用重试机制。通过在模块的启动类上添加`@EnableRetry`注解,可以启用Spring Retry框架提供的重试功能,并且该注解的作用范围是被注解的启动类及其子包下的所有类。

2023-09-11 10:15:11 55

原创 引用计数算法--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

垃圾收集主要回收两部分内容:废弃常量和无用的类 回收废弃常量与回收Java堆中的对象非常类似。以常量池中字面量的回收为例,假如一个字符串“abc”已经进入了常量池中,但是当前系统没有任何一个String对象是叫做“abc”的,换句话说是没有任何String对象引用常量池中的“abc”常量,也没有其他地方引用了这个字面量,如果在这时候发生内存回收,而且必要的话,这个“abc”常量就会被系统“请”出常量池。

2023-09-09 21:38:32 59

原创 JVM参数类型介绍

JIT编译器将字节码编译成本机机器代码。 通常javac将程序源码编译,转换成java字节码,JVM通过解释字节码将其翻译成相应的机器指令,逐条读入,逐条解释翻译

2023-09-09 21:36:53 84

原创 三种Java虚拟机以及堆管存储--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

新生区是类的诞生、成长、消亡的区域,一个类在这里产生,应用,最后被垃圾回收器收集,结束生命。若养老区也满了,那么这个时候将产生Major GC (FullGC) 大GC,全局GC,进行养老区的内存清理。,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭JVM才会释放此区域所占用的内 存。” ,但严格来说,两者有本质的不 同,或者说使用永久代来实现方法区而已,新生区的空间以后会进行垃圾回收GC,幸存的对象,再移动到养老区。jdk1.7的版 本中,已经将原本放在永久代的字符串常量池移走。

2023-09-09 21:22:04 62

原创 栈管运行--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

无论采用何种方式退出,在方法退出之前,都需要返回到方法被调用的位置,程序才能继续执行,方法返回时可能需要在栈帧中保存一些信息,用来帮助恢复它的上 层方法的执行状态。在 Class 文件的常量池中存有大量的 符号引用,字节码中的方法调用指令就以常量池中指向方法的符号引用为参数。------------------------------------------------------------------申请的内存超过了系统所能提供的内存空间。栈也叫栈内存,主管Java程序的运行,是在。

2023-09-09 20:50:44 49

原创 JVM options 设定 部署与内存溢出

2023-09-09 20:26:41 52

原创 Java 8:流操作(Stream)的三要素:数据源、中间操作和终端操作

对limit短路的例子做一下修改,去掉forEach这个终端操作,可以发现在输出结果中,没有遍历set时的打印信息,也就证明了这一点。可以看到由于limit的存在,当程序找到两个大于10的数字(即19和21后,没有继续遍历下去)。常见的中间操作有map、limit、filter、distinct、sorted。一个完整的流操作 = 1 * 数据源 + n * 中间操作 + 1 * 终端操作。终端操作就像是整个流操作的开关阀门,触发流水线执行并在执行完成后关闭流。与集合类操作不同的是,流会。

2023-09-07 15:19:27 207

原创 中台权限管家--权限模型

权限管家是基于RBAC(Role-Based Access Control)权限管理模型实现的。

2023-09-07 15:03:12 193

原创 GitFlow工作流程

Hotfix解决Master的紧急bug。Feature开发编写代码。Develop开发合并。Release 测试。

2023-09-07 13:47:03 43

原创 Mac m1芯片 项目升级到jdk11启动报错 MacOSDnsServerAddressStreamProvider

Mac m1芯片 项目升级到jdk11启动报错,Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS.--版本号自己切-->项目升级到jdk11后,idea本地启动报错,注册中心为nacos,错误详细信息如下。解决方式,添加如下jar包,

2023-09-06 15:22:09 1046

原创 双亲委托机制--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

1.当Application ClassLoader 收到一个类加载请求时,他首先不会自己去尝试加载这个类,而是将这个请求委派给父类加载器Extension ClassLoader去完成。2.当Extension ClassLoader收到一个类加载请求时,他首先也不会自己去尝试加载这个类,而是将请求委派给父类加载器Bootstrap ClassLoader去完成。),而双亲委托的方式,就可以避免这种情况,因为String已经在启动时被加载,所以用户自定义类是无法加载。

2023-09-05 22:23:39 42

原创 类加载器--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

这里的B()就是符号引用,初学java时我们都是知道这是java的引用,以为B指向B方法的内存地址,但是这是不完整的,这里的B只是一个符号引用,它对于方法的调用没有太多的实际意义,可以这么认为,他就是给程序员看的一个标志,让程序员知道,这个方法可以这么调用,但是B方法实际调用时是通过一个指针指向B方法的内存地址,这个指针才是真正负责方法调用,他就是直接引用。为类的静态变量赋予正确的初始值,上述的准备阶段为静态变量赋予的是虚拟机默认的初始值,此处赋予的才是程序编写者为变量分配的真正的初始值。

2023-09-05 22:06:48 31

原创 JVM内存结构--深入理解JVM内存结构,熟练GC垃圾回收机制,可以进行简单的JVM调优

目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机,或者Java系统管理生产设备,在企业级应用中已经比较少见。这里的B()就是符号引用,初学java时我们都是知道这是java的引用,以为B指向B方法的内存地址,但是这是不完整的,这里的B只是一个符号引用,它对于方法的调用没有太多的实际意义,可以这么认为,他就是给程序员看的一个标志,让程序员知道,这个方法可以这么调用,但是B方法实际调用时是通过一个指针指向B方法的内存地址,这个指针才是真正负责方法调用,他就是直接引用。

2023-09-05 21:56:12 46

原创 2058 SQLyog错误号码 plugin caching_sha2_password could not be loaded

当连接MySQL时报错“plugin caching_sha2_password could not be loaded”时,可换回旧版插件。MySQL新版默认使用caching_sha2_password作为身份验证插件,而旧版是使用mysql_native_password。查看用户名使用的身份验证插件:mysql> select Host,User,plugin from mysql.user;操作mysql数据库命令:use mysql;docker进入数据库容器。远程命令行登录mysql。

2023-09-05 11:21:30 310 1

原创 Long类下的方法(包括类型转换)

31. remainderUnsigned() - 无符号地计算一个long类型的值除以另一个long类型的值的余数。4. toUnsignedBigInteger() - 将long类型的无符号值转换为BigInteger类型。30. divideUnsigned() - 无符号地将一个long类型的值除以另一个long类型的值。8. toUnsignedString0() - 将long类型的无符号值转换为字符串的内部方法。32. highestOneBit() - 返回long类型的值中最高位的1。

2023-08-31 22:04:48 541

原创 策略模式简介

方法调用(),策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用到算法的客户。* 策略模式是一种行为型设计模式,它允许在运行时根据不同的情况选择不同的算法或策略。* 具体来说,根据type的取值,选择使用不同的Calendar类的方法来添加时间,cal.add(Calendar.HOUR, time);* 在这段代码中,根据传入的type参数的不同,选择不同的时间计算策略。

2023-08-31 21:48:19 76 1

空空如也

空空如也

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

TA关注的人

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