自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(154)
  • 问答 (1)
  • 收藏
  • 关注

原创 如何优雅的查看方法耗时,不用写一行代码!这个插件支持的太多了

Cool Request是一个IDEA中的接口调试插件,除了可以发起基本的HTTP请求之外,还提供了强大的反射调用能力,可以绕过拦截器,这点广受网友的好评,当然伴随着还有Spring中对@Scheduled注解的调用,以及xxl-job的支持,这是不是很酷(Cool)?我怀着一颗激动的心向大家介绍这个Trace功能。Trace可以统计除了java包的任意包,为什么不能统计java的?因为可能会出现不稳定的情况,再说,java包怎么可能有问题,有问题的也是你的代码(手动狗头)。

2024-03-29 09:56:42 322

原创 IDEA中这么强大的接口调试插件,相见恨晚啊!

在后端SpringBoo开发中,都需要一个接口测试工具,从一开始的postman,到现在的国产测试工具,数不胜数,而最方便的莫过于在IDEA中就可以调试,因为IDEA插件中有能力分析出当前项目所编写的Controller数据,可以进行统计,更方便我们发起http请求,不需要复制url到别的测试工具了,今天就推荐一款,名叫Cool Request,他纯免费、开源。插件名称: Cool Request文档链接: https://plugin.houxinlin.com。

2024-02-14 15:29:16 1796

原创 开发了一年的IDEA插件,接口调试的强大工具,敢说吊打所有

经历了整整一年的开发,现在这款插件终于可以测试了,可以到网站http://plugin.houxinlin.com 进行下载(Idea版本仅支持2021.1及以上)。那么,这个插件到底解决了什么问题?以至于我花了一整年时间。每个后端程序员都需要借助postman这类工具进行测试,而这类百花齐放的接口测试工具数不胜数,国内也陆续出现apipost、apifox这些,而idea端的接口测试工具也有,那为什么我还会开发一个类似的呢?没错,它肯定有别人没有的功能,更强大,更方便。

2023-12-18 09:58:48 1183

原创 国庆7天,写了一个轻量级API框架

有些项目是我们自己或者为朋友所开发的,功能比较简单,接口也比较少,但通常使用SpringBoot开发后,少说也得20M,传输部署也不方便,且这个jar中很可能有80%-90%的代码是永远得不到执行的,但他可能被虚拟机所加载,占用一部分内存。所以在国庆7天写了一个小型的后端框架,称为mini-api,他的源码只有141KB,但由于引入了其他框架,所以最终大小为10M,可以使用下面方式将min-api引入到你的项目。GradleMaven

2022-10-08 23:07:31 1091 1

原创 开发了一款Linux服务器管理软件,邀请你体验

📚 CoolDesktop介绍CoolDesktop是一个Linux服务器管理软件,CoolDesktop采用全新的操作方式,让你像操作本地系统一样,操作远程Linux,除了基本的文件复制、粘贴、上传、删除、重复名等基本操作,还可以进行终端操作,如果对当前应用不满意,可以自行开发软件,挂载到CoolDesktop上,这和我们平常在系统上安装软件是一个道理。但一个人的力量毕竟有限,很乐意与你一同完善它🛫 安装点击这里下载使用scp命令或者xftp上传到您的服务器使用下面命令启动,默认端口为80

2022-04-28 20:46:44 1960 1

原创 快速接入小爱音箱,操作电脑动动嘴

前言如果有个设备能把你说的话传递到电脑中,这样你可以基于他开发一些软件,动动嘴就可以操作电脑,我想,这一定会给生活添加一些乐趣,而小爱音箱是个不二选择,开发也比较简单,如果用官方方式开发,还需要开发服务端程序,下面说下小爱音箱开发流程。首先需要在小爱音箱开发官方注册一个应用,如果你有小爱,可能会对他说过进入XXX,这个XXX就是一个应用,而第一步就是填写XXX的信息,我们暂时先把XXX叫成"小林的电脑",之后,你对他说进入小林的电脑,小爱就会处于进入应用的状态,后续你对他说的所有话,都将通过HTTP转发

