自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入研究MySQL(四)、备份与恢复

一、前言知道备份的重要性吗?没经历过的可能永远不知道他的痛,我们在重装系统、手机升级等时候,备份一下数据总是有好处的,指不定那个操作导致磁盘数据丢失,前些日子删库跑路被判刑的那位老哥,如果公司有备份的话,也不至于损失几个亿(听说是让绿了),所以本章来学习一下MySQL的备份与恢复,如果要定期备份的话,可以写个脚本定时执行,省去人来完成这重复的工作。我们可以使用以下任何一种方法来生成MySQL数据库的备份:使用mysqldump程序使用二进制日志在本文中,会解释如何使用mysqldump生成My

2020-10-21 17:29:53 20

原创 Linux管理工具二次更新,增加进程管理

二更距离版本一已经过去很长时间了(虽然没什么功能),主要没时间写这个,这几天抽空又完善了一下,更新的地方有:修改了首页的UI及操作方式。增加了进程枚举、终止。图片资源可以以缩略图方式预览。下次更新会加入项目自动部署以及性能监控。地址后端https://gitee.com/hxl495/linux-file-manager前端https://gitee.com/hxl495/linux-file-manager-web运行&部署这个版本前端使用了Vue,后端还是Sp

2020-10-21 11:40:03 27

原创 三进多线程,线程数据交换,Exchanger就够了

Exchanger简介如果对java并包(java.util.concurrent)知道的话,那么可能知道CountDownLatch、CyclicBarrier这些多线程并发工具,不熟悉的话可以看以下文章。Exchanger也在其中,顾名思义,Exchanger是用于两个线程交换数据的,最重要的是exchange()方法,这是一个阻塞方法,意味着线程将调用exchange()方法时在交换点等待,直到另一个线程到达,一旦另一个线程到达,两个线程将会交换各自的数据并返回。还有个重载方法接收TimeUnit

2020-10-20 11:06:25 31

原创 Linux下套接字编程指南,静态资源服务器实现

0、阅读本章需要哪些知识我很少介绍关于基础的东西,因为这些文章太多了,网上关于基础的一抓一大把,可能比我介绍的还好,所以,在阅读本章前,需要具有基本的Socket通信流程、C语法、HTTP请求/响应格式、HTTP响应头字段各代表什么信息,这些就足够了。一、什么是套接字套接字其实叫socket,关于socket的文章以前写过一篇,是关于openjdk下的socket实现,里面介绍了java中socket底层的的实现方式,但是是在Window环境下,今天在Linux环境下做个演示,以及做个静态资源服务器。

2020-10-20 09:00:55 20

原创 深入研究MySQL(三)、主从复制原理及演示

一、主从复制概述主从复制就是将一台主机的数据复制到另一台或者多台主机上,复制过程中一台服务器充当主库(Master),就是源数据存放的主机,还有一台或者多台服务器充当从库(Slave),Mysql支持单向、双向、链式级联、异步复制,还有在5.5版本后的半同步复制等。利用主从复制功能,我们可以做到在主库发生意外时,让从库接管主库,也能让从库分担主库的读压力,这一点,也可以看看以前关于Redis主从复制的介绍。模式图主从复制演示Docker安装MySQL由于本次演示需要用到多个MySQL实

2020-10-17 16:24:35 47 2

原创 深入研究MySQL(二)、事务与隔离级别

一、事务简介本章介绍关于事务的知识,在简介中,会分5个点去介绍。在这里推荐一本书,《数据库事务处理的艺术 事务管理与并发控制》1. 事务概述事务就是一组插入、删除、更新语句的集合,比如一个事务中有两条插入语句,一条更新语句,这三条语句要么都执行,要么都不执行,是一个不可分割的单位,ACID 四大特性就是事务的基础,在下面会说。在操作事务中,我们可以通过commit提交事务,就是对数据库做的所有修改成为永久性,还有rollback命令回滚事务,也就是撤销正在进行的所有未提交的修改,回滚操作在我们安装

2020-10-16 15:30:56 21

原创 深入研究MySQL(一)、锁机制

前言

2020-10-15 15:37:43 47

原创 开源XMPP客户端,老外的代码真是看不懂

前言一直想做一款自己的即使通信APP,加一些特有的功能,用来和家人通信,但是还真不好搞,在尝试用Socket时,最大问题就是保证消息可靠不丢,重发等基本即时通信该有的东西,后来选择开源实现,也就是XMPP,服务端采用openfire,还有smack,但是smack的类库不是很熟悉,在直接开发时候导致离线后消息丢失,当然我也去尝试解决这个问题,得到的解决方法是先设置离线状态,然后使用离线消息管理器去拉取取消息,但也无济于事,然后想想算了,继续找基于XMPP开源的APP吧。gitee、github搜了半天,

