自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 go入门(channel 理解)龟兔赛跑

go入门

2022-01-25 14:21:39 519 1

原创 jvm常用垃圾收集器分析

1.前言当我们在java程序中创建对象,这个对象就存储到jvm的堆区域(heap)为了满足程序持续运转的开销,jvm会在适当的时间进行垃圾收集,将未被引用的对象清除。2.GC分类大致将GC分为4类类型含义Young GC负责回收年轻代对象的GCOld GC负责回收老年代对象的GCFull GC回收整个堆的对象,包括年轻代、老年代Mixed GC回收年轻代和部分老年代的GC (G1)3.常见垃圾回收算法目前主流垃圾回收器都采用的是可达性分析算法

2021-10-27 17:38:21 351

原创 简单聊一下AQS

何为AQSAQS 的全称为 AbstractQueuedSynchronizer ,翻译过来的意思就是抽象队列同步器。public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable {}AQS 为构建锁和同步器提供了一些通用功能的是实现,因此,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 Reen

2021-10-16 10:54:16 309 1

原创 图解BIO/NIO/AIO

何为 I/O?I/O(Input/Outpu) 即输入/输出 。根据大学里学到的操作系统相关的知识:为了保证操作系统的稳定性和安全性,一个进程的地址空间划分为 用户空间(User space) 和 内核空间(Kernel space ) 。像我们平常运行的应用程序都是运行在用户空间,只有内核空间才能进行系统态级别的资源有关的操作,比如文件管理、进程通信、内存管理等等。也就是说,我们想要进行 IO 操作,一定是要依赖内核空间的能力。并且,用户空间的程序不能直接访问内核空间。当想要执行 IO 操作

2021-10-10 22:07:39 258 1

原创 代理模式详解(JDK/Cglib实现)

代理模式详解(JDK/Cglib实现)1.何为代理模式2.静态代理2.1实现步骤3.动态代理3.1.JDK 动态代理3.1.1.实现步骤3.2.CGLIB 动态代理机制3.2.1.实现步骤总结1.何为代理模式代理模式是一种比较好理解的设计模式。简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方法执行前后你可以增加一些自定义的操作

2021-10-10 12:47:05 285

原创 详解Ribbon负载均衡

Ribbon是一个客户端负载均衡器,能够给HTTP和TCP客户端带来灵活的控制。描述Ribbon的核心概念是命名的客户端。每一个负载均衡器都是一系列工作在一起的组件的一部分,并用于按需联系远程服务。你可以给这一系列一个名字(例如使用@FeignClient注解)。Spring Cloud使用RibbonClientConfiguration为每一个命名的客户端建立一个新系列为满足ApplicationContext的需求。 这包括一个ILoadBalancer, 一个RestClient和一个Ser.

2021-09-19 10:10:10 247

原创 数据库 常用分片算法分析

分片算法【范围法】以用户中心的业务主键uid为划分依据,将数据水平切分到两个数据库实例上去:soap_db1:存储0到1千万的uid数据soap_db2:存储1到2千万的uid数据范围法的优点是:切分策略简单,根据uid,按照范围,业务很快能够定位到数据在哪个库上扩容简单,如果容量不够,只要增加soap_db3即可范围法的不足是:uid必须要满足递增的特性数据量不均,新增的soap_db3,在初期的数据会比较少请求量不均,一般来说,新注册的用户活跃度会比较高,故soap_db2往往会比

2021-08-24 20:12:10 2070

原创 基于拦截器的水平分表实现

水平分表的场景当单表数据激增,比如mysql单表数据量超过千万级别,查询速度会变慢。当数据继续增长,就需要使用到分库分表。根据业务量增加表的数量,来提升查询效率。这里提到是水平分表,只考虑数据量增长,当字段较长,可以考虑垂直分表,按照字段将一张表拆成多张表进行存储。水平分表实现原理如图,分表的是根据sql请求中参数,或参数组合进行数据标识,我见过流水业务频繁的按照日期分表,他就根据创建时间来分表,分片策略算法,一般按需实现 。在sharding-jdbc中实现分片接口,doSharding()的方

2021-08-13 21:08:50 225

原创 多线程模拟孩子抓糖经典问题

