问而知
码龄11年
关注
提问 私信
  • 博客:119,634
    119,634
    总访问量
  • 120
    原创
  • 1,559,984
    排名
  • 1,175
    粉丝
  • 8
    铁粉

个人简介:向Java提问,探寻代码内含的意蕴

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:上海市
  • 加入CSDN时间: 2014-07-30
博客简介:

向代码提问

博客描述:
部分是结合网上资料整理记录在印象笔记中的,如果原创标签有问题的话,请留言,我会第一时间修改的。
查看详细资料
个人成就
  • 获得79次点赞
  • 内容获得17次评论
  • 获得154次收藏
  • 代码片获得134次分享
创作历程
  • 2篇
    2020年
  • 154篇
    2019年
成就勋章
TA的专栏
  • 《深入理解Java虚拟机》读书小册
    14篇
  • 通过UML和小DEMO学习设计模式
    10篇
  • Apollo
    1篇
  • MyBatis源码解析
    1篇
  • Java常识
    13篇
  • Java常用类库
    9篇
  • Java虚拟机
    20篇
  • 《深入理解Java虚拟机》读书笔记
    15篇
  • Java多线程&并发
    27篇
  • JDK源码阅读&翻译&总结
    1篇
  • 《Oracle JDK Guide》翻译与学习
  • MySQL数据库
    16篇
  • 计算机网络
    10篇
  • 计算机操作系统
    3篇
  • 算法基础
    8篇
  • 剑指offer题解
    15篇
  • 常用设计模式
    14篇
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Apollo搭建踩过的那些坑

环境:阿里云 CentOSJava 8Apollo 1.1问题一Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class com.ctrip.framework.apollo.tracer.Tracer at com.ctrip.framework.a...
原创
发布博客 2020.03.04 ·
16044 阅读 ·
9 点赞 ·
3 评论 ·
16 收藏

预览:Mybatis源码解析之解析器模块

主要功能1、对XPath进行封装,为MyBatis初始化时解析mybatis-config.xml配置文件以及映射配置文件提供支持2、处理动态SQL语句中的占位符提供支持目标模块源码地址https://gitee.com/bitongchong/mybatis-3/tree/feature/learningBranch/src/main/java/org/apa...
原创
发布博客 2020.01.30 ·
287 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

十五:运行时栈帧结构

栈帧( Stack frame)用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)s的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。在编译程序代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈...
原创
发布博客 2019.06.08 ·
360 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

十四:类加载的过程

加载->验证->准备->解析->初始化1.加载比如运行时计算生成,这种场景使用得最多的就是动态代理技术,在java.lang.reflect.Proxy中,就是用了ProxyGenerator.generateProxyClass来为特定接口生成形式为“*$Proxy”的代理类的二进制字节流。加载阶段与连接阶段的部分内容(如一部分字节码文件格式验...
原创
发布博客 2019.06.07 ·
215 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

十三:类加载的时机

类的生命周期:类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)解析阶段的特殊性:加载、...
原创
发布博客 2019.06.07 ·
203 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

十二:Class文件常量池

Java代码在进行Javac编译的时候,并不像C和C++那样有“连接”这一步骤,而是在虚拟机加载 Class文件的时候进行动态连接也就是说,在 Class文件中不会保存各个方法、字段的最终内存布局信息,因此这些字段、方法的符号引用不经过运行期转换的话无法得到真正的内存入口地址,也就无法直接被虚拟机使用当虚拟机运行时,需要从常量池获得对应的符号引用,再在类创建时或运行时解析、翻译到具体的...
原创
发布博客 2019.06.07 ·
237 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

十一:堆外内存导致的溢出错误

问题导入:某项目运行在内存4GB的32位Windows机器上,运行Jetty服务器,划分了1.6GBA给堆内存,但是依旧不时会抛出内存溢出异常原因:操作系统对每个进程能管理的内存是有限制的,这台服务器使用的32 位 Windows平台的限制是2GB,其中划了16GB给Java堆,而 Direct Memory内存并不算入1.6GB的堆之内,因此它最大也只能在剩余的0.4GB空...
原创
发布博客 2019.06.07 ·
359 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

九:内存分配与回收策略

1.对象优先在新生代的Eden区进行分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次 Minor GC。2.大对象直接进入老年代3.长期存活的对象将进入到老年代(虚拟机设置值,默认阈值为15)为了能够识别哪些对象存在新生代,哪些老年代,虚拟机给每个对象定义 了一个对象年龄(Age)计数器。如果对象在Eden出生并经过第一次 Min...
原创
发布博客 2019.06.07 ·
196 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

八:垃圾回收相关参数

-verbose:gc 显示gc详细信息
转载
发布博客 2019.06.07 ·
252 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

八:理解GC日志