2020-10-14 14:22:36 21

原创 EventBus这么强大,那么来手写一个

EventBus今天突然想起了EventBus,做Android的肯定或多或少知道点这东西,EventBus是一个非常强大的事件发布/订阅轻量级框架,我们可以通过他在Activity、Fragment之间进行通信,或者其他组件中,他的API也及其简单,使用也方便,能使得代码更简洁,那么既然EventBus很强大,今天就来手写一个具有基本功能的“EventBus”。public class TestActivity extends AppCompatActivity { protected void o

2020-10-11 17:02:29 18

原创 抽筋了的我非要调试OpenJdk,且看他怎么虐我

前言说来话长,最近又闲的无聊,在看JDK的源码,但是很多关键的地方都是native方法,这就导致需要在往深处看,也就是需要看openjdk源码了,但是c++代码又谈何容易,况且也不怎么会。但是想来想去,决定还是要研究一下的,在以前的文章中已经编译过了openjdk11,虽然过程坎坷,但也是成功了,那么接下来就是导入openjdk源码到ide中,在下面会以clion作为示例,clion下载安装就不说了。激动的心,颤抖的手,Deepin下成功编译OpenJdk11!!!光这导入就花了我1天,毕竟open

2020-10-07 17:07:42 22

原创 无限轮播图使用Scroller就这么简单

前言这几天又拾起老本行,复习复习Android,才发现忘的差不多了,上午做了一个小Demo,配合Scroller做了一个轮播图,效果如下,但是不知为何,录制的GIF成这样,凑乎一下看看。原理是继承ViewGroup,然后自己摆放子View,也就是摆放在一条线上,开启一个定时器,每隔X秒通过Scroller进行滚动,当然还有处理Touch事件,在手指按下的时候定时器停止,抬起的时候定时器重新启动。Scroller我们知道View中提供了scrollTo()和scrollBy()两个方法用来滚动,也就

2020-10-06 13:37:51 187

原创 Java8时间操作参考大全,一文打尽

前言Java中关于日期的API貌似是有点尴尬的,从1.0中的Date到1.1中的Calendar,在到1.8中的LocalDateTime等,给我们增加了不少困惑,到底该使用哪一个?毫无疑问,我们要使用更强大的API,下面会列举出我所能想到的时间操作需求,可供参考。另外有一些类还存在坑,所以在使用时间API时,需要额外的小心。获取当前日期、时间public class Main { public static void main(String[] args){ LocalDa

2020-10-04 14:40:26 35

原创 JVM关闭时,如何优雅的清理资源?

HOOK线程首先要明白一个事,在什么情况下JVM进程会退出?答案是JVM进程中没有非守护线程,或者收到系统中断信号。在这里想起强行终止一个进程的方法,就是结束进程中的所有线程,这个进程自然会退出,题外话…。JDK在Runtime下提供了一个方法addShutdownHook,看名字就是知道是添加一个关闭时候执行的线程,JVM退出时,这个线程就会被启动执行,我们可以在这里做资源释放的操作,如Socket,还可以做个防重复启动的程序,当第一个启动时候,创建一个.lock文件,退出时候删除,如果重复启动,就

2020-10-01 18:22:23 44

原创 Android圆角布局,你有几种实现方式?

前言在Android中有时候需要用到圆角布局,或者圆角头像,实现办法有很多,但是各种办法有坑没坑那就是另一说了,今天就说三种办法,CardView、Shape、自定义View。CardView首先说第一种CardView,这是官方提供的一个控件,使用他需要引入,具体什么时候发布的就不知道了。使用CardView非常简单,只需要给他配置app:cardCornerRadius圆角大小就行。 implementation 'androidx.cardview:cardview:1.0.0'&l

2020-10-01 13:22:30 108

原创 个人小程序不支持视频类目,没办法把我的毕设开源

起因因为快毕业了,所以要做毕业设计,想来想去,做一个教学类的小程序吧,但是起初我并不知道个人小程序不支持视频类目,没仔细阅读过小程序相关的规定,因为好久不做小程序了,主学的是Java后端,然后花了几天实现出来,在今天准备审核一下,结果才发现,不允许!!!。行吧,不允许就不允许了,没办法,那也不能把源码放着生崽啊,所以全部源码都进行了开源。地址(后端):https://gitee.com/hxl495/wx-course地址(小程序):https://gitee.com/hxl495/teachi

2020-09-28 11:12:13 53

原创 恕我直言,这可能是你见过最详细的class文件结构分析

前言对字节码垂涎已久,但由于较复杂,所以耽搁了很长时间,在周末两天参考的大量书籍,总结成这篇文字,由于网上很少有直接对字节码分析的,全贴一堆概念,让人很难懂,所以本章会结合实际的字节码来一一分析。参考书籍《深入分析Java Web技术内幕》《Java虚拟机精讲》《深入理解Java虚拟机 JVM高级特新与最佳实践》生成一个class文件public class Test { private static final String name ="name"; privat

2020-09-27 15:43:38 74

原创 Win32汇编系列九,GDI画个寂寞

前言图片显示,说简单也简单,说难也难,在html中给img指定一个src、在Android中给ImageView指定一个src,还能各种圆角、缩放,但是,这一切在以前学Window的时候是真的困难,想显示一张图片怎么办?,找各种资料,最终只有一个答案,GDI+,GDI+不知道是啥玩意怎么办,在找资料学,最后会发现,显示一个PNG图片,需要十几行左右,还不包括有圆角等。(这里没说C#)。但今天说的是GDI,GDI+作为GDI的扩展,增强了很多,也复杂了很多,在后续会慢慢介绍,另外本文需要有Window消息

2020-09-25 21:42:27 720

原创 死磕算法2、括号生成

题目数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。解法 public static void main(String[] args) { System.out.println(generateParenthesis(2)); } public static List<String> generateParenthesis(int n) { List<String> res = new ArrayList&

2020-09-22 16:32:53 15

原创 RabbitMq如何保证消息可靠性?

我们知道在涉及网络IO操作的时候,可能要面临失败的问题,如在RabbitMQ中,消息的可靠性是个很大的问题,可能会发生消息丢失,还有RabbitMQ 的消息默认存放在内存上面,如果不进行配置,消息不会持久化保存到硬盘上面的,如果节点重启或者意外挂掉,消息就会丢失,所以就要对消息进行持久化处理。下面对RabbitMQ可能发生消息丢失的场景进行说明。一、生产者发送消息到MQ失败在生产者发送消息时,可能由于网络等其他原因导致消息没有到MQ中,但是生产者又不知道消息到底到达没有,这就会造成消息的丢失,.

2020-09-22 15:38:39 31

原创 死磕算法一、字符串相乘

题目给出两个字符串表示正整数,求其乘积,但不得使用系统类将其转换成整数。解法先看代码public static String multiply(String num1, String num2) { String n1 = new StringBuilder(num1).reverse().toString(); String n2 = new StringBuilder(num2).reverse().toString(); int[] d =

2020-09-19 20:51:25 17

原创 代码生成工具是如何将数据库表转换成Model的?

前言使用过Mybatis的都知道有个代码生成工具,Mybatis-Generator,可以生成Mapper文件、Dao类,Model实体文件,非常好用,作为他的扩展Mybatis-Plus也同样有这样的功能,根据数据库中的信息生成Java文件,但是他底层是怎么获取表中字段信息的,应该大部分人不知道,也不常用。所以今天说说他的原理。JDBC:DatabaseMetaData关键类其实就是DatabaseMetaData,通过他可以查看已连接数据库的元数据,如数据库中定义了哪些表,每个表具有哪些列等信息

2020-09-19 19:06:31 40

原创 万字长文了解Mybatis执行流程

前言关于Mybatis以前也写过几篇,但是没有写过他的执行过程,这几天又重温了一下,记录在本章中,Mybatis的执行过程比Tomcat简单多了,在以前学习Tomcat源码时,用了三四天才简单梳理明白他处理一个请求的流程,而Mybatis可以在短短几小时就可以明白。在本章会按照一个查询的流程来跟踪,删除、更新的流程也大同小异。上路吧。Configuration这个类在API层面是用不到的,但是在内部这个类却保存这几乎所有的配置,在XMLConfigBuilder解析配置文件的时候,会把里面的节点信

2020-09-18 16:02:24 45

原创 男人的APP,收费怎么办?拿起键盘就是干

前言那日,基佬群发了个APP,男人,你懂的,结果还是收费的,怎么办

2020-09-17 18:04:21 27

原创 Win32汇编系列八,多线程

文章目录前言前言我对Windows线程API有一种恐怖的感觉,那是因为在以前第一次接触它的时候是通过VB,好吧,就是VB,在他的开发环境中做子类化或者多线程编程时,IDE总会莫名其妙经常崩溃,以至于后面继续是哪怕改了一个字符,运行时都要先保存一下,因为这个IDE可没有自动保存功能。但说回来,并不是他的API恐怖,而是IDE恐怖。...

2020-09-16 11:32:30 750

原创 SpringBoot集成Dubbo服务,我行你也行

文章目录0x00、基础概念0x01、工作流程0x02、使用步骤0.安装zookeeper1.引入依赖2.定义服务接口3.服务提供方实现接口4.配置服务消费者0.配置1.定义服务接口2.控制器启动另一个依赖总结0x00、基础概念首先要简单了解下Dubbo、RPC、分布式是什么,不然干起来会懵。先说分布式,简单说就是把一个完整的系统拆分成不同的服务,然后将这些服务放在不同的服务器上减轻单体服务的压力提高并发量和性能,而不同服务之间需要互相调用,而远程过程调用(RPC)就可以让一台计算机上的程序调用另一个

2020-09-14 15:29:29 59

原创 Win32汇编系列七、窗口程序原理及实现

前言学c语言的人天天面对黑框框,有木有?不知道是否想用c写一个窗口程序?我想应该也很希望吧,目前我见过的书中很少有介绍窗口程序设计,如果想写的话,还需要去网上、b站搜索,使用c写窗口程序其实挺麻烦的,需要了解Windows消息机制、GDI或者GDI+、还有各种控件,如Button,另外自带的控件都太难看,需要使用GDI或GDI+自己绘制,这样工作量又大了很多,所以现在很少有rj这种最"底层"的方式实现了就需要我不曾在c中大量写过,...

2020-09-13 21:15:47 744

原创 深入理解Redis二进制位数组

前言关于Redis,以前写过以下几篇:添加链接描述添加链接描述添加链接描述添加链接描述添加链接描述添加链接描述添加链接描述添加链接描述

2020-09-12 10:49:56 45

原创 SPI机制都不了解,还学什么Java?

前言SPI全称叫Service Provider Interface,在Java 6时引入的这个功能,用于发现和加载与给定接口相匹配的实现, 有不少框架用它来做服务的扩展发现, 比如想在运行时动态给一个接口添加实现,只需要在src/META-INF/services/目录下建立一个文件,文件名是接口的全限定名,文件的内容可以有多行,每行都是这个接口对应的具体实现类的全名。...

2020-09-11 15:16:03 46

原创 深入解析CAS汇编层实现

volatile有什么用在java并发中,volatile是一个非常有用的关键字,由于在多处理器开发中需要保证了共享变量的可见性,也就是线程A修改一个共享变量S后,B线程能立马知道S目前处于什么值,这个原因...

2020-09-10 19:04:37 68

原创 SpringBoot AOP拦截、修改请求参数

前言最近有这么个功能,由于使用了thymeleaf,多个页面遇到要使用同一个数据的问题,但是如果在每个Controller下都要向Model放数据,那么就有很多重复代码,不太优雅,所以想到了AOP,在进入方法前取到Model实例,向他增加数据即可。引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-a

2020-09-06 19:49:24 455

原创 小程序WebSocket一对一聊天(可离线消息)

Gitee地址https://gitee.com/hxl495/applets-example/tree/master/wechat项目截图运行项目1.准备好AppID和AppSecret(小程序密钥)。导入并配置小程序项目目录下SpringBoot-Server目录不属于小程序部分,属于后端,无需导入。接下来打开app.js,配置服务器IP地址,如果在Tomact下部署,需要增加项目名。配置后端进入SpringBoot-Server\wechat\src\main\reso

2020-09-06 13:26:56 289

原创 Win32汇编系列六、循环结构程序设计

前言当我们要做重复的事情时,就需要用到循环指令,在DOS时代的汇编语言中,最常用的语句就是LOOP系列指令,但是这些指令又使程序可读性差,增加了维护难度,在Win32汇编中所以增加了类似高级语言中循环语法的伪代码,本章就介绍LOOP指令和Win32中的伪指令。LOOPLOOP的循环次数保存在ECX中,每执行一次循环,ECX就自动减一,直到为0,如果为0则退出循环,LOOP后面跟着标号,程序走到LOOP指令时,判断ECX减一是否为0,如果是则继续下一行,否则跳到标号位置执行。下面是执行10次循环,每次

2020-09-01 22:35:50 48

原创 Win32汇编系列五、分支结构程序设计

程序不可能完全的顺序去执行,有时候我们会使用选择、循环结构去设计,本章记录汇编中的选择结构程序设计,也就是学习条件转移指令。条件转移指令就是根据测试的条件是否满足,如果满足,则进行转移,条件测试指令测试标志寄存器中一个或多个标志是否满足要求,如果满足要求,则控制转移到目的地址,如果不能满足要求,CPU就忽略条件转移指令并顺序执行,比如,在逻辑左移指令执行后,可以测试CF标志位判断操作数移出的最高位是否为1。示例JZJZ指令就是当ZF标志位等于1时跳转,ZF标志位是运算结果位0时该标志位等于1,否则为

2020-08-31 18:53:24 39

原创 Win32汇编系列四、逻辑运算指令

这章很简单,就是与(And)、或(OR)、非(NOT)、异或(XOR)的运算。逻辑与(And)两个数进行And运算时,当两个位都是1时,那么结果为1,否则为0,举例8 And 10,8的二进制是1000,10的二进制是1010,所以最后的结果为8(1000)。1000 (8)1010 (10)1000 (8)受影响的标志位有CF、OF、PF、SF、ZF。.386.Model Flat, StdCallOption Casemap :Noneinclude C:\masm32\i

2020-08-25 16:27:19 55

原创 Win32汇编系列三、整数算数运算符

整数算数运算指令也就是进行加、减、乘、除,相应的指令就是ADD、SUB、MUL、DIV,操作数可以是8位、16位、32位的。标志寄存器标志寄存器又称程序状态字,主要用于反映处理器的状态和ALU运算结果的某些特征及控制指令的执行,有些指令的执行会改变标志位,就比如逻辑运算指令等,不同的指令会影响不同的标志位。每个标志位具体什么意思,本章就不说了。如上面的PF,反应了运算结果中1的个数的奇偶性,如果个数为偶数,那么PF位位1,否则为0,还有如ZF反应了运算结果是否为0,如果为0,那么ZF位位1,否则为

2020-08-24 17:16:18 61

原创 Win32汇编系列二、数据传送指令

MOVMOV相当于高级语言的赋值语句,如int a= 1,把1赋值给a,1是源,a是目标。MOV的语法如下:MOV Reg/Mem,Reg/Mem/ImmReg表示寄存器,英文Register的缩写,Mem表示内存,Imm表示立即数,逗号后面的Reg/Mem/Imm都表示源操作数,逗号前面表示目的操作数,MOV的功能就是把源操作数的值传递给目的操作数。.386.Model Flat, StdCallOption Casemap :Noneinclude C:\masm32\include\

2020-08-23 10:40:25 49

原创 Win32汇编开篇、Hello World

下载MASM32地址:http://www.masm32.com/MASM32并不是微软官方发布的软件,是国外的MASM爱好者自行整理和编写的一个软件包,最高版本为11.0版,另外下载了MASM32 ,还要下载一个开发工具RadASM,RadASM下不下载都行,如果没有,需要我们手动编译(ml)、链接(exe)。有了RadASM,可以一键编译、链接、运行。注意的是,MASM32 安装只能安装在某个盘的根目录,我第一次安装在某个目录下,貌似在编译时会报错,具体记不清了。Hello Word.38

2020-08-21 21:41:34 39

原创 你知道阻塞队列有哪些吗?

什么是阻塞队列阻塞队列也是Queue队列的一种,叫BlockingQueue,所以BlockingQueue继承了 Queue。另外Queue 和 BlockingQueue 都是在 Java 5 中加入的。public interface BlockingQueue<E> extends Queue<E> {BlockingQueue是线程安全的,所以很多时候我们可以利用这个特性,去解决业务中的问题,比如在使用生产者/消费者模式的时候,生产者只需要往队列里添加元素,消费者只

2020-08-20 21:20:53 118

原创 一套键盘如何控制多台电脑?

昨天在群里看见一个小伙伴问一套键盘如何控制多台电脑?正好勾起以前学习Windows时候的乐趣,其实这个也做过,是我的一个朋友需要,实现原理也比较简单,大概就是通过键盘钩子钩住按键,通过Socket发送到其他电脑上,其他电脑开始模拟按键,鼠标也是一样,大概会用法到以下API。啥是钩子Windows中的窗口程序是基于消息机制,事件驱动的,根据不同的消息完成不同的功能,钩子就是拦截Windows的某些消息,在这个消息到达指定窗口前会拦截下来,我们可以从中获取我们想要的信息,可以加工改变这个消息,也可以不作处理

2020-08-17 18:54:57 65

原创 最强Markdown,tui.editor+vue

前言自建博客我觉得最痛苦的事就是选用哪个Markdown,找一个符合自己的非常不容易,当前我使用的是editor.md这款,其实非常不错,地址:https://pandao.github.io/editor.md,但是他有几个缺点,让我萌生换其他的想法。于是闲下时间重新找了一款,那就是tui.editor。tui.editor和editor.md的star都挺高,另外editor.md是国产的。下面将演示tui.editor与Vue集成。tui.editor与Vue下载npm inst

2020-08-09 12:01:41 264 2

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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