
Java
文章平均质量分 66
HouXinLin_CSDN
这个作者很懒,什么都没留下…
展开
-
国庆7天,写了一个轻量级API框架
有些项目是我们自己或者为朋友所开发的,功能比较简单,接口也比较少,但通常使用SpringBoot开发后,少说也得20M,传输部署也不方便,且这个jar中很可能有80%-90%的代码是永远得不到执行的,但他可能被虚拟机所加载,占用一部分内存。所以在国庆7天写了一个小型的后端框架,称为mini-api,他的源码只有141KB,但由于引入了其他框架,所以最终大小为10M,可以使用下面方式将min-api引入到你的项目。GradleMaven原创 2022-10-08 23:07:31 · 1312 阅读 · 1 评论 -
开发了一款Linux服务器管理软件,邀请你体验
📚 CoolDesktop介绍CoolDesktop是一个Linux服务器管理软件,CoolDesktop采用全新的操作方式,让你像操作本地系统一样,操作远程Linux,除了基本的文件复制、粘贴、上传、删除、重复名等基本操作,还可以进行终端操作,如果对当前应用不满意,可以自行开发软件,挂载到CoolDesktop上,这和我们平常在系统上安装软件是一个道理。但一个人的力量毕竟有限,很乐意与你一同完善它🛫 安装点击这里下载使用scp命令或者xftp上传到您的服务器使用下面命令启动,默认端口为80原创 2022-04-28 20:46:44 · 2134 阅读 · 1 评论 -
快速接入小爱音箱,操作电脑动动嘴
前言如果有个设备能把你说的话传递到电脑中,这样你可以基于他开发一些软件,动动嘴就可以操作电脑,我想,这一定会给生活添加一些乐趣,而小爱音箱是个不二选择,开发也比较简单,如果用官方方式开发,还需要开发服务端程序,下面说下小爱音箱开发流程。首先需要在小爱音箱开发官方注册一个应用,如果你有小爱,可能会对他说过进入XXX,这个XXX就是一个应用,而第一步就是填写XXX的信息,我们暂时先把XXX叫成"小林的电脑",之后,你对他说进入小林的电脑,小爱就会处于进入应用的状态,后续你对他说的所有话,都将通过HTTP转发原创 2022-04-06 17:22:12 · 5762 阅读 · 0 评论 -
历时三个月,我开发了一套Linux服务器管理软件
CoolDesktop介绍CoolDesktop是一个Linux服务器管理软件,CoolDesktop采用全新的操作方式,让您像操作本地系统一样,操作远程Linux,除了基本的文件复制、粘贴、上传、删除、重复名等基本操作,还可以进行终端操作,如果对当前应用不满意,可以自行开发软件,挂载到CoolDesktop上,这和我们平常在系统上安装软件是一个道理。Github地址https://github.com/houxinlin/cooldesktop开发应用本系统支持加载自定义应用,如您想开发一个定时原创 2022-03-20 10:40:07 · 1187 阅读 · 0 评论 -
开源一款个人博客,欢迎提意见
体验地址http://houxinlin.com:6060/效果Githubhttps://github.com/houxinlin/OneBlog原创 2021-10-29 15:05:47 · 234 阅读 · 0 评论 -
Linux下套接字编程指南,静态资源服务器实现
0、阅读本章需要哪些知识我很少介绍关于基础的东西,因为这些文章太多了,网上关于基础的一抓一大把,可能比我介绍的还好,所以,在阅读本章前,需要具有基本的Socket通信流程、C语法、HTTP请求/响应格式、HTTP响应头字段各代表什么信息,这些就足够了。一、什么是套接字套接字其实叫socket,关于socket的文章以前写过一篇,是关于openjdk下的socket实现,里面介绍了java中socket底层的的实现方式,但是是在Window环境下,今天在Linux环境下做个演示,以及做个静态资源服务器。原创 2020-10-20 09:00:55 · 293 阅读 · 0 评论 -
深入研究MySQL(三)、主从复制原理及演示
一、主从复制概述主从复制就是将一台主机的数据复制到另一台或者多台主机上,复制过程中一台服务器充当主库(Master),就是源数据存放的主机,还有一台或者多台服务器充当从库(Slave),Mysql支持单向、双向、链式级联、异步复制,还有在5.5版本后的半同步复制等。利用主从复制功能,我们可以做到在主库发生意外时,让从库接管主库,也能让从库分担主库的读压力,这一点,也可以看看以前关于Redis主从复制的介绍。模式图主从复制演示Docker安装MySQL由于本次演示需要用到多个MySQL实原创 2020-10-17 16:24:35 · 349 阅读 · 2 评论 -
抽筋了的我非要调试OpenJdk,且看他怎么虐我
前言说来话长,最近又闲的无聊,在看JDK的源码,但是很多关键的地方都是native方法,这就导致需要在往深处看,也就是需要看openjdk源码了,但是c++代码又谈何容易,况且也不怎么会。但是想来想去,决定还是要研究一下的,在以前的文章中已经编译过了openjdk11,虽然过程坎坷,但也是成功了,那么接下来就是导入openjdk源码到ide中,在下面会以clion作为示例,clion下载安装就不说了。激动的心,颤抖的手,Deepin下成功编译OpenJdk11!!!光这导入就花了我1天,毕竟open原创 2020-10-07 17:07:42 · 301 阅读 · 0 评论 -
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 · 381 阅读 · 0 评论 -
个人小程序不支持视频类目,没办法把我的毕设开源
起因因为快毕业了,所以要做毕业设计,想来想去,做一个教学类的小程序吧,但是起初我并不知道个人小程序不支持视频类目,没仔细阅读过小程序相关的规定,因为好久不做小程序了,主学的是Java后端,然后花了几天实现出来,在今天准备审核一下,结果才发现,不允许!!!。行吧,不允许就不允许了,没办法,那也不能把源码放着生崽啊,所以全部源码都进行了开源。地址(后端):https://gitee.com/hxl495/wx-course地址(小程序):https://gitee.com/hxl495/teachi原创 2020-09-28 11:12:13 · 1075 阅读 · 1 评论 -
死磕算法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 · 178 阅读 · 0 评论 -
代码生成工具是如何将数据库表转换成Model的?
前言使用过Mybatis的都知道有个代码生成工具,Mybatis-Generator,可以生成Mapper文件、Dao类,Model实体文件,非常好用,作为他的扩展Mybatis-Plus也同样有这样的功能,根据数据库中的信息生成Java文件,但是他底层是怎么获取表中字段信息的,应该大部分人不知道,也不常用。所以今天说说他的原理。JDBC:DatabaseMetaData关键类其实就是DatabaseMetaData,通过他可以查看已连接数据库的元数据,如数据库中定义了哪些表,每个表具有哪些列等信息原创 2020-09-19 19:06:31 · 778 阅读 · 0 评论 -
SpringBoot集成Dubbo服务,我行你也行
文章目录0x00、基础概念0x01、工作流程0x02、使用步骤0.安装zookeeper1.引入依赖2.定义服务接口3.服务提供方实现接口4.配置服务消费者0.配置1.定义服务接口2.控制器启动另一个依赖总结0x00、基础概念首先要简单了解下Dubbo、RPC、分布式是什么,不然干起来会懵。先说分布式,简单说就是把一个完整的系统拆分成不同的服务,然后将这些服务放在不同的服务器上减轻单体服务的压力提高并发量和性能,而不同服务之间需要互相调用,而远程过程调用(RPC)就可以让一台计算机上的程序调用另一个原创 2020-09-14 15:29:29 · 669 阅读 · 0 评论 -
你知道阻塞队列有哪些吗?
什么是阻塞队列阻塞队列也是Queue队列的一种,叫BlockingQueue,所以BlockingQueue继承了 Queue。另外Queue 和 BlockingQueue 都是在 Java 5 中加入的。public interface BlockingQueue<E> extends Queue<E> {BlockingQueue是线程安全的,所以很多时候我们可以利用这个特性,去解决业务中的问题,比如在使用生产者/消费者模式的时候,生产者只需要往队列里添加元素,消费者只原创 2020-08-20 21:20:53 · 609 阅读 · 0 评论 -
不是吧,JMX啥你都不知道?
JMX简介在Java程序中,对JVM和系统检测一直是我们所需要的,但是以前开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVMTI 等,才能监测 Java 程序运行过程中的 JVM 和系统的一系列情况,但是这种凡是需要大量的 C 程序和 JNI 调用,开发效率十分低下,为了解决这个问题,Sun 公司也在其 Java SE 5 版本中,正式提出了 Java 管理扩展(Java Management Extensions,JMX)用来管理检测 Java 程序,同时 JMX 也在 J2EE原创 2020-08-07 21:23:33 · 472 阅读 · 0 评论 -
使用Nacos实现服务注册与发现
前言前几章记录了服务配置中心,使用了Nacos和Zookeeper实现,这章来记录服务的注册与发现Nacos实现微服务统一配置中心Zookeeper实现微服务统一配置中心什么是注册中心、服务注册、服务发现、?我们可以将注册中心拆解成两部分,也就是注册、中心,注册的意思也见名知意,就是将某个东西注册到某个平台上,平台管理我们注册的东西,而中心就可以看成一个统一管理信息的平台,两个部分连起来就是注册中心,也就是统一管理所有注册信息的平台。而服务注册指的是服务在启动时将自身的信息注册到注册中心中,方便原创 2020-08-06 12:39:20 · 1362 阅读 · 0 评论 -
动态代理会了,但JDK Proxy和CGLib有啥区别呢?
什么是动态代理?先说说什么是代理模式,代理模式就是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。代理模式通俗来讲就是我们生活中常见的中介。而动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解为运行期间,对象中方法的动态拦截,在拦截方法的前后执行功能操作。动态代理有什么用?其实无论是日志框架或 Spring 框架,它们都包含了动态代理的实现代码,Jav原创 2020-08-06 08:35:45 · 505 阅读 · 0 评论 -
分分钟实践SpringBoot+Ehcache
前言以前一直用Redis做缓存,但后来慢慢了解到了Ehcache,貌似Redis的名声早就超越了Ehcache,就很少看到有人提起Ehcache以及文章,但是,还是有必要了解一下的,说不定以后会用的上。更何况Ehcache也是Java领域中比较优秀的缓存,不知道小伙伴发现没,Ehcache正着念反着念,都是 Ehcache。Ehcache简介Ehcache是一个用Java实现的使用简单、高速、线程安全的缓存管理类库,提供了用内存、磁盘文件存储,以及分布式存储等管理方案。同时Ehcache作为开放源代码原创 2020-07-27 15:21:37 · 427 阅读 · 1 评论 -
自己做一款Linux服务器文件管理工具(已开源)
前言以前向Linux上传文件的时候使用scp命令,或者通过工具如FileZille,其实比较麻烦的,当然还有如宝塔面板等工具,但是我不喜欢用宝塔这类软件(方便是方便)。一直想自己做一套,所以这两天写了一个简单的,拥有上传、下载、删除、收藏文件功能,极大方便的管理Linux服务器文件。效果gitee地址https://gitee.com/hxl495/linux-file-manager编译&运行下载代码到本地在项目目录下执行mvn package前提需要安装上mav原创 2020-07-17 21:20:57 · 2049 阅读 · 0 评论 -
激动的心,颤抖的手,Deepin下成功编译OpenJdk11!!!
历经沧桑在以前就想编译一下JDK,学习学习,但是困难重重,在过程中遇到软件依赖关系问题,由于Linux学的不好,迟迟没有解决,于是放弃了。但是前几天心血来潮,又想重新编译了,但是这次虽然也历经坎坷,但是还是编译成功了。我是在Deepin上完成的,不推荐Windows上,没有的可以安装虚拟机,有云服务器是Linux系统的话也行,但我没有试过。整个过程用了1天吧,用了一晚上解决环境需求,如libx11-dev、autoconf,但是编译花了不到二十分钟。首先就是下载源码了,可以到http://jdk.j原创 2020-07-17 12:06:27 · 667 阅读 · 0 评论 -
五分钟SpringBoot、JWT最佳实践
JWT简介JWT的全称叫Json Web Token。JSON Web Token是一个开放标准(RFC 7519),该Token被设计为紧凑且安全的,用于在各方之间作为JSON对象安全地传输信息。由于信息是经过数字签名的,因此可以进行验证和信任。客户端只需使用一次凭据即可向服务器进行身份验证。在此期间,服务器验证凭据,并向客户端返回JWT。对于以后的所有请求,客户端可以使用这个Token向服务器进行身份验证,就不需要发送用户名和密码之类的凭据。JSON Web Token由三部分组成,它们之间用圆点(原创 2020-07-16 16:06:50 · 1046 阅读 · 0 评论 -
如何构建应用级缓存?
什么是应用级缓存?先说一下缓存,缓存就是一组保存起来以备将来使用的东西,可以加快系统快速相应,例如CPU缓存,指得是位于CPU与内存之间的临时存储器,容量比内存小,但速度要比内存快。应用级缓存需要我们开发者通过代码来实现,那就会涉及到NoSql,现在的Redis、MongoDb、Memcache就是构建应用级缓存的重要技术。如何构建多级缓存?我们可以通过Redis集群和其他多种缓存技术实现一个多级缓存,大概处理流程如下。首先,用户的请求被负载均衡服务分发到Nginx上,接着,Nginx应用服务器读取原创 2020-07-15 17:15:37 · 312 阅读 · 0 评论 -
Okhttp的自动重定向可把我害惨
前言这几天在写一个爬虫,当然http请求选择了OKHttp,但是在今天调试一个接口时候,却发生了一个小意外,很是尴尬,从中午找到晚上才发现原因。先说一下他这个后台的登录过程,首先http://xxx/login.html地址是表单提交的地址,但是他做了一些加密操作,在进入到登录页面后,通过ajax请求http://xxx/getPublicKey,用来获取RSA的指数和模数,然后又是base64、hex等加密用户的密码,最后再进行提交。下面是加密部分的一小段,摘这段的原因是我那会不知道他怎么算出最终的原创 2020-07-02 23:05:37 · 2200 阅读 · 0 评论 -
还在JSP中写Java代码,是何居心?
前言第一次接触jsp是在初中,在学习他后做了一个个人博客,后来一直没使用过他,原因有很多,但是今天还是想记录一篇关于JSP的,多数是因为身边的小伙伴。我记得我也是从JSP学起的,而非Servlet,先学习了那几个内置对象,后来大概学了一半吧,学Servlet去了,是因为当时跟着教程,人家在JSP中写Java代码,写各种逻辑,写各种循环,当时我因为循环时一个%>忘写了,半天没找出了,有时又是}忘写了,调试半天。后来才知道一般都是Servlet中处理好逻辑,数据传递给JSP,在JSP中使用JSTL渲染原创 2020-06-28 15:34:56 · 913 阅读 · 0 评论 -
重回多线程、如何向女朋友解释死锁?
一、和女朋友发生僵持怎么办?那是一个安静祥和的一天,女盆友突然对我说:“去给我买杯奶茶”,我:“行,你给我钱我在帮你买。”女朋友:“你先买回来我在给你钱。”我:“你不给钱我怎么买?”女朋友:“说的你买回来我在给你钱嘛”我:“我去抢?”女朋友:“我不管”…结果最后发生僵持,我没得到钱,她也没得到奶茶。结果怎么办?除非某一方让出资源呗。但这似乎是不可能的,形容两个线程互相等待对方释放资源,然后各自做各自的事情,但问题是两个线程都在苦苦等待,资源始终拿不到,与此同时,两个线程心里在想”mmp的原创 2020-06-26 17:17:24 · 277 阅读 · 0 评论 -
int与byte那些事你确定知道?
前言最近在做一个远程屏幕共享软件,功能非常单一,只能通过Android端查看电脑的实时屏幕,一开始做法是电脑端不停捕获当前屏幕截图,压缩后上传到服务器,Android不停的刷新,但是结果有点不尽人意,效果太差了。其中并没有将捕获的屏幕保存成jpg,然后发送,而是直接将BufferedImage转换成 byte[]发送,当然服务器也没有存成文件,也是使用byte[]存最新的屏幕数据,Android通过给定接口将byte[]装换成图像。这里面有个将InputStream中的数据转换成BufferedImag原创 2020-06-21 12:48:37 · 1146 阅读 · 0 评论 -
Tomcat源码解析五部曲三、请求处理流程
Tomcat处理Http请求又是非常难的一步,在这里只总结一下大概。处理请求主要涉及到这么几个类,Acceptor、Poller、Mapper、CoyoteAdapter、Processor、ProtocolHandler等。还有好多Acceptor:在第一章也提到过,当Connector启动时,也会启动他内部的Endpoint,Endpoint并行运行多个线程,每个线程运行着一个Accept...原创 2020-04-13 21:39:04 · 331 阅读 · 0 评论 -
Tomcat源码解析五部曲二、Web项目加载过程
在上一章说过,当StandardContext被添加到StandardHost下,会触发StandardContext的start方法进行启动,首先自然是调用StandardContext的initInternal(),接着是startInternal(),initInternal()也没做多少关键的事,而startInternal()又过于多,300的方法实在很难分析,所以,还是只找几个关键的地...原创 2020-04-06 10:39:06 · 481 阅读 · 0 评论 -
Tomcat源码五部曲一、启动过程
Tomcat源码确实复杂,没个几星期还真是搞不清楚。网上的文章也太水了,大部分只说了下Tomcat各个组件的用途,就连最开始一个很重要的Digester都没讲,很多你想搞清楚的问题的没说,比如Tomcat如何初始化我们编写的Sevlet,又如何把请求映射到指定的Servlet,以及没有找到对应资源又如何处理。这篇主要记录Tomcat的启动流程,以及为后续Web请求处理所做的一些铺垫。同样也来了...原创 2020-04-02 15:04:49 · 346 阅读 · 0 评论 -
大学开学时间定了!
原创 2020-03-28 20:46:05 · 224 阅读 · 0 评论 -
超详细Redis总结(一)
redis现在是火的一塌糊涂,面试不知道redis怎么能行,各个云都提供了对redis的支持,如以下的阿里云。什么是RedisRedis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 支持多种类型的数据结构,如string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(sorted set:有序集合)。首先redis是将数据保存到内...原创 2020-03-28 11:43:58 · 645 阅读 · 0 评论 -
是时候了解Java Socket底层实现了
在Java中,提供了一系列Socket API,可以轻松建立两个主机得连接、读取数据,那底层到底怎么实现,很少人去关心。这其实最终还是通过调用操作系统提供得Socket接口完成(TCP/IP是由操作系统来实现)。拿Windows举例,提供了socket、bind、listen、accept、connect、send、recv等函数,如果了解过Socket编程得伙伴应该一眼能看出这些函数是干什么得...原创 2020-03-20 13:38:38 · 1274 阅读 · 1 评论 -
你竟然用Integer作为synchronized的锁对象?
在使用多线程编程时,往往会使用一些手段保证线程安全,也就是加锁,但是加锁也必须合理,如使用synchronized对对象加锁时,如果不注意,还可能发生错误的加锁。先看一段小测试,在这个小测试中,启动了1000个线程,每个线程在对integer加1前都先获得integer的锁,这看似是线程安全的,并且预期可能会得到1000这个值,而然并不然,在运行多次之后他总是输出<=1000的值,那么,这...原创 2020-03-18 11:32:29 · 2918 阅读 · 3 评论 -
位运算那些骚操作,HashMap容量为什么是2的次幂?
位运算那些骚操作,数不甚数,就拿HashMap来说,在求出元素位置时候通过h & (length-1) 来计算,h是key的hash值,length是数组长度。但是这个length大小是有限制的,必须是2的次幂。那为什么是2的次幂呢?其实这个还算好理解。首先要知道&的规则,也就是双方都为1,结果才为一,如下:接着要知道2的次幂的二进制规律,发现开头都为1,剩余全为0。 pu...原创 2020-03-16 13:49:17 · 388 阅读 · 0 评论 -
好好的Timer居然有坑?
在做定时任务时,可能会使用到Timer+TimerTask类,但是这两个小小的类,却有大坑。先来复现一下问题,如下,可能预期的是第一个PrintTask从1一直往后打印,直到为5时抛出异常,第二个PrintTask从100往后不间断打印。public class Main12 { public static void main(String[] args) { Time...原创 2020-03-14 10:26:08 · 308 阅读 · 0 评论 -
这个神奇的网站,竟让我学会了所有数据结构
在无意中发现了一个神奇的数据结构演示网站。他以动画的形式演示数据的存储、查找、删除过程,相信配合上动画,各种数据结构也会轻松拿下。https://www.cs.usfca.edu/~galles/visualization/Algorithms.html一、栈二、各种排序三、红黑树四、队列...原创 2020-03-08 19:41:08 · 368 阅读 · 0 评论 -
带有过期特性的队列DelayQueue
DelayQueue是一个无界阻塞的队列,队列中的每个元素都有一个过期时间,当要从队列中取出数据时,只有过期元素才会出队。DelayQueue内部使用PriorityQueue存放元素,又用ReentrantLock实现线程同步。因为DelayQueue内部要获取元素的剩余时间,所以我们的数据类需要继承Delayed接口,Delayed又继承Comparable接口,实现排序,而自身只有一个ge...原创 2020-03-03 20:30:03 · 1742 阅读 · 0 评论 -
集群session共享的两种解决方案
一、什么是集群及Session共享集群是一组相互连接并且拥有相同功能的服务器,每个服务器在集群中叫做节点。通过负载均衡服务器的调度,使客户端请求均衡的访问到这些节点中。但是此时会出现一个问题,比如session问题,用户A初次在节点A中进行登录,下一次被负载均衡服务器调度到节点B,而节点B并不没有用户A的session信息,接着又进行重新登录。解决办法也有很多,如使用Redis,但是Tomcat...原创 2020-03-02 16:22:23 · 965 阅读 · 0 评论 -
大学三年,我靠每天在这些网站学习,进入了梦寐以求的大厂
国内1.慕课网(https://www.imooc.com/)慕课网的资源还是比较丰富的,而且免费的不少,初次踏进编程这坑就是从他开始。里面还有很多大佬的录制,如Android大佬郭霖。2.极客学院(https://www.jikexueyuan.com/)极客学院收费的居多,但是也从中学到些东西,不如慕课网。3.掘金(https://juejin.im/)掘金无论是手机端端还是网...原创 2020-03-01 09:46:53 · 844 阅读 · 0 评论 -
Linux下编译Tomcat9源码并导入IDEA
Tomcat是用ant管理的,也可以写一个pom文件装换成maven方式。一、下载Ant既然是用ant管理构建,那就得先安装ant,地址:https://ant.apache.org/bindownload.cgi下载后,需要把他放入系统PATH下(安装JAVA方式)。gedit /etc/profileexport ANT_HOME=ant路径export PATH=$ANT_HOM...原创 2020-02-24 15:56:36 · 633 阅读 · 0 评论