- 博客(60)
- 收藏
- 关注
原创 springboot必知必会
1、 spring-boot-starter-web :提供web开发需要servlet与jsp支持 + 内嵌的 Tomcat。2、 spring-boot-starter-data-jpa :提供 Spring JPA + Hibernate。3、 spring-boot-starter-data-Redis :提供 Redis。4、 mybatis-spring-boot-starter :第三方的mybatis集成starter。
2024-01-29 13:23:30 1127
原创 MyBatis必知必会
1。缓存的作用缓存的作用:减低数据源的访问频率。从而提高数据源的处理能力。或者提高服务器的响应速度2。MyBatis中的缓存设计MyBatis中的缓存的架构设计:装饰器模式MyBatis中的一级缓存和二级缓存一级缓存:session级别二级缓存:SqlSessionFactory级别缓存的设计通过装饰模式实现缓存功能扩展缓存的应用一级缓存和二级缓存一级缓存和二级缓存的顺序问题:先二级缓存再一级缓存为什么会先走二级缓存再走一级缓存?
2024-01-29 13:18:39 1210
原创 MySql必知必会
什么是分库分表简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。分库分表解决的问题分库分表的目的是为了解决由于数据量过大而导致数据库性能降低的问题,将原来单体服务的数据库进行拆分.将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
2024-01-24 18:18:13 821
原创 MySql必知必会
MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。一、网络连接层客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术,例如常见的 Java、C、Python、.NET等,它们通过各自API技术与MySQL建立连接。二、服务层(MySQL Server)服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分。
2024-01-24 18:17:19 473
原创 MySql必知必会
InnoDB的页和操作系统的页大小不一致,InnoDB页大小一般为16K,操作系统页大小为4K,InnoDB的页写入到磁盘时,一个页需要分4次写。如果存储引擎正在写入页的数据到磁盘时发生了宕机,可能出现页只写了一部分的情况,比如只写了4K,就宕机了,这种情况叫做部分写失效(partial page write),可能会导致数据丢失。双写缓冲区 Doublewrite Buffer为了解决写失效问题,InnoDB实现了double write buffer Files, 它位于系统表空间,是一个存储区域。
2024-01-23 14:11:54 870
原创 MySql必知必会
B-Tree是一种平衡的多路查找树,B树允许一个节点存放多个数据. 这样可以在尽可能减少树的深度的同时,存放更多的数据(把瘦高的树变的矮胖).B-Tree中所有节点的子树个数的最大值称为B-Tree的阶,用m表示.一颗m阶的B树,如果不为空,就必须满足以下条件.
2024-01-22 19:09:11 1099
原创 MySql必知必会
Page是整个InnoDB存储的最基本构件,也是InnoDB磁盘管理的最小单位,与数据库相关的所有内容都存储在这种Page结构里。Page分为几种类型,常见的页类型有数据页(B+tree Node)Undo页(Undo Log Page)系统页(System Page) 事务数据页(Transaction System Page)等Page 各部分说明名称占用大小说明38字节文件头, 描述页信息56字节页头,页的状态26字节最大和最小记录,这是两个虚拟的行记录不确定。
2024-01-22 19:08:00 988 1
原创 CompletableFuture应用&源码分析
平时多线程开发一般就是使用Runnable,Callable,Thread,FutureTask,ThreadPoolExecutor这些内容和并发编程息息相关。相对来对来说成本都不高,多多使用是可以熟悉这些内容。这些内容组合在一起去解决一些并发编程的问题时,很多时候没有办法很方便的去完成异步编程的操作。Thread + Runnable:执行异步任务,但是没有返回结果Thread + Callable + FutureTask:完整一个可以有返回结果的异步任务。
2024-01-21 13:49:31 1063
原创 FutureTask应用&源码分析
FutureTask是一个可以取消异步任务的类。FutureTask对Future做的一个基本实现。可以调用方法区开始和取消一个任务。一般是配合Callable去使用。异步任务启动之后,可以获取一个绑定当前异步任务的FutureTask。可以基于FutureTask的方法去取消任务,查看任务是否结果,以及获取任务的返回结果。FutureTask内部的整体结构中,实现了RunnableFuture的接口,这个接口又继承了Runnable, Future这个两个接口。
2024-01-21 13:48:26 389
原创 Semaphone应用&源码分析
sync,ReentrantLock是互斥锁,保证一个资源同一时间只允许被一个线程访问Semaphore(信号量)保证1个或多个资源可以被指定数量的线程同时访问底层实现是基于AQS去做的。Semaphore底层也是基于AQS的state属性做一个计数器的维护。state的值就代表当前共享资源的个数。如果一个线程需要获取的1或多个资源,直接查看state的标识的资源个数是否足够,如果足够的,直接对state - 1拿到当前资源。如果资源不够,当前线程就需要挂起等待。
2024-01-21 13:47:15 862
原创 CyclicBarrier应用&源码分析
从名字上来看CyclicBarrier,就是代表循环屏障Barrier屏障:让一个或多个线程达到一个屏障点,会被阻塞。屏障点会有一个数值,当达到一个线程阻塞在屏障点时,就会对屏障点的数值进行-1操作,当屏障点数值减为0时,屏障就会打开,唤醒所有阻塞在屏障点的线程。在释放屏障点之后,可以先执行一个任务,再让所有阻塞被唤醒的线程继续之后后续任务。Cyclic循环:所有线程被释放后,屏障点的数值可以再次被重置。CyclicBarrier一般被称为栅栏。
2024-01-20 12:34:54 832
原创 CountDownLatch应用&源码分析
CountDownLatch就是JUC包下的一个工具,整个工具最核心的功能就是计数器。如果有三个业务需要并行处理,并且需要知道三个业务全部都处理完毕了。需要一个并发安全的计数器来操作。CountDownLatch就可以实现。给CountDownLatch设置一个数值。可以设置3。每个业务处理完毕之后,执行一次countDown方法,指定的3每次在执行countDown方法时,对3进行-1。主线程可以在业务处理时,执行await,主线程会阻塞等待任务处理完毕。
2024-01-20 12:33:25 519
原创 CopyOnWriteArrayList介绍
CopyOnWriteArrayList是一个线程安全的ArrayList。CopyOnWriteArrayList是基于lock锁和数组副本的形式去保证线程安全。在写数据时,需要先获取lock锁,需要复制一个副本数组,将数据插入到副本数组中,将副本数组赋值给CopyOnWriteArrayList中的array。
2024-01-19 21:40:58 560
原创 ConcurrentHashMap介绍
红黑树是一种特殊的平衡二叉树,首选具备了平衡二叉树的特点:左子树和右子数的高度差不会超过1,如果超过了,平衡二叉树就会基于左旋和右旋的操作,实现自平衡。每个节点必须是红色或者黑色。根节点必须是黑色。如果当前节点是红色,子节点必须是黑色所有叶子节点都是黑色。从任意节点到每个叶子节点的路径中,黑色节点的数量是相同的。当对红黑树进行增删操作时,可能会破坏平衡或者是特性,这是红黑树就需要基于左旋、右旋、变色来保证平衡和特性。
2024-01-19 21:38:30 1794
原创 线程池介绍
首先ThreadPoolExecutor中,一共提供了7个参数,每个参数都是非常核心的属性,在线程池去执行任务时,每个参数都有决定性的作用。但是如果直接采用JDK提供的方式去构建,可以设置的核心参数最多就两个,这样就会导致对线程池的控制粒度很粗。所以在阿里规范中也推荐自己去自定义线程池。手动的去new ThreadPoolExecutor设置他的一些核心属性。自定义构建线程池,可以细粒度的控制线程池,去管理内存的属性,并且针对一些参数的设置可能更好的在后期排查问题。
2024-01-17 11:28:02 1228
原创 SynchronousQueue介绍
SynchronousQueue这个阻塞队列和其他的阻塞队列有很大的区别在咱们的概念中,队列肯定是要存储数据的,但是SynchronousQueue不会存储数据的SynchronousQueue队列中,他不存储数据,存储生产者或者是消费者当存储一个生产者到SynchronousQueue队列中之后,生产者会阻塞(看你调用的方法)如果在阻塞期间有消费者来匹配,生产者就会将绑定的消息交给消费者生产者得等阻塞结果,或者不允许阻塞,那么就直接失败生产者在阻塞期间,如果线程中断,直接告辞。
2024-01-17 11:24:41 979
原创 DelayQueue
DelayQueue就是一个延迟队列,生产者写入一个消息,这个消息还有直接被消费的延迟时间。需要让消息具有延迟的特性。DelayQueue也是基于二叉堆结构实现的,甚至本事就是基于PriorityQueue实现的功能。二叉堆结构每次获取的是栈顶的数据,需要让DelayQueue中的数据,在比较时,跟根据延迟时间做比较,剩余时间最短的要放在栈顶。查看DelayQueue类信息:基于上述特点,声明一个可以写入DelayQueue的元素类在使用时,查看到DelayQueue底层用了PriorityQueue,
2024-01-16 15:00:59 409
原创 PriorityBlockingQueue概念
首先PriorityBlockingQueue是一个优先级队列,他不满足先进先出的概念。会将查询的数据进行排序,排序的方式就是基于插入数据值的本身。如果是自定义对象必须要实现Comparable接口才可以添加到优先级队列排序的方式是基于二叉堆实现的。底层是采用数据结构实现的二叉堆。优先级队列PriorityBlockingQueue基于二叉堆实现的。PriorityBlockingQueue是基于数组实现的二叉堆。二叉堆是什么?二叉堆就是一个完整的二叉树。任意一个节点大于父节点或者小于父节点。
2024-01-16 10:33:23 922
原创 LinkedBlockingQueue
查看LinkedBlockingQueue是如何存储数据,并且实现链表结构的。查看LinkedBlockingQueue的有参构造。查看LinkedBlockingQueue的其他属性。从remove方法开始,查看消费者获取数据的方式。你懂得,还是走offer方法。
2024-01-15 16:50:24 394
原创 ArrayBlockingQueue
阻塞队列中,如果需要线程挂起操作,判断有无数据的位置采用的是while循环 ,为什么不能换成if。C此时消费一条数据,执行notFull.signal()唤醒一个线程,A线程被唤醒。E走判断,发现有空余位置,可以添加数据到队列,E添加数据,走enqueue。如果判断是if,A在E释放锁资源后,拿到锁资源,直接走enqueue方法。此时A线程就是在putIndex的位置,覆盖掉之前的数据,造成数据安全问题。线程A,线程B,线程E,线程C。如果队列是满的, 就一直挂起,直到被唤醒,或者被中断。
2024-01-15 16:43:52 494
原创 Socket API使用——模拟http协议
这是一个简单的c/s架构的程序如果直接通过浏览器进行访问会出现如下情况控制台输出如下信息因为缺少访问的协议,所以访问时浏览器不能正常访问那么我们先从http协议看起。
2023-07-15 11:56:14 668
原创 Minecraft服务端配置
✨✨我的世界大家肯定都不陌生,在网易拿下中国区的代理后,很多小伙伴也是都转向了网易版我的世界,网易版我的世界可以说已经做是的十分全面了,使用起来也十分方便,一部分小伙伴也是看重了网易庞大的玩家数量,在这里可以找的很多种类丰富的服务器。但是美中不足的是我们很难在网易中找到我们自己喜欢的mod安装,大部分有趣mod还需要收费,既然如此,我们为什么不搭建一个自己的MC服务器呢?这样不光可以和自己的小伙伴联机打怪还可以随心所欲安装自己喜欢的mod😎。
2023-02-18 09:48:56 1674 1
原创 鲲鹏devkit性能分析工具介绍(四)
前面我们已经介绍了鲲鹏devkit性能分析工具的全景分析、热点函数分析、进程/线程分析、微架构分析、和访存分析,由此可见进行性能调优绝对不能够仅仅去进行一方面的考察而是需要全方面的数据分析进行一定的舍去才能达到最终自己所需要的调优效果。
2022-11-30 13:07:43 1388 22
原创 Devkit开发框架插件工具——Gzip工程创建
我们可以看到gzip文件夹中有两个子文件夹,分别是gzip_demo和gzip-1.10.aarch64, gzip_demo中包有一个名为demo_gzip的cpp文件,该demo包含了对gzip库中压缩和解压缩功能的调用。代码:cp ../../../../gzip_test/change_gzip_makefile.sh .代码:cp /home/project/testGzip/third-party/gzip/代码:mv ../../../gzip_test/gzip-1.10.tar.gz .
2022-11-30 12:53:46 922 10
原创 鲲鹏devkit性能分析工具介绍(二)
微架构又称为微体系结构/微处理器体系结构。是在计算机工程中,将一种给定的 指令集架构在处理器中执行的方法。一种给定指令集可以在不同的微架构中执行。实施中可能因应不同的设计目的和技术提升而有所不同。计算机架构是微架构和指令集设计的结合。
2022-11-29 00:04:25 673 10
原创 鲲鹏devkit性能分析工具介绍(一)
鲲鹏性能分析工具由四个子工具组成,分别为:系统性能分析、Java性能分析、系统诊断和调优助手。系统性能分析是针对基于鲲鹏的服务器的性能分析工具,能收集服务器的处理器硬件、操作系统、进程/线程、函数等各层次的性能数据,分析系统性能指标,定位到系统瓶颈点及热点函数,并给出优化建议。该工具可以辅助用户快速定位和处理软件性能问题。
2022-11-28 20:59:26 2230 9
原创 鲲鹏devkit开发套件——编译调试工具介绍
编译调试插件是其中的一个子工具。编译调试插件即插即用,支持一键安装服务器鲲鹏编译器,支持单机下Nvidia GPU应用调试能力,通过统一调试界面调试GPU应用,实现cuda-gdb调试能力,以及鲲鹏平台远程调试能力devkit编译调试工具具有以下特性一键式部署支持从Visual Studio Marketplace下载并在线安装插件,同时支持一键部署服务端GCC for openEuler、毕昇编译器和毕昇JDK编译调试一键式安装GCC for openEuler、毕昇编译器和毕昇JDK。
2022-11-27 11:28:11 2438 11
原创 鲲鹏devkit编译调试工具——《sudoku》作业解析
本次实验以sudoku项目为例介绍鲲鹏编译调试插件的基本使用方法本次实验的步骤主要为。
2022-11-24 00:56:13 953 6
原创 Devkit代码迁移工具——smartdenovo源码迁移
1、服务器和操作系统正常运行。2、PC端已经安装SSH远程登录工具。3、Porting Advisor已在准备好的x86平台环境和鲲鹏平台环境中完成安装并正常运行。4、待迁移的相关软件包、源代码已准备就绪。1、利用Porting Advisor的源码迁移功能对获取到的smartdenovo源代码进行扫描,获取其SO库依赖关系、可迁移性、迁移工作量等分析结果。2、根据Porting Advisor的源码迁移功能分析得到的smartdenovo依赖关系去准备对应的SO库。
2022-11-18 23:26:17 768 8
原创 megahit源码迁移解析
在进行megahit源码迁移前需要清理自己的实验环境1、链接鲲鹏服务器2、进入源码存放地址环境准备,清理之前实验环境后下载本次实验所需的源码之前存在的其他文件,删除code进入鲲鹏代码迁移工具源码存放位置清理完成后没有其他文件2、下载mehahit源码,这里会有网络不通的情况,需要多试几次下载比较缓慢需要长时间等待下载完成后使用以下命令进行代码合并这里我遇到了一个坑,最后的–init我是直接安装网页上的—init复制粘贴了,结果一直报错在改正后一切恢复正常。
2022-11-18 20:23:11 829 9
原创 鲲鹏代码迁移工具介绍
鲲鹏代码迁移工具是一款可以简化客户应用迁移到基于鲲鹏916/920的服务器的过程的工具。工具仅支持x86 Linux到的扫描与分析,不支持Windows软件代码的扫描、分析与迁移。当用户有x86平台上源代码的软件要迁移到基于鲲鹏916/920的服务器上时,既可以使用该工具分析可迁移性和迁移投入,也可以使用该工具自动分析出需修改的代码内容,并指导用户如何修改。鲲鹏代码迁移工具既解决了客户软件迁移评估分析过程中人工分析投入大、准确率低、整体效率低下的痛点,通过该工具能够自动分析并输出指导报告;
2022-11-16 21:34:50 3856 32
原创 python设计结构经典案例
假定公鸡2元/只,母鸡3元/只,小鸡0.5元/只。先由最后1天剩下的桃子数推出倒数第2天的桃子数,再从倒数第2天推出倒数第3天的桃子数……正常情况下,模拟自动饮料机一直运行,输入不同的数字,对应不同的饮料。公鸡 10 只,母鸡 14 只,小鸡 76 只.公鸡 15 只,母鸡 11 只,小鸡 74 只.公鸡 0 只,母鸡 20 只,小鸡 80 只.公鸡 5 只,母鸡 17 只,小鸡 78 只.公鸡 20 只,母鸡 8 只,小鸡 72 只.公鸡 25 只,母鸡 5 只,小鸡 70 只.
2022-10-24 23:36:19 143
原创 gpgcheck介绍
gpgcheck是gpg签名是否开启的选项名称,1是开启,0是不开启,一般内部部署软件包下载可以关掉。gpg签名主要用来在Linux实现官方发布的包的签名机制,主要为了软件下载使用的安全。添加gpgcheck有效的防止了软件包被篡改的情况。
2022-10-22 18:07:19 3914 2
原创 Python运算符与表达式
Python运算符包括赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、成员运算符和身份运算符。表达式是将不同类型的数据 (常亮、变量、函数)用运算符按照一定得规则连接起来的式子。算术运算符包括四则运算符、求模预算符和幂运算符。本章详细介绍了各种运算符的使用方法和表达式规则。
2022-10-15 20:48:50 500
原创 gcc编辑器的使用
什么是gcc?gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。本文将会介绍gcc编辑器的基本命令及使用方法。使用gcc -v检查gcc是否安装如果需要安装gcc可以使用以下命令进行安装。
2022-10-08 22:43:46 925 4
原创 python基本数据类型
在最后会出现不定的误差,但是这种误差非常的小,于是为了使最终的结果保持正确,一般使用浮点数计算进行判定的语句中我们都需要先确定其精确度,来保持结果的正确。上面的列子中我们只需要保证误差小于我们的精确度就可以保证我们的结果的正确性,于是上面的代码可以这样修改。如:0B1011(相当于- 十进制的11)、-0b101(相当于十进制的-5)。如:0xAF(相当于十进制的175)、-0X123(相当于十进制的-291)。如:0o56(相当于十进制的46)、-0O145(相当于十进制的-101)。
2022-09-24 16:08:08 617
Minecraft1.16.5-forge
2023-02-18
Mybatis 编写mapper文件报错必须声明元素 mapper
2023-12-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人