自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

void

莫等闲

  • 博客(132)
  • 资源 (4)
  • 收藏
  • 关注

原创 Java泛型深入理解

Java泛型,包括Java泛型的实现,泛型擦除以及相关面试题,通配符理解

2016-07-21 23:24:28 96504 38

原创 Java并发机制及锁的实现原理

Java并发机制及锁实现原理

2016-07-18 20:04:21 25714

原创 Java内存模型与Java线程的实现原理

Java内存模型与Java线程的实现原理

2016-07-15 23:52:18 11140 2

原创 栈、队列面试题

栈和队列的面试题

2016-07-10 17:10:14 2461

原创 锁与并发-SQL Server

并发可以定义为多个进程同时访问或修改共享数据的能力。处于活动状态而互不干涉的并发用户进程的数量越多,数据库系统的并发性就越好。当一个正在修改数据的进程阻止了其他进程读取该数据,或者当一个正在读取数据的进程阻止了其他进程修改该数据,并发性就降低了。本文用术语“读取”或者“访问”描述数据上的SELECT操作,用“写入”或“修改”描述数据上的INSERT,UPDATE以及DELETE操作。一般地,数...

2016-07-07 13:33:05 7178 3

原创 索引的访问-SQL Server

索引的访问,数据库索引的访问方式

2016-07-06 15:22:04 2130

原创 树-面试题

树 面试题

2016-07-04 19:26:27 1944

转载 DDD系列第四讲:领域层设计规范

在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层、基础设施层的设计。但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在Entity、ValueObject 还是 DomainService是值得用心思考的,既要避免未来的扩展性差,又要确保不会过度设计导致复杂性。今天我用一个相对轻松易懂的领域做一个案例演示,但在实际业务应用中,无论是交易、营销还是互动,都可以用类似的逻辑来实现。初探龙与魔法的世界架构背景和规则平日里看了好多严肃的

2021-01-03 18:02:20 1419

转载 阿里技术专家详解DDD系列 第三讲 - Repository模式

为什么要用 Repository实体模型 vs. 贫血模型Entity(实体)这个词在计算机领域的最初应用可能是来自于Peter Chen在1976年的“The Entity-Relationship Model - Toward a Unified View of Data"(ER模型),用来描述实体之间的关系,而ER模型后来逐渐的演变成为一个数据模型,在关系型数据库中代表了数据的储存方式。而2006年的JPA标准,通过@Entity等注解,以及Hibernate等ORM框架的实现,让很多Java开

2021-01-03 16:28:15 1143

转载 阿里技术专家详解DDD系列 第二弹 - 应用架构

前言架构这个词源于英文里的“Architecture“,源头是土木工程里的“建筑”和“结构”,而架构里的”架“同时又包含了”架子“(scaffolding)的含义,意指能快速搭建起来的固定结构。而今天的应用架构,意指软件系统中固定不变的代码结构、设计模式、规范和组件间的通信方式。在应用开发中架构之所以是最重要的第一步,因为一个好的架构能让系统安全、稳定、快速迭代。在一个团队内通过规定一个固定的架构设计,可以让团队内能力参差不齐的同学们都能有一个统一的开发规范,降低沟通成本,提升效率和代码质量。在做架构设

2021-01-03 15:37:02 566

转载 阿里技术专家详解 DDD 系列- Domain Primitive

  导读:对于一个架构师来说,在软件开发中如何降低系统复杂度是一个永恒的挑战,无论是 94 年 GoF 的 Design Patterns , 99 年的 Martin Fowler 的 Refactoring , 02 年的 P of EAA ,还是 03 年的 Enterprise Integration Patterns ,都是通过一系列的设计模式或范例来降低一些常见的复杂度。但是问题在于,这些书的理念是通过技术手段解决技术问题,但并没有从根本上解决业务的问题。所以 03 年 Eric Evans 的

2021-01-03 12:45:50 681

转载 Java8 optional入门

Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。Optional 类的引入很好的解决空指针异常。类声明以下是一个 java.util.Optional 类的声明:public final class Optional<T> extends Object前言

2020-09-20 00:06:03 284

原创 Java 8 Stream入门

Java 8 Stream入门简介示例什么是 Stream?Stream操作的两个基础特征生成流Stream中间操作forEachmapfilterlimitsorteddistinctskipparallelStream中止操作返回列表返回字符串判定allMatchanyMatchnoneMathch查找findFirstfindAny统计分组并行流式数据处理简介Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数

