- 博客(35)
- 收藏
- 关注
原创 Java网页消息推送解决方案
相较于方案四,基于NIO的非阻塞IO模型,单机可支持百万级连接,全双工通信,相比HTTP轮询减少80%以上的网络开销,这个方案在千万级用户、百万级并发连接的场景下经过验证,可根据实际业务需求进行调整。消息推送的处理逻辑复杂度不高,相较于短轮询的方式,如果不是海量并发的情况下和http连接数充裕的情况下,有着更好的性能表现。由客户端向服务器发送请求,服务器去询问是否存在新消息,不存在新消息则阻塞该请求,超过指定时长则直接返回和客户端约定好的状态码或者返回值。不适用于海量并发场景,一直维持连接也是一种开销。
2025-03-29 19:27:18
1109
原创 ThreadLocal滥用问题、底层原理、合理使用
使用完ThreadLocal没有被清除的情况下,虽然线程运行完成后,整个ThreadLocalMap也会随着线程的销毁而被回收,但是如果线程被反复使用(线程池),就会出现对象一直堆积问题,进而导致内存泄露。原因分析:因为程序运行在 Tomcat 中,Tomcat 的工作线程是基于线程池的,而线程池会存在线程复用机制,当线程进行复用后,会使用该线程上一次的set值。在大量并发下,如若使用不当,会发现数据错乱,即当前线程读取到上一次线程执行结束后的set的内容。ThreadLocal底层代码。
2025-03-18 14:07:33
289
原创 Comparable和Comparator的使用详解
在实际业务开发中,常常看到使用compareTo,compare方法进行值得比较、排序,compareTo方法来自于Comparable接口,而compare方法则来自于Comparator接口,两个接口都是顶层接口。Comparable翻译为中文是“比较”的意思,而Comparator是“比较器”的意思。Comparable是以-able结尾的,表示它自身具备着某种能力,而Comparator是以-or结尾,表示自身是比较的参与者。虽然Comparable和Comparator都是用来进行元素排序的,但二
2023-12-22 17:59:14
1331
原创 JWT学习运用
系统认证方式session认证 http协议由于本身是无状态的协议,那就意味着当有用户向系统使用账户名称和密码进行用户认证之后,下一次请求还要再一次用户认证才行。因为我们不能通过http协议知道是哪个用户发出的请求,所以如果要知道是哪个用户发出的请求,那就需要在服务器保存一份用户信息(保存至session),然后在认证成功后返回cookie值传递给浏览器,那么用户在下一次请求时就可以带上cookie值,服务器就可以识别是哪个用户发送的请求,是否已认证,是否登录过期等等。这就是传统的ses
2022-05-28 18:39:23
180
原创 学习Zookeeper分布式协调服务
文章目录Zookeeper初步认识Zookeeper介绍Zookeeper原理Zookeeper的特性分布式应用的优点分布式应用的挑战安装下载Zookeeper解读配置参数操作命令内部的数据模型znode的结构zonde节点类型持久节点持久序号节点临时节点临时序号节点Container节点TTL节点zk的数据持久化Zookeeper服务端的使用ZooKeeper客户端的使用创建节点查询节点删除节点权限设置监听器原理实战搭建zk集群ZK四种工作状态LOOKINGFOLLOWINGLEADINGOBSERVIN
2022-04-18 13:12:34
1424
原创 Vue框架的学习与使用
文章目录VUE简介前端为主的MV时代双向绑定787原则Vue的7种属性Vue的8种方法Vue的7种指令条件与循环元素绑定绑定事件Vue组件与自定义元素的关系Vue的生命周期Axios异步通信Vue的计算属性Vue缩写v-bind 缩写v-on 缩写插槽slot背景匿名插槽具名插槽自定义事件事件名自定义组件的 v-model将原生事件绑定到组件.sync 修饰符splice()方法VUE简介Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue
2022-04-15 18:15:37
3059
原创 SpringCloud运用与理解
文章目录SpringCloud介绍优缺点SpringCloud和SpringBoot关系SpringCloud和Dubbo的区别SpringCloud作用SpringCluod的五大组件引入组件的步骤SpringCloud核心组件的业务运用EurekaEureka ClientEureka Server客服端与服务端的链接Eureka的自我保护机制EurekaServer集群Eureka与zookeeper比较RibbonFeignHystrix问题背景解决方案服务熔断概念实现服务降级概念实现熔断与服务降级
2022-04-05 17:39:19
2353
1
原创 SpringBoot深入理解运用
文章目录SpringBoot的优缺点SpringBoot四大核心idea生成springboot项目properties文件多环境配下的配置文件SpringBoot自定义配置简单数值映射对象去除红色警告整合JSP逆向工程1.什么是逆向工程2 下载逆向工程中需要的jar3 使用方法3.1 通过java project运行逆向工程3.2通过maven方式运行逆向生成的xml解析整合Mybatis事务支持Mapper配置文件存放的位置常用注解:@Controller@RequestMapping(value="/
2022-04-02 00:26:37
1883
原创 分布式架构体系知识
文章目录高并发下的分布式系统分布式缓存为什么要使用缓存redis集群主从模式切片模式缓存穿透浅谈布隆算法缓存击穿缓存雪崩分布式微服务单体应用微服务微服务架构分布式服务分布式锁实现方法两大类分布式锁第一类第二类分布式事务2PC协调者故障分析协调者故障,通过选举得到新协调者3PCTCC本地消息表消息事务最大努力通知总结三秒规则高并发下的分布式系统分布式缓存先提出两种数据库:memcache redis原来做分布式缓存使用的是memcache,现在迁移使用redis完成分布式开发原因:memcac
2022-03-28 22:57:23
1762
原创 深入Redis
Redis前言REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、**集合
2022-03-19 18:08:11
920
原创 深入JUC(高并发编程)
文章目录JUC背景JUC的结构Lock锁线程之间的通信问题synchronized实现JUC实现并发集合第一代并发第二代并发第三代并发Callable接口常见工具类CountDownLatchCyclicBarrierSemaphore读写锁(ReadWriteLock)阻塞队列线程池三大方法CachedThreadPoolSingleThreadPoolFixedThreadPool七大参数四种拒绝策略1.AbortPolicy2.CallerRunsPolicy3.DiscardOldestPolicy
2022-03-17 22:24:42
4090
原创 JVM(含JVM调优)
文章目录前言JVM学习资料网站JVM位置javap命令Class文件结构class文件数据结构魔数版本号JDK、JRE、JVM的关系JVM的体系结构类加载器生命周期运行时数据区:(内存模型)方法区(Method Area)堆(heap)Java栈(Java Stack,也叫虚拟栈)本地方法栈(Native Method Stack)程序计数器(Program Counter Register)执行引擎(字节码执行引擎)本地方法接口本地方法库Native双亲委派机制GC回收JVM调优前言 JVM是
2022-03-05 23:21:47
452
原创 SpringMVC框架
文章目录SpringMVCMVC设计模式JSP+JavaBeanServlet+JSP+JavaBeanMVC优缺点优点缺点什么是SpringMVCSpring MVC优点第一个SpringMVC程序Spring MVC和Struts2的区别Spring MVC视图解析器(ViewResolver)URLBasedViewResolverInternalResourceViewResolverFreeMarkerViewResolverSpring MVC执行流程Spring MVC接口Spring MVC
2022-03-03 22:26:41
4281
原创 Mybatis框架
文章目录MyBatis学习安装MybatisMaven引入MyBatis项目常用的依赖Mybatis使用一、从 XML 中构建 SqlSessionFactory二、从 SqlSessionFactory 中获取 SqlSession出现SqlSessionFactory为null情况配置文件找不到情况实现增删查改mapper传入参数选择Map集合XMl配置属性(properties)设置(setting)类型别名(typeAliases)环境配置(environments)映射器(mappers)日志ST
2022-03-03 22:24:57
1066
原创 Spring学习
文章目录JavaSpring学习下载Spring:Spring导入Spring的优点:Spring中文文档Spring组成SPring IOC容器理论1.1、IoC能做什么1.2、IoC和DI2.1、IoC(控制反转)2.2、DI(依赖注入)spring使用⒉.假设我们要使用有参构造创建对象。方法注入(set注入)查找方法注入任意方法替换Spring配置依赖注入bean的作用域单例 ,原型,请求,会话,全局会话,应用程序和 WebSocket 范围bean的自动装配自动装配的局限性和缺点从自动装配中排除 b
2022-03-03 22:22:01
1136
1
原创 Java集合框架详解(源码详解)
文章目录java集合框架Collection接口常见方法方法详细信息及其使用迭代器Iteratorfor循环与增强for循环遍历手写集合的冒泡排序List接口ArrayListArrayList介绍构造方法扩容机制源码分析VectorVector与ArrayList比较常用操作Vector扩容机制核心源码LinkedList源码分析LinkList踩坑性能分析Set集合HashSet分析HashSet简单模拟数组+链表底层实现添加元素 的基本步骤LinkedHashSet说明源码分析TreeSetQueue
2022-02-26 20:12:30
1293
原创 IO流详解
IO流BIO/NIO/AIO简单区别BIO(同步阻塞方式)BIO就是传统的java.io包,他是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前线程会一直处于阻塞状态。优点:代码简单,直观缺点:IO的效率和扩展性低,容易成为应用性能的瓶颈。NIO(同步非阻塞IO)NIO是java1.4引入的java.nio包,提供了Channel、Selector、Buffer等新的抽象类,可以构建多路复用的,同步非阻塞IO程序,同时提供了更新近操作系统底层高
2021-11-06 21:53:32
1788
1
原创 Git学习
Git学习文档:https://git-scm.com/book/zh/v2版本控制关于版本控制版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就可以将选定的文件回溯到之前的状态,甚至将整个项目都
2021-11-06 21:52:50
281
原创 Maven(idea)
Maven学习背景:当我们编写Java项目时,需要导入项目所依赖的jar包,比如连接数据库时,需要jdbc的jar包。当项目所需要的jar多时,会给项目管理带来困难,但会给项目后期维护带来困难,我们急切的需要一种工具帮我们管理我们的jar包!!!安装:配置环境:配置settings文件:映射配置(使用阿里云镜像) <mirrors> <!-- mirror | Specifies a repository mirror site to use instea
2021-11-06 21:52:00
158
原创 常见的设计模型
设计模型前言:在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素) 的书。四位作者合称 GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。对接口编程而不是对实现编程
2021-11-06 21:49:37
954
原创 注解与反射
注解(Annotation)前言:从JDK5开始,Java增加对元数据(描述数据属性的信息)的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息什么是注解JDK5开始引入注解技术,即java增加了对元数据(描述数据属性的信息)的支持。作用不是程序本身,可以对程序作出解释.(这一点和注释(comment)没什么区别)可以被其他程序(
2021-11-06 21:45:12
94
原创 线程/线程池详解
线程详解区分进程(Process)线程(Thread)说起进程,就不得不说下程序。程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。线程是CPU调度和执行的的单位。进程是操作系统资源分配的最小单元,线程是任务调度和执行的基本单位。(根本区别)包含关系:每个进程至少有一个线程,主线程。进程中可以创建多个线程。
2021-09-09 10:35:14
268
原创 markdown语法学习
MarkDown学习-???? 标题一级标题:# +空格二级标题:## +空格三级标题:###+空格四级标题:####+空格五级标题:#####+空格六级标题:######+空格字体斜体:字体两边都加 *粗体:字体两边都加 **斜体加粗:字体两边都加 ***删除线:字体两边都加 ~~引用语法:>加文字分割线第一种: —第二种: ***图片的插入代码:!+[图片描述]+(图片路径,网络或者本地路径)超链接[链接描述]+(链接路径)锚点描述:页
2021-07-28 19:35:17
117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人