请听题共11颗糖,有两个小孩,一个小孩一次只能抓三颗糖,另一个小孩一次只能抓四颗糖如果剩余糖果不够当前小孩拿的数量,当前小孩不在抓糖,请用多线程模拟上面的描述废话不多说先上码public class TestFunction { static volatile Integer num = 11; //孩子线程 static class Child extends Thread { //每次拿取的糖数 private int r;

2021-06-25 09:02:48 253 5

原创 synchronized和ReentrantLock性能分析

这个文章的起因和一个同事的激烈学术性讨论,快打起来那种。我:ReentrantLock解决多路并发查询的数据合并方式更合适。棒哥:用synchronized在资源竞争激烈的性能更好。我:synchronized在资源竞争激烈的时候有极大的概率会进行锁升级,且锁的升级是不可逆的。棒哥:ReentrantLock内部的乐观锁自旋比线程挂起更消耗cpu的资源。存在即合理,我觉得单纯的认为某一种方式好或坏是一种片面的看法,这两种方式应该区分场景和并发量和处理时间来判定使用哪一种合适。特别是synchr

2021-06-23 11:00:03 1256 4

原创 浅谈Nginx的负载均衡策略

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器同时nginx 可以通过upstream指令来实现负载均衡,我们常见的负载均衡的策略,nginx都支持。负载均衡策略策略说明轮询nginx默认的负载均衡策略,将请求以轮询的方式分发不同服务器上。weight (权重方式)按照不同服务器的权重比进行分发请求ip_hash (ip地址hash)将ip地址进行hash ,映射到固定服务器上url_hash(url请求路劲hash)将.

2021-04-29 17:50:00 238

原创 linux日志排查常用命令总结

一般先出现bug,日志排查是一种分析bug的方式。通过查看预先埋下的日志点位记录的关键信息,来分析bug成因,来解决bug。(虽然现在有着kibana这种工具的存在)但是往往bug的记录的关键信息不好定位,关键行不好定位。下面有简至繁。介绍一下常用的命令。cat命令cat blog.out.log如上,需要查看那个文件,直接cat + 文件名就行,但是由于cat是浏览全文本,导致如果文本过大,cat会一直翻页,需要很长时间才能停下来,很显然这不是我们想要的结果,所以cat在查大日志文件时不适应

2021-04-28 16:45:25 1179 1

原创 Mysql存储引擎 和 索引结构推导(面经)

Mysql存储引擎

2021-04-02 15:03:48 280

原创 Mybatis自定义轻量级分页组件(易集成,易拓展)

Mybatis自定义轻量级分页组件(易集成,易拓展)其实github有一个叫做PageHelper的开源分页组件,我也用过,封装的还可以。只是感觉他的量级偏重,其实很多参数,都是我们开发中不需要的参数,而且它的获取分页信息方式是通过构造方法,不是很优雅。所以我在查阅完他的源码后,结合自己的需求,实现了一个轻量级,便携式的分页组件SmallPage。SmallPage轻量级分页组件,基于入参类型核心依赖 <dependency> <groupId>org.mybat

2020-12-06 13:16:34 2110 24

原创 Java常见加密使用和分析

Java常见加密使用和分析最近项目里碰到很多加解密的场景,使用多种加密的方式,大概整理了一下,一共有一下几种加密方式安全性是否可逆1MD5高不可逆2AES中可逆3RSA高可逆3Base64低可逆1.MD5加密MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法)MD5的一般在项目中的使用场景是密码加密,在校验密码时直

2020-12-05 16:24:44 537 10

原创 如何在国内完成个人建站

国内建站的条件服务器域名网站备案1.服务器服务器,个人建站,不建议购买高配置的服务器。如果你的money够多,请随意。学生党可以购买阿里云或者腾讯云的云服务器,折扣还蛮多的,aws还有免费的服务器可以申请。我这边是购买的阿里云的云服务器,最低配置的哪一种,不限时,但是限制下行带宽,打开网页贼慢就对了。购买过阿里云的服务器,他会分配一个服务器实例给你,同时绑定了一个外网ip地址。部署服务服务器的下行是很慢,但是服务器的上行还蛮快的,去下载资源,使用国内的镜像还是很快的。一般部署服务最先需要

2020-11-22 23:55:55 802 1