2020-09-19 23:43:50 256

转载 Golang 协程调度

一、线程模型N:1模型,N个用户空间线程在1个内核空间线程上运行。优势是上下文切换非常快但是无法利用多核系统的优点。1:1模型,1个内核空间线程运行一个用户空间线程。这种充分利用了多核系统的优势但是上下文切换非常慢,因为每一次调度都会在用户态和内核态之间切换。(POSIX线程模型(pthread),Java)M:N模型, 每个用户线程对应多个内核空间线程,同时也可以一个内核空间线程对应多个用...

2020-03-22 20:40:43 1456

转载 Epoll的本质(内部实现原理)

从事服务端开发,少不了要接触网络编程。epoll作为linux下高性能网络服务器的必备技术至关重要,nginx、redis、skynet和大部分游戏服务器都使用到这一多路复用技术。

2020-03-22 19:44:43 4414 2

转载 golang读写锁实现与核心原理分析

读写锁的特点  读写锁区别与互斥锁的主要区别就是读锁之间是共享的,多个goroutine可以同时加读锁,但是写锁与写锁、写锁与读锁之间则是互斥的写锁饥饿问题  因为读锁是共享的,所以如果当前已经有读锁,那后续goroutine继续加读锁正常情况下是可以加锁成功,但是如果一直有读锁进行加锁,那尝试加写锁的goroutine则可能会长期获取不到锁,这就是因为读锁而导致的写锁饥饿问题golang...

2020-03-10 18:41:01 1342

转载 golang mutex源码详细解析

  目前golang的版本是1.12,其中的mutex是增加了普通模式和饥饿模式切换的优化版本,为了便于理解,这里先从上一个版本1.7版本的mutex开始分析,以后再对优化版本进行说明。1.7版本Mutex实现Mutex定义// mutex是互斥锁// mutex的零值是没有加锁的//在使用之后不能被拷贝type Mutex struct { state int32 //状态...

2020-03-10 18:14:39 909

转载 GO 互斥锁实现原理剖析

前言  互斥锁是并发程序中对共享资源进行访问控制的主要手段,对此Go语言提供了非常简单易用的Mutex,Mutex为一结构体类型,对外暴露两个方法Lock()和Unlock()分别用于加锁和解锁。  Mutex使用起来非常方便,但其内部实现却复杂得多,这包括Mutex的几种状态。另外,我们也想探究一下Mutex重复解锁引起panic的原因。  按照惯例,本节内容从源码入手,提取出实现原理,又...

2020-03-10 17:08:42 1718 2

转载 Golang 限流器 time/rate 使用介绍

  本主题为系列文章,分上下两篇。本文主要介绍 time/rate 的具体使用方法,另外一篇文章 《Golang 限流器 time/rate 实现剖析》 则着重介绍其内部实现原理。  限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。限流器的实现方法有很多种,例如滑动窗口法、Token Bucket、Leaky Bucket 等。  其实 golang 标准库...

2020-01-26 21:52:19 1453

转载 幂等

什么是幂等  简单说来,如果一个操作多次执行所产生的影响等价于执行一次的影响,我们就称之为幂等。  实际系统中,幂等是一个极为重要的概念。无论是在大型互联网应用还是企业级架构中,我们都见到REST API被越来越多的采用。而正确实现幂等,往往是API中最难的技术点之一。为什么重要,举一个简单易懂的例子。  比如,你要处理一次电商网站收款或者付款的交易。当你给微信支付发送这个付款请求后,一个理...

2019-11-28 23:58:22 912

转载 微服务架构实现最终一致性的三种模式

  根据CAP理论,必须在可用性(Availability)和一致性(Consistency)之间做出选择。如果选择提供一致性,则需要付出在满足一致性之前阻塞其他并发访问的代价。这可能持续一段不确定的时间,尤其是系统已经表现出高延迟或者由于网络故障而失去连接时。  依据目前的成功经验,选择可用性一般更有利于微服务架构的构建,但是在服务和数据库之间维护数据一致性是非常根本的需求,在微服务架构中应该...

2019-11-24 12:56:23 2572

转载 Serverless概述