2022-04-06 17:22:12 4796

原创 历时三个月,我开发了一套Linux服务器管理软件

CoolDesktop介绍CoolDesktop是一个Linux服务器管理软件,CoolDesktop采用全新的操作方式,让您像操作本地系统一样,操作远程Linux,除了基本的文件复制、粘贴、上传、删除、重复名等基本操作,还可以进行终端操作,如果对当前应用不满意,可以自行开发软件,挂载到CoolDesktop上,这和我们平常在系统上安装软件是一个道理。Github地址https://github.com/houxinlin/cooldesktop开发应用本系统支持加载自定义应用,如您想开发一个定时

2022-03-20 10:40:07 1092

原创 开源一款个人博客,欢迎提意见

体验地址http://houxinlin.com:6060/效果Githubhttps://github.com/houxinlin/OneBlog

2021-10-29 15:05:47 156

原创 使用上古神器帮姐姐完成寸照自动排版/打印

前言本来今天还是写关于MySQL系列文章,结果做了一个小程序,就没写。由于姐姐开的摄影店,时不时就有人来照1/2寸照,拍摄后进行修图美白,然后进行排版,1寸的话排列8张,2寸是4张,然后导出png,进行打印,所以我想的是可以用程序简化后两步骤。这回没有选择Java写,而是选择上古神器Visual Basic。操作流程对于程序操作流程是这样想的:首先要更改注册表,增加对png、jpg图片右键菜单选项,选择寸照打印,这样就会启动我们的程序,然后根据当前尺寸大小,自动排列8张或4张,最后调用默认打印机

2021-08-05 10:19:23 737

原创 小伙伴惊呆了!这个编译器可以直接将Java源码编译为本地机器指令

前言Write Once,Run Anywhere,一次编写,到处运行,我们再熟悉不过了,尽管都知道Java源码要先通过javac编译为字节码文件,然后由JVM去运行,但是有些选手就想把他编译成为exe,当然这也是可以的,虽然我还没有正真的尝试过,但是做到这样也很简单,原理就是把jre和jar一起打包,存放在exe文件中,然后运行exe的时候,释放jre和jar文件,接着就可以调用java -jar去执行这个jar包,但是这样做的话,最终的exe体积就会变的非常大,并且没有脱离JVM环境。那还有没有其他

2021-02-03 12:44:59 436 2

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

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

2020-10-21 17:29:53 213

原创 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 224

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

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

2020-10-20 11:06:25 268

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

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

2020-10-20 09:00:55 216

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

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

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

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

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

2020-10-16 15:30:56 155

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

前言

2020-10-15 15:37:43 215

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

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

2020-10-14 14:22:36 401

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

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

2020-10-11 17:02:29 196

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

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

2020-10-07 17:07:42 228

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

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

2020-10-06 13:37:51 432

原创 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 310

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

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

2020-10-01 18:22:23 648

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

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

2020-10-01 13:22:30 3083

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

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

2020-09-28 11:12:13 880 1

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

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

2020-09-27 15:43:38 482

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

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

2020-09-25 21:42:27 1407

原创 死磕算法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 127

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

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

2020-09-22 15:38:39 512

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

题目给出两个字符串表示正整数,求其乘积,但不得使用系统类将其转换成整数。解法先看代码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 107

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

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

2020-09-19 19:06:31 620

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

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

2020-09-18 16:02:24 240

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

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

2020-09-17 18:04:21 699 1

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

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

2020-09-16 11:32:30 1423

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

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

2020-09-14 15:29:29 354

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

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

2020-09-13 21:15:47 2684 1

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

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

2020-09-12 10:49:56 702

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

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

2020-09-11 15:16:03 152

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

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

2020-09-10 19:04:37 1339 2

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

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

2020-09-06 19:49:24 14007 1

空空如也

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

TA关注的人

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