Java
文章平均质量分 80
Java基础与主流框架
Levi_
这个作者很懒,什么都没留下…
展开
-
Java程序监控工具
Zabbix:运维监控,随着节点的增多和服务的增多,大概在1k左右,你就会遇到瓶颈(包括开发定制瓶颈)。整体来说,小公司用的很爽,大公司用的很鸡肋。Prometheus:师从K8S,启发于 Google 的 borgmon 监控系统,的轻量级的运维监控。Stagemonitor:作用是在监控多个服务器上运行的应用程序,这个工具与时间序列数据库(TSDB)集成。是一个Java监控代理程序来的,使用集群应用程序堆栈构建的,通过包含一个在Java应用程序中的代理,将度量标准和请求跟踪发送到中央数据库。原创 2021-06-16 12:42:20 · 2462 阅读 · 1 评论 -
MySQL新手入门
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■↓↓↓↓↓↓↓↓↓ 数据库 ↓↓↓↓↓↓↓↓↓↓↓■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 数据库; 为什么要有? 当使用XML,IO等一些技术进行存储数据的时候,读取速度慢...原创 2020-03-12 11:06:12 · 375 阅读 · 0 评论 -
SQL,JSON查询-
表iduidinfo11001{"name":"周年庆","status":0,"addtime":"2017-10-10"}21002[{"name":"周年庆","status":0,"addtime":"2017-10-11"},{"name":"特价促销...原创 2019-04-20 15:39:52 · 6010 阅读 · 0 评论 -
Native memory allocation (malloc) failed to allocate 32744 bytes for ChunkPool::allocate
、配置JVM启动参数:-Xms1303m -Xmx1303m -XX:PermSize=256m -XX:MaxPermSize=256m或升级最新的JVM原创 2019-04-19 15:40:04 · 28750 阅读 · 0 评论 -
Spring源码(5) - Spring事务入门与源码分析
Spring-事务什么是事务? 事务就是完成一件事情所要完成的N个任务,但是如果其中一个任务失败了,可能就导致这件事情就失败了。比如吃饭,吃饭之前要先拿碗筷、洗碗筷、摆放好碗筷,如果在拿碗筷的过程中把碗给摔了,那么就吃不成饭了。事务分类 编程式事务:TransactinTemplate或者使用底层的PlatformTransactionManager事务管理器来手动开启、提交、关闭事务。 声明式事务:建立在Aop的基础上,使用@Transactiona...原创 2020-11-22 21:32:30 · 208 阅读 · 0 评论 -
Spring源码(3) - Spring AOP入门
Spring-AOP没有AOP带来的问题 public interface LeviService { public boolean problem1(); public boolean problem2(); } @Service public class LeviServiceImpl implements LeviService { @Overr...原创 2020-11-22 21:30:54 · 180 阅读 · 0 评论 -
Spring源码(4) - Spring AOP源码分析
AOP源码分析 public interface LeviService { public int test(int i) throws Exception; } @Service public class LeviServiceImpl implements LeviService { @Override public int test(int i) throws Ex...原创 2020-11-22 21:30:22 · 277 阅读 · 0 评论 -
Spring源码(2) - Spring常用注解
Spring常用注解说明pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVe.原创 2020-11-22 21:22:33 · 221 阅读 · 0 评论 -
Spring源码(1) - 什么是Spring?Spring源码入门
为什么要有Spring? 无论在解析源码,还是在看待其他问题上,首先先来看第一个问题,为什么要有Spring?为什么Spring这么流行?为什么会有Spring? C++这个语言相信了解过的都知道,其对象是需要手动回收的,而Java的优点之一就是会自动回收不用了的对象。但是如果在一个项目中,如果创建的对象过多,这个创建速度超过了达到回收条件的时限时,内存就会爆掉。那么很多人就会想,很多创建的对象其实都是重复的,能否把这些对象集中起来,不用重复去创建,提高整个对象的利用率,那么就可...原创 2020-07-31 10:11:34 · 2572 阅读 · 0 评论 -
Java网络编程(11) - NIOEventLoopGroup源码解读,Netty内存管理机制是怎么样的?BytBuf特点是什么?
NIOEventLoopGroup源码解读(解决Java Nio Bug) NioEvnetLoopGrou继承了MultithreadEventLoopGroup。 class NioEventLoopGroup extends MultithreadEventLoopGroup NioEventLoopGroup的父类MultithreadEventLoopGroup的父类MultithreadEventExecutorGroup内部维护了一个类型为...原创 2020-06-14 09:59:04 · 403 阅读 · 0 评论 -
Java网络编程(10) - Netty网络编程常见问题与疑问
Netty网络编程面试常见问题Netty是什么? Netty是由JBOSS提供的一个Java开源框架,Netty是一个高性能、异步事件驱动的NIO框架,提供了对TCP、UDP和文件传输的支持,可用于快速开发可维护的高性能协议服务器和客户端。Netty是基于Java NIO的一个C/S网络应用框架,所有IO操作都是异步非阻塞的,通过Future-Lisener机制,用户可以很方便的主动获取或者通过通知机制获得IO操作结果。Netty的特点是什么? API简单,开发...原创 2020-06-13 23:16:56 · 473 阅读 · 0 评论 -
Java网络编程(9) - Netty怎么做数据通信?Netty的心跳检测怎么实现?Netty怎么用Http协议通信?
Netty实际案例的考虑 – 数据通信实现 1、长链接:使用长链接通道不断开的形式进行通信,也就是Server和Client的通道一直处于开启状态,如果服务器性能足够好,并且我们的客户端数据也比较少的情况下,可以使用这种。 2、一次性批量提交数据:这是采用短链接方式,也就是会把数据保存在本地临时缓冲区或者临时表里,当达到临界值时,进行一次性批量提交,又或者根据定时任务轮询提交,这种情况的弊端是做不到实时性传输,在对实时性不高的应用程序可以使用这种。 3、特殊的长链接...原创 2020-06-13 23:13:55 · 451 阅读 · 0 评论 -
Java网络编程(8) - 怎么样使用NettyUDP协议通信?怎么样使用Netty的WebSocket通信案例?
Netty使用UDP协议通信案例 UDP(User Datagram Protocol)即用户数据包协议,是OSI(Open Sysem Interconnection,开放式系统互联)模型的一种无连接的传输层协议,提供面向事务的简单不可靠信息传输服务。 在网络中与TCP协议一样,用于处理数据包,是一种无连接信息,不关系数据包,只关注是否发出数据包,UDP有不提供数据包分组、组装,和不能对数据包进行排序的缺点。也就是说,当报文发送之后,是无法得知是否安全完整到达的。...原创 2020-06-13 23:08:24 · 593 阅读 · 0 评论 -
Java网络编程(7) - 什么是TCP粘包、拆包和解决?什么Netty编解码技术?主流的序列化框架有哪些?Netty的JBOSS的Marshalling详解案例?
TCP粘包、拆包问题 熟悉TCP编程的可能都知道,无论是服务端还是客户端,当进行数据读取或者发送数据的时候,都需要考虑TCP底层的粘包和拆包机制的问题。 TCP是一个流协议,流是没有界限的数据,是连成一片的,没有分界线。TCP底层并不理解上层的业务数据具体的含义,它会根据TCP缓冲区的实际情况进行包的划分,也就是说,在业务上,一个完整的包可能会被TCP分成多个包进行发送,也可能把多个小包封装成一个大的数据包发送出去,这就是所谓的TCP粘包、拆包问题。TCP粘包和拆包 -...原创 2020-06-13 22:49:30 · 407 阅读 · 0 评论 -
Java网络编程(6) - Netty高性能体现,Netty为什么快?高性能的三大要素?Netty的高能性在什么地方?Netty的线程模型?Netty的零拷贝技术是怎么样?Netty内存池是怎么样的?
Netty高性能体现高性能体现三大要素 1、传输:用什么样的通道传输数据给对方,BIO、NIO、AIO,IO模型在很大程度上决定了框架性能。 2、协议:采用什么样的通信协议,Http或内部私有协议。协议选择的不同,性能模型也不同。相比于公有协议,内部私有协议的性能通常可以被设计的更优。 3、线程:数据报如何读取?读取之后的编解码在哪个线程进行,编解码后的消息如何派发,Reactor线程模型的不同,对性能的影响也很大。Netty高性能体现-IO模型...原创 2020-06-13 22:41:24 · 843 阅读 · 0 评论 -
Java网络编程(5) - Netty入门,什么是Netty?Java NIO存在的常见问题,Netty总体架构,Netty服务端工作过程,Netty模块组件,Netty常见应用场景
什么是Netty? 在网络编程这个系列文章中,之前在讲解的东西仅仅只是一个模型,如果真在要在工作中去实际应用还要不断完善、扩展、优化。比如TCP拆包和粘包问题,或者是数据接收的大小等等问题都需要认证的去思考,而这些是需要大量是实际项目经历的。所以Socket网络通信不是一件简单的事情。 Netty是一个异步事件驱动的网络通信框架,用于简化网络编程的过程,不用去编写复杂的代码逻辑去实现通信,也不需要去考虑性能问题,不需要考虑编解码、半包读写问题,这些功能Netty都实现好了,只需要...原创 2020-06-13 22:33:20 · 503 阅读 · 0 评论 -
Java网络编程(4) - BIO、NIO、AIO的区别,阻塞、非阻塞、同步、异步的区别,什么是NIO同步非阻塞详解?什么是AIO异步非阻塞?NIO的三大组件是什么?
多种IO区别(BIO、NIO、AIO) 传统的Socket链接还是伪异步,都是用的BIO的链接,而JDK为了解决这种通信的问题推出了NIO和AIO去解决这个问题。 BIO(blocking I/O) NIO(non-blocking I/O) AIO(Asychronous I/O) 同步、阻塞 同步、非阻塞 异步、非阻塞 面向流 面向...原创 2020-06-13 22:18:50 · 302 阅读 · 0 评论 -
Java网络编程(3) - 什么是Socket网络编程?网络编程Socket详解、传统Socket的问题、Socket伪异步实现与模拟
Socket解析 网络编程的基本模型是Client/Serve模型,也就是两个进程之间进行相互通信,其中服务端提供配置信息(绑定IP地址和端口),客户端通过连接操作向服务端监听地址发起连接请求,通过三次握手建立连接,如果连接成功,则双方即可进行通信,通信就是通过Socket(网络套接字)。Socket称为套接字,应用程序通过Socket向网络发出请求或应答网络请求。 Socket和SocketServer类库位于java.net包中,SocketServer用于服务端,Soc...原创 2020-06-13 22:12:59 · 231 阅读 · 0 评论 -
Java网络编程(2) - TCP网络Socket编程、UDP网络Socket编程、UDP丢包模拟、TCP与UDP对比、网络编程TCP协议模拟图片服务器
网络协议UDP UDP(User Data gram Protocol)用户数据报协议:无连接协议,提供尽力而为的传输,速度比TCP快;不需要建立三次握手;不提供任何重传机制,延迟低;无需添加ACK、Sequece等信息,核载小;出错了不需要重传;适合用于一个数据就能完成通信的场景;不提供传输保证、重传、错误处理,这一块由上层保证;组播一般用UDP。备注:有一个名为RTP协议(实时传输协议),该协议定义了Sequence字段,一般配合UDP为Voip流量提供防止乱序的功能,另外与一些U...原创 2020-06-13 22:09:33 · 314 阅读 · 0 评论 -
Java网络编程(1) - 什么是网络编程?什么是Web编程?域名与DNS服务是什么?IP地址分类?网络编程要素是什么?
网络编程 网络基础参阅:https://blog.csdn.net/Su_Levi_Wei/article/details/100540838 计算机网络:指分布在不同地域的计算机,通过外部设备连接起来,实现了资源共享(数据和设备的共享)与数据传输的计算机系统。 外部设备:计算机、路由器、交换机等。 网络编程:解决计算机PC与计算机PC之间的数据通信传输的问题,即Socket编程。 Web编程:基于浏览器的客户端与服务端进行数据传输...原创 2020-06-13 22:03:38 · 405 阅读 · 0 评论 -
Java多线程(13) - Disruptor多线程并发框架进阶多场景玩法、多生产者多消费者
多场景玩法 import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import com.lmax.disruptor.BusySpinWaitStrategy; import com.lmax.di.原创 2020-06-01 19:20:09 · 1023 阅读 · 0 评论 -
Java多线程(12) - Disruptor多线程并发框架入门详解
为什么用Disruptor? 传统阻塞的队列使用锁保证线程安全,而锁通过操作系统内核上下文切换实现,会暂停线程去等待锁,直到锁释放。执行这样的上下文切换,会丢失之前保存的数据和指令。由于消费者和生产者之间的速度差异,队列总是接近满或者空的状态,这种状态会导致高水平的写入争用。 毕竟锁的技术会导致性能变差,而且还有可能会造成死锁。什么是Disruptor? Disruptor的流行起源于Martin Fowloer在自己的网站上写了一篇LMAX架构...原创 2020-06-01 19:18:38 · 1768 阅读 · 0 评论 -
Java设计模式(4) - 多线程并发设计模式 - Master-Worker设计模式
Master-Worker模式 /** * Master-Wroker模式:这也是常用的并行模式,核心思想是系统由Master和Worker两类进行协同工作。 * Master负责接收和分配任务,Worker负责处理子任务,但各个Worker子进程处理完成后,会将结果返回给Master,由Master归纳和总结。 * 好处就是能将一个大任务分解成为若干个小任务并行执行,从而提高系统的吞吐量。 * 现有框架设计:Hadoop、Spark */ ...原创 2020-06-01 19:15:06 · 232 阅读 · 0 评论 -
Java多线程(11) - 多线程 - 锁详解:重入锁、公平锁、非公平锁、读写锁、不可重入锁、自旋锁、独享锁、共享锁、互斥锁、悲观锁、乐观锁、分段锁、偏向锁、轻量级锁、重量级锁、CAS算法原理
重入锁:在需要进行同步的代码上加上锁定,但不要忘记最后一定要释放,不然会造成永远无法释放,其他线程永远无法进来 公平锁:多个线程按照先后申请顺序获得锁。 非公平锁:多个线程获取锁的顺序并不是按照申请锁的顺序,可能按照CPU获取的先后优先获取锁,有可能造成优先级翻转或饥饿的现象。 /** * 重入锁,必须要手动释放 */ public class L01ReentrantLock { public static vo...原创 2020-05-29 11:09:46 · 428 阅读 · 0 评论 -
Java多线程(10) - 多线程 - CountDownLatch、CyclicBarrier、Semaphore使用示例详解
实用多线程类 这些类都是位于java.concurrent.util.*包下。CountDownLatch常用于监听某些初始化操作,等待初始化这些完毕,通知主线程继续工作。针对的是一个线程,一个线程等待,其他线程通知。 public class U01CountDownLatch { public static void main(String[] args) { //代表countDown方法调用的次数,只...原创 2020-05-29 11:07:37 · 354 阅读 · 0 评论 -
Java多线程(9) - 多线程 - 线程池详解与使用示例
在Java中,如果每个请求到达就创建一个新的线程,创建和销毁线程花费的世界和消耗的系统资源都相当大,甚至可能要比在实际的用户请求的时间和资源要多的多。 如果在一个JVM里创建太多线程,可能会使得系统由于过度消耗内存或切换过度而导致系统资源不足。 为了解决这些问题,就有了线程池的该娘,线程池的核心逻辑就是提前创建好若干个线程放在一个容器中。如果有任务需要处理则将任务之间分配给线程池中的线程来执行即可,任务处理完以后,这个线程不会销毁,而是等待后续分配任务。同时通过线程池...原创 2020-05-29 11:05:08 · 362 阅读 · 0 评论 -
Java设计模式(5) - 多线程并发设计模式 - 生产者-消费者设计模式多种写法
生产者-消费者设计模式 /** * 生产者-消费者模式:是一个非常经典的多线程模式,在实际开发中应用非常广泛的思想理念,在生产-消费模式中, * 通常有两类线程,即N个生产线程和N个消费者线程。 * 生产者负责提交用户请求,消费者线程则负责具体处理生产者提交的任务,在生产者和消费者之间通过共享内存缓存区进行通信。 * 典型的应用:MQ。 */ public class C05ProducerConsumer { public...原创 2020-05-27 23:47:42 · 330 阅读 · 0 评论 -
Java设计模式(3) - 多线程并发设计模式 - Future设计模式
Future模式 /** * Future模式:是并行模式属于设计优化的一部分,是对一些常用的多线程结构的总结和抽象。 * 与串行程序相比,并行程序的结构通常更为复杂,因此合理的使用并行模式在多线程开发中更具有意义。 * 这个模式类似在发送ajax请求,页面是异步的进行后台处理,用户无须一直等待结构就可以继续浏览和进行其他操作。 */ public class C03Future { public static void main(S...原创 2020-05-27 23:46:11 · 202 阅读 · 0 评论 -
Java多线程(8) - 同步(并发)类容器详解(CopyOnWrite容器、ConcurrentMap容器、Queue队列容器)
同步(并发)类容器 同步(并发)类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作,如迭代(反复访问元素,遍历容器所有元素)、跳转(根据指定的顺序找到当前元素的下一个元素),以及条件运算。 这些复合操作在多线程并发的修改容器时,可能会表现出意外的行为,最典型的就是之前解析集合源码时,讲到的Fast-Fast机制,会抛出ConcurrentModificationException异常,这是早期迭代器设计的时候并没有考虑并发修改的问题。 早期的同步(并发)...原创 2020-05-27 12:56:07 · 417 阅读 · 0 评论 -
Java设计模式(2) - 工厂设计模式
工厂模式 /** * 工厂模式 * @author Levi */ public class J01FactoryMode { public static void main(String[] args) { /* * 工厂制造车是视市场环境来决定今年要增产哪些车型的。 * 制造哪些车,怎么制造,工厂老板并不关心。 * 并且后期要制造新...原创 2020-05-27 12:51:51 · 139 阅读 · 0 评论 -
Java设计模式(1) - 单例设计模式多种写法
饿汉式 /** * 饿汉式:开始就创建了对象,饥不择食 */ class SingletonHungry { private static SingletonHungry singletonHungry = new SingletonHungry(); private SingletonHungry() { } /** ...原创 2020-05-27 12:41:26 · 222 阅读 · 0 评论 -
Java多线程(7) - 多线程之线程停止方式
线程停止方式 /** * 停止线程的方式 */ public class J14ThreadCease { public static void main(String[] args) throws InterruptedException { AA aa = new AA(); aa.setNa...原创 2020-04-25 21:20:40 · 366 阅读 · 0 评论 -
Java多线程(6) - 多线程之线程通讯(二)(wait与notify案例、守护线程)
wait/notify/notifyAll案例运行过程: 1、生产者线程,在被wait()等待后,再次被唤醒时,是继续运行下一句代码,立即生产,并没有再次判断仓库是否已有产品。 2、无论生产者还是消费者,唤醒后,还要再次循环判断仓库是否为空,但是会引发死锁,因为所有线程都进入阻塞状态。 3、每次唤醒的时候,唤醒所有的线程解决这个问题。说明:...原创 2020-04-23 15:55:57 · 234 阅读 · 0 评论 -
Java多线程(5) - 多线程之线程通讯(一)(wait、notify、join、yield、sleep区别与应用)
线程通讯 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一。 当线程存在通信交互,系统之间的交互性会更加强大,在提高CPU利用率的同时,开发人员对线程任务在处理的过程中可以进行有效的把控和交互。 注:进入阻塞状态的线程,在解除阻塞后,进入就绪状态,是需要重新抢夺锁和CPU资源的。...原创 2020-04-23 15:54:28 · 249 阅读 · 0 评论 -
Java多线程(4) - 多线程之Volatile关键字、ThreadLocal、Atomic系列类、CAS
Volatile关键字 volatile关键字的作用是使得变量在多个线程间可见。 /** * Volatile关键字:使变量在多个线程间可见 */ public class J18Volatile { public static void main(String[] args) throws InterruptedExceptio...原创 2020-04-23 15:49:27 · 319 阅读 · 0 评论 -
Java多线程(3) - 多线程之死锁
死锁 /** * 死锁:会导致单线程出现循环 * * 产生的条件: * 同步代码块中,出现多个锁 * 多个线程分别持有自己的锁,还需要其他的锁来共同完成任务 * * 每个线程没有释放自己的锁,就会出现线程之间各自持有对方所需要的锁,所有线程都进入一种无限等待的状态,死锁。 * * 案例:吃饭,...原创 2020-04-23 15:44:26 · 203 阅读 · 0 评论 -
Java多线程(2) - 多线程之线程安全详解(synchronized、Lock)
线程安全 线程安全就是当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全。 public class ThreadSyncProblem { public static void main(String[] args) { Ticket2 ticke...原创 2020-04-18 11:03:24 · 760 阅读 · 0 评论 -
Java多线程(1) - 多线程入门之融会贯通
为什么会有线程的出现? 荐阅:https://blog.csdn.net/Su_Levi_Wei/article/details/80629737在上面这篇文章中,可以发现,刚开始时,电脑是单个CPU,随着科技的发展,CPU的性能也提升了,如果CPU只能运行一个应用的话,这样对CPU的性能太浪费了。于是科学家们就在想,能不能同时运行多个应用,把这些应用隔开来,并且根据各...原创 2020-04-17 18:33:08 · 467 阅读 · 0 评论 -
Java集合(11) - Set集合与集合分析总结
Set集合总结 HashSet是通过HashMap实现。 LinkedHashSet是通过LinkedHashSet实现。 TreeSet在一定程度上来说,是通过TreeMap实现的。 HashSet、LinkedHashSet、TreeSet都是没有自己的数据结构和非线程安全的,都是具备有Fail-Fast机制,并且相对来说特性都是和对应的...原创 2020-04-02 12:33:50 · 240 阅读 · 0 评论 -
Java集合(10) - LinkedHashSet与TreeSet源码解析
LinkedHashSet public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable 可以看到LinkedHashSet是继承自HashSet,但是在看源码注释时,会发现Linked...原创 2020-04-02 12:33:17 · 258 阅读 · 0 评论