TankyZhang
码龄6年
关注
提问 私信
  • 博客:107,582
    问答:4,167
    111,749
    总访问量
  • 56
    原创
  • 829,773
    排名
  • 8
    粉丝
  • 0
    铁粉

个人简介:软件开发的小学生

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2018-12-23
博客简介:

TankyZhang的博客

查看详细资料
个人成就
  • 获得61次点赞
  • 内容获得21次评论
  • 获得144次收藏
  • 代码片获得203次分享
创作历程
  • 1篇
    2022年
  • 8篇
    2021年
  • 19篇
    2020年
  • 28篇
    2019年
成就勋章
TA的专栏
  • 问题解决
    1篇
  • 工作问题
  • 工作
    12篇
  • 学习
    55篇
兴趣领域 设置
  • 人工智能
    分类
创作活动更多

超级创作者激励计划

万元现金补贴,高额收益分成,专属VIP内容创作者流量扶持,等你加入!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Linux中的网络I/O模型

对于这几种I/O模型,生活中其实存在很多例子,我们以去售票窗口买车票为例,说明这几种I/O模型的区别。堵塞型I/O:到窗口去买票,如果此时没有票,你一直等在窗口前(堵塞),直到该窗口有车票准备好,你从窗口取票离开。非堵塞型I/O:如果窗口没有票,你就去做别的事情,你每隔一段时间来看一下有没有票(轮询),直到有票你取票离开。多路复用型I/O:买票的时候由专人负责维护所有排队买票的人,并且收集每个人的买票需求,当窗口有票的时候,专人负责通知需要车票的人去窗口取票。...
原创
发布博客 2022.08.09 ·
387 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

使用gRPC进行跨语言服务通信

