自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 浅谈网络通信

网络通信OSI模型网络通信拓图(http)传输控制程(TCP)三次握手四次挥手网络层(IP)数据链路层(ARP)物理层 OSI模型 网络通信拓图(http) 传输控制程(TCP) 三次握手 第一次握手 第二次握手 第三次握手 四次挥手 网络层(IP) 进行逻辑地址寻址,实现不同网络之间的路径选择。 寻址方式主要通过路由: 对于路由表的说明,大家可以自行上网查资料! 数据链路层(ARP) 建立逻辑连接、进行硬件地址寻址 标红就是通过arp协议生成的mac地址! 物理层 建立、维护、断开物理连

2021-04-09 11:07:23 106

原创 浅谈算法

算法什么是算法举例网吧几台电脑升序排列解决办法人为解决java解决总结 什么是算法 算法,字面上的意思理解就是计算的方法.我个人理解其实就是解决问题的办法!所以小伙伴们不要一听算法就感觉遥不可及! 举例 网吧几台电脑升序排列 int[] computer = {3,8,5,4,6,2}; 解决办法 从第一个位置开始去跟别的位置上的数字比,选出最小的那个,然后替换到第一个位置,然后从第二个位置开始去跟别的位置上的数字比,选出最小额,然后替换到第二个位置,接着第三个位置,同样的方法,依次类推,直到最后一个!这个

2021-04-02 20:57:35 236

原创 GC算法之三色标记

三色标记GC算法引发的问题jvm的解决方案问题1问题2 GC算法引发的问题 1.当YGC时我们对对象进行标记的时候,如果有对象在老年代,那我们会对老年代进行全部扫描标记,效率会很低 2.并发标记的时候,用户线程会对对象的引用产生新的标记,存在漏标的情况 jvm的解决方案 问题1 Card Table 由于做YGC时,需要扫描整个OLD区,效率非常低,所以JVM设计了CardTable, 如果一个OLD区CardTable中有对象指向Y区,就将它设为Dirty,下次扫描时,只需要扫描Dirty Card 在结

2021-03-31 09:07:21 203

原创 浅谈jvm垃圾回收

jvm垃圾回收垃圾对象算法引用计数可达性分析垃圾回收算法标记清除复制标记压缩分代收集常见的垃圾回收器serial(年轻代)serial old(老年代)parallel scavenge(年轻代)parallel old(老年代)parallel new(年轻代)CMS(老年代)G1(逻辑上分代,物理不分代)ZGC(逻辑跟物理都不分代)对象分配过程 垃圾对象算法 引用计数 对象在创建时保存一个自身被引用的计数,初始值为1。每次被新的变量引用,该值加1。相反,则减去1。当该值等于0时,占用空间被系统回收。 缺

2021-03-30 15:22:59 182 3

原创 运行时数据区

运行时数据区程序计数器(线程独有)本地方法栈(线程独有)直接内存(线程共享)虚拟机栈(线程独有)栈针(每个方法对应一个栈针)本地变量表操作数栈动态链接return address一道面试题堆(线程共享)方法区(线程共享) 程序计数器(线程独有) 标记下一条指令的位置! 本地方法栈(线程独有) 直接内存(线程共享) jvm可以直接访问内核空间的内存(zero copy) 虚拟机栈(线程独有) 栈针(每个方法对应一个栈针) 本地变量表 操作数栈 动态链接 return address 一道面试题 打印结果是8

2021-03-25 09:00:20 64

原创 new Object()在内存中的大小

类对象 64位AgentProject测试对象大小对象的布局markword(对象头)classpoint(class对象指针)实例数据paddingclasspoint和oops的大小 AgentProject 创建一个agent的工程项目: 创建META-INF/MANIFEST.MF: 打成jar包 测试对象大小 随便新建个工程项目,引入上面生成好的jar包,写个测试类: 上面结果显示new object()大小为16个字节,那为什么是16呢? 对象的布局 markword(对象头) 占8个字节

2021-03-22 12:37:02 327

原创 类加载

