3 真理剑客

尚未进行身份认证

认知你自己

等级
TA的排名 8w+

1、选择消息队列MQ

一、为什么需要MQ1、异步处理更快的返回结果。减少等待,实现了步骤之间的并发,提升系统整体性能。2、流量控制使用消息队列隔离网关和后端服务,以达到流量控制和保护后端服务的目的。秒杀开始后,当短时间内大量的秒杀请求到达网关时,不会直接冲击到后端的秒杀服务,而是先堆积在消息队列中,后端服务按照自己的最大处理能力,从消息队列中消费请求进行处理。令牌桶:单位时间内只发放固定数量的令牌到令牌桶...

2020-03-18 12:44:39

3、Java内存模型(JMM)

Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JMM决定一个线程对共享变量的写入何时对另一个线程可见:并发BUG的源头是可见性、原子性、顺序性,要解决这些问题合理的办法就是 按需禁用缓存和重排序,而JMM则规范了JVM如何提供按需禁用缓存和编译优化的方法,包括 volatile、synchronized 和 final三...

2020-03-17 07:47:04

fail-fast、fail-safe

快速失败、安全失败都是基于迭代器。一、fail-fast抛出ConcurrentModificationException异常。单线程环境:使用迭代器遍历一个集合的过程中,修改了它的结构(增、删、扩容、排序、trim)。使用iterator的remove()方法不会报这个错。多线程环境:当一个线程使用迭代器遍历这个集合,另一个线程修改了这个集合的结构。fail-fast机制是如何起检测的...

2020-03-16 18:13:14

2、Linux多路复用技术 select poll epoll

I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。为什么需要操作系统级的多路复用假如在...

2020-03-11 14:11:08

1、BIO NIO AIO

一、常见I/O模型所有的系统I/O都分为两个阶段:等待就绪和操作。等待就绪动作是不使用CPU的;而真正读和写的操作(将数据从内核拷贝到用户空间)的阻塞是使用CPU的,不过这个过程很快,属于memory copy,可以理解为不耗时。二、传统的BIOBIO在服务器端 同步阻塞处理IO:主要是因为socket.accept()、socket.read()、socket.write()三个函数都是...

2020-03-11 10:23:13

REST-表现层状态转换

REST,Representational State Transfer,即表现层状态转换,指的是一种为了让信息在互联网上顺利传递而设计的软件架构风格,即一种采用标准URI进行调用的方案。REST的核心原则是将API拆分为逻辑上的资源,REST 的核心要素包括资源、表现层和状态转换这三个部分。REST 是一种设计风格,而非协议或标准。而HTTP/HTTPS、HTML、XML等协议是 REST ...

2020-02-17 15:43:38

12、KISS、YAGNI、DRY、LOD

一、KISS原则尽量保持简单。KISS原则是保持代码可读性和可维护性的重要手段。1、考虑逻辑复杂度、实现难点、代码可读性,如不重复造轮子、不过度优化2、本身就复杂的问题,用复杂的方法解决并不违背KISS原则。二、YAGNI原则:You Ain’t Gonna Need It不要做过度设计。如不要去设计当前用不到的功能、不要去编写当前用不到的代码、不引入无用的依赖包。当然,考虑到代码的...

2020-02-17 11:03:35

11、SOLID原则

一个类或者模块只负责完成一个职责(或者功能)。通过避免设计大而全的类,避免将不相关的功能耦合在一起,来提高类的内聚性。同时,类职责单一,类依赖的和被依赖的其他类也会变少,减少了代码的耦合性。不过如果拆分的过细,则会降低内聚性,也会影响代码的可读性。如何判断类的职责是否单一不能脱离具体的应用场景,不同的应用场景、不同阶段的需求背景、不同的业务层面视角下,对一个类是否满足单一职责原则的判断是不一...

2020-02-07 17:45:01

25、软件安全-预防账号密码泄露

在软件项目开发时,安全是一个容易被忽略的问题,但又可能会造成严重损失。所以在开发时有必要对安全问题引起重视,防患未然,构建安全软件。一、软件安全问题软件安全问题本质上也是一种技术风险,我们可以借鉴对风险管理的方法来改进软件的安全问题,即风险识别、风险量化、应对计划、风险监控。识别和量化,软件中的安全问题主要分为以下三类:1、恶意输入如SQL注入、XSS攻击。应对方式就是对用户输入的数据...

2020-02-03 13:10:48

23、开发编码篇-Code Review的一些思考

1、目的CR主要承担的责任保证对需求的实现:程序的逻辑,对需求和设计的实现。提高代码质量:可读性、可扩展性、可维护性、重用性、性能、安全等。知识传递。不应主要承担的责任:Code Review不应该承担发现BUG的职责BUG、代码错误应该由 单元测试、功能测试、性能测试、回归测试来保证,BUG主要是单元测试。不应成为保证代码风格和编码风格的手段代码风格和编码规范是死的东西,不应浪...

2020-02-03 12:05:18

22、开发编码篇-源代码管理

分布式版本管理工具的典型代表是Git,整个代码库的副本都可以存储在用户的本地系统上,主存储库关闭或删除,可以很容易的从本地存储库恢复。一、如何用户源代码管理工具?要频繁的提交完整的内容。每次提交后要跑自动化测试。提交的代码要有人审查。二、选择开发流程现在基于源代码管理有三种主要的开发流程:Git flow、Github flow、Gitlab flow。1、Git flow存在两个...