概念  我们把 Serverless 拆解为 server 和 less 两个单词,从字面上推断词意即为“少服务器的,亦或是无服务器的”。当然这并非指应用架构中是没有服务器资源的,而是通过 Serverless 这种服务形态,用户在使用对应的服务时,不需要关心或较少关心服务器的硬件资源、软件资源、稳定性等等,这些通常已经由云计算厂商提供设施、服务和 SLA 保障,完全托管给云计算厂商。而用户只需...

2019-11-19 17:33:09 607

转载 1.3万亿条数据查询如何做到毫秒级响应?

  知乎,在古典中文中意为“你知道吗?”,它是中国的 Quora,一个问答网站,其中各种问题由用户社区创建,回答,编辑和组织。  作为中国最大的知识共享平台,我们目前拥有 2.2 亿注册用户,3000 万个问题,网站答案超过 1.3 亿。随着用户群的增长,我们的应用程序的数据大小无法实现。我们的 Moneta 应用程序中存储了大约 1.3 万亿行数据(存储用户已经阅读过的帖子)。  由于每月...

2019-11-18 17:50:12 650

转载 架构师必须了解的30条设计原则

众所周知,架构师的角色,更偏向于策划、而非指挥,塑造、而非支配,其存在的意义,在于引导大家讨论、而非自己主宰一切。但是,具体应该如何执行呢?本文作者整理了 30 个公认的架构原则,来帮助大家解决此问题。也许有的原则,你从未听说,但你看完就能快速学会。相信你学会了,工作起来也会事半功倍,或许还可帮你避免很多无用的加班!在 WSO2,我参与架构评审的时间已长达八年之久。WSO2 的产品非常丰富,...

2019-11-18 17:09:00 352

原创 压测模型及其优缺点

压测模型抽象压测模型可以被抽象为如图所示的模型该模型主要包含如下三个部分:压测环境准备环境准备是压测的基础,主要包括1、压力机资源2、被压测系统3、依赖资源压测任务准备压测任务准备主要是为了梳理压测目标,确定压测方案,可以细化为如下几个方面:压测目标:比如期望达到的QPS、稳定性要求。压测场景:业务场景的选取、组合压测策略:逐步加压,增大脉冲,并发量等。压测执行闭环压...

2019-11-13 20:59:12 2021

转载 物化视图

Oracle物化视图  Oracle的物化视图是包括一个查询结果的数据库对像。将一些大的耗时的表连接用物化视图实现,会提高查询的效率。  物化视图在某种意义上说就是一个 物理表,物化视图会占用数据库磁盘空间,甚至可以创建索引。数据生成模式Build Immediate  创建物化视图的时候就生成数据 。Build Deferred(默认)  在创建时不生成数据,以后根据需要在生成数据...

2019-10-13 12:55:09 420

原创 分库分表

  互联网行业中,由于有庞大的用户量存在,所以会产生海量的请求。这些请求产生的交易数据和信息都需要存储在关系型数据库中。由于数据量很大,单个数据库已经难以容纳所有数据,所以产生了分库分表的需求。分库分表,顾名思义,就是使用多个库和多个表甚至多个数据库实例来存储海量的数据。什么是分库分表  数据拆分是对数据分而治之的通用概念,在数据库存储方面是通过分库分表来实现数据拆分的,对数据的拆分主要体现在...

2019-10-09 22:21:59 498

转载 什么是分布式锁?

