自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (3)
  • 收藏
  • 关注

原创 深入理解 JVM——谈谈TLAB

最近疫情很严重啊,大家尽量别出门戴好口罩保护好自己哈。在家翻翻深入理解 Java 虚拟机这本神书,有这样一段话:“对象的内存分配,往大方面讲,就是在堆上分配(但也可能经过 JIT 编译后被拆散为标量类型并间接地在栈上分配),对象主要分给在新生代的 Eden 区上,如果启动了本地线程分配缓冲,将按线程优先在 TLAB 上分配,少数情况下也可能会直接分配在老年代中…”那么什么是 TLAB 呢?这玩意...

2020-02-02 12:01:48 906

原创 深入理解 JVM——虚拟机类加载机制

类的生命周期是怎样的?加载->验证->准备->解析->初始化->使用->卸载 (为了支持 Java 语言的运行时绑定 动态绑定,解析可在初始化后完成。)什么是类加载?把 .class 文件加载到内存,对其校验,转换,解析,初始化,最终形成可被虚拟机直接使用的 Java 类型的过程。类加载的具体过程是怎样的?加载:通过类的全限定名获取二进制字节流。将...

2020-01-31 22:05:56 201

原创 Java8的 merge() 骚操作

今天下班路上听一个妈妈问她儿子这么晚才出校门,孩子委屈极了,说在帮助老师统计全班同学的月考总分。如果是我拿到一个包含学生姓名和学生各科成绩list 的list,应该怎样快速而又简洁地求出每个学生对应的总成绩呢?查了下,原来 Java8 的 merge() 可以实现类似场景。记录一下~package dream_2020.java8.lambda.merge;import com.faster...

2019-11-27 21:41:03 2186

原创 一个简单的业务重试方案[EventBus+Executor+AOP]

对于系统中出现的异常,有的需要告警出来,譬如参数校验不通过,写操作因为幂等的原因失败;有的则需要进行业务重试,譬如 rpc 调用超时。如何设计一个优良的重试机制呢?个人认为应当具备下面几点。侵入性小:实现重试的代码逻辑与现有的业务逻辑应尽可能地分离,所谓不侵入,少耦合,重试逻辑与正常逻辑解耦。动态配置:重试的最大次数、重试的间隔时间、是否采用线程池进行重试、是否异步重试等,可在项目正常运行...

2019-11-27 20:55:34 825

原创 Some typical SQL in our daily coding.

