自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

卓立的博客

Java技术分享

原创 Java编程拾遗『AQS』

上篇文章讲了Java中显式锁Lock和ReadWriteLock的概念及简单使用示例,本篇文章重点来看一下Java中显式锁的底层实现。在看这部分代码时,我任务比较好理解的方式是带着问题去看源码。对于显式锁,我们可能会有以下问题:问题1:显式锁底层是基于CAS实现,细节是怎样的? 问题2:显式锁跟synchronized类似,无法获取锁时,会阻塞当前线程,如何实现阻塞的? 问题3:显式锁提供...

2019-08-16 07:19:59 79

原创 理解Https

之前的文章讲golang webSocket编程的文章中提到过Http协议的概念,通过之前的了解我们也知道Http协议其实就是基于传输层的TCP协议和网络层的IP协议实现的一个协议,所以他拥有TCP/IP的所有特性。也正是因为它使用TCP/IP协议,导致它会有以下问题:通信使用明文,通信内容有可能会被窃听 不验证通信方的身份,有可能遭遇伪装 通信内容可能遭到篡改1. HTTP存在的风险...

2019-08-16 07:10:32 77

原创 了解Cookie、Session和Token

在Web刚兴起的阶段,Web服务都是静态服务,一般处理前端请求,只需要将相应的html、图片等文件传送到前端即可,这个时候,对于同一个请求,每个用户看到的内容都是完全一样的,服务器也没必要针对不同用户做不同的处理。Http协议最开始就是定义服务器和客户端传送超文本文件的协议,从起源上看,Http协议就是无状态的。但是随着交互式Web应用的兴起,之前无状态的Http协议就不能满足了。比如购物、论...

2019-08-15 07:27:43 54

原创 redis实现分布式锁

分布式锁一般有三种实现方式:Zookeeper Redis 数据库排他锁从可靠性和实现的复杂度讲,上面三种方式在可靠性上逐渐降低,在实现复杂度上也是逐渐降低的。在实际使用中,通过redis实现分布式锁是一种比较常见的方式,但是在使用redis实现分布式锁时,有些不正确的实现往往会导致死锁,错误等问题。本篇文章就来讲解一下redis实现分布式锁的常见方式,及redis分布式锁的正确打开方式...

2019-08-15 07:26:12 115

转载 秒懂 QPS、TPS、PV、UV、GMV、IP、RPS

原文链接:http://unvcn.com/post/50.htmlQPS、TPS、PV、UV、GMV、IP、RPS等各种名词,外行看起来很牛X,实际上对程序员来说都是必懂知识点。下面我来一一解释一下。1. QPSQueries Per Second,每秒查询数。每秒能够响应的查询次数。QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的...

2019-08-16 07:24:26 259

转载 一份非常完整的MySQL规范

原文链接:https://www.cnblogs.com/duaimili/p/10277515.html1. 数据库命令规范所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备...

2019-08-16 07:22:52 35

原创 Java编程拾遗『并发容器——CopyOnWrite』

CopyOnWrite

2019-08-16 07:21:37 54

原创 Java编程拾遗『显式锁』

在之前讲线程同步时,介绍了synchronized的锁的使用及底层原理,也介绍了synchronized锁的一些使用局限,本篇文章来介绍一下Java中提供的另一种线程同步机制——显式锁。Java并发包中的显式锁接口和类位于包java.util.concurrent.locks下,主要接口和类有:锁接口Lock,主要实现类是ReentrantLock 读写锁接口ReadWriteLock,主要...

2019-08-16 07:17:57 42

原创 Java编程拾遗『原子变量』

