自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 Java.md

​ 三次握手过程:​ 客户端——发送带有SYN标志的数据包——服务端 一次握手 Client进入syn_sent状态​ 服务端——发送带有SYN/ACK标志的数据包——客户端 二次握手 服务端进入syn_rcvd​ 客户端——发送带有ACK标志的数据包——服务端 三次握手 连接就进入Established状态​ 为什么三次:​ 主要是为了建立可靠的通信信道,保证客户端与服务端同时具备发送、接收数据的能力​ 为什么两次不行?​ 1、防止已失效的请求

2022-11-25 10:57:29 1547 1

原创 一、加密算法

一、对称加密加密和解密使用同一个密钥。常见的对称加密算法有 DES、IDEA、AES、国密 SM1 和 SM4。目前AES是国际上最认可的密码学算法。在算力没有突破性进展的前提下,AES 在可预期的未来都是安全的。在加密通信中(如 HTTPS、VPN、SSH 等),通信双方会协商一个加密算法和密钥,对传输的数据进行加密,防止第三方窃取。在数据库存储加密技术中,通信双方将存储空间中的数据进行加密,这样即使硬盘被物理窃取,也不会导致信息丢失。为了避免用户的 Cookie 和隐私信息发生泄漏,在公司内部

2020-06-29 18:57:43 576 1

原创 13、重构

重构是对软件内部结构的改善,目的是在不改变软件的可见行为的情况下,使其更易理解,修改成本更低。 重构代码对一个工程师能力的要求,要比单纯写代码高得多。重构需要能洞察出代码存在的坏味道和设计上的 不足,并且能合理、熟练地利用设计思想、原则、模式、编程规范等理论知识。一、重构的目的:WHY1、保持代码质量的一个有效手段。 2、避免前期过度设计,优秀的代码和架构迭代出来的,随着系统的演进,重构代码不可避免。 3、工程师本身的技术成长。二、重构的对象1、大型重构:对顶层代码设计的重构,包括:系统、模块、代码

2020-06-22 17:40:59 697

原创 1、异步思想

一、异步思想异步思想就是,当执行一项耗时的操作时,不去等待操作结束,而是给这个操作一个命令:当操作完成后,接下来去执行什么。异步模型不会阻塞线程等待资源,而是在资源准备好后,再通知业务代码来完成后续的资源处理逻辑。通过减少或避免线程等待,只用很少的线程就可以达到超高的吞吐能力。异步实现比较复杂,会降低代码的可读性和可维护性。在业务逻辑简单并且需要超高吞吐量的场景,或者必须长时间等待资源的地方,才考虑使用异步模型。IO密集型系统,就比较适合使用异步设计提升性能。二、异步网络通信一个TC

2020-06-19 09:57:21 414

原创 1、选择消息队列MQ

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

2020-03-18 12:44:39 218

原创 3、Java内存模型(JMM)

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

2020-03-17 07:47:04 173

原创 fail-fast、fail-safe

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

2020-03-16 18:13:14 156

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

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

2020-03-11 14:11:08 180

原创 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 174

原创 REST-表现层状态转换

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

2020-02-17 15:43:38 647

原创 12、KISS、YAGNI、DRY、LOD

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

2020-02-17 11:03:35 594

原创 11、SOLID原则

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

2020-02-07 17:45:01 290

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

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

2020-02-03 13:10:48 2160

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

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

2020-02-03 12:05:18 264

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

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

2019-12-30 17:11:43 229 1

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

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

2019-12-30 16:21:44 240

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

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

2019-12-30 16:16:19 180

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

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

2019-12-30 15:13:30 294

原创 10、面向对象开发

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

2019-12-30 14:36:26 328

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

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

2019-12-26 16:44:38 1404

原创 18、系统设计篇-架构师

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

2019-12-25 14:42:14 269

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

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

2019-12-24 15:45:51 315

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

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

2019-12-23 13:48:42 166

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

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

2019-12-20 15:59:28 1864

原创 16、系统设计篇-架构设计

一、为什么软件项目需要架构设计?复杂的软件项目通常有两个特点:需求不确定和技术复杂。技术复杂性体现在:需求让技术复杂、人员让技术复杂、技术本身是复杂的、让软件稳定运行是复杂的,而技术架构可以解决这些问题。架构设计可以降低满足需求和需求变化的开发成本:通过对系统抽象和分解,将复杂系统拆分成若干简单的,让普通程序员也能实现复杂系统。架构设计可以组织人员一起高效协作:拆分系统,独立完成任务后根据...