原创 Spring-Boot快速集成Sqlite数据库(动态创建,动态切换)

Spring-Boot快速集成Sqlite数据库(动态创建,动态切换)首先分析集成sqlite,然后需要完成的需求动态创建sqlite数据动态连接sqlite数据库操作sqlite数据库相比较传统的数据,使用mybaits集成,需要变更是数据库驱动driver,这个需要引入sqlite的依赖 <dependencies> <!--mybaits--> <dependency> <groupId>org.mybatis.sp

2020-11-21 15:07:14 13034 5

原创 Spring-Boot快速集成MyBatis动态数据源(AbstractRoutingDataSource)

Spring-Boot快速集成MyBatis动态数据源(AbstractRoutingDataSource)在一些应用场景下,我们会使用到多个数据源,可能存在不同类型数据库,mysql和sql server之类的同时使用,还有就是主从数据库,读写分离也可能会使用多数据源来解决问题。使用的场景一般有:1,主从数据库切换;2,多租户间数据逻辑隔离依赖引入 <dependency> <groupId>org.springframework.boo

2020-11-01 18:42:49 747

原创 Java如何模拟一百个线程同时执行(CountDownLatch,CyclicBarrier)

Java如何模拟一百个线程同时执行对并发测试,在平常开发过程中并不容易在现。但是借助CountDownLatch和CyclicBarrier可可以让线程同时等待同一个状态,在多核多线程的pc还是能大概的模拟出来,但是其实从真正意义上来说,并不是完全同时执行,cpu的资源是通过时间片轮转法进行调度。上代码CountDownLatch模拟多线程 @Test void testCountDownLatch(){ //等待100个线程同时执行 CountDo

2020-09-27 21:47:35 3388 2

原创 Java线程安全解决方案(synchronized,ReentrantLock,Atomic使用场景描述)

线程安全解决方案synchronized,ReentrantLock,Atomic 使用场景描述在实际开发过程中如果服务量,请求频繁,就会经常碰见并发,这时候不做处理就会出现很多非法数据。这时候就需要解决线程安全的问题,这时候就可以使用java当中的锁机制。常用有java关键synchronized、可重入锁ReentrantLock,还有并发包下的Atomic 或者Concurrent的安全类型。synchronized使用场景:在资源竞争不是很激烈的情况下,偶尔出现并发,需要同步的情形下,syn

2020-09-26 11:24:49 887 1

原创 PDF转换成图片(Java pdfbox实现 附中文乱码解决方案)

PDF转换成图片(Java pdfbox实现)pdf转成图片在java中主流的做法就是pdfbox和icepdf然而我选择pdfbox废话不多说上代码引入依赖 <!--pdfbox--> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.13

2020-09-25 20:41:30 3901 4

原创 MyBatis如何调用mysql数据库存储过程

MyBatis如何调用mysql数据库存储过程存储过程的含义:是一组预先写好的能实现某种功能的T-SQL程序,是存储在服务器上的预编译集合。(存储过程是一种独立的数据库对象,在服务器上创建和运行。)存储过程的优点:模块化编程、执行速度快效率高、减少网络流量、提供一种安全机制。(存储过程在执行1次后,其执行计划就保存在内存中,以后在执行时就不必再进行编译和优化。)在mysql服务带宽不够,或者说与服务连接不稳定时,再者还有可能sql命令过长。在这种情况下导致的服务响应慢,可以通过使用数据库的存储过

2020-09-25 20:12:47 2636 1

原创 Spring-Boot快速集成jxls-poi (自定义模板,支持本地文件导出,在线文件导出)

Spring-Boot快速集成jxls-poi (自定义模板,支持本地文件导出,在线文件导出)在项目持续集成的过程中,有时候需要实现报表导出和文档导出,类似于excel中这种文档的导出,在要求不高的情况下,有人可能会考虑直接导出csv文件来简化导出过程。但是导出xlsx文件,其实过程相对更复杂。解决方案就是使用poi的jar包。使用源生的poi来操作表格,代码冗余,处理复杂,同时poi的相关联的依赖还会存在版本兼容问题。所以直接使用poi来实现表格导出,维护成本大,不易于拓展。我们需要学会站在巨人的肩膀

2020-09-05 12:13:24 1833 1

原创 普通大学毕业生工作一年后的思考

依稀记得去年2019的6月,在大学的最后时光。我的专业其实蛮尴尬,信息管理与信息系统。怎么说呐,可以说是科班出身,但是我的学校性质跟计算机专业没有太大关系。大学学到开发相关的知识少之又少,毕业也没有什么证书要求,浑浑噩噩的考了国二国三,作为过来人,这种东西完全质量和内容可言。大学开过c语言,也开过java,还有晦涩难懂的数据结构和操作系统。但是可能是我个人原因,觉得这些课堂上的这些知识都很玄乎,无法让你真切的感受它。就拿java来说,因为课时安排的不合理,老师讲到继承封装多态时,多态还没讲完,课时就已经

2020-08-22 09:40:18 344 7

原创 socket.io.js最简版单页HTML测试工具

socket.io.js最简版单页HTML测试工具废话不多说上代码 var socket; //socket对象 var errorCount = 0; //连接错误次数 var isConnected = false; //连接状态 var maxError = 5; //最大连接错误次数 // connect(null,null); //socket连接方法 function connect(url,clientId) {

2020-08-13 22:31:06 4107 1

原创 Spring-Boot快速集成Redis分布式锁(基于Jedis实现,参照CAS乐观锁设计)

Spring-Boot快速集成Jedis(redis分布式锁实现)为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度。而这个分布式协调技术的核心就是来实现这个分布式锁。前提所有子系统,所有并发线程,在同一时刻只有一处可以取得锁,可以进行读写操作。所以全局只能有一个对所有子系统,所以并发线程可见的标识。通过该标识来控制全局线程。分析分布式一般常见的有实现方式基于数据库实现分布式锁;基于缓存(Redis等)实现分布式锁;基于Z

2020-08-11 23:45:50 469 1

原创 Spring-Boot快速集成netty-socketio(socket服务实现,支持认证)

Spring-Boot快速集成netty-socketio(socket服务实现,支持认证)netty-socketio是一个开源的Socket.io服务器端的一个java的实现,它基于Netty框架,可用于服务端推送消息给客户端。说到服务端推送技术,一般会涉及WebSocket,WebSocket是HTML5最新提出的规范,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况,为了兼容所有浏览器,给程序员提供一致的编程体验,SocketIO将WebSocket、AJAX和其它的通信方式全部封装成了统一

2020-08-09 12:44:50 4810 3

原创 Spring-Boot快速集成Jedis(封装多种模板,自动回收实例,线程安全)

Spring-boot快速集成Jedis(封装多种模板)Jedis是Redis官方推荐的Java连接开发工具,提供redis最低层的指令,提供池化操作,执行效率高虽然spring-boot的就提供redis操作的组件,因为高度封装的原因,RedisTemplate效率比不上jedis的效率。第一步、引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI

2020-08-09 12:01:25 817

原创 Spring-Boot快速集成Java-Mail(支持文本和html发送,支持cc,支持附件添加文件)

Spring-Boot快速集成Java-Mail说明因为SpringBoot默认有starter实现了Mail。发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用JavaMail相关api来写发送邮件的相关代码,后来spring推出了JavaMailSender更加简化了邮件发送的过程,在之后springboot对此进行了封装就有了现在的spring-boot-starter-mail。Maven依赖 <!-- Mail组

2020-07-26 22:24:27 392

原创 Spring-Boot快速集成Spring boot Admin 入门详解

Spring-boot快速集成Spring Boot Admin 监控服务 (入门详解)Spring Boot Admin 简介官网介绍codecentric’s Spring Boot Admin is a community project to manage andmonitor your Spring Boot ® applications. The applications registerwith our Spring Boot Admin Client (via HTTP) or

2020-05-23 13:25:37 2109 1

原创 xshell / xftp个人免费版 seafile个人云盘下载

xshell / xftp个人免费版下载 seafile个人云盘以下软件均是官网下载未作任何修改,请放心使用xshell 下载地址版本 Xshell-6.0.0189phttp://www.dlblog.club:8000/f/b87a54bb793241cca4a4/xftp 下载地址版本 Xftp-6.0.018http://www.dlblog.club:8000/f/d582d920d43c4aa3b7a8/若地址链接已经失效,记得私信我...

2020-05-21 21:31:57 367 2

原创 多设备 多平台 SSH远程登录服务器

多设备 多平台 SSH 远程登录服务器远程登录服务器shell,一般都是用Xshell , ttermpro这种工具,其实很多系统本身就支持ssh,所以不用这种工具也完全可以登录到远程服务器上。1.Windows 系统的PowerShellPowerShell是shell命令和dos命令的合集,所以可以直接用ssh命令。> ssh [email protected]格式: ssh 登录用户名@ + 服务器IP + ssh端口号这里ssh默认的端口号 22,可以不用追加在提示密

2020-05-17 10:17:42 753

原创 Spring-Boot快速集成WebSocket服务端 客户端(支持客户端消息同步回调)

Spring-Boot快速集成WebSocket服务端 客户端(客户端消息同步回调)WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数...

2020-05-01 22:57:25 4025 8

原创 Spring-Boot快速集成Swagger插件(Api在线接口文档)

关于SwaggerSwagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所...

2020-04-05 21:54:06 351

原创 Spring-Boot快速集成ActiveMQ(Topic和Queue两种模式共存,代码可以复用)

关于ActiveMQApache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。虽然ActiveMQ的响应速度和体量比不上其他中间件,但是它体量小,易安装,易使用。毕竟是老东家Apache出品,所以其他平台和模块对他支持也很友好。如果用传统的spring框架去...

2020-04-04 19:30:04 598

原创 Spring MVC 数据校验 -实现方式validate自定义注解

前言自从我接触了spring-boot框架,对于基于注解的开发方式越来越中意,无疑这是一种提升开发效率和简化配置的开发方式。开发中对于方法入参数据校验是必须的也是严谨的,一方面是为了提升性能(对于不合法数据,或格式不正确的数据,不做处理,直接返回错误信息)。另一方面也是业务需求,对某些字段有着check。当我们使用spring框架来开发项目,其实spring-validation这个模块也已经提...

2020-03-22 23:18:19 840

原创 Spring-Boot快速集成thymealf的自助点单系统 (极简)(开源-附上地址链接)

Spring-Boot集成thymealf的自助点单系统 (极简)在初学java的时候,就有做过类似点单系统的练手项目,屈于当时的技术水平和能力有限,效果显得有些拙略。当时开发使用的很经典的SSM框架,前端页面使用jsp模板语言。当时对于技术的认知还不清晰,其中有段时间,以为别人的项目都是传统的SSM。其实在后期的技术积累过程,有掌握了许多其他框架,但是每个的偏好不一样。当我接触spring-...

2020-03-15 21:13:19 506

原创 Android开发中的跨进程通信方式总结

在安卓开发过程中,为了保证每个应用的程序的不是独立的个体,需要对外提供接口,可以使多个应用程序之间可以进行数据交换,所以app之间的通信应用场景有很多,通信方式也有很多种。本文论述了Android开发中常用的跨进程通信的方式和方法。

2020-01-25 00:29:21 4318 1

原创 如何快速构建Spring-Boot项目

如何快速构建Spring-Boot项目SpringBoot简介SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不...

2020-01-25 00:25:33 1714 1

原创 IPV4地址运算,计算当前IP地址是否在设定范围内

IPV4地址运算,计算当前IP地址是否在设定范围内1.理解ip地址的含义常用的ip地址是遵循IPv4协议,由32位的二进制数组成,在具体设置时看到的是4个0~255之间的数组成,常见就有本地环回地址“127.0.0.1”,还有常用的局域网地址“192.168.0.1”之类的。所以IPv4的地址能表示的范围就2的31次幂到2的0次幂之间。2.如何把常见的10进制表示的ip地址转换成二进制要理...

2020-01-03 23:17:46 1365 3

处方共享课题研究

关于处方共享有参考价值,在目前的大数据背景,同时医疗改革也迎来了新的浪潮,医疗卫生服务的信息化成为了必然。处方信息共享出现使得医疗卫生服务得以延伸。处方信息共享平台以医院为核心实现处方信息在医院、药店和患者三方之间的共享,为区域患者带来了便利,提高了医院的诊疗效率。本课题研究医院药房处方共享的流程与机制,分析处方共享相关的环境背景以及所带来的影响。

2018-05-22

空空如也

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

TA关注的人

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