数据库的表设计中经常会有使用json存储的大字段,经常会有模糊匹配大字段的需求,在 mapper.xml 文件中如何进行模糊匹配呢。记录一下:<if test="feeType != null and feeType !=''"> and fee_extension like (CONCAT(CONCAT('%"feeType ":', #{feeType, jdbcTy...

2019-11-26 20:20:01 162

原创 读书笔记——Kafka核心技术与实战(生产者压缩算法小结)

压缩:Conpression用时间去换取空间的经典 trade-off 思想,用 CPU 时间换磁盘空间或网络 IO 传输量,用较少的 CPU 开销带来更少的磁盘占用或 IO 传输。Kafka 的消息层次消息集合 message set 和 消息 message,一个消息集合包含多个日志项 record item。日志项才是真正封账消息的地方, Kafka 通常会在消息集合层面进行写入...

2019-08-25 16:38:38 182

原创 读书笔记——Kafka核心技术与实战(生产者分区机制原理)

为什么分区?分区作用是提供负载均衡的能力,对数据分区是为了实现系统的高伸缩性 (High Scalability).不同的分区可放置在不同节点的机器上(同一个分区的副本可以分布在不同的机器上),数据的访问操作都是针对分区这个粒度进行的,这样每个节点的机器都独立执行各自分区的读写请求;增加新的节点机器来增加整理的吞吐量;分区策略是什么?有哪些?分区策略是指决定生产者将消息发送到哪...

2019-08-25 16:15:23 219

原创 读书笔记——Kafka核心技术与实战(生产环境的 Kafka 集群方案需考虑的因素)

既然是集群,必定涉及到多Kafka节点机器,单台机器构成的伪集群只能在日常测试中使用,无法满足线上实际需求。考虑因素:操作系统磁盘磁盘容量带宽操作系统IO 模型的使用:Kafka 底层使用 Java 的 selector,selector 在 Linux 的实现机制是 epoll,在 Windows 的实现机制是 select,因此在这点上 Kafka 部署在 Linux 有优势...

2019-08-24 16:34:57 264

原创 关于消息队列的一些思考

在一个事务中,A系统使用rpc调用了B系统的service,在本地调试时经常会出现rpc调用超时的问题,将会导致整个事务的回滚,况且随着业务量的增大,调用rpc的次数也会急剧增加。组内大佬一排砖头决定:将rpc调用改成消息队列MQ的方式,A系统成功将请求发送给MQ后便会继续执行后续操作。作为组内十万个为什么的我就会思考:为什么会使用消息队列呢?使用了消息队列会带来什么好处呢?它会有什么缺点...

2019-06-16 08:43:06 266

原创 读书笔记——Kafka核心技术与实战(Kafka入门)

一.消息引擎系统ABC一款消息引擎系统,传说中的消息中间件传输的对象是消息;如何进行消息的传输是消息引擎设计机制的一部分传输协议:点对点;发布订阅;消息从A到B之间之所以需要一个消息引擎——“削峰填谷”秒杀系统:将瞬间增加的订单流量以消息形式保存在对应的主题中,一不影响上游的TPS,二给予下游较多的时间消费消息;...

2019-06-04 12:50:47 972

原创 Daily-Notes-June

20190603函数式编程 一切皆是表达式。命令式编程 是 告诉程序怎么做函数式编程 是 告诉程序做什么防止又臭又长的代码:Optional.of(user).map(User::getAddress).map(Address::getCountry).map(Country::getIsoCode).orElse(null);https://segmentfault.com/a/1...

2019-06-03 18:43:01 192

原创 Daily-Notes-May

Mybatis$的sql注入问题,#可以防止;

2019-05-16 19:52:40 676

原创 Why override hashCode() & equals()?

有这样一个场景:在一个长为n的线性序列中查找某一个数值A,不得不从头到尾遍历,此时的平均查找次数是n/2;但如果将n个数据存放在Hash表中,其平均查找次数接近于1,代价大大地减小。因为在Hash表的存储中,存放其中的数据和其存储位置是存在某种Hash函数关联的。背景方便起见,我们假设数据A的Hash函数为A*A%5,而我们设置的Hash表的initialSize是8,如果我们把6和7放入其中...

2019-04-23 21:57:14 527

原创 读书笔记——深入理解Java虚拟机之Java 运行时数据区域

谈谈对 Java 运行时数据区域 有何理解概述:JVM在执行 Java 时会将其所管理的内存划分为若干个不同的数据区域。各区域有各自的用途,创建和销毁的时间,有的随着jvm的启动而存在,有的根据用户线程的启停而创建或销毁。划分:程序计数器-Program Counter Register概念:当前线程所执行的字节码的行号指示器。线程私有。作用:字节码解释器工作时通过改变...

2019-04-06 22:36:21 163

原创 由AOP引发的几点思考

毕业面试那会儿,被问最多的问题便是:请你解释一下什么是AOP思想。当时最喜欢的回答方式是先将英文全称给呈现出来“威慑”下面试官,即——Aspect Oriented Programming。然后把网上搜集的各种解释,使用场景理直气壮地背一遍。这样的回答能唬住一些对应届生要求不高的面试官,但真遇上爱刨根问底的大佬就该GG了。最近在项目中用到了AOP,想把几个思考点总结一下。在讲AOP之前,首先先回...

2019-03-31 16:54:28 230

原创 谈谈项目中的日志

参与工作也有大半年的时间了,在日常的项目开发中,感触很深的是——日志对于系统的重要性。本科那会儿做项目,最喜用System.out.println、System.err.println以及一场对象的printStrackTrace来显示相关信息。当项目日益庞大,如果仍然采用控制台输出,恐怕控制台都要炸了。这样的输出根本用不了日后的日志分析。试想,当你的系统崩溃的时候,若是没有任何的日志支持,该是...

2019-03-24 21:43:33 4426

原创 浅析Java中的深克隆和浅克隆

说实话,目前为止还没在项目中遇到过关于Java深克隆和浅克隆的场景。今天手抖戳开了花呗账单,双十二败家的战绩真是惨不忍睹,若能在我的客户端“篡改”下账单金额,那该(简)有(止)多(做)好(梦)啊!于是乎,有了以下的设想。采用工厂模式,根据所传入的帐户名accountName 得到账单bill返回客户端client,代码实现如下:账单类Bill/** * @Author: mollychi...

2019-01-02 13:08:26 2097

原创 谈谈设计模式——以手动实现单例模式和Spring中使用到的设计模式为例

设计模式也算是面试高频考点,理解典型的设计模式,有利于我们提高沟通、设计的效率和质量,在某种程度上也代表了一些特定情况的最佳实践。 设计模式的分类 大致上按照应用目标进行分类,可分为创建型模式、结构型模式、行为型模式。创建型模式:对对象创建过程中的各类问题和解决方案的总结,包含工厂模式、单例模式、构建器模式、原型模式。结构型模式:针对软件设计结构的总结,关于类、对象继承、组合方式的实践...

2018-06-05 18:21:02 442

原创 Java中String类的温故知新

Java中主要用以处理字符串的类是String,StringBuffer和StringBuilder。也是面试中的常见考点,一块来温故而知新吧~String常见用法 String str1 = "I love China."; String str2 = new String("I love China."); String str3 = "I lov...

2018-06-04 19:35:41 261

原创 写在五月末

该怎么记录这个充满离别和选择的五月呢?拥别了大学里的室友,朋友,听着《凤凰花开的日子》,看着列车外不复重现的风景,离开了回忆满满的大学,送别了我最美好的四年锦时,踏上了“社会人”的征途。五月总结别了,我的大学毕设 本专业 由于被抽到盲审,定稿早已在四月份完成,回校的主要任务是调格式,完善响应文档以及答辩,感谢易老师的悉心指导,很不错的一个老师。感恩!二专 ...

2018-05-31 22:52:44 280

原创 堆的应用之——求前K最大值和求中值

今天和大家一块学习下面试中常见的两个关于堆的面试题,第一:求K个最大值;第二:求中值元素。算法和数据结构算是笔者的死穴了。 一、求前K个最大的值 首先能想到的是使用Arrays.sort()进行排序后取前K个值即可,效率是O(N*log2^N)。 其次可以进行循环选择K次,每次都从剩下的数据中选择最大值,效率是O(N*K)。但若K值大于log2^(N),其效率还不如完全排序。 ...

2018-05-28 22:34:25 1292

原创 数据库相关面试笔记

一、数据库主键和外键作用 主键作用:能保证设置主键的列非空且唯一.另外,在定义主键时,如果这列之前没有索引,系统会为其创建唯一性索引 。 外键作用:能保证设置外键的列取值必须匹配父表中已有的值.通过外键可以与同一张表的列建立引用关系,也可以与不同表的列建立引用关系。外键可以有重复值,也可以为空值。二.索引的优点和缺点是什么? 索引的优点如下: 1.通过创建唯一性索引,可以保证数据库表...

2018-05-25 11:41:57 355

转载 HashMap桶中链表转红黑树为什么选择数字8?

在JDK8及以后的版本中,HashMap引入了红黑树结构,其底层的数据结构变成了数组+链表或数组+红黑树。添加元素时,若桶中链表个数超过8,链表会转换成红黑树。 翻了一下HashMap的源码,发现其源码中有这样一段注释:Because TreeNodes are about twice the size of regular nodes, we use them only when bins ...

2018-05-24 22:34:13 12578 8

原创 计网学习笔记——ipconfig的理解

ip地址是网卡在网络世界里的通讯地址相当于现实世界的门牌号码。有时候电脑弹出网络地址的冲突,上不去网的情况多半是ip地址冲突了。查看ip地址的方式有以下两种:windows上: 1. ipconfiglinux上: 1.ifconfig 2.ip addr本来 32 位的 IP 地址就不够,还被分成了 5 类。下面展示A、B、C类地址锁包含的主机数量。...

2018-05-24 21:38:13 1413

原创 2018拜拜了四月以及我想要的五月

日子总是向前走,潇潇洒洒不回头。每到人生的一个转折点,便会感到时间的匆匆。对于即将毕业的我来说,更是如此。可能还是对未来的路有点踌躇吧。没计划中那么深入学习技术,也没怎么学习英文,惭愧啊。四月总结实习 项目重构ddl为本月末,完成了自己负责的部分,考虑到接下来会离开准备论文,项目代码,接口文档,流程图等交接相关文档也提前上传。学习 技术 重温了1遍《深入理解JVM》部分章节,包含...

2018-05-02 16:17:40 312 1

原创 Spring boot 项目热部署学习笔记

Spring boot 项目热部署场景本地调试线上发布思考 一些网站或服务,全年不间断运行,即使重新发布程序后也不需要重启服务是怎么做到的呢?优点本地和线上都适用无需重启服务器 提高开发和调试效率提高发布运维效率Java热部署和热加载的联系部署方式 热部署在服务器运行时重新部署项目热加载只加载修改后的class文件实现原理热部署直接加载整个应用热加载...

2018-05-02 15:16:35 233

原创 RESTful碎碎笔记

RESTful各论坛对于RESTful架构风格的博文有不少,学习过后记录下一些小笔记~本质:一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。核心: 面向资源 万物抽象为资源每一种资源都有唯一标识所有的操作无状态解决问题:降低开发的复杂性提高系统的可伸缩性...

2018-04-29 21:14:17 162

原创 HashMap学习笔记

HashMap学习笔记今天来学习面试以及平时工作学习中常用到的一个类HashMap。概述:什么是HashMap常见操作(get和put)的工作原理Hash函数的实现Resize是什么一、什么是HashMap官方描述: 关键信息:基于Map、和HashTable类似但HashMap不能保证线程安全且允许键值对为null、不保证有序(个人觉得所谓的序是指“...

2018-04-17 16:14:53 232 1

原创 二叉树的三种遍历还不清楚?赶紧上车吧。

本文将从代码实现的视角和大家一块学习二叉树的前序、中序以及后续遍历,还没整明白的盆友们赶紧上车吧。打开你的IDEA,新建一个类BinarySearchTree,为什么要&lt;T extends Comparable&lt;? extends T&gt;&gt;呢?:package com.mollychin.tree;/** * Created by Mollychin on ...

2018-04-15 15:24:07 278

翻译 学习笔记——JVM,JDK,JRE&OpenJDK之间的差异

本文翻译自What is the difference between JVM, JDK, JRE &amp; OpenJDK?,如有不恰当之处,欢迎留言指出。观点一: - JVM:Java虚拟机用以运行Java二进制代码,它不认识Java的源代码,所以咱必须将*.java文件编译得到 *.class字节码文件,*.class文件中包含的二进制代码可以被JVM所理解。这也使得Java...

2018-04-14 18:10:42 3592

原创 2018年三月总结与四月展望

二月底离开浙江,辗转南昌到上海,时间过得很快,又是一个月。作为一个即将离校的毕业生,有时候真会迷茫,想记录点关于实习、学习以及生活上的点滴来反省自我、探索更好的学习方法、生活方式以更好地成长。就按照时间流来吧。三月总结3月1号—3月17号难能可贵的在校时间,很是羡慕学弟学妹们还能翘课,参加社团活动,在图书馆静静地看书,在健康小道谈谈恋爱的小时光,在他们眼里,毕业仿佛是个遥不可及的日...

2018-03-31 20:05:40 1489 2

原创 IDEA中添加Google CheckStyle 完美指南

所谓“一千个读者就有一千个哈姆雷特”,不同的程序员,有着截然不同的代码风格。譬如抛出使用空格键还是TAB键的问题,就足以让程序员演化成风格迥异的不同色系。但在真正的产品开发中,如何写出高质量、易维护、强可读的代码尤为重要,这就需要一个普遍认可的编码规范,今天就和大家一块学习如何在IDEA中添加Google CheckStyle来保证项目代码的和谐一致。一.在IntelliJ IDE...

2018-03-05 11:31:58 26440

原创 深入理解JVM——垃圾回收算法

一、标记—清除算法介绍 最基础的收集算法涉及“标记”和“清除”:首先标记所需回收的对象,一并清除。特征 效率不高空间问题:结束后产生大量不连续的内存碎片,导致后续分配大内存对象时不得不提前触发垃圾收集操作。 二、复制算法1.介绍内存均分成两块,但只使用其中一块,这块用完了就将还存在的对象复制到第二块中,一次性清除使用过的内存空间。无需考虑内存碎片问题2...

2018-03-05 09:48:35 246

原创 Code Style Guide之正交设计浅析

前提:模块化设计为什么需要模块化设计?理论上可以只使用一个函数完成全部功能,但是太过复杂,超过人的掌控极限。因此必须要划分开,对问题进行分解。(面向过程-&gt;面向对象)模块化设计遇到的两个问题如何划分模块?模块之间如何连接?软件设计为何要做软件设计?软件设计是为了让软件在长期范围内容易应对变化。即:尽量降低变化对软件的影响。否则维护成本太大。HOW?...

2018-03-04 21:22:31 470

原创 Coding Style Guide 之软件设计原则初探

软件设计原则面向接口编程,而不是面向实现。接口是稳定的,而实现是多样的。命令-查询分离原则: 当一个方法返回一个值来回应一个问题的时候,它就具有查询的性质;当一个方法要改变对象的状态的时候,它就具有命令的性质。查询不会改变对象的状态,命令会改变对象的状态,因此查询操作是安全的、性能好的。 举例:读写分离。You Ain’t Gonna Need It:意思是不要过度设计。过度设计会提...

2018-03-04 21:17:24 410

原创 Coding Style guide之如何写出优质代码

实习所在公司虽是一个小型创业公司,但是技术栈很新并且特别注重开发规范,每周都会有几次组织学习的机会。现将学习笔记记录如下,大家一块学习讨论~优质代码十个突破口DRY短小的方法(易阅读、易重用、易测试)。短小的标准:尽量控制在20行之内,嵌套层次不要太深,一屏可以全部显示,最好不要超过50行。命名 举例:int a;int avg;final int a = 7;fin...

2018-03-04 21:11:37 293

原创 在SSM下使用POI解析Excel数据并实现批量导入到数据库

暑假实习期间,作为一名Java后台开发的小白实习生,项目组老大分发给我的一项任务就是实现在SSM下实现Excel数据的导入/导出,咱总不能手动Ctrl+C/Ctrl+V实现吧hhh,于是经过查阅资料,发现Apache的一个子项目POI可以帮助解析Office文档并实现需求。分享如下:Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Of...

2018-03-04 20:58:21 3772 6

原创 Java8新特性——Lambda表达式应用场景

之前在学习Java8的新特性时,十分喜欢Lambda的简洁性,而真正地用以解决项目中的技术点时,更为之惊叹不已。现在有这样的需求:从由Project这个类组成的List中取出id和name组成对应的键值对。 有下面这样的实体类,简洁起见,将多余的字段和注解以及类的继承关系去除。import java.util.Date;/** * Created by Mollychin ...

2018-03-04 20:55:47 5031 1

原创 深入理解JVM——volatile in Java

第一次面试时,interviewer问“你对volatile了解多少?”由于interviewer的发音(英:[ˈvɒlətaɪl]))有些不准,笔者很傻地问了好几遍“您说什么?”,然后…直接GG了。volatile是JVM提供的最轻量级的同步机制,作为应届生面试中常见的关键字考察点,一块来学习下吧~Java内存模型volatile语义: 可见性禁止重排序无法保证一致性应用场景...

2018-03-03 10:50:57 632

原创 深入理解JVM——Java运行时数据区域浅析

JVM在运行时将其内存区域划分为不同的区域,各区域承担的职责和生命周期不尽相同,有的随着JVM进程的存在(消亡)而存在(消亡),而有些则是线程私有的,生命周期与其所在线程一致。和笔者一块学习一下吧~方法区(Method Area)Java堆(Heap)虚拟机栈(VM Stack)本地方法栈(Native Method Stack)程序计数器(PCR)方法区(别名:Non-H...

2018-03-02 10:49:55 251

Java 并发编程学习笔记

Java 并发编程学习笔记,适合Java学习者进行并发处理学习

2017-09-30

阿里巴巴Java开发手册

阿里巴巴 Java 开发手册

2017-09-30

23设计模式汇集

23种设计模式,供给广大开发者小伙伴参阅,一块成长,一块进步!

2017-09-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除