2019-12-20 14:32:06 1057

原创 6、面向对象-面向过程

一、什么是面向过程编程与面向过程编程语言?面向过程编程: 是一种流程化的编程范式或编程风格。它以过程(方法、函数)做为组织代码的基本单元,以数据(成员变量、属性)与方法相分离为主要的特点,通过拼接一组顺序执行的方法来操作数据完成一项功能。面向过程编程语言: 不支持类和对象两个语法概念,不支持丰富的面向对象编程特性(封装、继承、多态),仅支持面向过程编程的编程语言。如C、Basic语言与面向对...

2019-12-19 10:17:05 216

原创 15、需求分析篇-需求变更

在需求变更这件事上,没有赢家,每个人都是受害者。国内很多软件公司,需求变更是常事,导致开发过程中很多代码需要修改,不得不加班加点赶进度。一、为什么建筑工程中少有需求变更?1、需求的确定性建筑需求是很具象的,各方都明确地知道要什么。而软件工程的需求经常是抽象、模糊、不精确的,随着开发有了雏形才慢慢想清楚真正想要的是什么。2、需求变更的成本建筑项目里的需求变更,我们都很容易和成本挂钩。很...

2019-12-18 16:22:31 841

原创 14、需求分析篇-产品意识

一、程序员的价值程序员的价值通常体现在两个方面:1、所做的产品的价值你做的产品越有价值,你的价值就越大。2、自身的稀缺性价值高的程序员通常在技术之外还有一技之长,如擅长沟通、培训新人、架构设计能力等,可以帮团队创造更大的价值,也因为其难以被取代,从而具有稀缺性。技术水平提升到一定程度后会有瓶颈,提升缓慢,这时候就需要在其他领域同步发展。产品意识与程序员的思维正好互补,拥有产品意识可以帮...

2019-12-18 11:23:35 1840

原创 13、需求分析篇-原型设计

软件项目中,很多问题都和需求有关,比如需求不明确、需求变更等。而原型设计是确认需求、设计产品最重要的沟通工具。一、原型设计的发展历史原型设计最初是一种快速开发模式,逐步演进成来今天的原型设计工具。让产品经理不需要会编程知识,就可以低成本、高效率的确认清楚产品需求。快速原型模型:第一阶段确认界面布局和内容,第二阶段确认交互,第三阶段实现。快速原型模型可以低成本、快速的确认好需求。不过问题是...

2019-12-17 12:11:39 2344

原创 5、面向对象-封装、抽象、继承、多态

每个特性存在的意义和目的,以及要解决哪些编程问题。一、封装 Encapsulation封装也叫数据隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(函数)来访问内部信息或者数据。封装需要编程语言本身提供访问权限控制语法机制,来达成隐藏信息和保护数据的目的。意义:可控性: 如果对类中属性的访问不做限制,那任何代码都可以访问、修改类中的属性。易用性: 类仅仅通过...

2019-12-17 12:01:48 323

原创 4、面向对象

一、面向对象编程OOP、面向对象编程语言OOPL面向对象编程: 是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性作为代码设计和实现的基石。面向对象编程语言: 是有现成的支持类或对象的语法机制,能方便的实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。**判断一个编程语言是否是面向对象编程语言:**面向对象编程中有两个非常重要、非常基...

2019-12-17 11:35:40 157

原创 12、需求分析篇-需求分析

一、什么是需求用户需求:由用户提出来,期望满足自身一定需要的要求,通常原始的用户需求是不能直接做成产品的。产品需求:分析提炼用户真实需求后,提出的符合产品定位的解决方案。需求是整个产品的源头,很多软件项目失败的原因就在于没有做好需求分析,软件中很多浪费也来源于需求没想清楚导致的返工。二、需求分析是要分析什么?需求分析,就是对用户需求进行提炼分析,最终形成产品需求的过程,包括3个步骤。1...

2019-12-16 11:33:48 508

原创 11、项目规划篇-项目文档

一、为什么要写文档?1、帮助写文档的人理清思路先写文档,就需要抛开代码细节,去站在全局思考,写作的过程,就是思考的过程。写文档可以帮助在写代码之前理清思路和想清整体结构,必须努力把心中一些未成型的混乱的想法和概念确定化和具体化,才能写出来。2、便于未来的维护和交接一个正常的项目组,如果需要长期维护,就需要一定的文档,把设计、操作流程、环境配置等内容记录下来,而不能依赖于口口相传。另外把...

