
java
文章平均质量分 77
Leo90567
这个作者很懒,什么都没留下…
展开
-
Java中的偏向锁、轻量级锁和重量级锁
在 JDK1.6 版本之前,所有的 Java 内置锁都是重量级锁。重量级锁会造成 CPU 在用户态与核心态之间频繁切换,所以代价高、效率低。JDK1.6 版本为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”实现。......原创 2022-06-07 23:12:43 · 2088 阅读 · 1 评论 -
Netty的ByteBuf学习笔记
网络编程中,当我们要进行数据传输时,往往需要使用缓冲区,常用的缓冲区就是Java NIO类库提供的java.io.buffer,在NIO编程时,我们主要使用的是ByteBuffer。从功能角度而言,ByteBuffer完全满足NIO编程的需要,但是由于NIO编程的复杂性,ByteBuffer也有其局限性,它的主要缺点如下:ByteBuffer长度固定,一旦分配完成,它的容量不能动态扩展和收缩,当需要编码的POJO对象大于ByteBuffer的容量时,会发生索引越界异常; ByteBuf...原创 2022-04-18 14:48:55 · 684 阅读 · 0 评论 -
Leo-IM,开源好用的IM(基于Netty开发)
Leo-IM,开源好用的IM。Leo-IM是基于Java语言、Netty框架、Vue+Element-UI开发的轻量级IM,服务端可独立运行(无需部署到web容器),HTTP服务和Socket服务可分开部署,使用基于Netty扩展的netty-rest-serverRESTful框架提供Web服务,简单易用,方便扩展。...原创 2021-09-29 17:17:44 · 2618 阅读 · 1 评论 -
基于K8s构建微服务系列 第三章 - 整体架构设计
一、基于Nacos的服务治理基于Nacos实现服务注册、发现与配置中心的整体架构Nacos作为服务的注册中心与配置中心; 微服务user-service启动时从Nacos拉取配置文件并在启动成功后将自身注册到Nacos; Web前端应用通过Nacos发现user-service的注册信息,并通过Feign实现客户端负载均衡; 基于Sentinel实现服务的限流、熔断与降级; 所有服务与中间件、数据库全部部署在K8s中。二、基于K8s的服务治理基于K8s Service做服务发.原创 2021-09-29 16:33:05 · 1821 阅读 · 0 评论 -
基于K8s构建微服务系列 第二章 - 环境准备
安装VirtualBox 下载地址:Downloads – Oracle VM VirtualBox 根据操作系统类型选择对应的安装包下载,下载后运行安装包,根据提示安装即可。 安装minikube 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录 前..原创 2021-09-29 16:15:37 · 214 阅读 · 0 评论 -
基于K8s构建微服务系列 第一章 - 前言
当下越来越多的人选择用微服务的方式构建应用程序,相对传统的单体应用程序,微服务架构具有如下优势:易于扩展:微服务可独立运行,可根据需要对局部进行扩展。 开发效率高:微服务是高内聚、低耦合的独立单元,可以被小团队单独开发,团队成员可只关注某一特定的业务领域。 技术栈不受限:可以根据项目和团队的特点,选择最合理的技术栈。 可复用:微服务聚焦于某一业务领域的,如果设计和封装的足够好,可以做到拿来即用,避免重复造轮子。 便于维护:微服务足够小,易于被开发人员理解和维护。为了最大化利用微服务的这些优原创 2021-09-29 12:27:24 · 511 阅读 · 0 评论 -
基于Storm与Cassandra的实时计算与大数据实践
本文讲述了Storm如何整合Cassandra解决大量业务数据场景下的实时计算问题,文中描述的应用场景是作者实际工作中解决的业务需求,如转发请标注出处。原文地址:https://mp.weixin.qq.com/s/hMiOPVJY0wcLRW9KrtxbEg...原创 2018-12-20 13:17:00 · 467 阅读 · 0 评论 -
Spring bean的生命周期
正确理解Spring bean的生命周期非常重要,因为有的时候可能会利用Spring提供的扩展点来自定义bean的创建过程,同时Spring bean的生命周期也是面试时经常被提起的问题,所以写篇文章总结一下。先用一张图来展示一下bean装载到Spring应用上下文中的一个典型的生命周期过程:...原创 2018-07-07 17:43:43 · 367 阅读 · 0 评论 -
使用ArrayList时设置初始容量的重要性
ArrayList是Java中比较常用的一个类,它是基于数组实现,非线程安全,可快速随机访问List中的元素。ArrayList具有动态扩容的机制,每次在添加元素时,都会判断容量是否够用,如果不够用,则需要扩容。JDK1.8中,ArrayList的初始容量为0,第一次添加元素时,会将扩容代码如下: /** * Increases the capacity to ensure tha...原创 2018-07-06 11:18:36 · 10640 阅读 · 4 评论 -
Java+Netty、Vue+Element-UI实现的即时通信应用 leo-im
之前工作接触了几个开源的IM产品,再加上曾经用Netty实现过几个服务,于是就有了用Netty实现一个IM的想法,于是用业余时间写了一个IM,和喜欢Netty的程序员们分享。考虑到方便扩展,在服务端采用了Http+Socket结合的设计,客户端所有的请求都基于Http,如发送消息、修改个人信息等,所有的消息推送采用Socket方式即时推送到客户端,这样的设计可以在并发访问量大的情况下,将好Http...原创 2018-06-19 13:57:17 · 4271 阅读 · 0 评论 -
Java+Netty实现的RESTful框架--netty-rest-server
在工作中用Netty做了几个服务,感觉Netty做出来的程序性能好,资源占用少,但是实现Http服务比较麻烦,于是就参考Spring MVC的注解基于Netty实现了一个轻量级的RESTful框架。该框架提供了控制器注解、全局异常控制器、拦截器等功能。注解名称参考了Spring MVC,编译理解和记忆,主要包括如下注解:@RestController@RequestMapping@GetMappi...原创 2018-06-19 13:31:57 · 3863 阅读 · 1 评论 -
基于Vue+Spring MVC+MyBatis+Shiro+Dubbo开发的分布式后台管理系统
本文项目代码:服务端:https://github.com/lining90567/dubbo-demo-server前端:https://github.com/lining90567/dubbo-demo-client最近项目中使用了shiro做权限管理,在开发过程中也踩了一些坑,于是便有了开发个应用巩固一下所学知识的想法,正好在开发的过程里学习一下Vue开发。技术栈方面,现在前后端分离大行其道...原创 2018-03-02 15:54:24 · 3650 阅读 · 0 评论 -
深入分析 ThreadLocal 内存泄漏问题
转自:http://blog.youkuaiyun.com/wudiyong22/article/details/52141608前言ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用 ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析 Threa转载 2017-06-02 13:42:48 · 301 阅读 · 0 评论 -
Java实现流控-Semaphore
Java实现流控-Semaphore原创 2017-06-02 18:57:02 · 2649 阅读 · 1 评论 -
java多线程之synchronized
Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然可以访问该object中的非加锁代码块原创 2017-06-27 09:53:32 · 292 阅读 · 0 评论 -
java多线程之join
java的Thread.Join,是把指定的线程加入到当前线程,也就是如果调用了某个线程的join方法,则后续线程必须等待该线程执行完成后才能执行。假设有三个线程,同时执行并输出当前线程的名称,输出后让线程sleep100毫秒,由于是并发执行,我们无法控制其输出的顺序,代码如下:public class ThreadJoinDemo { class MyThread extends原创 2017-06-29 09:59:33 · 224 阅读 · 0 评论 -
java多线程之yield
java的Thread.yield,是暂停正在执行的线程,然后执行其他线程(包括被暂停的线程),但是无法保证执行yield方法的线程真正达到“让步”的目的,因为“让步”的线程也有可能被线程调度程序选中继续执行。class MyThread extends Thread { private String threadName; public MyThread(String threa原创 2017-06-29 10:44:12 · 338 阅读 · 0 评论 -
java多线程之wait、notify和notifyAll
wait、notify和notify是Object类的3个final方法,这三个方法可以实现线程间的通信。在线程中调用Object的wait方法,将阻塞当前线程等待其它线程的通知,通知使用notify或notifyAll方法。当其它线程中调用了Object的notify或notifyAll方法后,将通知调用wait方法的线程继续执行wait后的代码。下边的例子有两个waiter和一个notif原创 2017-06-29 19:04:26 · 371 阅读 · 0 评论 -
java多线程之延迟初始化
有时候我们可能推迟一些高开销的对象的初始化操作,并且只有在使用这些对象时才进行初始化,开发者可以采用延迟初始化来实现该需求。但是要正确实现线程安全的延迟初始化还是需要一些技巧的,否则很容易出现问题。下面是一个非线程安全的延迟初始化的例子:public class UnsafeLazyInit { private static Instance instance; public st原创 2017-06-30 14:03:29 · 697 阅读 · 0 评论 -
java多线程之ThreadLocal
java中的java.lang.ThreadLocal,为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个Thread,而是Thread的局部变量。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为T原创 2017-07-11 14:40:25 · 315 阅读 · 0 评论 -
简述Java类的“初始化”
Java虚拟机规范规定了有且只有5种情况必须立即对类进行初始化:1.使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译器吧结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。2.使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。3.当初始化一个类的时候,如果发现其父原创 2017-08-16 23:16:34 · 578 阅读 · 0 评论 -
Java之:强引用、弱引用、软引用、虚引用
转自:https://my.oschina.net/ydsakyclguozi/blog/4043891、强引用(StrongReference) 强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Object o=new Object(); // 强引用当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryErr转载 2017-06-02 11:53:03 · 297 阅读 · 0 评论