
java
文章平均质量分 53
kobe_yang24
talk is cheap!show your code.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Volatile关键字与内存可见性、顺序性问题
MESI协议是基础,但Store Buffer和Invalidation Queue的引入使得 缓存一致性≠内存可见性。内存屏障是桥梁:通过约束指令顺序和队列处理,将缓存一致性提升为内存可见性。Volatile是Java语言层抽象:其语义通过内存屏障实现,但开发者无需关注底层细节,只需理解Happens-Before规则。原创 2025-03-15 16:57:51 · 967 阅读 · 0 评论 -
并发编程之实践
Reactor模型Golang携程高性能队列原创 2021-01-04 11:18:43 · 178 阅读 · 0 评论 -
并发编程设计模式
1.不变2.Copy on Write3.Thread Peer Message4.Worker Thread5.本地存储6.生产者消费者7.多线程if Guarded Suspension Balking原创 2020-12-28 09:29:14 · 177 阅读 · 0 评论 -
并发编程工具类
1.线程不安全2.线程安全3.无锁原创 2020-12-21 10:43:01 · 159 阅读 · 0 评论 -
多线程基础
多线程基础1.为什么有多线程摩尔定律的失效:软件工程师们所用的“面向摩尔定律编程”的套路越来越用不下去了。“写程序不考虑性能,等明年 CPU 性能提升一倍,到时候性能自然就不成问题了”,这种想法已经不可行了。阿姆达尔定律: 通过并行增加性能并行优化:出现多核cpu、分布式等等。2.java线程的创建过程如下所示,java线程的创建其实是和OS线程进行绑定的,所以java线程的创建和销毁的开销其实是很大的。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29tUi原创 2020-12-14 09:56:02 · 161 阅读 · 0 评论 -
netty简单应用
Netty 简单使用本文分别使用了 bio、nio 和netty简单实现了一个SAY HELLO 的程序。通过代码的演进也可以看到从 bio、nio、到netty 的演进路线,更加清晰地认识到netty是如何利用nio来实现的。BIOHelloServer启动一个server服务器,绑定到固定的端口 public static void main(String[] args) { int port = 8080; if (args == null &&原创 2020-12-07 10:17:53 · 187 阅读 · 0 评论 -
Netty
netty 如何实心高性能原创 2020-11-30 09:57:52 · 111 阅读 · 0 评论 -
IO模型
IO模型1.同步、异步、阻塞、非阻塞先说下概念:阻塞(非阻塞):数据没准备好是否要一直(不)等待同步(异步):是否当前线程处理咖啡店 -> 服务器咖啡 -> 数据咖啡做好 -> 数据就绪取/送 咖啡 -> 传输数据排队模式等待叫号模式点外卖模式BIO(同步阻塞)NIO(同步非阻塞)AIO(异步非阻塞)阻塞非阻塞咖啡没好是排队死等还是其他的阻塞:没有原创 2020-11-25 19:10:50 · 324 阅读 · 0 评论 -
Kafka运维
Kafka运维Topic主题管理创建主题#2.2版本 社区推荐使用bootstrap-server 代替 zookeeper #好处 #1.使用zk会绕过 kafka的安全体系验证#2.使用 --bootstrap-server 与集群进行交互,越来越成为使用 Kafka 的标准姿势bin/kafka-topics.sh --bootstrap-server broker_host:port --create --topic my_topic_name --partitions 1 --原创 2020-11-23 09:30:17 · 689 阅读 · 0 评论 -
垃圾收集器对比分析
垃圾收集器对比分析1.各种GC日志分析SerialGC新生代和老年代都是串行的并且STW 可以看到新生代GC仅仅回收老年代FullGC的时候会触发 老年代和M区垃圾的回收 到了后来也去掉了新生代的垃圾回收。java -XX:+UseSerialGC -Xms128m -Xmx128m -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:gc.log GCLogAnalysis2020-11-10T16:29:50.747-0800: 0.188原创 2020-11-16 16:15:20 · 289 阅读 · 0 评论 -
jvm字节码详解
2.获取字节码齐清单java代码:public class HelloByteCode { public static void main(String[] args) { HelloByteCode helloByteCode = new HelloByteCode(); }}2.1编译反编译(助记符)javac HelloByteCode.javajavap -c HelloByteCode警告: 二进制文件HelloByteCode包含com.zhan原创 2020-11-09 10:48:35 · 443 阅读 · 0 评论 -
JVM字节码技术
JVM字节码技术不积细流无以成江河1.什么是字节码为什么要学习字节码Java 字节码:bytecode,是Java代码编译后的中间代码格式。JVM需要读取并解析字节码才能执行相应的任务。JVM字节码是JVM的指令集。JVM加载字节码格式的class文 件,校验之后通过编译器转换为本地机器代码执行。java bytecode 由单个字节组成(所以java的操作码又叫做字节码),所以最多有256个操作吗。实际上Java只使用了200左右的操作码, 还有一些操作码则保留给调试操作。分类(指令性质):原创 2020-11-02 09:58:07 · 521 阅读 · 0 评论 -
JVM诊断
JVM诊断原创 2020-10-26 14:14:51 · 302 阅读 · 0 评论 -
JVM 类加载
1.类加载过程2.类加载器3.自定义类加载器4.打印各个类加载器加载的类原创 2020-10-19 09:44:24 · 168 阅读 · 0 评论 -
redis 跳表应用
跳表底层数据结构应用原创 2020-10-12 09:39:34 · 349 阅读 · 0 评论 -
k8s部署Redis-Cluster
1.Redis-Cluster 是一个有状态的集群2.Redis-Cluster在K8s集群重的持久化方式原创 2020-09-28 09:16:42 · 432 阅读 · 0 评论 -
排序(一)
1.如何分析一个排序算法?排序算法的执行效率。最好、最坏、平均时间复杂度。时间复杂度的系数、低阶、常数。比较次数和交换的次数。排序算法的内存消耗(空间复杂度)。其实就是此排序算分的空间复杂度。原地排序。空间复杂度为O(1)的排序。排序算法的稳定性。排序的数据中存在相同的元素,排序的过程中不会改变这些用元素的位置,就说这个排序算法是稳定的。有序度一个数组中有序元素对的个数。有序元素对: a[i]<a[j],且i<j 就是一个有序对。对于一个数组他的数据为。9,原创 2020-08-17 09:15:02 · 157 阅读 · 0 评论 -
KafkaProducer详解
1.Producer简介Kafka Producer 就是负责向Kafka 服务端,写入数据的程序。Kafka 支持多种Producer库,主流的编程语言都覆盖到了。但是除了Java其他的语言都是由非Apach Kafka社区的人进行维护的。有其他语言的客户端需求,可以去这个网址去下载相应的信息。kafakclients链接2.构造Producer2.1简单构造1.构建配置文件首先第一步是进行用户鉴权的操作(如果Kafka集群需要的话)然后需要配置的三个主要参数broker的地址k原创 2020-08-09 20:21:33 · 15195 阅读 · 0 评论 -
Kafka日志详解
首先我们要知道Kafka本质上使用Java NIO的ByteBuffer来保存消息。好处:ByteBuffer是紧凑的二进制字节结构,不浪费空间。1.消息版本变迁1.1V0版本Kafka在0.10.0版本之前都是采用V0版本的消息格式如下表格所示为V0版本的一条Record的组成及其含义:Record-字段--含义-Record headCRC校验码4个字节CRC校验码,校验范围为magic到value之间,用于确保消息再传输过程中不会被恶意篡改Record he原创 2020-07-11 22:35:06 · 7290 阅读 · 0 评论 -
Kafka如何实现高吞吐量 低延迟
Kakfa为什么这么快?(一)1.为什么这么快?kafka为什么这么快,就是kafka再各个层面做了各种各样的优化,尽可能的把资源最大化的利用kafka做的优化主要有以下几个方面:1.Producer批处理2.PageCache(读写缓存的使用)3.ZeroCopy4.Kafka服务端处理请求的方式5.顺序读写6.分区机制,以及消费者组的使用7.消息格式的演变,以及压缩消息最主要的就是v2版本提取消息公共属性,使用可变长参数的优化8.摒弃消息的SRC校验(但是损失了安全性,原创 2020-07-07 10:46:03 · 16889 阅读 · 3 评论 -
Kafka简介
Kafka简介1.kafka是什么1.1 Messaging Systemkafka作为一个消息引擎具备哪些优势?1.集成两种传统消息引擎的优点。传统的消息引擎有两种模式:queuingpublish-subscribequeuing的缺点是消息不能重复消费,一个cosumer消费完后其他的consumer就不能再进行消费。publish-subscribe 的缺点是,所有的consumer需要都去订阅主题(或者队列)这样就失去了扩展性,所有的consumer都要去订阅消费消息。ka原创 2020-07-04 10:55:58 · 677 阅读 · 0 评论 -
并发编程(五)Fork/Join
并发编程(五)Fork/JoinFrok/Join模型主要为了处理分治任务。什么事分治思想?其实就是分而治之,将大的任务分解成无数个小的任务,直到子问题可以直接求出结果为止。分治思想的条件就是大任务和小任务除了数据量不一样之外,其他的都是一摸一样的。分治思想的问题,基本上都会用递归来实现。1.1 java并发包中的并行计算框架 Fork/Join分治任务模型主要分为分解和合并。对应的...原创 2019-06-27 23:30:08 · 553 阅读 · 0 评论 -
并发编程(四)CompletionService
并发编程(四)CompletionService1.1 什么是CompletionService简单的并行任务我们直接使用线程池各自提交任务就可以了,需要获取结果的或者线程之间有依赖关系的我们可以使用Future,当然对于复杂的关系例如线程之间的串行,并行,聚合等关系,java也提供了ComplableFuture来简化我们对线程的操作。CompletionService java提供的一种...原创 2019-06-26 23:02:15 · 627 阅读 · 0 评论 -
并发编程(二) Future
并发编程(二) Future1.1 Future是什么?异步任务中我们需要知道的两个重要属性是任务什么时候结束?任务的结果是什么?ThreadPoolExecutor提交任务的方法有如下几个:<T> Future<T> submit(Callable<T> task);<T> Future<T> submit(Runn...原创 2019-06-26 23:01:36 · 488 阅读 · 0 评论 -
并发编程(一)Executor
并发编程(一)Executor1.1. 为什么需要线程池?线程池是一个重量级别的对象,所以应该避免频繁的创建和销毁。创建一个线程不仅仅需要在jvm的堆里边分配一块内存,还需要调度操作系统内核的api,操作系统需要给线程分配一系列的资源。线程池解决的问题:解决线程的频繁创建和销毁。1.2. 线程池是什么线程池就是一个创建线程的池子,但是它不同于我们常见的池化资源。线程池是一个生产者消...原创 2019-06-26 23:00:58 · 349 阅读 · 0 评论 -
并发编程(三)CompletableFuturer
CompletableFuturer**异步化:**并行方案得以实施的基础,利用多线程优化性能这个核心方案得以实施的基础。为什么用CompletableFuturer?不需要手动维护线程,没有繁琐的手工维护线程的工作。语义清晰代码简单并且专注于业务task is cheap show your code!package com.zy.concurrent.future;imp...原创 2019-06-22 11:43:44 · 328 阅读 · 0 评论