默认垃圾收集器-XX:+UseParallelGC【-XX:+PrintCommandLineFlags -version查看】G1垃圾收集器GC日志开头的“[GC”和“[Full GC”说明了这次垃圾收集的停顿类型,而不是用来区分新生代GC还是老年代GC的。如果有“Full”,说明这次GC是发生了Stop-The-World的。后面的“4639K->4622K...
原创
发布博客 2019.06.07 ·
527 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

附:问而知

结合JDK谈谈了解的设计模式单例模式:JDK的lang包中Runtime类的getRuntime()对Runtime实例的获取就是饿汉式单例的体现抽象工厂:JDK的sql包中的Connection接口就将一个产品族的构建方法进行了统一定义工厂方法:JDK的util包中的Collection接口中的iterator()方法就是一个工厂方法,使用这个方法来返回一个由子类实现的Iterato...
原创
发布博客 2019.06.07 ·
230 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

附-七大软件设计原则

该文章部分图片来自:慕课网《java设计模式精讲 Debug 方式+内存分析》七大原则:开闭原则、依赖倒置原则、单一职责原则接口隔离原则、迪米特法则、里式替换原则、组合复用原则注:1.高层底层不是UML图中类的高低,而是指在类似于MVC架构中的Service(高),DAO(低)这种2.通过抽象构建出来的架构一般要比通过细节构建出...
原创
发布博客 2019.06.07 ·
250 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

附:单例模式的破坏

序列化对象对单例模式的破坏与恢复首先这是一个饿汉式的单例对象构建方式,一般情况下获取到的都是同一个单例对象但是当序列化写入本地再读入内存时,会重新创建一个单例对象为什么会在读入序列化后的对象时会让单例模式失效呢?这儿从readObject()方法入手进入这个方法后:private Object readObject0(boolean unshared)进入p...
原创
发布博客 2019.06.07 ·
185 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

10-命令模式(Command)

定义:将"请求"封装成对象,以便使用不同的请求命令模式解决了应用程序中对象的职责以及它们之间的通信方式(即命令者和执行者完全解耦)适用场景请求调用者和请求接收者需要解耦,使得调用者和接收者不直接交互需要抽象出等待执行的行为优点降低耦合容易扩展新命令或者一组命令缺点:命令的无限扩展会增加类的数量,提高系统实现复杂度示例DEMO&am...
原创
发布博客 2019.06.06 ·
219 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

09-观察者模式(Observer)

附:或叫监听器模式(Listener)定义:定义了对象之间的一对多依赖,让多个观察者对象同时监听某个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会 收到通知并更新适用场景:关联行为场景,建立一套触发机制优点观察者和被观察者之间建立一个抽象的耦合观察者模式支持广播通信缺点观察者之间有过多的细节依赖、提高时间消耗及程序复杂度...
原创
发布博客 2019.06.06 ·
191 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

08-策略模式(Strategy)

定义:定义了算法家族,分别封装起来,让它们之间可以互相替换, 此模式让算法的变化不会影响到使用算法的用户。可以通过策略模式清除大量的if..else。适用场景系统有很多类,而他们的区别仅仅在于他们的行为不同一个系统需要动态地在几种算法中选择一种优点:满足开闭原则避免使用多重条件转移语句提高算法的保密性和安全性:只需要知道策略类是干什么的,而不需要知...
原创
发布博客 2019.06.06 ·
189 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

07-代理模式(Proxy)

概述:控制对其它对象的访问。使用场景:保护目标对象增强目标对象优点:代理模式能将代理对象与真实被调用的目标对象分离一定程度上降低了系统的耦合度,扩展性好保护目标对象 增强目标对象缺点:代理模式会造成系统设计中类的数目增加在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢增加系统的复杂度拓展:静态代理:通过在代码中显式定义一个业务实...
原创
发布博客 2019.06.06 ·
220 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

06-装饰者模式(Decorator)

概述:为对象动态添加功能。装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是自己的,这属于它的功能,然后调用被装饰者的方法实现,从而也...
原创
发布博客 2019.06.06 ·
268 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

05-适配器模式(Adapter)

概述:把一个类接口转换成另一个用户需要的接口,使原本接口不兼容的类可以一起工作适用场景:已经存在的类,它的方法和需求不匹配时(方法结果相同或相似)不是软件设计阶段考虑的设计模式,是随着软件维护,由于 不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案优点:能提高类的透明性和复用,现有的类复用但不需要改变目标类和适配器类解耦,提高程序扩展性符合开闭原则缺...
原创
发布博客 2019.06.06 ·
170 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏

04-原型模式(Prototype)

概述:使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象不需要知道任何创建的细节,不调用构造函数适用场景:类初始化消耗较多资源new产生的一个对象需要非常繁琐的过程(数据准备、访问权 限等 构造函数比较复杂循环体中生产大量对象时优点:原型模式性能比直接new-个对象性能高简化创建过程缺点:必须配备克隆方法对克隆复杂对象或对克隆出的对象进行...
原创
发布博客 2019.06.06 ·
201 阅读 ·
1 点赞 ·
0 评论 ·
0 收藏
加载更多