自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 资源 (2)
  • 收藏
  • 关注

原创 详解面试TCP三次握手,四次握手/四次挥手/两个二次握手

1. 前言 TCP是面向连接的协议,运输连接有三个阶段:连接建立、数据通信、连接释放。连接管理的目标是使连接的建立和连接的释放都能正常进行。TCP连接的建立采用客户服务器模式,主动发起连接建立的应用为客户(Client),被动建立连接的应用进程叫做服务器(Server)。2.TCP连接的建立(三次握手) 1.客户A的初始状态为CLOSED(关闭),服务器B开机之后就一直处于监听(LI...

2019-12-05 15:15:25 350

原创 传输层TCP协议详解,以及面试题,面试要点

1.TCP协议简介TCP协议是TCP/IP体系中一个非常复杂的协议,在4/5/7层网络模型中属于传输层的协议,主要有以下几个特点:1.面向连接:通信双方在传输数据之前必须通过三次握手建立连接,数据传输结束需要经过四次挥手来关闭连接。2.提供可靠的交付:满足四个要求。无差错、无丢失、无重复、无失序3.基于字节流:这一点挺重要,与UDP的面向报文不同,TCP的传输是基于字节流 的。在4...

2019-12-04 15:57:26 649

原创 分布式文件系统FastDFS详细教程

FastDFS分布式文件系统分布式文件系统FastDFS详细教程我心匪石,不可转也;我心匪席,不可卷也。分布式文件系统分布式文件系统 (Distributed File System) 是一个软件/服务器,这个软件可以用来管理文件;但这个软件所管理的文件通常不是在一个服务器节点上,而是在多个服务器节点上,这些服务器节点通过网络相连构成一个庞大的文件存储服务器集群,这些服务器都用于存储文件...

2019-01-15 16:05:51 761

转载 Redis分布式锁的实现原理

一、前言生产系统不需要自己手写分布式锁,redis为java提供的客户端redisson提供了丰富的锁的实现。详情—>redisson官网描述public void testRedissonLock { RedissonClient redisson = Redisson.create(); RLock lock = redisson.getLock("testLock"); lock.lock(); lock.unlock();

2021-07-15 17:04:44 207

原创 正负进制转换及java基本数据类型取值范围推算

十进制转二进制概念原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。正数与负数二进制表示的区别就在于最高位,最高位1表示负数,最高位0表示正数。反码: 正数的反码与原码相同,负数的反码为对该数的原码除符号位(最高位/最右的位)外各位取反,1变0; 0变1。举例:8的二进制(假如2字节)表示:00001000,反码也是00001000。-8的二进制(假如2字节)表示:10001000(就是将8的二进制最高位置为1,所以负数二进制非

2021-06-16 17:15:55 676

转载 oracle安装过程忘记配置口令管理

如果在Oracle11g在安装过程中忘了进行口令配置,不要着急,无需卸载重载。可以通过命令行进行修改。比如我们忘记解锁scott用户,可以先打开SQL plus工具。输入用户:sys输入口令:sys as sysdba然后输入解锁scott用户语句(分号不要忘了):alter user scott account unlock;然后输入修改scott密码为tiger(分号不要忘了):alter user scott identified by tiger;...

2021-05-12 16:20:54 4657 1

原创 oracle导出数据库表文档(包括字段名,类型,长度,注释,主外键等)

目标整理数据库文档是一个比较常见的工作,例如oracle数据库提供了很多内置视图,可以非常方便的查询出各种表信息,字段信息,大大提升生成数据库文档的效率,下面简单一种方式。我们的目标是统计出数据库表中如下的信息。sql实现,基于内置视图SELECT a.COLUMN_NAME as "字段名",b.COMMENTS as "含义", a.DATA_TYPE || '(' || a.DATA_LENGTH || ')' as "数据类型", ---内置视图中a.NU

2021-04-15 09:48:41 808

原创 windows ping不通最终解决方案

ping主机ip时,访问无法访问目标主机,或请求超时。如:ping 10.45.16.122正在 Ping 10.45.16.122具有 32 字节的数据:来自 10.45.16.122 的回复: 无法访问目标主机。来自 10.45.16.122 的回复: 无法访问目标主机。来自 10.45.16.122 的回复: 无法访问目标主机。来自 10.45.16.122 的回复: 无法访问目标主机。ping 10.45.16.122正在 Ping 10.45.16.122 具有 32 字节的数

2021-04-14 10:32:50 11723 1

转载 讲解Zookeeper 的五个核心知识点

一、ZooKeeper简介ZooKeeper 是一个开源的分布式协调框架,它的定位是为分布式应用提供一致性服务,是整个大数据体系的管理员。ZooKeeper 会封装好复杂易出错的关键服务,将高效、稳定、易用的服务提供给用户使用。ZooKeeper = 文件系统 + 监听通知机制。1.1文件系统Zookeeper维护一个类似文件系统的树状数据结构,这种特性使得 Zookeeper 不能用于存放大量的数据,每个节点的存放数据上限为1M。每个子目录项如 NameService 都被称作为 znode(目录节

2021-03-26 15:24:08 476

转载 浅谈大数据中的 2PC、3PC、Paxos、Raft、ZAB

一、一致性1.一致性的提出一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的。假设一个具有N个节点的分布式系统,当其满足以下条件时,我们说这个系统满足一致性:全认同: 所有N个节点都认同一个结果值合法: 该结果必须由N个节点中的过半节点提出可结束: 决议过程在一定时间内结束,不会无休止地进行下去2.面临着的问题1. 消息传递异步无序: 现实网络不是一个可靠的信道,存在消息延时、丢失,节点间消息传递做不到同步有序2.节点宕机: 节点持续宕机,不会恢复3.节点宕机恢复:

2021-03-24 14:10:47 369

原创 JVM内存模型

JVM内存模型虚拟机栈、本地方法栈、程序计数器属于线程私有,方法区和堆属于线程共享。程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的 字节码的行号指示器,属于线程私有,此内存区域是唯一在java虚拟机规范里没有规定OutOfMemoryError的区域。由于Java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一 个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。

2020-09-06 15:44:48 113

原创 Java字节码技术

字节码介绍Java 中的字节码,英文名为 bytecode, 是 Java 代码编译后的中间代码格式,JVM 需要读取并解析字节码才能执行相应的任务,是 JVM 的指令集。JVM 加载字节码格式的 class 文件,校验之后通过 JIT 编译器转换为本地机器代码执行。字节码指令分类字节码由单字节(byte)的指令组成,理论上最多支持 256(1字节8位,2的8次方) 个操作码(opcode)。实际上 Java 只使用了 200 左右的操作码, 还有一些操作码则保留给调试操作。操作码, 下面称为 指令

2020-09-03 00:16:36 259

原创 JVM字节码指令手册

java栈的构造第一步----将常量压入栈的指令准确的说是当方法执行时候将常量压入java栈的操作数栈。aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4 将int类型常量4压入栈iconst_5 将int类型常量5压入栈lconst_0 将long类型常量0

2020-09-01 23:22:44 143

原创 JVM类加载机制

简介编写的java代码经过编译后变成.class文件,最终经过jvm的加载才能变成元数据区的class对象,进而执行我们的逻辑。类的生命周期和加载过程一个类在 JVM 里的生命周期有 7 个阶段,分别是加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading),其中【验证、准备、解析】也叫连接。加载阶段...

2020-09-01 21:33:28 159

原创 Java中的13个原子操作类

当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变 量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作,通常我们会使 用synchronized来解决这个问题,synchronized会保证多线程不会同时更新变量i。而Java从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供

2020-08-12 23:17:31 184

原创 Fork-Join 分治编程

在JDKl.7 版本中提供了 Fork/Join 并行执行任务框架,它的主要作用是把大任务分割成若干个小任务,再对每个小任务得到的结果进行汇总, 此种开发方法也叫分治编程,分治编程可以极大地利用 CPU 资源,提高任务执行的效率,也是目前与多线程有关的前沿技术。Fork-Join 分治编程与类结构JDK 中并行执行框架 Fork-Join 使用了“工作窃取(work-stealing)”算法,它是指某个线程从其他队列里窃取任务来执行,那这样做有什么优势或者目的是什么呢?比如要完成一个比较大的任务,完全可

2020-08-10 14:59:01 173

原创 计划任务ScheduledExecutorService的使用

Java 中的计划任务 Timer 工具类提供了以计时器或计划任务的功能来实现按指定时间或时间间隔执行任务,但由于 Timer 工具类并不是以池 pool ,而是以队列的方式来管理线程的,所以在高并发的情况下运行效率较低,在新版 JDK 中提供了 SchedleExecutorService对象来解决效率与定时任务的功能。...

2020-08-05 11:20:20 2168

原创 接口ExecutorService的方法使用

1.ExecutorService接口继承于Executor接口(线程池最顶层父类),抽象类AbstractExecutorService实现了ExecutorService接口,最常用的线程池类ThreadPoolExecutor就是继承于AbstractExecutorService抽象类。2.接口ExecutorService 中有很多工具方法,ExecutorService接口中的方法有些与 Future 和Callable有关,所以 Future与Callable 的使用是学习 Executor

2020-08-04 00:17:06 502

原创 CompletionService 的使用

接口 CompletionService 的功能是以异步的方式一边生产新的任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离开来进行处理,使用 submit 执行任务,使用take 取得已完成的任务,并按照完成这些任务的时间顺序处理它们的结果。接口 CompletionService 的结构比较简洁,仅有一个实现类ExecutorCompletionService。...

2020-08-03 15:36:02 635

原创 Future和Callable的使用

在默认情况下,线程 Thread 对象不具有返回值的功能,如果在需要取得返回值的情况下是极为不方便的,但在 Javal.5 的并发包中可以使用Future和Callable 来使线程具有返回值的功能。Future和Callable 的介绍接口 Callable 与线程功能密不可分,但和 Runnable 主要区别为:(1) Callable 接口的 call(方法可以有返回值,而 Runnable 接口的 run()方法没有返回值。(2)Callable 接口的 call()方法可以声明抛出异常,而

2020-08-02 23:59:35 496

原创 Executor与ThreadPoolExecutor的使用

介绍在开发服务器端软件项目时,软件经常需要处理执行时间很短而数目却非常巨大的请求,如果为每一个请求创建一个新的线程,会导致性能上的瓶颈,因为线程对象的创建和销毁需要JVM频繁地进行处理,如果请求的执行时间很短,可能花在创建和销毁线程对象上的时间大于真正执行任务的时间,若这样,则系统性能大幅降低。JDK5 中提供了线程池的支持,主要的作用是支持高并发的访问处理,并且可以将线程对象进行复用,核心原理即创建了一个运行效率比较优异的“线程池ThreadPool ”,在池中支持线程对象管理,包括创建与销毁,使用

2020-08-02 17:35:35 707

原创 Phaser类的使用

Phaser类

2020-07-15 00:24:13 270

原创 CyclicBarrier类的使用及API

CyclicBarrier类

2020-07-13 15:49:59 193

原创 CountDownLatch类的使用以及常用API

在Java 并发包中控制线程的同步还有一些比较常见的工具类CountDownLatch和CyclicBarrier ,这两个工具类可以使线程在同步的处理上更加灵活,比如支持同步计数重置、等待同步线程个数等常见功能,这两个工具将同步与线程‘组团’做任务完美进行了支持。CountDownLatch类控制线程执行任务的时机,使线程以“抱团”的方式一起执行任务。类CountDownLatch所提供的功能是判断count计数不为0的时候则当前线程呈wait状态,也就是在屏障处等待。类CountDownLat

2020-07-13 00:04:44 313

原创 Exchanger类的使用及常用API

Exchanger类类Exchanger的功能可以使两个线程之间传输数据,它比生产者消费者模式使用的wait/notify更加方便。Exchanger类可用于两个线程之间交换信息。可简单地将Exchanger对象理解为一个包含两个格子的容器,通过exchanger方法可以向两个格子中填充信息。当两个格子中的均被填充时,该对象会自动将两个格子的信息交换,然后返回给线程,从而实现两个线程的信息交换。方法exchange()传递数据V exchange(V x) 方法,用于两个线程交换数据,返回值V是取得

2020-07-12 22:50:41 259

原创 并发类Semaphore的使用及常用API

1.Semaphore类介绍Semaphore类是java\util\concurrent包下用于限制线程并发数量的操作类,如果不限制并发线程的数量,CPU资源将会很快耗尽,每个线程的执行时间将会非常缓慢,因为CPU要把时间片分给不同的线程对象,而且上下文切换也需要消耗时间,最终导致系统运行效率的低下,因此限制线程的并发数量非常有必要。2.Semaphore类实现线程的同步2.1 多线程中的同步概念:其实就是排着队执行一个任务,执行任务是一个一个执行,并不能并行执行,这样的优点有助于业务逻辑的正确性,

2020-07-10 17:04:03 324

原创 线程以及线程组的异常处理

线程中异常处理线程中异常无法抛出Thread的run方法是不能throw出异常的,但是RuntimeException不可避免,抛出异常时子线程会结束,但是主线程不会知道,主线程通过try catch无法捕获子线程异常。示例:public class ThreadExceptionDemo { public static class MyThread extends Thread{ @Override public void run() {

2020-07-08 18:25:15 197 1

原创 SimpleDateFormat的非线程安全

SimpleDateFormat类SimpleDateFormat主要负责日期的转换以及格式化,多线程环境下多个线程同时操作一个SimpleDateFormat对象会造成数据转换不准确,是非线程安全的类。单例模式下多线程不安全的示例:public class SimpleDateFormatDemo { public static class MyThread extends Thread{ SimpleDateFormat sdf; String dateSt

2020-07-08 16:10:50 144

原创 java线程组的使用,常用方法介绍

线程组可以把某一线程归属到线程组中,线程组中既可以有线程,也可以有线程组,组中还可以有线程,组织结构跟数类似。线程组的作用是,可以批量的管理线程或线程组对象,有效对线程或线程组对象进行组织。...

2020-07-08 15:05:36 236

原创 java多线程的各种状态

线程的状态线程对象在不同的运行时期有不同的状态,状态信息存储在State枚举类中。Thread类内有State 枚举类,定义状态。public enum State { //至今尚未启动的线程处于该状态 NEW, //正在java虚拟机中执行的线程处于这种状态 RUNNABLE, //受堵塞并等待某个监视器锁的线程处于这种状态 BLOCKED, //无限期来等待某一个线程执行特定的操作的线程处于这种状态

2020-07-07 17:33:59 336

原创 单例模式与多线程

立即加载/“饿汉模式”立即加载就是在使用类的时候,对象已经创建,常见方法就是直接New实例化。立即有急迫的意思,所以叫饿汉模式。public class singleDemo { static class MyObject{ //立即加载方式==饿汉模式 private static MyObject myObject = new MyObject(); public MyObject() { }

2020-07-07 14:44:58 78

原创 定时器Timer与TimerTask的使用

一:简介在JDK类库中Timer主要负责计划任务的功能,也就是在指定时间执行某一任务,执行时候会在主线程之外起一个单独的线程执行指定的任务。该类主要是设置任务计划,但封装的类是TimerTask类。TimerTask是一个实现了Runnable接口的抽象类,代表一个可被执行的任务,执行任务的代码要放在其子类中(TimerTask是抽象类)。二:Timer整体类图TimerTask类:主要为定时任务的具体内容。Timer类中含有3个类:Timer、TimerThread、TaskQueue。Ti

2020-07-02 14:41:39 1659

原创 ReentrantLock类与ReentrantReadWriteLock类

ReentrantLock介绍1、可重入锁。可重入锁是指一个线程可以多次获取同一把锁。ReentrantLock和Synchronized都是可重入锁。2、可中断锁。可中断锁是指线程尝试获取锁的过程是否可以响应终端。synchronized是不可中断锁,而ReentrantLock则提供了中断功能。3、公平锁与非公平锁。公平所指多个线程同时尝试获取同一把锁时,获取锁的顺序按照线程达到的顺序,而非公平锁则允许线程“插队”。synchronized是非公平锁,而ReentrantLock的默认实现是非公平

2020-06-29 00:01:51 148

原创 ThreadLocal关键字与InheritableThreadLocal关键字

ThreadLocal是什么在多线程环境下,防止自己的变量被其它线程篡改,实现单个线程的共享变量,ThreadLocal解决的就是每个线程绑定自己的变量值。ThreadLocal源码解析set()方法: public void set(T value) { //取到当前的单独的线程 Thread t = Thread.currentThread(); //拿到t线程的threadLocals,每个线程都有一个ThreadLocalMap Thr

2020-05-14 17:11:56 120

原创 HashMap源码分析

一、HashMap成员变量 //默认初始table大小,16,2的次幂 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //HashMap最大长度2的30次幂 static final int MAXIMUM_CAPACITY = 1 << 30; //默认加载因子 ...

2020-01-13 15:01:47 97

原创 java网络编程(多线程TCP开发、多线程UDP开发)

1.用 java编写简单的客户端服务端程序1.1java中有三种套接字类:java.net.Socket、java.net.ServerSocket和DatagramSocket。其中Socket跟SocketServer类是建立在TCP协议基础上,DatagramSocket类是建立在UDP协议基础上的。1.2 简单的C/S架构网络编程示例(Socket、ServerSocket)服务器...

2019-12-23 13:15:02 333

原创 详解UDP协议,UDP数据报格式,头部格式

1.UDP协议概述1.用户数据报协议(User Datagram Protocol)简称UDP协议,它是在IP的数据报服务上增加了端口和简单的差错检测来实现进程到进程之间的数据传输。2.UDP协议有如下几个特点:a.无连接。UDP是无连接的协议,数据传输之前不需要建立数据连接,也没有超时重传等机制,拥塞控制以及流量控制,但是传输速度快,灵活。b.不可靠,尽最大努力交付。报文有可能存在重复,...

2019-12-05 18:11:12 11893 1

原创 feign客户端post请求,参数只支持解析string,数组的坑。feign上传文件。

feign客户端作为消费者,调用get,post服务端的接口,支持传递单参数,多参数,以及封装参数。某天,我在feign调用post请求时发现了一个问题,feign竟然无法传递封装好的对象,这真是奇怪了,原理上是行的通的呀。消费端代码如下: @RequestMapping(value = "/personTrain/addPersonTrain",method = RequestMethod...

2019-11-08 10:32:25 4756 1

原创 必得沾福气卡两张,可沾花花卡、敬业福。(扫福攻略、扫福技巧)

!!!!扫上图码支付属于到店支付,支付任意金额必得沾福气卡!!!!!。加粗样式 !!!!支付宝五福项目组感谢卡,扫码必得沾福气卡!!!! 扫码支付可退款,联系qq:2855466542 ...

2019-01-28 17:33:42 3325 1

仿京东数据库文件

仿京东商城数据库表设计,包含整个商城数据表结构,每种类别的商品的规格属性都不同, 数据表如何设计好?如果获取? 关于大型购物商城的数据库的设计其实是一个难点,里面设计了很多好的思想以及设计的思路,淘宝天猫的数据库设计 可以从中得到启发。想学习专业数据库的设计,大型商城数据的设计的朋友,可以借鉴一下这个。

2018-07-30

阿里巴巴开发手册;开发规范;新手、老手程序员必备

阿里巴巴开发手册,开发规范,新手、老手程序员必备开发规范,详细规定了常量定义、命名规范、注释规范,给出了数据库建表、索引、sql的规范。

2018-06-26

空空如也

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

TA关注的人

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