- 博客(31)
- 收藏
- 关注
原创 lombok符号找不到
lombok之前用的好好的,突然一次编译后就出现符号找不到的报错了,显然是lombok编译生成的字节码有问题呗。先贴下我的idea版本:网上去搜的话也有很多解决方案:1.idea启用注解处理:Enable annotation processing我这个版本的idea就是直接启用的,没效果2.java版本问题,高版本(11、14)的java版本好像会有问题,但我还是用的java8的,排除掉。3.idea插件没安装我之前运行是正常的,显然不是这种问题4.lomb..
2021-10-01 14:46:55 6265 4
原创 随便说下面试技巧
已陆续拿到各大厂 offer,目前就职京东零售。简述下面试官一面基本都问的比较广,java 相关的,jvm,集合,spring 源码,各种中间件,aqs,锁机制,常用的都会问到,剩下就是查缺补漏的过程,比如 linux 查看调优等,有针对性的准备提升,不要怕面不过,如果不是很牛逼的大佬,也不要指望一次就过,留给自己犯错的机会,隔一段时间学习提升之后再面一面就行。二面三面就侧重项目点了,平时一定注意分析项目中的难点和可优化的点,每周那么多开发内容,提出一两个优化小点,时间久了就有真的派的上用场的提升了,如
2021-09-21 09:59:17 129
原创 kafka读书笔记-消费者-多线程实现及消费者参数配置
KafkaProducer是线程安全的,可以多线程共用一个实例,而KafkaConsumer是非线程安全的,这点我对比了下KafkaProducer和KafkaConsumer中的成员变量。KafkaConsumer非线程安全的原因应该在于下面这个成员变量:private boolean cachedSubscriptionHashAllFetchPositions;cachedSubscr...
2020-05-06 23:29:57 1063 1
原创 kafka读书笔记-消费者-指定位移消费seek与分区再均衡
消费者消费消息时会根据之前提交的消费位移offset去kafka拉取offset之后的消息进行消费。但是一些情况下消费者开始消费时会没有消费位移,比如一个新的消费组建立的时候,或者消费组内的一个新的消费者订阅了一个新的主题,或者__consumer_offsets主题中关于这个消费组的位移信息已经过期而被删除的时候。这时消费者开始消费的消费位移就由客户端参数auto.offset.reset来决定...
2020-05-04 16:14:41 725
原创 kafka读书笔记-消费者-offset同步提交与异步提交
消费位移(offset)是消费者消费消息时最需要关注的点了。对于kafka中的分区而言,每条消息都有一个唯一的offset,用来标示消息在分区中的位置。而对于消费者而言,offset是用来表示某个分区消费到的消息所在位置。消费者每次调用poll方法拉取消息时都会先提交上一次已经消费过的消费位移,并再次拉取消费位移之后的消息。同时为了保证重启消费者或者消费者上下线再均衡之后仍能做到继续拉取消费位移...
2020-05-03 23:47:02 1357
原创 kafka读书笔记-消费者-poll调用及返回
消费者订阅主题或者分区之后就会对主题和分区中的消息进行消费,Kafka中的消费是基于拉模式的,即客户端主动请求服务器拉取消息。与之对应的另一种常见消费模式是推模式,即服务端主动将消息推送给客户端。拉模式减少了服务端的压力,对于Kafka处理大数据量的时候能起到高效的作用。简单的消费者消费代码如下:while (true){ //拉取消息 ConsumerRecords<Stri...
2020-04-29 23:57:02 2932
原创 kafka读书笔记-消费者-消息组与消息订阅
生产者(Producer)是负责向kafka服务集群发送消息的,消费者(Consumer)则是从kafka集群拉取消息进行消费的。kafka中的消费者不是直接订阅kafka服务进行消费的,而是作为消费组(Consumer group)的一员消费消息的。消费者以消费组为单位订阅kafka指定主题(Topic)或者主题的特定分区(Partion),同一个消费组的消费者不会重复消息,假若一个组有A,B...
2020-04-25 21:45:54 995
原创 kafka笔记-生产者-2
上节是讲了kafka的生产者的使用方法。这节是了解下kafka生产者的整体脉络和记录下一些相关参数。KafkaProducer拦截器ProducerIntrceptors序列化器Serializer分区器Partitioner消息累加器RecordAccumulatorsender创建Request缓存至InFlightRequestsselector发送消息kafkaCluster上图便是消...
2020-04-24 21:03:06 147
原创 kafka读书笔记-生产者(Producer)-1
生产者(Producer)就是负责向kafka发送消息的应用程序。拿图书馆举例的话,不同的出版社(生产者producer)把图书(消息message)发送给图书馆(kafka服务),然后所有人(消费者)可以去指定图书馆浏览图书(poll拉取消息),浏览图书信息自己进行下一步归类总结之类(消费消息定制操作)。生产者对象构建时需要指定生产者连接kafka集群所需的至少一个broker地址,就是...
2020-04-23 23:18:43 209
原创 深入理解kafka读书笔记
最近在读的是深入理解kafka核心设计与实践原理。为了加深理解,巩固知识,便打算记录下读书总结日志。这本书总共分为12章。1:kafka的安装与配置及简单的使用demo,2:kafka生产者客户端讲解,3:kafka消费者客户端讲解,4:主题与分区的管理,5:日志存储相关的内容,6:kafka服务端的一些核心内容,7:kafka客户端相关的原理剖析,8:可靠性、一致性的原理分析,9:kafka相关...
2020-04-21 23:53:55 215
原创 mybatis源码个人解读
mybatis是用来做什么的?解决了什么问题?mybatis是一个orm框架,使程序员只关注sql实现即可,无需考虑具体数据库连接、sql封装查询和结果集转换等重复繁琐的流程。同时它采用了数据库连接池技术能很好得复用已创建的数据库连接。节约单独调用jdbc连接时重复创建与消亡得性能消耗。原来的数据库crud工作,需要自己通过jdbc构建连接,需要自己将查询命令封装入statement...
2020-03-07 12:04:10 140
原创 小目标之读懂sql调优—对象类型
之前读过了sql调优的前几章:整体架构、内存架构、存储架构,这节读sql调优的对象类型。数据库对象包含表、索引、视图、存储过程等类型。
2020-03-01 21:01:44 144
原创 小目标之读懂JVM—线程安全与锁优化
上一章讲了java的内存模型以及虚拟机如何实现并发的问题。这一章还是对于并发问题的讲解,也是深入理解java虚拟机的最后一节。疫情管控更为严格了,有时候整天呆在家里呆久了感觉浑身不舒适,所以下一本书打算读解硬派健身-一平米健身的书籍。这一章讲述的是java中的线程安全的问题。线程安全的问题针对的是涉及多个线程的共享变量,Java语言中操作共享的变量按照线程安全的安全程度可以分为5类:不可变、绝...
2020-02-06 20:15:54 163
原创 小目标之读懂JVM—java内存模型与线程
这一章已经到了这本书讲解的最后一部分“高效并发”的知识点了,下一章也是关于并发的知识点,讲解的是线程安全和锁优化。计算机的运算性能很强大,而相较于运算性能来说,它的存储和通信子系统速度则过慢,因此为了能最大程度的发挥计算机的运算能力,而不被其它较慢的处理所拖累,多任务处理几乎是一项必备功能了。Java语言和虚拟机提供了很多工具来简化并发开发,但了解并发内幕仍是帮助定位和解决并发问题必不可少的条件。...
2020-02-04 15:15:46 133
原创 小目标之读懂JVM—运行期优化
上一章讲了JVM的编译期优化,是指将java源码编译为字节码的过程,这章的运行期优化指的就是将字节码编译成本地机器码的过程。JVM将字节码编译成本地机器码的过程可以通过解释器和编译器去完成,解释器和编译器不是必须要共存,但是许多主流的商用虚拟机同时包含解释器和编译器。解释器是字节码执行的时候,执行到哪一句,就将对应的字节码解释成本地机器码。而编译器是指现统一将字节码编译成本地机器码,再去执行编...
2020-01-30 22:26:21 125
原创 小目标之读懂JVM—编译期优化
Java语言的编译期其实是一段不确定的操作过程,它可能是指编译器的前端把*.java文件转变成*.class文件的过程,也可能是指虚拟机后端运行期编译器(JIT编译器,Just In Time Compiler)把字节码转变成机器码的过程,还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把*.java文件编译成本地机器代码的过程。大家一般的Java编译...
2020-01-29 23:00:04 118
原创 小目标之读懂JVM—类加载及执行子系统的案例与实战
这章案例比较多,代码方面不做展示,粗略介绍下几个案例的知识。在Class文件格式和执行引擎这部分中,用户程序能直接影响的主要是字节码生成与类加载器两部分的功能。案例一:tomcat下正统的类加载结构。web服务器一般有以上几个问题:1.部署在同一服务器下的Java类库需要可以实现相互隔离、独立使用,因为可能两个不同的应用程序会依赖同一个第三方类库的不同版本。2.部署在同一服务器下的Java...
2020-01-28 22:21:23 143
原创 小目标之读懂JVM—虚拟机字节码执行引擎方法调用
方法调用不等同于方法执行,方法调用阶段的唯一任务就是确定被调用方法的版本。方法调用是程序运行时最普遍、最频繁的操作。Class文件中存储的都是方法调用的符号引用,只有在类加载期间或者到运行期间才能确定目标方法的直接引用。Java虚拟机提供了5条方法调用字节码指令。invokestatic:调用静态方法。invokespecial:调用实例构造器<init>方法、私有方法和父类方法。...
2020-01-27 21:08:33 135
原创 小目标之读懂JVM—虚拟机字节码执行引擎运行时栈帧结构
物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎是由自己实现的,可以自行指定指令集与执行引擎的结构体系。虚拟机字节码执行引擎分为运行时的栈帧结构以及方法调用过程,这节先讲述运行时的栈帧结构。栈帧是虚拟机方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。编译程序代码时,...
2020-01-26 22:50:53 118
原创 小目标之读懂JVM—虚拟机类加载机制
上一章讲述了Class文件信息存储格式,这一章讲述虚拟机如何加载Class文件。虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,就是虚拟机的类加载机制。Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,这点实现了Java中动态扩展的语言特性。类加载的生命周期包含加载、验证、准备、解析、初始化...
2020-01-25 22:00:04 93
原创 小目标之读懂JVM—类文件结构解析
类文件即Class文件是一串全是字节的文件,其中的数据都是以16进制表示的数字。Class类文件中包含了类文件的标识、对应版本号、常量池、访问标志、类和父类和接口索引集合、字段表集合、方法表集合等数据,其中字段表、方法表都涉及到了属性表的概念。下面按照顺序讲解。Class文件开头4个字节叫做魔数,值为0xCAFEBABE,即16进制的CAFEBABE,是被用来确认是否是一个符合虚拟机规范的...
2020-01-24 23:13:22 132
原创 小目标之读懂JVM—类文件结构定义
计算机只认识0和1,所有程序需编译成二进制本地机器码才可被计算机识别运行,因为操作系统与机器指令的不一致导致编译代码的不一致。各种虚拟机的出现允许大家将程序编译为与操作系统和机器指令集无关的、平台中立的格式。有力地促进了编程语言的发展。java提出过一个著名的宣传口号:“一次编写,到处运行”,Sun公司及其他虚拟机提供商发布的不同平台上运行的虚拟机都可以载入同一种平台无关的字节码,从而实现程序...
2020-01-23 21:39:21 150
原创 小目标之读懂JVM—调优案例分析与实战
这章主要是讲java虚拟机故障处理和调优的经验。按照职责划分的话更偏向于运维岗位。但开发了解下情况总是有必要的,毕竟线上排查bug总少不了开发的参与,能协助快速定位也总是好的。文中会例举一些案例进行分析。高性能硬件上的程序部署:一个15万PV/天左右的在线文档类型网站更换了硬件系统。虚拟机的运行环境由32位系统、1.5G堆内存改为64位系统、12G堆内存。结果网站经常不定期出现长时间失...
2020-01-22 11:35:32 184
原创 小目标之读懂jvm—虚拟机性能监控与故障处理工具
之前讲了虚拟机内存分配与回收技术的理论。实际运行中会出现各种各样的状况,堆栈一处、线程死锁、异常日志等问题。对于具体问题的分析依靠理论知识,再借助合适的监控分析工具就可以帮助我们快速分析数据,定位问题。jdk(java development kit)的bin目录下有很多可执行的程序,在linux下直接输入命令运行或在windows下执行.exe文件运行。常用的命令行程序包含jps、js...
2020-01-21 22:16:34 154
原创 小目标之读懂jvm—垃圾收集算法和垃圾收集器
继续读jvm第三章,之前讲了jvm中对象的死亡判定以及引用的几个分类,接下来读的是对象判定为死亡后的几种垃圾收集算法以及一些垃圾收集器。收集算法有标记-清除、复制、标记-整理、分代收集算法。标记-清除是最基础的收集算法。标记-清除会遍历内存区域,标记所有需要回收的对象,标记完之后统一回收所有被标记的对象。它有两个主要不足:1.标记和清除的效率不高2.标记清除之后会产生大量不连续的内存碎片,...
2020-01-20 22:58:30 129
原创 小目标之读懂jvm—垃圾回收时的对象死亡判定
紧接着之前的阅读进度,第三章讲述了GC(垃圾收集)算法与几种垃圾收集器以及对象创建和GC后的内存分配策略。第二章提到java内存运行区域时包含了程序计数器、虚拟机栈、本地方法栈、java堆和方法区,占用内存的主要是堆和栈,其中栈主要是与运行线程相关,所以线程运行结束,栈也随着消亡。hotspot虚拟机采用了永久代(GC的一种分代概念)去实现了方法区,所以方法区的GC效率很低。因此对于内存分配时...
2020-01-19 21:30:20 119
原创 小目标之读懂sql调优—orcale存储架构
orcale存储架构是指oracle如何组织、分配、管理和使用磁盘文件的存储空间。oracle读写和存储相关的概念分为块(block)、区间(extent)、段(segment)、表空间(tablespace)。block是oracle数据库读写的最小单位,块大小是操作系统层面块的整数倍,大小为2KB、4KB、8KB、16KB、32KB等,块存完一份数据后剩余的空间为块自由空间(free...
2020-01-18 18:53:13 121
原创 小目标之读懂sql调优—oracle整体架构、内存架构
本来晚上打算接着读jvm来着,但是发现这本书忘在公司了,就从家里拿了另一本《高性能sql调优精要》的书籍来读了,这本书本来也在待读范围内,毕竟面试时关于数据库的问题也是身为java程序员不能回避的话题,今天和明天就先做这本书的解读,待后天上班时再接着读jvm。这本书主要以orcale数据库为例,去解析了数据库的理论,解析了数据库的概念。第一章讲了数据库的整体架构,实例和数据库是不同的两个事...
2020-01-17 23:00:28 117
原创 小目标之读懂jvm—java发展、堆、栈、方法区
这一阶段打算读几本书,主要针对我目前的定位和规划来说来选择读书,然后思考并输出内容,不知道将来如何和感觉焦虑不安时,沉下心做事就完事了。 先读java程序员必备书籍,深入了解jvm虚拟机,做了有一阵的程序员了,反过头来总得打实基础才方便工作和规划上的游刃有余吧。这本书第一部分讲的是java的发展历程,java有过各个平台下产品,小内存设备的java card,手机终端的java ME,桌面应用...
2020-01-16 22:36:17 81
原创 springboot2.2.x单元测试和集成测试
springboot2.2.x的单元测试demo:import org.junit.jupiter.api.*;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestpublic class DemoTest { @BeforeAll public static void b...
2019-12-30 13:28:05 1844
原创 Kryo 序列化与反序列化一些问题
公司其他组有个公共的maven依赖包中的序列化与反序列化采用了kryo,所以我在新代码中也测试了下kryo,测试的时候有几个问题记录如下: 1.kryo反序列化时是通过反射默认调用类的无参构造函数,如果类或者类的对象属性没有无参构造构造函数,则会抛出反序列化失败的异常,解决方法可以写一个继承kryo类的子类,重新实现通过反射去获取实例的方法,参考博客:https://vyloy.iteye....
2019-03-27 13:24:24 3015
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人