自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 JVM 学习JVM的第一步

做为一名java程序猿,想要深入java,实现摆脱业务的目标,JVM是门必修课,也是块敲门砖。JVM的理论知识非常抽象且枯燥,很多人还没入门就放弃了。因此笔者推荐从以下三个点作为入口,使用工具,直观地去了解JVM:学会查看JVM字节码指令学会查看JVM运行时数据区变化学会查看.class文件在JVM中的存在形式查看JVM字节码指令:IDEA插件jclasslib菜单栏 -> File -> Settings -> Plugins 搜索jclasslib,安装完成后重启IDE

2021-02-20 10:16:00 185 3

原创 docker运行python项目

随便加一个试试能不能下载依赖包。

2024-05-29 17:01:22 420 3

原创 设计模式 中介者模式

中介者模式定义Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly,and it lets you vary their interaction independently.(用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从

2021-11-15 17:43:35 266

原创 设计模式 建造者模式

建造者模式定义Separate the construction of a complex object from its representation so that the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。)建造者模式成员抽象产品类 & 产品类public abstract class AbstractProduct {

2021-11-01 10:27:49 143

原创 设计模式 模板方法模式

模板方法模式定义Define the skeleton of an algorithm in an operation,deferring some steps to subclasses.Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.(定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可

2021-10-29 11:19:39 143

原创 设计模式 抽象工厂模式

抽象工厂模式定义Provide an interface for creating families of related or dependent objects without specifying their concrete classes.(为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。)抽象工厂模式成员抽象工厂模式优点抽象工厂模式缺点抽象工厂模式扩展...

2021-10-26 15:16:37 112

原创 设计模式 工厂模式

工厂模式定义Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。)工厂模式优点工厂模式缺点成员DEMO...

2021-10-20 16:54:45 54

原创 设计模式 目录

单一职责原则:有且仅有一个原因引起类的变更。里氏替换原则:只要父类能出现的地方子类就可以出现。依赖倒置原则:模块间的依赖通过抽象发生。

2021-10-14 14:39:41 53

原创 Redis 使用场景

STRING缓存SET key valueGET key分布式锁SETNX key trueDEL keyRedis 分布式锁计数器INCR keyGET key分布式命名服务INCRBY key numHASH对象存储HSET key field1 value1GET key field1HMSET key field1 value1 field2 value2 field3 value3HMGET key field1 field2 field3购物车key =

2021-06-01 16:05:01 76

原创 Redis 发布订阅

dependency <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.0</version> </dependency>class Constantpublic class

2021-05-28 14:43:40 60

原创 Redis 接口限流

dependency <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.0</version> </dependency>class Constantpublic class

2021-05-27 14:41:45 87

原创 Redis 延时队列

dependency <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.0</version> </dependency>class Constantpublic class

2021-05-27 11:12:33 117

原创 Redis 分布式锁

依赖项 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.0</version> </dependency>codeimport com.google.common.colle

2021-05-26 16:27:43 74

原创 Redis Redis API

通用APIdel key// 删除keyexpire key num// 设置key的过期时间,单位秒exists key// 判断key是否存在,存在返回1,不存在返回0字符串对象set key value// 保存/修改键值对,如key已设置过期时间,更新后过期时间会失效get key// 获取键值对,不存在返回nilmset key1 value1 key2 value2 key3 value3// 批量保存/修改键值对mget key1 key2 key3// 批量获取键值对,不存

2021-05-26 13:20:28 75

原创 随笔 两个int类型变量交换值

方案一:不使用第三个变量 public static void main(String[] args) { a ^= b; b ^= a; a ^= b; }方案二:使用第三个变量 public static void main(String[] args) { int a = 10000; int b = 20000; int temp = a; a = b;

2021-05-13 18:54:57 215

原创 随笔 与运算符、或运算符、异运算符

&= 与运算符a &= b; 等同于 a = a & b;有0为0,否则为1。0 & 0 = 0;1 & 1 = 1;1 & 0 = 0;|= 或运算符a |= b; 等同于 a = a | b;有1为1,否则为0。0 & 0 = 0;1 & 1 = 1;1 & 0 = 1;^= 异运算符a ^= b; 等同于 a = a ^ b;相同为0,不同为1。0 & 0 = 0;1 & 1 = 0

2021-04-15 10:11:36 1182

原创 JVM 运行时数据区

JDK版本:8基础知识"class文件"、“class content”、“Class对象”、"对象"的含义class文件:存储在磁盘上的.class文件(十六进制字节码文件)class content:类加载器加载class文件,存储在内存中的字节流,此时未解析Class对象:InstanceMirrorKlass类型实例对象:new出来的实例、newInstance得到的实例JDK1.8为什么用元空间取代永久代GC算法区分引用类型对象和类的元信息对象更方便避免动态代理使用不当造成OO

2021-03-18 16:47:48 212

原创 JVM 字符串常量池

JDK版本:8"常量池"有哪些class文件中的常量池运行时常量池字符串常量池class文件的常量池存储在磁盘上,class文件的Constant Pool,通过javap -verbose可以查看,静态的运行时常量池存储在instanceKlass实例(元空间),通过HSDB可以查看,动态的字符串常量池存储在虚拟机堆,StringTable(c++类,底层是HashTable),动态的c++的InstanceKlass对应java的InstanceOopDescc++的Type

2021-03-18 16:00:23 224 1

原创 JVM 分析.class文件

JDK版本:8基础知识java应用程序运行原理.java文件通过编译器编译,生成.class文件(字节码文件).class文件通过类加载器子系统加载,在元空间生成类的元信息类的元信息通过类加载器子系统验证、准备、解析、初始化,在JVM堆生成Class对象Class对象通过执行引擎执行大端与小端概念(摘自百度百科)大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这

2021-02-24 17:14:49 169 3

原创 JVM 类加载器子系统

JDK版本:8Class和Klass的区别Class:java类,java代码Klass:java类在JVM中的存储形式,c++代码有哪些常量池class文件的常量池(通过javap -verbose可以查看)运行时常量池(通过HSDB可以查看)字符串常量池(StringTable:c++类)类的加载过程加载阶段加载步骤类加载器子系统通过类的全限定名找到.class文件(渠道有很多种,如jar包、网络、动态生成、加密文件等,总之拿到.class文件)创建InstanceKlass类

2021-02-22 16:12:56 199

原创 JVM JVM常用参数及推荐方案

JVM参数-Xmx 最大堆内存-Xms 最小堆内存-Xmn 新生代内存-XX:MaxMetaspaceSize 最大元空间内存-XX:MetaspaceSize 初始元空间内存-XX:+UseConcMarkSweepGC 使用CMS垃圾回收器-XX:+UseCMSInitiatingOccupancyOnly 开启使用回收阈值-XX:CMSInitiatingOccupancyFraction=70 指定回收阈值70%-XX:+ExplicitGCInvo

2021-02-19 16:36:45 608

原创 spring 编译spring5源码 2020-08-22

场景近日回顾了下自己写的spring相关的博客,感觉深度不够,而且自己理解的部分比较少,所以打算重拾spring,希望能输出些有价值的东西吧。工作日沉浸在CRUD的海洋中,肯定是没时间,那只好牺牲自己的休息时间了。。之前编译过好几次,都没遇到什么大问题,这次有点坑,所以以此博客为输出,希望大家能少走弯路,不喜勿喷。正常流程笔者环境:jdk1.8 + gradle-6.6 + IntelliJ IDEA2018.3.6git拉源码直接clone github准备一个github账号和一个gi

2020-08-23 01:21:07 370 1

原创 spring 对于注入的理解

"注入"的概念本文讨论的"注入",指的是spring给Bean注入属性(也可以称之为"装配"),并非其他注入。spring要给Bean注入属性,有两种方式:如果程序员手动提供配置信息给spring,则是如果依赖配置信息,我们需要手动配置,故称为手动注入;如果不依赖配置信息,spring根据注入模型进行注入,故称为自动注入。其实注入的动作都是spring内部完成的,手动和自动区别在于是否有手动提供配置信息给spring。xml风格手动配置// 创建一个X类,一个Y类,X类包含一个属性,类型是Y

2020-06-09 21:53:51 1310

原创 随笔 数据库敏感数据加密存储

场景应公司安全部门要求,需要对数据库敏感数据进行加密存储(第一期只包含证件号&手机号)。由于这是一个技改类需求,与业务无关,我们考虑用自定义注解+aop来做(orm用mybatis,aop选用Aspectj)。这样做对业务代码没有侵入,并且后期扩展非常方便。codeNeedEncryption@Retention(RetentionPolicy.RUNTIME)@Target(...

2020-05-08 17:20:01 2305

原创 随笔 统计用户每天使用时长

场景有这么个业务需求,要统计用户每天使用app的时长(后台运行也算)。经过讨论决定把打开app、并且为登陆状态的时间作为开始时间;把关闭、崩溃、强杀进程或者登出的时间作为结束时间,由客户端统计,发送给服务端进行计算。计算时间差的方式有很多,但找了半天没有合适这个场景的,于是就自己写了一下,如有其他方式欢迎大家留言。codepublic class Application { pr...

2020-03-20 13:09:46 1355 1

原创 Java基础 sync+long、Atomic、LongAdder性能比较

import java.util.concurrent.atomic.AtomicLong;import java.util.concurrent.atomic.LongAdder;public class SyncVsAtomicVsLongAdder { private static long count1 = 0; private static AtomicLong c...

2020-03-01 15:35:50 302

原创 设计模式 单例模式

饿汉式是否懒加载:否是否线程安全:是// 饿汉式单例模式public class HungryManSingletonMode { private static final HungryManSingletonMode INSTANCE = new HungryManSingletonMode(); private HungryManSingletonMode() { ...

2020-02-29 23:51:52 87

原创 Java基础 线程 & 线程池

Java线程状态NEW新建状态:线程创建完成,调用start()方法之前。RUNNABLE运行状态:调用start()方法,线程由NEW状态进入RUNNABLE状态。RUNNABLE状态包含READY和RUNNINGREADY状态:等待CPU时间片。RUNNING状态:任务正在被CPU处理,调用yield()方法让出CPU,线程由RUNNING状态进入READY状态。BLOCKED...

2020-02-06 18:12:48 190

原创 zookeeper zookeeper原理

zookeeper原理角色划分客户端(client)服务端(server):领导者(leader,可读可写)+追随者(follower,可读)+观察者(observer,不参与任何投票,可读)leader/follower状态LOOKING:正在选举leaderLEADING:当前节点就是leaderFOLLOWING:当前节点是followerobserver状态WAITING...

2020-01-27 15:46:48 175

原创 Redis Redis原理

Redis serverredisServerredisDbRedis clientRedis初始化

2020-01-21 14:43:18 3082

原创 spring spring mvc原理

spring mvc注册Controller方式@Controllerimplements Controllerimplements HttpRequestHandler + @Component("/uri")spring mvc默认识别两种Controller一种是@Controller声明,由RequestMappingHandlerMapping处理一种是BeanName声...

2020-01-19 17:20:54 130

原创 spring 源码笔记 spring-web如何实现servlet规范

servlet 3.0 规范角色:应用方(spring) + servlet + web容器(tomcat)servlet 3.0 规范规范提供ServletContainerInitializer接口,应用方提供实现类。规范提供"根目录/resources/META-INF/services/javax.servlet.ServletContainerInitializer"路径,应用...

2020-01-17 14:20:45 461

原创 spring 零xml配置 & 内置tomcat 启动spring mvc

xml方式配置spring mvc编写web.xml;注册listener、注册servlet、注册servlet-mapping编写spring-mvc.xml执行servlet规范:在"根目录/resources/META-INF/services/"添加配置文件javax.servlet.ServletContainerInitializer自定义一个类实现spring提供的We...

2020-01-17 10:33:38 795 1

原创 spring 源码笔记 启动过程(十三) finishBeanFactoryInitialization(beanFactory)

第十三步:finishBeanFactoryInitialization(beanFactory)第一次调用Bean后置处理器:判断Bean是否需要代理第一次调用Bean后置处理器调用链resolveBeforeInstantiation:1099, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.s...

2020-01-13 14:34:14 269

原创 spring 源码笔记 两次推断构造方法

spring 推断构造方法没有显式提供构造方法:使用默认构造方法提供一个构造方法,是默认构造方法:使用该构造方法提供一个构造方法,不是默认构造方法:使用该构造方法提供多个构造方法,包含默认构造方法:使用默认构造方法提供多个构造方法,不包含默认构造方法:报错提供多个构造方法,有一个@Autowiredtrue的构造方法:使用有@Autowiredtrue的构造方法提供多个构造方法,有多...

2020-01-08 12:11:18 455

原创 spring 源码笔记 启动过程(七) invokeBeanFactoryPostProcessors(beanFactory)

如何得到一个对象创建.java文件—编译得到.class文件—JVM加载到方法区得到class对象—初始化(或反射)得到对象如何得到一个spring Bean对象创建.java文件—编译得到.class文件—JVM加载到方法区得到class对象—spring容器扫描、解析、验证得到BeanDefinition—spring容器执行Bean生命周期并put到单例池—通过context.getB...

2019-12-25 15:15:29 186

原创 spring 源码笔记 spring启动过程(概括篇)

何为spring容器理论级别解释:由多个spring组件组成的应用程序叫spring容器。代码级别解释:所有实现ApplicationContext接口的类都是spring容器。如何得到一个普通对象简单描述:.java —> class —> object详细描述:创建.java文件 —> 编译得到.class文件 —> JVM加载到方法区得到class对象 —&...

2019-12-24 18:36:37 377

原创 Java基础 代理模式 实现JDK动态代理

本文从0开始实现JDK动态代理功能,代理模式更多扩展,请参考此链接Java基础 代理模式。JDK动态代理应用JDK动态代理角色划分业务逻辑接口类:需要被代理的接口类。业务逻辑类:具体业务逻辑代码(增删改查)。代理逻辑接口类:JDK提供的InvocationHandler接口。代理逻辑类:具体业务逻辑代码(修改目标方法)。代理生成类:JDK提供的Proxy类。实体类Userpubl...

2019-12-15 21:31:53 186

原创 Java基础 代理模式

代理是一个多义词,它常出现在我们的生活中:比如品牌代理、货运代理、代理商等。代理就是起到了中介的作用,而我今天要说的代理,它是一种计算机技术的术语。代理模式角色划分目标对象:target object代理对象:proxy object静态代理场景:需要给一个功能添加日志,但没有源码继承聚合(基于接口)动态代理...

2019-12-15 21:02:12 174

原创 Redis Jedis原理 自定义Redis客户端

通常我们调用Jedis提供的API来操作Redis,本文将手写一个简单的Redis客户端,实现Jedis的set、get和incr功能。用Jedis连接NIO服务端,发送指令NIO服务端以前写过,代码就不贴了,可参考此链接Java基础 BIO & NIO 设计思想。JedisTest类package com.tbryant.jedistest;import redis.clie...

2019-12-12 16:05:34 473

空空如也

空空如也

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

TA关注的人

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