JVM基础
😀 这里写文章的前言:JVM基础知识的学习
📝 为什么用JVM
可以轻松实现Java代码的跨平台执行
JVM 提供内存管理、垃圾回收、编译时动态校验等功能
使用JVM能够让我们的编程工作更轻松、高效节省公司成本,提示社会化的整体开发效率,我们只关注和业务相关的程序逻辑的编写,其他业务无关但对于编程同样重要的事情交给JVM来处理
📔 JVM是怎样运行字节码的
从虚拟机视角来看,执行 Java 代码首先需要将它编译而成的 class 文件加载到 Java 虚拟机中。
加载后的 Java 类会被存放于方法区(Method Area)中。实际运行时,虚拟机会执行方法区内的代码。
而且,Java 虚拟机同样也在内存中划分出堆和栈来存储运行时数据。不同的是,Java 虚拟机会将栈细分为面向 Java 方法的 Java 方法栈,面向本地方法(用 C++ 写的 native 方法)的本地方法栈,以及存放各个线程执行位置的 PC 寄存器
📔 执行过程
在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字 ...
Unsafe类
😀 这里写文章的前言:一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
📝 主旨内容
堆外内存
对垃圾会搜停顿的改善,由于堆外内存是直接受操作系统管理而不是JVM,所以当我们使用堆外内存的时候,即可保持较小的堆内内存规模.从而在GC时减少回收停顿对于应用的影响
提升程序I/O操作的性能,通常在I/O通信过程中,会存在堆内内存到堆外内存的数据拷贝,对于需要频繁进行内存间数据拷贝且生命周期较短的暂存数据,都建议存储到堆外内存.
🤗 总结归纳📎 参考文章
https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html
💡 有关文章的问题,欢迎您在底部评论区留言,一起交流~
AbstractQueuedSynchronizer
😀 这里写文章的前言:一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
📝 基本介绍AQS(队列同步器),简称同步锁框架。
同步器是实现锁的关键,利用同步器将锁的语义实现,然后在锁的实现中聚合同步器。
AQS会将请求获取锁失败的线程放入一个队列的尾部:等待获取锁的线程全部处理阻塞状态。当前线程执行完毕(释放锁)后,会激活当前线程的后继节点。
采用模板模式,tryacquire(), release()等方法需要子类覆写。实现了算法主体框架,供外部调用,里面会调用原语操作和钩子操作
原语操作:即定义的抽象方法,子类必须重写
钩子操作:与原语操作类似,也是供子类重写的。区别是钩子可以重写也可以不重写,如果不重写默认使用父类的
一般的lock类都实现Lock接口的,而内部会继承AQS,因为Lock是面向使用者,而AQS这个框架是锁的实现框架,使用者一般不会关注AQS
CLH队列介绍CLH锁其实就是一种基于队列(具体为单向链表)排队的自旋锁,由于是Craig、Landin和Hagerste ...
Java CAS理解
😀 这里写文章的前言:一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
📝 介绍锁在并发处理中占据一席之地,但是使用锁有一个不好的地方,就是当一个线程没有获取到锁的时候会被阻塞挂起来,这会导致线程上下文的切换和重新调度开销。java提供了非阻塞volatile关键字来解决共享变量的可见性问题,这在一定程度上弥补了锁带来的开销问题,但是volatile只能保证共享可见的问题,不能解决读一改一写的原子性问题。CAS即CompareAndSwap(比较交换),即是JDK提供非阻塞原子性操作
CAS机制它包含3个参数CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当V值等于E值的时候,才会将V的值设置为N;如该V与E的值不一样,则说明已经有其他线程做了更新,则当前线程什么都做不了。最后,CAS返回当前V的真实值比如看:AtomicInteger#getAndIncrement 的方法
public final int getAndIncrement() { ...
戴尔笔记本售后
😀 这里写文章的前言:一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
📝 说明 先要说明下, 这是一个悲伤的故事开始. 也不晓得从什么时候开始, 我用公司的笔记本突然坏了几个按键,这几个按键的位置也是奇怪. 分别是 BN长空格右侧的2按键
讲道理,在这之前,我都不清楚售后这么牛逼的 , 还是太缺乏生活经验所导致
主要是中间还遇见一个贼有一个的事情, 这事情让我对 “百度” 这款索搜引擎所严重吐槽. 奉劝大家用百度查询什么啊,一定只认证官网。而且,现在一些官网,千万不走要 “百度” , 走官网的公众号什么都可以,意思就是直接对标官网即可
不过,像百度这种,存在的价值也很好,给你成长不至于以后还被坑,有严重的意义
坑 由于没有经验,我就百度 , DELL 官方售后,我不清楚小伙伴们有没有在手机浏览器上百度这种情况,如果有的话,会发现没有特别明显的广告,而且我点击的明明就是 DELL 的官网,哪儿晓得给我跳到一个其他网站的链接地址去,还给你窗口聊天,看着蛮像的,然后你问他是不是官网售 ...
Kafka消费者数据配置问题记录
😀 这里写文章的前言:一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
📝 问题最近测试一些bug, 因为有些数据到canal, 然后canal写到kafka, 我们自己的服务消费kafka的数据.
由于一些参数的配置,导致kafka频繁的出现这个问题. 然后你如果这些关键字去百度的话,那么这个问题,你估计是很那处理了. 因为百度出来的处理方式是牛鬼蛇神,各种花样都有,但是就是没有一个有用的.
最后还是去 github上看到一个人提的这个问题,然后跟着他弄下,就ok了. 但是具体的参数配置,还是得仔细去测试下.不然总是会出现各种你想不到的情况发生,奇奇怪怪的问题.
2020-06-30 14:35:05.450 INFO 26662 --- [ntainer#0-0-C-1] o.a.kafka.clients.FetchSessionHandler : [Consumer clientId=consumer-2, groupId=gavin_localhost] Error send ...
Kafka生产者发送消息记录
😀 这里写文章的前言:一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
📝 题记 在公司使用kafka也有一段时间了,都是停留在最简单的使用上. 配置好ip/consumer/topic等信息,然后就有数据就开始消费数据(也就是开始处理业务逻辑).
然后这里记录下,使用kafkaTemplate 来发送消息.
为什么要记录呢? 因为我发现,存在丢失数据的情况哈哈哈哈。
怪就怪在只有一个kafka,然后宕机,就丢了.
但是是可以在发送端用回调来记录数据的.
代码 话不多少, 可以上代码.
这里主要看 future.addCallback() 这个方法,这里可以看到,如果是是失败了的话,就会走到 onFailure方法中来,这里你就对data数据进行处理,并且throwable也是有的,你也可以自定义异常抛出来,交给上游处理.
package com.yang.bootkafkacase.kafka;import org.slf4j.Logger;import ...
SpringCloud中Eureka_Server端阅读
😀 这里写文章的前言:一个简单的开头,简述这篇文章讨论的问题、目标、人物、背景是什么?并简述你给出的答案。
可以说说你的故事:阻碍、努力、结果成果,意外与转折。
📝 题记 公司的注册中心一直使用的是Eureka,其实在就应该写一篇记录来记录一下或者专门来阅读一下Eureka的源码. SpringCloud全家桶中的组件,如果时间是充足的话,其中的源码阅读下,还是很不错的. 其中是可以学习到很多知识的.
构建项目 : 地址https://github.com/baoyang23/boot-case-self/tree/master/txlcninit , 这里只用看txlcn-server模块的依赖和代码即可,仅仅只有依赖和启动类,并无其他的东西了.
code 项目构建完了,就先启动看下有没有问题,至少保证搭建是ok的. 如果启动没问题的话,那么我们就可以肆无忌惮的去阅读其源码了.
在配置文件中加上打印log的级别和包,这样可以更好的看到源码里面打印的更多的log.
logging: level: com.netflix: DEBUG
初次启动,就可以看下log的输出, ...
记录奇怪的SQL
😀 这里写文章的前言:记录不同篇章数据库的一些奇怪操作的SQL语句;会持续的记录
📝 MySql篇章去重排序后的SQL简单的一个明细表
CREATE TABLE `t_directory_browse_detail_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', `user_id` bigint(20) DEFAULT NULL COMMENT '用户id', `dept_id` bigint(20) DEFAULT NULL COMMENT '租户id', `type_id` bigint(20) DEFAULT NULL COMMENT '类型id', `type_number` varchar(50) DEFAULT NULL COMMENT '类型对应的number编码', `type_value` varchar(32) DEFAULT NULL COMMENT '类型 ...
SonarQube安装使用手册(docker版)
😀 这里写文章的前言:SonarQube代码质量检测的工具,对代码进行一定规则的校验等等,算是代码层面的质量和规范 基于docker来进行安装
📝 基于docker安装组件版本
MySql: 5.7
SonarQube: 7.8-community
启动过程MySql初始化创建一个sonar的数据库(编码最好是utf-8,避免中文相关的乱码问题)
名字也可以自己来取
docker拉镜像配置如果你拉取镜像存在问题的话,配置一下加速的地址来拉取,避免一直卡顿等问题
"registry-mirrors": [ "https://0dj0t5fb.mirror.aliyuncs.com", "https://docker.mirrors.ustc.edu.cn", "h ...