本篇文章我们来讲java.util.concurrent包下的原子变量,原子变量的引入主要是为了解决普通变量(int、Integer、Long等)修改操作不是原子的,进而导致必须使用同步机制才能保证安全更新的问题。举个例子:public class Counter { private int count; public void incr(){ count ...

2019-08-16 07:16:12 34

原创 Java编程拾遗『线程中断』

之前的文章,我们已经介绍了线程的概念、使用、同步及线程协作,本篇文章来重点讲一下Java中如何取消或关闭一个线程。1. 线程取消/关闭的场景我们知道,通过线程的start方法启动一个线程后,线程开始执行run方法,run方法运行结束后线程退出,那为什么还需要结束一个线程呢?有多种情况,比如说:很多线程的运行模式是死循环,比如在生产者/消费者模式中,消费者主体就是一个死循环,它不停的从队...

2019-08-16 07:14:25 28

原创 Java编程拾遗『线程协作』

之前用了两篇文章介绍了多个线程竞争资源的解决方案synchronized,但其实多个线程之间除了竞争资源之外,还有相互协作。比如:生产者/消费者模式:这是一种常见的协作模式,生产者线程和消费者线程通过共享队列进行协作,生产者将数据或任务放到队列上,而消费者从队列上取数据或任务,如果队列长度有限,在队列满的时候,生产者需要等待,而在队列为空的时候,消费者需要等待。 同时开始:类似运动员比赛,在...

2019-08-16 07:13:16 34

原创 Redisson实现Redis分布式锁

在上篇文章redis实现分布式锁中,讲了通过redis实现分布式锁的正确方式,并在文章最后讲到,文章中的实现方式存在单点问题,并提到一种基于分布式环境的分布式锁——Redlock。本文就讲解一下Redlock的一些概念和实现。1. RedissonRedisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的J...

2019-08-15 07:33:45 87

转载 服务端高并发分布式架构演进之路

原文链接:服务端高并发分布式架构演进之路1. 概述本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。2.基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:分布式 系统中的多个模块在不同服...

2019-08-15 07:32:24 58

原创 golang websocket编程

上篇文章讲了TCP/IP的一些基础概念,并通过go内置的包实现了socket编程。本篇文章来了解一下另外一个概念——WebSocket。但从命名上来看WebSocket和Socket很类似,但是其实两者并没有直接的联系。Websocket跟HTTP对应,基是于TCP 协议之上的长连接应用层协议。Socket是操作系统抽象出来,方便我们使用TCP/UDP协议编程方法,属于传输层协议。两者其实没有直接...

2019-08-15 07:30:03 1072

原创 golang socket编程

在大学的时候,曾经修过一门课《网络原理》,其中就花很大的篇幅讲过TCP/IP四层网络协议(OSI的七层网络协议可以映射到这个四层协议上来),也讲过HTTP协议、socket编程。但是讲的东西多了,总有一种云里雾里的感觉,而且也没能很好的了解其中的关联。这里就和大家一起梳理一下,上述几个概念之间的关系,并通过golang实现socket编程。1. 基础概念1.1 TCP/IP协议TCP/...

2019-08-15 07:29:05 935

原创 Java编程拾遗『synchronized原理』

上篇文章简单介绍了一下synchronized的使用,以及对象锁和类锁的概念,本篇文章就来介绍一下synchronized的底层原理。上篇文章也提到,我们对synchronized的印象是重量级锁,使用效率低下,导致我们一般在使用synchronized有很多顾虑。但是随着Java6对synchronized进行的各种优化后,synchronized并不会显得那么重了。本篇文章就synchro...

2019-08-15 07:25:08 38

转载 Netty基础篇:Netty是什么?

之前了解过NIO、和Netty的一些概念,但是感觉概念上很晦涩,只是了解简单的概念,也不知道具体该怎么应用。大多数博客讲述的也不是很清楚,昨天一个偶然的机会,读到一个博主的系列文章,感觉写的很好,这里分享一下。原文链接:《跟闪电侠学Netty》开篇:Netty是什么?同时博主还有一个关于Netty的掘金小测,配合Netty的相关书籍食用更搭配。《Netty 入门与实战:仿写微信 IM 即时...

2019-08-15 07:22:10 34

原创 Java编程拾遗『synchronized使用』

从接触Java多线程第一刻起,我们就被告知使用多线程编程一定要注意线程安全问题。而一般的教材中都会首先给出解决线程安全问题的“万金油”——关键字synchronized,它可以保证同一时刻只有一个线程在访问其修饰的代码。但是同时,一般教程中会告诉我们,synchronized是一个重量级锁,以至于给我们一种印象,synchronized效率极低,甚至“谈synchronized”色变。在日常开发中...

2019-08-15 07:19:31 27

原创 Java编程拾遗『线程的使用』

上篇文章讲了一些关于并发编程的一些基本概念,也简单提到Java中线程的创建方式,本篇文章将详细介绍一下Java中线程使用的相关细节。1. 创建线程如果程序中只有一条执行流,程序从main方法的第一条语句逐条执行直到结束。如果在main线程中创建另外创建一个线程,并启动,则表示在main执行流之外另外开辟一条单独的执行流,它有自己的程序执行计数器,有自己的栈。Java中可以通过三种方式创建线...

2019-08-15 07:16:37 22

原创 Java编程拾遗『并发编程概述』

从本篇文章开始,我们一起来认识一下Java并发编程的相关细节。如果让你写一个多线程程序,相信绝大多数开发人员都能很轻松的实现。但是对于Java并发编程的一些细节,比如线程多个状态的流转、线程安全保证的原理、线程池的实现等等,综合考虑起来还是有很多知识的,我现在也不能完全搞明白,刚好在并发编程这个系列中,整理一下Java并发编程的一些细节,希望对理解Java并发编程带来一些帮助。1. Java并...

2019-08-14 07:35:03 56

原创 Java编程拾遗『序列化』

Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,也就是讲这些对象的生命周期不会比JVM的生命周期更长。但在现实应用中,有可能要求在JVM停止运行之后能够保存(持久化)指定的对象,并在将来重新读取被保存的对象。Java对象序列化就能够帮助我们实现该功能。上节讲字节流的时候,讲了通过DataOutputStream/DataInputSt...

2019-08-14 07:33:43 67

原创 Java编程拾遗『字符流』

之前一篇文章讲述了Java中字节流的分类及简单用法,最后我们可以发现,Java中的字节流既可以用来处理二进制文件,也可以用来处理文本文件。但是字节流对于文本文件的处理是不太方便的,比如字节流的媒介是字节,但是文本文件的内容都是可显式地字符,很明显通过字符作为媒介更合理(需要手动进行字节和字符通过某种特定编码格式的转化)。另外,在之前那篇文章Java编程拾遗『搞定编码』中,我们了解到,字符可以有很多...

2019-08-14 07:32:42 29

原创 彻底搞懂动态代理

生活中我们肯定知道代理商的概念,代理商代替厂家售卖其生产的商品,厂家“委托”代理商为其销售商品。通过代理商这种销售模式,普通消费者是不直接跟厂家打交道,但是却能获得厂家的商品服务,也就是说,“委托者”对普通消费者来说是不可见的。其次,同一厂家的不同代理商,可以针对自身的情况做一些个性化的营销策略,消费者通过代理商获取不同的服务,但代理商并没有改变厂家的任何策略。我们把代理商和厂家进行抽象,前者可抽...

2019-08-14 07:31:45 169

转载 让CPU告诉你硬盘和网络到底有多慢

前几天看到一篇文章,感觉写的挺有意思的,转载过来分享一下。文章用比较生动的比喻,体现了硬盘和网络延迟在计算机系统到底有多慢,也刷新了我的整体认知,原文链接:让CPU告诉你硬盘和网络到底有多慢,以下时原文:1. 简介经常听到有人说磁盘很慢、网络很卡,这都是站在人类的感知维度去表述的,比如拷贝一个文件到硬盘需要几分钟到几十分钟,够我去吃个饭啦;而从网络下载一部电影,有时候需要几个小时,我都可以...

2019-08-14 07:30:02 69

原创 Java编程拾遗『字节流』

上篇文章中简单介绍了文件和Java IO的概念,我们了解到Java中文件是作为一种特殊的IO设备处理的,并且Java中处理IO是通过流来操作的,流又可以细分为字节流和字符流。本篇文章就重点介绍一下Java IO中的一个重要模块——字节流。字节流的继承体系如下图所示:本文重点介绍如下几种字节流:InputStream/OutputStream: 基类,抽象类。 ByteArrayInp...

2019-08-14 07:28:11 63

原创 Java编程拾遗『文件和IO概述』

从本文开始,讲述Java中文件和IO的相关知识。在做企业web开发时,文件操作相对涉及的比较少,在桌面系统开发中比较常见。正因如此,导致很多人对文本文件、二进制文件、字节流、字符流等概念性的东西都不能完全搞清楚。其实在我在写这篇文章之前,也是分不清的,但是因为日常工作中也很少涉及相关的内容,所以一直也没深究。本篇文章就来科普一下一些基本概念,同时介绍一下Java IO体系。1. 基本概念1...

2019-08-14 07:26:59 35

转载 MySQL InnoDB锁介绍及不同SQL语句分别加什么样的锁

原文链接:https://blog.csdn.net/iceman1952/article/details/85504278本文中,我们详细介绍MySQL InnoDB存储引擎各种不同类型的锁,以及不同SQL语句分别会加什么样的锁。阅读提示本文所参考的MySQL文档版本是8.0,做实验的MySQL版本是8.0.13 本文主要参考了MySQL官方文档InnoDB锁定和事务机制 本文...

2019-08-14 07:25:37 54

原创 wordpress被攻击之后的一些总结

今天早晨在在公司打开电脑,吃着早饭,翻着自己之前写的一篇文章,回到主页时发现,出现了很多英文的发布(乱七八糟的内容),第一反应就是被攻击了,赶紧到仪表盘去看一下,发现这时候站点所有的url都已经无法访问了。我的这个个人站点是部署在一个虚拟主机上的,所以我赶紧去运营商的控制台检查一下。到了我也很茫然,因为我对php一无所知。好在控制台看到了phpMyAdmin,之前都没注意到这个东西的存在==。...

2019-08-14 07:18:48 1205

原创 Java编程拾遗『EnumSet』

上篇文章讲了EnumMap的实现,本篇文章按照惯例,介绍一下存储枚举类型集合Set类——EnumSet。但是跟之前HashSet和HashMap、TreeSet和TreeMap的关系不同,EnumSet不是依靠EnumMap实现的,甚至可以讲,实现方式跟EnumMap完全没有关系。另外和HashSet、TreeSet不同的是,EnumSet是抽象类,而HashSet、TreeSet是非抽象的。En...

2019-08-14 07:17:17 70

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