2019-12-30 17:11:43

21、开发编码篇-持续交付

一、持续交付持续交付可以细分为持续集成、持续交付、持续部署三个概念。持续交付未来会像源代码管理一样,成为开发团队的标配。1、持续集成 continuous integrate持续集成指频繁地将代码集成到主干,在代码集成到主干之前,必须通过自动化测试(单元测试、集成测试、端对端测试等),只要有一个测试案例失败,就不能集成。优点有两个:快速发现错误、防止分支大幅偏离主干。2、持续交付 co...

2019-12-30 16:21:44

20、开发编码篇-开发效率

无论是做软件开发还是做其他工作,一些思维方式和行为方式可以帮助我们提升效率。一、积极主动的态度和行动工作中我们会遇到各种状况,抱怨排斥的心态对于实际工作的改进是没有任何帮助的,如何做到不抱怨,并且积极主动呢?1、想想再回应每个人对外界的刺激都会做出本能的或者习惯性的反应,遇到问题会本能的觉得都是外部原因,即基本归因谬误。而如果一直这样,就会进入恶性循环,无法改进自己,变的越来越消极麻木。...

2019-12-30 16:16:19

19、系统设计篇-技术债务

一、技术债务软件项目中对架构质量和代码质量的透支。在软件开发中,范围不减、成本不加、还想节约时间,就会影响到质量。我们需要清楚的知道项目中有哪些技术债务,以及它给项目带来的收益和利息,这样才能管理好技术债务。技术债务的利息: 在后面对软件做修改的时候,需要额外的时间成本。技术债务不一定都是坏的: 如快速原型开发模型,或为了占领市场刻意欠一些技术债务短期提升开发速度。二、技术债务产生的原因...

2019-12-30 15:13:30

10、面向对象开发

面向对象分析OOA、面向对象设计OOD、面向对象开发OOP是面向对象开发的三个主要环节。一、面向对象分析 OOA面向对象分析的产出是详细的需求描述及解决方案。将笼统的需求细化到足够清晰、可执行。我们需要通过沟通、挖掘、分析、假设、梳理,搞清楚具体的需求有哪些,哪些是现在要做的,哪些是未来可能要做的,哪些是不用考虑做的。针对框架、类库、组件等非业务系统,作为被很多系统复用的通用框架,相比业务...

2019-12-30 14:36:26

9、面向对象-贫血模型、充血模型与MVC架构

贫血模型: 只包含数据结构,不包含业务逻辑的类。如Entity、BO等,是面向过程编程风格。充血模型: 数据和对应的业务逻辑被封装到一个类中。满足面向对象的封装特性,是面向对象编程风格。MVC三层架构: 三个字母分别指Model、View、Controller,即将整个项目分为三层:展示层、逻辑层、数据层。 领域驱动设计(Domain Driven Design): 主要用来指导如何解耦业务...

2019-12-26 16:44:38

18、系统设计篇-架构师

对于程序员来说,并不一定要有一个架构师的头衔,而是心中有大局观,有架构师的思维,从而能够理解架构设计,写出好的程序。一、什么是架构师思维?架构设计,就是控制技术的复杂性,有几种有效的方式:抽象、分治、复用、迭代。1、抽象思维抽象思维是整个架构设计的基础。对需求抽象建模后,可以帮助我们隐藏很多无关紧要的细节,在进行高层次的架构设计时,可以关注在几个主要的模型上,而不必关心模型内的细节实现。...

2019-12-25 14:42:14

8、面向对象-抽象特性:面向接口而非实现编程

越抽象、越顶层、越脱离具体某一实现的设计,越能提高代码的灵活性,越能应对未来的需求变化。好的代码设计,不仅能应对当下的需求,而且在将来需求发生变化的时候,仍然能够在不破坏原有代码设计的情况下灵活应对。基于接口而非实现(又名基于抽象而非实现)编程就是一种非常有效的提高代码质量的手段,上游系统面向接口而非编程,不依赖不稳定的实现细节,这样当实现发生变化的时候,上游系统的代码不需要做改动,以此来降低耦...

2019-12-24 15:45:51

7、面向对象-接口VS抽象类

一、什么是抽象类和接口?1、抽象类:抽象类是一种特殊的类,表示一种is-a关系。语法特性: 抽象类不能被实例化,只能被集成;抽象类可以包含属性和方法;子类继承抽象类,必须实现抽象类中的所有抽象方法。2、接口接口是对行为的抽象,表示一种has-a关系。接口相当于一组协议或契约,表示具有某些功能,接口也称协议(contract)。语法特性: 接口不能包含属性;接口只能声明方法,方法不能包...

2019-12-23 13:48:42

17、系统设计篇-技术选型

技术选型,就是在两个或多个技术方案中选择适合当前项目情况的方案。技术选型不仅是个技术的选择,也是一个和项目情况密切相关的项目决策。要做好技术选型,就是要做好项目决策。一、项目决策需考虑的角度1、时间、范围、成本的约束随着项目的推进,制约项目的三个要素一直在动态变化,需及时根据情况及时调整项目决策。2、分析可行性和风险不考虑可行性、不预估风险,就极有可能导致决策失败。3、利益相关人做决...

2019-12-20 15:59:28

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。