04 2018 档案
摘要:I/O类型: 同步和异步 阻塞和非阻塞 一次read操作两个阶段:用户空间的进程没有权限访问磁盘的,进程发起IO调用 (1)等待数据准备好:内核从磁盘中的数据加载至内核内存 (2)真正IO的阶段:内核内存数据在复制到进程内存(这个是真正执行IO的阶段) 一次read操作两个阶段:用户空间的进程没有权
阅读全文
摘要:一、什么是CAS? 在计算机科学中,比较和交换(Conmpare And Swap)是用于实现多线程同步的原子指令。 它将内存位置的内容与给定值进行比较,只有在相同的情况下,将该内存位置的内容修改为新的给定值。 这是作为单个原子操作完成的。 原子性保证新值基于最新信息计算; 如果该值在同一时间被另一
阅读全文
摘要:什么是幂等性 HTTP/1.1中对幂等性的定义是:一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。 Methods can also have the property of “idempotence
阅读全文
摘要:前言 说到IO模型,都会牵扯到同步、异步、阻塞、非阻塞这几个词。从词的表面上看,很多人都觉得很容易理解。但是细细一想,却总会发现有点摸不着头脑。自己也曾被这几个词弄的迷迷糊糊的,每次看相关资料弄明白了,然后很快又给搞混了。经历过这么几次之后,发现这东西必须得有所总结提炼才不至于再次混为一谈。尤其是最
阅读全文
摘要:枚举(enum),是指一个经过排序的、被打包成一个单一实体的项列表。一个枚举的实例可以使用枚举项列表中任意单一项的值。枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确的量。Java从JDK5开始,引入了对枚举的支持。 在枚举出现之前,如
阅读全文
摘要:一、static 修饰符 数据共享 修饰变量: 每个对象都共有的属性就可以设置为static,被修饰的成员被所有的对象共享,且可以直接用 类名.X静态成员 的方式调用 static优先于对象存在,因为static成员随类的加载就已经存在了 修饰方法:静态方法 静态方法只能访问静态成员(非静态既可以访
阅读全文
摘要:1 前言 数据库大并发操作要考虑死锁和锁的性能问题。看到网上大多语焉不详(尤其更新锁),所以这里做个简明解释,为下面描述方便,这里用T1代表一个数据库执行请求,T2代表另一个请求,也可以理解为T1为一个线程,T2 为另一个线程。T3,T4以此类推。下面以SQL Server(2005)为例。 数据库
阅读全文
摘要:前言 控制并发的方法很多,从最基础的synchronized,juc中的lock,到数据库的行级锁,乐观锁,悲观锁,再到中间件级别的redis,zookeeper分布式锁。特别是初级程序员,对于所谓的锁一直都是听的比用的多,第一篇文章不深入探讨并发,更多的是一个入门介绍,适合于初学者,主题是“根据并
阅读全文
摘要:分布式遭遇并发 在前面的章节,并发操作要么发生在单个应用内,一般使用基于JVM的lock解决并发问题,要么发生在数据库,可以考虑使用数据库层面的锁,而在分布式场景下,需要保证多个应用实例都能够执行同步代码,则需要做一些额外的工作,一个最典型分布式同步方案便是使用分布式锁。 分布式锁由很多种实现,但本
阅读全文
摘要:一、前言 最近刚刚结束转岗以来的第一次双11压测,收获颇多,难言言表, 本文就先谈谈异步日志吧,在高并发高流量响应延迟要求比较小的系统中同步打日志已经满足不了需求了,同步打日志会阻塞调用打日志的线程,而打日志本身是需要写磁盘的,所以会造成rt增加。异步日志就是为了解决这个问题。 二、日志打印模型 同
阅读全文
摘要:我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在一定的时间或条件下,在
阅读全文
摘要:前言: 锁分3种:java锁、分布式锁、DB锁 分布式锁的几种实现方式 目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和
阅读全文
摘要:前言: 锁分3种:java锁、分布式锁、DB锁 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多锁的名词,这些分类并
阅读全文
摘要:1、特征:... 2、方法可变参数,必须是方法参数列表的最后一位。 3、一个方法只能有一个方法可变参数。 4、方法可变参数本质是一个数组。 5、调用时按照方法可变参数赋值,多余的实参被封装成一个数组,传递给可变参数。
阅读全文
摘要:在我踏入软件行业后,一直苦于没有前辈指点。我常年困惑于两个问题:一是怎样培养面向对象设计的思维能力?二是怎样进行架构设计,有无方法? 因为我做了那么多年项目,却很少看到有漂亮的面向对象思维写出来的代码,觉得有必要提醒下年轻从业者。如今总结一下自己的经历,希望对刚刚入行的朋友有些启发吧。 我的基本观念
阅读全文
摘要:前言: 具体实现: 高性能:合理使用算法,数据结构等等 可重用:封装、继承 可扩展:多态 易维护、易理解:命名规范 + 注解 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节;这种思想 是将数据作为第一位,而方法或者说是算
阅读全文
摘要:这篇文章不适合深入学习设计模式,因为没有代码,没有模式扩展。 正确的使用方式:1. 初学者在深入学习之前先留下一个粗略的印象。2. 已经系统学习了设计模式的人快速回顾。 简单工厂模式 核心思想:将类的创建过程与对象的使用过程分离。 具体实现过程:定义一个工厂,根据参数(通常是字符串)的不同返回不同类
阅读全文
摘要:一、消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以简单地描述为: 当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候。 消息队列主要解决了应用耦合、异步处理、流量削锋等问题。 当前使用较多的消息队列有R
阅读全文
摘要:1、什么是架构和架构本质 无架构,不系统,架构是大型系统的关键。从形上看,架构是系统的骨架,支撑和链接各个部分;从神上看,架构是系统的灵魂,深刻体现业务本质。 这类似建筑设计规划,城市总体规划等,其实就是架构,只是应用的场景不同。 架构的本质就是符合当前业务的发展并可以快速扩展。 2、架构分类 架构
阅读全文
摘要:一、概念: Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase
阅读全文
摘要:前言: 1、引言 我们每天都在接受微信公众号的文章轰炸,我们点赞、转发,甚至保存。然后呢,我们为了什么学习? 我们发现自己有好多东西要学,但是哪些对我们有价值呢?哪些投资回报率不高呢?我们选择的标准是什么? 我们好像懂得了很多东西,但是别人一问,我们却讲不出来…… 我们的职场核心竞争力真的有么?我们
阅读全文
摘要:前言: 要成为优秀合格的架构师,必须具备前瞻性的眼光和系统性的思考能力。而拥有这些能力的前提是你必须完善自己的知识体系。 互联网思维不是工具,它是世界观。这篇文章之后,你可以尝试构建自己的知识体系了。 愿每个人都可以像一个U盘一样,自带系统随处插拔。 愿每个人都可以和别人不一样。 1、通用技能表 1
阅读全文
摘要:前言: 1、走正确的路 如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员们,你们有没有下面几种感觉? 一、我的工作就是按时完成领导交给我的任务,至于代码写的怎样,知道有改进空间,但没时间去改进,关键是领导也不给时间啊。 二、我发现我的水平总是跟不上技术的进步,有太多想
阅读全文
摘要:序言: "比你牛B的人比你还努力,你有什么资格不去奋斗" 前言: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。如果我们要成为架构师,我们自己要面临的三大问题:找准自己定位:我是谁?在哪里?怎样做好架构师:我要做什么?如何搭建
阅读全文
摘要:前言: 哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。 如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论
阅读全文

浙公网安备 33010602011771号