类加载类加载器自定义加载器类加载器路径类加载顺序查看字节码idea插件 类加载器 源码: 根加载器&&扩展类加载器&&系统加载器&&自定义加载器 自定义加载器 public class CousmerClassLoad extends ClassLoader { @Override protected Class<?> findClass(String name) throws ClassNotFoundException{

2021-03-19 12:21:18 86

原创 进程,线程,纤程/协程

进程,线程,纤程/协程进程和线程纤程/协程小demo 进程和线程 进程是OS分配资源的基本单位,线程是执行调度的基本单位。分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间) 纤程/协程 纤程:用户态的线程,线程中的线程,切换和调度不需要经过OS, 优势:1:占有资源很少 OS : 线程1M Fiber:4K 2:切换比较简单 3:启动很多个10W+ 小demo 依赖 ...

2021-03-18 11:39:10 80

原创 线程池如何保证核心线程不被销毁

文章目录源码 源码 // 线程循环获取队列中的任务 private Runnable getTask() { boolean timedOut = false; // Did the last poll() time out? for (;;) { int c = ctl.get(); int rs = runStateOf(c); // Check if queue empty only if n

2021-03-15 14:50:24 705

原创 JAVA线程池的线程创建

文章目录测试代码运行结果源码解析 测试代码 public class ThreadPoolModule { public static void main(String[] args) { ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 3, 0, TimeUnit.SECONDS, // 任务队列 new LinkedB

2021-03-15 10:27:51 98

原创 【JAVA基础】对象的四种引用

对象的四种引用 强引用 先看图: 开发过程中我们一般用的都是强引用,强引用指向的堆内存不会被垃圾回收器回收! 软引用 先看图: 从图上可以看出,当我们内存不够的时候,软引用指向的堆内存会被回收! 弱引用 先看图: 从图可以看出,只要垃圾回收,弱引用指向的堆内存就会被回收! Threadlocal的弱引用 先看图: 看set方法,如下图: 从图可以看出为什么threadlocal是线程独有,因为把值设置到了本地线程对象的map里. 接下来看下这个map的构造方法,看图: 重点是这个entry对象,

2021-03-12 14:53:08 83

原创 Java程序员应该掌握的计算机底层知识

Java程序员应该掌握的计算机底层知识 背景 做为一个java程序员,虽然对计算机底层知识没有硬性的要求,但是我个人觉得掌握一些必要的计算机底层知识,对我们的java开发理解还是很有帮助的! 我的计算机思维导图 后续会持续更新补充,有兴趣的小伙伴可以了解下哦! ...

2021-03-11 10:14:06 170

原创 浅谈java锁底层原理AQS

浅谈java锁底层原理AQS 背景 之前了解java锁的时候,只知道通过什么api能获得锁,可是对具体怎么获得锁及锁是什么并没深入了解,现在就深入聊聊锁,我们以ReentrantLock锁为例 AQS 先上AQS的类图 AQS队列同步器,这个类我们关注state属性和node类,state属性表示同步的状态0表示没锁,大于等于1表示锁被持有.node类大家可以自己看下类结构,这个是双向链表的结构! 在看看lock()方法具体干了啥,还是先上个类图 上面的图是我个人debug后画出来的类调用,调用过程我简

2021-03-10 16:09:16 126

原创 手写一个同步容器

直接上图 这里可以思考几个问题: 1:为什么用while 不用if 2:有没有更优的写法(其实这个实现方式有个问题,就是锁的力度太重了,每次都唤醒了所有的线程去竞争锁,有兴趣的小伙伴可以交流下哦)

2021-03-10 10:00:42 79

原创 【JAVA并发编程】锁的四种状态及升级

JAVA并发编程 锁的四种状态 锁的状态分为四种:无锁,偏向锁,轻量级锁,重量级锁!拿synchronized代码块举例!(早期的版本直接是重量级锁,后续jvm进行了锁升级优化) 无锁 当没有线程执行代码块里面的语句时! 偏向锁 当只有一个线程执行代码块时! 轻量级锁 当多个线程产生竞争时,synchronized的轻量级锁其实是自旋锁! 重量级锁 当线程自旋一段时间还是没获取锁时!进入阻塞状态! ...

2021-03-10 08:49:15 154

原创 java程序员有必要了解的底层知识内核态与用户态

背景 多线程场景下,我们为了保证线程同步,都会给相应的逻辑代码上加锁,这个时候会存在线程的切换问题,那线程的切换,创建,销毁会消耗性能,因此很多时候我们会用线程池!但是用线程池也不能避免线程切换带来的性能消耗,那线程切换,具体性能消耗在哪?下面我来简单聊聊我个人理解! 线程状态切换 线程的切换,往往伴随着线程的阻塞跟唤醒,也伴随着用户态跟内核态的转换,这个是需要操作系统介入的,所以会消耗大量的系统资源,因为用户态与内核态都有各自专用的内存空间,专用的寄存器等,用户态切换至内核态需要传递给许多变量、参数给内核

2021-03-09 17:46:12 249 3

原创 java浅拷贝必遇的坑

java浅拷贝必遇的坑 背景 在工作期间,我发现身边的同事包括自己在开发的时候,总是会遇到因为浅拷贝而导致的bug,而且这种bug并不是一眼就能被发现!就想着跟大家分享下问题所在!当然并不是啥技术点,有经验的伙伴可以略过! 坑 如下两个对象 浅拷贝如下 也就是说当我们拷贝的对象里面有引用类型的对象的时候,其实我们只是拷贝了对象的引用,当我们改变了拷贝对象的内容时候,实际像被拷贝对象也同时改变了!这个点很多人开发的时候会忽略!那会有什么问题? 假设我们这个对象是页面的查询对象,那我们在查询的时候就会出现

2021-03-08 14:58:01 252 1

原创 浅谈设计模式

浅谈设计模式 背景 网络上有很多详细介绍设计模式的种类及应用场景的,我之前了解设计模式的时候,也会看!不过我发现网上很少有关于为什么会存在设计模式,介绍设计模式意义的文章.所以我就想写篇文章,简单阐述下自己的理解. 设计模式意义 我们设计系统的时候.会考虑系统的很多方面,比如框架,技术栈等等!一个系统的好坏的判读指标也有很多,比如可扩展性. 设计模式我理接就是就是对多态的运用,目的在于降低系统代码,模块之间的耦合度,所谓高内聚低耦合,增强系统的可扩展性. 在我们对系统就行新功能增加的时候,尽量不用更改原先的

2021-03-05 14:38:03 60

原创 java让我拥有一切

java让我拥有一切 面向对象 学过java的人都知道,java是面向对象编程!什么是面向对象?也就是说任何事物我们都可以把它封装成对象!打个很简单的比方,我想要辆车,那就可以定义一个车的类,车的属性可以设置成类成员变量,车的功能可以设置成类方法!也就是说你想要啥,想做啥创建一个类就行,这也是为什么java让我拥有一切的原因! 那么在我们实际的开发,编程过程中,我们也要运用这种思想,把面向过程编程,转换成面向对象编程! ...

2021-03-03 09:11:33 71

原创 从程序员角度浅谈君子九思

这里写自定义目录标题君子九思程序员的君子九思视思明听思聪色思温貌思恭言思忠事思敬疑思问忿思难见得思义 君子九思 孔子曰:“君子有九思:视思明,听思聪,色思温,貌思恭,言思忠,事思敬,疑思问,忿思难,见得思义。–《论语·季氏》 程序员的君子九思 视思明 做为一个普通的程序员,基本上是以开发需求为目的,这就必然离不开需求的评审,做好需求评审必然离不开程序员对需求文档的理解.对于程序员了解需求文档.我觉得需要做到视思明,也就是程序员在看需求文档时,能否去思考需求是否正确,是否合理,实现起来是否会有问题! 听思聪

2021-03-02 10:28:09 199 1

空空如也

空空如也

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

TA关注的人

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