2019-12-12 16:42:48 415

原创 3、面向对象、设计原则、设计模式、编程规范、重构之间的关系

一、面向对象现在主流的编程范式有三种:面向过程、面向对象和函数式编程,而面向对象又是其中最主流的。面向对象因其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式编码实现的基础。面向对象的四大特性:封装、抽象、继承、多态面向对象编程与面向过程编程的区别和联系面向对象分析、面向对象设计、面向对象编程接口和抽象类的区别及各自的应用场景基于接口而非...

2019-12-12 10:26:51 281

原创 1、导读-为什么要掌握设计模式相关知识

设计模式和数据结构与算法相比更基础的学科(操作系统、编译原理等)和平时的开发有直接的关系,能更直接的影响开发能力。数据机构和算法可以帮助我们写出高效代码,而设计模式则能帮我们写出可扩展、可读、可维护的高质量代码。1、应对面试中的设计模式相关问题求职面试中,设计模式是被问的频率比较高的一类问题。平时要多注重设计模式相关知识的积累和实践。2、提升复杂模块的设计和开发能力设计模式相关知识(设计...

2019-12-12 10:22:40 121

原创 10、项目规划篇-风险管理

一、什么是风险管理?风险是指不确定但是一旦发生,可能会造成消极影响的事件。风险包括两方面的内容:1、发生后,会造成什么样的损失?2、发生的概率有多大?风险管理就是指在项目进行过程中,识别可能的风险并进行评估和加以监控,从而减少风险对项目的负面影响。二、风险管理重要吗?通过对风险的管理,可以有效降低风险发生的概率,减少风险发生后的损失。对软件项目风险的管理,才是体现项目管理水平的地方。...

2019-12-09 15:53:20 553

原创 9、项目规划篇-项目管理工具

一切工程问题,首先要思考能否通过技术解决,当前技术无法解决的问题,暂时由管理手段代劳,同时不停止寻找技术手段。每一次工具的进化,项目管理工作就可以得到简化,很多早期的管理问题也不再是问题了。一、最初的项目管理软件:项目计划工具MS Project,可以非常好的将所有任务分解、制定计划、按照计划跟踪执行。不足之处:进度不直观,不方便跟踪任务进度。二、基于Ticket的任务跟踪系统一个Ti...

2019-12-09 10:45:09 501

原创 2、代码质量

对程序员来说,辨别代码质量的高低,是一个非常重要的能力,毕竟如果连好代码、烂代码都分不清,又怎么能写出好代码呢?一、如何评价代码质量的高低?代码质量高低是一个综合各种因素得到的结论,我们并不能通过单一维度去评价一段代码的好坏。另外对一段代码质量的评价往往带有很强的主观性,我们很难客观的量化一段代码质量的高低。一般越是有经验的工程师,给出的评价也就越准确。所以这也是说,如果没有人指导的话,自己...

2019-12-05 17:46:20 674

原创 8、项目规划篇-流程与规范

一、为什么要有流程规范提升团队效率从个体看,因为流程规范的存在,确实可能存在效率降低的情况,但从团队的角度看,好的流程规范反而是提升效率的。将好的实践标准化流程化,让大家可以共享经验如代码规范、瀑布模型、敏捷开发借助流程规范,让项目管理从人治到”法治“在项目管理中,过于依赖人的管理,项目经理就会成为瓶颈。好的项目管理,不需要直接管人管事,而是管理好计划和流程规范;项目成员不需要按照项...

2019-12-05 11:34:19 480 1

原创 7、项目规划篇-项目计划

如果没有项目计划,项目很可能会陷入无序和混乱中。项目计划可以帮助我们清楚地看到项目整体的安排,提醒我们目标是什么,知道什么时间做什么事,了解项目过程中是不是出现了偏差而及时调整。一、技术人员也要关系计划吗?1、做计划是很好的培养大局观的方式。需要综合考虑各种因素,并以更高的视角看待当前工作。2、万事皆项目,学会做计划对工作生活的方方面面都会起到积极作用。因为要实现一个目标,就需要对目标进行...

2019-12-02 20:07:42 337

空空如也

空空如也

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

TA关注的人

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