
架构技术
我是小泽呀!
这个作者很懒,什么都没留下…
展开
-
程序员,你可知Java 反射的黑科技?
众所周知,反射是 Java 的一大利器,它可以做到许多看起来不可思议的事情,但是用得不好也会给我们的系统挖下许多坑。下面就介绍一个反射的黑科技,请充分理解并消化里面的知识~~,并把这项技术用到实际的项目中去~~。在开始之前,我们先来念两句诗,代码如下:public static void main(String[] args) { recitePoems(false); r...原创 2019-05-24 21:50:02 · 257 阅读 · 0 评论 -
创业公司技术总监,自信满满面试上市公司,结果不期而然!
1、先来个故事主人公介绍这是我朋友的故事,以第一人称来介绍首先,大概介绍下自己,后端开发8年,头两年用.NET,之后用Python至今,大概六年。大概工作到第三年的时候,就开始兼着任管理职位。工作地点是在一个三、四线的沿海城市,本地IT业不发达,公司规模普遍偏小,对技术要求不高,但需要较为全面的人才。而我长时间在这样的氛围下工作,慢慢也成长为一位偏“全栈”的WEB开发人员,从前...原创 2019-08-05 16:54:49 · 406 阅读 · 1 评论 -
最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这!
优化一览图优化笔者将优化分为了两大类:软优化和硬优化。软优化一般是操作数据库即可;而硬优化则是操作服务器硬件及参数设置。1、软优化1)查询语句优化首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息。例: DESC SELECT * FROM `user`显示:其中会显示索引和查询数据读取数据条数等信息...原创 2019-08-01 16:14:34 · 417 阅读 · 0 评论 -
Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现数据分表+读写分离
读写分离在上一篇文章介绍了如何使用Sharing-JDBC实现数据库的读写分离。读写分离的好处就是在并发量比较大的情况下,将查询数据库的压力 分担到多个从库中,能够满足高并发的要求。比如上一篇实现的那样,架构图如下:数据分表当数据量比较大的时候,比如单个表的数据量超过了500W的数据,这时可以考虑将数据存储在不同的表中。比如将user表拆分为四个表user0、user1、 user...原创 2019-08-06 10:00:34 · 291 阅读 · 0 评论 -
进阶中的程序员:深入解析 Spring boot(含PDF文档分享)
深入实践Spring Boot这次分享从技术、实践和原理3个维度对Spring Boot进行了系统且深入的讲解,介绍了如何使用Spring Boot开发框架进行基础应用和分布式应用等方面的开发,并且介绍了如何使用Spring Boot开发的应用搭建一个高性能的服务平台,同时还对Spring Boot的一些核心功能的源码进行了分析,从而加深对Spring Boot的理解。Spring...原创 2019-08-13 14:39:00 · 1392 阅读 · 0 评论 -
面试官:为何MySQL索引要使用B+树而不是其它树形结构?比如B树?
一个问题?InnoDB一棵B+树可以存放多少行数据?这个问题的简单回答是:约2千万为什么是这么多呢?因为这是可以算出来的,要搞清楚这个问题,我们先从InnoDB索引数据结构、数据组织方式说起。我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛。在计算机中磁盘存储数据最小单元是扇区,一个扇区的大小是512字节,而文件系统(例如XFS/E...原创 2019-08-18 22:02:29 · 411 阅读 · 1 评论 -
Redis集群架构+Dubbo开发框架+SSO单点登录+Nginx+ZooKeeper
Redis集群架构【课程介绍】Redis是现在使用为广泛的NoSQL数据库技术,其自身不仅拥有着良好的操作性能,也被广泛的应用于各种集群架构的数据整合处理之中,而本课程将通过Redis的核心作用,以及单实例redis存在的问题为读者进行分析,而后重点讲解redis官方给出的集群实现方案。【课程收益】本课程主要为读者讲解redis各种集群架构开发技术的使用,包括:Sentin...原创 2019-08-09 15:03:18 · 298 阅读 · 0 评论 -
一线互联网公司Java大牛一书带你深入浅出MyBatis技术原理与实战
写在前面MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。本书以讲解MyBatis基础运用...原创 2019-08-19 15:24:48 · 310 阅读 · 0 评论 -
HashMap实现原理:容量、负载因子、hash与定位都搞定了吗?
HashMap是常考点,而一般不问List的几个实现类(偏简单)。以下基于JDK1.8.0_102分析。JDK版本:oracle java 1.8.0_102内部存储HashMap的内部存储是一个数组(bucket),数组的元素Node实现了是Map.Entry接口(hash, key, value, next),next非空时指向定位相同的另一个Entry,如图:容量(c...原创 2019-08-19 20:59:44 · 318 阅读 · 0 评论 -
阿里架构师用心整理JVM与性能优化核心知识分享
JVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是平台无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平...原创 2019-08-10 16:16:40 · 320 阅读 · 0 评论 -
亿级请求下多级缓存那些事,你全部吃下了吗?
什么是多级缓存所谓多级缓存,即在整个系统架构的不同系统层级进行数据缓存,以提升访问效率,这也是应用最广的方案之一。我们应用的整体架构如图1所示:图1 多级缓存方案文末有福利赠送,如果你感兴趣的话可以去领取架构资料。整体流程如上图所示:1)首先接入Nginx将请求负载均衡到应用Nginx,此处常用的负载均衡算法是轮询或者一致性哈希,轮询可以使服务器的请求更加均衡,而一致性哈希...原创 2019-08-19 22:25:47 · 349 阅读 · 0 评论 -
再见微服务,从100多个问题儿童到一个超级明星
本文翻译自Alexandra Noonan 的 Goodbye Microservices: From 100s of problem children to 1 superstar。内容是描述 Segment 的架构如何从 「单体应用」 -> 「微服务」 -> 「140+ 微服务」 -> 「单体应用」 的一个历程。翻译比较粗糙,如有疏漏,请不吝指教。注:下文说的目的地就是...原创 2019-08-15 11:39:39 · 256 阅读 · 0 评论 -
超全面详解Java开发环境搭建(看完收藏)
在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必须阶段,只有开发环境搭建好了,方可进行开发,良好的开发环境搭建,为后续的开发工作带来极大便利。对于大公司来说,软件开发环境搭建工作一般是由运维来做,然而,对于小公司来说,这个工作就交给开发人员来做了,如开发经理。不管这个工作是交给运维人员做,还是交给开发人员做,能确定的是:做这件事的人,一定是个资深的人,如此,方可让开发环境稳定运行...原创 2019-08-12 10:28:05 · 660 阅读 · 0 评论 -
SpringBoot+JWT+Shiro+MybatisPlus实现Restful开发后端脚手架
一、背景前后端分离已经成为互联网项目开发标准,它会为以后的大型分布式架构打下基础。SpringBoot使编码配置部署都变得简单,越来越多的互联网公司已经选择SpringBoot作为微服务的入门级微框架。Mybatis-Plus是一个 Mybatis 的增强工具,有代码生成器,并且提供了类似hibernate的单表CRUD操作,又保留了mybatis的特性支持定制化 SQL。Apache...原创 2019-08-12 10:53:45 · 341 阅读 · 0 评论 -
周一福利!分享Nginx实战——取代Apache的高性能Web服务器
众所周知,Nginx(engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,...原创 2019-08-12 10:58:40 · 436 阅读 · 0 评论 -
全面解析大数据批处理框架Spring Batch,所谓完美解析方案是什么?
如今微服务架构讨论的如火如荼。但在企业架构里除了大量的OLTP交易外,还存在海量的批处理交易。在诸如银行的金融机构中,每天有3-4万笔的批处理作业需要处理。针对OLTP,业界有大量的开源框架、优秀的架构设计给予支撑;但批处理领域的框架确凤毛麟角。是时候和我们一起来了解下批处理的世界哪些优秀的框架和设计了,今天我将以Spring Batch为例,和大家一起探秘批处理的世界。初识批处理典型场景 ...原创 2019-08-21 17:07:43 · 1078 阅读 · 0 评论 -
抽象同步队列AQS——AbstractQueuedSynchronizer锁详解
AQS——锁的底层支持谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...并发包的底层就是使...原创 2019-07-22 20:57:32 · 280 阅读 · 0 评论 -
如何进行高效的源码阅读:以Spring Cache扩展为例带你搞清楚
摘要日常开发中,需要用到各种各样的框架来实现API、系统的构建。作为程序员,除了会使用框架还必须要了解框架工作的原理。这样可以便于我们排查问题,和自定义的扩展。那么如何去学习框架呢。通常我们通过阅读文档、查看源码,然后又很快忘记。始终不能融汇贯通。本文主要基于Spring Cache扩展为例,介绍如何进行高效的源码阅读。SpringCache的介绍为什么以Spring Cache为...原创 2019-07-25 21:51:58 · 225 阅读 · 0 评论 -
不了解这12个语法糖,别说你会Java!
本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理语法糖语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使...原创 2019-05-24 22:05:57 · 269 阅读 · 0 评论 -
多线程,到底该设置多少个线程?
一、前言“不好了,线上服务器超时严重,请求非常慢,好像报连接数too many了,怎么办?“小伙伴们在反馈。一般我们的技术老大的处理方式,把连接数和线程池调大点,重启,再观察。往往这个方式是应急措施,治标不治本,因为不知道问题的原因。有个严重误区,以为线程池设置太小了,调大点请求就会快了。今天就带着小伙伴们沟通一下,线程池的大小应该如何合理的设置其大小?二、问题如果有两个任务需要处理...原创 2019-05-25 20:27:44 · 665 阅读 · 0 评论 -
为什么大型互联网都爱用kafka?
Kafka是什么?Kafka通常用于实时流数据架构,以提供实时分析。Kafka正在爆炸式增长。超过三分之一的财富500强企业都使用Kafka。这些公司包括十大旅游公司,十大银行中的七家,十大保险公司中的八家,十大电信公司中的九家,以及更多。LinkedIn,微软和Netflix每天使用Kafka(1,000,000,000,000)处理万亿级的消息。Kafka用于实时数据流,收集大数据或进行实...原创 2019-05-26 21:07:19 · 1073 阅读 · 0 评论 -
【数据结构与算法】主宰这个世界的10大算法
前言如果对算法有所了解,读这篇文章时你可能会问“作者知道算法为何物吗?”,或是“Facebook的‘信息流’(News Feed)算是一种算法吗?”,如果“信息流”是算法,那就可以把所有事物都归结为一种算法。才疏学浅,结合那篇帖子,接下来我试着解释一下算法是什么,又是哪些算法正在主导我们的世界。什么是算法?简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值...原创 2019-05-30 14:33:43 · 302 阅读 · 0 评论 -
如何用Zookeeper实现分布式锁?
1. 背景最近在学习 Zookeeper,在刚开始接触 Zookeeper 的时候,完全不知道 Zookeeper 有什么用。且很多资料都是将 Zookeeper 描述成一个「类 Unix/Linux 文件系统」的中间件,导致我很难将类 Unix/Linux 文件系统的 Zookeeper 和分布式应用联系在一起。后来在粗读了《ZooKeeper 分布式过程协同技术详解》和《从Paxos到Zo...原创 2019-05-28 14:28:06 · 306 阅读 · 0 评论 -
MySQL中的行级锁,表级锁,页级锁
在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制,即用于在并发控制中保证对互斥要求的满足。在DBMS中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎)、表级锁(MYISAM引擎)和页级锁(BDB引擎 )。行级锁行级锁是Mysql中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。行级锁分为**...原创 2019-05-28 14:35:00 · 260 阅读 · 0 评论 -
MySQL中的共享锁与排他锁
在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突。行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念、使用方式及注意事项等。共享锁(Share Lock)共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。如果事务T对数...原创 2019-05-28 14:48:34 · 474 阅读 · 0 评论 -
想要学好分布式,那你就得懂ACP理论
2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。无论你是一个系统架构师,还是一个普通开发,当你开发或者设计一个分布式系统的时候,CAP理论是无论如何也绕不过去的。本文就来介绍一下到底什么是CAP理论...原创 2019-05-28 15:09:47 · 1890 阅读 · 0 评论 -
Java程序员中8种常见的SQL错误用法
1、LIMIT 语句分页查询是最常用的场景之一,但也通常也是最容易出问题的地方。比如对于下面简单的语句,一般 DBA 想到的办法是在 type, name, create_time 字段上加组合索引。这样条件排序都能有效的利用到索引,性能迅速提升。SELECT * FROM operation WHERE type = 'SQLStats' AND name = 'S...原创 2019-05-31 15:58:17 · 603 阅读 · 0 评论 -
面试前必知Redis面试题—缓存雪崩+穿透+缓存与数据库双写一致问题
今天来分享一下Redis几道常见的面试题: 如何解决缓存雪崩? 如何解决缓存穿透? 如何保证缓存与数据库双写时一致的问题? 一、缓存雪崩1.1什么是缓存雪崩?回顾一下我们为什么要用缓存(Redis):现在有个问题,如果我们的缓存挂掉了,这意味着我们的全部请求都跑去数据库了。在前面学习我们都知道Redis不可能把所有的数据都缓存起来(内存昂贵且有...原创 2019-07-04 21:57:08 · 292 阅读 · 0 评论 -
死磕设计模式之单例模式,饿汉、懒汉统统搞定
单例模式单例模式可能是代码最少的模式了,但是少不一定意味着简单,想要用好、用对单例模式,还真得费一番脑筋。本文对Java中常见的单例模式写法做了一个总结,如有错漏之处,恳请读者指正饿汉1.饿汉如果应用程序总是创建并使用单例实例或在创建和运行时开销不大classSingle {private Single(){} private static Single single= ne...原创 2019-07-05 17:33:17 · 326 阅读 · 0 评论 -
程序员懵逼时刻:几个月后,之前自己写的代码也看不懂了?
程序员们大多都会有过这样的经历,就是要看别人写的代码。比如说公司有同事离职了,他的业务就需要有其它的小伙伴们给接下来继续维护。这对好多程序员来说是一种折磨,边看边骂,这写的是什么东西呀。相信好多人都有这种经历。那么为什么会出现这样一个局面呢,其实这里面就有很多讲究的地方了,如果不注意的话,不光是看不懂别人写的代码,即使是自己写的代码,几个月后你再去瞧瞧,你也会发现,咦,看不懂了呢。...原创 2019-07-05 17:56:18 · 665 阅读 · 0 评论 -
分布式系统的负载均衡 【架构干货,收藏不看系列】
一、 什么是负载均衡?什么是负载均衡?记得第一次接触 Nginx 是在实验室,那时候在服务器部署网站需要用 Nginx 。Nginx 是一个服务组件,用来反向代理、负载平衡和 HTTP 缓存等。那么这里的 负载均衡 是什么?负载均衡(LB,Load Balance),是一种技术解决方案。用来在多个资源(一般是服务器)中分配负载,达到最优化资源使用,避免过载。资源,相当于每个服务...原创 2019-07-18 18:34:19 · 298 阅读 · 0 评论 -
springboot + redis + 注解 + 拦截器 实现接口幂等性校验
一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能会多次回调, 必须处理重复回调普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次等等二、常见解决方案唯一索引 -- 防止新增脏数据token机制 -- 防止页...原创 2019-07-18 22:44:14 · 273 阅读 · 0 评论 -
Java多线程之Executor框架【Callable、Future、Executor和ExecutorService】
引言Executor框架是指JDK 1.5中引入的一系列并发库中与Executor相关的功能类,包括Executor、Executors、ExecutorService、Future、Callable等。一、为什么要引入Executor框架?1、如果使用new Thread(...).start()的方法处理多线程,有如下缺点:① 开销大。对于JVM来说,每次新建线程和销毁线程都会...原创 2019-07-20 20:53:08 · 537 阅读 · 0 评论 -
Scala学习笔记系列:面向对象?那就先聊聊“对象”
Scala中有个特殊关键字object,通过声明object类型,可以实现单例模式。在object类型内部,可以定义静态属性或方法,但第一次调用object实例中的方法时,会自动执行其构造器中的逻辑(即未定义在方法中的代码,统一归为构造器中的代码)。但object类型不能定义构造器来接受入参。object类型对象的适用场景,一种是上面说的用于实现单例模式,另一种则是作为静态工具类使用。先来看一...原创 2019-07-30 15:47:37 · 249 阅读 · 0 评论 -
最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这
优化一览图优化笔者将优化分为了两大类:软优化和硬优化。软优化一般是操作数据库即可;而硬优化则是操作服务器硬件及参数设置。1、软优化1)查询语句优化首先我们可以用EXPLAIN或DESCRIBE(简写:DESC)命令分析一条查询语句的执行信息。例: DESC SELECT * FROM `user`显示:其中会显示索引和查询数据读取数据条数等信息。...原创 2019-07-30 21:25:51 · 290 阅读 · 0 评论 -
技术面试官总结Nginx常见架构,原来你经常忽略这些问题
常见的nginx中间件架构1、静态资源web服务(文件读取sendfile、tcp_nopush、tcp_nodelay、压缩,预读gzip模块) 2、代理服务 3、负载均衡调度器SLB 4、动态缓存(添加cache-control、expires头) 静态资源处理静态资源访问、压缩nginx配置server{ listen 80; server_name loca...原创 2019-08-22 15:11:34 · 392 阅读 · 0 评论