​     gRPC是基于HTTP/2的通信协议框架(Dubbo是基于tcp的),同时采用了Protocol Buffers(Protobuf) 作为序列化框架。protobuf也是google开源的一款序列化产品。与开发语言无关,和平台无关,具有良好的可扩展性。Protobuf和所有的序列化框架一样,都可以用于数据存储、通讯协议。众所周知,使用一些老牌的rpc框架如Dubbo等很难进行不同语言服务之间的通信(当然Dubbo目前也已经引入了protobuf进行跨语言通
原创
发布博客 2021.09.13 ·
2140 阅读 ·
1 点赞 ·
0 评论 ·
8 收藏

ScheduledExecutorService内线程异常导致任务中断

    今天遇到一个关于ScheduledExecutorService的诡异问题,执行ScheduledExecutorService.scheduleAtFixedRate()方法过后,这个定时任务只执行一次便不再执行,可以说非常诡异。最后经过仔细排查终于发现了这个问题的出现原因。先看一段代码:    这段代码会抛出异常,但是因为没有捕捉异常所以对于javaer根本感知不到异常,最终的执行结果如下:可以看到程序也没
原创
发布博客 2021.08.29 ·
3172 阅读 ·
1 点赞 ·
1 评论 ·
4 收藏

六大设计原则(上)

六大设计原则(上)​ 为了督促自己读书,开启了三十天读一本书的计划,第一本书就是《设计模式之禅》,今天正式开启读书计划,在博客中进行读书笔记的整理,《设计模式之禅》中第一章内容没有讲述设计模式,而是先介绍了编码的六大原则,我将会依照该书的顺序进行整理。下边介绍软件设计中的六大原则中的两个。1.单一职责原则​ 定义:一个类(或者方法)的职责应该是单一的,应该有且仅有一个原因引起类(或者方法)的变更。 说的通俗一点就是一个类(或者方法)只允许干一件事,不能把所有的事情都揉在一起。类的单一职责​ 举个
原创
发布博客 2021.08.24 ·
203 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java使用JNI调用动态链接库(Mac版)

​ 最近在学习C/C++,算是刚刚入门,之前一直从事Java开发,一直就听过看过JNI的一些使用,但是一直没动手实验过,所以这次想借着这个机会实现一下,让我的知识连贯起来,但是果真一看就会一动就废,尤其是我的电脑还是Mac的M1芯片,在整个JNI的实现过程可谓是一波三折。1.前置知识​ 在使用JNI之前我想先介绍一下什么是链接以及什么是静态链接和动态链接(没有学过C/C++可以先跳过),所谓静态链接就是链接静态库的过程,动态链接就是链接动态库的过程,那么什么是静态库和动态库呢?他俩其实是一个相对的概念,
原创
发布博客 2021.08.01 ·
1944 阅读 ·
2 点赞 ·
5 评论 ·
5 收藏

视频编解码基础

视频编解码解析​ 通常我们人们口中说的“播放这个视频”,“给你发个视频”等等,其实在很多情况下是我们指的是视频封装格式,这其中包含了音频和视频两部分以及字幕等等其他很多的内容,这是人们的一种习惯叫法而已,但是在技术层面音频和视频还是有区别的。视频和音频在百度百科中定义:视频:泛指将一系列静态影像以电信号的方式加以捕捉、记录、处理、储存、传送与重现的各种技术。连续的图像变化每秒超过24帧(frame)画面以上时,根据视觉暂留原理,人眼无法辨别单幅的静态画面;看上去是平滑连续的视觉效果,这样连续的画面叫
原创
发布博客 2021.07.26 ·
1768 阅读 ·
1 点赞 ·
0 评论 ·
15 收藏

共识算法-Paxos&Raft

1.共识算法的提出先讲个故事:​ 一组拜占庭将军分别各率领一支军队共同围困一座城市。各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票(少数服从多数)来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。(来自维
原创
发布博客 2021.07.26 ·
1320 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

微服务会话管理

微服务会话管理​ HTTP是无状态的协议,因此服务器无法确认用户的信息。W3C就提出了:给每一个用户都发一个通行证,无论谁访问的时候都需要携带通行证,这样服务器就可以从通行证上确认用户的信息。通行证就是Cookie。如果说Cookie是检查用户身上的”通行证“来确认用户的身份,那么Session就是通过检查服务器上的”客户明细表“来确认用户的身份的。Session相当于在服务器中建立了一份“客户明细表”。HTTP协议是无状态的,Session不能依据HTTP连接来判断是否为同一个用户。于是:服务器向用户浏
原创
发布博客 2021.03.14 ·
633 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

Https通信原理解析

Https原理解析Https简单介绍​ 众所周知,https就是http的升级版协议,他比http更加安全,但它是如何实现安全机制的呢?其实剖开去看无非就是https在传输过程中把数据加密了,http在传输过程中不进行加密,直接就是以明文转为二进制流的形式在网络上进行传播,但是https则是传输之前将数据进行一次加密,在读取数据的时候进行解密。加密方式介绍​ 那么上边我们提到了加密解密,我们就要考虑的是如何进行加解密?如果区分常见的加密方式就是对称加密和非对称加密。对称加密:加密和解密的双方使用
原创
发布博客 2021.03.14 ·
846 阅读 ·
2 点赞 ·
0 评论 ·
3 收藏

JDK8中的HashMap源码解析与理解

jdk8中的HashMap源码解析与理解一、预备知识关于hash:​ 有个非常关键的特点,不定长度的输入固定长度的输出,将一个对象经过一定的hash算法映射成相同长度的hash值。hash冲突的避免:​ hash是无法完全避免的,只能通过各种方法手段尽量的减少hash冲突。关于hash碰撞的解决方案:开放地址法:假设一个数组有四个长度此时存放了[8,null,10,11,null]两个为null的位置代表没有数据,此时如果有个15来了,15mod 4=3那么这个15应该放在下标为3的位置上
原创
发布博客 2020.10.30 ·
942 阅读 ·
2 点赞 ·
2 评论 ·
2 收藏

Synchroized锁的是什么

Synchroized锁的是什么闲来无事,写篇文章,讲讲synchronized锁的到底是什么。1.Synchronized怎么用?​ 一般Synchronized有如下三种用法:/*** 下边两种是一样的情况*/synchronized (this) { ......}//--------------------------------------------Object object=new Object();synchronized (object) { ......
原创
发布博客 2020.10.29 ·
219 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

volatile原理解析与cpu内存架构

Volatile详解一、Intel硬件提供了一系列的内存屏障:lfence,是一种Load Barrier 读屏障sfence, 是一种Store Barrier 写屏障mfence, 是一种全能型的屏障,具备ifence和sfence的能力Lock前缀,Lock不是一种内存屏障,但是它能完成类似内存屏障的功能。Lock会对CPU总线和高速缓存加锁,可以理解为CPU指令级的一种锁。它后面可以跟ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC
原创
发布博客 2020.10.21 ·
460 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

CAS与volatile实现解析

CASCompare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / 无锁因为经常配合循环操作,直到完成为止,所以泛指一类操作cas(v, a, b) ,变量v,期待值a, 修改值bABA问题,你的女朋友在离开你的这段儿时间经历了别的人,自旋就是你空转等待,一直等到她接纳你为止解决办法(版本号 AtomicStampedReference),基础类型简单值不需要版本号UnsafeAtomicInteger:public final int incre
原创
发布博客 2020.10.20 ·
465 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

GC与实战

GC和GC TuningGC的基础知识1.什么是垃圾C语言申请内存:malloc freeC++: new deletec/C++ 手动回收内存Java: new ?自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题:忘记回收多次回收没有任何引用指向的一个对象或者多个对象(循环引用)2.如何定位垃圾引用计数(ReferenceCount)根可达算法(RootSearching)3.常见的垃圾回收算法标记清除(mark sweep) - 位
原创
发布博客 2020.10.20 ·
718 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ThreadLocal源码解析与理解

ThreadLocal源码解析一、ThreadLocal的使用​ ThreadLoca是一个本地的线程变量,他能够做到线程与线程之间的隔离,它其中填充的变量只属于本线程,它为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。​ 他的用法也非常简单:ThreadLocal<String> threadLocal=new ThreadLocal<>();threadLocal.set("1");threadLocal.get();threadLoca
原创
发布博客 2020.10.19 ·
281 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Github的常用搜索操作

 关于Github大家可能会经常使用,今天也是在使用的过程中翻到了之前的一个笔记,笔记的内容有些遗忘了,今天整理到这篇博客中吧。 首先Github作为代码仓库其中保管了大量的项目代码,但是如何在最短的时间内找到自己想要的项目代码呢?因为我们一搜某个项目只能在github的搜索框中搜索,一旦搜索就会出现很多条数据,有没有其他条件可以限制一下呢。接下来简单介绍一下常用的几个搜索条件。 首先我们可以...
原创
发布博客 2020.03.01 ·
1032 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

关于jvm的个人整理

Jvm是Java程序员永远绕不开的一个话题,今天聊下jvm,jvm主要的构成部分主要有以下的几部分:1.方法栈:该部分是线程独享的,每一个方法在其中就是一个栈帧当执行方法时候方法就会压入其中,称为压栈执行,在每个栈帧中维护了一个局部变量表用来存用用到的基本数据类型和对象的引用。2.程序计数器(PC寄存器):它记录了程序执行的位置,他也是线程独享的,在采取时间片轮询的时候它记录了线程挂起的位置。...
原创
发布博客 2020.02.26 ·
149 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

关于Spring启动早期最先注册的六个BeanDefinition的解释

 在spring初始化的过程中会注册六个非常重要的beandefinition,他们的名字分别是:1.org.springframework.context.annotation.internalConfigurationAnnotationProcessor2.org.springframework.context.annotation.internalAutowiredAnnotatio...
原创
发布博客 2020.02.25 ·
650 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

聊聊Spring中的ConfigurationClassPostProcessor

 之前有讲到过在Spring中有各种各样的BeanFantoryPostProcessor后置处理器,在这些后置处理器中有一个对于Spring使用java Config起着至关重要的后置处理器,他就是ConfigurationClassPostProcessor,因为通过他的一个方法postProcessBeanDefinitionRegistry会进行类的扫描以及注册,在这个方法中对于配置类进行...
原创
发布博客 2020.02.23 ·
2636 阅读 ·
4 点赞 ·
0 评论 ·
5 收藏

关于JVM的解释执行与编译执行

 在现代虚拟机(像HotSpot)在执行java代码的时候通常采用编译执行和解释执行相结合的方式,所谓的解释执行就是采用解释器来读取字节码,遇到相应的指令就是执行指令。所谓编译执行就是通过即时编译器(Just In Time,JTI)将字节码转为本地机器码来执行;现代jvm会根据热点 代码来生成相应的本地机器码。 在程序执行的时候有两种指令集,一种是基于栈的指令集一种是基于机器的指令集,关于这两...
原创
发布博客 2020.02.21 ·
605 阅读 ·
2 点赞 ·
0 评论 ·
2 收藏
加载更多