自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Go语言】深入浅出chan(各种实例场景+分析)

文章目录chan简介问题引入有缓冲通道chan简介chan 是go的一个关键字,也就是通道的意思,通道是goroutine之间通信和同步的重要组件,也就是go通过通信来共享内存的猜题问题引入先引出一个问题来加深理解:求1-200每个数的阶乘,要求开启200个goroutine各自执行,并将结果存入同一map中,等全部存入完毕后再遍历直接定义好map后启动goroutine来操作:var ( maps = make(map[int]int,10))func main(){ for

2020-12-26 18:28:40 3069 2

原创 【Go语言】深入理解值类型和引用类型(实例分析)

1.实例今天在刷博客的时候看到了这么一个观点:切片并不是纯引用类型!给出的证明过程是:图一://(该代码引用于原博主,仅用于在此探讨问题,无恶意)package main import "fmt" func main(){ a :=[...]int{0,1,2,3,4,5,6,7,8,9} fmt.Println(a) s1:=a[:] s2:=s1[:] fmt.Println(s1)

2020-12-05 20:05:59 294

原创 【Go语言】一文了解数组和切片区别(内存结构)

文章目录引子定义内存结构(!!!)内置方法总结引子数组和切片是我们较为常用的数据结构,正是因为他们的普遍,其中有许多小问题都被我们忽略掉了,比如说:1.在作为参数传递时,为什么切片的改动会使得原来的实参也发生变化,而数组的改动就不会影响到实参2.为什么数组的类型会因为长度不同而无法兼容,但是切片却可以随意传递,两者的内存布局到底是什么样的3.为什么数组偏向静态的不能追加,而切片却可以动态扩容…定义先从定义开始数组常用的定义方法:var arr_1 = [...]int{1,2,3}//[

2020-12-01 13:43:25 782

原创 【JVM】gc实例深度解析(阈值,日志)

1.日志分析public class GText1 { public static void main(String[] args) { int length = 1024*1024; System.out.println("GC触发时机如下:"); byte[] a = new byte[2*length]; byte[] b = new byte[3*length];...

2020-03-24 19:10:24 1546

原创 【JVM】GC模型(知识梳理)

文章目录垃圾判断算法引用计数算法根搜索算法GC算法标记——清除标记——整理复制算法分代算法内存回收GC的时机垃圾收集器详述Serial收集器ParNew收集器Parallel Scavenge收集器Parallel Old收集器CMS "( Concurrent Mark Sweep ) 收集器垃圾判断算法引用计数算法给对象添加一个引用计数器,当有一个地方引用它,计数器加1,当引用失效,计数...

2020-03-24 19:09:54 718

原创 【JVM】运行时内存数据区(main完整流程实例分析)

文章目录1.区域划分:Java虚拟机栈堆方法区域本地方法栈程序计数器实例分析:1.区域划分:Java虚拟机栈1.Java虚拟机栈也是线程私有的,它的生命周期与线程相同(随线程而生,随线程而灭)2.如果线程请求的栈深度大于虚拟机所允许的深度,将抛出StackOverflowError异常; 如果虚拟机栈可以动态扩展,如果扩展时无法申请到足够的内存,就会抛出OutOfMemoryError...

2020-03-24 19:09:18 452

原创 【JVM】jvisualvm和jconsole工具(堆,栈,元空间溢出分析)

文章目录简介:jvisualvm:1.jvisualvm打开方式:2.堆内存溢出:3.虚拟机栈溢出jconsole工具简介:jvisualvm是jdk自带的一个强大工具,可以帮助我们更好的分析数据,本文通过使用jvisualvm来分析堆内存溢出和虚拟机栈溢出,并对jconsole工具加以说明;jvisualvm:1.jvisualvm打开方式:在CMD命令行输入jvisualvm即可:...

2020-03-18 18:43:17 2524

原创 【JVM】通过字节码深入理解细节知识点(包含字符串在常量池和堆中的差异比较)

1.构造方法默认构造方法多个自定义构造方法2.普通方法3.静态属性反编译的强大也是在我学习完之后知道的,他解决了在平时写代码时我们可能不会去考虑一些细节性的问题,就比如非静态成员是何时赋值的,无参构造方法真的没有参数吗?本文旨在通过反编译对相关知识进行分析。1.构造方法:默认构造方法:public class Son { String name = "XiaoHeng"; p...

2020-03-16 18:32:47 364 2

原创 【JVM】线程上下文类加载器详解

SPI机制简介SPI的全名为Service Provider Interface,主要是应用于厂商自定义组件或插件中。在java.util.ServiceLoader的文档里有比较详细的介绍。简单的总结下java SPI机制的思想:我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块、xml解析模块、jdbc模块等方案。面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。一旦代码里涉及具体的实现类,就违反了可拔插的原则,如果需要替换一种实现,就需要修改代码。为了

2020-03-02 17:26:11 691 1

原创 【JVM】类加载器及其命名空间详解(源码分析+多问题解答)

文章目录1.类的加载2.类加载器的种类3.双亲委派模型Class对象:定义类加载器与初始类加载器4.类加载器的命名空间1.类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存中创建一个java.lang.Class对象( 规范并未说明Class对象位于哪里,HotSpot虚拟机将其放在了方法区中)用来封装类在方法区内的数据结构2....

2020-03-01 17:12:42 318

原创 【java】多文件自平衡云传输系统框架

目录:1.基本思想2.框架分析3.资源的表示: 3.1 文件片段 3.2 资源结构信息 3.3 资源基本信息 3.4 收发文件片段4.网络模块: 4.1 网络节点 4.2 收发数据读取5.策略模块: 5.1 节点选择策略 5.2 资源分配策略 5.3 断点续传策略6.资源中心: 6.1 资源中心服务器 6.2 RPC服务类7.资源请求端“ 7.1 资源请求端类...

2020-02-23 11:47:13 458

原创 【java】Linklist源码解读JDK1.8

本文旨在对Linklist源码进行解读,对代码基本进行了逐行注释并且将遇到的问题做出说明。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializab...

2020-01-20 17:40:06 208

原创 【java】Arraylist源码解读JDK1.8

本文旨在对Arraylist源码进行解读,对代码进行了逐行注释并且将遇到的问题做出说明。package java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;import sun.misc.Sha...

2020-01-16 11:20:35 240

原创 【java】小工具 ————byte和int,string,long之间的相互转化

本篇博文旨在将数据转化做成工具,以供我们在使用时的便利(应用场景举例:多文件传输时的数据转化,服务器客户端之间的数据转化),其中包含的byte与其他几种基本类型之间的转化,可能遇到的问题在代码中以注释的形式加以叙述。public class BitToAll { private static final String Tensix = "0123456789ABCDEF"; pu...

2019-11-13 18:28:49 340

原创 【java】小工具————将空间长度转化为B,KB,MB,G

当我们想要输出下计算机磁盘已用空间和剩余空间时,就会遇到下面比较尴尬的情况:这个输出结果看起来实在是太不方便了,因此我们做一个小工具来改造改造。我们有两个版本的解决方法,分别是:“朴素版”和“炫技版”,这篇文章旨在讲述“炫技版”;朴素版:public static String TransformtoStringone(long para) { if(para<...

2019-11-08 20:25:23 297

原创 【java】RMI————模态对话框

1.简介:模态对话框(Modal Dialogue Box),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话框进行响应。模态对话框垄断了用户的输入。当一个模态对话框打开时,用户只能与该对话框进行交互,而其他用户界面对象收不到输入信息。模态对话框下,用户需要操作目标对话框就必须先操作模态对话框。(上述简介摘自https://baike.baidu.com/item/模态...

2019-11-08 18:08:10 362

原创 【java】工具————代理模式

前言:代理模式是java的一种常用工具之一,其目的就是为其他对象提供一种代理来控制对这个对象的访问。其实代理模式是在访问的对象时引入一定程度的间接性,这种间接性可以附加多种用途,例如在RMI中客户端通过代理对服务器进行访问并得到其结果,拦截器的实现也是基于代理模式提供的间接操作以达到增加前置后置拦截。本文主要是说明两种代理模式,Cglib和JDKlib的使用并将其扩展成工具方便以后操作。...

2019-10-24 15:50:19 181

原创 【java】RMI————短连接(下)

承接上文,在搭建好基础框架后就该做核心部分,接下来就该考虑以下问题:1.为了保证接口中被执行方法的唯一性,客户端传递过来的是将要被执行的方法的hashcode,但是服务器调用的是该接口实现类的方法,两者hashcode不同,所以要想办法将接口方法的hashcode和实现类的方法对应起来。这算得上比较棘手的一个问题,我们可以采取以下做法:①.新建一个注解,该注解用于标记在接口实现类上,其...

2019-10-23 18:20:43 223

原创 【java】RMI————短连接 (上)

1.RMI简介:Remote Method Invocation远程方法调用这是一种基于网络的技术;本地机执行一个函数,而这个函数实质上是在服务器端的。也就是说,表面上是客户端在调用一个函数,但,本质上是服务器在执行这个函数,并通过网络返回函数的执行结果。2.几个基本问题可以确定:1、建立服务器;2、客户端连接服务器;3、在客户端执行一个方法,而该方法应该在服务器上执行;4、为了保...

2019-10-23 15:30:35 338

原创 【java】多线程实例————计时器

简述:计时器用以在用户的规定时间内执行一次用户的动作;计时器的功能决定其应用场景较为广泛。无论是生活中在对微波炉使用时的定时,还是在编程中对数据的定时检测,亦或者在我们玩游戏时排行榜的定时刷新都有有所使用。基本思路及问题:整体思路:创建两个线程,线程一主要负责计时工作,线程二主要负责时间到了后处理方法;先启动第二个线程,然后立即将其阻塞掉,等第一个线程的计时时间到了后唤醒第二个线程...

2019-10-18 20:09:47 2077

原创 【java】工具 ————Properties文件解析

简述:在一些场合下我们为了在不改动代码的情况下对相关方法进行操作或者是在方法执行前必要的参数就必须准备妥当,这时我们就可以采取“配置文件”的方法将相关数据配置进去以达到我们的目的,在众多配置文件中Properties文件是使用较多的一种。Properties文件采取的是键值对的形式来存储数据的,与java的map十分相似,所以我们用map来存储从Properties文件中解析的数据,又因为...

2019-10-18 17:08:25 244

原创 【java】CSFramework————分发器②(注解)

继上文,当服务器会话层接收到来自客户的资源请求时,会解析协议信息,得到里面的参数para(gson字符串);然后会调用其他方法处理,得到客户端想要的资源后,将结果再次打包成gson字符串发送给客户端,具体操作分为以下几步;public void dealRequest(NetMessage message) { String requestAction= message.getActio...

2019-10-11 19:02:09 115

原创 【java】 CSFramework ——协议

为了保护框架的安全运行,防止外部人为破坏,我们的服务器和客户端在交流时应该通过协议进行规范。源代码如下,并在下文做说明:package com.mec.communication;public class NetMessag { private EMessagetype type;//命令类型(枚举) private String para;//参数 private Strin...

2019-10-11 16:48:30 197

原创 【java】CSFramework————分发器①(gson)

简介:分发器是Cs框架的核心之一,主要用于处理客户端资源请求的响应,当客户端向服务器进行资源请求时,该请求如何传递到服务器?服务器又该如何处理该请求?其中涉及到的技术有gson的使用和注解与包扫描的配合以及反射机制调用。由于其中包含的操作过多,所以分篇来一一说明。本篇用于介绍gson:前几篇Cs框架的文章有提到过,信息在客户端和服务器之间是通过网络协议转化后在进行传递的,传递到服务器的信息...

2019-10-11 15:57:58 212

原创 【java】 SpringFramework ———— 方法的注入

继上次对象的成员注入后,当我们对某个类对象进行注入时,如果该类对象中有一个待注入的成员是jar包里的类对象,由于我们无法对jar包进行@Component的注解,所以就得采用在一个方法中实例化该对象再注入的手段。 @Bean public Point getjar(Complex c) { Point p = new Point(); return p; ...

2019-10-07 19:14:11 314

原创 【java】工具————包扫描

包扫描工具的功能是:将给定一个包名称后,该工具会扫描并得到该包下所有的的子包和文件,并可以通过抽象方法实现对扫描到的文件做不同的处理。包扫描是现实我们框架“自动性”的重要工具之一,我们的Spring框架和CS框架都有用到该工具。以下便是包扫面的详细过程(具体问题以注释的形式在代码中做具体说明)public abstract class PackageScanner { public abs...

2019-10-05 16:48:51 386

原创 【java】 SpringFramework ———— 注入

我们这次的目的有三个:1.组建Bean工厂(上下文,容器);2.能够对Bean的成员进行注入;3.能够取得Bean;Bean,又称Java Bean,或者说POJO,平凡的Java类。将这些平凡的Java类对象组织到一个容器中,就形成了所谓的“上下文”或“容器”,容器的形成需要配置手段,可以采用注解或者Xml文件的形式,在这里我们采用注解的形式。@Component//该...

2019-09-26 15:39:25 208

原创 【java】 CSFramework ——免分发(巧用反射机制)

conversation层(会话层)主要用于处理收发信息,当它接收到对端发送的经过网络协议规范化的信息时,会自动将信息解析后进行分类处理:void dealmessage(NetMessag mess) {//Netmessage就是为了保护框架而编写的网络协议,其中包括: EMessagetype type = mess.getType();//命令类型 String actio...

2019-09-25 10:42:29 148

原创 【java】 CSFramework ——线程锁的巧用

在讲技巧前我们先简单回顾下Cs框架的大体内容。首先Cs框架由上图几层组成,com层就是通信层,负责打开通信信道并“读”和“写”的线程操作来实现信息交互。cov层(服务器/客户端会话层)是会话层,其功能是“上传下达”,将收到的信息进行处理或将要发送的信息进行整理后向对端发送。serve层(服务器层)通过侦听来自客户端的请求来建立一个servecov专门与其进行信息交流,并通过分发信息向客户端提供服...

2019-09-20 12:38:44 200

空空如也

空空如也

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

TA关注的人

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