单机多线程并发分布式集群环境下的多线程并发分布式锁的实现1 Memcached分布式锁利用Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程得到了锁。2 Redis分布式锁和Memcached的方式类似,利用Redis的setnx命令。此命令同样是原子性操作,只有在key不存在的情况下,才能set成功。(setn...

2019-08-12 13:20:10 204

原创 pprof (golang 性能监控与分析)

参考文章https://blog.wolfogre.com/posts/go-ppof-practice/https://xguox.me/go-profiling-optimizing.html/https://segmentfault.com/a/1190000016412013https://github.com/google/pprof示例代码package mainimp...

2019-06-27 14:01:25 17326 2

原创 golang 深入理解map引用类型

理解指针什么是指针?指针是一种特殊的类型,指针变量的值是一个地址,该地址指向一个“指针类型”的变量指针声明var 指针变量名 *指针类型示例package mainimport( "fmt")func main() { var int_value = 10 var int_ptr = &int_value fmt.Printf("The ...

2019-05-28 13:07:35 4958 1

转载 TiDB 单机安装

官方地址: https://github.com/pingcap/docs-cn1 下载压缩包# 下载Tidb[root@admxj-core ~]# wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz# 下载Tidb校验文件wget http://download.pingcap.org/tidb-latest...

2019-05-22 16:58:19 711

转载 缓存更新的套路

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。我不知道为什么这么多人用的都是这个逻辑...

2019-05-10 21:10:27 239

原创 go面向对象 vs c++面向对象

面向对象的四大特性抽象—数据抽象(属性)和过程抽象(方法)封装—限定对外方法,控制数据访问继承—数据共享、代码重用多态—派生对象就是父对象c++ 抽象和封装#include <iostream>using namespace std;class rect {private: int length; //长度 int width; //宽度pu...

2019-04-11 17:28:06 339

原创 Redis设计与实现——读书笔记

数据结构与对象SDS(Simple Dynamic String)struct sdshdr { int len;//已使用字节数 int free;//未使用字节数 char buf[];//字节数组}特点:1、空间预分配策略,减少内存重分配次数(内存分配涉及系统调用)。2、获取长度O(1),通过属性记录字符串长度。3、杜绝缓冲区一次,通过API对SDS进行修改时,会先检查...

2019-03-28 23:28:31 262

原创 select、poll、epoll、同步、异步、阻塞、非阻塞总结

IO多路复用之select、poll、epoll综述目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,pselect,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写...

2019-02-28 10:53:28 4274

原创 Unix环境高级编程——学习笔记

第七章 进程环境引言main函数是如何被调用的?命令行参数是如何传送给执行程序的?典型的存储器布局是什么样式?如何分配另外的存储空间?进程如何使用环境变量?进程终止的不同方式?main函数main函数的原型是:int main(int argc, char *argv[ ]) ;argc:命令行参数的数目。argv:指向各个参数的指针所构成的数组。进程终止(1) 正常...

2019-02-28 10:52:13 4955

原创 kubernetes权威指南——入门概述

Kubernetes是什么  首先,它是一个全新的基于容器技术的分布式架构领先方案,简称K8s。K8s是Borg的一个开源版本,Borg是谷歌内部一个久负盛名的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化以及跨数据中心的资源利用率最大化。  其次,如果我们的系统设计遵循了K8s的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,都可以立刻从我们的视线中消...

2019-02-24 14:48:31 420

原创 深入理解PHP内核——变量及数据类型

静态类型语言 VS 动态类型语言从类型的维度来看,编程语言可以分为三大类:静态类型语言,比如:C/Java等,在静态语言类型中,类型的检查是在编译期(compile-time)确定的, 也就是说在运行时变量的类型是不会发生变化的。动态类型语言,比如:PHP,python等各种脚本语言,这类语言中的类型是在运行时确定的, 那么也就是说类型通常可以在运行时发生变化无类型语言,,比如:汇编语言...

2019-02-22 16:55:01 646

原创 深入理解PHP内核——PHP脚本执行的生命周期

用户代码的执行PHP代码运行示意图当用户代码输入给PHP内核去执行的时候, PHP内核会对PHP代码进行词法分析和语法分析, 词法分析是把PHP代码分割成一个个的“单元”(TOKEN), 语法分析则将这些“单元”转化为Zend Engine可执行的操作。 然后PHP内部的Zend Engine对这些操作进行顺次的执行。Zend Engine是PHP内核的核心部分,负责最终操作的执形和结果的返...

2019-02-22 14:50:48 910

原创 Linux 下 Gin 安装

Go环境搭建Go 环境搭建参看:https://blog.csdn.net/sunxianghuang/article/details/87808103下载安装Gin框架$ go get -u github.com/gin-gonic/ginGin框架使用示例GinTest.go源码package mainimport "github.com/gin-gonic/gin"fu...

2019-02-20 18:02:30 3195

CloudSim-3.0.3

CloudSim-3.0.3

2017-03-22

NoSql数据库入门

NoSql数据库入门

2016-08-26

深入理解Java虚拟机

[深入理解Java虚拟机:JVM高级特性与最佳实践].周志明.高清扫描版

2016-07-11

Java并发编程的艺术

Java并发编程的艺术 PDF

2016-07-11

空空如也

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

TA关注的人

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